diff --git a/manifests/db/online_data_migrations.pp b/manifests/db/online_data_migrations.pp new file mode 100644 index 00000000..cab14b37 --- /dev/null +++ b/manifests/db/online_data_migrations.pp @@ -0,0 +1,34 @@ +# +# Class to execute ironic online_data_migrations +# +# ==Parameters +# +# [*extra_params*] +# (optional) String of extra command line parameters to append +# to the ironic-dbsync command. +# Defaults to undef +# +class ironic::db::online_data_migrations( + $extra_params = undef, +) { + + include ::ironic::deps + include ::ironic::params + + exec { 'ironic-db-online-data-migrations': + command => "${::ironic::params::dbsync_command} ${extra_params} online_data_migrations", + path => '/usr/bin', + user => 'ironic', + refreshonly => true, + try_sleep => 5, + tries => 10, + logoutput => on_failure, + subscribe => [ + Anchor['ironic::install::end'], + Anchor['ironic::config::end'], + Anchor['ironic::dbsync::end'], + Anchor['ironic::db_online_data_migrations::begin'] + ], + notify => Anchor['ironic::db_online_data_migrations::end'], + } +} diff --git a/manifests/deps.pp b/manifests/deps.pp index fe5a67b1..4c421828 100644 --- a/manifests/deps.pp +++ b/manifests/deps.pp @@ -20,6 +20,8 @@ class ironic::deps { -> anchor { 'ironic::db::end': } ~> anchor { 'ironic::dbsync::begin': } -> anchor { 'ironic::dbsync::end': } + ~> anchor { 'ironic::db_online_data_migrations::begin': } + -> anchor { 'ironic::db_online_data_migrations::end': } ~> anchor { 'ironic::service::begin': } ~> Service<| tag == 'ironic-service' |> ~> anchor { 'ironic::service::end': } diff --git a/manifests/init.pp b/manifests/init.pp index 8b1c2be4..d6af324d 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -231,6 +231,10 @@ # Enable dbsync # Defaults to true # +# [*db_online_data_migrations*] +# (optional) Run online_data_migrations - required on upgrade. +# Defaults to false. +# # [*purge_config*] # (optional) Whether to set only the specified config options # in the ironic config. @@ -328,6 +332,7 @@ class ironic ( $database_max_pool_size = undef, $database_max_overflow = undef, $sync_db = true, + $db_online_data_migrations = false, $purge_config = false, # DEPRECATED PARAMETERS $rabbit_host = $::os_service_default, @@ -393,6 +398,10 @@ ironic::glance::api_insecure and ironic::glance::num_retries accordingly") include ::ironic::db::sync } + if $db_online_data_migrations { + include ::ironic::db::online_data_migrations + } + oslo::messaging::default {'ironic_config': transport_url => $default_transport_url, rpc_response_timeout => $rpc_response_timeout, diff --git a/releasenotes/notes/online-data-migrations-3bcad0ba520dc739.yaml b/releasenotes/notes/online-data-migrations-3bcad0ba520dc739.yaml new file mode 100644 index 00000000..8f9bad46 --- /dev/null +++ b/releasenotes/notes/online-data-migrations-3bcad0ba520dc739.yaml @@ -0,0 +1,5 @@ +--- +features: + - Added a class to run the db online_data_migrations. This needs to happen + after a dbsync when you when you upgrade to Pike. More info at + http://specs.openstack.org/openstack/ironic-specs/specs/approved/support-rolling-upgrade.html diff --git a/spec/classes/ironic_db_online_data_migrations_spec.rb b/spec/classes/ironic_db_online_data_migrations_spec.rb new file mode 100644 index 00000000..f01b7a06 --- /dev/null +++ b/spec/classes/ironic_db_online_data_migrations_spec.rb @@ -0,0 +1,64 @@ +require 'spec_helper' + +describe 'ironic::db::online_data_migrations' do + + shared_examples_for 'ironic-db-online-data-migrations' do + + it 'runs ironic-db-sync' do + is_expected.to contain_exec('ironic-db-online-data-migrations').with( + :command => 'ironic-dbsync --config-file /etc/ironic/ironic.conf online_data_migrations', + :path => '/usr/bin', + :user => 'ironic', + :refreshonly => 'true', + :try_sleep => 5, + :tries => 10, + :logoutput => 'on_failure', + :subscribe => ['Anchor[ironic::install::end]', + 'Anchor[ironic::config::end]', + 'Anchor[ironic::dbsync::end]', + 'Anchor[ironic::db_online_data_migrations::begin]'], + :notify => 'Anchor[ironic::db_online_data_migrations::end]', + ) + end + + describe "overriding extra_params" do + let :params do + { + :extra_params => '--config-file /etc/ironic/ironic_01.conf', + } + end + + it { + is_expected.to contain_exec('ironic-db-online-data-migrations').with( + :command => 'ironic-dbsync --config-file /etc/ironic/ironic.conf --config-file /etc/ironic/ironic_01.conf online_data_migrations', + :path => '/usr/bin', + :user => 'ironic', + :refreshonly => 'true', + :try_sleep => 5, + :tries => 10, + :logoutput => 'on_failure', + :subscribe => ['Anchor[ironic::install::end]', + 'Anchor[ironic::config::end]', + 'Anchor[ironic::dbsync::end]', + 'Anchor[ironic::db_online_data_migrations::begin]'], + :notify => 'Anchor[ironic::db_online_data_migrations::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 'ironic-db-online-data-migrations' + end + end + +end