diff --git a/defaults/main.yml b/defaults/main.yml index 9f04f6a25ba1bc9a78499df45a1250087e8f33be..93fe5450660552c49b5ba85804f828e7c98386fc 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,2 +1,4 @@ --- # defaults file for dhcp + +dhcp_mail_alias: root diff --git a/handlers/main.yml b/handlers/main.yml index db2863518a3eb913453baace6f99c632607da2da..52b3170dd594c48a55e0dd6e619607cca67bd42a 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,2 +1,11 @@ --- # handlers file for dhcp + +- name: Update SMTPd database + when: ansible_os_family == 'OpenBSD' + command: /usr/bin/newaliases + +- name: Restart ISC DHCP server + service: + name: '{{ dhcp_service[ansible_os_family] }}' + state: restarted diff --git a/tasks/main.yml b/tasks/main.yml index bf4282fce832a0becaa2976d17fef620cc7fc3cf..0ca5564ef8830e566f822f91598169c5ed76703e 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -4,5 +4,35 @@ - name: Assertions assert: that: - - ansible_os_family in ['OpenBSD', 'Debian'] - - ansible_distribution_release in ['6.0', 'xenial'] + - ansible_os_family in dhcp_service + - ansible_os_family in dhcp_user + - ansible_os_family in aliases_file + +- name: APT install + apt: + name: isc-dhcp-server + state: present + update_cache: yes + cache_valid_time: 3600 + +- name: Add mail alias + when: dhcp_mail_alias is defined + lineinfile: + dest: '{{ aliases_file[ansible_os_family] }}' + create: yes + line: '{{ dhcp_user[ansible_os_family] }}: {{ dhcp_mail_alias }}' + regexp: '{{ dhcp_user[ansible_os_family] }}:' + notify: + - Update SMTPd database + +- name: Enable service + service: + name: '{{ dhcp_service[ansible_os_family] }}' + state: running + enabled: yes + +- meta: flush_handlers + +- name: Wait for service to come online + wait_for: + port: 67 diff --git a/tests/test_dhcp.py b/tests/test_dhcp.py new file mode 100644 index 0000000000000000000000000000000000000000..f898616cbc14f489994ae85faeb716f8edd95b96 --- /dev/null +++ b/tests/test_dhcp.py @@ -0,0 +1,16 @@ +from testinfra.utils.ansible_runner import AnsibleRunner + +testinfra_hosts = AnsibleRunner('.molecule/ansible_inventory').get_hosts('all') + + +def test_dhcp_service(Service, Socket, SystemInfo): + if SystemInfo.type == 'openbsd': + service = Service('dhcpd') + elif SystemInfo.type == 'debian': + service = Service('isc-dhcp-server') + assert service.is_running + try: + assert service.is_enabled + except NotImplementedError: + pass + assert Socket('tcp://0.0.0.0:80').is_listening diff --git a/vars/main.yml b/vars/main.yml index 2fb59b1189ef5ad9ce80ae0a8f029187d2c35baa..81f8915ab2c786e91fcafdaacf81207f7207bf74 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -1,2 +1,14 @@ --- # vars file for dhcp + +dhcp_service: + OpenBSD: dhcpd + Debian: isc-dhcp-server + +aliases_file: + OpenBSD: /etc/mail/aliases + Debian: /etc/aliases + +dhcp_user: + OpenBSD: _dhcp + Debian: dhcp