From 080aaeed719f1a369c82ced7acb3bf407b9f6dad Mon Sep 17 00:00:00 2001
From: Adar Nimrod <nimrod@shore.co.il>
Date: Sat, 17 Dec 2016 16:17:40 +0200
Subject: [PATCH] - Start work on role (just installation, mail alias, service
 handling, minimal tests) - Better assertions.

---
 defaults/main.yml  |  2 ++
 handlers/main.yml  |  9 +++++++++
 tasks/main.yml     | 34 ++++++++++++++++++++++++++++++++--
 tests/test_dhcp.py | 16 ++++++++++++++++
 vars/main.yml      | 12 ++++++++++++
 5 files changed, 71 insertions(+), 2 deletions(-)
 create mode 100644 tests/test_dhcp.py

diff --git a/defaults/main.yml b/defaults/main.yml
index 9f04f6a..93fe545 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 db28635..52b3170 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 bf4282f..0ca5564 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 0000000..f898616
--- /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 2fb59b1..81f8915 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
-- 
GitLab