Add support for OVN in MNAIO deploy

This patch adds support for deploying the ML2/Open Virtual Network (OVN)
plugin for Neutron to an MNAIO deployment. A new var,
osa_enable_networking_ovn, can be set to lay down the appropriate bits.

Change-Id: Ib5bd4e0c20be62ddbf0bff13c91d1918907bf230
This commit is contained in:
James Denton 2019-01-11 19:25:14 +00:00 committed by Kevin Carter (cloudnull)
parent a1d6ebe4d3
commit e6f12e2069
10 changed files with 168 additions and 9 deletions

View File

@ -48,6 +48,19 @@ Physical Host Specs known to work well
These specs are covered by the Rackspace OnMetal-IO v1/2 Servers. These specs are covered by the Rackspace OnMetal-IO v1/2 Servers.
Deployments default to the ML2/LinuxBridge network plugin. Available options
at this time include:
* ML2/LinuxBridge
* ML2/Open Virtual Network (OVN)
To deploy an MNAIO with support for OVN, set the following parameter(s) prior
to executing the build:
.. code-block:: bash
export MNAIO_ANSIBLE_PARAMETERS="-e osa_enable_networking_ovn=true"
./build.sh
When your ready, run the build script by executing ``bash ./build.sh``. The When your ready, run the build script by executing ``bash ./build.sh``. The
build script current executes a deployment of OpenStack Ansible using the master build script current executes a deployment of OpenStack Ansible using the master
branch. If you want to do something other than deploy master you can set the branch. If you want to do something other than deploy master you can set the

View File

@ -51,6 +51,16 @@
when: when:
- pre_config_osa | default(true) | bool - pre_config_osa | default(true) | bool
- name: Create OSA group_vars directory
file:
path: "/etc/openstack_deploy/group_vars"
state: directory
owner: "root"
group: "root"
mode: "0755"
when:
- pre_config_osa | default(true) | bool
- name: Copy default config files and directories - name: Copy default config files and directories
shell: >- shell: >-
rsync rsync
@ -98,6 +108,39 @@
- pre_config_osa | default(true) | bool - pre_config_osa | default(true) | bool
- osa_disable_serial | default(false) | bool - osa_disable_serial | default(false) | bool
- name: Drop OVS group_vars config
template:
src: "osa/ovs_network_hosts_group.yml"
dest: "/etc/openstack_deploy/group_vars/network_hosts"
mode: "0644"
owner: root
group: root
when:
- pre_config_osa | default(true) | bool
- osa_enable_networking_ovn | default(false) | bool
- name: Drop NEUTRON OVN env.d config
template:
src: "osa/neutron-ovn-envd.yml"
dest: "/etc/openstack_deploy/env.d/neutron.yml"
mode: "0644"
owner: root
group: root
when:
- pre_config_osa | default(true) | bool
- osa_enable_networking_ovn | default(false) | bool
- name: Drop NOVA OVN env.d config
template:
src: "osa/nova-ovn-envd.yml"
dest: "/etc/openstack_deploy/env.d/nova.yml"
mode: "0644"
owner: root
group: root
when:
- pre_config_osa | default(true) | bool
- osa_enable_networking_ovn | default(false) | bool
- name: Drop ELK env.d config - name: Drop ELK env.d config
template: template:
src: "osa/elk-envd.yml" src: "osa/elk-envd.yml"

View File

@ -154,6 +154,7 @@ osa_enable_compute: true
osa_enable_orchestration: true osa_enable_orchestration: true
osa_enable_dashboard: true osa_enable_dashboard: true
osa_enable_network: true osa_enable_network: true
osa_enable_networking_ovn: false
osa_enable_meter: false osa_enable_meter: false
osa_enable_object_storage: "{{ not (enable_ceph_storage | bool) }}" osa_enable_object_storage: "{{ not (enable_ceph_storage | bool) }}"
osa_enable_legacy_os_infra: "{{ (osa_enable_image | bool) and (osa_enable_orchestration | bool) and (osa_enable_dashboard | bool) and (osa_enable_compute | bool) }}" osa_enable_legacy_os_infra: "{{ (osa_enable_image | bool) and (osa_enable_orchestration | bool) and (osa_enable_dashboard | bool) and (osa_enable_compute | bool) }}"

View File

