From 4d13a3def468bdf620034a65f4f90ea51dde95af Mon Sep 17 00:00:00 2001 From: Takashi Kajinami <tkajinam@redhat.com> Date: Fri, 4 Feb 2022 17:28:05 +0900 Subject: [PATCH] Allow managing ovs bridges separately This change introduces capability to manage ovs bridges by external manifests or external tooling, to allow more flexible configuration which is not available by current interface in ovn::controller. Change-Id: I7d9be48f99e4f66a08e5dc578cd734c2eaff7eb2 --- manifests/controller.pp | 23 ++++++++++++------- .../manage_ovs_bridge-a44d87218958e680.yaml | 6 +++++ spec/classes/ovn_controller_spec.rb | 13 +++++++++++ 3 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 releasenotes/notes/manage_ovs_bridge-a44d87218958e680.yaml diff --git a/manifests/controller.pp b/manifests/controller.pp index ded64ce..43cbc47 100644 --- a/manifests/controller.pp +++ b/manifests/controller.pp @@ -87,6 +87,10 @@ # monitor the records that is needed in the current chassis. # Default to false (keep the original behavior) # +# [*manage_ovs_bridge*] +# (optional) Create ovs bridges according to ovn_bridge_mappings. +# Defaults to true +# class ovn::controller( $ovn_remote, $ovn_encap_ip, @@ -104,6 +108,7 @@ class ovn::controller( $enable_ovn_match_northd = false, $ovn_chassis_mac_map = [], $ovn_monitor_all = false, + $manage_ovs_bridge = true ) { include ovn::params @@ -168,13 +173,15 @@ class ovn::controller( 'external_ids:ovn-bridge-mappings' => { 'value' => join(any2array($ovn_bridge_mappings), ',') } } - ovn::controller::bridge { $ovn_bridge_mappings: - before => Service['controller'], - require => Service['openvswitch'] - } - ovn::controller::port { $bridge_interface_mappings: - before => Service['controller'], - require => Service['openvswitch'] + if $manage_ovs_bridge { + ovn::controller::bridge { $ovn_bridge_mappings: + before => Service['controller'], + require => Service['openvswitch'] + } + ovn::controller::port { $bridge_interface_mappings: + before => Service['controller'], + require => Service['openvswitch'] + } } } else { $bridge_items = { @@ -214,7 +221,7 @@ class ovn::controller( $ovn_bridge_mappings.each |String $mappings| { $mapping = split($mappings, ':') $br = $mapping[1] - if !empty($br) { + if !empty($br) and $manage_ovs_bridge { # TODO(numans): Right now puppet-vswitch's vs_bridge doesn't support # setting the column 'other-config' for the Bridge table. # Switch to using vs_bridge once the support is available. diff --git a/releasenotes/notes/manage_ovs_bridge-a44d87218958e680.yaml b/releasenotes/notes/manage_ovs_bridge-a44d87218958e680.yaml new file mode 100644 index 0000000..1645048 --- /dev/null +++ b/releasenotes/notes/manage_ovs_bridge-a44d87218958e680.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + The new ``ovn::controller::manage_ovs_bridge`` parameter has been added. + Setting this parameter to ``false``, the ``ovn::controller`` does not + manage ovs bridges and ports associated with bridges. diff --git a/spec/classes/ovn_controller_spec.rb b/spec/classes/ovn_controller_spec.rb index 6d10341..c249cfb 100644 --- a/spec/classes/ovn_controller_spec.rb +++ b/spec/classes/ovn_controller_spec.rb @@ -150,6 +150,19 @@ describe 'ovn::controller' do ) end end + + context 'when manage_ovs_bridge is false' do + before :each do + params.merge!({ + :manage_ovs_bridge => false, + }) + end + + it 'does not manage ovs bridge' do + is_expected.to_not contain_ovn__controller__bridge(params[:ovn_bridge_mappings].join(',')) + is_expected.to_not contain_ovn__controller__port(params[:bridge_interface_mappings].join(',')) + end + end end on_supported_os({