nova_wsgi_apache_placement_spec.rb 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. require 'spec_helper'
  2. describe 'nova::wsgi::apache_placement' do
  3. let :global_facts do
  4. @default_facts.merge({
  5. :processorcount => 42,
  6. :concat_basedir => '/var/lib/puppet/concat',
  7. :fqdn => 'some.host.tld'
  8. })
  9. end
  10. let :pre_condition do
  11. "include nova
  12. class { '::nova::keystone::authtoken':
  13. password => 'secrete',
  14. }
  15. "
  16. end
  17. shared_examples_for 'apache serving nova with mod_wsgi' do
  18. it { is_expected.to contain_service('httpd').with_name(platform_params[:httpd_service_name]) }
  19. it { is_expected.to contain_class('nova::params') }
  20. it { is_expected.to contain_class('apache') }
  21. it { is_expected.to contain_class('apache::mod::wsgi') }
  22. describe 'with default parameters' do
  23. let :pre_condition do
  24. "include nova
  25. class { '::nova::keystone::authtoken':
  26. password => 'secrete',
  27. }
  28. "
  29. end
  30. it { is_expected.to contain_package('nova-placement-api').with(
  31. :name => "#{platform_params[:placement_package_name]}",
  32. :ensure => 'present',
  33. :tag => ['openstack', 'nova-package'],
  34. )}
  35. it { is_expected.to contain_file("#{platform_params[:wsgi_script_path]}").with(
  36. 'ensure' => 'directory',
  37. 'owner' => 'nova',
  38. 'group' => 'nova',
  39. 'require' => 'Package[httpd]'
  40. )}
  41. it { is_expected.to contain_file('placement_wsgi').with(
  42. 'ensure' => 'file',
  43. 'path' => "#{platform_params[:wsgi_script_path]}/nova-placement-api",
  44. 'source' => platform_params[:placement_wsgi_script_source],
  45. 'owner' => 'nova',
  46. 'group' => 'nova',
  47. 'mode' => '0644'
  48. )}
  49. it { is_expected.to contain_file('placement_wsgi').that_requires("File[#{platform_params[:wsgi_script_path]}]") }
  50. it { is_expected.to contain_apache__vhost('placement_wsgi').with(
  51. 'servername' => 'some.host.tld',
  52. 'ip' => nil,
  53. 'port' => '80',
  54. 'docroot' => "#{platform_params[:wsgi_script_path]}",
  55. 'docroot_owner' => 'nova',
  56. 'docroot_group' => 'nova',
  57. 'ssl' => 'true',
  58. 'wsgi_daemon_process' => 'placement-api',
  59. 'wsgi_daemon_process_options' => {
  60. 'user' => 'nova',
  61. 'group' => 'nova',
  62. 'processes' => 1,
  63. 'threads' => '42',
  64. 'display-name' => 'placement_wsgi',
  65. },
  66. 'wsgi_process_group' => 'placement-api',
  67. 'wsgi_script_aliases' => { '/placement' => "#{platform_params[:wsgi_script_path]}/nova-placement-api" },
  68. 'require' => 'File[placement_wsgi]'
  69. )}
  70. it { is_expected.to contain_concat("#{platform_params[:httpd_ports_file]}") }
  71. it { is_expected.to contain_file('placement_wsgi').with(
  72. 'ensure' => 'file',
  73. 'path' => "#{platform_params[:wsgi_script_path]}/nova-placement-api",
  74. 'source' => platform_params[:placement_wsgi_script_source],
  75. 'owner' => 'nova',
  76. 'group' => 'nova',
  77. 'mode' => '0644'
  78. )}
  79. it { is_expected.to contain_file('placement_wsgi').that_requires("File[#{platform_params[:wsgi_script_path]}]") }
  80. it { is_expected.to contain_concat("#{platform_params[:httpd_ports_file]}") }
  81. end
  82. describe 'when overriding parameters using different ports' do
  83. let :pre_condition do
  84. "include nova
  85. class { '::nova::keystone::authtoken':
  86. password => 'secrete',
  87. }
  88. "
  89. end
  90. let :params do
  91. {
  92. :servername => 'dummy.host',
  93. :bind_host => '10.42.51.1',
  94. :api_port => 12345,
  95. :ssl => false,
  96. :wsgi_process_display_name => 'placement-api',
  97. :workers => 37,
  98. }
  99. end
  100. it { is_expected.to contain_apache__vhost('placement_wsgi').with(
  101. 'servername' => 'dummy.host',
  102. 'ip' => '10.42.51.1',
  103. 'port' => '12345',
  104. 'docroot' => "#{platform_params[:wsgi_script_path]}",
  105. 'docroot_owner' => 'nova',
  106. 'docroot_group' => 'nova',
  107. 'ssl' => 'false',
  108. 'wsgi_daemon_process' => 'placement-api',
  109. 'wsgi_daemon_process_options' => {
  110. 'user' => 'nova',
  111. 'group' => 'nova',
  112. 'processes' => 37,
  113. 'threads' => '42',
  114. 'display-name' => 'placement-api',
  115. },
  116. 'wsgi_process_group' => 'placement-api',
  117. 'wsgi_script_aliases' => { '/placement' => "#{platform_params[:wsgi_script_path]}/nova-placement-api" },
  118. 'require' => 'File[placement_wsgi]'
  119. )}
  120. end
  121. end
  122. on_supported_os({
  123. :supported_os => OSDefaults.get_supported_os
  124. }).each do |os,facts|
  125. context "on #{os}" do
  126. let (:facts) do
  127. facts.merge!(OSDefaults.get_facts({
  128. :os_workers => 42,
  129. :concat_basedir => '/var/lib/puppet/concat',
  130. :fqdn => 'some.host.tld',
  131. }))
  132. end
  133. let(:platform_params) do
  134. case facts[:osfamily]
  135. when 'Debian'
  136. {
  137. :httpd_service_name => 'apache2',
  138. :httpd_ports_file => '/etc/apache2/ports.conf',
  139. :wsgi_script_path => '/usr/lib/cgi-bin/nova',
  140. :placement_wsgi_script_source => '/usr/bin/nova-placement-api',
  141. :placement_package_name => 'nova-placement-api',
  142. }
  143. when 'RedHat'
  144. {
  145. :httpd_service_name => 'httpd',
  146. :httpd_ports_file => '/etc/httpd/conf/ports.conf',
  147. :wsgi_script_path => '/var/www/cgi-bin/nova',
  148. :placement_wsgi_script_source => '/usr/bin/nova-placement-api',
  149. :placement_package_name => 'openstack-nova-placement-api',
  150. }
  151. end
  152. end
  153. it_behaves_like 'apache serving nova with mod_wsgi'
  154. end
  155. end
  156. end