From f2ab2d4783745a227a964faaf1fefc0b63769700 Mon Sep 17 00:00:00 2001 From: Tobias Urdin Date: Wed, 31 Oct 2018 17:11:06 +0100 Subject: [PATCH] Convert some spec testing to rspec-puppet-facts Still some to do but these are causing issues right now. Change-Id: I667be66f75069d078ea8c6cd8ca34add2297d335 --- manifests/metadata/novajoin/api.pp | 2 +- manifests/vendordata.pp | 2 + spec/classes/nova_config_spec.rb | 62 ++-- .../nova_metadata_novajoin_api_spec.rb | 330 ++++++++---------- .../nova_metadata_novajoin_auth_spec.rb | 309 ++++++++-------- 5 files changed, 352 insertions(+), 353 deletions(-) diff --git a/manifests/metadata/novajoin/api.pp b/manifests/metadata/novajoin/api.pp index 6cec556b3..69ac58b53 100644 --- a/manifests/metadata/novajoin/api.pp +++ b/manifests/metadata/novajoin/api.pp @@ -244,7 +244,7 @@ class nova::metadata::novajoin::api ( exec { 'get-service-user-keytab': command => "/usr/bin/kinit -kt /etc/krb5.keytab && ipa-getkeytab -s ${ipa_hostname_real} \ - -p nova/${::fqdn} -k ${keytab}", +-p nova/${::fqdn} -k ${keytab}", creates => $keytab, } diff --git a/manifests/vendordata.pp b/manifests/vendordata.pp index 28d73c365..79fb6bde6 100644 --- a/manifests/vendordata.pp +++ b/manifests/vendordata.pp @@ -103,6 +103,7 @@ class nova::vendordata( # ::nova::metadata, we remove the checkes here. if $vendordata_caller { if ($vendordata_caller == 'metadata') { + # lint:ignore:140chars $vendordata_jsonfile_path_real = pick($::nova::metadata::vendordata_jsonfile_path, $vendordata_jsonfile_path) $vendordata_providers_pick = pick($::nova::metadata::vendordata_providers, $vendordata_providers) $vendordata_dynamic_targets_pick = pick($::nova::metadata::vendordata_dynamic_targets, $vendordata_dynamic_targets) @@ -132,6 +133,7 @@ class nova::vendordata( $vendordata_dynamic_auth_project_name_real = pick($::nova::api::vendordata_dynamic_auth_project_name, $vendordata_dynamic_auth_project_name) $vendordata_dynamic_auth_user_domain_name_real = pick($::nova::api::vendordata_dynamic_auth_user_domain_name, $vendordata_dynamic_auth_user_domain_name) $vendordata_dynamic_auth_username_real = pick($::nova::api::vendordata_dynamic_auth_username, $vendordata_dynamic_auth_username) + # lint:endignore } } else { $vendordata_jsonfile_path_real = $vendordata_jsonfile_path diff --git a/spec/classes/nova_config_spec.rb b/spec/classes/nova_config_spec.rb index 472cbcef0..58817f5fd 100644 --- a/spec/classes/nova_config_spec.rb +++ b/spec/classes/nova_config_spec.rb @@ -1,32 +1,48 @@ require 'spec_helper' describe 'nova::config' do - - let :params do - { :nova_config => { - 'DEFAULT/foo' => { 'value' => 'fooValue' }, - 'DEFAULT/bar' => { 'value' => 'barValue' }, - 'DEFAULT/baz' => { 'ensure' => 'absent' } - }, - :nova_paste_api_ini => { - 'DEFAULT/foo2' => { 'value' => 'fooValue' }, - 'DEFAULT/bar2' => { 'value' => 'barValue' }, - 'DEFAULT/baz2' => { 'ensure' => 'absent' } + shared_examples 'nova::config' do + let :params do + { + :nova_config => { + 'DEFAULT/foo' => { 'value' => 'fooValue' }, + 'DEFAULT/bar' => { 'value' => 'barValue' }, + 'DEFAULT/baz' => { 'ensure' => 'absent' } + }, + :nova_paste_api_ini => { + 'DEFAULT/foo2' => { 'value' => 'fooValue' }, + 'DEFAULT/bar2' => { 'value' => 'barValue' }, + 'DEFAULT/baz2' => { 'ensure' => 'absent' } + } } - } + end + + context 'with specified configs' do + it { should contain_class('nova::deps') } + + it { + should contain_nova_config('DEFAULT/foo').with_value('fooValue') + should contain_nova_config('DEFAULT/bar').with_value('barValue') + should contain_nova_config('DEFAULT/baz').with_ensure('absent') + } + + it { + should contain_nova_paste_api_ini('DEFAULT/foo2').with_value('fooValue') + should contain_nova_paste_api_ini('DEFAULT/bar2').with_value('barValue') + should contain_nova_paste_api_ini('DEFAULT/baz2').with_ensure('absent') + } + end end - it { is_expected.to contain_class('nova::deps') } + 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 'configures arbitrary nova configurations' do - is_expected.to contain_nova_config('DEFAULT/foo').with_value('fooValue') - is_expected.to contain_nova_config('DEFAULT/bar').with_value('barValue') - is_expected.to contain_nova_config('DEFAULT/baz').with_ensure('absent') - end - - it 'configures arbitrary nova api-paste configurations' do - is_expected.to contain_nova_paste_api_ini('DEFAULT/foo2').with_value('fooValue') - is_expected.to contain_nova_paste_api_ini('DEFAULT/bar2').with_value('barValue') - is_expected.to contain_nova_paste_api_ini('DEFAULT/baz2').with_ensure('absent') + it_behaves_like 'nova::config' + end end end diff --git a/spec/classes/nova_metadata_novajoin_api_spec.rb b/spec/classes/nova_metadata_novajoin_api_spec.rb index baa2130c6..a6b0f4767 100644 --- a/spec/classes/nova_metadata_novajoin_api_spec.rb +++ b/spec/classes/nova_metadata_novajoin_api_spec.rb @@ -1,19 +1,6 @@ require 'spec_helper' describe 'nova::metadata::novajoin::api' do - - let :facts do - @default_facts.merge( - { - :osfamily => 'RedHat', - :processorcount => '7', - :fqdn => "undercloud.example.com", - :operatingsystemrelease => '7.0', - :ipa_hostname => 'ipa.ipadomain' - } - ) - end - let :default_params do { :bind_address => '127.0.0.1', @@ -41,186 +28,171 @@ describe 'nova::metadata::novajoin::api' do } end - [{}, - { - :bind_address => '0.0.0.0', - :api_paste_config => '/etc/novajoin/join-api-paste.ini', - :auth_strategy => 'noauth2', - :auth_type => 'password', - :cacert => '/etc/ipa/ca.crt', - :connect_retries => 2, - :debug => true, - :enabled => false, - :enable_ipa_client_install => false, - :ensure_package => 'present', - :join_listen_port => '9921', - :keytab => '/etc/krb5.conf', - :log_dir => '/var/log/novajoin', - :manage_service => true, - :service_user => 'novajoin1', - :project_domain_name => 'default', - :project_name => 'service', - :user_domain_id => 'default', - :ipa_domain => 'EXAMPLE2.COM', - :keystone_auth_url => 'https://keystone2.example.com:5000', - :service_password => 'my_secret_password2', - :transport_url => 'rabbit:rabbit_pass2@rabbit_host', - } - ].each do |param_set| + let :pre_condition do + "class { '::ipaclient': password => 'join_otp', } + class { '::nova::metadata::novajoin::authtoken': + password => 'passw0rd', + }" + end - describe "when #{param_set == {} ? "using default" : "specifying"} class parameters" do - - let :param_hash do - default_params.merge(param_set) - end - - let :params do - param_hash - end - - let :pre_condition do - "class { '::ipaclient': - password => 'join_otp' - } - class { '::nova::metadata::novajoin::authtoken': - password => 'passw0rd', - } - " - end - - it { is_expected.to contain_class('nova::metadata::novajoin::authtoken') } - - it { is_expected.to contain_service('novajoin-server').with( - 'ensure' => (param_hash[:manage_service] && param_hash[:enabled]) ? 'running': 'stopped', - 'enable' => param_hash[:enabled], - 'hasstatus' => true, - 'hasrestart' => true, - 'tag' => 'openstack', - ) } - - it { is_expected.to contain_service('novajoin-notify').with( - 'ensure' => (param_hash[:manage_service] && param_hash[:enabled]) ? 'running': 'stopped', - 'enable' => param_hash[:enabled], - 'hasstatus' => true, - 'hasrestart' => true, - 'tag' => 'openstack', - ) } - - it 'is_expected.to configure default parameters' do - is_expected.to contain_novajoin_config('DEFAULT/join_listen').with_value(param_hash[:bind_address]) - is_expected.to contain_novajoin_config('DEFAULT/api_paste_config').with_value(param_hash[:api_paste_config]) - is_expected.to contain_novajoin_config('DEFAULT/auth_strategy').with_value(param_hash[:auth_strategy]) - is_expected.to contain_novajoin_config('DEFAULT/cacert').with_value(param_hash[:cacert]) - is_expected.to contain_novajoin_config('DEFAULT/connect_retries').with_value(param_hash[:connect_retries]) - is_expected.to contain_novajoin_config('DEFAULT/debug').with_value(param_hash[:debug]) - is_expected.to contain_novajoin_config('DEFAULT/join_listen_port').with_value(param_hash[:join_listen_port]) - is_expected.to contain_novajoin_config('DEFAULT/keytab').with_value(param_hash[:keytab]) - is_expected.to contain_novajoin_config('DEFAULT/log_dir').with_value(param_hash[:log_dir]) - is_expected.to contain_novajoin_config('DEFAULT/domain').with_value(param_hash[:ipa_domain]) - is_expected.to contain_novajoin_config('DEFAULT/transport_url').with_value(param_hash[:transport_url]) - end - - it 'is_expected.to configure service credentials' do - is_expected.to contain_novajoin_config('service_credentials/auth_type').with_value(param_hash[:auth_type]) - is_expected.to contain_novajoin_config('service_credentials/auth_url').with_value(param_hash[:keystone_auth_url]) - is_expected.to contain_novajoin_config('service_credentials/password').with_value(param_hash[:service_password]) - is_expected.to contain_novajoin_config('service_credentials/project_name').with_value(param_hash[:project_name]) - is_expected.to contain_novajoin_config('service_credentials/user_domain_id').with_value(param_hash[:user_domain_id]) - is_expected.to contain_novajoin_config('service_credentials/project_domain_name').with_value(param_hash[:project_domain_name]) - is_expected.to contain_novajoin_config('service_credentials/username').with_value(param_hash[:service_user]) - end - - it 'is_expected.to get service user keytab' do - if param_hash[:enable_ipa_client_install] - is_expected.to contain_exec('get-service-user-keytab').with( - 'command' => "/usr/bin/kinit -kt /etc/krb5.keytab && ipa-getkeytab -s `grep xmlrpc_uri /etc/ipa/default.conf | cut -d/ -f3` \ - -p nova/undercloud.example.com -k #{param_hash[:keytab]}", - ) - else - is_expected.to contain_exec('get-service-user-keytab').with( - 'command' => "/usr/bin/kinit -kt /etc/krb5.keytab && ipa-getkeytab -s ipa.ipadomain \ - -p nova/undercloud.example.com -k #{param_hash[:keytab]}", - ) + shared_examples 'nova::metadata::novajoin::api' do + [{}, + { + :bind_address => '0.0.0.0', + :api_paste_config => '/etc/novajoin/join-api-paste.ini', + :auth_strategy => 'noauth2', + :auth_type => 'password', + :cacert => '/etc/ipa/ca.crt', + :connect_retries => 2, + :debug => true, + :enabled => false, + :enable_ipa_client_install => false, + :ensure_package => 'present', + :join_listen_port => '9921', + :keytab => '/etc/krb5.conf', + :log_dir => '/var/log/novajoin', + :manage_service => true, + :service_user => 'novajoin1', + :project_domain_name => 'default', + :project_name => 'service', + :user_domain_id => 'default', + :ipa_domain => 'EXAMPLE2.COM', + :keystone_auth_url => 'https://keystone2.example.com:5000', + :service_password => 'my_secret_password2', + :transport_url => 'rabbit:rabbit_pass2@rabbit_host', + } + ].each do |param_set| + context "when #{param_set == {} ? "using default" : "specifying"} class parameters" do + let :param_hash do + default_params.merge(param_set) end + + let :params do + param_hash + end + + it { should contain_class('nova::metadata::novajoin::authtoken') } + + it { should contain_service('novajoin-server').with( + 'ensure' => (param_hash[:manage_service] && param_hash[:enabled]) ? 'running': 'stopped', + 'enable' => param_hash[:enabled], + 'hasstatus' => true, + 'hasrestart' => true, + 'tag' => 'openstack', + )} + + it { should contain_service('novajoin-notify').with( + 'ensure' => (param_hash[:manage_service] && param_hash[:enabled]) ? 'running': 'stopped', + 'enable' => param_hash[:enabled], + 'hasstatus' => true, + 'hasrestart' => true, + 'tag' => 'openstack', + )} + + it { + should contain_novajoin_config('DEFAULT/join_listen').with_value(param_hash[:bind_address]) + should contain_novajoin_config('DEFAULT/api_paste_config').with_value(param_hash[:api_paste_config]) + should contain_novajoin_config('DEFAULT/auth_strategy').with_value(param_hash[:auth_strategy]) + should contain_novajoin_config('DEFAULT/cacert').with_value(param_hash[:cacert]) + should contain_novajoin_config('DEFAULT/connect_retries').with_value(param_hash[:connect_retries]) + should contain_novajoin_config('DEFAULT/debug').with_value(param_hash[:debug]) + should contain_novajoin_config('DEFAULT/join_listen_port').with_value(param_hash[:join_listen_port]) + should contain_novajoin_config('DEFAULT/keytab').with_value(param_hash[:keytab]) + should contain_novajoin_config('DEFAULT/log_dir').with_value(param_hash[:log_dir]) + should contain_novajoin_config('DEFAULT/domain').with_value(param_hash[:ipa_domain]) + should contain_novajoin_config('DEFAULT/transport_url').with_value(param_hash[:transport_url]) + } + + it { + should contain_novajoin_config('service_credentials/auth_type').with_value(param_hash[:auth_type]) + should contain_novajoin_config('service_credentials/auth_url').with_value(param_hash[:keystone_auth_url]) + should contain_novajoin_config('service_credentials/password').with_value(param_hash[:service_password]) + should contain_novajoin_config('service_credentials/project_name').with_value(param_hash[:project_name]) + should contain_novajoin_config('service_credentials/user_domain_id').with_value(param_hash[:user_domain_id]) + should contain_novajoin_config('service_credentials/project_domain_name').with_value(param_hash[:project_domain_name]) + should contain_novajoin_config('service_credentials/username').with_value(param_hash[:service_user]) + } + + it { + if param_hash[:enable_ipa_client_install] + should contain_exec('get-service-user-keytab').with( + 'command' => "/usr/bin/kinit -kt /etc/krb5.keytab && ipa-getkeytab -s `grep xmlrpc_uri /etc/ipa/default.conf | cut -d/ -f3` \ +-p nova/undercloud.example.com -k #{param_hash[:keytab]}", + ) + else + should contain_exec('get-service-user-keytab').with( + 'command' => "/usr/bin/kinit -kt /etc/krb5.keytab && ipa-getkeytab -s ipa.ipadomain \ +-p nova/undercloud.example.com -k #{param_hash[:keytab]}", + ) + end + } + + it { should contain_file("/var/log/novajoin").with( + 'ensure' => 'directory', + 'owner' => "#{param_hash[:service_user]}", + 'group' => "#{param_hash[:service_user]}", + 'recurse' => true + )} + + it { should contain_file("#{param_hash[:keytab]}").with( + 'owner' => "#{param_hash[:service_user]}", + 'require' => 'Exec[get-service-user-keytab]', + )} + end + end + + context 'with disabled service managing' do + let :params do + { + :manage_service => false, + :enabled => false, + :ipa_domain => 'EXAMPLE.COM', + :service_password => 'my_secret_password', + :transport_url => 'rabbit:rabbit_pass@rabbit_host', + } end - it { is_expected.to contain_file("/var/log/novajoin").with( - 'ensure' => 'directory', - 'owner' => "#{param_hash[:service_user]}", - 'group' => "#{param_hash[:service_user]}", - 'recurse' => true + it { should contain_service('novajoin-server').with( + 'ensure' => nil, + 'enable' => false, + 'hasstatus' => true, + 'hasrestart' => true, + 'tag' => 'openstack', )} - it { is_expected.to contain_file("#{param_hash[:keytab]}").with( - 'owner' => "#{param_hash[:service_user]}", - 'require' => 'Exec[get-service-user-keytab]', + it { should contain_service('novajoin-notify').with( + 'ensure' => nil, + 'enable' => false, + 'hasstatus' => true, + 'hasrestart' => true, + 'tag' => 'openstack', )} - end end - describe 'with disabled service managing' do - let :facts do - OSDefaults.get_facts({ - :osfamily => 'RedHat', - :operatingsystem => 'RedHat', - :operatingsystemrelease => '7.0', - }) - end - + shared_examples 'nova::metadata::novajoin::api on RedHat' do let :params do - { - :manage_service => false, - :enabled => false, - :ipa_domain => 'EXAMPLE.COM', - :service_password => 'my_secret_password', - :transport_url => 'rabbit:rabbit_pass@rabbit_host', - } + default_params end - let :pre_condition do - "class { '::ipaclient': password => 'join_otp', } - class { '::nova::metadata::novajoin::authtoken': - password => 'passw0rd', - }" - end - - it { is_expected.to contain_service('novajoin-server').with( - 'ensure' => nil, - 'enable' => false, - 'hasstatus' => true, - 'hasrestart' => true, - 'tag' => 'openstack', - ) } - - it { is_expected.to contain_service('novajoin-notify').with( - 'ensure' => nil, - 'enable' => false, - 'hasstatus' => true, - 'hasrestart' => true, - 'tag' => 'openstack', - ) } - end - - describe 'on RedHat platforms' do - let :facts do - OSDefaults.get_facts({ - :osfamily => 'RedHat', - :operatingsystem => 'RedHat', - :operatingsystemrelease => '7.0', - }) - end - let(:params) { default_params } - - let :pre_condition do - "class { '::ipaclient': password => 'join_otp', } - class { '::nova::metadata::novajoin::authtoken': - password => 'passw0rd', - }" - end - - it { is_expected.to contain_package('python-novajoin').with( + it { should contain_package('python-novajoin').with( :tag => ['openstack', 'novajoin-package'], )} 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({ :ipa_hostname => 'ipa.ipadomain', + :fqdn => "undercloud.example.com" })) + end + + if facts[:osfamily] == 'RedHat' + it_behaves_like 'nova::metadata::novajoin::api' + it_behaves_like 'nova::metadata::novajoin::api on RedHat' + end + end + end end diff --git a/spec/classes/nova_metadata_novajoin_auth_spec.rb b/spec/classes/nova_metadata_novajoin_auth_spec.rb index a8bf11f45..3be6ef415 100644 --- a/spec/classes/nova_metadata_novajoin_auth_spec.rb +++ b/spec/classes/nova_metadata_novajoin_auth_spec.rb @@ -3,167 +3,176 @@ require 'spec_helper' describe 'nova::metadata::novajoin::auth' do let :params do - {:password => 'novajoin_password'} + { + :password => 'novajoin_password' + } end let :default_params do - { :auth_name => 'novajoin', - :service_name => 'novajoin', - :region => 'RegionOne', - :tenant => 'services', - :email => 'novajoin@localhost', - :public_url => 'http://127.0.0.1:9090', - :internal_url => 'http://127.0.0.1:9090', - :admin_url => 'http://127.0.0.1:9090' } - end - - context 'with default parameters' do - - it { is_expected.to contain_keystone_user('novajoin').with( - :ensure => 'present', - :password => 'novajoin_password' - ) } - - it { is_expected.to contain_keystone_user_role('novajoin@services').with( - :ensure => 'present', - :roles => ['admin'] - )} - - it { is_expected.to contain_keystone_service('novajoin::compute-vendordata-plugin').with( - :ensure => 'present', - :description => 'Novajoin vendordata plugin' - )} - - it { is_expected.to_not contain_keystone_endpoint('RegionOne/novajoin::compute-vendordata-plugin') } - end - - context 'when setting auth name' do - before do - params.merge!( :auth_name => 'foo' ) - end - - it { is_expected.to contain_keystone_user('foo').with( - :ensure => 'present', - :password => 'novajoin_password' - ) } - - it { is_expected.to contain_keystone_user_role('foo@services').with( - :ensure => 'present', - :roles => ['admin'] - )} - - it { is_expected.to contain_keystone_service('novajoin::compute-vendordata-plugin').with( - :ensure => 'present', - :description => 'Novajoin vendordata plugin' - )} - - end - - context 'when creating endpoint with default parameters' do - before do - params.merge!( :configure_endpoint => true ) - end - it { is_expected.to contain_keystone_endpoint('RegionOne/novajoin::compute-vendordata-plugin').with( - :ensure => 'present', + { + :auth_name => 'novajoin', + :service_name => 'novajoin', + :region => 'RegionOne', + :tenant => 'services', + :email => 'novajoin@localhost', :public_url => 'http://127.0.0.1:9090', - :admin_url => 'http://127.0.0.1:9090', - :internal_url => 'http://127.0.0.1:9090' - )} + :internal_url => 'http://127.0.0.1:9090', + :admin_url => 'http://127.0.0.1:9090' + } end - context 'when overriding endpoint parameters' do - before do - params.merge!( - :configure_endpoint => true, - :region => 'RegionTwo', - :public_url => 'https://10.0.0.1:9090', - :internal_url => 'https://10.0.0.3:9090', - :admin_url => 'https://10.0.0.2:9090', - ) + shared_examples 'nova::metadata::novajoin::auth' do + context 'with default parameters' do + it { should contain_keystone_user('novajoin').with( + :ensure => 'present', + :password => 'novajoin_password' + )} + + it { should contain_keystone_user_role('novajoin@services').with( + :ensure => 'present', + :roles => ['admin'] + )} + + it { should contain_keystone_service('novajoin::compute-vendordata-plugin').with( + :ensure => 'present', + :description => 'Novajoin vendordata plugin' + )} + + it { should_not contain_keystone_endpoint('RegionOne/novajoin::compute-vendordata-plugin') } end - it { is_expected.to contain_keystone_endpoint('RegionTwo/novajoin::compute-vendordata-plugin').with( - :ensure => 'present', - :public_url => params[:public_url], - :internal_url => params[:internal_url], - :admin_url => params[:admin_url] - )} + context 'when setting auth name' do + before do + params.merge!( :auth_name => 'foo' ) + end + it { should contain_keystone_user('foo').with( + :ensure => 'present', + :password => 'novajoin_password' + )} + + it { should contain_keystone_user_role('foo@services').with( + :ensure => 'present', + :roles => ['admin'] + )} + + it { should contain_keystone_service('novajoin::compute-vendordata-plugin').with( + :ensure => 'present', + :description => 'Novajoin vendordata plugin' + )} + end + + context 'when creating endpoint with default parameters' do + before do + params.merge!( :configure_endpoint => true ) + end + + it { should contain_keystone_endpoint('RegionOne/novajoin::compute-vendordata-plugin').with( + :ensure => 'present', + :public_url => 'http://127.0.0.1:9090', + :admin_url => 'http://127.0.0.1:9090', + :internal_url => 'http://127.0.0.1:9090' + )} + end + + context 'when overriding endpoint parameters' do + before do + params.merge!( + :configure_endpoint => true, + :region => 'RegionTwo', + :public_url => 'https://10.0.0.1:9090', + :internal_url => 'https://10.0.0.3:9090', + :admin_url => 'https://10.0.0.2:9090', + ) + end + + it { should contain_keystone_endpoint('RegionTwo/novajoin::compute-vendordata-plugin').with( + :ensure => 'present', + :public_url => params[:public_url], + :internal_url => params[:internal_url], + :admin_url => params[:admin_url] + )} + end + + context 'when disabling user configuration' do + before do + params.merge!( :configure_user => false ) + end + + it { should_not contain_keystone_user('novajoin') } + it { should contain_keystone_user_role('novajoin@services') } + + it { should contain_keystone_service('novajoin::compute-vendordata-plugin').with( + :ensure => 'present', + :description => 'Novajoin vendordata plugin' + )} + end + + context 'when disabling user and user role configuration' do + let :params do + { + :configure_user => false, + :configure_user_role => false, + :password => 'novajoin_password' + } + end + + it { should_not contain_keystone_user('novajoin') } + it { should_not contain_keystone_user_role('novajoin@services') } + + it { should contain_keystone_service('novajoin::compute-vendordata-plugin').with( + :ensure => 'present', + :description => 'Novajoin vendordata plugin' + )} + end + + context 'when configuring novajoin and the keystone endpoint' do + let :pre_condition do + "class { '::nova::metadata::novajoin::authtoken': + password => 'secrete', + } + class { '::ipaclient': password => 'join_otp', } + class { '::nova::metadata::novajoin::api': + service_password => 'secrete', + transport_url => 'rabbit://127.0.0.1//', + }" + end + + let :params do + { + :password => 'test', + :configure_endpoint => true, + } + end + + it { should contain_keystone_endpoint('RegionOne/novajoin::compute-vendordata-plugin').with_notify(['Service[novajoin-server]', 'Service[novajoin-notify]']) } + end + + context 'when overriding service names' do + let :params do + { + :service_name => 'novajoin_service', + :password => 'novajoin_password' + } + end + + it { should contain_keystone_user('novajoin') } + it { should contain_keystone_user_role('novajoin@services') } + it { should contain_keystone_service('novajoin_service::compute-vendordata-plugin') } + end end - describe 'when disabling user configuration' do - before do - params.merge!( :configure_user => false ) - 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 { is_expected.to_not contain_keystone_user('novajoin') } - it { is_expected.to contain_keystone_user_role('novajoin@services') } - it { is_expected.to contain_keystone_service('novajoin::compute-vendordata-plugin').with( - :ensure => 'present', - :description => 'Novajoin vendordata plugin' - )} + if facts[:osfamily] == 'RedHat' + it_behaves_like 'nova::metadata::novajoin::auth' + end + end end - - describe 'when disabling user and user role configuration' do - let :params do - { - :configure_user => false, - :configure_user_role => false, - :password => 'novajoin_password' - } - end - - it { is_expected.to_not contain_keystone_user('novajoin') } - it { is_expected.to_not contain_keystone_user_role('novajoin@services') } - it { is_expected.to contain_keystone_service('novajoin::compute-vendordata-plugin').with( - :ensure => 'present', - :description => 'Novajoin vendordata plugin' - )} - end - - describe 'when configuring novajoin and the keystone endpoint' do - let :pre_condition do - "class { '::nova::metadata::novajoin::authtoken': - password => 'secrete', - } - class { '::ipaclient': password => 'join_otp', } - class { '::nova::metadata::novajoin::api': - service_password => 'secrete', - transport_url => 'rabbit://127.0.0.1//', - }" - end - - let :facts do - @default_facts.merge({ - :osfamily => 'RedHat', - :operatingsystem => 'RedHat', - :operatingsystemrelease => '7.0', - }) - end - - let :params do - { - :password => 'test', - :configure_endpoint => true, - } - end - - it { is_expected.to contain_keystone_endpoint('RegionOne/novajoin::compute-vendordata-plugin').with_notify(['Service[novajoin-server]', 'Service[novajoin-notify]']) } - end - - describe 'when overriding service names' do - - let :params do - { - :service_name => 'novajoin_service', - :password => 'novajoin_password' - } - end - - it { is_expected.to contain_keystone_user('novajoin') } - it { is_expected.to contain_keystone_user_role('novajoin@services') } - it { is_expected.to contain_keystone_service('novajoin_service::compute-vendordata-plugin') } - - end - end