blob: 190f22a3e65985f2598bd265853665779e36a3fd [file] [log] [blame]
{% 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 %}