nova_wsgi_apache_api_spec.rb 6.2 KB

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