fuel-library/deployment/puppet/cluster/manifests/virtual_ip.pp
Maksim Malchuk 9dfb877ef6 Properly support of Puppet4 in the cluster::virtual_ip
This commit fixes mutating operations on array/hash types.
Also this commit contain some cleanups according the styling guide.

Change-Id: I4c6d1d30c93f77a870927c5cfac9793d37e279ab
Closes-Bug: #1530395
2016-01-05 00:27:08 +03:00

153 lines
4.6 KiB
Puppet

# == Define: cluster::virtual_ip
#
# Configure VirtualIP resource for corosync/pacemaker.
#
# === Parameters
#
# [*key*]
# Name of virtual IP resource
#
# [*vip*]
# Specify dictionary of VIP parameters, ex:
# {
# bridge => 'br0',
# ip => '10.1.1.253'
# }
#
define cluster::virtual_ip (
$vip,
$key = $name,
){
$vip_name = "vip__${key}"
if (is_ip_address($vip['gateway']) or ($vip['gateway'] == 'link')) {
$gateway = $vip['gateway']
} else {
$gateway = 'none'
}
$parameters = {
'gateway' => $gateway,
'bridge' => $vip['bridge'],
'base_veth' => $vip['base_veth'],
'ns_veth' => $vip['ns_veth'],
'ip' => $vip['ip'],
'iflabel' => $vip['iflabel'] ? {
undef => 'ka',
default => $vip['iflabel']
},
'cidr_netmask' => $vip['cidr_netmask'] ? {
undef => '24',
default => $vip['cidr_netmask']
},
'ns' => $vip['namespace'] ? {
undef => 'haproxy',
default => $vip['namespace']
},
'gateway_metric' => $vip['gateway_metric'] ? {
undef => undef,
default => $vip['gateway_metric']
},
'other_networks' => $vip['other_networks'] ? {
undef => undef, false => undef,
default => $vip['other_networks']
},
'iptables_comment' => $vip['iptables_comment'] ? {
undef => undef, false => undef,
default => $vip['iptables_comment'],
},
'ns_iptables_start_rules' => $vip['ns_iptables_start_rules'] ? {
undef => undef, false => undef,
default => $vip['ns_iptables_start_rules'],
},
'ns_iptables_stop_rules' => $vip['ns_iptables_stop_rules'] ? {
undef => undef, false => undef,
default => $vip['ns_iptables_stop_rules'],
},
}
$metadata = {
'migration-threshold' => '3', # will be try start 3 times before migrate to another node
'failure-timeout' => '60', # forget any fails of starts after this timeout
'resource-stickiness' => '1'
}
$operations = {
'monitor' => {
'interval' => '5',
'timeout' => '20',
},
'start' => {
'timeout' => '30',
},
'stop' => {
'timeout' => '30',
},
}
$primitive_type = 'ns_IPaddr2'
service { $vip_name:
ensure => 'running',
enable => true,
}
pacemaker_wrappers::service { $vip_name :
primitive_type => $primitive_type,
parameters => $parameters,
metadata => $metadata,
operations => $operations,
prefix => false,
}
# I'am running before this other vip
# and this other vip cannot start without me running on this node
$colocation_before = $vip['colocation_before']
if $colocation_before {
$colocation_before_vip_name = "vip__${colocation_before}"
$colocation_before_constraint_name = "${colocation_before_vip_name}-with-${vip_name}"
cs_rsc_colocation { $colocation_before_constraint_name :
ensure => 'present',
score => 'INFINITY',
primitives => [
$colocation_before_vip_name,
$vip_name,
],
}
Cs_resource <| title == $vip_name |> -> Cs_resource <| title == $colocation_before_vip_name |>
Service <| title == $vip_name |> -> Service <| title == $colocation_before_vip_name |>
Service <| title == $colocation_before_vip_name |> -> Cs_rsc_colocation[$colocation_before_constraint_name]
Service <| title == $vip_name |> -> Cs_rsc_colocation[$colocation_before_constraint_name]
}
# I'm running after this other vip
# and I cannot start without other vip running on this node
$colocation_after = $vip['colocation_after']
if $colocation_after {
$colocation_after_vip_name = "vip__${colocation_after}"
$colocation_after_constraint_name = "${vip_name}-with-${colocation_after_vip_name}"
cs_rsc_colocation { $colocation_after_constraint_name :
ensure => 'present',
score => 'INFINITY',
primitives => [
$vip_name,
$colocation_after_vip_name,
],
}
Cs_resource <| title == $colocation_after_vip_name |> -> Cs_resource <| title == $vip_name |>
Service <| title == $colocation_after_vip_name |> -> Service <| title == $vip_name |>
Service <| title == $colocation_after_vip_name |> -> Cs_rsc_colocation[$colocation_after_constraint_name]
Service <| title == $vip_name |> -> Cs_rsc_colocation[$colocation_after_constraint_name]
}
}
Class['corosync'] -> Cluster::Virtual_ip <||>
if defined(Corosync::Service['pacemaker']) {
Corosync::Service['pacemaker'] -> Cluster::Virtual_ip <||>
}