| {% from "keepalived/map.jinja" import cluster with context %} |
| |
| ! Configuration File for keepalived |
| |
| {%- for name, script in cluster.get('vrrp_scripts', {}).iteritems() %} |
| vrrp_script {{ name }} { |
| {%- if script.name is defined %} |
| {%- set name=script.name %} |
| {%- endif %} |
| script "/usr/local/bin/vrrp_script_{{ name }}.sh '{{ "' '".join(script.get('args', [])|sequence|map('string')) }}'" |
| interval {{ script.get('interval', 2) }} # check every Ns |
| fall {{ script.get('fall', 2) }} # require N failures for KO |
| rise {{ script.get('rise', 2) }} # require N successes for OK |
| {% if script.timeout is defined %}timeout {{ script.timeout }} # default timeout for script {% endif %} |
| {% if script.weight is defined %}weight {{ script.weight }}{% endif %} |
| } |
| {%- endfor %} |
| |
| {%- for instance_name, instance in cluster.instance.iteritems() %} |
| {%- if instance.get('enabled', True) %} |
| vrrp_instance {{ instance_name }} { |
| {%- if instance.get('nopreempt', True) %} |
| state BACKUP |
| nopreempt |
| garp_master_delay 5 |
| garp_master_repeat 3 |
| garp_master_refresh 1 |
| {%- else %} |
| state MASTER |
| {%- endif %} |
| dont_track_primary |
| {%- if instance.notify_action is defined %} |
| notify /usr/local/bin/keepalived_notify_{{ instance_name }}.sh |
| {%- endif %} |
| interface {{ instance.interface }} |
| virtual_router_id {{ instance.virtual_router_id }} |
| priority {{ instance.priority }} |
| {%- if instance.unicast_src_ip is defined and instance.unicast_peer is defined %} |
| unicast_src_ip {{ instance.unicast_src_ip }} |
| unicast_peer { |
| {%- for peer in instance.unicast_peer %} |
| {%- if peer != instance.unicast_src_ip %} |
| {{ peer }} |
| {%- endif %} |
| {%- endfor %} |
| } |
| {%- endif %} |
| advert_int 1 |
| authentication { |
| auth_type {{ instance.get('auth_type', 'AH') }} |
| auth_pass {{ instance.password }} |
| } |
| virtual_ipaddress { |
| {%- if instance.addresses is defined %} |
| {%- for address in instance.addresses %} |
| {{ address }} |
| {%- endfor %} |
| {%- else %} |
| {{ instance.address }} |
| {%- endif %} |
| } |
| {%- if instance.virtual_routes is defined %} |
| virtual_routes { |
| {%- for route in instance.virtual_routes %} |
| {{ route }} |
| {%- endfor %} |
| } |
| {%- endif %} |
| {%- if instance.virtual_rules is defined %} |
| virtual_rules { |
| {%- for rule in instance.virtual_rules %} |
| {{ rule }} |
| {%- endfor %} |
| } |
| {%- endif %} |
| {%- if instance.track_script is defined %} |
| track_script { |
| {%- if instance.track_script is mapping %} |
| {%- for track_script_name, track_script in instance.get('track_script', {}).iteritems() %} |
| {{ track_script_name }}{% if track_script.weight is defined %} weight {{ track_script.weight }}{% endif %} |
| {%- endfor %} |
| {%- else %} |
| {{ instance.track_script }} |
| {%- endif %} |
| } |
| {%- endif %} |
| } |
| {%- endif %} |
| {%- endfor %} |