diff --git a/manifests/cell_v2/cell.pp b/manifests/cell_v2/cell.pp new file mode 100644 index 000000000..92c5a2609 --- /dev/null +++ b/manifests/cell_v2/cell.pp @@ -0,0 +1,51 @@ +# == Type: nova::cell_v2::cell +# +# Resource for managing cell_v2 cells. +# +# === Parameters +# +# [*extra_params*] +# (String) Extra parameters to pass to the nova-manage commands. +# Defaults to ''. +# +# [*transport_url*] +# (String) AMQP transport url for the cell. +# If not defined, the [DEFAULT]/transport_url is used from the nova +# configuration file. +# Defaults to undef. +# +# [*database_connection*] +# (String) Database connection url for the cell. +# If not defined, the [DEFAULT]/database_connection is used from the nova +# configuration file. +# Defaults to undef. +# +define nova::cell_v2::cell ( + $extra_params = '', + $transport_url = undef, + $database_connection = undef +) { + + include ::nova::deps + + if $transport_url { + $transport_url_real = "--transport-url=${transport_url}" + } else { + $transport_url_real = '' + } + + if $database_connection { + $database_connection_real = "--database_connection=${database_connection}" + } else { + $database_connection_real = '' + } + + exec { "nova-cell_v2-cell-${title}": + path => [ '/bin', '/usr/bin' ], + command => "nova-manage ${extra_params} cell_v2 create_cell --name=${title} ${transport_url_real} ${database_connection_real}", + unless => "nova-manage ${extra_params} cell_v2 list_cells | grep -q ${title}", + logoutput => on_failure, + subscribe => Anchor['nova::cell_v2::begin'], + notify => Anchor['nova::cell_v2::end'], + } +} diff --git a/manifests/cell_v2/discover_hosts.pp b/manifests/cell_v2/discover_hosts.pp new file mode 100644 index 000000000..82b00f53c --- /dev/null +++ b/manifests/cell_v2/discover_hosts.pp @@ -0,0 +1,23 @@ +# == Class: nova::cell_v2::discover_hosts +# +# Class to run the discover_hosts action for cell v2 +# +# === Parameters +# +# [*extra_params*] +# (String) Extra parameters to pass to the nova-manage commands. +# Defaults to ''. +# +class nova::cell_v2::discover_hosts ( + $extra_params = '', +) { + + include ::nova::deps + + exec { 'nova-cell_v2-discover_hosts': + path => ['/bin', '/usr/bin'], + command => "nova-manage ${extra_params} cell_v2 discover_hosts", + refreshonly => true, + subscribe => Anchor['nova::service::end'] + } +} diff --git a/manifests/cell_v2/map_cell0.pp b/manifests/cell_v2/map_cell0.pp new file mode 100644 index 000000000..65f105441 --- /dev/null +++ b/manifests/cell_v2/map_cell0.pp @@ -0,0 +1,29 @@ +# == Class: nova::cell_v2::map_cell0 +# +# Class to execute nova cell_v2 map_cell0 +# +# === Parameters +# +# [*extra_params*] +# (optional) String of extra command line parameters to pass +# to the nova-manage command. These will be inserted in +# the command line between 'nova-manage' and 'cell_v2'. +# Defaults to '' +# +# +class nova::cell_v2::map_cell0 ( + $extra_params = '', +) { + + include ::nova::deps + + exec { 'nova-cell_v2-map_cell0': + path => ['/bin', '/usr/bin'], + command => "nova-manage ${extra_params} cell_v2 map_cell0", + refreshonly => true, + returns => [0,1], # TODO(owalsh): Remove when this lands https://review.openstack.org/#/c/420132/ in packaging + logoutput => on_failure, + subscribe => Anchor['nova::cell_v2::begin'], + notify => Anchor['nova::cell_v2::end'], + } +} diff --git a/manifests/cell_v2/simple_setup.pp b/manifests/cell_v2/simple_setup.pp new file mode 100644 index 000000000..93e574ba0 --- /dev/null +++ b/manifests/cell_v2/simple_setup.pp @@ -0,0 +1,52 @@ +# == Class: nova::cell_v2::simple_setup +# +# Class to execute minimal nova cell_v2 setup. This is a manual implementation +# of the cell_v2 simple_cell_setup in puppet. +# +# === Parameters +# +# [*extra_params*] +# (optional) String of extra command line parameters to pass +# to the nova-manage command. These will be inserted in +# the command line between 'nova-manage' and 'cell_v2'. +# Defaults to '' +# +# [*transport_url*] +# (optional) This is the transport url to use for the cell_v2 commands. +# By default the command should look for the DEFAULT/transport_url from +# the nova configuration. If not available, you need to provide the +# transport url via the parameters. Prior to Ocata, the transport-url +# was a required parameter. +# Defaults to undef. +# +# [*database_connection*] +# (optional) This is the database url to use for the cell_v2 create command +# for the initial cell1 cell. +# By default the command should look for the DEFAULT/database_connection from +# the nova configuration. If not available, you need to provide the database +# url via the parameters. +# Defaults to undef. +# +class nova::cell_v2::simple_setup ( + $extra_params = '', + $transport_url = undef, + $database_connection = undef, +) { + + include ::nova::deps + + include ::nova::cell_v2::map_cell0 + + nova::cell_v2::cell { 'default': + extra_params => $extra_params, + transport_url => $transport_url, + database_connection => $database_connection + } + + include ::nova::cell_v2::discover_hosts + + Class['nova::cell_v2::map_cell0'] -> + Nova::Cell_v2::Cell <| |> ~> + Class['nova::cell_v2::discover_hosts'] + +} diff --git a/manifests/db/mysql.pp b/manifests/db/mysql.pp index ee4652c3d..3f09ea942 100644 --- a/manifests/db/mysql.pp +++ b/manifests/db/mysql.pp @@ -31,6 +31,12 @@ # (optional) Additional hosts that are allowed to access this DB # Defaults to undef # +# [*setup_cell0*] +# (optional) Setup a cell0 for the cell_v2 functionality. This option will +# be set to true by default in Ocata when the cell v2 setup is mandatory. +# Defaults to false +# + class nova::db::mysql( $password, $dbname = 'nova', @@ -39,10 +45,13 @@ class nova::db::mysql( $charset = 'utf8', $collate = 'utf8_general_ci', $allowed_hosts = undef, + $setup_cell0 = true, ) { include ::nova::deps + $setup_cell0_real = pick($::nova::db::mysql_api::setup_cell0, $setup_cell0) + ::openstacklib::db::mysql { 'nova': user => $user, password_hash => mysql_password($password), @@ -53,6 +62,20 @@ class nova::db::mysql( allowed_hosts => $allowed_hosts, } + if $setup_cell0_real { + # need for cell_v2 + ::openstacklib::db::mysql { 'nova_cell0': + user => $user, + password_hash => mysql_password($password), + dbname => "${dbname}_cell0", + host => $host, + charset => $charset, + collate => $collate, + allowed_hosts => $allowed_hosts, + create_user => false, + } + } + Anchor['nova::db::begin'] ~> Class['nova::db::mysql'] ~> Anchor['nova::db::end'] diff --git a/manifests/db/mysql_api.pp b/manifests/db/mysql_api.pp index a9336f5ab..a8a5662eb 100644 --- a/manifests/db/mysql_api.pp +++ b/manifests/db/mysql_api.pp @@ -31,10 +31,14 @@ # (optional) Additional hosts that are allowed to access this DB # Defaults to undef # +# === DEPRECATED +# +# TODO(aschultz): we can just remove this after tripleo gets fixed to use +# the new param # [*setup_cell0*] # (optional) Setup a cell0 for the cell_v2 functionality. This option will # be set to true by default in Ocata when the cell v2 setup is mandatory. -# Defaults to false +# Defaults to undef # class nova::db::mysql_api( $password, @@ -44,9 +48,14 @@ class nova::db::mysql_api( $charset = 'utf8', $collate = 'utf8_general_ci', $allowed_hosts = undef, - $setup_cell0 = false, + # DEPREACTED + $setup_cell0 = undef ) { + if $setup_cell0 { + warning('nova::db::mysql_api::setup_cell0 is deprecated, use nova::db::mysql::setup_cell0 instead. This will be removed in Pike') + } + include ::nova::deps ::openstacklib::db::mysql { 'nova_api': @@ -59,20 +68,6 @@ class nova::db::mysql_api( allowed_hosts => $allowed_hosts, } - if $setup_cell0 { - # need for cell_v2 - ::openstacklib::db::mysql { 'nova_api_cell0': - user => $user, - password_hash => mysql_password($password), - dbname => "${dbname}_cell0", - host => $host, - charset => $charset, - collate => $collate, - allowed_hosts => $allowed_hosts, - create_user => false, - } - } - Anchor['nova::db::begin'] ~> Class['nova::db::mysql_api'] ~> Anchor['nova::db::end'] diff --git a/manifests/db/sync.pp b/manifests/db/sync.pp index 7b96090e9..668520f96 100644 --- a/manifests/db/sync.pp +++ b/manifests/db/sync.pp @@ -31,6 +31,7 @@ class nova::db::sync( subscribe => [ Anchor['nova::install::end'], Anchor['nova::config::end'], + Anchor['nova::db::end'], Anchor['nova::dbsync::begin'] ], notify => Anchor['nova::dbsync::end'], diff --git a/manifests/db/sync_api.pp b/manifests/db/sync_api.pp index 671bf6a2d..5f09582be 100644 --- a/manifests/db/sync_api.pp +++ b/manifests/db/sync_api.pp @@ -10,9 +10,11 @@ # Defaults to undef # # [*cellv2_setup*] -# (optional) This flag toggles if we run the cell_v2 simple_cell_setup action -# with nova-manage. This flag will be set to true in Ocata when the cell v2 -# setup is mandatory. +# (optional) This flag toggles if we preform a minimal cell_v2 setup of a +# a single cell. +# NOTE: 'nova-manage cell_v2 discover_hosts' must be +# run after any nova-compute hosts have been deployed. +# This flag will be set to true in Ocata when the cell v2 setup is mandatory. # Defaults to false. # # [*db_sync_timeout*] @@ -21,8 +23,8 @@ # class nova::db::sync_api( $extra_params = undef, - $db_sync_timeout = 300, $cellv2_setup = false, + $db_sync_timeout = 300, ) { include ::nova::deps @@ -38,12 +40,13 @@ class nova::db::sync_api( subscribe => [ Anchor['nova::install::end'], Anchor['nova::config::end'], + Anchor['nova::db::end'], Anchor['nova::dbsync_api::begin'] ], notify => Anchor['nova::dbsync_api::end'], } if $cellv2_setup { - include ::nova::db::sync_cell_v2 + include ::nova::cell_v2::simple_setup } } diff --git a/manifests/db/sync_cell_v2.pp b/manifests/db/sync_cell_v2.pp deleted file mode 100644 index 7d86ec46e..000000000 --- a/manifests/db/sync_cell_v2.pp +++ /dev/null @@ -1,46 +0,0 @@ -# -# Class to execute nova cell_v2 setup -# -# ==Parameters -# -# [*extra_params*] -# (optional) String of extra command line parameters to append -# to the nova-manage db sync command. These will be inserted in -# the command line between 'nova-manage' and 'db sync'. -# Defaults to '' -# -# [*transport_url*] -# (optional) This is the transport url to use for the simple cell setup. -# By default the command should look for the DEFAULT/transport_url from -# the nova configuration. If not available, you need to provide the -# transport url via the parameters. Prior to Ocata, the transport-url -# was a required parameter. -# Defaults to undef. -# -class nova::db::sync_cell_v2 ( - $extra_params = '', - $transport_url = undef, -) { - - include ::nova::deps - - if $transport_url { - $transport_url_real = "--transport-url=${transport_url}" - } else { - $transport_url_real = '' - } - exec { 'nova-cell_v2-simple-cell-setup': - command => "/usr/bin/nova-manage ${extra_params} cell_v2 simple_cell_setup ${transport_url_real}", - refreshonly => true, - try_sleep => 5, - tries => 10, - logoutput => on_failure, - subscribe => [ - Anchor['nova::install::end'], - Anchor['nova::config::end'], - Anchor['nova::dbsync_api::end'], - Anchor['nova::cell_v2::begin'] - ], - notify => Anchor['nova::cell_v2::end'], - } -} diff --git a/manifests/deps.pp b/manifests/deps.pp index cf995dc78..6d57b0d54 100644 --- a/manifests/deps.pp +++ b/manifests/deps.pp @@ -18,12 +18,6 @@ class nova::deps { ~> anchor { 'nova::config::end': } -> anchor { 'nova::db::begin': } -> anchor { 'nova::db::end': } - ~> anchor { 'nova::dbsync::begin': } - -> anchor { 'nova::dbsync::end': } - ~> anchor { 'nova::dbsync_api::begin': } - -> anchor { 'nova::dbsync_api::end': } - ~> anchor { 'nova::cell_v2::begin': } - -> anchor { 'nova::cell_v2::end': } ~> anchor { 'nova::service::begin': } ~> Service<| tag == 'nova-service' |> ~> anchor { 'nova::service::end': } @@ -44,16 +38,22 @@ class nova::deps { -> Package<| tag == 'nova-support-package'|> -> Anchor['nova::install::end'] + # TODO(aschultz): check if we can remove these as I think they are no longer + # valid since nova_cells is replaced by cell_v2 and the others are part of + # nova network # The following resourcs are managed by calling 'nova manage' and so the # database must be provisioned before they can be applied. - Anchor['nova::dbsync::end'] - -> Anchor['nova::dbsync_api::end'] + Anchor['nova::dbsync_api::end'] -> Nova_cells<||> Anchor['nova::dbsync::end'] - -> Anchor['nova::dbsync_api::end'] + -> Nova_cells<||> + Anchor['nova::dbsync_api::end'] -> Nova_floating<||> Anchor['nova::dbsync::end'] - -> Anchor['nova::dbsync_api::end'] + -> Nova_floating<||> + Anchor['nova::dbsync_api::end'] + -> Nova_network<||> + Anchor['nova::dbsync::end'] -> Nova_network<||> # all db settings should be applied and all packages should be installed @@ -71,4 +71,40 @@ class nova::deps { require => Anchor['nova::install::end'], before => Anchor['nova::config::begin'], } + + ############################################################################# + # NOTE(aschultz): these are defined here because this syntax allows us + # to override the subscribe/notify order using the spaceship operator. + # The ->/~> does not seem to be able to be updated after the fact. Since + # we have to flip cell v2 ordering for the N->O upgrade process, we need + # to not use the chaining arrows. ugh. + ############################################################################# + # Wedge this in after the db creation and before the services + anchor { 'nova::dbsync_api::begin': + subscribe => Anchor['nova::db::end'] + } -> + anchor { 'nova::dbsync_api::end': + notify => Anchor['nova::service::begin'], + } + + # Wedge this after db creation and api sync but before the services + anchor { 'nova::dbsync::begin': + subscribe => [ + Anchor['nova::db::end'], + Anchor['nova::dbsync_api::end'] + ] + } -> + anchor { 'nova::dbsync::end': + notify => Anchor['nova::service::begin'] + } + + # Wedge cell_v2 put this between api sync and db sync by default but can + # be overridden using the spaceship operator to move it around when needed + anchor { 'nova::cell_v2::begin': + subscribe => Anchor['nova::dbsync_api::end'] + } -> + Nova::Cell_v2::Cell<||> ~> + anchor { 'nova::cell_v2::end': + notify => Anchor['nova::dbsync::begin'] + } } diff --git a/releasenotes/notes/cell_v2-simple-cell-setup-025a90918590c872.yaml b/releasenotes/notes/cell_v2-simple-cell-setup-025a90918590c872.yaml index d6464df47..52d9c9624 100644 --- a/releasenotes/notes/cell_v2-simple-cell-setup-025a90918590c872.yaml +++ b/releasenotes/notes/cell_v2-simple-cell-setup-025a90918590c872.yaml @@ -1,5 +1,12 @@ --- features: - - Adds cell_v2 simple_cell_setup as part of the nova-api database setup. + - | + Adds the ability to perform a simple cell v2 setup using map_cell0, + create_cell and discover_hosts via nova::cell_v2::simple_setup. upgrade: - - The cell_v2 setup will become mandatory in Ocata. + - | + Cell v2 must be setup prior to upgrading to Ocata or the db api sync will + fail. If upgrading from from an evironment with existing compute nodes and + planning to use puppet to manage your hosts, DO NOT use the + 'nova-manage cell_v2 cell_simple_setup' and nova::cell_v2::simple_setup as + they will clash on the default cell management. diff --git a/spec/acceptance/nova_wsgi_apache_spec.rb b/spec/acceptance/nova_wsgi_apache_spec.rb index c2aa5f08d..581195048 100644 --- a/spec/acceptance/nova_wsgi_apache_spec.rb +++ b/spec/acceptance/nova_wsgi_apache_spec.rb @@ -55,11 +55,12 @@ describe 'basic nova' do class { '::nova::keystone::authtoken': password => 'a_big_secret', } - # TODO(aschultz): remove this once https://review.openstack.org/#/c/409970/ lands - # TODO(aschultz): don't do this until resolution for LP#1656276 - #class { '::nova::db::sync_cell_v2': - # transport_url => 'rabbit://nova:an_even_bigger_secret@127.0.0.1:5672/', - #} + # TODO(aschultz): ubuntu's version of these commands are too old. Only + # run the cell_v2 on the redhat test until after Ocata-m3 is available + # from UCA + if $::osfamily == 'RedHat' { + include '::nova::cell_v2::simple_setup' + } class { '::nova::api': service_name => 'httpd', } diff --git a/spec/classes/nova_cell_v2_discover_hosts_spec.rb b/spec/classes/nova_cell_v2_discover_hosts_spec.rb new file mode 100644 index 000000000..62d092c30 --- /dev/null +++ b/spec/classes/nova_cell_v2_discover_hosts_spec.rb @@ -0,0 +1,49 @@ +require 'spec_helper' + +describe 'nova::cell_v2::discover_hosts' do + + shared_examples_for 'nova::cell_v2::discover_hosts' do + context 'with defaults' do + + it { + is_expected.to contain_exec('nova-cell_v2-discover_hosts').with( + :path => ['/bin', '/usr/bin'], + :command => 'nova-manage cell_v2 discover_hosts', + :refreshonly => true, + :subscribe => 'Anchor[nova::service::end]' + ) + } + end + + context "overriding extra_params" do + let :params do + { + :extra_params => '--config-file /etc/nova/nova.conf' + } + end + + it { + is_expected.to contain_exec('nova-cell_v2-discover_hosts').with( + :path => ['/bin', '/usr/bin'], + :command => 'nova-manage --config-file /etc/nova/nova.conf cell_v2 discover_hosts', + :refreshonly => true, + :subscribe => 'Anchor[nova::service::end]' + ) + } + end + end + + + on_supported_os({ + :supported_os => OSDefaults.get_supported_os + }).each do |os,facts| + context "on #{os}" do + let (:facts) do + facts.merge(OSDefaults.get_facts()) + end + + it_configures 'nova::cell_v2::discover_hosts' + end + end + +end diff --git a/spec/classes/nova_cell_v2_map_cell0_spec.rb b/spec/classes/nova_cell_v2_map_cell0_spec.rb new file mode 100644 index 000000000..3dfeb0ad3 --- /dev/null +++ b/spec/classes/nova_cell_v2_map_cell0_spec.rb @@ -0,0 +1,53 @@ +require 'spec_helper' + +describe 'nova::cell_v2::map_cell0' do + + shared_examples_for 'nova::cell_v2::map_cell0' do + context 'with defaults' do + + it { + is_expected.to contain_exec('nova-cell_v2-map_cell0').with( + :path => ['/bin', '/usr/bin'], + :command => 'nova-manage cell_v2 map_cell0', + :refreshonly => 'true', + :logoutput => 'on_failure', + :subscribe => 'Anchor[nova::cell_v2::begin]', + :notify => 'Anchor[nova::cell_v2::end]', + ) + } + end + + context "overriding extra_params" do + let :params do + { + :extra_params => '--config-file /etc/nova/nova.conf', + } + end + + it { + is_expected.to contain_exec('nova-cell_v2-map_cell0').with( + :path => ['/bin', '/usr/bin'], + :command => 'nova-manage --config-file /etc/nova/nova.conf cell_v2 map_cell0', + :refreshonly => 'true', + :logoutput => 'on_failure', + :subscribe => 'Anchor[nova::cell_v2::begin]', + :notify => 'Anchor[nova::cell_v2::end]', + ) + } + end + end + + + on_supported_os({ + :supported_os => OSDefaults.get_supported_os + }).each do |os,facts| + context "on #{os}" do + let (:facts) do + facts.merge(OSDefaults.get_facts()) + end + + it_configures 'nova::cell_v2::map_cell0' + end + end + +end diff --git a/spec/classes/nova_cell_v2_simple_setup_spec.rb b/spec/classes/nova_cell_v2_simple_setup_spec.rb new file mode 100644 index 000000000..502785333 --- /dev/null +++ b/spec/classes/nova_cell_v2_simple_setup_spec.rb @@ -0,0 +1,53 @@ +require 'spec_helper' + +describe 'nova::cell_v2::simple_setup' do + + shared_examples_for 'nova::cell_v2::simple_setup' do + context 'with defaults' do + + it { + is_expected.to contain_class('nova::cell_v2::map_cell0') + is_expected.to contain_nova__cell_v2__cell('default').with( + :extra_params => '', + :transport_url => nil, + :database_conneciton => nil + ) + is_expected.to contain_class('nova::cell_v2::discover_hosts') + } + end + + context "overriding extra_params" do + let :params do + { + :extra_params => '--config-file /etc/nova/nova.conf', + :transport_url => 'rabbit://user:pass@host:1234/virt', + :database_connection => 'mysql://nova:pass@host:1234/nova' + } + end + + it { + is_expected.to contain_class('nova::cell_v2::map_cell0') + is_expected.to contain_nova__cell_v2__cell('default').with( + :extra_params => params[:extra_params], + :transport_url => params[:transport_url], + :database_connection => params[:database_connection] + ) + is_expected.to contain_class('nova::cell_v2::discover_hosts') + } + end + end + + + on_supported_os({ + :supported_os => OSDefaults.get_supported_os + }).each do |os,facts| + context "on #{os}" do + let (:facts) do + facts.merge(OSDefaults.get_facts()) + end + + it_configures 'nova::cell_v2::simple_setup' + end + end + +end diff --git a/spec/classes/nova_db_mysql_api_spec.rb b/spec/classes/nova_db_mysql_api_spec.rb index 68e7ba341..c2f2e41c5 100644 --- a/spec/classes/nova_db_mysql_api_spec.rb +++ b/spec/classes/nova_db_mysql_api_spec.rb @@ -22,8 +22,6 @@ describe 'nova::db::mysql_api' do :charset => 'utf8', :collate => 'utf8_general_ci', )} - - it { is_expected.to_not contain_openstacklib__db__mysql('nova_api_cell0') } end context 'overriding allowed_hosts param to array' do @@ -70,20 +68,6 @@ describe 'nova::db::mysql_api' do )} end - context 'when enabling cell0 setup' do - let :params do - { :setup_cell0 => true }.merge(required_params) - end - - it { is_expected.to contain_openstacklib__db__mysql('nova_api_cell0').with( - :user => 'nova_api', - :password_hash => '*AA1420F182E88B9E5F874F6FBE7459291E8F4601', - :charset => 'utf8', - :collate => 'utf8_general_ci', - :create_user => false, - )} - end - end on_supported_os({ diff --git a/spec/classes/nova_db_mysql_spec.rb b/spec/classes/nova_db_mysql_spec.rb index cf76c6d4a..f0e264335 100644 --- a/spec/classes/nova_db_mysql_spec.rb +++ b/spec/classes/nova_db_mysql_spec.rb @@ -22,6 +22,14 @@ describe 'nova::db::mysql' do :charset => 'utf8', :collate => 'utf8_general_ci', )} + + it { is_expected.to contain_openstacklib__db__mysql('nova_cell0').with( + :user => 'nova', + :password_hash => '*AA1420F182E88B9E5F874F6FBE7459291E8F4601', + :charset => 'utf8', + :collate => 'utf8_general_ci', + :create_user => false, + )} end context 'overriding allowed_hosts param to array' do @@ -68,6 +76,13 @@ describe 'nova::db::mysql' do )} end + context 'when disabling cell0 setup' do + let :params do + { :setup_cell0 => false}.merge(required_params) + end + + it { is_expected.to_not contain_openstacklib__db__mysql('nova_cell0') } + end end on_supported_os({ diff --git a/spec/classes/nova_db_sync_api_spec.rb b/spec/classes/nova_db_sync_api_spec.rb index 6e4c43ac4..e489e646b 100644 --- a/spec/classes/nova_db_sync_api_spec.rb +++ b/spec/classes/nova_db_sync_api_spec.rb @@ -12,18 +12,19 @@ describe 'nova::db::sync_api' do :logoutput => 'on_failure', :subscribe => ['Anchor[nova::install::end]', 'Anchor[nova::config::end]', + 'Anchor[nova::db::end]', 'Anchor[nova::dbsync_api::begin]'], :notify => 'Anchor[nova::dbsync_api::end]', ) } - it { is_expected.to_not contain_class('nova::db::sync_cell_v2') } + it { is_expected.to_not contain_class('nova::cell_v2::simple_setup') } end context "overriding extra_params" do let :params do { :extra_params => '--config-file /etc/nova/nova.conf', - :cellv2_setup => true + :cellv2_setup => false } end @@ -35,11 +36,12 @@ describe 'nova::db::sync_api' do :logoutput => 'on_failure', :subscribe => ['Anchor[nova::install::end]', 'Anchor[nova::config::end]', + 'Anchor[nova::db::end]', 'Anchor[nova::dbsync_api::begin]'], :notify => 'Anchor[nova::dbsync_api::end]', ) } - it { is_expected.to contain_class('nova::db::sync_cell_v2') } + it { is_expected.to_not contain_class('nova::cell_v2::simple_setup') } end context "overriding db_sync_timeout" do @@ -57,6 +59,7 @@ describe 'nova::db::sync_api' do :logoutput => 'on_failure', :subscribe => ['Anchor[nova::install::end]', 'Anchor[nova::config::end]', + 'Anchor[nova::db::end]', 'Anchor[nova::dbsync_api::begin]'], :notify => 'Anchor[nova::dbsync_api::end]', ) diff --git a/spec/classes/nova_db_sync_cell_v2_spec.rb b/spec/classes/nova_db_sync_cell_v2_spec.rb deleted file mode 100644 index a0bd30ab0..000000000 --- a/spec/classes/nova_db_sync_cell_v2_spec.rb +++ /dev/null @@ -1,62 +0,0 @@ -require 'spec_helper' - -describe 'nova::db::sync_cell_v2' do - - shared_examples_for 'nova-db-sync-cell_v2' do - context 'with defaults' do - - it { - is_expected.to contain_exec('nova-cell_v2-simple-cell-setup').with( - :command => '/usr/bin/nova-manage cell_v2 simple_cell_setup ', - :refreshonly => 'true', - :try_sleep => 5, - :tries => 10, - :logoutput => 'on_failure', - :subscribe => ['Anchor[nova::install::end]', - 'Anchor[nova::config::end]', - 'Anchor[nova::dbsync_api::end]', - 'Anchor[nova::cell_v2::begin]'], - :notify => 'Anchor[nova::cell_v2::end]', - ) - } - end - - context "overriding extra_params" do - let :params do - { - :extra_params => '--config-file /etc/nova/nova.conf', - :transport_url => 'rabbit://user:pass@host:1234/virt' - } - end - - it { - is_expected.to contain_exec('nova-cell_v2-simple-cell-setup').with( - :command => '/usr/bin/nova-manage --config-file /etc/nova/nova.conf cell_v2 simple_cell_setup --transport-url=rabbit://user:pass@host:1234/virt', - :refreshonly => 'true', - :try_sleep => 5, - :tries => 10, - :logoutput => 'on_failure', - :subscribe => ['Anchor[nova::install::end]', - 'Anchor[nova::config::end]', - 'Anchor[nova::dbsync_api::end]', - 'Anchor[nova::cell_v2::begin]'], - :notify => 'Anchor[nova::cell_v2::end]', - ) - } - end - end - - - on_supported_os({ - :supported_os => OSDefaults.get_supported_os - }).each do |os,facts| - context "on #{os}" do - let (:facts) do - facts.merge(OSDefaults.get_facts()) - end - - it_configures 'nova-db-sync-cell_v2' - end - end - -end diff --git a/spec/classes/nova_db_sync_spec.rb b/spec/classes/nova_db_sync_spec.rb index 43cf16472..f070b8233 100644 --- a/spec/classes/nova_db_sync_spec.rb +++ b/spec/classes/nova_db_sync_spec.rb @@ -14,6 +14,7 @@ describe 'nova::db::sync' do :logoutput => 'on_failure', :subscribe => ['Anchor[nova::install::end]', 'Anchor[nova::config::end]', + 'Anchor[nova::db::end]', 'Anchor[nova::dbsync::begin]'], :notify => 'Anchor[nova::dbsync::end]', ) @@ -36,6 +37,7 @@ describe 'nova::db::sync' do :logoutput => 'on_failure', :subscribe => ['Anchor[nova::install::end]', 'Anchor[nova::config::end]', + 'Anchor[nova::db::end]', 'Anchor[nova::dbsync::begin]'], :notify => 'Anchor[nova::dbsync::end]', ) @@ -59,6 +61,7 @@ describe 'nova::db::sync' do :logoutput => 'on_failure', :subscribe => ['Anchor[nova::install::end]', 'Anchor[nova::config::end]', + 'Anchor[nova::db::end]', 'Anchor[nova::dbsync::begin]'], :notify => 'Anchor[nova::dbsync::end]', ) diff --git a/spec/defines/nova_cell_v2_cell_spec.rb b/spec/defines/nova_cell_v2_cell_spec.rb new file mode 100644 index 000000000..086571345 --- /dev/null +++ b/spec/defines/nova_cell_v2_cell_spec.rb @@ -0,0 +1,55 @@ +require 'spec_helper' + +describe 'nova::cell_v2::cell' do + + let (:title) { 'foo' } + + shared_examples_for 'nova::cell_v2::cell' do + context 'with defaults' do + + it { + is_expected.to contain_exec("nova-cell_v2-cell-#{title}").with( + :path => ['/bin', '/usr/bin'], + :command => "nova-manage cell_v2 create_cell --name=#{title} ", + :logoutput => 'on_failure', + :subscribe => 'Anchor[nova::cell_v2::begin]', + :notify => 'Anchor[nova::cell_v2::end]', + ) + } + end + + context "overriding extra_params" do + let :params do + { + :extra_params => '--config-file /etc/nova/nova.conf', + :transport_url => 'rabbit://user:pass@host:1234/vhost', + :database_connection => 'mysql://user:pass@host:3306/nova' + } + end + + it { + is_expected.to contain_exec("nova-cell_v2-cell-#{title}").with( + :path => ['/bin', '/usr/bin'], + :command => "nova-manage --config-file /etc/nova/nova.conf cell_v2 create_cell --name=#{title} --transport-url=#{params[:transport_url]} --database_connection=#{params[:database_connection]}", + :logoutput => 'on_failure', + :subscribe => 'Anchor[nova::cell_v2::begin]', + :notify => 'Anchor[nova::cell_v2::end]', + ) + } + end + end + + + on_supported_os({ + :supported_os => OSDefaults.get_supported_os + }).each do |os,facts| + context "on #{os}" do + let (:facts) do + facts.merge(OSDefaults.get_facts()) + end + + it_configures 'nova::cell_v2::cell' + end + end + +end