From 761f9289574582aa7032dba186d8d8fb6f63b92f Mon Sep 17 00:00:00 2001 From: Anthony Ruhier Date: Thu, 21 Sep 2017 01:56:00 +0200 Subject: [PATCH] Add compatibility with more distributions --- defaults/main.yml | 9 --------- handlers/main.yml | 23 ++++++++++++++--------- meta/main.yml | 2 ++ tasks/dist_vars.yml | 20 ++++++++++++++++++++ tasks/install.yml | 31 +++++++++++++++++++++++++++++++ tasks/main.yml | 35 +++++------------------------------ vars/Alpine.yml | 22 ++++++++++++++++++++++ vars/Archlinux.yml | 22 ++++++++++++++++++++++ vars/Debian.yml | 22 ++++++++++++++++++++++ vars/RedHat.yml | 20 ++++++++++++++++++++ vars/default.yml | 22 ++++++++++++++++++++++ vars/main.yml | 3 +++ 12 files changed, 183 insertions(+), 48 deletions(-) create mode 100644 tasks/dist_vars.yml create mode 100644 tasks/install.yml create mode 100644 vars/Alpine.yml create mode 100644 vars/Archlinux.yml create mode 100644 vars/Debian.yml create mode 100644 vars/RedHat.yml create mode 100644 vars/default.yml create mode 100644 vars/main.yml diff --git a/defaults/main.yml b/defaults/main.yml index 04d38f2..cc234e7 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -28,15 +28,6 @@ dhcpd_mode: 'server' dhcpd_ipversion: '4' -# .. envvar:: dhcpd_base_packages_map -# -# What packages should be installed, depending on mode of operation -dhcpd_base_packages_map: - 'server': [ 'isc-dhcp-server' ] - 'relay': [ 'isc-dhcp-relay' ] - 'probe': [] - - # -------------------------------- # ISC DHCP Relay configuration # -------------------------------- diff --git a/handlers/main.yml b/handlers/main.yml index db77015..85ff4cd 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,23 +1,28 @@ --- -- name: Restart isc-dhcp-server +- name: Restart dhcp server service: - name: 'isc-dhcp-server' + name: '{{ item }}' state: 'restarted' + with_items: "{{ dhcpd_services.server }}" -- name: Restart isc-dhcp-relay +- name: Restart dhcp relay service: - name: 'isc-dhcp-relay' + name: '{{ item }}' state: 'restarted' + with_items: "{{ dhcpd_services.relay }}" -- name: Restart dhcp-probe +- name: Restart dhcp probe service: - name: 'dhcp-probe' + name: '{{ item }}' state: 'stopped' - notify: [ 'Start dhcp-probe' ] + with_items: "{{ dhcpd_services.probe }}" + notify: [ 'Start dhcp probe' ] -- name: Start dhcp-probe +- name: Start dhcp probe service: - name: 'dhcp-probe' + name: '{{ item }}' state: 'started' + with_items: "{{ dhcpd_services.probe }}" +# vim: set ts=2 sw=2: diff --git a/meta/main.yml b/meta/main.yml index 497c727..645627c 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -17,6 +17,8 @@ galaxy_info: - name: Debian versions: - all + - name: Archlinux + - name: Alpine categories: - networking - system diff --git a/tasks/dist_vars.yml b/tasks/dist_vars.yml new file mode 100644 index 0000000..cbfc849 --- /dev/null +++ b/tasks/dist_vars.yml @@ -0,0 +1,20 @@ +--- + +- name: Include distribution specific variables + include_vars: + file: "{{ item }}" + name: _os_specific + with_first_found: + - "{{ ansible_distribution_release }}.yml" + - "{{ ansible_distribution }}.yml" + - "{{ ansible_os_family }}.yml" + - "default.yml" + +- name: Set OS specific vars if undefined + set_fact: { + "{{ item.key }}": + "{{ hostvars[inventory_hostname][item.key] | default(item.value) }}" + } + with_dict: "{{ _os_specific }}" + +# vim: set ts=2 sw=2: diff --git a/tasks/install.yml b/tasks/install.yml new file mode 100644 index 0000000..03ba462 --- /dev/null +++ b/tasks/install.yml @@ -0,0 +1,31 @@ +--- + +- name: Configure DHCP relay in debconf + debconf: + name: 'isc-dhcp-relay' + question: 'isc-dhcp-relay/{{ item.key }}' + vtype: 'string' + value: '{{ item.value }}' + with_dict: + servers: '{{ dhcpd_relay_servers | join(" ") }}' + interfaces: '{{ dhcpd_relay_interfaces | join(" ") }}' + options: '{{ dhcpd_relay_options }}' + register: dhcpd_register_relay_debconf + when: + - ansible_os_family == "Debian" + - dhcpd_mode == 'relay' + +- name: Install DHCP packages + package: + name: '{{ item }}' + state: 'present' + with_flattened: + - '{{ dhcpd_base_packages_map[dhcpd_mode] }}' + - '{{ dhcpd_base_packages_map["probe"] }}' + +- name: Reconfigure ISC DHCP relay + command: dpkg-reconfigure --frontend=noninteractive isc-dhcp-relay + notify: [ 'Restart dhcp relay' ] + when: + - ansible_os_family == "Debian" + - dhcpd_register_relay_debconf|d() and dhcpd_register_relay_debconf.changed diff --git a/tasks/main.yml b/tasks/main.yml index 0d76d98..2a62b13 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,31 +1,7 @@ --- -- name: Configure DHCP relay in debconf - debconf: - name: 'isc-dhcp-relay' - question: 'isc-dhcp-relay/{{ item.key }}' - vtype: 'string' - value: '{{ item.value }}' - with_dict: - servers: '{{ dhcpd_relay_servers | join(" ") }}' - interfaces: '{{ dhcpd_relay_interfaces | join(" ") }}' - options: '{{ dhcpd_relay_options }}' - register: dhcpd_register_relay_debconf - when: dhcpd_mode == 'relay' - -- name: Install DHCP packages - apt: - name: '{{ item }}' - state: 'present' - install_recommends: False - with_flattened: - - '{{ dhcpd_base_packages_map[dhcpd_mode] }}' - - [ '{{ "dhcp-probe" if (dhcpd_probe|d() and dhcpd_probe) else [] }}' ] - -- name: Reconfigure ISC DHCP relay - command: dpkg-reconfigure --frontend=noninteractive isc-dhcp-relay - notify: [ 'Restart isc-dhcp-relay' ] - when: dhcpd_register_relay_debconf|d() and dhcpd_register_relay_debconf.changed +- include: dist_vars.yml +- include: install.yml - name: Get list of nameservers configured in /etc/resolv.conf shell: grep -E '^nameserver\s' /etc/resolv.conf | awk '{print $2}' @@ -46,8 +22,8 @@ owner: 'root' group: 'root' mode: '0644' - with_items: [ 'etc/default/isc-dhcp-server', 'etc/dhcp/dhcpd.conf' ] - notify: [ 'Restart isc-dhcp-server' ] + with_items: "{{ dhcpd_templates }}" + notify: [ 'Restart dhcp server' ] register: dhcpd_register_config when: dhcpd_mode == 'server' @@ -59,7 +35,7 @@ group: 'root' mode: '0644' with_items: '{{ dhcpd_includes }}' - notify: [ 'Restart isc-dhcp-server' ] + notify: [ 'Restart dhcp server' ] when: ((item is defined and item) and dhcpd_mode == 'server' and (dhcpd_register_config is defined and dhcpd_register_config.changed)) @@ -69,4 +45,3 @@ - include: dhcp-probe.yml when: dhcpd_probe|d() and dhcpd_probe - diff --git a/vars/Alpine.yml b/vars/Alpine.yml new file mode 100644 index 0000000..998daa3 --- /dev/null +++ b/vars/Alpine.yml @@ -0,0 +1,22 @@ +--- + +dhcpd_base_packages_map: + 'server': + - 'dhcp' + 'relay': + - 'dhcp' + 'probe': + - 'dhcp-probe' + +dhcpd_services: + 'server': + - 'dhcpd' + 'relay': + - 'dhcpd' + 'probe': + - 'dhcp-probe' + +dhcpd_templates: + - 'etc/dhcp/dhcpd.conf' + +# vim: set ts=2 sw=2: diff --git a/vars/Archlinux.yml b/vars/Archlinux.yml new file mode 100644 index 0000000..e460024 --- /dev/null +++ b/vars/Archlinux.yml @@ -0,0 +1,22 @@ +--- + +dhcpd_base_packages_map: + 'server': + - 'dhcp' + 'relay': + - 'dhcp' + 'probe': [] + +dhcpd_services: + 'server': + - 'dhcpd4' + - 'dhcpd6' + 'relay': + - 'dhcpd4' + - 'dhcpd6' + 'probe': [] + +dhcpd_templates: + - 'etc/dhcp/dhcpd.conf' + +# vim: set ts=2 sw=2: diff --git a/vars/Debian.yml b/vars/Debian.yml new file mode 100644 index 0000000..7f4858c --- /dev/null +++ b/vars/Debian.yml @@ -0,0 +1,22 @@ +--- + +dhcpd_base_packages_map: + 'server': + - 'isc-dhcp-server' + 'relay': + - 'isc-dhcp-relay' + 'probe': [] + +dhcpd_services: + 'server': + - 'isc-dhcp-server' + 'relay': + - 'isc-dhcp-relay' + 'probe': + - 'dhcp-probe' + +dhcpd_templates: + - 'etc/default/isc-dhcp-server' + - 'etc/dhcp/dhcpd.conf' + +# vim: set ts=2 sw=2: diff --git a/vars/RedHat.yml b/vars/RedHat.yml new file mode 100644 index 0000000..0b89332 --- /dev/null +++ b/vars/RedHat.yml @@ -0,0 +1,20 @@ +--- + +dhcpd_base_packages_map: + 'server': + - 'dhcp' + 'relay': + - 'dhcp' + 'probe': [] + +dhcpd_services: + 'server': + - 'dhcpd' + 'relay': + - 'dhcpd' + 'probe': [] + +dhcpd_templates: + - 'etc/dhcp/dhcpd.conf' + +# vim: set ts=2 sw=2: diff --git a/vars/default.yml b/vars/default.yml new file mode 100644 index 0000000..e460024 --- /dev/null +++ b/vars/default.yml @@ -0,0 +1,22 @@ +--- + +dhcpd_base_packages_map: + 'server': + - 'dhcp' + 'relay': + - 'dhcp' + 'probe': [] + +dhcpd_services: + 'server': + - 'dhcpd4' + - 'dhcpd6' + 'relay': + - 'dhcpd4' + - 'dhcpd6' + 'probe': [] + +dhcpd_templates: + - 'etc/dhcp/dhcpd.conf' + +# vim: set ts=2 sw=2: diff --git a/vars/main.yml b/vars/main.yml new file mode 100644 index 0000000..4acbd93 --- /dev/null +++ b/vars/main.yml @@ -0,0 +1,3 @@ +--- + +# vim: set ts=2 sw=2: