From 4039457bd629b6a2dd3acfc47761e19b2684af05 Mon Sep 17 00:00:00 2001 From: RedRampage Date: Wed, 24 Jun 2015 15:35:31 +0300 Subject: [PATCH 1/4] Added support of multiple MACs for host statements Fixed primary declaration in failover statements. Small bugfix in group expanding macros. --- templates/etc/dhcp/macros.j2 | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/templates/etc/dhcp/macros.j2 b/templates/etc/dhcp/macros.j2 index c7eb05f..a7f371e 100644 --- a/templates/etc/dhcp/macros.j2 +++ b/templates/etc/dhcp/macros.j2 @@ -47,16 +47,16 @@ group { {% endif %} {% if group.groups is defined and group.groups %} {% for group in group.groups %} -{{ print.group(group) | indent(8, true) }} +{{ group(group) | indent(8, true) }} {% endfor %} {% endif %} {% if group.subnets is defined and group.subnets %} {% for subnet in group.subnets %} -{{ print.subnet(subnet) | indent(8, true) }} +{{ subnet(subnet) | indent(8, true) }} {% endfor %} {% endif %} {% if group.hosts is defined and group.hosts %} -{{ print.hosts(group.hosts) | indent(8, true) }} +{{ hosts(group.hosts) | indent(8, true) }} {% endif %} } {% endmacro %} @@ -113,7 +113,7 @@ subnet {{ subnet.subnet | ipaddr('cidr') | ipaddr('address') }} netmask 255.255. {% endfor %} {% endif %} {% if subnet.hosts is defined and subnet.hosts %} -{{ print.hosts(subnet.hosts) | indent(8, true) }} +{{ hosts(subnet.hosts) | indent(8, true) }} {% endif %} } {% endmacro %} @@ -129,6 +129,23 @@ include "{{ hosts }}"; {% if host.comment is defined and host.comment %} # {{ host.comment }} {% endif %} +{# Hack to support host with multiple MACs #} +{% if host.ethernet is defined and host.ethernet is sequence and not host.ethernet is string %} +{% for hwaddr in host.ethernet %} +host {{ host.hostname }}-hw{{ loop.index }} { +{% if host.options is defined and host.options %} +{{ host.options | indent(8,true) }} +{% endif %} + hardware ethernet {{ hwaddr }}; +{% if not host.options is defined or (host.options and not 'host-name' in host.options) %} + option host-name = {{ host.hostname }}; +{% endif %} +{% if host.address is defined and host.address %} + fixed-address {{ host.address }}; +{% endif %} +} +{% endfor %} +{% else %} host {{ host.hostname }} { {% if host.options is defined and host.options %} {{ host.options | indent(8,true) }} @@ -144,6 +161,7 @@ host {{ host.hostname }} { {% endif %} {% endif %} } +{% endif %} {% endfor %} {% endif %} {% endmacro %} @@ -156,7 +174,7 @@ host {{ host.hostname }} { # {{ failover.comment }} {% endif %} failover peer "{{ failover.failover }}" { -{% if failover.primary is defined and failover.primary == inventory_hostname %} +{% if failover.primary is defined and failover.primary in ansible_all_ipv4_addresses %} primary; mclt {{ failover.mclt|default(3600) }}; {% if failover.primary_fo_addr is defined and failover.primary_fo_addr %} From 811460752ac648014d07aeefe1ce2227fd0e89bf Mon Sep 17 00:00:00 2001 From: RedRampage Date: Wed, 24 Jun 2015 15:52:21 +0300 Subject: [PATCH 2/4] Documentation for multiple MACs --- docs/defaults-configuration.rst | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/defaults-configuration.rst b/docs/defaults-configuration.rst index 3355182..a01ce6f 100644 --- a/docs/defaults-configuration.rst +++ b/docs/defaults-configuration.rst @@ -289,7 +289,8 @@ hosts. Each dict can have following keys: Name of the host ``ethernet`` - Ethernet address of this host + Ethernet address of this host, if host has multiple aggregated(bonded) links + you may specify their ethernet addresses as a list. ``address`` IP address of this host @@ -310,6 +311,11 @@ Examples:: - hostname: 'examplehost' address: '10.0.10.1' ethernet: '00:00:00:00:00:00' + - hostname: 'bondedhost' + address: '10.0.10.2' + ethernet: + - '00:00:00:00:00:01' + - '00:00:00:00:00:02' .. _dhcpd_includes: From 3d41653a3a8c93d774f1792a24210f58ee72d2bb Mon Sep 17 00:00:00 2001 From: RedRampage Date: Tue, 30 Jun 2015 01:01:35 +0300 Subject: [PATCH 3/4] dhcpd_probe off by default; Added default for IPv6 --- defaults/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index 79bdcff..a2c922c 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -242,7 +242,7 @@ dhcpd_subnet_default: routers: '{{ ansible_default_ipv4.gateway | default("") }}' comment: 'Generated automatically by Ansible' '6': - subnet: '{{ ansible_default_ipv6.address + "/" + ansible_default_ipv6.prefix }}' + subnet: '{{ ansible_default_ipv6.address|default("::1") + "/" + ansible_default_ipv6.prefix }}' comment: 'Generated automatically by Ansible' @@ -270,7 +270,7 @@ dhcpd_failovers: [] # .. envvar:: dhcpd_probe # # Enable or disable ``dhcp-probe`` script -dhcpd_probe: True +dhcpd_probe: False # .. envvar:: dhcpd_probe_mail_to From e42f56b52226cf1da9f5c0f43f7c32c202a8c5b0 Mon Sep 17 00:00:00 2001 From: RedRampage Date: Tue, 30 Jun 2015 01:05:27 +0300 Subject: [PATCH 4/4] Distinct naming of dhcpd macros --- templates/etc/dhcp/dhcpd.conf.j2 | 18 ++++++++-------- templates/etc/dhcp/macros.j2 | 37 ++++++++++++++++---------------- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/templates/etc/dhcp/dhcpd.conf.j2 b/templates/etc/dhcp/dhcpd.conf.j2 index 4890737..d366ff4 100644 --- a/templates/etc/dhcp/dhcpd.conf.j2 +++ b/templates/etc/dhcp/dhcpd.conf.j2 @@ -1,4 +1,4 @@ -{% import 'macros.j2' as print with context %} +{% import 'macros.j2' as tpl with context %} # {{ ansible_managed }} {% if dhcpd_authoritative is defined and dhcpd_authoritative %} @@ -30,22 +30,22 @@ log-facility {{ dhcpd_log_facility }}; {% include 'ipxe.j2' %} {% if dhcpd_keys is defined and dhcpd_keys %} {% for key in dhcpd_keys %} -{{ print.key(key) }} +{{ tpl.print_key(key) }} {% endfor %} {% endif %} {% if dhcpd_zones is defined and dhcpd_zones %} {% for zone in dhcpd_zones %} -{{ print.zone(zone) }} +{{ tpl.print_zone(zone) }} {% endfor %} {% endif %} {% if dhcpd_classes is defined and dhcpd_classes %} {% for class in dhcpd_classes %} -{{ print.class(class) }} +{{ tpl.print_class(class) }} {% endfor %} {% endif %} {% if dhcpd_failovers is defined and dhcpd_failovers %} {% for failover in dhcpd_failovers %} -{{ print.failover(failover) }} +{{ tpl.print_failover(failover) }} {% endfor %} {% endif %} {% if dhcpd_shared_networks is defined and dhcpd_shared_networks %} @@ -63,7 +63,7 @@ shared-network "{{ network.name }}" { {% endif %} {% for subnet in network.subnets %} -{{ print.subnet(subnet) | indent(8,true) }} +{{ tpl.print_subnet(subnet) | indent(8,true) }} {% endfor %} } @@ -72,16 +72,16 @@ shared-network "{{ network.name }}" { {% endif %} {% if dhcpd_groups is defined and dhcpd_groups %} {% for group in dhcpd_groups %} -{{ print.group(group) }} +{{ tpl.print_group(group) }} {% endfor %} {% endif %} {% if dhcpd_subnets is defined and dhcpd_subnets %} {% for subnet in dhcpd_subnets %} -{{ print.subnet(subnet) }} +{{ tpl.print_subnet(subnet) }} {% endfor %} {% endif %} {% if dhcpd_hosts is defined and dhcpd_hosts %} -{{ print.hosts(dhcpd_hosts) }} +{{ tpl.print_hosts(dhcpd_hosts) }} {% endif %} {% if dhcpd_includes is defined and dhcpd_includes %} {% for include in dhcpd_includes %} diff --git a/templates/etc/dhcp/macros.j2 b/templates/etc/dhcp/macros.j2 index a7f371e..0b87a1a 100644 --- a/templates/etc/dhcp/macros.j2 +++ b/templates/etc/dhcp/macros.j2 @@ -2,9 +2,10 @@ # List of macros for ISC DHCP configuration, IPv4 # =============================================== # -# ---- Macro: print.class() ---- +# ---- Macro: print_class() ---- #} -{% macro class(class) %} +{% set print = self %} +{% macro print_class(class) %} {% if class.comment is defined and class.comment %} # {{ class.comment }} {% endif %} @@ -32,9 +33,9 @@ subclass "{{ class.class }}" {{ key }}; {% endmacro %} {# # -# ---- Macro: print.group() ---- +# ---- Macro: print_group() ---- #} -{% macro group(group) %} +{% macro print_group(group) %} {% if group.comment is defined and group.comment %} # {{ group.comment }} {% endif %} @@ -47,24 +48,24 @@ group { {% endif %} {% if group.groups is defined and group.groups %} {% for group in group.groups %} -{{ group(group) | indent(8, true) }} +{{ print_group(group) | indent(8, true) }} {% endfor %} {% endif %} {% if group.subnets is defined and group.subnets %} {% for subnet in group.subnets %} -{{ subnet(subnet) | indent(8, true) }} +{{ print_subnet(subnet) | indent(8, true) }} {% endfor %} {% endif %} {% if group.hosts is defined and group.hosts %} -{{ hosts(group.hosts) | indent(8, true) }} +{{ print_hosts(group.hosts) | indent(8, true) }} {% endif %} } {% endmacro %} {# # -# ---- Macro: print.subnet() ---- +# ---- Macro: print_subnet() ---- #} -{% macro subnet(subnet) %} +{% macro print_subnet(subnet) %} {% if subnet.comment is defined and subnet.comment %} # {{ subnet.comment }} {% endif %} @@ -113,15 +114,15 @@ subnet {{ subnet.subnet | ipaddr('cidr') | ipaddr('address') }} netmask 255.255. {% endfor %} {% endif %} {% if subnet.hosts is defined and subnet.hosts %} -{{ hosts(subnet.hosts) | indent(8, true) }} +{{ print_hosts(subnet.hosts) | indent(8, true) }} {% endif %} } {% endmacro %} {# # -# ---- Macro: print.hosts() ---- +# ---- Macro: print_hosts() ---- #} -{% macro hosts(hosts) %} +{% macro print_hosts(hosts) %} {% if hosts is string %} include "{{ hosts }}"; {% else %} @@ -167,9 +168,9 @@ host {{ host.hostname }} { {% endmacro %} {# # -# ---- Macro: print.failover() ---- +# ---- Macro: print_failover() ---- #} -{% macro failover(failover) %} +{% macro print_failover(failover) %} {% if failover.comment is defined and failover.comment %} # {{ failover.comment }} {% endif %} @@ -229,9 +230,9 @@ failover peer "{{ failover.failover }}" { {% endmacro %} {# # -# ---- Macro: print.key() ---- +# ---- Macro: print_key() ---- #} -{% macro key(key) %} +{% macro print_key(key) %} {% if key.comment is defined and key.comment %} # {{ key.comment }} {% endif %} @@ -242,9 +243,9 @@ key {{ key.key }} { {% endmacro %} {# # -# ---- Macro: print.zone() ---- +# ---- Macro: print_zone() ---- #} -{% macro zone(zone) %} +{% macro print_zone(zone) %} {% if zone.comment is defined and zone.comment %} # {{ zone.comment }} {% endif %}