@ -50,9 +50,23 @@
provider_network_type: "{{ item.network_type }}" provider_network_type: "{{ item.network_type }}"
provider_physical_network: "{{ item.physical_network | default ('') }}" provider_physical_network: "{{ item.physical_network | default ('') }}"
with_items: "{{ networks }}" with_items: "{{ networks }}"
when: not (osa_enable_networking_ovn | bool)
tags: tags:
- create_networks - create_networks
- name: Create networks (OVN)
os_network:
endpoint_type: internal
cloud: default
state: present
name: "{{ item.name }}"
shared: "{{ item.shared }}"
external: "{{ item.external }}"
provider_network_type: "{{ item.network_type }}"
provider_physical_network: "{{ item.physical_network | default ('') }}"
with_items: "{{ networks_ovn }}"
when: osa_enable_networking_ovn | default(false) | bool
- name: Create subnets on networks - name: Create subnets on networks
os_subnet: os_subnet:
endpoint_type: internal endpoint_type: internal

View File

@ -0,0 +1,17 @@
---
component_skel:
neutron_ovn_controller:
belongs_to:
- neutron_all
neutron_ovn_northd:
belongs_to:
- neutron_all
container_skel:
neutron_agents_container:
contains: {}
neutron_ovn_northd_container:
belongs_to:
- network_containers
contains:
- neutron_ovn_northd

View File

@ -0,0 +1,14 @@
---
container_skel:
nova_compute_container:
belongs_to:
- compute_containers
- kvm-compute_containers
- lxd-compute_containers
- qemu-compute_containers
- powervm-compute_containers
contains:
- neutron_ovn_controller
- nova_compute
properties:
is_metal: true

View File

@ -30,6 +30,37 @@ global_overrides:
- hosts - hosts
is_container_address: true is_container_address: true
is_ssh_address: true is_ssh_address: true
{% if osa_enable_networking_ovn | bool %}
- network:
container_bridge: "br-vxlan"
container_type: "veth"
container_interface: "eth10"
ip_from_q: "tunnel"
type: "geneve"
range: "1:1000"
net_name: "geneve"
group_binds:
- neutron_ovn_controller
- network:
container_bridge: "br-provider"
container_type: "veth"
container_interface: "eth11"
network_interface: "br-vlan"
type: "vlan"
range: "1:1"
net_name: "vlan"
group_binds:
- neutron_ovn_controller
- network:
container_bridge: "br-provider"
container_type: "veth"
container_interface: "eth12"
network_interface: "br-vlan"
type: "flat"
net_name: "flat"
group_binds:
- neutron_ovn_controller
{% else %}
- network: - network:
container_bridge: "br-vxlan" container_bridge: "br-vxlan"
container_type: "veth" container_type: "veth"
@ -40,6 +71,15 @@ global_overrides:
net_name: "vxlan" net_name: "vxlan"
group_binds: group_binds:
- neutron_linuxbridge_agent - neutron_linuxbridge_agent
- network:
container_bridge: "br-vlan"
container_type: "veth"
container_interface: "eth11"
type: "vlan"
range: "1:1"
net_name: "vlan"
group_binds:
- neutron_linuxbridge_agent
- network: - network:
container_bridge: "br-flat" container_bridge: "br-flat"
container_type: "veth" container_type: "veth"
@ -50,15 +90,7 @@ global_overrides:
group_binds: group_binds:
- neutron_linuxbridge_agent - neutron_linuxbridge_agent
- utility_all - utility_all
- network: {% endif %}
container_bridge: "br-vlan"
container_type: "veth"
container_interface: "eth11"
type: "vlan"
range: "1:1"
net_name: "vlan"
group_binds:
- neutron_linuxbridge_agent
- network: - network:
container_bridge: "br-storage" container_bridge: "br-storage"
container_type: "veth" container_type: "veth"

View File

@ -0,0 +1,4 @@
# Ensure the openvswitch kernel module is loaded
openstack_host_specific_kernel_modules:
- name: "openvswitch"
pattern: "CONFIG_OPENVSWITCH"

View File

@ -189,3 +189,12 @@ magnum_api_uwsgi_ini_overrides:
uwsgi: uwsgi:
stats: "/tmp/magnum-api-uwsgi-stats.sock" stats: "/tmp/magnum-api-uwsgi-stats.sock"
{% endif %} {% endif %}
{% if osa_enable_networking_ovn | bool %}
neutron_plugin_type: ml2.ovn
neutron_plugin_base:
- networking_ovn.l3.l3_ovn.OVNL3RouterPlugin
neutron_ml2_drivers_type: "vlan,local,flat,geneve"
{% endif %}

View File

@ -75,6 +75,18 @@ networks:
network_type: vxlan network_type: vxlan
segmentation_id: 101 segmentation_id: 101
networks_ovn:
- name: "{{ provider_net_name }}"
shared: true
external: true
network_type: flat
physical_network: flat
- name: "{{ private_net_name }}"
shared: true
external: true
network_type: geneve
segmentation_id: 101
subnets: subnets:
- name: "{{ provider_subnet_name }}" - name: "{{ provider_subnet_name }}"
network_name: "{{ provider_net_name }}" network_name: "{{ provider_net_name }}"