init-state auto if_carp_up="carp1.link.up" if_carp_down="carp1.link.down" state auto { if $if_carp_up { set-state master } if $if_carp_down { set-state backup } } state master { init { # spoof mac to keep dhcp lease in sync with both gw's run "/sbin/ifconfig vio1 lladdr {{ lookup('vars', 'gw_mac_' + inventory_hostname.split('.')[1]) }} up" # flush routes and renew lease run "/sbin/route -qn flush" run "/usr/sbin/dhcpleasectl vio1" # reset firewall rules run "sleep 5 ; pfctl -f /etc/pf.conf" } if $if_carp_down { set-state backup } } state backup { init { # bring down interface and reset mac run "/sbin/ifconfig vio1 delete lladdr {{ lookup('vars', 'gw_mac_' + inventory_hostname.split('.')[1]) }} down" # flush routes and fix default route run "/sbin/route -qn flush" {% if inventory_hostname == "dna-gw01.home.foo.sh" %} run "/sbin/route -qn add default 172.20.21.2" {% elif inventory_hostname == "dna-gw02.home.foo.sh" %} run "/sbin/route -qn add default 172.20.21.1" {% elif inventory_hostname == "dna-gw03.lan.foo.sh" %} run "/sbin/route -qn add default 172.20.30.3" {% elif inventory_hostname == "dna-gw04.lan.foo.sh" %} run "/sbin/route -qn add default 172.20.30.2" {% endif %} } if $if_carp_up { set-state master } }