---
# Configuration for Mailman 3
# PostgreSQL initialization must have been done already


#
# SELinux
#
- name: install semanage
  yum: pkg=policycoreutils-python state=present

- name: set the SELinux policy for the configuration directory
  command: semanage fcontext -a -t etc_t "{{ mailman_webui_confdir }}(/.*)?"

- name: set the SELinux policy for the fulltext index
  command: semanage fcontext -a -t httpd_sys_content_t "{{ mailman_webui_basedir }}/kittystore_search_index(/.*)?"

- name: set the SELinux policy for the static files directory
  command: semanage fcontext -a -t httpd_sys_content_t "{{ mailman_webui_basedir }}/static(/.*)?"

- name: set the SELinux policy for the log directory
  command: semanage fcontext -a -t httpd_log_t "/var/log/hyperkitty(/.*)?"

- name: allow Apache to remotely connect to PostgreSQL
  seboolean: name=httpd_can_network_connect_db state=yes persistent=yes

- name: allow Apache to remotely connect to Mailman
  seboolean: name=httpd_can_network_connect state=yes persistent=yes

- name: allow Apache to remotely connect to Memcached
  seboolean: name=httpd_can_network_memcache state=yes persistent=yes


#
# Packages
#
- name: setup the hyperkitty repo
  copy: src=hyperkitty.{{ansible_distribution}}.repo
        dest=/etc/yum.repos.d/hyperkitty.repo

- name: install GPG to validate the key
  yum: state=present name=gnupg

- name: add the GPG key
  rpm_key: state=present key=https://repos.fedorapeople.org/repos/abompard/abompard.asc

- name: install needed packages
  yum: pkg={{ item }} state=present
  with_items:
  - mailman3
  - mailman3-selinux
  - python-psycopg2
  - python-storm-postgresql
  - kittystore
  - hyperkitty
  - hyperkitty-selinux
  - postorius
  - memcached
  - python-pylibmc
  - yum-plugin-post-transaction-actions
  - mailman3-fedmsg-plugin
  tags:
  - packages


#
# Initialize mailman (must be done after settings up the DBs)
#
- name: add mailman to the apache group
  user: name=mailman groups=apache append=yes
  tags:
  - config
  notify:
    - restart mailman3

# for access to the full-text index
- name: add apache to the mailman group
  user: name=apache groups=mailman append=yes
  tags:
  - config
  notify:
    - restart httpd

- name: set the mailman conffile
  template: src=mailman.cfg.j2 dest=/etc/mailman.cfg
  tags:
  - config
  notify:
    - restart mailman3


#
# Logging
#
- name: hyperkitty logging -- directory
  file: path=/var/log/hyperkitty state=directory
        owner=root group=apache mode=2775
- name: hyperkitty logging -- file creation
  copy: content="" dest=/var/log/hyperkitty/hyperkitty.log
        force=no
- name: hyperkitty logging -- file permissions
  file: path=/var/log/hyperkitty/hyperkitty.log state=file
        owner=root group=apache mode=664
- name: hyperkitty logging -- rotation
  copy: src=hyperkitty.logrotate.conf
        dest=/etc/logrotate.d/hyperkitty


#
# HyperKitty + Postorius setup
#

- name: create the configuration directory
  file: path={{ mailman_webui_confdir }} state=directory

- name: install the hyperkitty settings file
  template: src=settings.py.j2
            dest="{{ mailman_webui_confdir }}/settings.py"
            owner=root group=apache mode=0640
  tags:
  - config
  notify:
    - reload apache
    - restart mailman3

- name: install the hyperkitty settings admin file
  template: src=settings_admin.py.j2
            dest="{{ mailman_webui_confdir }}/settings_admin.py"
            owner=root group=root mode=0600
  tags:
  - config

- name: install the hyperkitty settings test file
  copy: src=settings_test.py
        dest="{{ mailman_webui_confdir }}/settings_test.py"
        owner=root group=root mode=0640
  tags:
  - config

- name: install the hyperkitty urls file
  copy: src=urls.py
        dest="{{ mailman_webui_confdir }}/urls.py"
        owner=root group=root mode=0644
  tags:
  - config
  notify:
    - reload apache
    - restart mailman3

- name: install the hyperkitty wsgi file
  copy: src=webui.wsgi
        dest="{{ mailman_webui_confdir }}/webui.wsgi"
        owner=root group=root mode=0644
  tags:
  - config
  notify:
    - reload apache

- name: install the hyperkitty/postorius dummy httpd conf file
  template: src=apache-dummy.conf.j2
            dest=/etc/httpd/conf.d/{{ item }}.conf
  with_items:
    - hyperkitty
    - postorius
  tags:
  - config
  notify:
    - reload apache

- name: install the hyperkitty httpd conf file
  template: src=apache.conf.j2
            dest=/etc/httpd/conf.d/mailman-webui.conf
  tags:
  - config
  notify:
    - reload apache

- name: create the kittystore plain text index dir
  file: path="{{ mailman_webui_basedir }}/kittystore_search_index"
        state=directory owner=mailman group=mailman mode=0755

- name: create the hyperkitty static files dir
  file: path="{{ mailman_webui_basedir }}/static"
        state=directory owner=root group=root mode=0755

#
# Plug HyperKitty into Mailman
#
- name: copy the mailman-hyperkitty conffile
  template: src=mailman-hyperkitty.cfg.j2
            dest="{{ mailman_webui_confdir }}/mailman-hyperkitty.cfg"
  tags:
  - config
  notify:
    - restart mailman3

- name: symlink the hyperkitty conffile in mailman directory
  file: src="{{ mailman_webui_confdir }}/mailman-hyperkitty.cfg"
        dest=/etc/mailman3.d/hyperkitty.cfg state=link
  tags:
  - config
  notify:
    - restart mailman3


#
# Scripts
#
- name: install the migration conffile
  template: src=mailman-migration.conf.j2
            dest=/etc/mailman-migration.conf
            owner=root group=root mode=0644

- name: create the scripts dir
  file: path="{{ mailman_webui_basedir }}/bin"
        state=directory owner=root group=root mode=0755

- name: install the migration environment
  template: src=mailman-migration-path.sh.j2
            dest=/etc/profile.d/mailman-migration-path.sh
            owner=root group=root mode=0644

- name: install the scripts
  copy: src={{ item }} dest="{{ mailman_webui_basedir }}/bin/{{ item }}"
        owner=root group=root mode=0755
  with_items:
  - yamlget
  - pg-give-rights.py
  - post-update.sh
  - import-mm2.py
  - clean-sessions.sh

- name: copy the initial user fixture
  copy: src=postorius.initial-user.json
        dest=/etc/postorius/sites/default/initial-user.json
        owner=root group=apache mode=0640

- name: install the cronjobs
  file: dest=/etc/cron.daily/hyperkitty-clean-sessions.sh
        src="{{ mailman_webui_basedir }}/bin/clean-sessions.sh"
        state=link


# Sync databases
- name: install the post-transaction trigger
  template: src=post-transaction.action.j2
            dest=/etc/yum/post-actions/hyperkitty.action
- name: run the post-update script
  command: "{{ mailman_webui_basedir }}/bin/post-update.sh"


# Postfix
- name: create the postfix aliases
  command: su mailman -s /bin/sh -c "mailman3 aliases"
           creates=/var/lib/mailman3/data/postfix_lmtp.db

# Memcached
- name: set the memcached sysconfig file
  copy: src=memcached.sysconfig dest=/etc/sysconfig/memcached
  notify:
  - restart memcached

- name: start memcached
  service: state=started enabled=yes name=memcached
