ansible-nullmailer.yml (Código fuente)

# Basado en
# - Conversación IRC del 12 de noviembre de 2016
# - https://github.com/skylime/mi-core-base/blob/master/copy/etc/mailer.conf
# - https://github.com/skylime/mi-core-base/blob/master/copy/opt/core/var/mdata-setup/includes/52-nullmailer.sh
# - https://github.com/skylime/mi-core-base/blob/master/copy/var/zoneinit/includes/17-nullmailer.sh

- name: Desinstala Postfix
  pkgin: name=postfix state=absent

- name: Instalar nullmailer
  pkgin: name=nullmailer state=present

- name: Activamos el spool persistente para nullmailer
  zfs: name={{ ansible_mounts.0.device }}/data/nullmailer-spool
       mountpoint=/home/nullmailer-spool
       state=present

# TODO ESTO ES NECESARIO PORQUE 'QUEUE' Y 'TMP' TIENEN
# QUE ESTAR EN EL MISMO SISTEMA DE FICHEROS.
- name: Creamos subdirectorios del spool
  file: name=/home/nullmailer-spool/{{ item }}
        state=directory
        mode=0700 owner=nullmail group=nullmail
  with_items:
    - .
    - queue
    - tmp

# https://stackoverflow.com/questions/27006925/how-to-replace-a-directory-with-a-symlink-using-ansible
- name: Comprobamos el estado de los enlaces simbólicos
  stat: path=/var/spool/nullmailer/{{ item }}
  register: directorios
  with_items:
    - queue
    - tmp

# Lo de "size" no es portable. Funciona en SmartOS. Al menos, en otros
# sistemas fallará de forma segura, porque no será "2".
- name: Eliminamos las carpetas del spool para crear los enlaces simbólicos luego, si están vacías
  file: path=/var/spool/nullmailer/{{ item.item }} state=absent
  when: item.stat.isdir is defined and item.stat.isdir and item.stat.size is defined and item.stat.size==2
  with_items: "{{ directorios.results }}"
  loop_control:
    label: "{{ item.item }}"
  
- name: Creamos enlaces simbólicos al spool persistente
  file: path=/var/spool/nullmailer/{{ item }}
        src=/home/nullmailer-spool/{{ item }}
        state=link
        mode=0700 owner=nullmail group=nullmail
  with_items:
    - queue
    - tmp

- name: Copiamos fichero de configuración de mailer.conf
  copy: src=mailer.conf dest=/etc/mailer.conf

- name: Copiamos el fichero de configuración "remotes" de nullmailer
  copy: src=remotes dest=/opt/local/etc/nullmailer/remotes

- name: Copiamos el fichero de configuración "adminaddr" de nullmailer
  copy: src=adminaddr dest=/opt/local/etc/nullmailer/adminaddr

- name: Identificamos el nombre del host para nullmailer
  shell: echo `/usr/bin/hostname`.jcea.es > /opt/local/etc/nullmailer/me
  args:
    creates: /opt/local/etc/nullmailer/me

- name: Preparamos el "wrapping" para nullmailer
  command: mv /opt/local/libexec/nullmailer/nullmailer-inject
              /opt/local/libexec/nullmailer/nullmailer-inject2
  args:
    creates: /opt/local/libexec/nullmailer/nullmailer-inject2

- name: Subimos el wrapper
  copy: src=nullmailer-inject
        dest=/opt/local/libexec/nullmailer/nullmailer-inject
        mode=0755

- name: Activa nullmailer
  service: name=nullmailer enabled=yes state=started