nova_wsgi_apache_spec.rb 6.0 KB

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