Merge "Remove the manifest for the Keepalived service"
This commit is contained in:
commit
b8d1045be6
|
@ -1,201 +0,0 @@
|
||||||
# Copyright 2014 Red Hat, Inc.
|
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
# == Class: tripleo::keepalived
|
|
||||||
#
|
|
||||||
# Configure keepalived for TripleO.
|
|
||||||
#
|
|
||||||
# === Parameters:
|
|
||||||
#
|
|
||||||
# [*controller_virtual_ip*]
|
|
||||||
# Control IP or group of IPs to bind the pools
|
|
||||||
# Can be a string or an array.
|
|
||||||
# Defaults to undef
|
|
||||||
#
|
|
||||||
# [*control_virtual_interface*]
|
|
||||||
# Interface to bind the control VIP
|
|
||||||
# Can be a string or an array.
|
|
||||||
# Defaults to undef
|
|
||||||
#
|
|
||||||
# [*public_virtual_interface*]
|
|
||||||
# Interface to bind the public VIP
|
|
||||||
# Can be a string or an array.
|
|
||||||
# Defaults to undef
|
|
||||||
#
|
|
||||||
# [*public_virtual_ip*]
|
|
||||||
# Public IP or group of IPs to bind the pools
|
|
||||||
# Can be a string or an array.
|
|
||||||
# Defaults to undef
|
|
||||||
#
|
|
||||||
# [*internal_api_virtual_ip*]
|
|
||||||
# DEPRECATED: Virtual IP on the internal API network.
|
|
||||||
# A string.
|
|
||||||
# Defaults to false
|
|
||||||
#
|
|
||||||
# [*storage_virtual_ip*]
|
|
||||||
# DEPRECATED: Virtual IP on the storage network.
|
|
||||||
# A string.
|
|
||||||
# Defaults to false
|
|
||||||
#
|
|
||||||
# [*storage_mgmt_virtual_ip*]
|
|
||||||
# DEPRECATED: Virtual IP on the storage mgmt network.
|
|
||||||
# A string.
|
|
||||||
# Defaults to false
|
|
||||||
#
|
|
||||||
# [*redis_virtual_ip*]
|
|
||||||
# Virtual IP on the redis service.
|
|
||||||
# A string.
|
|
||||||
# Defaults to false
|
|
||||||
#
|
|
||||||
# [*ovndbs_virtual_ip*]
|
|
||||||
# Virtual IP on the OVNDBs service.
|
|
||||||
# A string.
|
|
||||||
# Defaults to false
|
|
||||||
#
|
|
||||||
# [*virtual_router_id_base*]
|
|
||||||
# Base for range used for virtual router IDs.
|
|
||||||
# An integer.
|
|
||||||
# Defaults to 50
|
|
||||||
#
|
|
||||||
# [*custom_vrrp_script*]
|
|
||||||
# A custom vrrp script used to check if haproxy is running. Can
|
|
||||||
# be used to override the distro defaults in this module.
|
|
||||||
# Defaults to false.
|
|
||||||
#
|
|
||||||
# [*network_vips*]
|
|
||||||
# A hash of networks with related ip address information.
|
|
||||||
# Example:
|
|
||||||
# { 'internal_api' => { 'ip_address' => '10.0.0.1', 'index' => 1' } }
|
|
||||||
# Defaults to hiera('network_virtual_ips', {})
|
|
||||||
#
|
|
||||||
class tripleo::keepalived (
|
|
||||||
$controller_virtual_ip,
|
|
||||||
$control_virtual_interface,
|
|
||||||
$public_virtual_interface,
|
|
||||||
$public_virtual_ip,
|
|
||||||
$redis_virtual_ip = false,
|
|
||||||
$ovndbs_virtual_ip = false,
|
|
||||||
$virtual_router_id_base = 50,
|
|
||||||
$custom_vrrp_script = false,
|
|
||||||
$network_vips = hiera('network_virtual_ips', {}),
|
|
||||||
# DEPRECATED PARAMETERS
|
|
||||||
$internal_api_virtual_ip = false,
|
|
||||||
$storage_virtual_ip = false,
|
|
||||||
$storage_mgmt_virtual_ip = false,
|
|
||||||
) {
|
|
||||||
|
|
||||||
warning('Keepalived is deprecated in Ussuri and will be removed in the next cycle.')
|
|
||||||
|
|
||||||
case $::osfamily {
|
|
||||||
'RedHat': {
|
|
||||||
$keepalived_name_is_process = false
|
|
||||||
$keepalived_vrrp_script = '/bin/sh -c \'test -S /var/lib/haproxy/stats && echo show info | socat /var/lib/haproxy/stats stdio\''
|
|
||||||
} # RedHat
|
|
||||||
'Debian': {
|
|
||||||
$keepalived_name_is_process = true
|
|
||||||
$keepalived_vrrp_script = undef
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
warning('Please configure keepalived defaults in tripleo::keepalived.')
|
|
||||||
$keepalived_name_is_process = undef
|
|
||||||
$keepalived_vrrp_script = undef
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if $custom_vrrp_script {
|
|
||||||
$keepalived_vrrp_script_real = $custom_vrrp_script
|
|
||||||
} else {
|
|
||||||
$keepalived_vrrp_script_real = $keepalived_vrrp_script
|
|
||||||
}
|
|
||||||
|
|
||||||
class { 'keepalived': }
|
|
||||||
keepalived::vrrp_script { 'haproxy':
|
|
||||||
name_is_process => $keepalived_name_is_process,
|
|
||||||
script => $keepalived_vrrp_script_real,
|
|
||||||
}
|
|
||||||
|
|
||||||
# KEEPALIVE INSTANCE CONTROL
|
|
||||||
keepalived::instance { "${$virtual_router_id_base + 1}":
|
|
||||||
interface => $control_virtual_interface,
|
|
||||||
virtual_ips => [join([$controller_virtual_ip, ' dev ', $control_virtual_interface])],
|
|
||||||
state => 'MASTER',
|
|
||||||
track_script => ['haproxy'],
|
|
||||||
priority => 101,
|
|
||||||
}
|
|
||||||
|
|
||||||
# KEEPALIVE INSTANCE PUBLIC
|
|
||||||
keepalived::instance { "${$virtual_router_id_base + 2}":
|
|
||||||
interface => $public_virtual_interface,
|
|
||||||
virtual_ips => [join([$public_virtual_ip, ' dev ', $public_virtual_interface])],
|
|
||||||
state => 'MASTER',
|
|
||||||
track_script => ['haproxy'],
|
|
||||||
priority => 101,
|
|
||||||
}
|
|
||||||
|
|
||||||
if $redis_virtual_ip and $redis_virtual_ip != $controller_virtual_ip {
|
|
||||||
$redis_virtual_interface = interface_for_ip($redis_virtual_ip)
|
|
||||||
if is_ipv6_address($redis_virtual_ip) {
|
|
||||||
$redis_virtual_netmask = '64'
|
|
||||||
} else {
|
|
||||||
$redis_virtual_netmask = '32'
|
|
||||||
}
|
|
||||||
# KEEPALIVE REDIS INSTANCE
|
|
||||||
keepalived::instance { "${$virtual_router_id_base + 3}":
|
|
||||||
interface => $redis_virtual_interface,
|
|
||||||
virtual_ips => [join(["${redis_virtual_ip}/${redis_virtual_netmask}", ' dev ', $redis_virtual_interface])],
|
|
||||||
state => 'MASTER',
|
|
||||||
track_script => ['haproxy'],
|
|
||||||
priority => 101,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if $ovndbs_virtual_ip and $ovndbs_virtual_ip != $controller_virtual_ip {
|
|
||||||
$ovndbs_virtual_interface = interface_for_ip($ovndbs_virtual_ip)
|
|
||||||
# KEEPALIVE OVNDBS MANAGEMENT NETWORK
|
|
||||||
keepalived::instance { "${$virtual_router_id_base + 4}":
|
|
||||||
interface => $ovndbs_virtual_interface,
|
|
||||||
virtual_ips => [join([$ovndbs_virtual_ip, ' dev ', $ovndbs_virtual_interface])],
|
|
||||||
state => 'MASTER',
|
|
||||||
track_script => ['haproxy'],
|
|
||||||
priority => 101,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# NOTE - add any new VIPs before the isolated network vips and update this
|
|
||||||
# to use the new vrouter id
|
|
||||||
$last_fixed_vrouter_id = $virtual_router_id_base + 4
|
|
||||||
|
|
||||||
# Set up all vips for isolated networks, the vrouter id is based on a sequential index
|
|
||||||
$network_vips.each |String $net_name, $vip_info| {
|
|
||||||
$virtual_ip = $vip_info[ip_address]
|
|
||||||
if $virtual_ip and $virtual_ip != $controller_virtual_ip {
|
|
||||||
$virtual_interface = interface_for_ip($virtual_ip)
|
|
||||||
if is_ipv6_address($virtual_ip) {
|
|
||||||
$virtual_netmask = '64'
|
|
||||||
} else {
|
|
||||||
$virtual_netmask = '32'
|
|
||||||
}
|
|
||||||
|
|
||||||
$vrouter_id = $last_fixed_vrouter_id + $vip_info["index"]
|
|
||||||
keepalived::instance { "${vrouter_id}":
|
|
||||||
interface => $virtual_interface,
|
|
||||||
virtual_ips => [join(["${virtual_ip}/${virtual_netmask}", ' dev ', $virtual_interface])],
|
|
||||||
state => 'MASTER',
|
|
||||||
track_script => ['haproxy'],
|
|
||||||
priority => 101,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,215 +0,0 @@
|
||||||
#
|
|
||||||
# Copyright (C) 2018 Red Hat, Inc.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
#
|
|
||||||
|
|
||||||
require 'spec_helper'
|
|
||||||
require 'puppet'
|
|
||||||
|
|
||||||
describe 'tripleo::keepalived' do
|
|
||||||
|
|
||||||
shared_examples_for 'tripleo::keeplived' do
|
|
||||||
|
|
||||||
# needed for puppet 4.x
|
|
||||||
before(:each) do
|
|
||||||
# mock interface_for_ip function
|
|
||||||
Puppet::Parser::Functions.newfunction(:interface_for_ip, :type => :rvalue) do |arg|
|
|
||||||
return 'br-foo'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# needed for puppet 5.5.7+
|
|
||||||
let (:pre_condition) do
|
|
||||||
'function interface_for_ip($a) { return "br-foo" }'
|
|
||||||
end
|
|
||||||
|
|
||||||
let :default_params do
|
|
||||||
{
|
|
||||||
:controller_virtual_ip => '10.0.0.1',
|
|
||||||
:control_virtual_interface => 'eth0',
|
|
||||||
:public_virtual_interface => 'eth1',
|
|
||||||
:public_virtual_ip => '192.168.0.1',
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'with defaults' do
|
|
||||||
let :params do
|
|
||||||
default_params
|
|
||||||
end
|
|
||||||
|
|
||||||
it {
|
|
||||||
is_expected.to contain_class('keepalived')
|
|
||||||
is_expected.to contain_keepalived__vrrp_script('haproxy').with(
|
|
||||||
:name_is_process => platform_params[:name_is_process],
|
|
||||||
:script => platform_params[:vrrp_script]
|
|
||||||
)
|
|
||||||
is_expected.to contain_keepalived__instance('51').with(
|
|
||||||
:interface => params[:control_virtual_interface],
|
|
||||||
:virtual_ips => [ "#{params[:controller_virtual_ip]} dev #{params[:control_virtual_interface]}" ],
|
|
||||||
:state => 'MASTER',
|
|
||||||
:track_script => ['haproxy'],
|
|
||||||
:priority => 101
|
|
||||||
)
|
|
||||||
is_expected.to contain_keepalived__instance('52').with(
|
|
||||||
:interface => params[:public_virtual_interface],
|
|
||||||
:virtual_ips => [ "#{params[:public_virtual_ip]} dev #{params[:public_virtual_interface]}" ],
|
|
||||||
:state => 'MASTER',
|
|
||||||
:track_script => ['haproxy'],
|
|
||||||
:priority => 101
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'with custom vrrp script' do
|
|
||||||
let :params do
|
|
||||||
default_params.merge({
|
|
||||||
:custom_vrrp_script => 'foobar'
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
it {
|
|
||||||
is_expected.to contain_keepalived__vrrp_script('haproxy').with(
|
|
||||||
:name_is_process => platform_params[:name_is_process],
|
|
||||||
:script => params[:custom_vrrp_script]
|
|
||||||
)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'with redis virtual ipv4' do
|
|
||||||
let :params do
|
|
||||||
default_params.merge({
|
|
||||||
:redis_virtual_ip => '10.1.1.1'
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
it {
|
|
||||||
is_expected.to contain_keepalived__instance('53').with(
|
|
||||||
:interface => 'br-foo',
|
|
||||||
:virtual_ips => [ "#{params[:redis_virtual_ip]}/32 dev br-foo" ],
|
|
||||||
:state => 'MASTER',
|
|
||||||
:track_script => ['haproxy'],
|
|
||||||
:priority => 101
|
|
||||||
)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'with redis virtual ipv6' do
|
|
||||||
let :params do
|
|
||||||
default_params.merge({
|
|
||||||
:redis_virtual_ip => 'dead:beef::1'
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
it {
|
|
||||||
is_expected.to contain_keepalived__instance('53').with(
|
|
||||||
:interface => 'br-foo',
|
|
||||||
:virtual_ips => [ "#{params[:redis_virtual_ip]}/64 dev br-foo" ],
|
|
||||||
:state => 'MASTER',
|
|
||||||
:track_script => ['haproxy'],
|
|
||||||
:priority => 101
|
|
||||||
)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'with ovndbs virtual ip' do
|
|
||||||
let :params do
|
|
||||||
default_params.merge({
|
|
||||||
:ovndbs_virtual_ip => '10.1.1.1'
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
it {
|
|
||||||
is_expected.to contain_keepalived__instance('54').with(
|
|
||||||
:interface => 'br-foo',
|
|
||||||
:virtual_ips => [ "#{params[:ovndbs_virtual_ip]} dev br-foo" ],
|
|
||||||
:state => 'MASTER',
|
|
||||||
:track_script => ['haproxy'],
|
|
||||||
:priority => 101
|
|
||||||
)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'with network ipv4 vips' do
|
|
||||||
let :params do
|
|
||||||
default_params.merge({
|
|
||||||
:network_vips => {
|
|
||||||
'internal_api' => { 'ip_address' => '10.1.0.1', 'index' => 1 },
|
|
||||||
'tenant' => { 'ip_address' => '10.2.0.1', 'index' => 2 }
|
|
||||||
}
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
it {
|
|
||||||
is_expected.to contain_class('keepalived')
|
|
||||||
is_expected.to contain_keepalived__instance('55').with(
|
|
||||||
:interface => 'br-foo',
|
|
||||||
:virtual_ips => [ "10.1.0.1/32 dev br-foo" ],
|
|
||||||
:state => 'MASTER',
|
|
||||||
:track_script => ['haproxy'],
|
|
||||||
:priority => 101
|
|
||||||
)
|
|
||||||
is_expected.to contain_keepalived__instance('56').with(
|
|
||||||
:interface => 'br-foo',
|
|
||||||
:virtual_ips => [ "10.2.0.1/32 dev br-foo" ],
|
|
||||||
:state => 'MASTER',
|
|
||||||
:track_script => ['haproxy'],
|
|
||||||
:priority => 101
|
|
||||||
)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'with network ipv6 vips' do
|
|
||||||
let :params do
|
|
||||||
default_params.merge({
|
|
||||||
:network_vips => {
|
|
||||||
'internal_api' => { 'ip_address' => 'dead:beef::1', 'index' => 1 },
|
|
||||||
}
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
it {
|
|
||||||
is_expected.to contain_class('keepalived')
|
|
||||||
is_expected.to contain_keepalived__instance('55').with(
|
|
||||||
:interface => 'br-foo',
|
|
||||||
:virtual_ips => [ "dead:beef::1/64 dev br-foo" ],
|
|
||||||
:state => 'MASTER',
|
|
||||||
:track_script => ['haproxy'],
|
|
||||||
:priority => 101
|
|
||||||
)
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
on_supported_os.each do |os, facts|
|
|
||||||
context "on #{os}" do
|
|
||||||
let(:facts) do
|
|
||||||
facts.merge({})
|
|
||||||
end
|
|
||||||
|
|
||||||
let (:platform_params) do
|
|
||||||
case facts[:osfamily]
|
|
||||||
when 'RedHat'
|
|
||||||
{ :name_is_process => 'false',
|
|
||||||
:vrrp_script => "/bin/sh -c 'test -S /var/lib/haproxy/stats && echo show info | socat /var/lib/haproxy/stats stdio'" }
|
|
||||||
when 'Debian'
|
|
||||||
{ :name_is_process => 'true',
|
|
||||||
:vrrp_script => nil }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
it_behaves_like 'tripleo::keeplived'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in New Issue