From ae9b91107dffa80c3674a80f6c3a28ffa403d5bb Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Wed, 30 Dec 2020 20:48:46 +0900 Subject: [PATCH] Add support for workers option This change introduces support for workers option of aodh services (evaluator, listener, notifier) so that operators can define number of processes used in each service. Change-Id: Id64fc407d19aa546512078f67df3a727fd9f5525 --- manifests/evaluator.pp | 14 +++++++ manifests/listener.pp | 9 +++++ manifests/notifier.pp | 9 +++++ .../notes/workers-054d3bafa34171d9.yaml | 9 +++++ spec/classes/aodh_evaluator_spec.rb | 40 ++++++++++++++++--- spec/classes/aodh_listener_spec.rb | 15 ++++++- spec/classes/aodh_notifier_spec.rb | 15 ++++++- 7 files changed, 104 insertions(+), 7 deletions(-) create mode 100644 releasenotes/notes/workers-054d3bafa34171d9.yaml diff --git a/manifests/evaluator.pp b/manifests/evaluator.pp index 1b2f9df0..9bf6eb68 100644 --- a/manifests/evaluator.pp +++ b/manifests/evaluator.pp @@ -13,6 +13,10 @@ # (optional) ensure state for package. # Defaults to 'present' # +# [*workers*] +# (optional) Number of workers for evaluator service. +# Defaults to $::os_workers. +# # [*coordination_url*] # (optional) The url to use for distributed group membership coordination. # Defaults to undef. @@ -25,6 +29,7 @@ class aodh::evaluator ( $manage_service = true, $enabled = true, $package_ensure = 'present', + $workers = $::os_workers, $coordination_url = undef, $evaluation_interval = $::os_service_default, ) { @@ -32,9 +37,18 @@ class aodh::evaluator ( include aodh::deps include aodh::params + if $coordination_url == undef and !is_service_default($workers) and $workers > 1 { + warning('coordination_url should be set to use multiple workers') + $workers_real = $::os_service_default + } else { + $workers_real = $workers + } + aodh_config { 'DEFAULT/evaluation_interval' : value => $evaluation_interval; + 'evaluator/workers' : value => $workers_real; } + if $coordination_url { aodh_config { 'coordination/backend_url' : value => $coordination_url; diff --git a/manifests/listener.pp b/manifests/listener.pp index 33be0ed1..d67ade3e 100644 --- a/manifests/listener.pp +++ b/manifests/listener.pp @@ -13,15 +13,24 @@ # (optional) ensure state for package. # Defaults to 'present' # +# [*workers*] +# (optional) Number of workers for evaluator service. +# Defaults to $::os_workers. +# class aodh::listener ( $manage_service = true, $enabled = true, $package_ensure = 'present', + $workers = $::os_workers, ) { include aodh::deps include aodh::params + aodh_config { + 'listener/workers': value => $workers + } + ensure_resource( 'package', [$::aodh::params::listener_package_name], { ensure => $package_ensure, tag => ['openstack', 'aodh-package'] } diff --git a/manifests/notifier.pp b/manifests/notifier.pp index 58a637f2..7075503e 100644 --- a/manifests/notifier.pp +++ b/manifests/notifier.pp @@ -13,15 +13,24 @@ # (optional) ensure state for package. # Defaults to 'present' # +# [*workers*] +# (optional) Number of workers for notifier service. +# Defaults to $::os_workers. +# class aodh::notifier ( $manage_service = true, $enabled = true, $package_ensure = 'present', + $workers = $::os_workers, ) { include aodh::deps include aodh::params + aodh_config { + 'notifier/workers': value => $workers; + } + ensure_resource( 'package', [$::aodh::params::notifier_package_name], { ensure => $package_ensure, tag => ['openstack', 'aodh-package'] } diff --git a/releasenotes/notes/workers-054d3bafa34171d9.yaml b/releasenotes/notes/workers-054d3bafa34171d9.yaml new file mode 100644 index 00000000..fbf07dc7 --- /dev/null +++ b/releasenotes/notes/workers-054d3bafa34171d9.yaml @@ -0,0 +1,9 @@ +--- +features: + - | + The new parameters have been added to support workers option in each aodh + services. + + - ``aodh::evaluator::workers`` + - ``aodh::listener::workers`` + - ``aodh::notifier::workers`` diff --git a/spec/classes/aodh_evaluator_spec.rb b/spec/classes/aodh_evaluator_spec.rb index 55ca1e37..16f19fc5 100644 --- a/spec/classes/aodh_evaluator_spec.rb +++ b/spec/classes/aodh_evaluator_spec.rb @@ -21,14 +21,35 @@ describe 'aodh::evaluator' do is_expected.to contain_aodh_config('coordination/backend_url').with_value('redis://localhost:6379') end + it 'configures workers' do + is_expected.to contain_aodh_config('evaluator/workers').with_value(4) + end + it 'installs python-redis package' do is_expected.to contain_package('python-redis').with( :name => platform_params[:redis_package_name], - :tag => 'openstack' + :tag => 'openstack' ) end end + context 'with coordination and workers' do + before do + params.merge!({ + :coordination_url => 'redis://localhost:6379', + :workers => 8, + }) + end + + it 'configures backend_url' do + is_expected.to contain_aodh_config('coordination/backend_url').with_value('redis://localhost:6379') + end + + it 'configures workers' do + is_expected.to contain_aodh_config('evaluator/workers').with_value(8) + end + end + context 'with evaluation interval' do before do params.merge!({ :evaluation_interval => '10' }) @@ -38,6 +59,14 @@ describe 'aodh::evaluator' do end end + context 'with workers' do + before do + params.merge!({ :workers => 8 }) + end + it 'does not configure workers' do + is_expected.to contain_aodh_config('evaluator/workers').with_value('') + end + end context 'when enabled' do it { is_expected.to contain_class('aodh::params') } @@ -60,6 +89,10 @@ describe 'aodh::evaluator' do ) end + it 'sets default values' do + is_expected.to contain_aodh_config('DEFAULT/evaluation_interval').with_value('') + is_expected.to contain_aodh_config('evaluator/workers').with_value('') + end end context 'when disabled' do @@ -98,10 +131,7 @@ describe 'aodh::evaluator' do }).each do |os,facts| context "on #{os}" do let (:facts) do - facts.merge!(OSDefaults.get_facts({ - :fqdn => 'some.host.tld', - :concat_basedir => '/var/lib/puppet/concat' - })) + facts.merge!(OSDefaults.get_facts({ :os_workers => 4 })) end let(:platform_params) do diff --git a/spec/classes/aodh_listener_spec.rb b/spec/classes/aodh_listener_spec.rb index c0731b7b..84b4cc04 100644 --- a/spec/classes/aodh_listener_spec.rb +++ b/spec/classes/aodh_listener_spec.rb @@ -8,6 +8,16 @@ describe 'aodh::listener' do shared_examples_for 'aodh-listener' do + context 'with workers' do + let :params do + { :workers => 8 } + end + + it 'configures workers' do + is_expected.to contain_aodh_config('listener/workers').with_value(8) + end + end + context 'when enabled' do it { is_expected.to contain_class('aodh::params') } @@ -29,6 +39,9 @@ describe 'aodh::listener' do ) end + it 'sets default values' do + is_expected.to contain_aodh_config('listener/workers').with_value(4) + end end context 'when disabled' do @@ -67,7 +80,7 @@ describe 'aodh::listener' do }).each do |os,facts| context "on #{os}" do let (:facts) do - facts.merge!(OSDefaults.get_facts()) + facts.merge!(OSDefaults.get_facts({ :os_workers => 4 })) end let(:platform_params) do diff --git a/spec/classes/aodh_notifier_spec.rb b/spec/classes/aodh_notifier_spec.rb index 2ecb7161..b174e952 100644 --- a/spec/classes/aodh_notifier_spec.rb +++ b/spec/classes/aodh_notifier_spec.rb @@ -8,6 +8,16 @@ describe 'aodh::notifier' do shared_examples_for 'aodh-notifier' do + context 'with workers' do + let :params do + { :workers => 8 } + end + + it 'configures workers' do + is_expected.to contain_aodh_config('notifier/workers').with_value(8) + end + end + context 'when enabled' do it { is_expected.to contain_class('aodh::params') } @@ -29,6 +39,9 @@ describe 'aodh::notifier' do ) end + it 'sets default values' do + is_expected.to contain_aodh_config('notifier/workers').with_value(4) + end end context 'when disabled' do @@ -67,7 +80,7 @@ describe 'aodh::notifier' do }).each do |os,facts| context "on #{os}" do let (:facts) do - facts.merge!(OSDefaults.get_facts()) + facts.merge!(OSDefaults.get_facts({ :os_workers => 4 })) end let(:platform_params) do