From a12565cdebf6b7b2542d17bafb322404d9ed93bf Mon Sep 17 00:00:00 2001 From: Emilien Macchi Date: Sat, 29 Mar 2014 12:10:26 +0100 Subject: [PATCH] volume/api: specify a default backend When using multi-backend in Cinder, we need to specify a default type to avoid any error when creating a volume without specifying a type. This patch is backward compatible when not using multi-backend and make the catalog fail if we don't specify the value. Also, it updates puppet-cinder to last stable/havana commit. Signed-off-by: Emilien Macchi --- .fixtures.yml | 2 +- Puppetfile | 2 +- manifests/volume/controller.pp | 17 +++++++++---- spec/classes/cloud_volume_controller_spec.rb | 25 ++++++++++++++++---- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/.fixtures.yml b/.fixtures.yml index 97443ff9..f1017183 100644 --- a/.fixtures.yml +++ b/.fixtures.yml @@ -2,7 +2,7 @@ fixtures: repositories: 'cinder': repo: 'git://github.com/enovance/puppet-cinder' - ref: '3a0f09995625b1c2f6ec446cc2a2571348a7af0b' + ref: 'd92b38a8c7bb484e935ed21510843ef6be8e31d3' 'keystone': repo: 'git://github.com/enovance/puppet-keystone.git' ref: '9802add6566646dc1e4a2812d19c2ab4724ff594' diff --git a/Puppetfile b/Puppetfile index 591484bb..73e24219 100644 --- a/Puppetfile +++ b/Puppetfile @@ -22,7 +22,7 @@ mod 'ceilometer', :ref => 'f71f935a3e41dcd11f8f5986a1fe0708b124e589' mod 'cinder', :git => 'git://github.com/enovance/puppet-cinder.git', - :ref => '3a0f09995625b1c2f6ec446cc2a2571348a7af0b' + :ref => 'd92b38a8c7bb484e935ed21510843ef6be8e31d3' mod 'glance', :git => 'git://github.com/enovance/puppet-glance.git', :ref => '001f1b6a8ef6bd0fde8fbe0a4b3362f31e6bbcda' diff --git a/manifests/volume/controller.pp b/manifests/volume/controller.pp index de54d9f2..a428b3bd 100644 --- a/manifests/volume/controller.pp +++ b/manifests/volume/controller.pp @@ -25,6 +25,7 @@ class cloud::volume::controller( $api_eth = $os_params::api_eth, # Maintain backward compatibility for multi-backend $volume_multi_backend = false, + $default_volume_type = undef, # TODO(EmilienM) Disabled for now: http://git.io/kfTmcA # $backup_ceph_pool = $os_params::cinder_rbd_backup_pool, # $backup_ceph_user = $os_params::cinder_rbd_backup_user @@ -33,9 +34,16 @@ class cloud::volume::controller( include 'cloud::volume' if ! $volume_multi_backend { - $scheduler_driver_real = false + $scheduler_driver_real = false + $default_volume_type_real = undef } else { $scheduler_driver_real = 'cinder.scheduler.filter_scheduler.FilterScheduler' + + if ! $default_volume_type { + fail('when using multi-backend, you should define a default_volume_type value in cloud::volume::controller') + } else { + $default_volume_type_real = $default_volume_type + } } class { 'cinder::scheduler': @@ -43,9 +51,10 @@ class cloud::volume::controller( } class { 'cinder::api': - keystone_password => $ks_cinder_password, - keystone_auth_host => $ks_keystone_internal_host, - bind_host => $api_eth + keystone_password => $ks_cinder_password, + keystone_auth_host => $ks_keystone_internal_host, + bind_host => $api_eth, + default_volume_type => $default_volume_type_real } class { 'cinder::backup': } diff --git a/spec/classes/cloud_volume_controller_spec.rb b/spec/classes/cloud_volume_controller_spec.rb index 47bcaf6a..4ca32e1b 100644 --- a/spec/classes/cloud_volume_controller_spec.rb +++ b/spec/classes/cloud_volume_controller_spec.rb @@ -80,12 +80,28 @@ describe 'cloud::volume::controller' do context 'with multi-backend' do before :each do - params.merge!( :volume_multi_backend => true ) + params.merge!( + :volume_multi_backend => true, + :default_volume_type => 'ceph' + ) end it 'configure cinder scheduler with multi-backend' do should contain_class('cinder::scheduler').with( :scheduler_driver => 'cinder.scheduler.filter_scheduler.FilterScheduler' ) + should contain_class('cinder::api').with(:default_volume_type => 'ceph') + end + end + + context 'with multi-backend without default volume type' do + before :each do + params.merge!( + :volume_multi_backend => true, + :default_volume_type => nil + ) + end + it 'should raise an error and fail' do + should compile.and_raise_error(/when using multi-backend, you should define a default_volume_type value in cloud::volume::controller/) end end @@ -98,10 +114,11 @@ describe 'cloud::volume::controller' do it 'configure cinder api' do should contain_class('cinder::api').with( - :keystone_password => 'secrete', - :keystone_auth_host => '10.0.0.1', - :bind_host => '10.0.0.1' + :keystone_password => 'secrete', + :keystone_auth_host => '10.0.0.1', + :bind_host => '10.0.0.1', ) + should contain_cinder_config('DEFAULT/default_volume_type').with(:ensure => 'absent') end # TODO(EmilienM) Disabled for now: http://git.io/kfTmcA