Add Availability Zone variables

At the moment the only way to configure multi-AZ support in Neutron were
config overrides, which work quite nicely with LXB/OVS scenarios. However,
with OVN changing configuration is not enough, and command that sets
up OVN Gateway should provide extra CMS option.

In order to improve AZ support in Neutron role, we add couple of variables
that control behaviour and allow to perform required configuration without
config overrides for OVS/LXB/OVN.

Co-Authored-By: Danila Balagansky <dbalagansky@me.com>
Closes-Bug: #2002040
Change-Id: Ic964329c06765176692f7b0c32f33ec46360a3fb
This commit is contained in:
Dmitriy Rabotyagov 2024-01-03 15:02:31 +01:00
parent ef4d327855
commit 70bb847605
6 changed files with 39 additions and 2 deletions

View File

@ -334,6 +334,18 @@ neutron_keystone_auth_plugin: "{{ neutron_keystone_auth_type }}"
neutron_keystone_auth_type: password
neutron_service_in_ldap: "{{ service_ldap_backend_enabled | default(False) }}"
###
### Availability zones
###
# Default availability zones do define a list of zones to where routers/agents
# will be scheduled by default. This is a list, since a deployment might stretch
# networks across AZs
neutron_default_availability_zones: []
# Availability zone defines current AZ of the component. For OVN you can define
# multiple AZs separated with a colon, ie "az1:az2"
neutron_availability_zone: nova
###
### Telemetry integration
###

View File

@ -0,0 +1,12 @@
---
features:
- |
Added extra variables to Neutron role for Availability Zones configuration:
* ``neutron_default_availability_zones`` - defines a list of AZs where
l3/dhcp agents or OVN routers/ports will be scheduled to when hint is
not provided in a request to Neutron API.
* ``neutron_availability_zone`` - Availability Zone of the current
component. It is recommended to leverage group/host_vars for setting
this variable.
For OVN this variable can contain multiple values spearated by colon.

View File

@ -22,7 +22,7 @@
- name: Set CMS Options for Gateway Scheduling
changed_when: false
command: "ovs-vsctl set open . external-ids:ovn-cms-options=enable-chassis-as-gw"
command: "ovs-vsctl set Open_vSwitch . external-ids:ovn-cms-options=enable-chassis-as-gw,availability-zones={{ neutron_availability_zone }}"
when:
- '"neutron_ovn_gateway" in group_names'

View File

@ -18,3 +18,6 @@ dnsmasq_lease_max = {{ neutron_dnsmasq_lease_max }}
# Metadata
enable_isolated_metadata = True
force_metadata = {{ neutron_dnsmasq_force_metadata }}
[AGENT]
availability_zone = {{ neutron_availability_zone }}

View File

@ -47,7 +47,8 @@ vpn_device_driver = {{ neutron_driver_vpnaas }}
{% set _ = l3_agent_plugins.append("port_forwarding") %}
{% endif %}
{% if l3_agent_plugins|length > 0 %}
[AGENT]
{% if l3_agent_plugins | length > 0 %}
extensions = {{ l3_agent_plugins | join(',') }}
{% endif %}
availability_zone = {{ neutron_availability_zone }}

View File

@ -31,6 +31,15 @@ use_ssl = {{ neutron_backend_ssl }}
# General, only applies to neutron server host group
vlan_transparent = False
# Availability zone
{% if neutron_default_availability_zones %}
default_availability_zones = {{ neutron_default_availability_zones | join(',') }}
{% if neutron_default_availability_zones | length > 1 %}
router_scheduler_driver = neutron.scheduler.l3_agent_scheduler.AZLeastRoutersScheduler
network_scheduler_driver = neutron.scheduler.dhcp_agent_scheduler.AZAwareWeightScheduler
{% endif %}
{% endif %}
# Plugins
core_plugin = {{ neutron_plugin_core }}
{% if neutron_plugin_type.split('.')[0] == 'ml2' %}