--- - name: Set-up fixtures hosts: localhost connection: local gather_facts: false tasks: - name: Initialise CA hierarchy command: "gimmecert init" args: creates: ".gimmecert/ca/level1.cert.pem" chdir: "tests/data/" - name: Generate server private keys and certificates command: args: chdir: "tests/data/" creates: ".gimmecert/server/{{ item.name }}.cert.pem" argv: - "gimmecert" - "server" - "{{ item.name }}" - "{{ item.fqdn }}" - "{{ item.fqdn[:item.fqdn.rfind('-')] }}" with_items: - name: ldap-server_ldap fqdn: ldap-server - name: parameters-mandatory-stretch64_imap fqdn: parameters-mandatory-stretch64 - name: parameters-mandatory-stretch64_smtp fqdn: parameters-mandatory-stretch64 - name: parameters-optional-stretch64_imap fqdn: parameters-optional-stretch64 - name: parameters-optional-stretch64_smtp fqdn: parameters-optional-stretch64 - name: Set-up link to generated X.509 material file: src: ".gimmecert" dest: "tests/data/x509" state: link - name: Prepare hosts: all gather_facts: false tasks: - name: Install python for Ansible raw: test -e /usr/bin/python3 || (apt -y update && apt install -y python3-minimal) become: true changed_when: false - hosts: all become: true tasks: - name: Update all caches to avoid errors due to missing remote archives apt: update_cache: true changed_when: false - name: Install tools for testing apt: name: - gnutls-bin - nmap state: present - hosts: stretch become: true tasks: - name: Set-up the hosts file lineinfile: path: /etc/hosts regexp: "^{{ item.key }}" line: "{{ item.key }} {{ item.value }}" owner: root group: root mode: 0644 state: present with_dict: 10.31.127.10: "ldap-server backup-server" 10.31.127.22: "client1 smtp-server-requiring-tls" 10.31.127.23: "client2 smtp-server-refusing-tls" 10.31.127.32: "parameters-mandatory parameters-mandatory-stretch64" 10.31.127.33: "parameters-optional parameters-optional-stretch64" - hosts: client become: true tasks: - name: Install SWAKS for testing SMTP capability apt: name: swaks state: present - name: Install pip apt: name: python3-pip state: present - name: Install IMAP CLI tool pip: name: Imap-CLI==0.7 state: present - name: Install tool for testing SIEVE apt: name: sieve-connect state: present - name: Install tool for testing TCP connectivity apt: name: hping3 state: present - name: Deploy IMAP CLI configuration copy: src: "tests/data/{{ item }}" dest: "/home/vagrant/{{ item }}" owner: vagrant group: vagrant mode: 0600 with_items: - imapcli-parameters-mandatory-john_doe.conf - imapcli-parameters-mandatory-jane_doe.conf - imapcli-parameters-optional-john_doe.conf - imapcli-parameters-optional-jane_doe.conf - name: Deploy CA certificate copy: src: tests/data/x509/ca/level1.cert.pem dest: /usr/local/share/ca-certificates/testca.crt owner: root group: root mode: 0644 notify: - Update CA certificate cache - name: Install and configure Postfix for testing mail sending from managed servers block: - name: Install Postfix apt: name: postfix state: present - name: Purge Exim apt: name: "exim4*" state: absent purge: true - name: Configure Postfix template: src: "helper_smtp_main.cf.j2" dest: "/etc/postfix/main.cf" owner: root group: root mode: 0644 notify: - Restart Postfix - name: Enable Postfix service service: name: postfix state: started enabled: true handlers: - name: Update CA certificate cache command: /usr/sbin/update-ca-certificates --fresh - name: Restart Postfix service: name: postfix state: restarted - hosts: ldap-server become: true roles: - ldap_server - backup_server - hosts: ldap-server become: true tasks: - name: Create LDAP accounts for testing ldap_entry: dn: "{{ item.dn }}" objectClass: "{{ item.objectClass }}" attributes: "{{ item.attributes }}" with_items: # Users. - dn: uid=john,ou=people,dc=local objectClass: - inetOrgPerson - simpleSecurityObject attributes: userPassword: johnpassword uid: john cn: John Doe sn: Doe mail: john.doe@domain1 - dn: uid=jane,ou=people,dc=local objectClass: - inetOrgPerson - simpleSecurityObject attributes: userPassword: janepassword uid: jane cn: Jane Doe sn: Doe mail: jane.doe@domain2 - dn: uid=nomail,ou=people,dc=local objectClass: - inetOrgPerson - simpleSecurityObject attributes: userPassword: nomailpassword uid: nomail cn: No Mail sn: Mail mail: nomail@domain1 # Domains - dn: dc=domain1,ou=domains,ou=mail,ou=services,dc=local objectClass: dNSDomain attributes: dc: domain1 - dn: dc=domain2,ou=domains,ou=mail,ou=services,dc=local objectClass: dNSDomain attributes: dc: domain2 # Aliases - dn: cn=postmaster@domain1,ou=aliases,ou=mail,ou=services,dc=local objectClass: nisMailAlias attributes: cn: postmaster@domain1 rfc822MailMember: john.doe@domain1 - dn: cn=webmaster@domain2,ou=aliases,ou=mail,ou=services,dc=local objectClass: nisMailAlias attributes: cn: webmaster@domain2 rfc822MailMember: jane.doe@domain2 - name: Add test accounts to correct group ldap_attr: dn: "cn=mail,ou=groups,dc=local" name: uniqueMember state: exact values: - uid=john,ou=people,dc=local - uid=jane,ou=people,dc=local - hosts: parameters-mandatory,parameters-optional become: true tasks: - name: Create group for user used for local mail delivery testing group: name: localuser - name: Create user for local mail delivery testing user: name: localuser group: localuser