From e8ac725925943cc903e34e976f75cdc4db59acf0 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Tue, 3 Sep 2024 14:12:49 +0900 Subject: [PATCH] Add support for neutron-ovn-maintenance-worker Adds support for the new service which was added to neutron to run periodic routines for ML2/OVN driver. Depends-on: https://review.opendev.org/c/openstack/neutron/+/922074 Change-Id: I7a6139b5d744631f70d7c3437c66d6e42431dec9 --- manifests/params.pp | 4 ++ .../plugins/ml2/ovn/maintenance_worker.pp | 50 ++++++++++++++++ ...n-maintenance-worker-3157a480934d1aea.yaml | 5 ++ ...plugins_ml2_ovn_maintenance_worker_spec.rb | 59 +++++++++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 manifests/plugins/ml2/ovn/maintenance_worker.pp create mode 100644 releasenotes/notes/ovn-maintenance-worker-3157a480934d1aea.yaml create mode 100644 spec/classes/neutron_plugins_ml2_ovn_maintenance_worker_spec.rb diff --git a/manifests/params.pp b/manifests/params.pp index b26725ca0..8b3dbc2be 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -52,6 +52,8 @@ class neutron::params { $l2gw_package = 'python3-networking-l2gw' $ovn_metadata_agent_package = 'openstack-neutron-ovn-metadata-agent' $ovn_agent_package = 'openstack-neutron-ovn-agent' + $ovn_maintenance_worker_package = 'openstack-neutron-ovn-maintenance-worker' + $ovn_maintenance_worker_service = 'neutron-ovn-maintenance-worker' $dynamic_routing_package = 'python3-neutron-dynamic-routing' $bgp_dragent_package = 'openstack-neutron-bgp-dragent' $bagpipe_bgp_package = 'openstack-bagpipe-bgp' @@ -112,6 +114,8 @@ class neutron::params { $l2gw_package = 'python3-networking-l2gw' $ovn_metadata_agent_package = 'neutron-ovn-metadata-agent' $ovn_agent_package = 'neutron-ovn-agent' + $ovn_maintenance_worker_package = undef + $ovn_maintenance_worker_service = undef $neutron_wsgi_script_path = '/usr/lib/cgi-bin/neutron' $neutron_wsgi_script_source = '/usr/bin/neutron-api' $networking_baremetal_package = 'python3-ironic-neutron-agent' diff --git a/manifests/plugins/ml2/ovn/maintenance_worker.pp b/manifests/plugins/ml2/ovn/maintenance_worker.pp new file mode 100644 index 000000000..49707833f --- /dev/null +++ b/manifests/plugins/ml2/ovn/maintenance_worker.pp @@ -0,0 +1,50 @@ +# == Class: neutron::plugins::ml2::ovn::maintenance_worker +# +# Setup and configure neutron OVN maintenance worker. +# +# === Parameters +# +# [*package_ensure*] +# Ensure state of the package. Defaults to 'present'. +# +# [*enabled*] +# State of the service. Defaults to true. +# +# [*manage_service*] +# (optional) Whether to start/stop the service +# Defaults to true +# +class neutron::plugins::ml2::ovn::maintenance_worker ( + $package_ensure = 'present', + Boolean $enabled = true, + Boolean $manage_service = true, +) { + + include neutron::params + + if $::neutron::params::ovn_maintenance_worker_package { + package { 'neutron-ovn-maintenance-worker': + ensure => $package_ensure, + name => $::neutron::params::ovn_maintenance_worker_package, + tag => ['openstack', 'neutron-package'], + } + } + + if $manage_service { + if $::neutron::params::ovn_maintenance_worker_service { + if $enabled { + $service_ensure = 'running' + } else { + $service_ensure = 'stopped' + } + service { 'neutron-ovn-maintenance-worker': + ensure => $service_ensure, + name => $::neutron::params::ovn_maintenance_worker_service, + enable => $enabled, + tag => 'neutron-service', + } + } else { + warning('neutron-ovn-maintenance-worker service is not available.') + } + } +} diff --git a/releasenotes/notes/ovn-maintenance-worker-3157a480934d1aea.yaml b/releasenotes/notes/ovn-maintenance-worker-3157a480934d1aea.yaml new file mode 100644 index 000000000..ca6676937 --- /dev/null +++ b/releasenotes/notes/ovn-maintenance-worker-3157a480934d1aea.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + The new ``neutron::plugins::ml2::ovn::maintenance_worker`` class has been + added. diff --git a/spec/classes/neutron_plugins_ml2_ovn_maintenance_worker_spec.rb b/spec/classes/neutron_plugins_ml2_ovn_maintenance_worker_spec.rb new file mode 100644 index 000000000..87bb15d44 --- /dev/null +++ b/spec/classes/neutron_plugins_ml2_ovn_maintenance_worker_spec.rb @@ -0,0 +1,59 @@ +require 'spec_helper' + +describe 'neutron::plugins::ml2::ovn::maintenance_worker' do + + shared_examples 'neutron::plugins::ml2::ovn::maintenance_worker' do + it { should contain_class('neutron::params') } + + it 'should install OVN maintenance worker' do + should contain_package('neutron-ovn-maintenance-worker').with( + :ensure => 'present', + :name => platform_params[:ovn_maintenance_worker_package], + :tag => ['openstack', 'neutron-package'], + ) + end + + it 'configures OVN maintenance worker' do + should contain_service('neutron-ovn-maintenance-worker').with( + :name => platform_params[:ovn_maintenance_worker_service], + :enable => true, + :ensure => 'running', + :tag => 'neutron-service', + ) + end + + context 'with manage_service as false' do + let :params do + { :manage_service => false } + end + + it 'should not manage the service' do + should_not contain_service('neutron-ovn-maintenance-worker') + end + 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[:os]['family'] + when 'Debian' + {} + when 'RedHat' + { :ovn_maintenance_worker_package => 'openstack-neutron-ovn-maintenance-worker', + :ovn_maintenance_worker_service => 'neutron-ovn-maintenance-worker' } + end + end + + if facts[:os]['family'] == 'RedHat' + it_behaves_like 'neutron::plugins::ml2::ovn::maintenance_worker' + end + end + end +end