From 0a59d6767a958b72b3ef383ce0e91bdf7eebd6c5 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Tue, 21 Jul 2020 09:49:23 +0900 Subject: [PATCH] Add support for management of osc-placement package This patch introduces a new class, placement::client, so that operators can manage pythonN-osc-placement package. Change-Id: I76eb105ca532e427e4f48f84ccb5c15532456fda --- manifests/client.pp | 24 +++++++++ manifests/deps.pp | 11 ++++ manifests/params.pp | 2 + .../notes/osc-placement-c9df6c2ce40537d0.yaml | 5 ++ spec/classes/placement_client_spec.rb | 51 +++++++++++++++++++ 5 files changed, 93 insertions(+) create mode 100644 manifests/client.pp create mode 100644 releasenotes/notes/osc-placement-c9df6c2ce40537d0.yaml create mode 100644 spec/classes/placement_client_spec.rb diff --git a/manifests/client.pp b/manifests/client.pp new file mode 100644 index 0000000..7c48a7c --- /dev/null +++ b/manifests/client.pp @@ -0,0 +1,24 @@ +# == Class placement::client +# +# installs placement client +# +# === Parameters: +# +# [*ensure*] +# (optional) The state for the placement client package +# Defaults to 'present' +# +class placement::client( + $ensure = 'present' +) { + include placement::deps + include placement::params + + package { 'python-osc-placement': + ensure => $ensure, + name => $::placement::params::osc_package_name, + tag => ['openstack', 'placement-support-package'], + } + + include 'openstacklib::openstackclient' +} diff --git a/manifests/deps.pp b/manifests/deps.pp index dbd6dbf..5342ce0 100644 --- a/manifests/deps.pp +++ b/manifests/deps.pp @@ -24,6 +24,17 @@ class placement::deps { ~> Service<| tag == 'placement-service' |> ~> anchor { 'placement::service::end': } + # Support packages need to be installed in the install phase, but we don't + # put them in the chain above because we don't want any false dependencies + # between packages with the placement-package tag and the placement-support-package + # tag. Note: the package resources here will have a 'before' relationship on + # the placement::install::end anchor. The line between placement-support-package + # and placement-package should be whether or not placement services would + # need to be restarted if the package state was changed. + Anchor['placement::install::begin'] + -> Package<| tag == 'placement-support-package'|> + -> Anchor['placement::install::end'] + # all db settings should be applied and all packages should be installed # before dbsync starts Oslo::Db<||> -> Anchor['placement::dbsync::begin'] diff --git a/manifests/params.pp b/manifests/params.pp index 2e8a2c8..535b04c 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -19,6 +19,7 @@ class placement::params { $package_name = 'openstack-placement-api' $common_package_name = 'openstack-placement-common' $python_package_name = "python${pyvers_real}-placement" + $osc_package_name = "python${pyvers_real}-osc-placement" $service_name = false $public_url = 'http://127.0.0.1/placement' $internal_url = 'http://127.0.0.1/placement' @@ -31,6 +32,7 @@ class placement::params { $package_name = 'placement-api' $common_package_name = 'placement-common' $python_package_name = "python${pyvers_real}-placement" + $osc_package_name = "python${pyvers_real}-osc-placement" case $::os_package_type { 'debian': { $service_name = 'placement-api' diff --git a/releasenotes/notes/osc-placement-c9df6c2ce40537d0.yaml b/releasenotes/notes/osc-placement-c9df6c2ce40537d0.yaml new file mode 100644 index 0000000..f354f67 --- /dev/null +++ b/releasenotes/notes/osc-placement-c9df6c2ce40537d0.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + The new ``placement::client`` class has been added to manage osc-placement + package. diff --git a/spec/classes/placement_client_spec.rb b/spec/classes/placement_client_spec.rb new file mode 100644 index 0000000..9697f22 --- /dev/null +++ b/spec/classes/placement_client_spec.rb @@ -0,0 +1,51 @@ +require 'spec_helper' + +describe 'placement::client' do + + shared_examples_for 'placement client' do + + it { is_expected.to contain_class('placement::deps') } + it { is_expected.to contain_class('placement::params') } + + it 'installs placement client package' do + is_expected.to contain_package('python-osc-placement').with( + :ensure => 'present', + :name => platform_params[:client_package_name], + :tag => ['openstack', 'placement-support-package'] + ) + end + + it { is_expected.to contain_class('openstacklib::openstackclient') } + 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' + { :client_package_name => 'python3-osc-placement' } + when 'RedHat' + if facts[:operatingsystem] == 'Fedora' + { :client_package_name => 'python3-osc-placement' } + else + if facts[:operatingsystemmajrelease] > '7' + { :client_package_name => 'python3-osc-placement' } + else + { :client_package_name => 'python-osc-placement' } + end + end + end + end + + it_behaves_like 'placement client' + end + end + +end +