From 4516e0cf9cbf22c78b07e7df6dda2f46afbd99ff Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Mon, 29 Nov 2021 23:57:21 +0900 Subject: [PATCH] Support more [networking] parameters This change introduces the new octavia::networking class to manage parameters in the [networking] section. Change-Id: Ic75b471a4853b5176804ff6163c24285ce2703ba --- manifests/controller.pp | 20 +++-- manifests/networking.pp | 86 +++++++++++++++++++ .../notes/networking-d136ed112f3cdfe8.yaml | 10 +++ spec/classes/octavia_networking_spec.rb | 80 +++++++++++++++++ 4 files changed, 190 insertions(+), 6 deletions(-) create mode 100644 manifests/networking.pp create mode 100644 releasenotes/notes/networking-d136ed112f3cdfe8.yaml create mode 100644 spec/classes/octavia_networking_spec.rb diff --git a/manifests/controller.pp b/manifests/controller.pp index 05fc878d..e759408a 100644 --- a/manifests/controller.pp +++ b/manifests/controller.pp @@ -115,10 +115,6 @@ # (optional) Retry threshold for waiting for a build slot for an amphorae. # Defaults to $::os_service_default # -# [*port_detach_timeout*] -# (optional) Seconds to wait for a port to detach from an amphora. -# Defaults to $::os_service_default -# # [*admin_log_targets*] # (optional) The list of syslog endpoints, host:port comma separated list, # to receive administrative log messages. @@ -178,6 +174,12 @@ # (optional) Number of gratuitous ARP announcements to make on each refresh interval. # Defaults to $::os_service_default # +# DEPRECATED PARAMETERS +# +# [*port_detach_timeout*] +# (optional) Seconds to wait for a port to detach from an amphora. +# Defaults to undef +# class octavia::controller ( $amp_active_retries = $::os_service_default, $amp_active_wait_sec = $::os_service_default, @@ -204,7 +206,6 @@ class octavia::controller ( $connection_logging = $::os_service_default, $build_rate_limit = $::os_service_default, $build_active_retries = $::os_service_default, - $port_detach_timeout = $::os_service_default, $admin_log_targets = $::os_service_default, $administrative_log_facility = $::os_service_default, $forward_all_logs = $::os_service_default, @@ -218,11 +219,19 @@ class octavia::controller ( $vrrp_success_count = $::os_service_default, $vrrp_garp_refresh_interval = $::os_service_default, $vrrp_garp_refresh_count = $::os_service_default, + # DEPRECATED PARAMETERS + $port_detach_timeout = undef, ) inherits octavia::params { include octavia::deps include octavia::db + if $port_detach_timeout != undef { + warning('The octavia::controller::port_detach_timeout parameter is deprecated. \ +Use the octavia::networking class instead') + } + include octavia::networking + if ! is_service_default($loadbalancer_topology) and ! ($loadbalancer_topology in ['SINGLE', 'ACTIVE_STANDBY']) { fail('load balancer topology must be one of SINGLE or ACTIVE_STANDBY') @@ -259,7 +268,6 @@ class octavia::controller ( 'haproxy_amphora/connection_logging' : value => $connection_logging; 'haproxy_amphora/build_rate_limit' : value => $build_rate_limit; 'haproxy_amphora/build_active_retries' : value => $build_active_retries; - 'networking/port_detach_timeout' : value => $port_detach_timeout; 'amphora_agent/admin_log_targets' : value => join(any2array($admin_log_targets), ','); 'amphora_agent/administrative_log_facility' : value => $administrative_log_facility; 'amphora_agent/forward_all_logs' : value => $forward_all_logs; diff --git a/manifests/networking.pp b/manifests/networking.pp new file mode 100644 index 00000000..172978ca --- /dev/null +++ b/manifests/networking.pp @@ -0,0 +1,86 @@ +# == Class: octavia::networking +# +# Setup and configure octavia.conf networking section. +# +# === Parameters: +# +# [*max_retries*] +# (Optional) The maximum attempts to retry an acction with the networking +# service. +# Defaults to $::os_service_default +# +# [*retry_interval*] +# (Optional) Seocnds to wait before retrying an action with the networking +# service. +# Defaults to $::os_service_default +# +# [*retry_backoff*] +# (Optional) The seconds to backoff retry attempts. +# Defaults to $::os_service_default +# +# [*retry_max*] +# (Optional) The maximum interval in seconds between retry attempts. +# Defaults to $::os_service_default +# +# [*port_detach_timeout*] +# (Optional) Seconds to wait for a port to detach from an amphora. +# Defaults to $::os_service_default +# +# [*allow_vip_network_id*] +# (Optional) Can users supply a network_id for their VIP? +# Defaults to $::os_service_default +# +# [*allow_vip_subnet_id*] +# (Optional) Can users supply a subnet_id for their VIP? +# Defaults to $::os_service_default +# +# [*allow_vip_port_id*] +# (Optional) Can users supply a port_id for their VIP? +# Defaults to $::os_service_default +# +# [*valid_vip_networks*] +# (Optional) List of network_ids that are valid for VIP creation. +# Defaoutls to $::os_service_default +# +# [*reserved_ips*] +# (Optional) List of IP addresses reserved from being used for member +# addresses. +# Defaults to $::os_service_default +# +# [*allow_invisible_resource_usage*] +# (Optional) When True, users can use netwokr resources they cannot normally +# see as VIP or member subnets. +# Defaults to $::os_service_default +# +class octavia::networking ( + $max_retries = $::os_service_default, + $retry_interval = $::os_service_default, + $retry_backoff = $::os_service_default, + $retry_max = $::os_service_default, + $port_detach_timeout = $::os_service_default, + $allow_vip_network_id = $::os_service_default, + $allow_vip_subnet_id = $::os_service_default, + $allow_vip_port_id = $::os_service_default, + $valid_vip_networks = $::os_service_default, + $reserved_ips = $::os_service_default, + $allow_invisible_resource_usage = $::os_service_default, +) { + + include octavia::deps + + $port_detach_timeout_real = pick($::octavia::controller::port_detach_timeout, $port_detach_timeout) + + octavia_config { + 'networking/max_retries': value => $max_retries; + 'networking/retry_interval': value => $retry_interval; + 'networking/retry_backoff': value => $retry_backoff; + 'networking/retry_max': value => $retry_max; + 'networking/port_detach_timeout': value => $port_detach_timeout_real; + 'networking/allow_vip_network_id': value => $allow_vip_network_id; + 'networking/allow_vip_subnet_id': value => $allow_vip_subnet_id; + 'networking/allow_vip_port_id': value => $allow_vip_port_id; + 'networking/valid_vip_networks': value => join(any2array($valid_vip_networks), ','); + 'networking/reserved_ips': value => join(any2array($reserved_ips), ','); + 'networking/allow_invisible_resource_usage': value => $allow_invisible_resource_usage; + } +} diff --git a/releasenotes/notes/networking-d136ed112f3cdfe8.yaml b/releasenotes/notes/networking-d136ed112f3cdfe8.yaml new file mode 100644 index 00000000..38c068c6 --- /dev/null +++ b/releasenotes/notes/networking-d136ed112f3cdfe8.yaml @@ -0,0 +1,10 @@ +--- +features: + - | + The new ``octavia::networking`` class has been added. + +deprecations: + - | + The ``octavia::controller::port_detach_timeout`` parameter has been + deprecated in favor of the new ``octavia::networking::port_detach_timeout`` + parameter. diff --git a/spec/classes/octavia_networking_spec.rb b/spec/classes/octavia_networking_spec.rb new file mode 100644 index 00000000..2c95dee2 --- /dev/null +++ b/spec/classes/octavia_networking_spec.rb @@ -0,0 +1,80 @@ +require 'spec_helper' + +describe 'octavia::networking' do + shared_examples 'octavia::networking' do + context 'with default parameters' do + it { + should contain_octavia_config('networking/max_retries').with_value('') + should contain_octavia_config('networking/retry_interval').with_value('') + should contain_octavia_config('networking/retry_backoff').with_value('') + should contain_octavia_config('networking/retry_max').with_value('') + should contain_octavia_config('networking/port_detach_timeout').with_value('') + should contain_octavia_config('networking/allow_vip_network_id').with_value('') + should contain_octavia_config('networking/allow_vip_subnet_id').with_value('') + should contain_octavia_config('networking/allow_vip_port_id').with_value('') + should contain_octavia_config('networking/valid_vip_networks').with_value('') + should contain_octavia_config('networking/reserved_ips').with_value('') + should contain_octavia_config('networking/allow_invisible_resource_usage').with_value('') + } + end + + context 'with parameters set' do + let :params do + { + :max_retries => 15, + :retry_interval => 1, + :retry_backoff => 2, + :retry_max => 10, + :port_detach_timeout => 300, + :allow_vip_network_id => true, + :allow_vip_subnet_id => true, + :allow_vip_port_id => true, + :valid_vip_networks => 'net1,net2', + :reserved_ips => '169.254.169.254', + :allow_invisible_resource_usage => false + } + end + + it { + should contain_octavia_config('networking/max_retries').with_value(15) + should contain_octavia_config('networking/retry_interval').with_value(1) + should contain_octavia_config('networking/retry_backoff').with_value(2) + should contain_octavia_config('networking/retry_max').with_value(10) + should contain_octavia_config('networking/port_detach_timeout').with_value(300) + should contain_octavia_config('networking/allow_vip_network_id').with_value(true) + should contain_octavia_config('networking/allow_vip_subnet_id').with_value(true) + should contain_octavia_config('networking/allow_vip_port_id').with_value(true) + should contain_octavia_config('networking/valid_vip_networks').with_value('net1,net2') + should contain_octavia_config('networking/reserved_ips').with_value('169.254.169.254') + should contain_octavia_config('networking/allow_invisible_resource_usage').with_value(false) + } + end + + context 'with array values' do + let :params do + { + :valid_vip_networks => ['net1', 'net2'], + :reserved_ips => ['169.254.169.254', '192.168.0.1'], + } + end + + it { + should contain_octavia_config('networking/valid_vip_networks').with_value('net1,net2') + should contain_octavia_config('networking/reserved_ips').with_value('169.254.169.254,192.168.0.1') + } + 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 + + it_behaves_like 'octavia::networking' + end + end + +end