From 2f0f24c5e7c75d160452020f0445dea122dd1ad5 Mon Sep 17 00:00:00 2001 From: Andrey Shestakov Date: Tue, 17 May 2016 18:49:51 +0300 Subject: [PATCH] Implement nova::ironic::common class This change introduces new class nova::ironic::common which adds common Ironic related parameters to nova.conf required for nova-api and nova-compute. Change-Id: Ia878d19cffd833e9bf95d1b26ff0c2b6c02370d0 Closes-bug: #1581040 --- manifests/compute/ironic.pp | 42 +++++++++++------ manifests/ironic/common.pp | 58 ++++++++++++++++++++++++ spec/classes/nova_compute_ironic_spec.rb | 33 +++++++------- spec/classes/nova_ironic_common_spec.rb | 52 +++++++++++++++++++++ 4 files changed, 154 insertions(+), 31 deletions(-) create mode 100644 manifests/ironic/common.pp create mode 100644 spec/classes/nova_ironic_common_spec.rb diff --git a/manifests/compute/ironic.pp b/manifests/compute/ironic.pp index 94f151dac..bc6fa0b98 100644 --- a/manifests/compute/ironic.pp +++ b/manifests/compute/ironic.pp @@ -39,13 +39,13 @@ # Defaults to $::os_service_default. # class nova::compute::ironic ( - $admin_username = 'admin', - $admin_password = 'ironic', - $admin_url = 'http://127.0.0.1:35357/v2.0', - $admin_tenant_name = 'services', - $api_endpoint = 'http://127.0.0.1:6385/v1', $max_concurrent_builds = $::os_service_default, # DEPRECATED PARAMETERS + $admin_username = undef, + $admin_password = undef, + $admin_url = undef, + $admin_tenant_name = undef, + $api_endpoint = undef, $admin_user = undef, $admin_passwd = undef, $compute_driver = 'ironic.IronicDriver' @@ -54,22 +54,36 @@ class nova::compute::ironic ( include ::nova::deps if $admin_user { - warning('The admin_user parameter is deprecated, use admin_username instead.') + warning('The admin_user parameter in class nova::compute::ironic is deprecated, use class nova::ironic::common instead.') } if $admin_passwd { - warning('The admin_passwd parameter is deprecated, use admin_password instead.') + warning('The admin_passwd parameter in class nova::compute::ironic is deprecated, use class nova::ironic::common instead.') } - $admin_username_real = pick($admin_user, $admin_username) - $admin_password_real = pick($admin_passwd, $admin_password) + if $admin_username { + warning('The admin_username parameter in class nova::compute::ironic is deprecated, use class nova::ironic::common instead.') + } + + if $admin_password { + warning('The admin_password parameter in class nova::compute::ironic is deprecated, use class nova::ironic::common instead.') + } + + if $admin_url { + warning('The admin_url parameter in class nova::compute::ironic is deprecated, use class nova::ironic::common instead.') + } + + if $admin_tenant_name { + warning('The admin_tenant_name parameter in class nova::compute::ironic is deprecated, use class nova::ironic::common instead.') + } + + if $api_endpoint { + warning('The api_endpoint parameter in class nova::compute::ironic is deprecated, use class nova::ironic::common instead.') + } + + include ::nova::ironic::common nova_config { - 'ironic/admin_username': value => $admin_username_real; - 'ironic/admin_password': value => $admin_password_real; - 'ironic/admin_url': value => $admin_url; - 'ironic/admin_tenant_name': value => $admin_tenant_name; - 'ironic/api_endpoint': value => $api_endpoint; 'DEFAULT/compute_driver': value => $compute_driver; 'DEFAULT/max_concurrent_builds': value => $max_concurrent_builds; } diff --git a/manifests/ironic/common.pp b/manifests/ironic/common.pp new file mode 100644 index 000000000..a9cb1bd47 --- /dev/null +++ b/manifests/ironic/common.pp @@ -0,0 +1,58 @@ +# == Class: nova::ironic::common +# +# [*admin_username*] +# The admin username for Ironic to connect to Nova. +# Defaults to 'admin' +# +# [*admin_password*] +# The admin password for Ironic to connect to Nova. +# Defaults to 'ironic' +# +# [*admin_url*] +# The address of the Keystone api endpoint. +# Defaults to 'http://127.0.0.1:35357/v2.0' +# +# [*admin_tenant_name*] +# The Ironic Keystone tenant name. +# Defaults to 'services' +# +# [*api_endpoint*] +# The url for Ironic api endpoint. +# Defaults to 'http://127.0.0.1:6385/v1' +# +class nova::ironic::common ( + $admin_username = 'admin', + $admin_password = 'ironic', + $admin_tenant_name = 'services', + $admin_url = 'http://127.0.0.1:35357/v2.0', + $api_endpoint = 'http://127.0.0.1:6385/v1', +) { + + include ::nova::deps + + $admin_username_real = pick( + $::nova::compute::ironic::admin_user, + $::nova::compute::ironic::admin_username, + $admin_username) + $admin_password_real = pick( + $::nova::compute::ironic::admin_passwd, + $::nova::compute::ironic::admin_password, + $admin_password) + $admin_tenant_name_real = pick( + $::nova::compute::ironic::admin_tenant_name, + $admin_tenant_name) + $admin_url_real = pick( + $::nova::compute::ironic::admin_url, + $admin_url) + $api_endpoint_real = pick( + $::nova::compute::ironic::api_endpoint, + $api_endpoint) + + nova_config { + 'ironic/admin_username': value => $admin_username_real; + 'ironic/admin_password': value => $admin_password_real; + 'ironic/admin_url': value => $admin_url_real; + 'ironic/admin_tenant_name': value => $admin_tenant_name_real; + 'ironic/api_endpoint': value => $api_endpoint_real; + } +} diff --git a/spec/classes/nova_compute_ironic_spec.rb b/spec/classes/nova_compute_ironic_spec.rb index 37d0a6777..9211fe04c 100644 --- a/spec/classes/nova_compute_ironic_spec.rb +++ b/spec/classes/nova_compute_ironic_spec.rb @@ -6,11 +6,6 @@ describe 'nova::compute::ironic' do context 'with default parameters' do it 'configures ironic in nova.conf' do - is_expected.to contain_nova_config('ironic/admin_username').with_value('admin') - is_expected.to contain_nova_config('ironic/admin_password').with_value('ironic') - is_expected.to contain_nova_config('ironic/admin_url').with_value('http://127.0.0.1:35357/v2.0') - is_expected.to contain_nova_config('ironic/admin_tenant_name').with_value('services') - is_expected.to contain_nova_config('ironic/api_endpoint').with_value('http://127.0.0.1:6385/v1') is_expected.to contain_nova_config('DEFAULT/compute_driver').with_value('ironic.IronicDriver') is_expected.to contain_nova_config('DEFAULT/max_concurrent_builds').with_value('') end @@ -19,22 +14,12 @@ describe 'nova::compute::ironic' do context 'with overridden parameters' do let :params do { - :admin_username => 'ironic', - :admin_password => 's3cr3t', - :admin_url => 'http://10.0.0.10:35357/v2.0', - :admin_tenant_name => 'services2', - :api_endpoint => 'http://10.0.0.10:6385/v1', :compute_driver => 'ironic.FoobarDriver', :max_concurrent_builds => 15, } end it 'configures ironic in nova.conf' do - is_expected.to contain_nova_config('ironic/admin_username').with_value('ironic') - is_expected.to contain_nova_config('ironic/admin_password').with_value('s3cr3t') - is_expected.to contain_nova_config('ironic/admin_url').with_value('http://10.0.0.10:35357/v2.0') - is_expected.to contain_nova_config('ironic/admin_tenant_name').with_value('services2') - is_expected.to contain_nova_config('ironic/api_endpoint').with_value('http://10.0.0.10:6385/v1') is_expected.to contain_nova_config('DEFAULT/compute_driver').with_value('ironic.FoobarDriver') is_expected.to contain_nova_config('DEFAULT/max_concurrent_builds').with_value(15) end @@ -43,17 +28,31 @@ describe 'nova::compute::ironic' do context 'with deprecated parameters' do let :params do - {:admin_user => 'ironic-user', - :admin_passwd => 'ironic-s3cr3t'} + { + :admin_user => 'ironic-user', + :admin_passwd => 'ironic-s3cr3t', + :admin_url => 'http://10.0.0.10:35357/v2.0', + :admin_tenant_name => 'services2', + :api_endpoint => 'http://10.0.0.10:6385/v1', + } end it 'configures ironic in nova.conf' do is_expected.to contain_nova_config('ironic/admin_username').with_value('ironic-user') is_expected.to contain_nova_config('ironic/admin_password').with_value('ironic-s3cr3t') + is_expected.to contain_nova_config('ironic/admin_url').with_value('http://10.0.0.10:35357/v2.0') + is_expected.to contain_nova_config('ironic/admin_tenant_name').with_value('services2') + is_expected.to contain_nova_config('ironic/api_endpoint').with_value('http://10.0.0.10:6385/v1') end end end + context 'always' do + it 'contains the ironic common class' do + is_expected.to contain_class('nova::ironic::common') + end + end + on_supported_os({ :supported_os => OSDefaults.get_supported_os }).each do |os,facts| diff --git a/spec/classes/nova_ironic_common_spec.rb b/spec/classes/nova_ironic_common_spec.rb new file mode 100644 index 000000000..cef842ba2 --- /dev/null +++ b/spec/classes/nova_ironic_common_spec.rb @@ -0,0 +1,52 @@ +require 'spec_helper' + +describe 'nova::ironic::common' do + + shared_examples_for 'nova-ironic-common' do + + context 'with default parameters' do + it 'configures ironic in nova.conf' do + is_expected.to contain_nova_config('ironic/admin_username').with_value('admin') + is_expected.to contain_nova_config('ironic/admin_password').with_value('ironic') + is_expected.to contain_nova_config('ironic/admin_url').with_value('http://127.0.0.1:35357/v2.0') + is_expected.to contain_nova_config('ironic/admin_tenant_name').with_value('services') + is_expected.to contain_nova_config('ironic/api_endpoint').with_value('http://127.0.0.1:6385/v1') + end + end + + context 'with overridden parameters' do + let :params do + { + :admin_username => 'ironic', + :admin_password => 's3cr3t', + :admin_url => 'http://10.0.0.10:35357/v2.0', + :admin_tenant_name => 'services2', + :api_endpoint => 'http://10.0.0.10:6385/v1', + } + end + + it 'configures ironic in nova.conf' do + is_expected.to contain_nova_config('ironic/admin_username').with_value('ironic') + is_expected.to contain_nova_config('ironic/admin_password').with_value('s3cr3t') + is_expected.to contain_nova_config('ironic/admin_url').with_value('http://10.0.0.10:35357/v2.0') + is_expected.to contain_nova_config('ironic/admin_tenant_name').with_value('services2') + is_expected.to contain_nova_config('ironic/api_endpoint').with_value('http://10.0.0.10:6385/v1') + 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({ + :fqdn => 'some.host.tld', + :processorcount => 2, + :concat_basedir => '/var/lib/puppet/concat' + })) + end + it_configures 'nova-ironic-common' + end + end +end