diff --git a/deployment/neutron/neutron-ovn-dpdk-config-container-puppet.yaml b/deployment/neutron/neutron-ovn-dpdk-config-container-puppet.yaml new file mode 100644 index 0000000000..6751db00d0 --- /dev/null +++ b/deployment/neutron/neutron-ovn-dpdk-config-container-puppet.yaml @@ -0,0 +1,91 @@ +heat_template_version: rocky + +description: > + OpenStack Neutron ML2/OVN DPDK Configured with puppet + +parameters: + ServiceData: + default: {} + description: Dictionary packing service data + type: json + ServiceNetMap: + default: {} + description: Mapping of service_name -> network name. Typically set + via parameter_defaults in the resource registry. This + mapping overrides those in ServiceNetMapDefaults. + type: json + DefaultPasswords: + default: {} + type: json + RoleName: + default: '' + description: Role name on which the service is applied + type: string + RoleParameters: + default: {} + description: Parameters specific to the role + type: json + EndpointMap: + default: {} + description: Mapping of service endpoint -> protocol. Typically set + via parameter_defaults in the resource registry. + type: json + VhostuserSocketGroup: + default: "qemu" + description: > + The vhost-user socket directory group name. + Defaults to 'qemu'. When vhostuser mode is 'dpdkvhostuserclient' + (which is the default mode), the vhost socket is created by qemu. + type: string + tags: + - role_specific + VhostuserSocketUser: + default: "qemu" + description: > + The vhost-user socket directory user name. + Defaults to 'qemu'. When vhostuser mode is 'dpdkvhostuserclient' + (which is the default mode), the vhost socket is created by qemu. + type: string + tags: + - role_specific + +resources: + + # Merging role-specific parameters (RoleParameters) with the default parameters. + # RoleParameters will have the precedence over the default parameters. + RoleParametersValue: + type: OS::Heat::Value + properties: + type: json + value: + map_replace: + - map_replace: + - vhostuser_socket_group: VhostuserSocketGroup + vhostuser_socket_user: VhostuserSocketUser + - values: {get_param: [RoleParameters]} + - values: + VhostuserSocketGroup: {get_param: VhostuserSocketGroup} + VhostuserSocketUser: {get_param: VhostuserSocketUser} + + Ovs: + type: ../../puppet/services/openvswitch.yaml + properties: + ServiceNetMap: {get_param: ServiceNetMap} + DefaultPasswords: {get_param: DefaultPasswords} + EndpointMap: {get_param: EndpointMap} + RoleName: {get_param: RoleName} + RoleParameters: {get_param: RoleParameters} + +outputs: + role_data: + description: Role data for Neutron ML2/OVN DPDK config + value: + service_name: neutron_ovn_dpdk + config_settings: + map_merge: + - ovn::controller::enable_dpdk: true + ovn::controller::datapath_type: "netdev" + nova::compute::libvirt::qemu::group: {get_attr: [RoleParametersValue, value, vhostuser_socket_group]} + - get_attr: [RoleParametersValue, value] + - get_attr: [Ovs, role_data, config_settings] + diff --git a/deployment/ovn/ovn-controller-container-puppet.yaml b/deployment/ovn/ovn-controller-container-puppet.yaml index 87b456930e..f535bc30f2 100644 --- a/deployment/ovn/ovn-controller-container-puppet.yaml +++ b/deployment/ovn/ovn-controller-container-puppet.yaml @@ -147,6 +147,8 @@ outputs: volumes: - /lib/modules:/lib/modules:ro - /run/openvswitch:/run/openvswitch:shared,z + # Needed for creating module load files + - /etc/sysconfig/modules:/etc/sysconfig/modules kolla_config: /var/lib/kolla/config_files/ovn_controller.json: command: /usr/bin/ovn-controller --pidfile --log-file unix:/run/openvswitch/db.sock diff --git a/environments/services/neutron-ovn-dpdk.yaml b/environments/services/neutron-ovn-dpdk.yaml new file mode 100644 index 0000000000..cf1600cc7d --- /dev/null +++ b/environments/services/neutron-ovn-dpdk.yaml @@ -0,0 +1,7 @@ +# Environment file to enable DPDK with ovn. In addition to the ovn environment files, +# use this environment file to enable DPDK on roles with ComputeNeutronOvsDpdk service. +resource_registry: + OS::TripleO::Services::ComputeNeutronOvsDpdk: ../../deployment/neutron/neutron-ovn-dpdk-config-container-puppet.yaml + +parameter_defaults: + NeutronVhostuserSocketDir: /var/lib/vhost_sockets diff --git a/extraconfig/pre_network/host_config_and_reboot.yaml b/extraconfig/pre_network/host_config_and_reboot.yaml index bd9687e3ea..3058ebbc16 100644 --- a/extraconfig/pre_network/host_config_and_reboot.yaml +++ b/extraconfig/pre_network/host_config_and_reboot.yaml @@ -85,7 +85,7 @@ conditions: is_dpdk_config_required: or: - yaql: - expression: $.data.service_names.contains('neutron_ovs_dpdk_agent') + expression: $.data.service_names.contains('neutron_ovs_dpdk_agent') or $.data.service_names.contains('neutron_ovn_dpdk') data: service_names: {get_param: ServiceNames} - {equals: [{get_param: [RoleParameters, OvsEnableDpdk]}, true]} diff --git a/puppet/services/neutron-plugin-ml2-ovn.yaml b/puppet/services/neutron-plugin-ml2-ovn.yaml index 33317cf3f3..a99d7fe70c 100644 --- a/puppet/services/neutron-plugin-ml2-ovn.yaml +++ b/puppet/services/neutron-plugin-ml2-ovn.yaml @@ -85,9 +85,19 @@ parameters: default: [] description: List of servers to use as as dns forwarders type: comma_delimited_list + NeutronVhostuserSocketDir: + default: "" + description: The vhost-user socket directory for OVS + type: string + tags: + - role_specific conditions: neutron_dvr_unset: {equals : [{get_param: NeutronEnableDVR}, '']} + vhostuser_dir_set: + or: + - {not: {equals: [{get_param: NeutronVhostuserSocketDir}, ""]}} + - {not: {equals: [{get_param: [RoleParameters, NeutronVhostuserSocketDir]}, ""]}} resources: @@ -124,6 +134,17 @@ outputs: - neutron_dvr_unset - neutron::plugins::ml2::ovn::dvr_enabled: true - neutron::plugins::ml2::ovn::dvr_enabled: {get_param: NeutronEnableDVR} + - + if: + - vhostuser_dir_set + - map_replace: + - map_replace: + - neutron::plugins::ml2::ovn::vhostuser_socket_dir: NeutronVhostuserSocketDir + - values: {get_param: RoleParameters} + - values: + NeutronVhostuserSocketDir: {get_param: NeutronVhostuserSocketDir} + - {} + step_config: | include ::tripleo::profile::base::neutron::plugins::ml2 metadata_settings: diff --git a/releasenotes/notes/ovn-dpdk-15e8747068682f91.yaml b/releasenotes/notes/ovn-dpdk-15e8747068682f91.yaml new file mode 100644 index 0000000000..00dc3f64c2 --- /dev/null +++ b/releasenotes/notes/ovn-dpdk-15e8747068682f91.yaml @@ -0,0 +1,3 @@ +--- +features: + - Added OVN-DPDK support diff --git a/roles/ComputeOvsDpdk.yaml b/roles/ComputeOvsDpdk.yaml index d334b0c71d..b41d223dae 100644 --- a/roles/ComputeOvsDpdk.yaml +++ b/roles/ComputeOvsDpdk.yaml @@ -48,6 +48,7 @@ - OS::TripleO::Services::NovaMigrationTarget - OS::TripleO::Services::ContainersLogrotateCrond - OS::TripleO::Services::OpenDaylightOvs + - OS::TripleO::Services::OVNController - OS::TripleO::Services::OVNMetadataAgent - OS::TripleO::Services::Podman - OS::TripleO::Services::Rhsm diff --git a/roles/ComputeOvsDpdkRT.yaml b/roles/ComputeOvsDpdkRT.yaml index 2fc43e5c07..8f7fe215e8 100644 --- a/roles/ComputeOvsDpdkRT.yaml +++ b/roles/ComputeOvsDpdkRT.yaml @@ -48,6 +48,7 @@ - OS::TripleO::Services::NovaMigrationTarget - OS::TripleO::Services::ContainersLogrotateCrond - OS::TripleO::Services::OpenDaylightOvs + - OS::TripleO::Services::OVNController - OS::TripleO::Services::OVNMetadataAgent - OS::TripleO::Services::Podman - OS::TripleO::Services::Rhsm diff --git a/roles/ComputeOvsDpdkSriov.yaml b/roles/ComputeOvsDpdkSriov.yaml index 5897ce39d3..f4293f6347 100644 --- a/roles/ComputeOvsDpdkSriov.yaml +++ b/roles/ComputeOvsDpdkSriov.yaml @@ -46,6 +46,7 @@ - OS::TripleO::Services::NovaMigrationTarget - OS::TripleO::Services::ContainersLogrotateCrond - OS::TripleO::Services::OpenDaylightOvs + - OS::TripleO::Services::OVNController - OS::TripleO::Services::OVNMetadataAgent - OS::TripleO::Services::Rhsm - OS::TripleO::Services::RsyslogSidecar diff --git a/roles/ComputeOvsDpdkSriovRT.yaml b/roles/ComputeOvsDpdkSriovRT.yaml index dfcc7513f6..0211421079 100644 --- a/roles/ComputeOvsDpdkSriovRT.yaml +++ b/roles/ComputeOvsDpdkSriovRT.yaml @@ -47,6 +47,7 @@ - OS::TripleO::Services::NovaMigrationTarget - OS::TripleO::Services::ContainersLogrotateCrond - OS::TripleO::Services::OpenDaylightOvs + - OS::TripleO::Services::OVNController - OS::TripleO::Services::OVNMetadataAgent - OS::TripleO::Services::Rhsm - OS::TripleO::Services::RsyslogSidecar