From 0b51d8258c4a0618ec6f2abd8f86bfe6943cd51f Mon Sep 17 00:00:00 2001 From: Carlos Goncalves Date: Mon, 1 Mar 2021 21:43:47 +0100 Subject: [PATCH] Allow ovn_db_host to be of type array On an OVN clustered database environment, there is no OVN VIP as all OVN databases are active. Neutron has to be configured to point to all OVN database servers in the cluster. Co-Authored-By: Michele Baldessari Change-Id: Ib8624f0c2e87de18a990060c3cb939c13ec3a6f2 --- manifests/profile/base/neutron/agents/ovn.pp | 12 ++++++++++-- manifests/profile/base/neutron/ovn_metadata.pp | 12 ++++++++++-- manifests/profile/base/neutron/plugins/ml2/ovn.pp | 14 +++++++++++--- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/manifests/profile/base/neutron/agents/ovn.pp b/manifests/profile/base/neutron/agents/ovn.pp index c08deb677..8aa0fb189 100644 --- a/manifests/profile/base/neutron/agents/ovn.pp +++ b/manifests/profile/base/neutron/agents/ovn.pp @@ -17,7 +17,9 @@ # OVN Neutron agent profile for tripleo # # [*ovn_db_host*] -# (Optional) The IP-Address where OVN DBs are listening. +# (Optional) The IP-Address where OVN DBs are listening. If passed a list it +# will construct a comma separated string like +# protocol:ip1:port,protocol:ip2:port. # Defaults to hiera('ovn_dbs_vip') # # [*ovn_sbdb_port*] @@ -51,8 +53,14 @@ class tripleo::profile::base::neutron::agents::ovn ( $ovn_chassis_mac_map = hiera('ovn_chassis_mac_map', undef), ) { if $step >= 4 { + if is_string($ovn_db_host) { + $ovn_remote_real = join(["${protocol}", normalize_ip_for_uri($ovn_db_host), "${ovn_sbdb_port}"], ':') + } elsif is_array($ovn_db_host) { + $ovn_remote_real = join($ovn_db_host.map |$i| { "${protocol}:${normalize_ip_for_uri($i)}:${ovn_sbdb_port}" }, ',') + } + class { 'ovn::controller': - ovn_remote => join([$protocol, normalize_ip_for_uri($ovn_db_host), "${ovn_sbdb_port}"], ':'), + ovn_remote => $ovn_remote_real, 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..9c7c91eff 100644 --- a/manifests/profile/base/neutron/ovn_metadata.pp +++ b/manifests/profile/base/neutron/ovn_metadata.pp @@ -19,7 +19,8 @@ # === Parameters # # [*ovn_db_host*] -# The IP-Address where OVN DBs are listening. +# The IP-Address where OVN DBs are listening. If passed a list it will construct +# a comma separated string like protocol:ip1:port,protocol:ip2:port. # Defaults to hiera('ovn_dbs_vip') # # [*ovn_sb_port*] @@ -65,8 +66,15 @@ class tripleo::profile::base::neutron::ovn_metadata ( ) { if $step >= 4 { include tripleo::profile::base::neutron + + if is_string($ovn_db_host) { + $ovn_sb_connection_real = join(["${protocol}", normalize_ip_for_uri($ovn_db_host), "${ovn_sb_port}"], ':') + } elsif is_array($ovn_db_host) { + $ovn_sb_connection_real = join($ovn_db_host.map |$i| { "${protocol}:${normalize_ip_for_uri($i)}:${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 => $ovn_sb_connection_real, 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..bd7cd6fdc 100644 --- a/manifests/profile/base/neutron/plugins/ml2/ovn.pp +++ b/manifests/profile/base/neutron/plugins/ml2/ovn.pp @@ -17,7 +17,8 @@ # OVN Neutron ML2 profile for tripleo # # [*ovn_db_host*] -# The IP-Address where OVN DBs are listening. +# The IP-Address where OVN DBs are listening. If passed a list it will construct +# a comma separated string like protocol:ip1:port,protocol:ip2:port. # Defaults to hiera('ovn_dbs_vip') # # [*ovn_nb_port*] @@ -79,9 +80,16 @@ class tripleo::profile::base::neutron::plugins::ml2::ovn ( $step = Integer(hiera('step')) ) { if $step >= 4 { + if is_string($ovn_db_host) { + $ovn_nb_connection_real = join(["${protocol}", normalize_ip_for_uri($ovn_db_host), "${ovn_nb_port}"], ':') + $ovn_sb_connection_real = join(["${protocol}", normalize_ip_for_uri($ovn_db_host), "${ovn_sb_port}"], ':') + } elsif is_array($ovn_db_host) { + $ovn_nb_connection_real = join($ovn_db_host.map |$i| { "${protocol}:${normalize_ip_for_uri($i)}:${ovn_nb_port}" }, ',') + $ovn_sb_connection_real = join($ovn_db_host.map |$i| { "${protocol}:${normalize_ip_for_uri($i)}:${ovn_sb_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 => $ovn_nb_connection_real, + ovn_sb_connection => $ovn_sb_connection_real, ovn_nb_private_key => $ovn_nb_private_key, ovn_nb_certificate => $ovn_nb_certificate, ovn_nb_ca_cert => $ovn_nb_ca_cert,