Configure keepalived #100
3 changed files with 34 additions and 3 deletions
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
...
|
...
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
Loading…
Reference in a new issue