From 79f06794fdc85af625248c55e97aea353531ee83 Mon Sep 17 00:00:00 2001 From: Alex Schultz Date: Mon, 7 Jun 2021 10:17:48 -0600 Subject: [PATCH] Add support for ovn clustered databases This patch adds support for managing the ovn connection correctly when ovn is handling clustering instead of pacemaker. By default if the parameter is not enabled, the pacemaker managed way is assumed. Conflicts: manifests/profile/base/neutron/agents/ovn.pp (Due to missing "enable_ovn_match_northd => true," line) and other context manifests/profile/base/neutron/ovn_metadata.pp manifests/profile/base/neutron/plugins/ml2/ovn.pp Change-Id: I97442478d77d222fdd428eebd270c08df08237f6 Related-Bug: #1931133 (cherry picked from commit d1b1f7c675e33f2d7b0f3a5583def776ecc7e87c) (cherry picked from commit 3bcfb9deefd16c77608ea4cbedc09dcd6d16a7a6) --- manifests/profile/base/neutron/agents/ovn.pp | 21 ++++++++++++++-- .../profile/base/neutron/ovn_metadata.pp | 19 +++++++++++++- .../profile/base/neutron/plugins/ml2/ovn.pp | 25 ++++++++++++++++--- 3 files changed, 59 insertions(+), 6 deletions(-) diff --git a/manifests/profile/base/neutron/agents/ovn.pp b/manifests/profile/base/neutron/agents/ovn.pp index 774bdf1c6..ef450ee5c 100644 --- a/manifests/profile/base/neutron/agents/ovn.pp +++ b/manifests/profile/base/neutron/agents/ovn.pp @@ -20,6 +20,15 @@ # (Optional) The IP-Address where OVN DBs are listening. # Defaults to hiera('ovn_dbs_vip') # +# [*ovn_db_node_ips*] +# (Optional) The OVN DBs node ip addresses are listening. +# Defaults to hiera('ovn_dbs_node_ips') +# +# [*ovn_db_clustered*] +# (Optional) Boolean indicating if we're running with ovn db clustering +# or pacemaker. Defaults to false for backwards compatibility +# Defaults to hiera('ovn_db_clustered', false) +# # [*ovn_sbdb_port*] # (Optional) Port number on which southbound database is listening # Defaults to hiera('ovn::southbound::port') @@ -44,15 +53,23 @@ # Defaults to hiera('ovn_chassis_mac_map') # class tripleo::profile::base::neutron::agents::ovn ( - $ovn_db_host = hiera('ovn_dbs_vip'), + $ovn_db_host = hiera('ovn_dbs_vip', undef), + $ovn_db_node_ips = hiera('ovn_dbs_node_ips', undef), + $ovn_db_clustered = hiera('ovn_db_clustered', false), $ovn_sbdb_port = hiera('ovn::southbound::port'), $protocol = 'tcp', $step = Integer(hiera('step')), $ovn_chassis_mac_map = hiera('ovn_chassis_mac_map', undef), ) { if $step >= 4 { + if $ovn_db_clustered { + $db_hosts = any2array($ovn_db_node_ips) + } else { + $db_hosts = any2array($ovn_db_host) + } + $sb_conn = $db_hosts.map |$h| { join([$protocol, normalize_ip_for_uri($h), "${ovn_sbdb_port}"], ':') } class { '::ovn::controller': - ovn_remote => join([$protocol, normalize_ip_for_uri($ovn_db_host), "${ovn_sbdb_port}"], ':'), + ovn_remote => join(any2array($sb_conn), ','), ovn_chassis_mac_map => $ovn_chassis_mac_map, } } diff --git a/manifests/profile/base/neutron/ovn_metadata.pp b/manifests/profile/base/neutron/ovn_metadata.pp index 31dff8adf..cf75145a4 100644 --- a/manifests/profile/base/neutron/ovn_metadata.pp +++ b/manifests/profile/base/neutron/ovn_metadata.pp @@ -22,6 +22,15 @@ # The IP-Address where OVN DBs are listening. # Defaults to hiera('ovn_dbs_vip') # +# [*ovn_db_node_ips*] +# (Optional) The OVN DBs node ip addresses are listening. +# Defaults to hiera('ovn_dbs_node_ips') +# +# [*ovn_db_clustered*] +# (Optional) Boolean indicating if we're running with ovn db clustering +# or pacemaker. Defaults to false for backwards compatibility +# Defaults to hiera('ovn_db_clustered', false) +# # [*ovn_sb_port*] # (Optional) Port number on which southbound database is listening # Defaults to hiera('ovn::southbound::port') @@ -51,6 +60,8 @@ # class tripleo::profile::base::neutron::ovn_metadata ( $ovn_db_host = hiera('ovn_dbs_vip'), + $ovn_db_node_ips = hiera('ovn_dbs_node_ips', undef), + $ovn_db_clustered = hiera('ovn_db_clustered', false), $ovn_sb_port = hiera('ovn::southbound::port'), $ovn_sb_private_key = $::os_service_default, $ovn_sb_certificate = $::os_service_default, @@ -60,8 +71,14 @@ class tripleo::profile::base::neutron::ovn_metadata ( ) { if $step >= 4 { include ::tripleo::profile::base::neutron + if $ovn_db_clustered { + $db_hosts = any2array($ovn_db_node_ips) + } else { + $db_hosts = any2array($ovn_db_host) + } + $sb_conn = $db_hosts.map |$h| { join([$protocol, normalize_ip_for_uri($h), "${ovn_sb_port}"], ':') } class { '::neutron::agents::ovn_metadata': - ovn_sb_connection => join(["${protocol}", normalize_ip_for_uri($ovn_db_host), "${ovn_sb_port}"], ':'), + ovn_sb_connection => join(any2array($sb_conn), ','), ovn_sb_private_key => $ovn_sb_private_key, ovn_sb_certificate => $ovn_sb_certificate, ovn_sb_ca_cert => $ovn_sb_ca_cert, diff --git a/manifests/profile/base/neutron/plugins/ml2/ovn.pp b/manifests/profile/base/neutron/plugins/ml2/ovn.pp index c72247e98..4c6222ee0 100644 --- a/manifests/profile/base/neutron/plugins/ml2/ovn.pp +++ b/manifests/profile/base/neutron/plugins/ml2/ovn.pp @@ -20,6 +20,15 @@ # The IP-Address where OVN DBs are listening. # Defaults to hiera('ovn_dbs_vip') # +# [*ovn_db_node_ips*] +# (Optional) The OVN DBs node ip addresses are listening. +# Defaults to hiera('ovn_dbs_node_ips') +# +# [*ovn_db_clustered*] +# (Optional) Boolean indicating if we're running with ovn db clustering +# or pacemaker. Defaults to false for backwards compatibility +# Defaults to hiera('ovn_db_clustered', false) +# # [*ovn_nb_port*] # (Optional) Port number on which northbound database is listening # Defaults to hiera('ovn::northbound::port') @@ -66,7 +75,9 @@ # Defaults to hiera('step') # class tripleo::profile::base::neutron::plugins::ml2::ovn ( - $ovn_db_host = hiera('ovn_dbs_vip'), + $ovn_db_host = hiera('ovn_dbs_vip', undef), + $ovn_db_node_ips = hiera('ovn_dbs_node_ips', undef), + $ovn_db_clustered = hiera('ovn_db_clustered', false), $ovn_nb_port = hiera('ovn::northbound::port'), $ovn_sb_port = hiera('ovn::southbound::port'), $ovn_nb_private_key = $::os_service_default, @@ -78,10 +89,18 @@ class tripleo::profile::base::neutron::plugins::ml2::ovn ( $protocol = 'tcp', $step = Integer(hiera('step')) ) { + if $step >= 4 { + if $ovn_db_clustered { + $db_hosts = any2array($ovn_db_node_ips) + } else { + $db_hosts = any2array($ovn_db_host) + } + $sb_conn = $db_hosts.map |$h| { join([$protocol, normalize_ip_for_uri($h), "${ovn_sb_port}"], ':') } + $nb_conn = $db_hosts.map |$h| { join([$protocol, normalize_ip_for_uri($h), "${ovn_nb_port}"], ':') } class { '::neutron::plugins::ml2::ovn': - ovn_nb_connection => join(["${protocol}", normalize_ip_for_uri($ovn_db_host), "${ovn_nb_port}"], ':'), - ovn_sb_connection => join(["${protocol}", normalize_ip_for_uri($ovn_db_host), "${ovn_sb_port}"], ':'), + ovn_nb_connection => join(any2array($nb_conn), ','), + ovn_sb_connection => join(any2array($sb_conn), ','), ovn_nb_private_key => $ovn_nb_private_key, ovn_nb_certificate => $ovn_nb_certificate, ovn_nb_ca_cert => $ovn_nb_ca_cert,