{% macro ha(ipversion = "ipv4") %} {% set ha_servers = [] %} {%- for fctnhst in function_hosts -%} {%- set nodenetwork = hostvars[fctnhst].network %} {%- if nodenetwork.devices is defined %} {%- for ifname, ifdata in nodenetwork.devices.items() if ifdata.services is defined and ("dhcp-ha" in (ifdata.services | default([]))) %} {%- set has = {"name": fctnhst} %} {%- if ipversion == "ipv4" %} {%- do has.update({"url": 'http://%s:%s/' | format(ifdata.ipv4 | default("127.0.0.1"), kea_control_agent_port)}) %} {%- else %} {%- do has.update({"url": 'http://[%s]:%s/' | format(ifdata.ipv6 | default("::1"), kea_control_agent_port)}) %} {%- endif %} {%- if fctnhst != dhcp_primary_server and fctnhst != dhcp_secondary_server %} {%- do has.update({"auto-failover": false, "role": "backup"}) %} {%- elif fctnhst == dhcp_primary_server %} {%- do has.update({"auto-failover": true, "role": "primary"}) %} {%- else %} {%- if kea_ha_mode == "loadbalancing" %} {%- do has.update({"auto-failover": true, "role": "secondary"}) %} {%- else %} {%- do has.update({"auto-failover": true, "role": "standby"}) %} {%- endif %} {%- endif %} {%- do ha_servers.append(has) -%} {%- endfor %} {%- endif %} {%- endfor %} {% if (ha_servers | length) > 1 %} "hooks-libraries": [ { "library": "{{ system_app_root }}/lib/kea/hooks/libdhcp_lease_cmds.so", "parameters": { } }, { "library": "{{ system_app_root }}/lib/kea/hooks/libdhcp_ha.so", "parameters": { "high-availability": [ { "this-server-name": "{{ inventory_hostname }}", {% if kea_ha_mode == "loadbalancing" %} "mode": "load-balancing", {% else %} "mode": "hot-standby", {% endif %} "heartbeat-delay": 10000, "max-response-delay": 10000, "max-ack-delay": 5000, "max-unacked-clients": 5, "peers": {{ ha_servers | to_nice_json(indent=8) }} } ] } } ], {%- endif -%} {%- endmacro %}