From dee8091c8904105df2747a6639fe2779726b28df 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. Change-Id: I97442478d77d222fdd428eebd270c08df08237f6 Related-Bug: #1931133 --- manifests/profile/base/neutron/agents/ovn.pp | 21 +++++++++++++-- .../profile/base/neutron/ovn_metadata.pp | 23 ++++++++++++++-- .../profile/base/neutron/plugins/ml2/ovn.pp | 26 ++++++++++++++++--- 3 files changed, 63 insertions(+), 7 deletions(-) diff --git a/manifests/profile/base/neutron/agents/ovn.pp b/manifests/profile/base/neutron/agents/ovn.pp index c08deb677..d7a73806c 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), ','), enable_ovn_match_northd => true, 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 2e02506d4..6f8c48b34 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') @@ -54,7 +63,9 @@ # Defaults to 60000 # class tripleo::profile::base::neutron::ovn_metadata ( - $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_sb_port = hiera('ovn::southbound::port'), $ovn_sb_private_key = $::os_service_default, $ovn_sb_certificate = $::os_service_default, @@ -65,8 +76,16 @@ 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 7398e17de..0f3d5e0b1 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,19 @@ 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,