keepalived: allow vrrp traffic on a dedicated interface

Signed-off-by: Dimitri Savineau <dimitri.savineau@enovance.com>
This commit is contained in:
Dimitri Savineau
2014-09-12 11:13:50 -04:00
parent 0801f19dd0
commit 7904aa6511
2 changed files with 28 additions and 2 deletions

View File

@@ -18,6 +18,9 @@
# Install Load-Balancer node (HAproxy + Keepalived) # Install Load-Balancer node (HAproxy + Keepalived)
# #
# === Parameters: # === Parameters:
# [*keepalived_vrrp_interface*]
# (optional) Networking interface to bind the vrrp traffic.
# Defaults to false (disabled)
# #
# [*keepalived_public_interface*] # [*keepalived_public_interface*]
# (optional) Networking interface to bind the VIP connected to public network. # (optional) Networking interface to bind the VIP connected to public network.
@@ -185,6 +188,7 @@ class cloud::loadbalancer(
$haproxy_auth = 'admin:changeme', $haproxy_auth = 'admin:changeme',
$keepalived_state = 'BACKUP', $keepalived_state = 'BACKUP',
$keepalived_priority = '50', $keepalived_priority = '50',
$keepalived_vrrp_interface = false,
$keepalived_public_interface = 'eth0', $keepalived_public_interface = 'eth0',
$keepalived_public_ipvs = ['127.0.0.1'], $keepalived_public_ipvs = ['127.0.0.1'],
$keepalived_internal_interface = 'eth1', $keepalived_internal_interface = 'eth1',
@@ -247,6 +251,11 @@ class cloud::loadbalancer(
} else { } else {
$keepalived_public_ipvs_real = $keepalived_public_ipvs $keepalived_public_ipvs_real = $keepalived_public_ipvs
} }
if $keepalived_vrrp_interface {
$keepalived_vrrp_interface_real = $keepalived_vrrp_interface
} else {
$keepalived_vrrp_interface_real = $keepalived_public_interface_real
}
# end of deprecation support # end of deprecation support
# Fail if OpenStack and Galera VIP are not in the VIP list # Fail if OpenStack and Galera VIP are not in the VIP list
@@ -271,7 +280,7 @@ class cloud::loadbalancer(
} }
keepalived::instance { '1': keepalived::instance { '1':
interface => $keepalived_public_interface_real, interface => $keepalived_vrrp_interface_real,
virtual_ips => unique(split(join(flatten([$keepalived_public_ipvs_real, ['']]), " dev ${keepalived_public_interface_real},"), ',')), virtual_ips => unique(split(join(flatten([$keepalived_public_ipvs_real, ['']]), " dev ${keepalived_public_interface_real},"), ',')),
state => $keepalived_state, state => $keepalived_state,
track_script => ['haproxy'], track_script => ['haproxy'],
@@ -281,8 +290,13 @@ class cloud::loadbalancer(
} }
if $keepalived_internal_ipvs { if $keepalived_internal_ipvs {
if ! $keepalived_vrrp_interface {
$keepalived_vrrp_interface_internal = $keepalived_internal_interface
} else {
$keepalived_vrrp_interface_internal = $keepalived_vrrp_interface
}
keepalived::instance { '2': keepalived::instance { '2':
interface => $keepalived_internal_interface, interface => $keepalived_vrrp_interface_internal,
virtual_ips => unique(split(join(flatten([$keepalived_internal_ipvs, ['']]), " dev ${keepalived_internal_interface},"), ',')), virtual_ips => unique(split(join(flatten([$keepalived_internal_ipvs, ['']]), " dev ${keepalived_internal_interface},"), ',')),
state => $keepalived_state, state => $keepalived_state,
track_script => ['haproxy'], track_script => ['haproxy'],

View File

@@ -59,6 +59,7 @@ describe 'cloud::loadbalancer' do
:haproxy_auth => 'root:secrete', :haproxy_auth => 'root:secrete',
:keepalived_state => 'BACKUP', :keepalived_state => 'BACKUP',
:keepalived_priority => 50, :keepalived_priority => 50,
:keepalived_vrrp_interface => false,
:keepalived_public_interface => 'eth0', :keepalived_public_interface => 'eth0',
:keepalived_public_ipvs => ['10.0.0.1', '10.0.0.2'], :keepalived_public_ipvs => ['10.0.0.1', '10.0.0.2'],
:horizon_port => '80', :horizon_port => '80',
@@ -137,6 +138,17 @@ describe 'cloud::loadbalancer' do
end end
end end
context 'configure keepalived vrrp on dedicated interface' do
before do
params.merge!(:keepalived_vrrp_interface => 'eth2')
end
it 'configure keepalived with a dedicated interface for vrrp' do
should contain_keepalived__instance('1').with({
'interface' => 'eth2',
})
end
end
context 'when keepalived and HAproxy are in backup' do context 'when keepalived and HAproxy are in backup' do
it 'configure vrrp_instance with BACKUP state' do it 'configure vrrp_instance with BACKUP state' do
should contain_keepalived__instance('1').with({ should contain_keepalived__instance('1').with({