diff --git a/spec/classes/openstack_compute_spec.rb b/spec/classes/openstack_compute_spec.rb index 3422050..250720d 100644 --- a/spec/classes/openstack_compute_spec.rb +++ b/spec/classes/openstack_compute_spec.rb @@ -4,8 +4,14 @@ describe 'openstack::compute' do let :default_params do { - :private_interface => 'eth0', - :internal_address => '0.0.0.0', + :private_interface => 'eth0', + :internal_address => '0.0.0.0', + :nova_user_password => 'nova_pass', + :rabbit_password => 'rabbit_pw', + :sql_connection => 'mysql://user:pass@host/dbname/', + :cinder_sql_connection => 'mysql://user:pass@host/dbname/', + :quantum => false, + :fixed_range => '10.0.0.0/16', } end @@ -22,13 +28,13 @@ describe 'openstack::compute' do end it { should contain_class('nova').with( - :sql_connection => false, - :rabbit_host => false, + :sql_connection => 'mysql://user:pass@host/dbname/', + :rabbit_host => '127.0.0.1', :rabbit_userid => 'nova', :rabbit_password => 'rabbit_pw', :image_service => 'nova.image.glance.GlanceImageService', :glance_api_servers => false, - :verbose => false + :verbose => 'False' ) should contain_class('nova::compute').with( :enabled => true, @@ -43,8 +49,6 @@ describe 'openstack::compute' do should contain_nova_config('multi_host').with( :value => 'False' ) should contain_nova_config('send_arp_for_ha').with( :value => 'False' ) should_not contain_class('nova::api') - should_not contain_class('nova::volume') - should_not contain_class('nova::volume::iscsi') should contain_class('nova::network').with({ :enabled => false, :install_service => false, @@ -82,7 +86,7 @@ describe 'openstack::compute' do let :params do default_params.merge(override_params) end - it { + it do should contain_class('nova').with( :sql_connection => 'mysql://user:passwd@host/name', :rabbit_host => 'my_host', @@ -105,8 +109,6 @@ describe 'openstack::compute' do should contain_nova_config('multi_host').with( :value => 'False' ) should contain_nova_config('send_arp_for_ha').with( :value => 'False' ) should_not contain_class('nova::api') - should_not contain_class('nova::volume') - should_not contain_class('nova::volume::iscsi') should contain_class('nova::network').with({ :enabled => false, :install_service => false, @@ -116,7 +118,7 @@ describe 'openstack::compute' do :enabled => false, :install_service => false }) - } + end end describe "when enabling volume management" do @@ -129,71 +131,65 @@ describe 'openstack::compute' do it do should contain_nova_config('multi_host').with({ 'value' => 'False'}) should_not contain_class('nova::api') - should contain_class('nova::volume').with(:enabled => true) should contain_class('nova::network').with({ 'enabled' => false, 'install_service' => false }) end - describe 'with default volume settings' do - it { should contain_class('nova::volume::iscsi').with( - :volume_group => 'nova-volumes', - :iscsi_ip_address => '0.0.0.0' - )} - end - describe 'when overriding volume parameters' do - let :params do - default_params.merge({ - :manage_volumes => true, - :nova_volume => 'nova-volumes2', - :internal_address => '127.0.0.1' - }) - end - it { should contain_class('nova::volume::iscsi').with( - :volume_group => 'nova-volumes2', - :iscsi_ip_address => '127.0.0.1' - ) } - end end - describe "when configuring for multi host" do - let :params do - default_params.merge({ - :multi_host => true, - :public_interface => 'eth0' - }) - end - - it { - should contain_class('keystone::python') - should contain_nova_config('multi_host').with({ 'value' => 'True'}) - should contain_nova_config('send_arp_for_ha').with(:value => 'True') - should_not contain_class('nova::volume') - should_not contain_class('nova::volume::iscsi') - should contain_class('nova::network').with({ - 'enabled' => true, - 'install_service' => true - }) - } - describe 'with defaults' do - it { should contain_class('nova::api').with( - :enabled => true, - :admin_tenant_name => 'services', - :admin_user => 'nova', - :admin_password => 'nova_pass' - )} - end - describe 'when overrding nova volumes' do + describe 'when quantum is false' do + describe 'configuring for multi host' do let :params do default_params.merge({ - :multi_host => true, - :public_interface => 'eth0', - :nova_user_password => 'foo' + :multi_host => true, + :public_interface => 'eth0', + :quantum => false }) end - it { should contain_class('nova::api').with( - :admin_password => 'foo' - )} + + it 'should configure nova for multi-host' do + #should contain_class('keystone::python') + should contain_nova_config('multi_host').with(:value => 'True') + should contain_nova_config('send_arp_for_ha').with( :value => 'True') + should contain_class('nova::network').with({ + 'enabled' => true, + 'install_service' => true + }) + end + describe 'with defaults' do + it { should contain_class('nova::api').with( + :enabled => true, + :admin_tenant_name => 'services', + :admin_user => 'nova', + :admin_password => 'nova_pass' + )} + end + end + describe 'when overriding network params' do + let :params do + default_params.merge({ + :multi_host => true, + :public_interface => 'eth0', + :manage_volumes => true, + :private_interface => 'eth1', + :public_interface => 'eth2', + :fixed_range => '12.0.0.0/24', + :network_manager => 'nova.network.manager.VlanManager', + :network_config => {'vlan_interface' => 'eth0'} + }) + end + it { should contain_class('nova::network').with({ + :private_interface => 'eth1', + :public_interface => 'eth2', + :fixed_range => '12.0.0.0/24', + :floating_range => false, + :network_manager => 'nova.network.manager.VlanManager', + :config_overrides => {'vlan_interface' => 'eth0'}, + :create_networks => false, + 'enabled' => true, + 'install_service' => true + })} end end @@ -221,8 +217,6 @@ describe 'openstack::compute' do it { should contain_nova_config('multi_host').with({ 'value' => 'True'}) should contain_class('nova::api') - should contain_class('nova::volume') - should contain_class('nova::volume::iscsi') should contain_class('nova::network').with({ 'enabled' => true, 'install_service' => true @@ -230,30 +224,4 @@ describe 'openstack::compute' do } end - describe 'when overriding network params' do - let :params do - default_params.merge({ - :multi_host => true, - :public_interface => 'eth0', - :manage_volumes => true, - :private_interface => 'eth1', - :public_interface => 'eth2', - :fixed_range => '12.0.0.0/24', - :network_manager => 'nova.network.manager.VlanManager', - :network_config => {'vlan_interface' => 'eth0'} - }) - end - it { should contain_class('nova::network').with({ - :private_interface => 'eth1', - :public_interface => 'eth2', - :fixed_range => '12.0.0.0/24', - :floating_range => false, - :network_manager => 'nova.network.manager.VlanManager', - :config_overrides => {'vlan_interface' => 'eth0'}, - :create_networks => false, - 'enabled' => true, - 'install_service' => true - })} - - end end diff --git a/spec/classes/openstack_controller_spec.rb b/spec/classes/openstack_controller_spec.rb index 45cdaa9..fc7d047 100644 --- a/spec/classes/openstack_controller_spec.rb +++ b/spec/classes/openstack_controller_spec.rb @@ -1,13 +1,25 @@ require 'spec_helper' describe 'openstack::controller' do + + # minimum set of default parameters let :default_params do { - :private_interface => 'eth0', - :public_interface => 'eth1', - :internal_address => '127.0.0.1', - :public_address => '10.0.0.1', - :export_resources => false, + :private_interface => 'eth0', + :public_interface => 'eth1', + :internal_address => '127.0.0.1', + :public_address => '10.0.0.1', + :admin_email => 'some_user@some_fake_email_address.foo', + :admin_password => 'ChangeMe', + :rabbit_password => 'rabbit_pw', + :keystone_db_password => 'keystone_pass', + :keystone_admin_token => 'keystone_admin_token', + :glance_db_password => 'glance_pass', + :glance_user_password => 'glance_pass', + :nova_db_password => 'nova_pass', + :nova_user_password => 'nova_pass', + :secret_key => 'secret_key', + :quantum => false, } end @@ -15,307 +27,443 @@ describe 'openstack::controller' do { :operatingsystem => 'Ubuntu', :osfamily => 'Debian', - :concat_basedir => '/tmp/', :puppetversion => '2.7.x', :memorysize => '2GB', :processorcount => '2' } end + let :params do default_params end - it { should_not contain_nova_config('auto_assign_floating_ip') } - describe 'when auto assign floating ip is assigned' do - let :params do - default_params.merge(:auto_assign_floating_ip => 'true') + context 'database' do + + context 'with unsupported db type' do + + let :params do + default_params.merge({:db_type => 'sqlite'}) + end + + it do + expect { subject }.to raise_error(Puppet::Error) + end + + end + + context 'with default mysql params' do + + let :params do + default_params.merge( + :enabled => true, + :db_type => 'mysql', + :quantum => true, + :cinder => true + ) + end + + it { should contain_class('mysql::server').with( + :config_hash => {'bind_address' => '0.0.0.0', 'root_password' => 'sql_pass' }, + :enabled => true + ) + } + + it 'should contain openstack db config' do + should contain_class('keystone::db::mysql').with( + :user => 'keystone', + :password => 'keystone_pass', + :dbname => 'keystone', + :allowed_hosts => '%' + ) + should contain_class('glance::db::mysql').with( + :user => 'glance', + :password => 'glance_pass', + :dbname => 'glance', + :allowed_hosts => '%' + ) + should contain_class('nova::db::mysql').with( + :user => 'nova', + :password => 'nova_pass', + :dbname => 'nova', + :allowed_hosts => '%' + ) + should contain_class('cinder::db::mysql').with( + :user => 'cinder', + :password => 'cinder_pass', + :dbname => 'cinder', + :allowed_hosts => '%' + ) + should contain_class('quantum::db::mysql').with( + :user => 'quantum', + :password => 'quantum_pass', + :dbname => 'quantum', + :allowed_hosts => '%' + ) + end + + + it { should contain_class('mysql::server::account_security')} + + end + + context 'when cinder and quantum are false' do + + let :params do + default_params.merge( + :quantum => false, + :cinder => false + ) + end + it do + should_not contain_class('quantum::db::mysql') + should_not contain_class('cinder::db::mysql') + end + + end + + context 'when not enabled' do + + let :params do + default_params.merge( + {:enabled => false} + ) + end + + it { should contain_class('mysql::server').with( + :config_hash => {'bind_address' => '0.0.0.0', 'root_password' => 'sql_pass' }, + :enabled => false + ) + } + + ['keystone', 'nova', 'glance', 'cinder', 'quantum'].each do |x| + it { should_not contain_class("#{x}::db::mysql") } + end + end + + context 'when account secutiry is not enabled' do + let :params do + default_params.merge( + {:mysql_account_security => false} + ) + end + + it { should_not contain_class('mysql::server::account_security')} + end + + end + + context 'keystone' do + + context 'with default params' do + + let :params do + default_params + end + + it { should contain_class('keystone').with( + :verbose => 'False', + :debug => 'False', + :catalog_type => 'sql', + :enabled => true, + :admin_token => 'keystone_admin_token', + :sql_connection => "mysql://keystone:keystone_pass@127.0.0.1/keystone" + ) } + + it 'should contain endpoints' do + should contain_class('keystone::roles::admin').with( + :email => 'some_user@some_fake_email_address.foo', + :password => 'ChangeMe', + :admin_tenant => 'admin' + ) + should contain_class('keystone::endpoint').with( + :public_address => '10.0.0.1', + :internal_address => '127.0.0.1', + :admin_address => '127.0.0.1', + :region => 'RegionOne' + ) + { + 'nova' => 'nova_pass', + 'cinder' => 'cinder_pass', + 'glance' => 'glance_pass' + + }.each do |type, pw| + should contain_class("#{type}::keystone::auth").with( + :password => pw, + :public_address => '10.0.0.1', + :internal_address => '10.0.0.1', + :admin_address => '10.0.0.1', + :region => 'RegionOne' + ) + end + end + end + context 'when not enabled' do + + let :params do + default_params.merge(:enabled => false) + end + + it 'should not configure endpoints' do + should contain_class('keystone').with(:enabled => false) + should_not contain_class('keystone::roles::admin') + should_not contain_class('keystone::endpoint') + should_not contain_class('glance::keystone::auth') + should_not contain_class('nova::keystone::auth') + end end - it { should contain_nova_config('auto_assign_floating_ip').with(:value => 'True')} end it do - should contain_class('mysql::server').with( - :config_hash => {'bind_address' => '0.0.0.0', 'root_password' => 'sql_pass' } - ) should contain_class('memcached').with( :listen_ip => '127.0.0.1' ) end - describe 'when enabled' do - it 'should contain enabled database configs' do - should contain_class('mysql::server').with( - :enabled => true - ) - should contain_class('keystone::db::mysql').with( - :password => 'keystone_pass' - ) - should contain_class('glance::db::mysql').with( - :host => '127.0.0.1', - :password => 'glance_pass', - :before => ["Class[Glance::Registry]", "Exec[glance-manage db_sync]"] - ) - should contain_class('nova::db::mysql').with( - :password => 'nova_pass', - :host => '127.0.0.1', - :allowed_hosts => '%' - ) + + + context 'config for glance' do + + context 'when enabled' do + it 'should contain enabled glance with defaults' do + + should contain_class('glance::api').with( + :verbose => 'False', + :debug => 'False', + :auth_type => 'keystone', + :auth_host => '127.0.0.1', + :auth_port => '35357', + :keystone_tenant => 'services', + :keystone_user => 'glance', + :keystone_password => 'glance_pass', + :sql_connection => 'mysql://glance:glance_pass@127.0.0.1/glance', + :enabled => true + ) + + should contain_class('glance::registry').with( + :verbose => 'False', + :debug => 'False', + :auth_type => 'keystone', + :auth_host => '127.0.0.1', + :auth_port => '35357', + :keystone_tenant => 'services', + :keystone_user => 'glance', + :keystone_password => 'glance_pass', + :sql_connection => "mysql://glance:glance_pass@127.0.0.1/glance", + :enabled => true + ) + + should contain_class('glance::backend::file') + end end - it 'should contain enabled keystone configs with defaults' do + context 'when not enabled' do - should contain_class('keystone').with( - :admin_token => 'keystone_admin_token', - :bind_host => '0.0.0.0', - :verbose => false, - :debug => false, - :catalog_type => 'sql', - :enabled => true - ) - should contain_class('keystone::config::mysql').with( - :password => 'keystone_pass' - ) - should contain_class('keystone::roles::admin').with( - :email => 'some_user@some_fake_email_address.foo', - :password => 'ChangeMe' - ) - should contain_class('keystone::endpoint').with( - :public_address => '10.0.0.1', - :internal_address => '127.0.0.1', - :admin_address => '127.0.0.1' - ) - should contain_class('glance::keystone::auth').with( - :password => 'glance_pass', - :public_address => '10.0.0.1', - :internal_address => '127.0.0.1', - :admin_address => '127.0.0.1' - #:before => ['Class[glance::api]', 'Class[glance::registry]'] - ) - should contain_class('nova::keystone::auth').with( - :password => 'nova_pass', - :public_address => '10.0.0.1', - :internal_address => '127.0.0.1', - :admin_address => '127.0.0.1' - #:before => 'Class[nova::api]' - ) - should contain_class('glance::api').with( - :verbose => false, - :debug => false, - :auth_type => 'keystone', - :auth_host => '127.0.0.1', - :auth_port => '35357', - :keystone_tenant => 'services', - :keystone_user => 'glance', - :keystone_password => 'glance_pass', - :enabled => true - ) - should contain_class('glance::backend::file') + let :params do + default_params.merge(:enabled => false) + end - should contain_class('glance::registry').with( - :verbose => false, - :debug => false, - :auth_type => 'keystone', - :auth_host => '127.0.0.1', - :auth_port => '35357', - :keystone_tenant => 'services', - :keystone_user => 'glance', - :keystone_password => 'glance_pass', - :sql_connection => "mysql://glance:glance_pass@127.0.0.1/glance", - :enabled => true - ) - should contain_class('nova::rabbitmq').with( - :userid => 'nova', - :password => 'rabbit_pw', - :enabled => true - ) - should contain_class('nova').with( - :sql_connection => 'mysql://nova:nova_pass@127.0.0.1/nova', - :rabbit_host => '127.0.0.1', - :rabbit_userid => 'nova', - :rabbit_password => 'rabbit_pw', - :image_service => 'nova.image.glance.GlanceImageService', - :glance_api_servers => '10.0.0.1:9292', - :verbose => false - ) - should contain_class('nova::api').with( - :enabled => true, - :admin_tenant_name => 'services', - :admin_user => 'nova', - :admin_password => 'nova_pass' - ) - should contain_class('nova::cert').with(:enabled => true) - should contain_class('nova::consoleauth').with(:enabled => true) - should contain_class('nova::scheduler').with(:enabled => true) - should contain_class('nova::objectstore').with(:enabled => true) - should contain_class('nova::vncproxy').with(:enabled => true) - should contain_class('horizon').with( - :secret_key => 'dummy_secret_key', - :cache_server_ip => '127.0.0.1', - :cache_server_port => '11211', - :swift => false, - :quantum => false, - :horizon_app_links => false - ) + it 'should disable glance services' do + should contain_class('glance::api').with( + :enabled => false + ) + should contain_class('glance::registry').with( + :enabled => false + ) + end end - describe 'when overriding params' do + context 'when params are overridden' do + let :params do default_params.merge( - :keystone_db_password => 'pass', - :glance_db_password => 'pass2', - :nova_db_password => 'pass3', - :verbose => true, - :keystone_admin_token => 'foo', - :nova_user_password => 'pass5', - :glance_user_password => 'pass6', - :admin_email => 'dan@puppetlabs.com', - :admin_address => '127.0.0.2', - :admin_password => 'pass7', - :rabbit_user => 'rabby', - :rabbit_password => 'rabby_pw', - :fixed_range => '10.0.0.0/24', - :floating_range => '11.0.0.0/24', - :network_manager => 'nova.network.manager.VlanManager', - :network_config => {'vlan_interface' => 'eth4'}, - :num_networks => 2, - :secret_key => 'real_secret_key', - :cache_server_ip => '127.0.0.2', - :cache_server_port => '11212', - :swift => true, - :quantum => true, - :horizon_app_links => true, - :glance_api_servers => '127.0.0.1:9292' - ) - end - it 'should override db config' do - should contain_class('keystone::db::mysql').with( - :password => 'pass' - ) - should contain_class('glance::db::mysql').with( - :password => 'pass2' - ) - should contain_class('nova::db::mysql').with( - :password => 'pass3' + :verbose => 'False', + :glance_user_password => 'glance_pass2', + :glance_db_password => 'glance_pass3', + :db_host => '127.0.0.2', + :glance_db_user => 'dan', + :glance_db_dbname => 'name', + :db_host => '127.0.0.2' ) end - it 'should override keystone config' do - should contain_class('keystone').with( - :verbose => true, - :debug => true, - :admin_token => 'foo' - ) - should contain_class('keystone::config::mysql').with( - :password => 'pass' - ) - should contain_class('keystone::endpoint').with( - :admin_address => '127.0.0.2' - ) - should contain_class('keystone::roles::admin').with( - :email => 'dan@puppetlabs.com', - :password => 'pass7' - ) - should contain_class('glance::keystone::auth').with( - :password => 'pass6', - :admin_address => '127.0.0.2' - ) - should contain_class('nova::keystone::auth').with( - :password => 'pass5', - :admin_address => '127.0.0.2' - ) - end - it 'should override glance config' do + it 'should override params for glance' do should contain_class('glance::api').with( - :verbose => true, - :debug => true, - :keystone_password => 'pass6', - :enabled => true + :verbose => 'False', + :debug => 'False', + :auth_type => 'keystone', + :auth_host => '127.0.0.1', + :auth_port => '35357', + :keystone_tenant => 'services', + :keystone_user => 'glance', + :keystone_password => 'glance_pass2', + :sql_connection => 'mysql://dan:glance_pass3@127.0.0.2/name' ) + should contain_class('glance::registry').with( - :verbose => true, - :debug => true, - :keystone_password => 'pass6', - :sql_connection => "mysql://glance:pass2@127.0.0.1/glance", - :enabled => true + :verbose => 'False', + :debug => 'False', + :auth_type => 'keystone', + :auth_host => '127.0.0.1', + :auth_port => '35357', + :keystone_tenant => 'services', + :keystone_user => 'glance', + :keystone_password => 'glance_pass2', + :sql_connection => "mysql://dan:glance_pass3@127.0.0.2/name" ) end - it 'should override nova config' do + end + end + + context 'config for nova' do + let :facts do + { + :operatingsystem => 'Ubuntu', + :osfamily => 'Debian', + :puppetversion => '2.7.x', + :memorysize => '2GB', + :processorcount => '2' + } + end + + context 'with default params' do + + it 'should contain enabled nova services' do should contain_class('nova::rabbitmq').with( - :userid => 'rabby', - :password => 'rabby_pw', + :userid => 'nova', + :password => 'rabbit_pw', :enabled => true ) should contain_class('nova').with( - :sql_connection => 'mysql://nova:pass3@127.0.0.1/nova', + :sql_connection => 'mysql://nova:nova_pass@127.0.0.1/nova', :rabbit_host => '127.0.0.1', - :rabbit_userid => 'rabby', - :rabbit_password => 'rabby_pw', + :rabbit_userid => 'nova', + :rabbit_password => 'rabbit_pw', :image_service => 'nova.image.glance.GlanceImageService', - :glance_api_servers => '127.0.0.1:9292', - :verbose => true + :glance_api_servers => '10.0.0.1:9292', + :verbose => 'False' ) should contain_class('nova::api').with( :enabled => true, :admin_tenant_name => 'services', :admin_user => 'nova', - :admin_password => 'pass5' - ) - should contain_class('nova::network').with( - :fixed_range => '10.0.0.0/24', - :floating_range => '11.0.0.0/24', - :network_manager => 'nova.network.manager.VlanManager', - :config_overrides => {'vlan_interface' => 'eth4'}, - :num_networks => 2 + :admin_password => 'nova_pass' ) + should contain_class('nova::cert').with(:enabled => true) + should contain_class('nova::consoleauth').with(:enabled => true) + should contain_class('nova::scheduler').with(:enabled => true) + should contain_class('nova::objectstore').with(:enabled => true) + should contain_class('nova::vncproxy').with(:enabled => true) end - describe 'it should override horizon params' do - it { should contain_class('horizon').with( - :secret_key => 'real_secret_key', - :cache_server_ip => '127.0.0.2', - :cache_server_port => '11212', - :swift => true, - :quantum => true, - :horizon_app_links => true - )} + it { should_not contain_nova_config('auto_assign_floating_ip') } + end + context 'when auto assign floating ip is assigned' do + let :params do + default_params.merge(:auto_assign_floating_ip => 'true') + end + it { should contain_nova_config('auto_assign_floating_ip').with(:value => 'True')} + end + context 'when not enabled' do + let :params do + default_params.merge(:enabled => false) + end + it 'should disable everything' do + should contain_class('nova::rabbitmq').with(:enabled => false) + should contain_class('nova::api').with(:enabled => false) + should contain_class('nova::cert').with(:enabled => false) + should contain_class('nova::consoleauth').with(:enabled => false) + should contain_class('nova::scheduler').with(:enabled => false) + should contain_class('nova::objectstore').with(:enabled => false) + should contain_class('nova::vncproxy').with(:enabled => false) end end end - describe 'when not enabled' do - let :params do - default_params.merge(:enabled => false) - end - it do - should contain_class('mysql::server').with( - :enabled => false + + context 'config for horizon' do + + it 'should contain enabled horizon' do + should contain_class('horizon').with( + :secret_key => 'secret_key', + :cache_server_ip => '127.0.0.1', + :cache_server_port => '11211', + :swift => false, + :quantum => false, + :horizon_app_links => false ) - should_not contain_class('keystone::db::mysql') - should_not contain_class('glance::db::mysql') - should_not contain_class('nova::db::mysql') - should contain_class('keystone::config::mysql') - should contain_class('keystone').with(:enabled => false) - should_not contain_class('keystone::roles::admin') - should_not contain_class('keystone::endpoint') - should_not contain_class('glance::keystone::auth') - should_not contain_class('nova::keystone::auth') - should contain_class('glance::api').with(:enabled => false) - should contain_class('glance::backend::file') - should contain_class('glance::registry').with(:enabled => false) - should contain_class('nova::rabbitmq').with(:enabled => false) - should contain_class('nova::api').with(:enabled => false) - should contain_class('nova::cert').with(:enabled => false) - should contain_class('nova::consoleauth').with(:enabled => false) - should contain_class('nova::scheduler').with(:enabled => false) - should contain_class('nova::objectstore').with(:enabled => false) - should contain_class('nova::vncproxy').with(:enabled => false) end end - describe 'nova network config' do + context 'cinder' do - describe 'when enabled' do + context 'when disabled' do + let :params do + default_params.merge(:cinder => false) + end + it 'should not contain cinder classes' do + should_not contain_class('cinder::base') + should_not contain_class('cinder::api') + should_not contain_class('cinder:"scheduler') + end + end - describe 'when multihost is not set' do + context 'when enabled' do + let :params do + default_params + end + it 'should configure cinder using defaults' do + should contain_class('cinder::base').with( + :verbose => 'False', + :sql_connection => 'mysql://cinder:cinder_pass@127.0.0.1/cinder?charset=utf8', + :rabbit_password => 'rabbit_pw' + ) + should contain_class('cinder::api').with_keystone_password('cinder_pass') + should contain_class('cinder::scheduler') + end + end + context 'when overriding config' do + let :params do + default_params.merge( + :verbose => 'True', + :rabbit_password => 'rabbit_pw2', + :cinder_user_password => 'foo', + :cinder_db_password => 'bar', + :cinder_db_user => 'baz', + :cinder_db_dbname => 'blah', + :db_host => '127.0.0.2' + ) + end + it 'should configure cinder using defaults' do + should contain_class('cinder::base').with( + :verbose => 'True', + :sql_connection => 'mysql://baz:bar@127.0.0.2/blah?charset=utf8', + :rabbit_password => 'rabbit_pw2' + ) + should contain_class('cinder::api').with_keystone_password('foo') + should contain_class('cinder::scheduler') + end + end + + end + + context 'network config' do + + context 'when quantum' do + + let :params do + default_params.merge(:quantum => true) + end + + it { should_not contain_class('nova::network') } + + end + + context 'when nova network' do + + + context 'when multi-host is not set' do + let :params do + default_params.merge(:quantum => false, :multi_host => false) + end it {should contain_class('nova::network').with( :private_interface => 'eth0', :public_interface => 'eth1', @@ -328,11 +476,11 @@ describe 'openstack::controller' do :enabled => true, :install_service => true )} - end - describe 'when multihost is set' do + + context 'when multi-host is set' do let :params do - default_params.merge(:multi_host => true) + default_params.merge(:quantum => false, :multi_host => true) end it { should contain_nova_config('multi_host').with(:value => 'True')} it {should contain_class('nova::network').with( @@ -340,46 +488,8 @@ describe 'openstack::controller' do :enabled => false, :install_service => false )} - end end - - describe 'when not enabled' do - - describe 'when multihost is set' do - let :params do - default_params.merge( - :multi_host => true, - :enabled => false - ) - end - - it {should contain_class('nova::network').with( - :create_networks => false, - :enabled => false, - :install_service => false - )} - - end - describe 'when multihost is not set' do - let :params do - default_params.merge( - :multi_host => false, - :enabled => false - ) - end - - it {should contain_class('nova::network').with( - :create_networks => false, - :enabled => false, - :install_service => false - )} - - end - - end - end - end