diff --git a/manifests/server/notifications/ironic.pp b/manifests/server/notifications/ironic.pp new file mode 100644 index 000000000..c828e74be --- /dev/null +++ b/manifests/server/notifications/ironic.pp @@ -0,0 +1,90 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# == Class: neutron::server::notifications::ironic +# +# Configure notifications to ironic +# +# === Parameters +# +# [*password*] +# (required) Password for connection to ironic in admin context. +# +# [*auth_type*] +# (optional) An authentication type to use with an OpenStack Identity server. +# The value should contain auth plugin name +# Defaults to 'password' +# +# [*username*] +# (optional) Username for connection to ironic in admin context +# Defaults to 'ironic' +# +# [*project_domain_name*] +# (Optional) Name of domain for $project_name +# Defaults to 'Default' +# +# [*project_name*] +# (optional) ironic project's name +# Defaults to 'services' +# +# [*user_domain_name*] +# (Optional) Name of domain for $username +# Defaults to 'Default' +# +# [*auth_url*] +# (optional) Authorization URL for connection to ironic in admin context. +# If version independent identity plugin is used available versions will be +# determined using auth_url +# Defaults to 'http://127.0.0.1:5000' +# +# [*region_name*] +# (optional) Name of ironic region to use. Useful if keystone manages more than +# one region. +# Defaults to $::os_service_default +# +# [*valid_interfaces*] +# (optional) Interface names used for getting the keystone endpoint for +# the ironic API. Comma separated if multiple. +# Defaults to $::os_service_default +# +# [*enable_notifications*] +# (optional) Send notification events to ironic +# Defaults to $::os_service_default +# +class neutron::server::notifications::ironic ( + $password, + $auth_type = 'password', + $username = 'ironic', + $project_domain_name = 'Default', + $project_name = 'services', + $user_domain_name = 'Default', + $auth_url = 'http://127.0.0.1:5000', + $region_name = $::os_service_default, + $valid_interfaces = $::os_service_default, + $enable_notifications = $::os_service_default, +) { + + include neutron::deps + + neutron_config { + 'ironic/auth_url': value => $auth_url; + 'ironic/username': value => $username; + 'ironic/password': value => $password, secret => true; + 'ironic/project_domain_name': value => $project_domain_name; + 'ironic/project_name': value => $project_name; + 'ironic/user_domain_name': value => $user_domain_name; + 'ironic/region_name': value => $region_name; + 'ironic/auth_type': value => $auth_type; + 'ironic/valid_interfaces': value => $valid_interfaces; + 'ironic/enable_notifications': value => $enable_notifications; + } +} diff --git a/releasenotes/notes/server-notifications-ironic-01a481317cf11c08.yaml b/releasenotes/notes/server-notifications-ironic-01a481317cf11c08.yaml new file mode 100644 index 000000000..eee26056d --- /dev/null +++ b/releasenotes/notes/server-notifications-ironic-01a481317cf11c08.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + The new ``neutron::server::notifications::ironic`` class has been added + to support configuration parameters to enable notifications to ironic. diff --git a/spec/classes/neutron_server_notifications_ironic_spec.rb b/spec/classes/neutron_server_notifications_ironic_spec.rb new file mode 100644 index 000000000..38ef03afb --- /dev/null +++ b/spec/classes/neutron_server_notifications_ironic_spec.rb @@ -0,0 +1,84 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# Unit tests for neutron::server::notifications::ironic class +# + +require 'spec_helper' + +describe 'neutron::server::notifications::ironic' do + let :params do + { + :auth_type => 'password', + :username => 'ironic', + :password => 'secrete', + :project_domain_name => 'Default', + :project_name => 'services', + :user_domain_name => 'Default', + :auth_url => 'http://127.0.0.1:5000', + } + end + + shared_examples 'neutron::server::notifications::ironic' do + it 'configure neutron.conf' do + should contain_neutron_config('ironic/auth_type').with_value('password') + should contain_neutron_config('ironic/auth_url').with_value('http://127.0.0.1:5000') + should contain_neutron_config('ironic/username').with_value('ironic') + should contain_neutron_config('ironic/password').with_value('secrete').with_secret( true ) + should contain_neutron_config('ironic/region_name').with_value('') + should contain_neutron_config('ironic/project_domain_name').with_value('Default') + should contain_neutron_config('ironic/user_domain_name').with_value('Default') + should contain_neutron_config('ironic/valid_interfaces').with_value('') + should contain_neutron_config('ironic/enable_notifications').with_value('') + end + + context 'when overriding parameters' do + before :each do + params.merge!( + :auth_url => 'http://keystone:5000/v3', + :auth_type => 'password', + :username => 'joe', + :region_name => 'MyRegion', + :project_domain_name => 'Default_1', + :user_domain_name => 'Default_2', + :valid_interfaces => 'internal', + :enable_notifications => false, + ) + end + + it 'should configure neutron server with overrided parameters' do + should contain_neutron_config('ironic/auth_url').with_value('http://keystone:5000/v3') + should contain_neutron_config('ironic/auth_type').with_value('password') + should contain_neutron_config('ironic/username').with_value('joe') + should contain_neutron_config('ironic/password').with_value('secrete').with_secret(true) + should contain_neutron_config('ironic/region_name').with_value('MyRegion') + should contain_neutron_config('ironic/project_domain_name').with_value('Default_1') + should contain_neutron_config('ironic/user_domain_name').with_value('Default_2') + should contain_neutron_config('ironic/valid_interfaces').with_value('internal') + should contain_neutron_config('ironic/enable_notifications').with_value(false) + 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 + + it_behaves_like 'neutron::server::notifications::ironic' + end + end +end