From 239cfc6360082209256e0fe02d2ab3a3def1dc36 Mon Sep 17 00:00:00 2001 From: Brent Eagles Date: Mon, 25 Jul 2016 16:07:17 -0230 Subject: [PATCH] Adding housekeeping.pp Adding basic Octavia housekeeping service support. Change-Id: Id3156a0245d8b885a9917605a53dfb061d1c3047 --- manifests/housekeeping.pp | 98 ++++++++++++++++++ manifests/params.pp | 3 + spec/acceptance/octavia_spec.rb | 2 + spec/classes/octavia_housekeeping_spec.rb | 115 ++++++++++++++++++++++ 4 files changed, 218 insertions(+) create mode 100644 manifests/housekeeping.pp create mode 100644 spec/classes/octavia_housekeeping_spec.rb diff --git a/manifests/housekeeping.pp b/manifests/housekeeping.pp new file mode 100644 index 00000000..1a06c383 --- /dev/null +++ b/manifests/housekeeping.pp @@ -0,0 +1,98 @@ +# Installs and configures the octavia housekeeping service +# +# == Parameters +# +# [*enabled*] +# (optional) Should the service be enabled. +# Defaults to true +# +# [*manage_service*] +# (optional) Whether the service should be managed by Puppet. +# Defaults to true. +# +# [*package_ensure*] +# (optional) ensure state for package. +# Defaults to 'present' +# +# [*spare_check_interval*] +# (optional) spare check interval in seconds. +# Defaults to $::os_service_default +# +# [*spare_amphorae_pool_size*] +# (optional) Number of spare amphorae. +# Defaults to $::os_service_default +# +# [*cleanup_interval*] +# (optional) DB cleanup interval in seconds. +# Defaults to $::os_service_default +# +# [*amphora_expiry_age*] +# (optional) Amphora expiry age in seconds. +# Defaults to $::os_service_default +# +# [*load_balancer_expiry_age*] +# (optional) Load balancer expiry age in seconds. +# Defaults to $::os_service_default +# +# [*cert_interval*] +# (optional) Certificate check interval in seconds. +# Defaults to $::os_service_default +# +# [*cert_expiry_buffer*] +# (optional) Seconds until certificate expiry. +# Defaults to $::os_service_default +# +# [*cert_rotate_threads*] +# (optional) Number of threads performing amphora certificate rotation. +# Defaults to $::os_service_default + +class octavia::housekeeping ( + $manage_service = true, + $enabled = true, + $package_ensure = 'present', + $spare_check_interval = $::os_service_default, + $spare_amphorae_pool_size = $::os_service_default, + $cleanup_interval = $::os_service_default, + $amphora_expiry_age = $::os_service_default, + $load_balancer_expiry_age = $::os_service_default, + $cert_interval = $::os_service_default, + $cert_expiry_buffer = $::os_service_default, + $cert_rotate_threads = $::os_service_default, +) inherits octavia::params { + + Octavia_config<||> ~> Service['octavia-housekeeping'] + Package['octavia-housekeeping'] -> Service['octavia-housekeeping'] + package { 'octavia-housekeeping': + ensure => $package_ensure, + name => $::octavia::params::housekeeping_package_name, + tag => ['openstack', 'octavia-package'], + } + + if $manage_service { + if $enabled { + $service_ensure = 'running' + } else { + $service_ensure = 'stopped' + } + } + + service { 'octavia-housekeeping': + ensure => $service_ensure, + name => $::octavia::params::housekeeping_service_name, + enable => $enabled, + hasstatus => true, + hasrestart => true, + tag => ['octavia-service'], + } + + octavia_config { + 'house_keeping/spare_check_interval' : value => $spare_check_interval; + 'house_keeping/spare_amphorae_pool_size' : value => $spare_amphorae_pool_size; + 'house_keeping/cleanup_interval' : value => $cleanup_interval; + 'house_keeping/amphora_expiry_age' : value => $amphora_expiry_age; + 'house_keeping/load_balancer_expiry_age' : value => $load_balancer_expiry_age; + 'house_keeping/cert_interval' : value => $cert_interval; + 'house_keeping/cert_expiry_buffer' : value => $cert_expiry_buffer; + 'house_keeping/cert_rotate_threads' : value => $cert_rotate_threads; + } +} diff --git a/manifests/params.pp b/manifests/params.pp index 08ff5798..ff563dc4 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -6,18 +6,21 @@ class octavia::params { $api_service_name = 'octavia-api' $worker_service_name = 'octavia-worker' $health_manager_service_name = 'octavia-health-manager' + $housekeeping_service_name = 'octavia-housekeeping' case $::osfamily { 'RedHat': { $common_package_name = 'openstack-octavia-common' $api_package_name = 'openstack-octavia-api' $worker_package_name = 'openstack-octavia-worker' $health_manager_package_name = 'openstack-octavia-health-manager' + $housekeeping_package_name = 'openstack-octavia-housekeeping' } 'Debian': { $common_package_name = 'octavia-common' $api_package_name = 'octavia-api' $worker_package_name = 'octavia-worker' $health_manager_package_name = 'octavia-health-manager' + $housekeeping_package_name = 'octavia-housekeeping' } default: { fail("Unsupported osfamily: ${::osfamily} operatingsystem") diff --git a/spec/acceptance/octavia_spec.rb b/spec/acceptance/octavia_spec.rb index 69455a35..8a027cf2 100644 --- a/spec/acceptance/octavia_spec.rb +++ b/spec/acceptance/octavia_spec.rb @@ -58,6 +58,8 @@ describe 'basic octavia' do class { '::octavia::health_manager': heartbeat_key => 'abcdefghijkl', } + class { '::octavia::housekeeping': + } # We create Nova flavor on the same node where Nova runs Class['::nova::keystone::auth'] -> Nova_flavor<||> diff --git a/spec/classes/octavia_housekeeping_spec.rb b/spec/classes/octavia_housekeeping_spec.rb new file mode 100644 index 00000000..cf17bd49 --- /dev/null +++ b/spec/classes/octavia_housekeeping_spec.rb @@ -0,0 +1,115 @@ +require 'spec_helper' + +describe 'octavia::housekeeping' do + + let :params do + { :enabled => true, + :manage_service => true, + :package_ensure => 'latest', + } + end + + shared_examples_for 'octavia-housekeeping' do + + it 'installs octavia-housekeeping package' do + is_expected.to contain_package('octavia-housekeeping').with( + :ensure => 'latest', + :name => platform_params[:housekeeping_package_name], + :tag => ['openstack', 'octavia-package'], + ) + end + + context 'check parameters with defaults' do + ['spare_check_interval', 'spare_amphorae_pool_size', 'cleanup_interval', + 'amphora_expiry_age', 'load_balancer_expiry_age', 'cert_interval', + 'cert_expiry_buffer', 'cert_rotate_threads'].each do |param_with_default| + it { is_expected.to contain_octavia_config("house_keeping/#{param_with_default}").with_value('') } + end + end + + let :default_parameters do + { :spare_check_interval => 60, + :spare_amphorae_pool_size => 20, + :cleanup_interval => 26, + :amphora_expiry_age => 200000, + :load_balancer_expiry_age => 23131, + :cert_interval => 200, + :cert_expiry_buffer => 20000056, + :cert_rotate_threads => 20, + } + end + + context 'check with non-default parameters' do + before :each do + params.merge!(default_parameters) + end + ['spare_check_interval', 'spare_amphorae_pool_size', 'cleanup_interval', + 'amphora_expiry_age', 'load_balancer_expiry_age', 'cert_interval', + 'cert_expiry_buffer', 'cert_rotate_threads'].each do |param_with_default| + it { is_expected.to contain_octavia_config("house_keeping/#{param_with_default}").with_value(default_parameters[param_with_default.to_sym]) } + end + end + + + [{:enabled => true}, {:enabled => false}].each do |param_hash| + context "when service should be #{param_hash[:enabled] ? 'enabled' : 'disabled'}" do + before do + params.merge!(param_hash) + end + + it 'configures octavia-housekeeping service' do + is_expected.to contain_service('octavia-housekeeping').with( + :ensure => (params[:manage_service] && params[:enabled]) ? 'running' : 'stopped', + :name => platform_params[:housekeeping_service_name], + :enable => params[:enabled], + :hasstatus => true, + :hasrestart => true, + :tag => ['octavia-service'], + ) + end + end + end + + context 'with disabled service managing' do + before do + params.merge!({ + :manage_service => false, + :enabled => false }) + end + + it 'configures octavia-housekeeping service' do + is_expected.to contain_service('octavia-housekeeping').with( + :ensure => nil, + :name => platform_params[:housekeeping_service_name], + :enable => false, + :hasstatus => true, + :hasrestart => true, + :tag => ['octavia-service'], + ) + end + end + + end + + on_supported_os({ + :supported_os => OSDefaults.get_supported_os + }).each do |os,facts| + context "on #{os}" do + let (:facts) do + facts.merge!(OSDefaults.get_facts()) + end + let(:platform_params) do + case facts[:osfamily] + when 'Debian' + { :housekeeping_package_name => 'octavia-housekeeping', + :housekeeping_service_name => 'octavia-housekeeping' } + when 'RedHat' + { :housekeeping_package_name => 'openstack-octavia-housekeeping', + :housekeeping_service_name => 'octavia-housekeeping' } + end + end + it_behaves_like 'octavia-housekeeping' + end + end + +end