summaryrefslogtreecommitdiffstats
path: root/ansible/node/roles/nas/templates/ctdb_public_addresses.j2
diff options
context:
space:
mode:
Diffstat (limited to 'ansible/node/roles/nas/templates/ctdb_public_addresses.j2')
-rw-r--r--ansible/node/roles/nas/templates/ctdb_public_addresses.j255
1 files changed, 55 insertions, 0 deletions
diff --git a/ansible/node/roles/nas/templates/ctdb_public_addresses.j2 b/ansible/node/roles/nas/templates/ctdb_public_addresses.j2
new file mode 100644
index 0000000..77f95b7
--- /dev/null
+++ b/ansible/node/roles/nas/templates/ctdb_public_addresses.j2
@@ -0,0 +1,55 @@
+{# #}
+{# How many static public addresses/interfaces per node? #}
+{# #}
+{% set num_static = (nodes[ansible_hostname].ips | length) - 1 %}
+{# #}
+{# Gather all static addresses, sublist per interface #}
+{# #}
+{% set static_addrs = [] %}
+{% for i in range(1, num_static + 1) -%}
+{{ static_addrs.append([]) }}
+{%- endfor %}
+{% for hostname, n in nodes | dictsort %}
+{% if n.is_ctdb_node %}
+{% for i in range(1, num_static + 1) -%}
+{{ static_addrs[i - 1].append(n.ips[i]) }}
+{%- endfor %}
+{% endif %}
+{% endfor %}
+{# #}
+{# For each list of static IPs, find interface, print with each IP #}
+{# #}
+{% set h = ansible_hostname %}
+{% for ips in static_addrs %}
+{% for iface in ansible_interfaces %}
+{% set ai = 'ansible_%s'|format(iface) %}
+{% if hostvars[h][ai]['ipv4'] is defined %}
+{% set ip4 = hostvars[h][ai]['ipv4'] %}
+{% if ip4['address'] is defined %}
+{% set aip = ip4['address'] %}
+{% set netmask = ip4['netmask'] %}
+{% set prefix = (aip + '/' + netmask) | ipv4('prefix') %}
+{% if aip in ips %}
+{% for ip in ips %}
+{% set ip_int = ip | ipaddr('int') %}
+{{ (ip_int + 100) | ipaddr('address') }}/{{ prefix }} {{ iface }}
+{% endfor %}
+{% endif %}
+{% endif %}
+{% endif %}
+{% if hostvars[h][ai]['ipv6'] is defined %}
+{% for ip6 in hostvars[h][ai]['ipv6'] %}
+{% if ip6['address'] is defined %}
+{% set aip = ip6['address'] %}
+{% set prefix = ip6['prefix'] %}
+{% if aip in ips %}
+{% for ip in ips %}
+{% set ip_int = ip | ipaddr('int') %}
+{{ (ip_int + 100) | ipaddr('address') }}/{{ prefix }} {{ iface }}
+{% endfor %}
+{% endif %}
+{% endif %}
+{% endfor %}
+{% endif %}
+{% endfor %}
+{% endfor %}