diff --git a/manifests/profile/base/cinder/volume/rbd.pp b/manifests/profile/base/cinder/volume/rbd.pp index a767a7d46..b01e981fc 100644 --- a/manifests/profile/base/cinder/volume/rbd.pp +++ b/manifests/profile/base/cinder/volume/rbd.pp @@ -60,6 +60,11 @@ # (Optional) A config hash when multiple backends are used. # Defaults to {} # +# [*extra_options*] +# (optional) Hash of extra options to configure for the RBD backends. +# Example: { 'tripleo_ceph/param1' => { 'value' => value1 } } +# Defaults to: {} +# # [*step*] # (Optional) The current step in deployment. See tripleo-heat-templates # for more details. @@ -78,6 +83,7 @@ class tripleo::profile::base::cinder::volume::rbd ( $cinder_rbd_user_name = 'openstack', $cinder_rbd_flatten_volume_from_snapshot = hiera('cinder::backend::rbd::flatten_volume_from_snapshot', undef), $multi_config = {}, + $extra_options = {}, $step = Integer(hiera('step')), ) { include tripleo::profile::base::cinder::volume @@ -92,7 +98,8 @@ class tripleo::profile::base::cinder::volume::rbd ( 'CinderRbdFlattenVolumeFromSnapshot' => $cinder_rbd_flatten_volume_from_snapshot, } - any2array($backend_name).each |String $backend| { + $backends_array = any2array($backend_name) + $backends_array.each |String $backend| { $backend_multi_config = pick($multi_config[$backend], {}) $multi_config_cluster = $backend_multi_config['CephClusterName'] @@ -102,6 +109,13 @@ class tripleo::profile::base::cinder::volume::rbd ( $backend_ceph_conf = $cinder_rbd_ceph_conf } + # Ensure extra_options are only applied once. + if $backend == $backends_array[0] { + $extra_options_real = $extra_options + } else { + $extra_options_real = undef + } + $backend_config = merge($backend_defaults, $backend_multi_config) create_resources('cinder::backend::rbd', { $backend => delete_undef_values({ @@ -112,6 +126,7 @@ class tripleo::profile::base::cinder::volume::rbd ( 'rbd_user' => $backend_config['CephClientUserName'], 'rbd_secret_uuid' => $backend_config['CephClusterFSID'], 'rbd_flatten_volume_from_snapshot' => $backend_config['CinderRbdFlattenVolumeFromSnapshot'], + 'extra_options' => $extra_options_real, })}) any2array($backend_config['CinderRbdExtraPools']).each |String $pool_name| { diff --git a/releasenotes/notes/cinder-rbd-extra-options-c13a1e84b6452fac.yaml b/releasenotes/notes/cinder-rbd-extra-options-c13a1e84b6452fac.yaml new file mode 100644 index 000000000..a3006c749 --- /dev/null +++ b/releasenotes/notes/cinder-rbd-extra-options-c13a1e84b6452fac.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + A new ``tripleo::profile::base::cinder::volume::rbd::extra_options`` + parameter adds the ability to configure additional options for use + with cinder RBD backends. diff --git a/spec/classes/tripleo_profile_base_cinder_volume_rbd_spec.rb b/spec/classes/tripleo_profile_base_cinder_volume_rbd_spec.rb index ef7cfb8e3..0ee5cf6fb 100644 --- a/spec/classes/tripleo_profile_base_cinder_volume_rbd_spec.rb +++ b/spec/classes/tripleo_profile_base_cinder_volume_rbd_spec.rb @@ -62,6 +62,7 @@ describe 'tripleo::profile::base::cinder::volume::rbd' do :cinder_rbd_secret_uuid => 'secretuuid', :cinder_rbd_user_name => 'kcatsnepo', :cinder_rbd_flatten_volume_from_snapshot => true, + :extra_options => {'poodles/param1' => { 'value' => 'value1' }}, }) end it 'should trigger complete configuration' do @@ -73,6 +74,7 @@ describe 'tripleo::profile::base::cinder::volume::rbd' do :rbd_user => 'kcatsnepo', :rbd_secret_uuid => 'secretuuid', :rbd_flatten_volume_from_snapshot => true, + :extra_options => {'poodles/param1' => { 'value' => 'value1' }}, ) is_expected.to contain_cinder__backend__rbd('poodles_aplenty').with( :backend_host => 'fe80::fc54:ff:fe9e:7846', @@ -82,6 +84,8 @@ describe 'tripleo::profile::base::cinder::volume::rbd' do :rbd_user => 'kcatsnepo', :rbd_secret_uuid => 'secretuuid', :rbd_flatten_volume_from_snapshot => true, + # extra_options are provided with only the first RBD backend/pool + :extra_options => {}, ) is_expected.to contain_cinder__backend__rbd('poodles_galore').with( :backend_host => 'fe80::fc54:ff:fe9e:7846', @@ -91,6 +95,7 @@ describe 'tripleo::profile::base::cinder::volume::rbd' do :rbd_user => 'kcatsnepo', :rbd_secret_uuid => 'secretuuid', :rbd_flatten_volume_from_snapshot => true, + :extra_options => {}, ) end end @@ -111,6 +116,7 @@ describe 'tripleo::profile::base::cinder::volume::rbd' do 'CinderRbdFlattenVolumeFromSnapshot' => true, }, }, + :extra_options => {'poodles/param1' => { 'value' => 'value1' }}, }) end it 'should configure each backend' do @@ -121,6 +127,7 @@ describe 'tripleo::profile::base::cinder::volume::rbd' do :rbd_pool => 'volumes', :rbd_user => 'openstack', :rbd_flatten_volume_from_snapshot => '', + :extra_options => {'poodles/param1' => { 'value' => 'value1' }}, ) is_expected.to contain_cinder__backend__rbd('rbd2').with( @@ -131,6 +138,8 @@ describe 'tripleo::profile::base::cinder::volume::rbd' do :rbd_user => 'kcatsnepo', :rbd_secret_uuid => 'secretuuid', :rbd_flatten_volume_from_snapshot => true, + # extra_options are provided with only the first RBD backend/pool + :extra_options => {}, ) is_expected.to contain_cinder__backend__rbd('rbd2_pool2b').with( @@ -141,6 +150,7 @@ describe 'tripleo::profile::base::cinder::volume::rbd' do :rbd_user => 'kcatsnepo', :rbd_secret_uuid => 'secretuuid', :rbd_flatten_volume_from_snapshot => true, + :extra_options => {}, ) is_expected.to contain_cinder__backend__rbd('rbd2_pool2c').with( @@ -151,6 +161,7 @@ describe 'tripleo::profile::base::cinder::volume::rbd' do :rbd_user => 'kcatsnepo', :rbd_secret_uuid => 'secretuuid', :rbd_flatten_volume_from_snapshot => true, + :extra_options => {}, ) end end