diff --git a/manifests/params.pp b/manifests/params.pp index ec0a14f7..5e9d5b3c 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -16,6 +16,7 @@ class designate::params { $pool_manager_service_name = 'designate-pool-manager' $zone_manager_service_name = 'designate-zone-manager' $producer_service_name = 'designate-producer' + $worker_service_name = 'designate-worker' case $::osfamily { 'RedHat': { @@ -30,6 +31,7 @@ class designate::params { $pool_manager_package_name = 'openstack-designate-pool-manager' $zone_manager_package_name = 'openstack-designate-zone-manager' $producer_package_name = 'openstack-designate-producer' + $worker_package_name = 'openstack-designate-worker' } 'Debian': { # package name @@ -43,6 +45,7 @@ class designate::params { $mdns_package_name = 'designate-mdns' $zone_manager_package_name = 'designate-zone-manager' $producer_package_name = 'designate-producer' + $worker_package_name = 'designate-worker' } default: { fail("Unsupported osfamily: ${::osfamily} operatingsystem") diff --git a/manifests/worker.pp b/manifests/worker.pp new file mode 100644 index 00000000..325ac3d9 --- /dev/null +++ b/manifests/worker.pp @@ -0,0 +1,118 @@ +# == Class: designate::worker +# +# Configure designate worker service +# +# == Parameters +# +# [*package_ensure*] +# (optional) The state of the package +# Defaults to 'present' +# +# [*manage_package*] +# Whether Puppet should manage the package. Default is true. +# +# [*worker_package_name*] +# (optional) Name of the package containing worker +# resources. Defaults to worker_package_name from +# designate::params +# +# [*enabled*] +# (optional) Whether to enable services. +# Defaults to true +# +# [*service_ensure*] +# (optional) Whether the designate worker service will +# be running. +# Defaults to 'running' +# +# [*workers*] +# (optional) Number of worker processes. +# Defaults to $::os_service_default +# +# [*threads*] +# (optional) Number of Pool Manager greenthreads to spawn +# Defaults to $::os_service_default +# +# [*threshold_percentage*] +# (optional) Threshold percentage. +# Defaults to $::os_service_default +# +# [*poll_timeout*] +# (optional) Poll timeout. +# Defaults to $::os_service_default +# +# [*poll_retry_interval*] +# (optional) Poll retry interval. +# Defaults to $::os_service_default +# +# [*poll_max_retries*] +# (optional) Poll max retries. +# Defaults to $::os_service_default +# +# [*poll_delay*] +# (optional) Poll delay. +# Defaults to $::os_service_default +# +# [*worker_notify*] +# (optional) Whether to allow worker to send NOTIFYs. +# Defaults to $::os_service_default +# +# [*export_synchronous*] +# (optional) Whether to allow synchronous zone exports. +# Defaults to $::os_service_default +# +# [*worker_topic*] +# (optional) RPC topic for worker component. +# Defaults to $::os_service_default +# +class designate::worker( + $manage_package = true, + $package_ensure = present, + $worker_package_name = undef, + $enabled = true, + $service_ensure = 'running', + $workers = $::os_service_default, + $threads = $::os_service_default, + $threshold_percentage = $::os_service_default, + $poll_timeout = $::os_service_default, + $poll_retry_interval = $::os_service_default, + $poll_max_retries = $::os_service_default, + $poll_delay = $::os_service_default, + $worker_notify = $::os_service_default, + $export_synchronous = $::os_service_default, + $worker_topic = $::os_service_default, +) { + + include ::designate::deps + include ::designate::params + + if $manage_package { + package { 'designate-worker': + ensure => $package_ensure, + name => pick($worker_package_name, $::designate::params::worker_package_name), + tag => ['openstack', 'designate-package'], + } + } + + service { 'designate-worker': + ensure => $service_ensure, + name => $::designate::params::worker_service_name, + enable => $enabled, + hasstatus => true, + hasrestart => true, + tag => ['openstack', 'designate-service'], + } + + designate_config { + 'service:worker/workers': value => $workers; + 'service:worker/threads': value => $threads; + 'service:worker/threshold_percentage': value => $threshold_percentage; + 'service:worker/poll_timeout': value => $poll_timeout; + 'service:worker/poll_retry_interval': value => $poll_retry_interval; + 'service:worker/poll_max_retries': value => $poll_max_retries; + 'service:worker/poll_delay': value => $poll_delay; + 'service:worker/notify': value => $worker_notify; + 'service:worker/export_synchronous': value => $export_synchronous; + 'service:worker/worker_topic': value => $worker_topic; + } +} diff --git a/spec/classes/designate_worker_spec.rb b/spec/classes/designate_worker_spec.rb new file mode 100644 index 00000000..db84809d --- /dev/null +++ b/spec/classes/designate_worker_spec.rb @@ -0,0 +1,124 @@ +# +# Unit tests for designate::worker +# +require 'spec_helper' + +describe 'designate::worker' do + let :params do + { + } + end + + let :params_all do + { + :manage_package => true, + :package_ensure => 'present', + :worker_package_name => nil, + :enabled => true, + :service_ensure => 'running', + :workers => 10, + :threads => 900, + :threshold_percentage => 90, + :poll_timeout => 15, + :poll_retry_interval => 10, + :poll_max_retries => 5, + :poll_delay => 1, + :worker_notify => true, + :export_synchronous => true, + :worker_topic => 'topic', + } + end + + shared_examples 'designate-worker' do + context 'with default parameters' do + it { is_expected.to contain_class('designate::worker') } + + it 'installs designate-worker package and service' do + is_expected.to contain_service('designate-worker').with( + :name => platform_params[:worker_service_name], + :ensure => 'running', + :enable => 'true', + :tag => ['openstack', 'designate-service'], + ) + is_expected.to contain_package('designate-worker').with( + :name => platform_params[:worker_package_name], + :ensure => 'present', + :tag => ['openstack', 'designate-package'], + ) + end + + it 'configures designate-worker with default parameters' do + is_expected.to contain_designate_config('service:worker/workers').with_value( '' ) + is_expected.to contain_designate_config('service:worker/threads').with_value( '' ) + is_expected.to contain_designate_config('service:worker/threshold_percentage').with_value( '' ) + is_expected.to contain_designate_config('service:worker/poll_timeout').with_value( '' ) + is_expected.to contain_designate_config('service:worker/poll_retry_interval').with_value( '' ) + is_expected.to contain_designate_config('service:worker/poll_max_retries').with_value( '' ) + is_expected.to contain_designate_config('service:worker/poll_delay').with_value( '' ) + is_expected.to contain_designate_config('service:worker/notify').with_value( '' ) + is_expected.to contain_designate_config('service:worker/export_synchronous').with_value( '' ) + is_expected.to contain_designate_config('service:worker/worker_topic').with_value( '' ) + end + end + + context 'with custom package name' do + before do + params.merge!({ :worker_package_name => 'designate-worker-custom-name' }) + end + + it 'configures using custom name' do + is_expected.to contain_package('designate-worker').with( + :name => 'designate-worker-custom-name', + :ensure => 'present', + :tag => ['openstack', 'designate-package'], + ) + end + end + + context 'with all params' do + before do + params.merge!( params_all ) + end + + it 'configures designate-worker with all parameters' do + is_expected.to contain_designate_config('service:worker/workers').with_value( params[:workers] ) + is_expected.to contain_designate_config('service:worker/threads').with_value( params[:threads] ) + is_expected.to contain_designate_config('service:worker/threshold_percentage').with_value( params[:threshold_percentage] ) + is_expected.to contain_designate_config('service:worker/poll_timeout').with_value( params[:poll_timeout] ) + is_expected.to contain_designate_config('service:worker/poll_retry_interval').with_value( params[:poll_retry_interval] ) + is_expected.to contain_designate_config('service:worker/poll_max_retries').with_value( params[:poll_max_retries] ) + is_expected.to contain_designate_config('service:worker/poll_delay').with_value( params[:poll_delay] ) + is_expected.to contain_designate_config('service:worker/notify').with_value( params[:worker_notify] ) + is_expected.to contain_designate_config('service:worker/export_synchronous').with_value( params[:export_synchronous] ) + is_expected.to contain_designate_config('service:worker/worker_topic').with_value( params[:worker_topic] ) + 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' + { + :worker_package_name => 'designate-worker', + :worker_service_name => 'designate-worker' + } + when 'RedHat' + { + :worker_package_name => 'openstack-designate-worker', + :worker_service_name => 'designate-worker' + } + end + end + it_behaves_like 'designate-worker' + end + end +end