diff --git a/manifests/profile/base/cinder/volume/pure.pp b/manifests/profile/base/cinder/volume/pure.pp index 6f64649c0..3b23f13c5 100644 --- a/manifests/profile/base/cinder/volume/pure.pp +++ b/manifests/profile/base/cinder/volume/pure.pp @@ -18,33 +18,13 @@ # # === Parameters # -# [*san_ip*] -# (required) IP address of PureStorage management VIP. -# -# [*pure_api_token*] -# (required) API token for management of PureStorage array. -# # [*backend_name*] -# (Optional) Name given to the Cinder backend stanza -# Defaults to 'tripleo_pure' +# (Optional) List of names given to the Cinder backend stanza. +# Defaults to hiera('cinder::backend::pure::volume_backend_name', ['tripleo_pure']) # -# [*pure_storage_protocol*] -# (optional) Must be either 'iSCSI' or 'FC'. This will determine -# which Volume Driver will be configured; PureISCSIDriver or PureFCDriver. -# Defaults to 'iSCSI' -# -# [*use_multipath_for_image_xfer*] -# (optional) . -# Defaults to True -# -# [*use_chap_auth*] -# (optional) Only affects the PureISCSIDriver. -# Defaults to False -# -# [*image_volume_cache_enabled*] -# (Optional) Enable Cinder's image cache function for the PureStorage -# backend. -# Defaults to True +# [*multi_config*] +# (Optional) A config hash when multiple backends are used. +# Defaults to hiera('cinder::backend::pure::volume_multi_config', {}) # # [*step*] # (Optional) The current step in deployment. See tripleo-heat-templates @@ -52,21 +32,35 @@ # Defaults to hiera('step') # class tripleo::profile::base::cinder::volume::pure ( - $backend_name = hiera('cinder::backend::pure::volume_backend_name', 'tripleo_pure'), + $backend_name = hiera('cinder::backend::pure::volume_backend_name', ['tripleo_pure']), + $multi_config = hiera('cinder::backend::pure::volume_multi_config', {}), $step = Integer(hiera('step')), ) { include ::tripleo::profile::base::cinder::volume if $step >= 4 { - cinder::backend::pure { $backend_name : - backend_availability_zone => hiera('cinder::backend::pure::backend_availability_zone', undef), - san_ip => hiera('cinder::backend::pure::san_ip', undef), - pure_api_token => hiera('cinder::backend::pure::pure_api_token', undef), - pure_storage_protocol => hiera('cinder::backend::pure::pure_storage_protocol', undef), - use_chap_auth => hiera('cinder::backend::pure::use_chap_auth', undef), - use_multipath_for_image_xfer => hiera('cinder::backend::pure::use_multipath_for_image_xfer', undef), - image_volume_cache_enabled => hiera('cinder::backend::pure::image_volume_cache_enabled', undef), + $backend_defaults = { + 'CinderPureAvailabilityZone' => hiera('cinder::backend::pure::backend_availability_zone', undef), + 'CinderPureSanIp' => hiera('cinder::backend::pure::san_ip', undef), + 'CinderPureAPIToken' => hiera('cinder::backend::pure::pure_api_token', undef), + 'CinderPureStorageProtocol' => hiera('cinder::backend::pure::pure_storage_protocol', undef), + 'CinderPureUseChap' => hiera('cinder::backend::pure::use_chap_auth', undef), + 'CinderPureMultipathXfer' => hiera('cinder::backend::pure::use_multipath_for_image_xfer', undef), + 'CinderPureImageCache' => hiera('cinder::backend::pure::image_volume_cache_enabled', undef), + } + + $backend_name.each |String $backend| { + $backend_config = merge($backend_defaults, pick($multi_config[$backend], {})) + + cinder::backend::pure { $backend : + backend_availability_zone => $backend_config['CinderPureAvailabilityZone'], + san_ip => $backend_config['CinderPureSanIp'], + pure_api_token => $backend_config['CinderPureAPIToken'], + pure_storage_protocol => $backend_config['CinderPureStorageProtocol'], + use_chap_auth => $backend_config['CinderPureUseChap'], + use_multipath_for_image_xfer => $backend_config['CinderPureMultipathXfer'], + image_volume_cache_enabled => $backend_config['CinderPureImageCache'], + } } } - } diff --git a/spec/classes/tripleo_profile_base_cinder_volume_pure_spec.rb b/spec/classes/tripleo_profile_base_cinder_volume_pure_spec.rb index fa03dac3a..d6e4efccf 100644 --- a/spec/classes/tripleo_profile_base_cinder_volume_pure_spec.rb +++ b/spec/classes/tripleo_profile_base_cinder_volume_pure_spec.rb @@ -41,6 +41,22 @@ describe 'tripleo::profile::base::cinder::volume::pure' do it 'should trigger complete configuration' do # TODO(aschultz): check hiera parameters is_expected.to contain_cinder__backend__pure('tripleo_pure') + is_expected.to contain_cinder_config('tripleo_pure/use_chap_auth').with_value(false) + end + + context 'with multiple backends' do + let(:params) { { + :backend_name => ['tripleo_pure_1', 'tripleo_pure_2'], + :multi_config => { 'tripleo_pure_2' => { 'CinderPureUseChap' => true }}, + :step => 4, + } } + + it 'should configure each backend' do + is_expected.to contain_cinder__backend__pure('tripleo_pure_1') + is_expected.to contain_cinder_config('tripleo_pure_1/use_chap_auth').with_value(false) + is_expected.to contain_cinder__backend__pure('tripleo_pure_2') + is_expected.to contain_cinder_config('tripleo_pure_2/use_chap_auth').with_value(true) + end end end end diff --git a/spec/classes/tripleo_profile_base_cinder_volume_spec.rb b/spec/classes/tripleo_profile_base_cinder_volume_spec.rb index 450f5354c..dc7a6a4a3 100644 --- a/spec/classes/tripleo_profile_base_cinder_volume_spec.rb +++ b/spec/classes/tripleo_profile_base_cinder_volume_spec.rb @@ -80,6 +80,15 @@ describe 'tripleo::profile::base::cinder::volume' do :enabled_backends => ['tripleo_pure'] ) end + context 'with multiple pure backends' do + # Step 5's hiera specifies two pure backend names + let(:params) { { :step => 5 } } + it 'should enable each backend' do + is_expected.to contain_class('cinder::backends').with( + :enabled_backends => ['tripleo_pure_1', 'tripleo_pure_2'] + ) + end + end end context 'with only dellsc' do diff --git a/spec/fixtures/hieradata/step5.yaml b/spec/fixtures/hieradata/step5.yaml index c85b4cb24..4a4377a8b 100644 --- a/spec/fixtures/hieradata/step5.yaml +++ b/spec/fixtures/hieradata/step5.yaml @@ -3,3 +3,6 @@ step: 5 tripleo::profile::base::cinder::volume::rbd::cinder_rbd_extra_pools: - 'foo' - 'bar' +cinder::backend::pure::volume_backend_name: + - 'tripleo_pure_1' + - 'tripleo_pure_2'