From ad7109f348953ffe2f516b298aa37901bd703e19 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Sat, 21 Nov 2015 20:18:30 -0500 Subject: [PATCH] Add mistral::engine class Adds a new class to manage the mistral-engine package/service. Change-Id: I8ea961a8f70edf50f69e7fa8c74016e6adbb861c --- manifests/engine.pp | 79 ++++++++++++++++++++++++ manifests/params.pp | 10 ++- spec/classes/mistral_engine_spec.rb | 96 +++++++++++++++++++++++++++++ 3 files changed, 182 insertions(+), 3 deletions(-) create mode 100644 manifests/engine.pp create mode 100644 spec/classes/mistral_engine_spec.rb diff --git a/manifests/engine.pp b/manifests/engine.pp new file mode 100644 index 0000000..f6c7c2e --- /dev/null +++ b/manifests/engine.pp @@ -0,0 +1,79 @@ +# == Class: mistral::engine +# +# Installs & configure the Mistral Engine service +# +# === Parameters +# [*package_ensure*] +# (Optional) Ensure state for package. +# Defaults to present +# +# [*enabled*] +# (optional) Should the service be enabled. +# Defaults to 'true'. +# +# [*manage_service*] +# (optional) Whether the service should be managed by Puppet. +# Defaults to 'true'. +# +# [*host*] +# (Optional) Name of the engine node. This can be an opaque identifier. +# It is not necessarily a hostname, FQDN, or IP address. (string value) +# Defaults to $::os_service_default. +# +# [*topic*] +# (Optional) The message topic that the engine listens on. +# Defaults to $::os_service_default. +# +# [*version*] +# (Optional) The version of the engine. (string value) +# Defaults to $::os_service_default. +# +# [*execution_field_size_limit_kb*] +# (Optional) The default maximum size in KB of large text fields +# of runtime execution objects. Use -1 for no limit. +# Defaults to $::os_service_default. +# +class mistral::engine ( + $package_ensure = present, + $manage_service = true, + $enabled = true, + $host = $::os_service_default, + $topic = $::os_service_default, + $version = $::os_service_default, + $execution_field_size_limit_kb = $::os_service_default, +) { + + include ::mistral + include ::mistral::params + + package { 'mistral-engine': + ensure => $package_ensure, + name => $::mistral::params::engine_package_name, + tag => ['openstack', 'mistral-package'], + } + + if $manage_service { + if $enabled { + $service_ensure = 'running' + } else { + $service_ensure = 'stopped' + } + } + + service { 'mistral-engine': + ensure => $service_ensure, + name => $::mistral::params::engine_service_name, + enable => $enabled, + hasstatus => true, + hasrestart => true, + tag => 'mistral-service', + } + + mistral_config { + 'engine/host' : value => $host; + 'engine/topic' : value => $topic; + 'engine/version' : value => $version; + 'engine/execution_field_size_limit_kb' : value => $execution_field_size_limit_kb; + } + +} diff --git a/manifests/params.pp b/manifests/params.pp index e545297..47bb297 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -15,11 +15,15 @@ class mistral::params { $common_package_name = 'openstack-mistral-common' $api_package_name = 'openstack-mistral-api' $api_service_name = 'openstack-mistral-api' + $engine_package_name = 'openstack-mistral-engine' + $engine_service_name = 'openstack-mistral-engine' } 'Debian': { - $common_package_name = 'mistral' - $api_package_name = 'mistral-api' - $api_service_name = 'mistral-api' + $common_package_name = 'mistral' + $api_package_name = 'mistral-api' + $api_service_name = 'mistral-api' + $engine_package_name = 'mistral-engine' + $engine_service_name = 'mistral-engine' } default: { fail("Unsupported osfamily: ${::osfamily} operatingsystem: \ diff --git a/spec/classes/mistral_engine_spec.rb b/spec/classes/mistral_engine_spec.rb new file mode 100644 index 0000000..9cbf9a6 --- /dev/null +++ b/spec/classes/mistral_engine_spec.rb @@ -0,0 +1,96 @@ +require 'spec_helper' + +describe 'mistral::engine' do + + let :params do + { :enabled => true, + :manage_service => true, + :host => 'foo_host', + :topic => 'foo_topic', + :version => '1.0', + :execution_field_size_limit_kb => '1234'} + end + + shared_examples_for 'mistral-engine' do + + context 'config params' do + + it { is_expected.to contain_class('mistral') } + it { is_expected.to contain_class('mistral::params') } + + it { is_expected.to contain_mistral_config('engine/host').with_value( params[:host] ) } + it { is_expected.to contain_mistral_config('engine/topic').with_value( params[:topic] ) } + it { is_expected.to contain_mistral_config('engine/version').with_value( params[:version] ) } + it { is_expected.to contain_mistral_config('engine/execution_field_size_limit_kb').with_value( params[:execution_field_size_limit_kb] ) } + + 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 mistral-engine service' do + + is_expected.to contain_service('mistral-engine').with( + :ensure => (params[:manage_service] && params[:enabled]) ? 'running' : 'stopped', + :name => platform_params[:engine_service_name], + :enable => params[:enabled], + :hasstatus => true, + :hasrestart => true, + :tag => 'mistral-service', + ) + is_expected.to contain_service('mistral-engine').that_subscribes_to(nil) + end + end + end + + context 'with disabled service managing' do + before do + params.merge!({ + :manage_service => false, + :enabled => false }) + end + + it 'configures mistral-engine service' do + + is_expected.to contain_service('mistral-engine').with( + :ensure => nil, + :name => platform_params[:engine_service_name], + :enable => false, + :hasstatus => true, + :hasrestart => true, + :tag => 'mistral-service', + ) + is_expected.to contain_service('mistral-engine').that_subscribes_to(nil) + end + end + + end + + context 'on Debian platforms' do + let :facts do + { :osfamily => 'Debian' } + end + + let :platform_params do + { :engine_service_name => 'mistral-engine' } + end + + it_configures 'mistral-engine' + end + + context 'on RedHat platforms' do + let :facts do + { :osfamily => 'RedHat' } + end + + let :platform_params do + { :engine_service_name => 'openstack-mistral-engine' } + end + + it_configures 'mistral-engine' + end + +end