Introduce variable to allow different DVR modes

This feature replaces splitting of compute hosts into inner
and external with a new variable 'neutron_compute_dvr_mode'
that controls whether computes will have full-blown DVR or
internal only (tenant) networking.

Change-Id: I6720ccfcfcec89f9996d4cb5ae60f31eb3113667
Implements: blueprint dvr-mode-property
This commit is contained in:
Vladislav Belogrudov 2018-04-02 14:04:08 +03:00
parent 6ebbf4fdf1
commit 1c1d6e20c1
7 changed files with 51 additions and 16 deletions

View File

@ -631,7 +631,9 @@ neutron_type_drivers: "flat,vlan,vxlan"
# NOTE: for ironic this list should also contain 'flat'
neutron_tenant_network_types: "vxlan"
computes_need_external_bridge: "{{ enable_neutron_dvr | bool or enable_neutron_provider_networks | bool or enable_opendaylight | bool and neutron_plugin_agent != 'vmware_dvs' }}"
# valid values: ["dvr", "dvr_no_external"]
neutron_compute_dvr_mode: "dvr"
computes_need_external_bridge: "{{ enable_neutron_dvr | bool and (neutron_compute_dvr_mode == 'dvr' or inventory_hostname in groups['external-compute']) or enable_neutron_provider_networks | bool or enable_opendaylight | bool and neutron_plugin_agent != 'vmware_dvs' }}"
#######################
# Nova options

View File

@ -7,11 +7,15 @@ localhost ansible_connection=local
localhost ansible_connection=local
# inner-compute is the groups of compute nodes which do not have
# external reachability
# external reachability.
# DEPRECATED, the group will be removed in S release of OpenStack,
# use variable neutron_compute_dvr_mode instead.
[inner-compute]
# external-compute is the groups of compute nodes which can reach
# outside
# outside.
# DEPRECATED, the group will be removed in S release of OpenStack,
# use variable neutron_compute_dvr_mode instead.
[external-compute]
localhost ansible_connection=local

View File

@ -16,11 +16,15 @@ network01
network02
# inner-compute is the groups of compute nodes which do not have
# external reachability
# external reachability.
# DEPRECATED, the group will be removed in S release of OpenStack,
# use variable neutron_compute_dvr_mode instead.
[inner-compute]
# external-compute is the groups of compute nodes which can reach
# outside
# outside.
# DEPRECATED, the group will be removed in S release of OpenStack,
# use variable neutron_compute_dvr_mode instead.
[external-compute]
compute01

View File

@ -47,3 +47,13 @@
when: item not in type_drivers
run_once: true
with_items: "{{ tenant_network_types }}"
- name: Checking for deprecated inner- and external-compute groups
local_action:
module: debug
msg: "WARNING: inner- and external-compute groups are DEPRECATED"
changed_when: false
run_once: True
when:
- (groups['inner-compute'] | default([]) | length > 0
or groups['external-compute'] | default([]) | length > 0)

View File

@ -7,6 +7,8 @@ agent_mode = dvr_snat
agent_mode = dvr
{% elif inventory_hostname in groups['inner-compute'] %}
agent_mode = dvr_no_external
{% elif inventory_hostname in groups['compute'] %}
agent_mode = {{ neutron_compute_dvr_mode }}
{% endif %}
{% else %}
agent_mode = legacy

View File

@ -0,0 +1,23 @@
---
features:
- |
[`blueprint Replace inner-/external computes with a dvr mode variable <https://blueprints.launchpad.net/kolla-ansible/+spec/dvr_mode_property>`_]
A new variable "neutron_compute_dvr_mode" is introduced. This variable
controls whether a compute host has external connection and is
allowed to do full-blown DVR or distributed routing is only used for
tenant networking. Corresponding values are "dvr" and "dvr_no_external"
The variable has to be set either globally or per group (per host)
to get desired behavior.
upgrade:
- |
All hosts from "[inner-compute]" and "[external-compute]" can be moved to
"[compute]" to avoid problems in OpenStack S release, though the groups
still will function well in this release.
deprecations:
- |
Splitting of compute group into inner and external compute hosts is
deprecated and will be removed in OpenStack S release.
fixes:
- |
External bridge setup on compute hosts that depends on whether DVR mode
is enabled is also accompanied by a check for the new variable.

View File

@ -10,21 +10,11 @@
{{ host }} ansible_host={{ hostvars[host]['ansible_host'] }} ansible_become=true ansible_user={{ hostvars[host]['ansible_user'] }}
{% endfor %}
# inner-compute is the groups of compute nodes which do not have
# external reachability
[inner-compute]
# external-compute is the groups of compute nodes which can reach
# outside
[external-compute]
[compute]
{% for host in hostvars %}
{{ host }} ansible_host={{ hostvars[host]['ansible_host'] }} ansible_become=true ansible_user={{ hostvars[host]['ansible_user'] }}
{% endfor %}
[compute:children]
inner-compute
external-compute
[storage]
{% for host in hostvars %}
{{ host }} ansible_host={{ hostvars[host]['ansible_host'] }} ansible_become=true ansible_user={{ hostvars[host]['ansible_user'] }}