From a92c5f582a85cd1f2c22bc33a2173d28277c989d Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Sun, 2 Feb 2025 22:44:34 +0900 Subject: [PATCH] Add support for jobboard etcd backend Depends-on: https://review.opendev.org/915834 Change-Id: I1977abce2196db0126db1917c141cd8fcabdf1ea --- manifests/params.pp | 2 + manifests/task_flow.pp | 32 ++++++++++ ...obboard-etcd-backend-484c6173cd698fa4.yaml | 5 ++ spec/classes/octavia_task_flow_spec.rb | 58 +++++++++++++++++-- 4 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 releasenotes/notes/jobboard-etcd-backend-484c6173cd698fa4.yaml diff --git a/manifests/params.pp b/manifests/params.pp index 28eb492f..ffe98c08 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -25,6 +25,7 @@ class octavia::params { $octavia_wsgi_script_source = '/usr/bin/octavia-wsgi' $python_redis_package_name = 'python3-redis' $python_kazoo_package_name = 'python3-kazoo' + $python_etcd3gw_package_name = 'python3-etcd3gw' } 'Debian': { $common_package_name = 'octavia-common' @@ -37,6 +38,7 @@ class octavia::params { $octavia_wsgi_script_source = '/usr/bin/octavia-wsgi' $python_redis_package_name = 'python3-redis' $python_kazoo_package_name = 'python3-kazoo' + $python_etcd3gw_package_name = 'python3-etcd3gw' } default: { fail("Unsupported osfamily: ${facts['os']['family']}") diff --git a/manifests/task_flow.pp b/manifests/task_flow.pp index 37bf724c..7e76598d 100644 --- a/manifests/task_flow.pp +++ b/manifests/task_flow.pp @@ -73,6 +73,18 @@ # (optional) Zookeeper jobboard backend ssl configuration options. # Defaults to $facts['os_service_default'] # +# [*jobboard_etcd_ssl_options*] +# (optional) Etcd jobboard backend ssl configuration options. +# Defaults to $facts['os_service_default'] +# +# [*jobboard_etcd_timeout*] +# (optional) Timeout when communicating with the Etcd backend. +# Defaults to $facts['os_service_default'] +# +# [*jobboard_etcd_api_path*] +# (optional) API Path of the Etcd server. +# Defaults to $facts['os_service_default'] +# # [*jobboard_expiration_time*] # (optional) Expiration time in seconds for jobboard tasks. # Defaults to $facts['os_service_default'] @@ -111,6 +123,9 @@ class octavia::task_flow ( $jobboard_redis_backend_ssl_options = $facts['os_service_default'], $jobboard_redis_sentinel_ssl_options = $facts['os_service_default'], $jobboard_zookeeper_ssl_options = $facts['os_service_default'], + $jobboard_etcd_ssl_options = $facts['os_service_default'], + $jobboard_etcd_timeout = $facts['os_service_default'], + $jobboard_etcd_api_path = $facts['os_service_default'], $jobboard_expiration_time = $facts['os_service_default'], $jobboard_save_logbook = $facts['os_service_default'], $persistence_connection = $facts['os_service_default'], @@ -133,6 +148,10 @@ class octavia::task_flow ( Hash => join(join_keys_to_values($jobboard_zookeeper_ssl_options, ':'), ','), default => join(any2array($jobboard_zookeeper_ssl_options), ','), } + $jobboard_etcd_ssl_options_real = $jobboard_etcd_ssl_options ? { + Hash => join(join_keys_to_values($jobboard_etcd_ssl_options, ':'), ','), + default => join(any2array($jobboard_etcd_ssl_options), ','), + } if $manage_backend_package { $jobboard_backend_driver_real = is_service_default($jobboard_backend_driver) ? { @@ -151,6 +170,16 @@ class octavia::task_flow ( -> Package['python-kazoo'] -> Anchor['octavia::install::end'] } + 'etcd_taskflow_driver': { + ensure_packages('python-etcd3gw', { + name => $::octavia::params::python_etcd3gw_package_name, + ensure => $package_ensure, + tag => ['openstack'], + }) + Anchor['octavia::install::begin'] + -> Package['python-etcd3gw'] + -> Anchor['octavia::install::end'] + } 'redis_taskflow_driver': { ensure_packages('python-redis', { name => $::octavia::params::python_redis_package_name, @@ -185,6 +214,9 @@ class octavia::task_flow ( 'task_flow/jobboard_redis_backend_ssl_options' : value => $jobboard_redis_backend_ssl_options_real; 'task_flow/jobboard_redis_sentinel_ssl_options' : value => $jobboard_redis_sentinel_ssl_options_real; 'task_flow/jobboard_zookeeper_ssl_options' : value => $jobboard_zookeeper_ssl_options_real; + 'task_flow/jobboard_etcd_ssl_options' : value => $jobboard_etcd_ssl_options_real; + 'task_flow/jobboard_etcd_timeout' : value => $jobboard_etcd_timeout; + 'task_flow/jobboard_etcd_api_path' : value => $jobboard_etcd_api_path; 'task_flow/jobboard_expiration_time' : value => $jobboard_expiration_time; 'task_flow/jobboard_save_logbook' : value => $jobboard_save_logbook; 'task_flow/persistence_connection' : value => $persistence_connection; diff --git a/releasenotes/notes/jobboard-etcd-backend-484c6173cd698fa4.yaml b/releasenotes/notes/jobboard-etcd-backend-484c6173cd698fa4.yaml new file mode 100644 index 00000000..107a0b9f --- /dev/null +++ b/releasenotes/notes/jobboard-etcd-backend-484c6173cd698fa4.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + The ``octavia::task_flow`` class now supports configuring jobboard etcd + backend. diff --git a/spec/classes/octavia_task_flow_spec.rb b/spec/classes/octavia_task_flow_spec.rb index ba1f7db5..ec9fbf1f 100644 --- a/spec/classes/octavia_task_flow_spec.rb +++ b/spec/classes/octavia_task_flow_spec.rb @@ -21,6 +21,9 @@ describe 'octavia::task_flow' do should contain_octavia_config('task_flow/jobboard_redis_backend_ssl_options').with_value('') should contain_octavia_config('task_flow/jobboard_redis_sentinel_ssl_options').with_value('') should contain_octavia_config('task_flow/jobboard_zookeeper_ssl_options').with_value('') + should contain_octavia_config('task_flow/jobboard_etcd_ssl_options').with_value('') + should contain_octavia_config('task_flow/jobboard_etcd_timeout').with_value('') + should contain_octavia_config('task_flow/jobboard_etcd_api_path').with_value('') 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('') @@ -37,6 +40,9 @@ describe 'octavia::task_flow' do it 'should not install python-kazoo' do should_not contain_package('python-kazoo') end + it 'should not install python-etcd3gw' do + should_not contain_package('python-etcd3gw') + end end context 'with specified parameters' do @@ -59,6 +65,9 @@ describe 'octavia::task_flow' do :jobboard_redis_backend_ssl_options => ['ssl:false', 'ssl_keyfile:None'], :jobboard_redis_sentinel_ssl_options => ['ssl:false', 'ssl_keyfile:None'], :jobboard_zookeeper_ssl_options => ['use_ssl:false', 'keyfile:None'], + :jobboard_etcd_ssl_options => ['use_ssl:false', 'cert_key:None'], + :jobboard_etcd_timeout => 60, + :jobboard_etcd_api_path => '/v1', :jobboard_expiration_time => 30, :jobboard_save_logbook => false, :persistence_connection => 'sqlite://', @@ -83,6 +92,9 @@ describe 'octavia::task_flow' do should contain_octavia_config('task_flow/jobboard_redis_backend_ssl_options').with_value('ssl:false,ssl_keyfile:None') should contain_octavia_config('task_flow/jobboard_redis_sentinel_ssl_options').with_value('ssl:false,ssl_keyfile:None') should contain_octavia_config('task_flow/jobboard_zookeeper_ssl_options').with_value('use_ssl:false,keyfile:None') + should contain_octavia_config('task_flow/jobboard_etcd_ssl_options').with_value('use_ssl:false,cert_key:None') + should contain_octavia_config('task_flow/jobboard_etcd_timeout').with_value(60) + should contain_octavia_config('task_flow/jobboard_etcd_api_path').with_value('/v1') 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://') @@ -99,6 +111,9 @@ describe 'octavia::task_flow' do it 'should not install python-kazoo' do should_not contain_package('python-kazoo') end + it 'should not install python-etcd3gw' do + should_not contain_package('python-etcd3gw') + end end context 'with zookeeper driver' do @@ -119,6 +134,34 @@ describe 'octavia::task_flow' do :tag => ['openstack'], ) end + + it 'should not install python-etcd3gw' do + should_not contain_package('python-etcd3gw') + end + end + + context 'with etcd driver' do + let :params do + { + :jobboard_backend_driver => 'etcd_taskflow_driver', + } + end + + it 'should not install python-redis' do + should_not contain_package('python-redis') + end + + it 'should install python-kazoo' do + should_not contain_package('python-kazoo') + end + + it 'should install python-etcd3gw' do + should contain_package('python-etcd3gw').with( + :ensure => 'installed', + :name => platform_params[:python_etcd3gw_package_name], + :tag => ['openstack'], + ) + end end context 'with ssl options set to dict' do @@ -136,6 +179,10 @@ describe 'octavia::task_flow' do 'use_ssl' => 'false', 'keyfile' => 'None' }, + :jobboard_etcd_ssl_options => { + 'use_ssl' => 'false', + 'cert_key' => 'None', + }, } end @@ -143,6 +190,7 @@ describe 'octavia::task_flow' do should contain_octavia_config('task_flow/jobboard_redis_backend_ssl_options').with_value('ssl:false,ssl_keyfile:None') should contain_octavia_config('task_flow/jobboard_redis_sentinel_ssl_options').with_value('ssl:false,ssl_keyfile:None') should contain_octavia_config('task_flow/jobboard_zookeeper_ssl_options').with_value('use_ssl:false,keyfile:None') + should contain_octavia_config('task_flow/jobboard_etcd_ssl_options').with_value('use_ssl:false,cert_key:None') } end end @@ -159,13 +207,15 @@ describe 'octavia::task_flow' do case facts[:os]['family'] when 'Debian' { - :python_redis_package_name => 'python3-redis', - :python_kazoo_package_name => 'python3-kazoo' + :python_redis_package_name => 'python3-redis', + :python_kazoo_package_name => 'python3-kazoo', + :python_etcd3gw_package_name => 'python3-etcd3gw' } when 'RedHat' { - :python_redis_package_name => 'python3-redis', - :python_kazoo_package_name => 'python3-kazoo' + :python_redis_package_name => 'python3-redis', + :python_kazoo_package_name => 'python3-kazoo', + :python_etcd3gw_package_name => 'python3-etcd3gw' } end end