Add support for jobboard etcd backend

Depends-on: https://review.opendev.org/915834
Change-Id: I1977abce2196db0126db1917c141cd8fcabdf1ea
This commit is contained in:
Takashi Kajinami
2025-02-02 22:44:34 +09:00
parent b98f8ad3bd
commit a92c5f582a
4 changed files with 93 additions and 4 deletions

View File

@@ -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']}")

View File

@@ -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;

View File

@@ -0,0 +1,5 @@
---
features:
- |
The ``octavia::task_flow`` class now supports configuring jobboard etcd
backend.

View File

@@ -21,6 +21,9 @@ describe 'octavia::task_flow' do
should contain_octavia_config('task_flow/jobboard_redis_backend_ssl_options').with_value('<SERVICE DEFAULT>')
should contain_octavia_config('task_flow/jobboard_redis_sentinel_ssl_options').with_value('<SERVICE DEFAULT>')
should contain_octavia_config('task_flow/jobboard_zookeeper_ssl_options').with_value('<SERVICE DEFAULT>')
should contain_octavia_config('task_flow/jobboard_etcd_ssl_options').with_value('<SERVICE DEFAULT>')
should contain_octavia_config('task_flow/jobboard_etcd_timeout').with_value('<SERVICE DEFAULT>')
should contain_octavia_config('task_flow/jobboard_etcd_api_path').with_value('<SERVICE DEFAULT>')
should contain_octavia_config('task_flow/jobboard_expiration_time').with_value('<SERVICE DEFAULT>')
should contain_octavia_config('task_flow/jobboard_save_logbook').with_value('<SERVICE DEFAULT>')
should contain_octavia_config('task_flow/persistence_connection').with_value('<SERVICE DEFAULT>')
@@ -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