diff options
Diffstat (limited to 'playbooks/roles/keepalived/templates')
-rw-r--r-- | playbooks/roles/keepalived/templates/healthcheck.sh.j2 | 12 | ||||
-rw-r--r-- | playbooks/roles/keepalived/templates/keepalived.conf.j2 | 36 |
2 files changed, 48 insertions, 0 deletions
diff --git a/playbooks/roles/keepalived/templates/healthcheck.sh.j2 b/playbooks/roles/keepalived/templates/healthcheck.sh.j2 new file mode 100644 index 0000000..0e6c18b --- /dev/null +++ b/playbooks/roles/keepalived/templates/healthcheck.sh.j2 @@ -0,0 +1,12 @@ +#!/bin/bash +set -e +PING_HOSTNAME="{{ traefik_host }}" +VIRTUAL_IP="{{ keepalived_virtual_ip }}" + +function do_ping() { + local endpoint_hostname="$1" + local vip="$2" + curl -s -o /dev/null -w "%{http_code}" --resolve "$endpoint_hostname:443:$vip" "https://$endpoint_hostname/ping" +} + +test "$(do_ping "$PING_HOSTNAME" "$VIRTUAL_IP")" = "200" diff --git a/playbooks/roles/keepalived/templates/keepalived.conf.j2 b/playbooks/roles/keepalived/templates/keepalived.conf.j2 new file mode 100644 index 0000000..cb9c449 --- /dev/null +++ b/playbooks/roles/keepalived/templates/keepalived.conf.j2 @@ -0,0 +1,36 @@ +global_defs { + script_user nobody + enable_script_security +} + +vrrp_script chk_avail { + script "{{ keepalived_healthcheck_script }}" + interval 1 + weight 10 + rise 6 + fall 1 +} + +vrrp_instance {{ inventory_hostname }} { + interface {{ keepalived_interface }} + + state BACKUP + virtual_router_id {{ keepalived_virtual_router_id }} + priority {{ keepalived_priority }} + advert_int 1 + + unicast_src_ip {{ ansible_host }} + unicast_peer { + {% for peer in groups['keepalived'] if hostvars[peer]['ansible_host'] != ansible_host %} + {{ hostvars[peer]['ansible_host'] }} + {% endfor %} + } + + virtual_ipaddress { + {{ keepalived_virtual_ip }} dev {{ keepalived_interface }} + } + + track_script { + chk_avail + } +} |