From 11e2e6a7c751dd703b08d67951e188d64834e220 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Mon, 28 Nov 2022 16:07:08 +0900 Subject: [PATCH] Support manila-data service Manila provides the separate manila-data service to process host-assisted share migration. This change introduces support for the service. Change-Id: I4ed63ae3992735352fd0f5a317e998074e127127 --- manifests/data.pp | 67 +++++++++++++ manifests/params.pp | 4 + .../notes/manila-data-61845c37605e9afe.yaml | 5 + spec/classes/manila_data_spec.rb | 99 +++++++++++++++++++ 4 files changed, 175 insertions(+) create mode 100644 manifests/data.pp create mode 100644 releasenotes/notes/manila-data-61845c37605e9afe.yaml create mode 100644 spec/classes/manila_data_spec.rb diff --git a/manifests/data.pp b/manifests/data.pp new file mode 100644 index 00000000..7342b307 --- /dev/null +++ b/manifests/data.pp @@ -0,0 +1,67 @@ +# == Class: manila::data +# +# Install and manage Manila data. +# +# === Parameters +# +# [*package_ensure*] +# (Optional) The state of the data package +# Defaults to 'present'. +# +# [*enabled*] +# (Optional) Whether to run the data service +# Defaults to true. +# +# [*manage_service*] +# (Optional) Whether to start/stop the service +# Defaults to true. +# +# [*mount_tmp_location*] +# (Optional) Temporary path to create and mount shares during migration. +# Defaults to $::os_service_default. +# +# [*check_hash*] +# (Optional) Chooses whether hash of each file should be checked on data +# copying. +# Defaults to $::os_service_default. +# +class manila::data ( + $package_ensure = 'present', + $enabled = true, + $manage_service = true, + $mount_tmp_location = $::os_service_default, + $check_hash = $::os_service_default, +) { + + include manila::deps + include manila::params + + if $::manila::params::data_package { + package { 'manila-data': + ensure => $package_ensure, + name => $::manila::params::data_package, + tag => ['openstack', 'manila-package'], + } + } + + manila_config { + 'DEFAULT/mount_tmp_location': value => $mount_tmp_location; + 'DEFAULT/check_hash': value => $check_hash; + } + + if $manage_service { + if $enabled { + $ensure = 'running' + } else { + $ensure = 'stopped' + } + + service { 'manila-data': + ensure => $ensure, + name => $::manila::params::data_service, + enable => $enabled, + hasstatus => true, + tag => 'manila-service', + } + } +} diff --git a/manifests/params.pp b/manifests/params.pp index 69ce17e6..c9e1fde1 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -16,6 +16,8 @@ class manila::params { $package_name = 'manila-common' $api_package = 'manila-api' $api_service = 'manila-api' + $data_package = 'manila-data' + $data_service = 'manila-data' $scheduler_package = 'manila-scheduler' $scheduler_service = 'manila-scheduler' $share_package = 'manila-share' @@ -31,6 +33,8 @@ class manila::params { $package_name = 'openstack-manila' $api_package = false $api_service = 'openstack-manila-api' + $data_package = false + $data_service = 'openstack-manila-data' $scheduler_package = false $scheduler_service = 'openstack-manila-scheduler' $share_package = 'openstack-manila-share' diff --git a/releasenotes/notes/manila-data-61845c37605e9afe.yaml b/releasenotes/notes/manila-data-61845c37605e9afe.yaml new file mode 100644 index 00000000..640c4606 --- /dev/null +++ b/releasenotes/notes/manila-data-61845c37605e9afe.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + The new ``manila::data`` class has been added. This class configures + the ``manila-data`` service. diff --git a/spec/classes/manila_data_spec.rb b/spec/classes/manila_data_spec.rb new file mode 100644 index 00000000..e606b1bc --- /dev/null +++ b/spec/classes/manila_data_spec.rb @@ -0,0 +1,99 @@ +require 'spec_helper' + +describe 'manila::data' do + + shared_examples_for 'manila::data' do + + context 'with default parameters' do + + it { is_expected.to contain_class('manila::params') } + + it { is_expected.to contain_manila_config('DEFAULT/mount_tmp_location').with_value('') } + it { is_expected.to contain_manila_config('DEFAULT/check_hash').with_value('') } + + it { is_expected.to contain_service('manila-data').with( + :name => platform_params[:data_service], + :enable => true, + :ensure => 'running', + :hasstatus => true, + :tag => 'manila-service', + ) } + end + + context 'with parameters' do + let :params do + { + :mount_tmp_location => '/tmp/', + :check_hash => false, + } + end + + it { is_expected.to contain_manila_config('DEFAULT/mount_tmp_location').with_value('/tmp/') } + it { is_expected.to contain_manila_config('DEFAULT/check_hash').with_value(false) } + end + + context 'with manage_service false' do + let :params do + { + :manage_service => false + } + end + it 'should not configure the service' do + is_expected.to_not contain_service('manila-data') + end + end + end + + shared_examples_for 'manila::data on Debian' do + context 'with default parameters' do + it { is_expected.to contain_package('manila-data').with( + :name => 'manila-data', + :ensure => 'present', + :tag => ['openstack', 'manila-package'], + ) } + end + + context 'with parameters' do + let :params do + { + :package_ensure => 'installed' + } + end + + it { is_expected.to contain_package('manila-data').with( + :name => 'manila-data', + :ensure => 'installed', + :tag => ['openstack', 'manila-package'], + ) } + end + end + + shared_examples_for 'manila::data on RedHat' do + context 'with default parameters' do + it { is_expected.to_not contain_package('manila-data') } + 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 + + let :platform_params do + case facts[:osfamily] + when 'Debian' + { :data_service => 'manila-data' } + when 'RedHat' + { :data_service => 'openstack-manila-data' } + end + end + + it_behaves_like 'manila::data' + it_behaves_like "manila::data on #{facts[:osfamily]}" + end + end + +end