Configure keepalived #100

Merged
jeltz merged 4 commits from keepalived into master 2022-08-30 13:44:29 +02:00
3 changed files with 34 additions and 3 deletions
Showing only changes of commit e86b17094b - Show all commits

View file

@ -1,3 +1,6 @@
import ipaddress
from operator import attrgetter
import dns.name import dns.name
@ -5,9 +8,33 @@ class FilterModule:
def filters(self): def filters(self):
return { return {
"remove_domain_suffix": remove_domain_suffix, "remove_domain_suffix": remove_domain_suffix,
"ipaddr_sort": ipaddr_sort,
} }
def remove_domain_suffix(name): def remove_domain_suffix(name):
parent = dns.name.from_text(name).parent() parent = dns.name.from_text(name).parent()
return parent.to_text() return parent.to_text()
def ipaddr_sort(addrs, types, unknown_after=True):
check_types = {
"global": attrgetter("is_global"),
"link-local": attrgetter("is_link_local"),
"loopback": attrgetter("is_loopback"),
"multicast": attrgetter("is_multicast"),
"private": attrgetter("is_private"),
"reserved": attrgetter("is_reserved"),
"site_local": attrgetter("is_site_local"),
"unspecified": attrgetter("is_unspecified"),
}
def addr_weight(addr):
if isinstance(addr, str):
addr = ipaddress.ip_address(addr.split("/")[0])
for index, ty in enumerate(types):
if check_types[ty](ipaddress.ip_address(addr)):
return index
return len(types) if unknown_after else -1
return sorted(addrs, key=addr_weight)

View file

@ -3,4 +3,5 @@ keepalived__virtual_addresses: {}
keepalived__notify_master: [] keepalived__notify_master: []
keepalived__notify_backup: [] keepalived__notify_backup: []
keepalived__notify_fault: [] keepalived__notify_fault: []
keepalived__max_auto_priority: -1
... ...

View file

@ -5,6 +5,9 @@ global_defs {
script_user root script_user root
enable_script_security enable_script_security
vrrp_version 3 vrrp_version 3
{% if keepalived__max_auto_priority is defined %}
max_auto_priority {{ keepalived__max_auto_priority | int }}
{% endif %}
} }
{% {%
@ -38,7 +41,7 @@ vrrp_sync_group group {
{% if ipv4_enabled %} {% if ipv4_enabled %}
vrrp_instance instance_v4 { vrrp_instance instance_v4 {
virtual_router_id {{ keepalived__virtual_router_id }} virtual_router_id {{ keepalived__virtual_router_id | int }}
interface {{ keepalived__interface }} interface {{ keepalived__interface }}
state BACKUP state BACKUP
priority 250 priority 250
@ -64,7 +67,7 @@ vrrp_instance instance_v4 {
{% if ipv6_enabled %} {% if ipv6_enabled %}
vrrp_instance instance_v6 { vrrp_instance instance_v6 {
virtual_router_id {{ keepalived__virtual_router_id }} virtual_router_id {{ keepalived__virtual_router_id | int }}
interface {{ keepalived__interface }} interface {{ keepalived__interface }}
state BACKUP state BACKUP
priority 250 priority 250
@ -73,7 +76,7 @@ vrrp_instance instance_v6 {
accept accept
virtual_ipaddress { virtual_ipaddress {
{% for dev, addresses in keepalived__virtual_addresses.items() %} {% for dev, addresses in keepalived__virtual_addresses.items() %}
{% for address in addresses %} {% for address in addresses | ipaddr_sort(["link-local"]) %}
{% if address | ansible.utils.ipv6 %} {% if address | ansible.utils.ipv6 %}
{{ address }} dev {{ dev }} {{ address }} dev {{ dev }}
{% endif %} {% endif %}