nova_init_spec.rb 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607
  1. require 'spec_helper'
  2. describe 'nova' do
  3. shared_examples 'nova' do
  4. context 'with default parameters' do
  5. it 'contains the logging class' do
  6. is_expected.to contain_class('nova::logging')
  7. end
  8. it 'installs packages' do
  9. is_expected.to contain_package('python-nova').with(
  10. :ensure => 'present',
  11. :tag => ['openstack', 'nova-package']
  12. )
  13. is_expected.to contain_package('nova-common').with(
  14. :name => platform_params[:nova_common_package],
  15. :ensure => 'present',
  16. :tag => ['openstack', 'nova-package']
  17. )
  18. end
  19. it 'configures rootwrap' do
  20. is_expected.to contain_nova_config('DEFAULT/rootwrap_config').with_value('/etc/nova/rootwrap.conf')
  21. end
  22. it { is_expected.to contain_exec('networking-refresh').with(
  23. :command => '/sbin/ifdown -a ; /sbin/ifup -a',
  24. :refreshonly => true
  25. )}
  26. it 'configures image service' do
  27. is_expected.to contain_nova_config('DEFAULT/image_service').with_value('nova.image.glance.GlanceImageService')
  28. is_expected.to contain_nova_config('glance/api_servers').with_value('http://localhost:9292')
  29. end
  30. it 'configures auth_strategy' do
  31. is_expected.to contain_nova_config('api/auth_strategy').with_value('keystone')
  32. is_expected.to_not contain_nova_config('DEFAULT/use_deprecated_auth').with_value(false)
  33. end
  34. it 'configures rabbit' do
  35. is_expected.to contain_nova_config('DEFAULT/rpc_backend').with_value('rabbit')
  36. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_host').with_value('<SERVICE DEFAULT>')
  37. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_password').with_value('<SERVICE DEFAULT>').with_secret(true)
  38. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_port').with_value('<SERVICE DEFAULT>')
  39. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_userid').with_value('<SERVICE DEFAULT>')
  40. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_virtual_host').with_value('<SERVICE DEFAULT>')
  41. is_expected.to contain_nova_config('oslo_messaging_rabbit/heartbeat_timeout_threshold').with_value('<SERVICE DEFAULT>')
  42. is_expected.to contain_nova_config('oslo_messaging_rabbit/heartbeat_rate').with_value('<SERVICE DEFAULT>')
  43. end
  44. it 'configures various things' do
  45. is_expected.to contain_nova_config('DEFAULT/state_path').with_value('/var/lib/nova')
  46. is_expected.to contain_nova_config('oslo_concurrency/lock_path').with_value(platform_params[:lock_path])
  47. is_expected.to contain_nova_config('DEFAULT/service_down_time').with_value('60')
  48. is_expected.to contain_nova_config('DEFAULT/rootwrap_config').with_value('/etc/nova/rootwrap.conf')
  49. is_expected.to contain_nova_config('DEFAULT/report_interval').with_value('10')
  50. is_expected.to contain_nova_config('os_vif_linux_bridge/use_ipv6').with_value('<SERVICE DEFAULT>')
  51. is_expected.to contain_nova_config('DEFAULT/transport_url').with_value('<SERVICE DEFAULT>')
  52. is_expected.to contain_nova_config('DEFAULT/rpc_response_timeout').with_value('<SERVICE DEFAULT>')
  53. is_expected.to contain_nova_config('cinder/os_region_name').with_value('<SERVICE DEFAULT>')
  54. is_expected.to contain_nova_config('cinder/catalog_info').with('value' => 'volumev2:cinderv2:publicURL')
  55. is_expected.to contain_nova_config('DEFAULT/cpu_allocation_ratio').with_value('<SERVICE DEFAULT>')
  56. is_expected.to contain_nova_config('DEFAULT/ram_allocation_ratio').with_value('<SERVICE DEFAULT>')
  57. is_expected.to contain_nova_config('DEFAULT/disk_allocation_ratio').with_value('<SERVICE DEFAULT>')
  58. end
  59. it 'configures block_device_allocate params' do
  60. is_expected.to contain_nova_config('DEFAULT/block_device_allocate_retries').with_value('<SERVICE DEFAULT>')
  61. is_expected.to contain_nova_config('DEFAULT/block_device_allocate_retries_interval').with_value('<SERVICE DEFAULT>')
  62. end
  63. end
  64. context 'with overridden parameters' do
  65. let :params do
  66. { :debug => true,
  67. :log_dir => '/var/log/nova2',
  68. :image_service => 'nova.image.local.LocalImageService',
  69. :default_transport_url => 'rabbit://rabbit_user:password@localhost:5673',
  70. :rpc_response_timeout => '30',
  71. :rpc_backend => 'rabbit',
  72. :rabbit_host => 'rabbit',
  73. :rabbit_userid => 'rabbit_user',
  74. :rabbit_port => '5673',
  75. :rabbit_password => 'password',
  76. :rabbit_heartbeat_timeout_threshold => '60',
  77. :rabbit_heartbeat_rate => '10',
  78. :lock_path => '/var/locky/path',
  79. :state_path => '/var/lib/nova2',
  80. :service_down_time => '120',
  81. :auth_strategy => 'foo',
  82. :ensure_package => '2012.1.1-15.el6',
  83. :host => 'test-001.example.org',
  84. :notification_transport_url => 'rabbit://rabbit_user:password@localhost:5673',
  85. :notification_driver => 'ceilometer.compute.nova_notifier',
  86. :notification_topics => 'openstack',
  87. :notify_api_faults => true,
  88. :report_interval => '60',
  89. :os_region_name => 'MyRegion',
  90. :use_ipv6 => true,
  91. :upgrade_level_cells => '1.0.0',
  92. :upgrade_level_cert => '1.0.0',
  93. :upgrade_level_compute => '1.0.0',
  94. :upgrade_level_conductor => '1.0.0',
  95. :upgrade_level_console => '1.0.0',
  96. :upgrade_level_consoleauth => '1.0.0',
  97. :upgrade_level_intercell => '1.0.0',
  98. :upgrade_level_network => '1.0.0',
  99. :upgrade_level_scheduler => '1.0.0',
  100. :purge_config => false,
  101. :block_device_allocate_retries => '60',
  102. :block_device_allocate_retries_interval => '3',
  103. }
  104. end
  105. it 'installs packages' do
  106. is_expected.to contain_package('nova-common').with('ensure' => '2012.1.1-15.el6')
  107. is_expected.to contain_package('python-nova').with('ensure' => '2012.1.1-15.el6')
  108. end
  109. it 'passes purge to resource' do
  110. is_expected.to contain_resources('nova_config').with({
  111. :purge => false
  112. })
  113. end
  114. it 'configures image service' do
  115. is_expected.to contain_nova_config('DEFAULT/image_service').with_value('nova.image.local.LocalImageService')
  116. is_expected.to_not contain_nova_config('glance/api_servers')
  117. end
  118. it 'configures auth_strategy' do
  119. is_expected.to contain_nova_config('api/auth_strategy').with_value('foo')
  120. is_expected.to_not contain_nova_config('DEFAULT/use_deprecated_auth').with_value(true)
  121. end
  122. it 'configures rabbit' do
  123. is_expected.to contain_nova_config('DEFAULT/rpc_backend').with_value('rabbit')
  124. is_expected.to contain_nova_config('DEFAULT/transport_url').with_value('rabbit://rabbit_user:password@localhost:5673')
  125. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_host').with_value('rabbit')
  126. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_password').with_value('password').with_secret(true)
  127. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_port').with_value('5673')
  128. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_userid').with_value('rabbit_user')
  129. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_virtual_host').with_value('<SERVICE DEFAULT>')
  130. is_expected.to contain_nova_config('oslo_messaging_rabbit/heartbeat_timeout_threshold').with_value('60')
  131. is_expected.to contain_nova_config('oslo_messaging_rabbit/heartbeat_rate').with_value('10')
  132. end
  133. it 'configures host' do
  134. is_expected.to contain_nova_config('DEFAULT/host').with_value('test-001.example.org')
  135. end
  136. it 'configures upgrade_levels' do
  137. is_expected.to contain_nova_config('upgrade_levels/cells').with_value('1.0.0')
  138. is_expected.to contain_nova_config('upgrade_levels/cert').with_value('1.0.0')
  139. is_expected.to contain_nova_config('upgrade_levels/compute').with_value('1.0.0')
  140. is_expected.to contain_nova_config('upgrade_levels/conductor').with_value('1.0.0')
  141. is_expected.to contain_nova_config('upgrade_levels/console').with_value('1.0.0')
  142. is_expected.to contain_nova_config('upgrade_levels/consoleauth').with_value('1.0.0')
  143. is_expected.to contain_nova_config('upgrade_levels/intercell').with_value('1.0.0')
  144. is_expected.to contain_nova_config('upgrade_levels/network').with_value('1.0.0')
  145. is_expected.to contain_nova_config('upgrade_levels/scheduler').with_value('1.0.0')
  146. end
  147. it 'configures various things' do
  148. is_expected.to contain_nova_config('DEFAULT/state_path').with_value('/var/lib/nova2')
  149. is_expected.to contain_nova_config('oslo_concurrency/lock_path').with_value('/var/locky/path')
  150. is_expected.to contain_nova_config('DEFAULT/service_down_time').with_value('120')
  151. is_expected.to contain_nova_config('DEFAULT/rpc_response_timeout').with_value('30')
  152. is_expected.to contain_nova_config('oslo_messaging_notifications/transport_url').with_value('rabbit://rabbit_user:password@localhost:5673')
  153. is_expected.to contain_nova_config('oslo_messaging_notifications/driver').with_value('ceilometer.compute.nova_notifier')
  154. is_expected.to contain_nova_config('oslo_messaging_notifications/topics').with_value('openstack')
  155. is_expected.to contain_nova_config('DEFAULT/notify_api_faults').with_value(true)
  156. is_expected.to contain_nova_config('DEFAULT/report_interval').with_value('60')
  157. is_expected.to contain_nova_config('os_vif_linux_bridge/use_ipv6').with_value('true')
  158. is_expected.to contain_nova_config('cinder/os_region_name').with_value('MyRegion')
  159. end
  160. context 'with multiple notification_driver' do
  161. before { params.merge!( :notification_driver => ['ceilometer.compute.nova_notifier', 'nova.openstack.common.notifier.rpc_notifier']) }
  162. it { is_expected.to contain_nova_config('oslo_messaging_notifications/driver').with_value(
  163. 'ceilometer.compute.nova_notifier,nova.openstack.common.notifier.rpc_notifier'
  164. ) }
  165. end
  166. it 'configures block_device_allocate params' do
  167. is_expected.to contain_nova_config('DEFAULT/block_device_allocate_retries').with_value('60')
  168. is_expected.to contain_nova_config('DEFAULT/block_device_allocate_retries_interval').with_value('3')
  169. end
  170. end
  171. context 'with wrong notify_on_state_change parameter' do
  172. let :params do
  173. { :notify_on_state_change => 'vm_status' }
  174. end
  175. it 'configures database' do
  176. is_expected.to contain_nova_config('DEFAULT/notify_on_state_change').with_ensure('absent')
  177. end
  178. end
  179. context 'with notify_on_state_change parameter' do
  180. let :params do
  181. { :notify_on_state_change => 'vm_state' }
  182. end
  183. it 'configures database' do
  184. is_expected.to contain_nova_config('DEFAULT/notify_on_state_change').with_value('vm_state')
  185. end
  186. end
  187. context 'with rabbit_hosts parameter' do
  188. let :params do
  189. { :rabbit_hosts => ['rabbit:5673', 'rabbit2:5674'] }
  190. end
  191. it 'configures rabbit' do
  192. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_host').with_value('<SERVICE DEFAULT>')
  193. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_port').with_value('<SERVICE DEFAULT>')
  194. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_hosts').with_value('rabbit:5673,rabbit2:5674')
  195. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_ha_queues').with_value(true)
  196. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_use_ssl').with_value('<SERVICE DEFAULT>')
  197. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_reconnect_delay').with_value('<SERVICE DEFAULT>')
  198. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_compression').with_value('<SERVICE DEFAULT>')
  199. is_expected.to contain_nova_config('oslo_messaging_rabbit/amqp_durable_queues').with_value('<SERVICE DEFAULT>')
  200. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_ca_certs').with_value('<SERVICE DEFAULT>')
  201. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_certfile').with_value('<SERVICE DEFAULT>')
  202. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_keyfile').with_value('<SERVICE DEFAULT>')
  203. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_version').with_value('<SERVICE DEFAULT>')
  204. end
  205. end
  206. context 'with rabbit_hosts parameter (one server)' do
  207. let :params do
  208. { :rabbit_hosts => ['rabbit:5673'] }
  209. end
  210. it 'configures rabbit' do
  211. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_host').with_value('<SERVICE DEFAULT>')
  212. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_port').with_value('<SERVICE DEFAULT>')
  213. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_hosts').with_value('rabbit:5673')
  214. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_ha_queues').with_value('<SERVICE DEFAULT>')
  215. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_use_ssl').with_value('<SERVICE DEFAULT>')
  216. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_reconnect_delay').with_value('<SERVICE DEFAULT>')
  217. is_expected.to contain_nova_config('oslo_messaging_rabbit/amqp_durable_queues').with_value('<SERVICE DEFAULT>')
  218. end
  219. end
  220. context 'with kombu_reconnect_delay set to 5.0' do
  221. let :params do
  222. { :kombu_reconnect_delay => '5.0' }
  223. end
  224. it 'configures rabbit' do
  225. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_reconnect_delay').with_value('5.0')
  226. end
  227. end
  228. context 'with rabbit_ha_queues set to true' do
  229. let :params do
  230. { :rabbit_ha_queues => true }
  231. end
  232. it 'configures rabbit' do
  233. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_ha_queues').with_value(true)
  234. end
  235. end
  236. context 'with rabbit_ha_queues set to false and with rabbit_hosts' do
  237. let :params do
  238. { :rabbit_ha_queues => 'false',
  239. :rabbit_hosts => ['rabbit:5673'] }
  240. end
  241. it 'configures rabbit' do
  242. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_ha_queues').with_value(false)
  243. end
  244. end
  245. context 'with amqp_durable_queues parameter' do
  246. let :params do
  247. { :rabbit_hosts => ['rabbit:5673'],
  248. :amqp_durable_queues => true }
  249. end
  250. it 'configures rabbit' do
  251. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_host').with_value('<SERVICE DEFAULT>')
  252. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_port').with_value('<SERVICE DEFAULT>')
  253. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_hosts').with_value('rabbit:5673')
  254. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_ha_queues').with_value('<SERVICE DEFAULT>')
  255. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_use_ssl').with_value('<SERVICE DEFAULT>')
  256. is_expected.to contain_nova_config('oslo_messaging_rabbit/amqp_durable_queues').with_value(true)
  257. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_ca_certs').with_value('<SERVICE DEFAULT>')
  258. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_certfile').with_value('<SERVICE DEFAULT>')
  259. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_keyfile').with_value('<SERVICE DEFAULT>')
  260. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_version').with_value('<SERVICE DEFAULT>')
  261. end
  262. end
  263. context 'with rabbit ssl enabled with kombu' do
  264. let :params do
  265. { :rabbit_hosts => ['rabbit:5673'],
  266. :rabbit_use_ssl => true,
  267. :kombu_ssl_ca_certs => '/etc/ca.cert',
  268. :kombu_ssl_certfile => '/etc/certfile',
  269. :kombu_ssl_keyfile => '/etc/key',
  270. :kombu_ssl_version => 'TLSv1', }
  271. end
  272. it 'configures rabbit' do
  273. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_use_ssl').with_value(true)
  274. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_ca_certs').with_value('/etc/ca.cert')
  275. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_certfile').with_value('/etc/certfile')
  276. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_keyfile').with_value('/etc/key')
  277. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_version').with_value('TLSv1')
  278. end
  279. end
  280. context 'with rabbit ssl enabled without kombu' do
  281. let :params do
  282. { :rabbit_hosts => ['rabbit:5673'],
  283. :rabbit_use_ssl => true, }
  284. end
  285. it 'configures rabbit' do
  286. is_expected.to contain_nova_config('oslo_messaging_rabbit/rabbit_use_ssl').with_value(true)
  287. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_ca_certs').with_value('<SERVICE DEFAULT>')
  288. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_certfile').with_value('<SERVICE DEFAULT>')
  289. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_keyfile').with_value('<SERVICE DEFAULT>')
  290. is_expected.to contain_nova_config('oslo_messaging_rabbit/kombu_ssl_version').with_value('<SERVICE DEFAULT>')
  291. end
  292. end
  293. context 'with rabbitmq rpc_backend with old parameter' do
  294. let :params do
  295. { :rpc_backend => 'nova.openstack.common.rpc.impl_kombu' }
  296. end
  297. it { is_expected.to contain_nova_config('DEFAULT/rpc_backend').with_value('rabbit') }
  298. end
  299. context 'with amqp rpc_backend default parameters' do
  300. let :params do
  301. { :rpc_backend => 'amqp' }
  302. end
  303. it 'configures amqp' do
  304. is_expected.to contain_nova_config('DEFAULT/rpc_backend').with_value('amqp')
  305. is_expected.to contain_nova_config('oslo_messaging_amqp/server_request_prefix').with_value('<SERVICE DEFAULT>')
  306. is_expected.to contain_nova_config('oslo_messaging_amqp/broadcast_prefix').with_value('<SERVICE DEFAULT>')
  307. is_expected.to contain_nova_config('oslo_messaging_amqp/group_request_prefix').with_value('<SERVICE DEFAULT>')
  308. is_expected.to contain_nova_config('oslo_messaging_amqp/container_name').with_value('<SERVICE DEFAULT>')
  309. is_expected.to contain_nova_config('oslo_messaging_amqp/idle_timeout').with_value('<SERVICE DEFAULT>')
  310. is_expected.to contain_nova_config('oslo_messaging_amqp/trace').with_value('<SERVICE DEFAULT>')
  311. is_expected.to contain_nova_config('oslo_messaging_amqp/ssl_ca_file').with_value('<SERVICE DEFAULT>')
  312. is_expected.to contain_nova_config('oslo_messaging_amqp/ssl_cert_file').with_value('<SERVICE DEFAULT>')
  313. is_expected.to contain_nova_config('oslo_messaging_amqp/ssl_key_file').with_value('<SERVICE DEFAULT>')
  314. is_expected.to contain_nova_config('oslo_messaging_amqp/ssl_key_password').with_value('<SERVICE DEFAULT>')
  315. is_expected.to contain_nova_config('oslo_messaging_amqp/allow_insecure_clients').with_value('<SERVICE DEFAULT>')
  316. is_expected.to contain_nova_config('oslo_messaging_amqp/sasl_mechanisms').with_value('<SERVICE DEFAULT>')
  317. is_expected.to contain_nova_config('oslo_messaging_amqp/sasl_config_dir').with_value('<SERVICE DEFAULT>')
  318. is_expected.to contain_nova_config('oslo_messaging_amqp/sasl_config_name').with_value('<SERVICE DEFAULT>')
  319. is_expected.to contain_nova_config('oslo_messaging_amqp/username').with_value('<SERVICE DEFAULT>')
  320. is_expected.to contain_nova_config('oslo_messaging_amqp/password').with_value('<SERVICE DEFAULT>')
  321. end
  322. end
  323. context 'with amqp rpc_backend overriden parameters' do
  324. let :params do
  325. { :rpc_backend => 'amqp',
  326. :amqp_idle_timeout => '60',
  327. :amqp_trace => true,
  328. :amqp_ssl_ca_file => '/etc/ca.cert',
  329. :amqp_ssl_cert_file => '/etc/certfile',
  330. :amqp_ssl_key_file => '/etc/key',
  331. :amqp_username => 'amqp_user',
  332. :amqp_password => 'password',
  333. }
  334. end
  335. it 'configures amqp overide' do
  336. is_expected.to contain_nova_config('DEFAULT/rpc_backend').with_value('amqp')
  337. is_expected.to contain_nova_config('oslo_messaging_amqp/idle_timeout').with_value('60')
  338. is_expected.to contain_nova_config('oslo_messaging_amqp/trace').with_value('true')
  339. is_expected.to contain_nova_config('oslo_messaging_amqp/ssl_ca_file').with_value('/etc/ca.cert')
  340. is_expected.to contain_nova_config('oslo_messaging_amqp/ssl_cert_file').with_value('/etc/certfile')
  341. is_expected.to contain_nova_config('oslo_messaging_amqp/ssl_key_file').with_value('/etc/key')
  342. is_expected.to contain_nova_config('oslo_messaging_amqp/username').with_value('amqp_user')
  343. is_expected.to contain_nova_config('oslo_messaging_amqp/password').with_value('password')
  344. end
  345. end
  346. context 'with ssh public key' do
  347. let :params do
  348. {
  349. :nova_public_key => {'type' => 'ssh-rsa',
  350. 'key' => 'keydata'}
  351. }
  352. end
  353. it 'should install ssh public key' do
  354. is_expected.to contain_ssh_authorized_key('nova-migration-public-key').with(
  355. :ensure => 'present',
  356. :key => 'keydata',
  357. :type => 'ssh-rsa'
  358. )
  359. end
  360. end
  361. context 'with ssh public key missing key type' do
  362. let :params do
  363. {
  364. :nova_public_key => {'key' => 'keydata'}
  365. }
  366. end
  367. it 'should raise an error' do
  368. expect {
  369. is_expected.to contain_ssh_authorized_key('nova-migration-public-key').with(
  370. :ensure => 'present',
  371. :key => 'keydata'
  372. )
  373. }.to raise_error Puppet::Error, /You must provide both a key type and key data./
  374. end
  375. end
  376. context 'with ssh public key missing key data' do
  377. let :params do
  378. {
  379. :nova_public_key => {'type' => 'ssh-rsa'}
  380. }
  381. end
  382. it 'should raise an error' do
  383. expect {
  384. is_expected.to contain_ssh_authorized_key('nova-migration-public-key').with(
  385. :ensure => 'present',
  386. :key => 'keydata'
  387. )
  388. }.to raise_error Puppet::Error, /You must provide both a key type and key data./
  389. end
  390. end
  391. context 'with ssh private key' do
  392. let :params do
  393. {
  394. :nova_private_key => {'type' => 'ssh-rsa',
  395. 'key' => 'keydata'}
  396. }
  397. end
  398. it 'should install ssh private key' do
  399. is_expected.to contain_file('/var/lib/nova/.ssh/id_rsa').with(
  400. :content => 'keydata'
  401. )
  402. end
  403. end
  404. context 'with ssh private key missing key type' do
  405. let :params do
  406. {
  407. :nova_private_key => {'key' => 'keydata'}
  408. }
  409. end
  410. it 'should raise an error' do
  411. expect {
  412. is_expected.to contain_file('/var/lib/nova/.ssh/id_rsa').with(
  413. :content => 'keydata'
  414. )
  415. }.to raise_error Puppet::Error, /You must provide both a key type and key data./
  416. end
  417. end
  418. context 'with ssh private key having incorrect key type' do
  419. let :params do
  420. {
  421. :nova_private_key => {'type' => 'invalid',
  422. 'key' => 'keydata'}
  423. }
  424. end
  425. it 'should raise an error' do
  426. expect {
  427. is_expected.to contain_file('/var/lib/nova/.ssh/id_rsa').with(
  428. :content => 'keydata'
  429. )
  430. }.to raise_error Puppet::Error, /Unable to determine name of private key file./
  431. end
  432. end
  433. context 'with ssh private key missing key data' do
  434. let :params do
  435. {
  436. :nova_private_key => {'type' => 'ssh-rsa'}
  437. }
  438. end
  439. it 'should raise an error' do
  440. expect {
  441. is_expected.to contain_file('/var/lib/nova/.ssh/id_rsa').with(
  442. :content => 'keydata'
  443. )
  444. }.to raise_error Puppet::Error, /You must provide both a key type and key data./
  445. end
  446. end
  447. context 'with SSL socket options set' do
  448. let :params do
  449. {
  450. :use_ssl => true,
  451. :enabled_ssl_apis => ['osapi_compute'],
  452. :cert_file => '/path/to/cert',
  453. :ca_file => '/path/to/ca',
  454. :key_file => '/path/to/key',
  455. }
  456. end
  457. it { is_expected.to contain_nova_config('DEFAULT/enabled_ssl_apis').with_value('osapi_compute') }
  458. it { is_expected.to contain_nova_config('ssl/ca_file').with_value('/path/to/ca') }
  459. it { is_expected.to contain_nova_config('ssl/cert_file').with_value('/path/to/cert') }
  460. it { is_expected.to contain_nova_config('ssl/key_file').with_value('/path/to/key') }
  461. it { is_expected.to contain_nova_config('wsgi/ssl_ca_file').with_value('/path/to/ca') }
  462. it { is_expected.to contain_nova_config('wsgi/ssl_cert_file').with_value('/path/to/cert') }
  463. it { is_expected.to contain_nova_config('wsgi/ssl_key_file').with_value('/path/to/key') }
  464. end
  465. context 'with SSL socket options set with wrong parameters' do
  466. let :params do
  467. {
  468. :use_ssl => true,
  469. :enabled_ssl_apis => ['osapi_compute'],
  470. :ca_file => '/path/to/ca',
  471. :key_file => '/path/to/key',
  472. }
  473. end
  474. it_raises 'a Puppet::Error', /The cert_file parameter is required when use_ssl is set to true/
  475. end
  476. context 'with SSL socket options set to false' do
  477. let :params do
  478. {
  479. :use_ssl => false,
  480. :enabled_ssl_apis => [],
  481. :cert_file => false,
  482. :ca_file => false,
  483. :key_file => false,
  484. }
  485. end
  486. it { is_expected.to contain_nova_config('DEFAULT/enabled_ssl_apis').with_ensure('absent') }
  487. it { is_expected.to contain_nova_config('ssl/ca_file').with_ensure('absent') }
  488. it { is_expected.to contain_nova_config('ssl/cert_file').with_ensure('absent') }
  489. it { is_expected.to contain_nova_config('ssl/key_file').with_ensure('absent') }
  490. end
  491. context 'with allocation ratios set' do
  492. let :params do
  493. {
  494. :cpu_allocation_ratio => 32.0,
  495. :ram_allocation_ratio => 2.0,
  496. :disk_allocation_ratio => 1.5,
  497. }
  498. end
  499. it { is_expected.to contain_nova_config('DEFAULT/cpu_allocation_ratio').with_value('32.0') }
  500. it { is_expected.to contain_nova_config('DEFAULT/ram_allocation_ratio').with_value('2.0') }
  501. it { is_expected.to contain_nova_config('DEFAULT/disk_allocation_ratio').with_value('1.5') }
  502. end
  503. end
  504. on_supported_os({
  505. :supported_os => OSDefaults.get_supported_os
  506. }).each do |os,facts|
  507. context "on #{os}" do
  508. let (:facts) do
  509. facts.merge!(OSDefaults.get_facts())
  510. end
  511. case facts[:osfamily]
  512. when 'Debian'
  513. let (:platform_params) do
  514. { :nova_common_package => 'nova-common',
  515. :lock_path => '/var/lock/nova' }
  516. end
  517. when 'RedHat'
  518. let (:platform_params) do
  519. { :nova_common_package => 'openstack-nova-common',
  520. :lock_path => '/var/lib/nova/tmp' }
  521. end
  522. end
  523. it_behaves_like 'nova'
  524. end
  525. end
  526. end