diff --git a/multi-node-aio/README.rst b/multi-node-aio/README.rst index 2d389d36..a08ac7c7 100644 --- a/multi-node-aio/README.rst +++ b/multi-node-aio/README.rst @@ -48,6 +48,19 @@ Physical Host Specs known to work well 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 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 diff --git a/multi-node-aio/playbooks/deploy-osa.yml b/multi-node-aio/playbooks/deploy-osa.yml index e25938fb..2b3c11ae 100644 --- a/multi-node-aio/playbooks/deploy-osa.yml +++ b/multi-node-aio/playbooks/deploy-osa.yml @@ -51,6 +51,16 @@ when: - 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 shell: >- rsync @@ -98,6 +108,39 @@ - pre_config_osa | default(true) | 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 template: src: "osa/elk-envd.yml" diff --git a/multi-node-aio/playbooks/group_vars/all.yml b/multi-node-aio/playbooks/group_vars/all.yml index c7f6d9ca..378a1f22 100644 --- a/multi-node-aio/playbooks/group_vars/all.yml +++ b/multi-node-aio/playbooks/group_vars/all.yml @@ -154,6 +154,7 @@ osa_enable_compute: true osa_enable_orchestration: true osa_enable_dashboard: true osa_enable_network: true +osa_enable_networking_ovn: false osa_enable_meter: false 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) }}" diff --git a/multi-node-aio/playbooks/openstack-service-setup.yml b/multi-node-aio/playbooks/openstack-service-setup.yml index 6ec38b03..d6a70ad9 100644 --- a/multi-node-aio/playbooks/openstack-service-setup.yml +++ b/multi-node-aio/playbooks/openstack-service-setup.yml @@ -50,9 +50,23 @@ provider_network_type: "{{ item.network_type }}" provider_physical_network: "{{ item.physical_network | default ('') }}" with_items: "{{ networks }}" + when: not (osa_enable_networking_ovn | bool) tags: - 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 os_subnet: endpoint_type: internal diff --git a/multi-node-aio/playbooks/osa/neutron-ovn-envd.yml b/multi-node-aio/playbooks/osa/neutron-ovn-envd.yml new file mode 100644 index 00000000..288955f3 --- /dev/null +++ b/multi-node-aio/playbooks/osa/neutron-ovn-envd.yml @@ -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 diff --git a/multi-node-aio/playbooks/osa/nova-ovn-envd.yml b/multi-node-aio/playbooks/osa/nova-ovn-envd.yml new file mode 100644 index 00000000..cb52594d --- /dev/null +++ b/multi-node-aio/playbooks/osa/nova-ovn-envd.yml @@ -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 diff --git a/multi-node-aio/playbooks/osa/openstack_user_config.yml b/multi-node-aio/playbooks/osa/openstack_user_config.yml index e3d543ab..5cefb56d 100644 --- a/multi-node-aio/playbooks/osa/openstack_user_config.yml +++ b/multi-node-aio/playbooks/osa/openstack_user_config.yml @@ -30,6 +30,37 @@ global_overrides: - hosts is_container_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: container_bridge: "br-vxlan" container_type: "veth" @@ -40,6 +71,15 @@ global_overrides: net_name: "vxlan" group_binds: - 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: container_bridge: "br-flat" container_type: "veth" @@ -50,15 +90,7 @@ global_overrides: group_binds: - neutron_linuxbridge_agent - utility_all - - network: - container_bridge: "br-vlan" - container_type: "veth" - container_interface: "eth11" - type: "vlan" - range: "1:1" - net_name: "vlan" - group_binds: - - neutron_linuxbridge_agent +{% endif %} - network: container_bridge: "br-storage" container_type: "veth" diff --git a/multi-node-aio/playbooks/osa/ovs_network_hosts_group.yml b/multi-node-aio/playbooks/osa/ovs_network_hosts_group.yml new file mode 100644 index 00000000..3d3ab25c --- /dev/null +++ b/multi-node-aio/playbooks/osa/ovs_network_hosts_group.yml @@ -0,0 +1,4 @@ +# Ensure the openvswitch kernel module is loaded +openstack_host_specific_kernel_modules: + - name: "openvswitch" + pattern: "CONFIG_OPENVSWITCH" diff --git a/multi-node-aio/playbooks/osa/user_mnaio_variables.yml b/multi-node-aio/playbooks/osa/user_mnaio_variables.yml index 07d4bff1..d43de270 100644 --- a/multi-node-aio/playbooks/osa/user_mnaio_variables.yml +++ b/multi-node-aio/playbooks/osa/user_mnaio_variables.yml @@ -189,3 +189,12 @@ magnum_api_uwsgi_ini_overrides: uwsgi: stats: "/tmp/magnum-api-uwsgi-stats.sock" {% 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 %} diff --git a/multi-node-aio/playbooks/vars/openstack-service-config.yml b/multi-node-aio/playbooks/vars/openstack-service-config.yml index bedfc242..7214ad06 100644 --- a/multi-node-aio/playbooks/vars/openstack-service-config.yml +++ b/multi-node-aio/playbooks/vars/openstack-service-config.yml @@ -75,6 +75,18 @@ networks: network_type: vxlan 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: - name: "{{ provider_subnet_name }}" network_name: "{{ provider_net_name }}"