From 3e926c8a5ed26cf2e78a75ce65c19f0b06f59771 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Wed, 1 May 2024 00:21:51 +0900 Subject: [PATCH] task_flow: Ensure backend package is installed The octavia pacakge in Ubuntu/Debian does not install python3-redis automatically and it should be additionally installed. Also the octavia package in RDO is removing explicit dependency to python3-redis[1] so the package needs to be additionally installed in RDO in the future. [1] https://review.rdoproject.org/r/c/openstack/octavia-distgit/+/53067 Change-Id: Ie7ffa7e22848a3f888a1a553aa26f2e4171a191b --- manifests/params.pp | 4 ++ manifests/task_flow.pp | 44 ++++++++++++ ...flow-backend_package-390484b756669544.yaml | 7 ++ spec/classes/octavia_task_flow_spec.rb | 67 +++++++++++++++++-- 4 files changed, 118 insertions(+), 4 deletions(-) create mode 100644 releasenotes/notes/task_flow-backend_package-390484b756669544.yaml diff --git a/manifests/params.pp b/manifests/params.pp index 8542f46a..28eb492f 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -23,6 +23,8 @@ class octavia::params { $driver_agent_package_name = 'openstack-octavia-driver-agent' $octavia_wsgi_script_path = '/var/www/cgi-bin/octavia' $octavia_wsgi_script_source = '/usr/bin/octavia-wsgi' + $python_redis_package_name = 'python3-redis' + $python_kazoo_package_name = 'python3-kazoo' } 'Debian': { $common_package_name = 'octavia-common' @@ -33,6 +35,8 @@ class octavia::params { $driver_agent_package_name = 'octavia-driver-agent' $octavia_wsgi_script_path = '/usr/lib/cgi-bin/octavia' $octavia_wsgi_script_source = '/usr/bin/octavia-wsgi' + $python_redis_package_name = 'python3-redis' + $python_kazoo_package_name = 'python3-kazoo' } default: { fail("Unsupported osfamily: ${facts['os']['family']}") diff --git a/manifests/task_flow.pp b/manifests/task_flow.pp index 6d32eafd..f4348df7 100644 --- a/manifests/task_flow.pp +++ b/manifests/task_flow.pp @@ -69,6 +69,14 @@ # (optional) Url used to connect to the persistence database. # Defaults to $facts['os_service_default'] # +# [*manage_backend_package*] +# (Optional) Whether to install the backend package. +# Defaults to true. +# +# [*package_ensure*] +# (Optional) ensure state for package. +# Defaults to 'present' +# class octavia::task_flow ( $engine = $facts['os_service_default'], $max_workers = $facts['os_service_default'], @@ -86,9 +94,12 @@ class octavia::task_flow ( $jobboard_expiration_time = $facts['os_service_default'], $jobboard_save_logbook = $facts['os_service_default'], $persistence_connection = $facts['os_service_default'], + Boolean $manage_backend_package = true, + $package_ensure = 'present', ) { include octavia::deps + include octavia::params $jobboard_redis_backend_ssl_options_real = $jobboard_redis_backend_ssl_options ? { Hash => join(join_keys_to_values($jobboard_redis_backend_ssl_options, ':'), ','), @@ -99,6 +110,39 @@ class octavia::task_flow ( default => join(any2array($jobboard_zookeeper_ssl_options), ','), } + if $manage_backend_package { + $jobboard_backend_driver_real = is_service_default($jobboard_backend_driver) ? { + true => 'redis_taskflow_driver', + default => $jobboard_backend_driver, + } + + case $jobboard_backend_driver_real { + 'zookeeper_taskflow_driver': { + ensure_packages('python-kazoo', { + name => $::octavia::params::python_kazoo_package_name, + ensure => $package_ensure, + tag => ['openstack'], + }) + Anchor['octavia::install::begin'] + -> Package['python-kazoo'] + -> Anchor['octavia::install::end'] + } + 'redis_taskflow_driver': { + ensure_packages('python-redis', { + name => $::octavia::params::python_redis_package_name, + ensure => $package_ensure, + tag => ['openstack'], + }) + Anchor['octavia::install::begin'] + -> Package['python-redis'] + -> Anchor['octavia::install::end'] + } + default: { + fail('unsupported taskflow backend') + } + } + } + octavia_config { 'task_flow/engine' : value => $engine; 'task_flow/max_workers' : value => $max_workers; diff --git a/releasenotes/notes/task_flow-backend_package-390484b756669544.yaml b/releasenotes/notes/task_flow-backend_package-390484b756669544.yaml new file mode 100644 index 00000000..69f970b1 --- /dev/null +++ b/releasenotes/notes/task_flow-backend_package-390484b756669544.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + The ``octavia::task_flow`` class now ensures the backend package is + installed. Package management can be disabled by setting the new + ``manage_backend_package`` parameter to ``false``. The package status + can be customized by the new ``package_ensure`` parameter. diff --git a/spec/classes/octavia_task_flow_spec.rb b/spec/classes/octavia_task_flow_spec.rb index b0215409..875d84a7 100644 --- a/spec/classes/octavia_task_flow_spec.rb +++ b/spec/classes/octavia_task_flow_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' describe 'octavia::task_flow' do shared_examples 'octavia::task_flow' do context 'with default parameters' do - it { + it 'configures the default values' do should contain_octavia_config('task_flow/engine').with_value('') should contain_octavia_config('task_flow/max_workers').with_value('') should contain_octavia_config('task_flow/disable_revert').with_value('') @@ -20,7 +20,19 @@ describe 'octavia::task_flow' do should contain_octavia_config('task_flow/jobboard_expiration_time').with_value('') should contain_octavia_config('task_flow/jobboard_save_logbook').with_value('') should contain_octavia_config('task_flow/persistence_connection').with_value('') - } + end + + it 'should install python-redis' do + should contain_package('python-redis').with( + :ensure => 'installed', + :name => platform_params[:python_redis_package_name], + :tag => ['openstack'], + ) + end + + it 'should not install python-kazoo' do + should_not contain_package('python-kazoo') + end end context 'with specified parameters' do @@ -45,7 +57,7 @@ describe 'octavia::task_flow' do } end - it { + it 'configures the given values' do should contain_octavia_config('task_flow/engine').with_value('parallel') should contain_octavia_config('task_flow/max_workers').with_value(5) should contain_octavia_config('task_flow/disable_revert').with_value(false) @@ -62,7 +74,39 @@ describe 'octavia::task_flow' do should contain_octavia_config('task_flow/jobboard_expiration_time').with_value(30) should contain_octavia_config('task_flow/jobboard_save_logbook').with_value(false) should contain_octavia_config('task_flow/persistence_connection').with_value('sqlite://') - } + end + + it 'should install python-redis' do + should contain_package('python-redis').with( + :ensure => 'installed', + :name => platform_params[:python_redis_package_name], + :tag => ['openstack'], + ) + end + + it 'should not install python-kazoo' do + should_not contain_package('python-kazoo') + end + end + + context 'with zookeeper driver' do + let :params do + { + :jobboard_backend_driver => 'zookeeper_taskflow_driver', + } + end + + it 'should not install python-redis' do + should_not contain_package('python-redis') + end + + it 'should install python-kazoo' do + should contain_package('python-kazoo').with( + :ensure => 'installed', + :name => platform_params[:python_kazoo_package_name], + :tag => ['openstack'], + ) + end end context 'with ssl options set to dict' do @@ -94,6 +138,21 @@ describe 'octavia::task_flow' do facts.merge(OSDefaults.get_facts()) end + let(:platform_params) do + case facts[:os]['family'] + when 'Debian' + { + :python_redis_package_name => 'python3-redis', + :python_kazoo_package_name => 'python3-kazoo' + } + when 'RedHat' + { + :python_redis_package_name => 'python3-redis', + :python_kazoo_package_name => 'python3-kazoo' + } + end + end + it_behaves_like 'octavia::task_flow' end end