Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support of multiple MAC addresses for host declaration and a little fix to failover #11

Merged
merged 4 commits into from
Jun 29, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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'


Expand Down Expand Up @@ -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
Expand Down
8 changes: 7 additions & 1 deletion docs/defaults-configuration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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:

Expand Down
18 changes: 9 additions & 9 deletions templates/etc/dhcp/dhcpd.conf.j2
Original file line number Diff line number Diff line change
@@ -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 %}
Expand Down Expand Up @@ -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 %}
Expand All @@ -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 %}
}

Expand All @@ -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 %}
Expand Down
57 changes: 38 additions & 19 deletions templates/etc/dhcp/macros.j2
Original file line number Diff line number Diff line change
Expand Up @@ -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 %}
Expand Down Expand Up @@ -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 %}
Expand All @@ -47,24 +48,24 @@ group {
{% endif %}
{% if group.groups is defined and group.groups %}
{% for group in group.groups %}
{{ print.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 %}
{{ print.subnet(subnet) | indent(8, true) }}
{{ print_subnet(subnet) | indent(8, true) }}
{% endfor %}
{% endif %}
{% if group.hosts is defined and group.hosts %}
{{ print.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 %}
Expand Down Expand Up @@ -113,22 +114,39 @@ 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) }}
{{ 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 %}
{% for host in 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) }}
Expand All @@ -144,19 +162,20 @@ host {{ host.hostname }} {
{% endif %}
{% endif %}
}
{% endif %}
{% endfor %}
{% endif %}
{% 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 %}
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 %}
Expand Down Expand Up @@ -211,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 %}
Expand All @@ -224,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 %}
Expand Down