diff --git a/manifests/agents/l3.pp b/manifests/agents/l3.pp index bb2a70093..3f3390ab3 100644 --- a/manifests/agents/l3.pp +++ b/manifests/agents/l3.pp @@ -4,7 +4,7 @@ # # TODO: create ability to have multiple L3 services # -# === Parameters: +# === Parameters # # [*package_ensure*] # (optional) The state of the package @@ -46,14 +46,6 @@ # (optional) The port of the metadata server # Defaults to 9697 # -# [*use_ovs*] -# (optional) Whether or not to use OVS to create any bridges -# Defaults to false -# -# [*external_port*] -# (optional) The uplink port to use on the external bridge -# Defaults to false -# class quantum::agents::l3 ( $package_ensure = 'present', $enabled = true, @@ -70,7 +62,7 @@ class quantum::agents::l3 ( include quantum::params - Quantum_config<||> ~> Service['quantum-l3'] + Quantum_config<||> ~> Service['quantum-l3'] Quantum_l3_agent_config<||> ~> Service['quantum-l3'] quantum_l3_agent_config { @@ -87,12 +79,15 @@ class quantum::agents::l3 ( if $::quantum::params::l3_agent_package { Package['quantum-l3'] -> Quantum_l3_agent_config<||> - Package['quantum-l3'] -> Service['quantum-l3'] package { 'quantum-l3': name => $::quantum::params::l3_agent_package, ensure => $package_ensure, require => Package['quantum'], } + } else { + # Some platforms (RedHat) does not provide a quantum L3 agent package. + # The quantum L3 agent config file is provided by the quantum package. + Package['quantum'] -> Quantum_l3_agent_config<||> } if $enabled { diff --git a/manifests/server.pp b/manifests/server.pp index 4491c21fe..90bb4b457 100644 --- a/manifests/server.pp +++ b/manifests/server.pp @@ -64,11 +64,11 @@ class quantum::server ( include quantum::params require keystone::python - Quantum_config<||> ~> Service['quantum-server'] + Quantum_config<||> ~> Service['quantum-server'] Quantum_api_config<||> ~> Service['quantum-server'] quantum_config { - 'DEFAULT/log_file': value => $log_file + 'DEFAULT/log_file': value => $log_file } if $enabled { @@ -80,10 +80,15 @@ class quantum::server ( if ($::quantum::params::server_package) { Package['quantum-server'] -> Quantum_api_config<||> Package['quantum-server'] -> Quantum_config<||> - package {'quantum-server': + Package['quantum-server'] -> Service['quantum-server'] + package { 'quantum-server': name => $::quantum::params::server_package, ensure => $package_ensure } + } else { + # Some platforms (RedHat) does not provide a quantum-server package. + # The quantum api config file is provided by the quantum package. + Package['quantum'] -> Quantum_api_config<||> } if ($auth_type == 'keystone') { @@ -111,11 +116,12 @@ class quantum::server ( } } - service {'quantum-server': + service { 'quantum-server': name => $::quantum::params::server_service, ensure => $service_ensure, enable => $enabled, hasstatus => true, - hasrestart => true + hasrestart => true, + require => Class['quantum'], } } diff --git a/spec/classes/quantum_agents_l3_spec.rb b/spec/classes/quantum_agents_l3_spec.rb index 73f879daf..123186e89 100644 --- a/spec/classes/quantum_agents_l3_spec.rb +++ b/spec/classes/quantum_agents_l3_spec.rb @@ -2,20 +2,69 @@ require 'spec_helper' describe 'quantum::agents::l3' do + let :pre_condition do + "class { 'quantum': rabbit_password => 'passw0rd' }" + end + + let :default_params do + { :package_ensure => 'present', + :enabled => true, + :debug => false, + :external_network_bridge => 'br-ex', + :use_namespaces => true, + :interface_driver => 'quantum.agent.linux.interface.OVSInterfaceDriver', + :router_id => nil, + :gateway_external_network_id => nil, + :handle_internal_only_routers => true, + :metadata_port => '9697', + :root_helper => 'sudo /usr/bin/quantum-rootwrap /etc/quantum/rootwrap.conf' } + end + let :params do - { - :external_network_bridge => 'br-floating' - } + { } end shared_examples_for 'quantum l3 agent' do + let :p do + default_params.merge(params) + end + it { should include_class('quantum::params') } - it 'configures quantum l3 agent' do - should contain_quantum_l3_agent_config('DEFAULT/external_network_bridge').with( - :value => params[:external_network_bridge] + it 'configures l3_agent.ini' do + should contain_quantum_l3_agent_config('DEFAULT/debug').with_value(p[:debug]) + should contain_quantum_l3_agent_config('DEFAULT/external_network_bridge').with_value(p[:external_network_bridge]) + should contain_quantum_l3_agent_config('DEFAULT/use_namespaces').with_value(p[:use_namespaces]) + should contain_quantum_l3_agent_config('DEFAULT/interface_driver').with_value(p[:interface_driver]) + should contain_quantum_l3_agent_config('DEFAULT/router_id').with_value(p[:router_id]) + should contain_quantum_l3_agent_config('DEFAULT/gateway_external_network_id').with_value(p[:gateway_external_network_id]) + should contain_quantum_l3_agent_config('DEFAULT/handle_internal_only_routers').with_value(p[:handle_internal_only_routers]) + should contain_quantum_l3_agent_config('DEFAULT/metadata_port').with_value(p[:metadata_port]) + should contain_quantum_l3_agent_config('DEFAULT/root_helper').with_value(p[:root_helper]) + end + + it 'installs quantum l3 agent package' do + if platform_params.has_key?(:l3_agent_package) + should contain_package('quantum-l3').with( + :name => platform_params[:l3_agent_package], + :ensure => p[:package_ensure], + :require => 'Package[quantum]' + ) + should contain_package('quantum-l3').with_before(/Quantum_l3_agent_config\[.+\]/) + else + should contain_package('quantum').with_before(/Quantum_l3_agent_config\[.+\]/) + end + end + + it 'configures quantum l3 agent service' do + should contain_service('quantum-l3').with( + :name => platform_params[:l3_agent_service], + :enable => true, + :ensure => 'running', + :require => 'Class[Quantum]' ) end + end context 'on Debian platforms' do @@ -23,6 +72,11 @@ describe 'quantum::agents::l3' do { :osfamily => 'Debian' } end + let :platform_params do + { :l3_agent_package => 'quantum-l3-agent', + :l3_agent_service => 'quantum-l3-agent' } + end + it_configures 'quantum l3 agent' end @@ -31,6 +85,10 @@ describe 'quantum::agents::l3' do { :osfamily => 'RedHat' } end + let :platform_params do + { :l3_agent_service => 'quantum-l3-agent' } + end + it_configures 'quantum l3 agent' end end diff --git a/spec/classes/quantum_server_spec.rb b/spec/classes/quantum_server_spec.rb index 69da1f7da..787ff82f9 100644 --- a/spec/classes/quantum_server_spec.rb +++ b/spec/classes/quantum_server_spec.rb @@ -2,23 +2,62 @@ require 'spec_helper' describe 'quantum::server' do + let :pre_condition do + "class { 'quantum': rabbit_password => 'passw0rd' }" + end + let :params do - { - :auth_password => 'passw0rd', - :auth_user => 'quantum' - } + { :auth_password => 'passw0rd', + :auth_user => 'quantum' } + end + + let :default_params do + { :package_ensure => 'present', + :enabled => true, + :log_file => '/var/log/quantum/server.log', + :auth_type => 'keystone', + :auth_host => 'localhost', + :auth_port => '35357', + :auth_tenant => 'services', + :auth_user => 'quantum' } end shared_examples_for 'a quantum server' do - it { should include_class('quantum::params') } - it 'configures quantum.conf' do - should contain_quantum_config('keystone_authtoken/admin_user').with( - :value => params[:auth_user] - ) + let :p do + default_params.merge(params) end - it 'configures quantum-api.conf' do - should contain_quantum_api_config('filter:authtoken/admin_user').with( - :value => params[:auth_user] + + it { should include_class('quantum::params') } + it { should contain_quantum_config('DEFAULT/log_file').with_value(p[:log_file]) } + + it 'configures authentication middleware' do + should contain_quantum_api_config('filter:authtoken/auth_host').with_value(p[:auth_host]); + should contain_quantum_api_config('filter:authtoken/auth_port').with_value(p[:auth_port]); + should contain_quantum_api_config('filter:authtoken/admin_tenant_name').with_value(p[:auth_tenant]); + should contain_quantum_api_config('filter:authtoken/admin_user').with_value(p[:auth_user]); + should contain_quantum_api_config('filter:authtoken/admin_password').with_value(p[:auth_password]); + end + + it 'installs quantum server package' do + if platform_params.has_key?(:server_package) + should contain_package('quantum-server').with( + :name => platform_params[:server_package], + :ensure => p[:package_ensure] + ) + should contain_package('quantum-server').with_before(/Quantum_api_config\[.+\]/) + should contain_package('quantum-server').with_before(/Quantum_config\[.+\]/) + should contain_package('quantum-server').with_before(/Service\[quantum-server\]/) + else + should contain_package('quantum').with_before(/Quantum_api_config\[.+\]/) + end + end + + it 'configures quantum server service' do + should contain_service('quantum-server').with( + :name => platform_params[:server_service], + :enable => true, + :ensure => 'running', + :require => 'Class[Quantum]' ) end end @@ -27,21 +66,19 @@ describe 'quantum::server' do before do params.delete(:auth_password) end - it do - expect { - should contain_quantum_api_config('filter:authtoken/admin_user').with( - :value => params[:auth_user] - ) - }.to raise_error(Puppet::Error, /auth_password must be set/) - end + it_raises 'a Puppet::Error', /auth_password must be set/ end - context 'on Debian platforms' do let :facts do { :osfamily => 'Debian' } end + let :platform_params do + { :server_package => 'quantum-server', + :server_service => 'quantum-server' } + end + it_configures 'a quantum server' it_configures 'a quantum server with broken authentication' end @@ -51,6 +88,10 @@ describe 'quantum::server' do { :osfamily => 'RedHat' } end + let :platform_params do + { :server_service => 'quantum-server' } + end + it_configures 'a quantum server' it_configures 'a quantum server with broken authentication' end diff --git a/spec/shared_examples.rb b/spec/shared_examples.rb new file mode 100644 index 000000000..d92156a36 --- /dev/null +++ b/spec/shared_examples.rb @@ -0,0 +1,5 @@ +shared_examples_for "a Puppet::Error" do |description| + it "with message matching #{description.inspect}" do + expect { should have_class_count(1) }.to raise_error(Puppet::Error, description) + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index e17ce17d6..53d4dd02d 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,5 +1,7 @@ require 'puppetlabs_spec_helper/module_spec_helper' +require 'shared_examples' RSpec.configure do |c| c.alias_it_should_behave_like_to :it_configures, 'configures' + c.alias_it_should_behave_like_to :it_raises, 'raises' end