diff --git a/manifests/collector.pp b/manifests/collector.pp new file mode 100644 index 0000000..eae6cec --- /dev/null +++ b/manifests/collector.pp @@ -0,0 +1,46 @@ +# Installs the vitrage collector service +# +# == Params +# [*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' +# +class vitrage::collector ( + $manage_service = true, + $enabled = true, + $package_ensure = 'present', +) { + + include ::vitrage::deps + include ::vitrage::params + + ensure_resource( 'package', [$::vitrage::params::collector_package_name], + { ensure => $package_ensure, + tag => ['openstack', 'vitrage-package'] } + ) + + if $manage_service { + if $enabled { + $service_ensure = 'running' + } else { + $service_ensure = 'stopped' + } + } + + service { 'vitrage-collector': + ensure => $service_ensure, + name => $::vitrage::params::collector_service_name, + enable => $enabled, + hasstatus => true, + hasrestart => true, + tag => 'vitrage-service', + } +} diff --git a/manifests/params.pp b/manifests/params.pp index c5393b0..551702a 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -9,26 +9,30 @@ class vitrage::params { case $::osfamily { 'RedHat': { - $common_package_name = 'openstack-vitrage-common' - $api_package_name = 'openstack-vitrage-api' - $api_service_name = 'openstack-vitrage-api' - $notifier_package_name = 'openstack-vitrage-notifier' - $notifier_service_name = 'openstack-vitrage-notifier' - $graph_package_name = 'openstack-vitrage-graph' - $graph_service_name = 'openstack-vitrage-graph' - $vitrage_wsgi_script_path = '/var/www/cgi-bin/vitrage' - $vitrage_wsgi_script_source = '/usr/lib/python2.7/site-packages/vitrage/api/app.wsgi' + $common_package_name = 'openstack-vitrage-common' + $api_package_name = 'openstack-vitrage-api' + $api_service_name = 'openstack-vitrage-api' + $notifier_package_name = 'openstack-vitrage-notifier' + $notifier_service_name = 'openstack-vitrage-notifier' + $graph_package_name = 'openstack-vitrage-graph' + $graph_service_name = 'openstack-vitrage-graph' + $collector_package_name = 'openstack-vitrage-collector' + $collector_service_name = 'openstack-vitrage-collector' + $vitrage_wsgi_script_path = '/var/www/cgi-bin/vitrage' + $vitrage_wsgi_script_source = '/usr/lib/python2.7/site-packages/vitrage/api/app.wsgi' } 'Debian': { - $common_package_name = 'vitrage-common' - $api_package_name = 'vitrage-api' - $api_service_name = 'vitrage-api' - $notifier_package_name = 'vitrage-notifier' - $notifier_service_name = 'vitrage-notifier' - $graph_package_name = 'vitrage-graph' - $graph_service_name = 'vitrage-graph' - $vitrage_wsgi_script_path = '/usr/lib/cgi-bin/vitrage' - $vitrage_wsgi_script_source = '/usr/share/vitrage-common/app.wsgi' + $common_package_name = 'vitrage-common' + $api_package_name = 'vitrage-api' + $api_service_name = 'vitrage-api' + $notifier_package_name = 'vitrage-notifier' + $notifier_service_name = 'vitrage-notifier' + $graph_package_name = 'vitrage-graph' + $graph_service_name = 'vitrage-graph' + $collector_package_name = 'vitrage-collector' + $collector_service_name = 'vitrage-collector' + $vitrage_wsgi_script_path = '/usr/lib/cgi-bin/vitrage' + $vitrage_wsgi_script_source = '/usr/share/vitrage-common/app.wsgi' } default: { fail("Unsupported osfamily: ${::osfamily} operatingsystem") diff --git a/spec/acceptance/vitrage_wsgi_apache_spec.rb b/spec/acceptance/vitrage_wsgi_apache_spec.rb index 4ce6229..63d1509 100644 --- a/spec/acceptance/vitrage_wsgi_apache_spec.rb +++ b/spec/acceptance/vitrage_wsgi_apache_spec.rb @@ -58,6 +58,7 @@ describe 'basic vitrage' do class { '::vitrage::client': } class { '::vitrage::notifier': } class { '::vitrage::graph': } + class { '::vitrage::collector': } } default: { fail("Unsupported osfamily (${::osfamily})") diff --git a/spec/classes/vitrage_collector_spec.rb b/spec/classes/vitrage_collector_spec.rb new file mode 100644 index 0000000..58e5128 --- /dev/null +++ b/spec/classes/vitrage_collector_spec.rb @@ -0,0 +1,94 @@ +require 'spec_helper' + +describe 'vitrage::collector' do + + let :pre_condition do + "class { '::vitrage': }" + end + + shared_examples_for 'vitrage-collector' do + + context 'when enabled' do + it { is_expected.to contain_class('vitrage::deps') } + it { is_expected.to contain_class('vitrage::params') } + + it 'installs vitrage-collector package' do + is_expected.to contain_package(platform_params[:collector_package_name]).with( + :ensure => 'present', + :tag => ['openstack', 'vitrage-package'] + ) + end + + it 'configures vitrage-collector service' do + is_expected.to contain_service('vitrage-collector').with( + :ensure => 'running', + :name => platform_params[:collector_service_name], + :enable => true, + :hasstatus => true, + :hasrestart => true, + :tag => 'vitrage-service', + ) + end + + end + + context 'when disabled' do + let :params do + { :enabled => false } + end + + it { is_expected.to compile } + it 'configures vitrage-collector service' do + is_expected.to contain_service('vitrage-collector').with( + :ensure => 'stopped', + :name => platform_params[:collector_service_name], + :enable => false, + :hasstatus => true, + :hasrestart => true, + :tag => 'vitrage-service', + ) + end + end + + context 'when service management is disabled' do + let :params do + { :enabled => false, + :manage_service => false } + end + + it 'configures vitrage-collector service' do + is_expected.to contain_service('vitrage-collector').with( + :ensure => nil, + :name => platform_params[:collector_service_name], + :enable => false, + :hasstatus => true, + :hasrestart => true, + :tag => 'vitrage-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' + { :collector_package_name => 'vitrage-collector', + :collector_service_name => 'vitrage-collector' } + when 'RedHat' + { :collector_package_name => 'openstack-vitrage-collector', + :collector_service_name => 'openstack-vitrage-collector' } + end + end + it_configures 'vitrage-collector' + end + end + +end