diff --git a/manifests/all.pp b/manifests/all.pp index 0e66ddb..915f336 100644 --- a/manifests/all.pp +++ b/manifests/all.pp @@ -196,14 +196,14 @@ class openstack::all ( ######## GLANCE ########## class { 'openstack::glance': - verbose => $verbose, - db_type => $db_type, - db_host => '127.0.0.1', - glance_db_user => $glance_db_user, - glance_db_dbname => $glance_db_dbname, - glance_db_password => $glance_db_password, - glance_user_password => $glance_user_password, - enabled => $enabled, + verbose => $verbose, + db_type => $db_type, + db_host => '127.0.0.1', + db_user => $glance_db_user, + db_name => $glance_db_dbname, + db_password => $glance_db_password, + user_password => $glance_user_password, + enabled => $enabled, } ######## NOVA ########### diff --git a/manifests/controller.pp b/manifests/controller.pp index 0cc2a8e..a1f74d0 100644 --- a/manifests/controller.pp +++ b/manifests/controller.pp @@ -103,6 +103,10 @@ class openstack::controller ( $glance_db_user = 'glance', $glance_db_dbname = 'glance', $glance_api_servers = undef, + $glance_backend = 'file', + # Glance Swift Backend + $swift_store_user = 'swift_store_user', + $swift_store_key = 'swift_store_key', # Nova $nova_admin_tenant_name = 'services', $nova_admin_user = 'nova', @@ -230,14 +234,18 @@ class openstack::controller ( ######## BEGIN GLANCE ########## class { 'openstack::glance': - verbose => $verbose, - db_type => $db_type, - db_host => $db_host, - glance_db_user => $glance_db_user, - glance_db_dbname => $glance_db_dbname, - glance_db_password => $glance_db_password, - glance_user_password => $glance_user_password, - enabled => $enabled, + verbose => $verbose, + db_type => $db_type, + db_host => $db_host, + keystone_host => '127.0.0.1', + db_user => $glance_db_user, + db_name => $glance_db_dbname, + db_password => $glance_db_password, + user_password => $glance_user_password, + backend => $glance_backend, + swift_store_user => $swift_store_user, + swift_store_key => $swift_store_key, + enabled => $enabled, } ######## BEGIN NOVA ########### diff --git a/manifests/glance.pp b/manifests/glance.pp index f1ddfae..e83e141 100644 --- a/manifests/glance.pp +++ b/manifests/glance.pp @@ -6,18 +6,21 @@ # - Keystone for authentication # - keystone tenant: services # - keystone username: glance -# - storage backend: file +# - storage backend: file (default) or Swift # # === Parameters # +# [user_password] Password for glance auth user. Required. +# [db_password] Password for glance DB. Required. # [db_host] Host where DB resides. Required. -# [glance_user_password] Password for glance auth user. Required. -# [glance_db_password] Password for glance DB. Required. # [keystone_host] Host whre keystone is running. Optional. Defaults to '127.0.0.1' -# [auth_uri] URI used for auth. Optional. Defaults to "http://${keystone_host}:5000/" # [db_type] Type of sql databse to use. Optional. Defaults to 'mysql' -# [glance_db_user] Name of glance DB user. Optional. Defaults to 'glance' -# [glance_db_dbname] Name of glance DB. Optional. Defaults to 'glance' +# [db_user] Name of glance DB user. Optional. Defaults to 'glance' +# [db_name] Name of glance DB. Optional. Defaults to 'glance' +# [backend] Backends used to store images. Defaults to file. +# [swift_store_user] The Swift service user account. Defaults to false. +# [swift_store_key] The Swift service user password Defaults to false. +# [swift_store_auth_addres] The URL where the Swift auth service lives. Defaults to "http://${keystone_host}:5000/v2.0/" # [verbose] Log verbosely. Optional. Defaults to 'False' # [enabled] Used to indicate if the service should be active (true) or passive (false). # Optional. Defaults to true @@ -25,29 +28,32 @@ # === Example # # class { 'openstack::glance': -# glance_user_password => 'changeme', -# db_password => 'changeme', -# db_host => '127.0.0.1', +# user_password => 'changeme', +# db_password => 'changeme', +# db_host => '127.0.0.1', # } class openstack::glance ( - $db_host, - $glance_user_password, - $glance_db_password, - $keystone_host = '127.0.0.1', - $auth_uri = "http://127.0.0.1:5000/", - $db_type = 'mysql', - $glance_db_user = 'glance', - $glance_db_dbname = 'glance', - $verbose = 'False', - $enabled = true + $user_password, + $db_password, + $db_host = '127.0.0.1', + $keystone_host = '127.0.0.1', + $db_type = 'mysql', + $db_user = 'glance', + $db_name = 'glance', + $backend = 'file', + $swift_store_user = false, + $swift_store_key = false, + $swift_store_auth_address = "http://127.0.0.1:5000/v2.0/", + $verbose = 'False', + $enabled = true ) { # Configure the db string - case $db_type { - 'mysql': { - $sql_connection = "mysql://${glance_db_user}:${glance_db_password}@${db_host}/${glance_db_dbname}" - } + if $db_type == 'mysql' { + $sql_connection = "mysql://${db_user}:${db_password}@${db_host}/${db_name}" + } else { + fail("Unsupported db_type ${db_type}. Only mysql is currently supported") } # Install and configure glance-api @@ -59,7 +65,7 @@ class openstack::glance ( auth_host => $keystone_host, keystone_tenant => 'services', keystone_user => 'glance', - keystone_password => $glance_user_password, + keystone_password => $user_password, sql_connection => $sql_connection, enabled => $enabled, } @@ -73,12 +79,32 @@ class openstack::glance ( auth_type => 'keystone', keystone_tenant => 'services', keystone_user => 'glance', - keystone_password => $glance_user_password, + keystone_password => $user_password, sql_connection => $sql_connection, enabled => $enabled, } # Configure file storage backend - class { 'glance::backend::file': } + if($backend == 'swift') { + + if ! $swift_store_user { + fail('swift_store_user must be set when configuring swift as the glance backend') + } + if ! $swift_store_key { + fail('swift_store_key must be set when configuring swift as the glance backend') + } + + class { 'glance::backend::swift': + swift_store_user => $swift_store_user, + swift_store_key => $swift_store_key, + swift_store_auth_address => $swift_store_auth_address, + swift_store_create_container_on_put => 'True', + } + } elsif($backend == 'file') { + # Configure file storage backend + class { 'glance::backend::file': } + } else { + fail("Unsupported backend ${backend}") + } } diff --git a/spec/classes/openstack_glance_spec.rb b/spec/classes/openstack_glance_spec.rb new file mode 100644 index 0000000..61fab90 --- /dev/null +++ b/spec/classes/openstack_glance_spec.rb @@ -0,0 +1,110 @@ +require 'spec_helper' + +describe 'openstack::glance' do + + let :facts do + { + :operatingsystem => 'Ubuntu', + :osfamily => 'Debian' + } + end + + let :params do + { + :user_password => 'glance_user_pass', + :db_password => 'glance_db_pass', + :keystone_host => '127.0.1.1' + } + end + + describe 'with only required parameters' do + it 'should configure with applicable defaults' do + should contain_class('glance::api').with( + :verbose => 'False', + :debug => 'False', + :auth_type => 'keystone', + :auth_port => '35357', + :auth_host => '127.0.1.1', + :keystone_tenant => 'services', + :keystone_user => 'glance', + :keystone_password => 'glance_user_pass', + :sql_connection => 'mysql://glance:glance_db_pass@127.0.0.1/glance', + :enabled => true + ) + should contain_class('glance::registry').with( + :verbose => 'False', + :debug => 'False', + :auth_host => '127.0.1.1', + :auth_port => '35357', + :auth_type => 'keystone', + :keystone_tenant => 'services', + :keystone_user => 'glance', + :keystone_password => 'glance_user_pass', + :sql_connection => 'mysql://glance:glance_db_pass@127.0.0.1/glance', + :enabled => true + ) + should contain_class('glance::backend::file') + end + end + + describe 'with an invalid db_type' do + before do + params.merge!(:db_type => 'sqlite' ) + end + it 'should fail' do + expect { subject }.to raise_error(Puppet::Error, /Unsupported db_type sqlite/) + end + end + + describe 'with an invalid backend' do + before do + params.merge!(:backend => 'ceph') + end + it 'should fail' do + expect { subject }.to raise_error(Puppet::Error, /Unsupported backend ceph/) + end + end + + describe 'when configuring swift as the backend' do + + before do + params.merge!({ + :backend => 'swift', + :swift_store_user => 'dan', + :swift_store_key => '123' + }) + end + + it 'should configure swift as the backend' do + should_not contain_class('glance::backend::file') + + should contain_class('glance::backend::swift').with( + :swift_store_user => 'dan', + :swift_store_key => '123', + :swift_store_auth_address => 'http://127.0.0.1:5000/v2.0/', + :swift_store_create_container_on_put => 'True' + ) + end + + describe 'user key must be set' do + before do + params.delete(:swift_store_key) + end + it 'should fail' do + expect do + subject + end.to raise_error(Puppet::Error, /swift_store_key must be set when configuring swift/) + end + end + describe 'user name must be set' do + before do + params.delete(:swift_store_user) + end + it 'should fail' do + expect do + subject + end.to raise_error(Puppet::Error, /swift_store_user must be set when configuring swift/) + end + end + end +end