nova_compute_spec.rb 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. require 'spec_helper'
  2. describe 'nova::compute' do
  3. let :pre_condition do
  4. 'include nova'
  5. end
  6. shared_examples 'nova-compute' do
  7. context 'with default parameters' do
  8. it 'installs nova-compute package and service' do
  9. is_expected.to contain_service('nova-compute').with({
  10. :name => platform_params[:nova_compute_service],
  11. :ensure => 'running',
  12. :hasstatus => true,
  13. :enable => true,
  14. :tag => 'nova-service'
  15. })
  16. is_expected.to contain_package('nova-compute').with({
  17. :name => platform_params[:nova_compute_package],
  18. :tag => ['openstack', 'nova-package']
  19. })
  20. end
  21. it { is_expected.to contain_nova_config('DEFAULT/allow_resize_to_same_host').with(:value => 'false') }
  22. it { is_expected.to contain_nova_config('DEFAULT/resize_confirm_window').with_value('<SERVICE DEFAULT>') }
  23. it { is_expected.to contain_nova_config('DEFAULT/vcpu_pin_set').with(:value => '<SERVICE DEFAULT>') }
  24. it { is_expected.to contain_nova_config('DEFAULT/resume_guests_state_on_host_boot').with_value('<SERVICE DEFAULT>') }
  25. it { is_expected.to_not contain_nova_config('vnc/novncproxy_base_url') }
  26. it { is_expected.to contain_nova_config('key_manager/api_class').with_value('<SERVICE DEFAULT>') }
  27. it { is_expected.to contain_nova_config('barbican/barbican_endpoint').with_value('<SERVICE DEFAULT>') }
  28. it { is_expected.to contain_nova_config('barbican/barbican_api_version').with_value('<SERVICE DEFAULT>') }
  29. it { is_expected.to contain_nova_config('barbican/auth_endpoint').with_value('<SERVICE DEFAULT>') }
  30. it { is_expected.to contain_nova_config('DEFAULT/max_concurrent_live_migrations').with_value('<SERVICE DEFAULT>') }
  31. it { is_expected.to_not contain_package('cryptsetup').with( :ensure => 'present' )}
  32. it { is_expected.to_not contain_package('bridge-utils').with(
  33. :ensure => 'present',
  34. ) }
  35. it { is_expected.to contain_nova_config('DEFAULT/force_raw_images').with(:value => true) }
  36. it 'configures availability zones' do
  37. is_expected.to contain_nova_config('DEFAULT/default_availability_zone').with_value('<SERVICE DEFAULT>')
  38. is_expected.to contain_nova_config('DEFAULT/default_schedule_zone').with_value('<SERVICE DEFAULT>')
  39. is_expected.to contain_nova_config('DEFAULT/internal_service_availability_zone').with_value('<SERVICE DEFAULT>')
  40. end
  41. it { is_expected.to contain_nova_config('DEFAULT/heal_instance_info_cache_interval').with_value('60') }
  42. it 'installs genisoimage package and sets config_drive_format' do
  43. is_expected.to contain_nova_config('DEFAULT/config_drive_format').with(:value => '<SERVICE DEFAULT>')
  44. is_expected.to contain_package('genisoimage').with(
  45. :ensure => 'present',
  46. )
  47. is_expected.to contain_package('genisoimage').that_requires('Anchor[nova::install::begin]')
  48. is_expected.to contain_package('genisoimage').that_comes_before('Anchor[nova::install::end]')
  49. end
  50. end
  51. context 'with overridden parameters' do
  52. let :params do
  53. { :enabled => false,
  54. :ensure_package => '2012.1-2',
  55. :vncproxy_host => '127.0.0.1',
  56. :force_raw_images => false,
  57. :reserved_host_memory => '0',
  58. :compute_manager => 'ironic.nova.compute.manager.ClusteredComputeManager',
  59. :default_availability_zone => 'az1',
  60. :default_schedule_zone => 'az2',
  61. :internal_service_availability_zone => 'az_int1',
  62. :heal_instance_info_cache_interval => '120',
  63. :pci_passthrough => "[{\"vendor_id\":\"8086\",\"product_id\":\"0126\"},{\"vendor_id\":\"9096\",\"product_id\":\"1520\",\"physical_network\":\"physnet1\"}]",
  64. :config_drive_format => 'vfat',
  65. :resize_confirm_window => '3',
  66. :vcpu_pin_set => ['4-12','^8','15'],
  67. :resume_guests_state_on_host_boot => true,
  68. :keymgr_api_class => 'castellan.key_manager.barbican_key_manager.BarbicanKeyManager',
  69. :barbican_endpoint => 'http://localhost',
  70. :barbican_api_version => 'v1',
  71. :barbican_auth_endpoint => 'http://127.0.0.1:5000/v3',
  72. :max_concurrent_live_migrations => '4',
  73. }
  74. end
  75. it 'installs nova-compute package and service' do
  76. is_expected.to contain_service('nova-compute').with({
  77. :name => platform_params[:nova_compute_service],
  78. :ensure => 'stopped',
  79. :hasstatus => true,
  80. :enable => false,
  81. :tag => 'nova-service'
  82. })
  83. is_expected.to contain_package('nova-compute').with({
  84. :name => platform_params[:nova_compute_package],
  85. :ensure => '2012.1-2',
  86. :tag => ['openstack', 'nova-package']
  87. })
  88. end
  89. it 'configures ironic in nova.conf' do
  90. is_expected.to contain_nova_config('DEFAULT/reserved_host_memory_mb').with_value('0')
  91. is_expected.to contain_nova_config('DEFAULT/compute_manager').with_value('ironic.nova.compute.manager.ClusteredComputeManager')
  92. end
  93. it 'configures barbican service' do
  94. is_expected.to contain_nova_config('key_manager/api_class').with_value('castellan.key_manager.barbican_key_manager.BarbicanKeyManager')
  95. is_expected.to contain_nova_config('barbican/barbican_endpoint').with_value('http://localhost')
  96. is_expected.to contain_nova_config('barbican/barbican_api_version').with_value('v1')
  97. is_expected.to contain_nova_config('barbican/auth_endpoint').with_value('http://127.0.0.1:5000/v3')
  98. is_expected.to contain_package('cryptsetup').with( :ensure => 'present' )
  99. end
  100. it 'configures vnc in nova.conf' do
  101. is_expected.to contain_nova_config('vnc/enabled').with_value(true)
  102. is_expected.to contain_nova_config('vnc/vncserver_proxyclient_address').with_value('127.0.0.1')
  103. is_expected.to contain_nova_config('vnc/keymap').with_value('en-us')
  104. is_expected.to contain_nova_config('vnc/novncproxy_base_url').with_value(
  105. 'http://127.0.0.1:6080/vnc_auto.html'
  106. )
  107. end
  108. it 'configures availability zones' do
  109. is_expected.to contain_nova_config('DEFAULT/default_availability_zone').with_value('az1')
  110. is_expected.to contain_nova_config('DEFAULT/default_schedule_zone').with_value('az2')
  111. is_expected.to contain_nova_config('DEFAULT/internal_service_availability_zone').with_value('az_int1')
  112. end
  113. it { is_expected.to contain_nova_config('DEFAULT/heal_instance_info_cache_interval').with_value('120') }
  114. it { is_expected.to contain_nova_config('DEFAULT/force_raw_images').with(:value => false) }
  115. it { is_expected.to contain_nova_config('DEFAULT/resize_confirm_window').with_value('3') }
  116. it { is_expected.to contain_nova_config('DEFAULT/vcpu_pin_set').with(:value => '4-12,^8,15') }
  117. it { is_expected.to contain_nova_config('DEFAULT/max_concurrent_live_migrations').with_value('4') }
  118. it { is_expected.to contain_nova_config('DEFAULT/resume_guests_state_on_host_boot').with_value(true) }
  119. it 'configures nova pci_passthrough_whitelist entries' do
  120. is_expected.to contain_nova_config('DEFAULT/pci_passthrough_whitelist').with(
  121. 'value' => "[{\"vendor_id\":\"8086\",\"product_id\":\"0126\"},{\"vendor_id\":\"9096\",\"product_id\":\"1520\",\"physical_network\":\"physnet1\"}]"
  122. )
  123. end
  124. it 'configures nova config_drive_format to vfat' do
  125. is_expected.to contain_nova_config('DEFAULT/config_drive_format').with_value('vfat')
  126. is_expected.to_not contain_package('genisoimage').with(
  127. :ensure => 'present',
  128. )
  129. end
  130. end
  131. context 'when vcpu_pin_set and pci_passthrough are empty' do
  132. let :params do
  133. { :vcpu_pin_set => "",
  134. :pci_passthrough => "" }
  135. end
  136. it 'clears vcpu_pin_set configuration' do
  137. is_expected.to contain_nova_config('DEFAULT/vcpu_pin_set').with(:value => '<SERVICE DEFAULT>')
  138. end
  139. it 'clears pci_passthrough configuration' do
  140. is_expected.to contain_nova_config('DEFAULT/pci_passthrough_whitelist').with(:value => '<SERVICE DEFAULT>')
  141. end
  142. end
  143. context 'with neutron_enabled set to false' do
  144. let :params do
  145. { :neutron_enabled => false }
  146. end
  147. it 'installs bridge-utils package for nova-network' do
  148. is_expected.to contain_package('bridge-utils').with(
  149. :ensure => 'present',
  150. )
  151. is_expected.to contain_package('bridge-utils').that_requires('Anchor[nova::install::begin]')
  152. is_expected.to contain_package('bridge-utils').that_comes_before('Anchor[nova::install::end]')
  153. end
  154. end
  155. context 'with install_bridge_utils set to false' do
  156. let :params do
  157. { :install_bridge_utils => false }
  158. end
  159. it 'does not install bridge-utils package for nova-network' do
  160. is_expected.to_not contain_package('bridge-utils').with(
  161. :ensure => 'present',
  162. )
  163. end
  164. end
  165. context 'with vnc_enabled set to false' do
  166. let :params do
  167. { :vnc_enabled => false }
  168. end
  169. it 'disables vnc in nova.conf' do
  170. is_expected.to contain_nova_config('vnc/enabled').with_value(false)
  171. is_expected.to contain_nova_config('vnc/vncserver_proxyclient_address').with_ensure('absent')
  172. is_expected.to contain_nova_config('vnc/keymap').with_ensure('absent')
  173. is_expected.to_not contain_nova_config('vnc/novncproxy_base_url')
  174. end
  175. end
  176. context 'with force_config_drive parameter set to true' do
  177. let :params do
  178. { :force_config_drive => true }
  179. end
  180. it { is_expected.to contain_nova_config('DEFAULT/force_config_drive').with_value(true) }
  181. end
  182. context 'while not managing service state' do
  183. let :params do
  184. { :enabled => false,
  185. :manage_service => false,
  186. }
  187. end
  188. it { is_expected.to contain_service('nova-compute').without_ensure }
  189. end
  190. context 'with instance_usage_audit parameter set to false' do
  191. let :params do
  192. { :instance_usage_audit => false, }
  193. end
  194. it { is_expected.to contain_nova_config('DEFAULT/instance_usage_audit').with_ensure('absent') }
  195. it { is_expected.to contain_nova_config('DEFAULT/instance_usage_audit_period').with_ensure('absent') }
  196. end
  197. context 'with instance_usage_audit parameter and wrong period' do
  198. let :params do
  199. { :instance_usage_audit => true,
  200. :instance_usage_audit_period => 'fake', }
  201. end
  202. it { is_expected.to contain_nova_config('DEFAULT/instance_usage_audit').with_ensure('absent') }
  203. it { is_expected.to contain_nova_config('DEFAULT/instance_usage_audit_period').with_ensure('absent') }
  204. end
  205. context 'with instance_usage_audit parameter and period' do
  206. let :params do
  207. { :instance_usage_audit => true,
  208. :instance_usage_audit_period => 'year', }
  209. end
  210. it { is_expected.to contain_nova_config('DEFAULT/instance_usage_audit').with_value(true) }
  211. it { is_expected.to contain_nova_config('DEFAULT/instance_usage_audit_period').with_value('year') }
  212. end
  213. context 'with vnc_keymap set to fr' do
  214. let :params do
  215. { :vnc_keymap => 'fr', }
  216. end
  217. it { is_expected.to contain_nova_config('vnc/keymap').with_value('fr') }
  218. end
  219. end
  220. on_supported_os({
  221. :supported_os => OSDefaults.get_supported_os
  222. }).each do |os,facts|
  223. context "on #{os}" do
  224. let (:facts) do
  225. facts.merge!(OSDefaults.get_facts())
  226. end
  227. let (:platform_params) do
  228. case facts[:osfamily]
  229. when 'Debian'
  230. { :nova_compute_package => 'nova-compute',
  231. :nova_compute_service => 'nova-compute' }
  232. when 'RedHat'
  233. { :nova_compute_package => 'openstack-nova-compute',
  234. :nova_compute_service => 'openstack-nova-compute' }
  235. end
  236. end
  237. it_behaves_like 'nova-compute'
  238. end
  239. end
  240. end