From eb8a42e911bad92145e5bd09c58ba8f760e0bc74 Mon Sep 17 00:00:00 2001 From: Mark Goddard Date: Thu, 11 May 2017 19:09:43 +0100 Subject: [PATCH] Support configuration of controller ports for neutron ML2 generic switch driver We use the switch interface configuration to provide a list of interfaces to the neutron ML2 generic switch driver to be configured as trunk ports in each neutron network. These interfaces correspond to the controllers by default, which need access to all of the networks in order to provide services such as DHCP and routing. Related-Bug: #1690115 --- ansible/filter_plugins/switches.py | 40 +++++++++++++++++++ ansible/group_vars/all/neutron | 7 ++++ ansible/kolla-openstack.yml | 19 ++++++--- .../kolla-openstack/templates/ml2_conf.ini.j2 | 3 ++ 4 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 ansible/filter_plugins/switches.py diff --git a/ansible/filter_plugins/switches.py b/ansible/filter_plugins/switches.py new file mode 100644 index 000000000..1f64f5cba --- /dev/null +++ b/ansible/filter_plugins/switches.py @@ -0,0 +1,40 @@ +# Copyright (c) 2017 StackHPC Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import six + + +def switch_interface_config_select_description(switch_interface_config, descriptions): + """Select and return all switch interfaces matching requested descriptions. + + :param switch_interface_config: Switch interface configuration dict + :param descriptions: String or list of strings - descriptions to match + """ + if isinstance(descriptions, six.string_types): + descriptions = [descriptions] + + return { + name: config + for name, config in switch_interface_config.items() + if config.get('description') in descriptions + } + + +class FilterModule(object): + """Switch filters.""" + + def filters(self): + return { + 'switch_interface_config_select_description': switch_interface_config_select_description, + } diff --git a/ansible/group_vars/all/neutron b/ansible/group_vars/all/neutron index a1820be77..4bf60fb46 100644 --- a/ansible/group_vars/all/neutron +++ b/ansible/group_vars/all/neutron @@ -46,3 +46,10 @@ kolla_neutron_ml2_generic_switches: [] # key_file: not currently supported # secret: not currently supported kolla_neutron_ml2_generic_switch_hosts: [] + +# List of Ansible hosts whose switch interfaces are to be configured as tagged +# members of all networks managed by the genericswitch ML2 mechanism driver. +# These hosts will be matched against the description fields in the +# switch_interface_config variable for each switch to determine which +# interfaces should be configured. +kolla_neutron_ml2_generic_switch_trunk_port_hosts: "{{ groups['controllers'] }}" diff --git a/ansible/kolla-openstack.yml b/ansible/kolla-openstack.yml index ebb0986b8..a340d3dbe 100644 --- a/ansible/kolla-openstack.yml +++ b/ansible/kolla-openstack.yml @@ -54,12 +54,19 @@ - name: Update a fact containing switches for use by Neutron ML2 genericswitch driver set_fact: kolla_neutron_ml2_generic_switches: > - {{ kolla_neutron_ml2_generic_switches + - [{'name': item, - 'device_type': switch_type_to_device_type[hostvars[item].switch_type], - 'ip': hostvars[item].ansible_host, - 'username': hostvars[item].ansible_user, - 'password': hostvars[item].ansible_ssh_pass}] }} + {{ + kolla_neutron_ml2_generic_switches + + [{ + 'name': item, + 'device_type': switch_type_to_device_type[hostvars[item].switch_type], + 'ip': hostvars[item].ansible_host, + 'username': hostvars[item].ansible_user, + 'password': hostvars[item].ansible_ssh_pass, + 'ngs_trunk_ports': ( + hostvars[item].switch_interface_config | + switch_interface_config_select_description(kolla_neutron_ml2_generic_switch_trunk_port_hosts)).keys() | join(',') + }] + }} with_items: "{{ kolla_neutron_ml2_generic_switch_hosts }}" tags: - config diff --git a/ansible/roles/kolla-openstack/templates/ml2_conf.ini.j2 b/ansible/roles/kolla-openstack/templates/ml2_conf.ini.j2 index 89abe6032..c4a01b1fc 100644 --- a/ansible/roles/kolla-openstack/templates/ml2_conf.ini.j2 +++ b/ansible/roles/kolla-openstack/templates/ml2_conf.ini.j2 @@ -32,6 +32,9 @@ key_file = {{ switch.key_file }} {% if switch.secret is defined %} secret = {{ switch.secret }} {% endif %} +{% if switch.ngs_trunk_ports is defined %} +ngs_trunk_ports = {{ switch.ngs_trunk_ports }} +{% endif %} {% endfor %}