diff options
-rw-r--r-- | build/network-environment.yaml | 4 | ||||
-rw-r--r-- | build/nics-template.yaml.jinja2 | 23 | ||||
-rw-r--r-- | build/opnfv-environment.yaml | 3 | ||||
-rw-r--r-- | build/ovs-dpdk-preconfig.yaml | 101 | ||||
-rw-r--r-- | build/rpm_specs/opnfv-apex-common.spec | 6 | ||||
-rwxr-xr-x | build/undercloud.sh | 1 | ||||
-rw-r--r-- | build/variables.sh | 11 | ||||
-rw-r--r-- | config/deploy/os-nosdn-ovs-ha.yaml | 4 | ||||
-rw-r--r-- | config/deploy/os-nosdn-ovs-noha.yaml | 4 | ||||
-rw-r--r-- | config/deploy/os-odl_l3-ovs-ha.yaml | 27 | ||||
-rw-r--r-- | config/deploy/os-odl_l3-ovs-noha.yaml | 27 | ||||
-rw-r--r-- | config/network/network_settings.yaml | 15 | ||||
-rwxr-xr-x | lib/overcloud-deploy-functions.sh | 84 | ||||
-rw-r--r-- | lib/python/apex/deploy_settings.py | 2 | ||||
-rw-r--r-- | tests/test_apex_network_settings.py | 9 |
15 files changed, 266 insertions, 55 deletions
diff --git a/build/network-environment.yaml b/build/network-environment.yaml index 8367371b..40f8e3be 100644 --- a/build/network-environment.yaml +++ b/build/network-environment.yaml @@ -44,6 +44,10 @@ resource_registry: OS::TripleO::Services::SwiftRingBuilder: OS::Heat::None OS::TripleO::Services::SwiftProxy: OS::Heat::None + # Extra Config + OS::TripleO::ComputeExtraConfigPre: OS::Heat::None + OS::TripleO::ControllerExtraConfigPre: OS::Heat::None + parameter_defaults: NeutronExternalNetworkBridge: 'br-ex' diff --git a/build/nics-template.yaml.jinja2 b/build/nics-template.yaml.jinja2 index f2c8000a..0913fa98 100644 --- a/build/nics-template.yaml.jinja2 +++ b/build/nics-template.yaml.jinja2 @@ -156,7 +156,7 @@ resources: {%- if nets['tenant']['enabled'] and nets['tenant']['nic_mapping'][role]['vlan'] == 'native' %} {%- if ovs_dpdk_bridge == 'br-phy' and role == 'compute' %} - - type: ovs_bridge + type: ovs_user_bridge name: {{ ovs_dpdk_bridge }} use_dhcp: false addresses: @@ -164,14 +164,15 @@ resources: ip_netmask: {get_param: TenantIpSubnet} members: - - type: interface - name: {{ nets['tenant']['nic_mapping'][role]['members'][0] }} - # force the MAC address of the bridge to this interface - primary: true - - - type: ovs_bridge - name: br-tun - use_dhcp: false + type: ovs_dpdk_port + name: dpdk0 + driver: {{ nets['tenant']['nic_mapping'][role]['uio_driver'] }} + members: + - + type: interface + name: {{ nets['tenant']['nic_mapping'][role]['members'][0] }} + # force the MAC address of the bridge to this interface + primary: true {%- else %} - type: {{ nets['tenant']['nic_mapping'][role]['phys_type'] }} @@ -208,7 +209,11 @@ resources: next_hop: {get_param: ExternalInterfaceDefaultRoute} {%- elif nets['external'][0]['enabled'] and external_net_type == 'br-ex' and nets['external'][0]['nic_mapping'][role]['vlan'] == 'native' %} - + {%- if ovs_dpdk_bridge == 'br-phy' and role == 'compute' %} + type: ovs_user_bridge + {%- else %} type: ovs_bridge + {%- endif %} name: {get_input: bridge_name} use_dhcp: false members: diff --git a/build/opnfv-environment.yaml b/build/opnfv-environment.yaml index 8b58b359..b42779ba 100644 --- a/build/opnfv-environment.yaml +++ b/build/opnfv-environment.yaml @@ -13,6 +13,9 @@ parameter_defaults: #NovaSchedulerDefaultFilters: "RamFilter,ComputeFilter,AvailabilityZoneFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,NUMATopologyFilter" # Kernel arguments, this value will be set to kernel arguments specified for compute nodes in deploy setting file. #ComputeKernelArgs: "intel_iommu=on iommu=pt default_hugepagesz=2MB hugepagesz=2MB hugepages=2048" + #PmdCoreList: 1 + #OvsDpdkCoreList: 2 + #OvsDpdkSocketMemory: 1024 ExtraConfig: tripleo::ringbuilder::build_ring: False nova::nova_public_key: diff --git a/build/ovs-dpdk-preconfig.yaml b/build/ovs-dpdk-preconfig.yaml new file mode 100644 index 00000000..d57b0b7a --- /dev/null +++ b/build/ovs-dpdk-preconfig.yaml @@ -0,0 +1,101 @@ +heat_template_version: 2014-10-16 + +description: > + Example extra config for post-deployment + +parameters: + server: + type: string + OvsDpdkCoreList: + description: > + List of logical cores for OVS DPDK + type: string + default: "" + OvsDpdkSocketMemory: + description: Memory allocated for each socket + default: "" + type: string + PmdCoreList: + description: > + A list or range of physical CPU cores to be pinned to PMD + The given args will be appended to the tuned cpu-partitioning profile. + Ex. HostCpusList: '4-12' will tune cores from 4-12 + type: string + default: "" + +resources: + OvsDpdkSetup: + type: OS::Heat::StructuredDeployment + properties: + server: {get_param: server} + config: {get_resource: OvsDpdkConfig} + + OvsDpdkConfig: + type: OS::Heat::SoftwareConfig + properties: + group: script + config: + str_replace: + template: | + #!/bin/bash + set -x + get_mask() + { + local list=$1 + local mask=0 + declare -a bm + max_idx=0 + for core in $(echo $list | sed 's/,/ /g') + do + index=$(($core/32)) + bm[$index]=0 + if [ $max_idx -lt $index ]; then + max_idx=$index + fi + done + for ((i=$max_idx;i>=0;i--)); + do + bm[$i]=0 + done + for core in $(echo $list | sed 's/,/ /g') + do + index=$(($core/32)) + temp=$((1<<$core)) + bm[$index]=$((${bm[$index]} | $temp)) + done + printf -v mask "%x" "${bm[$max_idx]}" + for ((i=$max_idx-1;i>=0;i--)); + do + printf -v hex "%08x" "${bm[$i]}" + mask+=$hex + done + printf "%s" "$mask" + } + pmd_cpu_mask=$( get_mask $PMD_CORES ) + dpdk_lcore_mask=$( get_mask $DPDK_CORES ) + yum remove -y vpp-devel + yum install -y /root/dpdk_rpms/* + systemctl restart openvswitch + sleep 5 + sed -i "s/#user\s*=.*/user = \"root\"/" /etc/libvirt/qemu.conf + sed -i "s/#group\s*=.*/group = \"root\"/" /etc/libvirt/qemu.conf + ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true + if [ -n "$SOCKET_MEMORY" ]; then + ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem=$SOCKET_MEMORY + fi + if [ -n "$pmd_cpu_mask" ]; then + ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=$pmd_cpu_mask + fi + if [ -n "$dpdk_lcore_mask" ]; then + ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=$dpdk_lcore_mask + fi + systemctl restart openvswitch + + params: + $DPDK_CORES: {get_param: OvsDpdkCoreList} + $PMD_CORES: {get_param: PmdCoreList} + $SOCKET_MEMORY: {get_param: OvsDpdkSocketMemory} +outputs: + deploy_stdout: + description: Output of the extra dpdk ovs deployment + value: {get_attr: [OvsDpdkSetup, deploy_stdout]} diff --git a/build/rpm_specs/opnfv-apex-common.spec b/build/rpm_specs/opnfv-apex-common.spec index 6a03be04..4266897c 100644 --- a/build/rpm_specs/opnfv-apex-common.spec +++ b/build/rpm_specs/opnfv-apex-common.spec @@ -56,6 +56,8 @@ install config/deploy/os-odl_l3-fdio-noha.yaml %{buildroot}%{_sysconfdir}/opnfv- install config/deploy/os-odl_l3-fdio-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l3-fdio-ha.yaml install config/deploy/os-odl_l3-nofeature-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l3-nofeature-ha.yaml install config/deploy/os-odl_l3-nofeature-noha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l3-nofeature-noha.yaml +install config/deploy/os-odl_l3-ovs-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l3-ovs-ha.yaml +install config/deploy/os-odl_l3-ovs-noha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl_l3-ovs-noha.yaml install config/deploy/os-odl-gluon-noha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-odl-gluon-noha.yaml #install config/deploy/os-onos-nofeature-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-onos-nofeature-ha.yaml #install config/deploy/os-onos-sfc-ha.yaml %{buildroot}%{_sysconfdir}/opnfv-apex/os-onos-sfc-ha.yaml @@ -137,6 +139,8 @@ install config/inventory/pod_example_settings.yaml %{buildroot}%{_docdir}/opnfv/ %{_sysconfdir}/opnfv-apex/os-odl_l2-fdio-ha.yaml %{_sysconfdir}/opnfv-apex/os-odl_l3-fdio-noha.yaml %{_sysconfdir}/opnfv-apex/os-odl_l3-fdio-ha.yaml +%{_sysconfdir}/opnfv-apex/os-odl_l3-ovs-noha.yaml +%{_sysconfdir}/opnfv-apex/os-odl_l3-ovs-ha.yaml %{_sysconfdir}/opnfv-apex/os-odl_l3-nofeature-ha.yaml %{_sysconfdir}/opnfv-apex/os-odl_l3-nofeature-noha.yaml %{_sysconfdir}/opnfv-apex/os-odl-gluon-noha.yaml @@ -157,6 +161,8 @@ install config/inventory/pod_example_settings.yaml %{buildroot}%{_docdir}/opnfv/ %doc %{_docdir}/opnfv/inventory.yaml.example %changelog +* Thu Mar 23 2017 Tim Rozet <trozet@redhat.com> - 4.0-8 +- Adds os-odl_l3-ovs-ha and noha scenarios * Mon Mar 12 2017 Feng Pan <fpan@redhat.com> - 4.0-7 - Add os-nosdn-fdio-ha.yaml * Fri Mar 10 2017 Feng Pan <fpan@redhat.com> - 4.0-6 diff --git a/build/undercloud.sh b/build/undercloud.sh index 424f6f86..e3194e2b 100755 --- a/build/undercloud.sh +++ b/build/undercloud.sh @@ -53,6 +53,7 @@ LIBGUESTFS_BACKEND=direct virt-customize \ --upload ${BUILD_ROOT}/first-boot.yaml:/home/stack/ \ --upload ${BUILD_ROOT}/kvm4nfv-1st-boot.yaml:/home/stack/ \ --upload ${BUILD_DIR}/enable_rt_kvm.yaml:/home/stack/ \ + --upload ${BUILD_ROOT}/ovs-dpdk-preconfig.yaml:/home/stack/ \ --upload ${BUILD_ROOT}/csit-environment.yaml:/home/stack/ \ --upload ${BUILD_ROOT}/virtual-environment.yaml:/home/stack/ \ --install "python2-congressclient" \ diff --git a/build/variables.sh b/build/variables.sh index 9322442e..5249c2ec 100644 --- a/build/variables.sh +++ b/build/variables.sh @@ -24,13 +24,12 @@ onos_ovs_pkg=package_ovs_rpm3.tar.gz if [ -z ${GS_PATHNAME+x} ]; then GS_PATHNAME=/colorado fi -dpdk_uri_base=http://artifacts.opnfv.org/ovsnfv$GS_PATHNAME +dpdk_uri_base=http://artifacts.opnfv.org/ovsnfv dpdk_rpms=( -'ovs4opnfv-e8acab14-dpdk-16.04.0-1.el7.centos.x86_64.rpm' -'ovs4opnfv-e8acab14-dpdk-devel-16.04.0-1.el7.centos.x86_64.rpm' -'ovs4opnfv-e8acab14-dpdk-examples-16.04.0-1.el7.centos.x86_64.rpm' -'ovs4opnfv-e8acab14-dpdk-tools-16.04.0-1.el7.centos.x86_64.rpm' -'ovs4opnfv-e8acab14-openvswitch-2.5.90-0.12032.gitc61e93d6.1.el7.centos.x86_64.rpm' +'ovs4opnfv-e8acab14-dpdk-16.11-5.el7.centos.x86_64.rpm' +'ovs4opnfv-e8acab14-dpdk-devel-16.11-5.el7.centos.x86_64.rpm' +'ovs4opnfv-e8acab14-dpdk-examples-16.11-5.el7.centos.x86_64.rpm' +'ovs4opnfv-e8acab14-dpdk-tools-16.11-5.el7.centos.x86_64.rpm' ) kvmfornfv_uri_base="http://artifacts.opnfv.org/kvmfornfv" diff --git a/config/deploy/os-nosdn-ovs-ha.yaml b/config/deploy/os-nosdn-ovs-ha.yaml index a72fef35..c9d58671 100644 --- a/config/deploy/os-nosdn-ovs-ha.yaml +++ b/config/deploy/os-nosdn-ovs-ha.yaml @@ -20,3 +20,7 @@ deploy_options: hugepages: 2048 intel_iommu: 'on' iommu: pt + ovs: + socket_memory: 1024 + pmd_cores: 2 + dpdk_cores: 1 diff --git a/config/deploy/os-nosdn-ovs-noha.yaml b/config/deploy/os-nosdn-ovs-noha.yaml index 7d054cec..cf9b854d 100644 --- a/config/deploy/os-nosdn-ovs-noha.yaml +++ b/config/deploy/os-nosdn-ovs-noha.yaml @@ -20,3 +20,7 @@ deploy_options: hugepages: 2048 intel_iommu: 'on' iommu: pt + ovs: + socket_memory: 1024 + pmd_cores: 2 + dpdk_cores: 1 diff --git a/config/deploy/os-odl_l3-ovs-ha.yaml b/config/deploy/os-odl_l3-ovs-ha.yaml new file mode 100644 index 00000000..ad265699 --- /dev/null +++ b/config/deploy/os-odl_l3-ovs-ha.yaml @@ -0,0 +1,27 @@ +global_params: + ha_enabled: true + +deploy_options: + sdn_controller: opendaylight + odl_version: boron + sdn_l3: true + tacker: true + congress: true + sfc: false + vpn: false + dataplane: ovs_dpdk + performance: + Controller: + kernel: + hugepagesz: 2M + hugepages: 1024 + Compute: + kernel: + hugepagesz: 2M + hugepages: 2048 + intel_iommu: 'on' + iommu: pt + ovs: + socket_memory: 1024 + pmd_cores: 2 + dpdk_cores: 1 diff --git a/config/deploy/os-odl_l3-ovs-noha.yaml b/config/deploy/os-odl_l3-ovs-noha.yaml new file mode 100644 index 00000000..6f7630dc --- /dev/null +++ b/config/deploy/os-odl_l3-ovs-noha.yaml @@ -0,0 +1,27 @@ +global_params: + ha_enabled: false + +deploy_options: + sdn_controller: opendaylight + odl_version: boron + sdn_l3: true + tacker: true + congress: true + sfc: false + vpn: false + dataplane: ovs_dpdk + performance: + Controller: + kernel: + hugepagesz: 2M + hugepages: 1024 + Compute: + kernel: + hugepagesz: 2M + hugepages: 2048 + intel_iommu: 'on' + iommu: pt + ovs: + socket_memory: 1024 + pmd_cores: 2 + dpdk_cores: 1 diff --git a/config/network/network_settings.yaml b/config/network/network_settings.yaml index be0b6836..ba784391 100644 --- a/config/network/network_settings.yaml +++ b/config/network/network_settings.yaml @@ -84,7 +84,7 @@ networks: # Network configurations controller: # Mapping for controller profile (nodes that will be used as Controller nodes) phys_type: interface members: - - nic1 + - eth0 # tenant: # Tenant network configuration enabled: true @@ -97,6 +97,7 @@ networks: # Network configurations nic_mapping: # Mapping of network configuration for Overcloud Nodes compute: # Mapping for compute profile (nodes that will be used as Compute nodes) phys_type: interface # Physical interface type (interface or bond) + uio_driver: uio_pci_generic # UIO driver to use for DPDK scenarios. The value is ignored for non-DPDK scenarios. vlan: native # VLAN tag to use with this NIC members: # Physical NIC members of this mapping (Single value allowed for interface phys_type) - eth1 # Note, for Apex you may also use the logical nic name (found by nic order), such as "nic1" @@ -104,7 +105,7 @@ networks: # Network configurations phys_type: interface vlan: native members: - - nic2 # Note, for Apex you may also use the logical nic name (found by nic order), such as "nic1" + - eth1 # Note, for Apex you may also use the logical nic name (found by nic order), such as "nic1" # external: # Can contain 1 or more external networks - public: # "public" network will be the network the installer VM attaches to @@ -135,7 +136,7 @@ networks: # Network configurations phys_type: interface vlan: native members: - - nic3 + - eth2 external_overlay: # External network to be created in OpenStack by Services tenant name: Public_internet type: flat @@ -168,7 +169,7 @@ networks: # Network configurations phys_type: interface vlan: 101 members: - - nic3 + - eth2 external_overlay: # External network to be created in OpenStack by Services tenant name: private_cloud type: vlan @@ -189,7 +190,7 @@ networks: # Network configurations phys_type: interface vlan: native members: - - nic4 + - eth3 # api: # API network configuration enabled: false @@ -201,12 +202,12 @@ networks: # Network configurations phys_type: interface # Physical interface type (interface or bond) vlan: native # VLAN tag to use with this NIC members: # Physical NIC members of this mapping (Single value allowed for interface phys_type) - - nic5 # Note, for Apex you may also use the logical nic name (found by nic order), such as "nic1" + - eth4 # Note, for Apex you may also use the logical nic name (found by nic order), such as "nic1" controller: # Mapping for controller profile (nodes that will be used as Controller nodes) phys_type: interface vlan: native members: - - nic5 + - eth4 # Apex specific settings apex: diff --git a/lib/overcloud-deploy-functions.sh b/lib/overcloud-deploy-functions.sh index 97f809da..8f5b1a21 100755 --- a/lib/overcloud-deploy-functions.sh +++ b/lib/overcloud-deploy-functions.sh @@ -13,6 +13,12 @@ function overcloud_deploy { local num_compute_nodes local num_control_nodes + local dpdk_cores pmd_cores socket_mem ovs_dpdk_perf_flag ovs_option_heat_arr + declare -A ovs_option_heat_arr + + ovs_option_heat_arr['dpdk_cores']=OvsDpdkCoreList + ovs_option_heat_arr['pmd_cores']=PmdCoreList + ovs_option_heat_arr['socket_memory']=OvsDpdkSocketMemory # OPNFV Default Environment and Network settings DEPLOY_OPTIONS+=" -e ${ENV_FILE}" @@ -56,6 +62,8 @@ function overcloud_deploy { echo -e "${blue}INFO: SDN Controller disabled...will deploy nosdn scenario${reset}" if [ "${deploy_options_array['vpp']}" == 'True' ]; then DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/neutron-ml2-vpp.yaml" + elif [ "${deploy_options_array['dataplane']}" == 'ovs_dpdk' ]; then + DEPLOY_OPTIONS+=" -e /usr/share/openstack-tripleo-heat-templates/environments/neutron-ovs-dpdk.yaml" fi SDN_IMAGE=opendaylight else @@ -90,6 +98,16 @@ function overcloud_deploy { ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" "rm -f overcloud-full.qcow2" scp ${SSH_OPTIONS[@]} $IMAGES/overcloud-full-${SDN_IMAGE}.qcow2 "stack@$UNDERCLOUD":overcloud-full.qcow2 + # disable neutron openvswitch agent from starting + if [[ -n "${deploy_options_array['sdn_controller']}" && "${deploy_options_array['sdn_controller']}" != 'False' ]]; then + echo -e "${blue}INFO: Disabling neutron-openvswitch-agent from systemd${reset}" + ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI + LIBGUESTFS_BACKEND=direct virt-customize --run-command "rm -f /etc/systemd/system/multi-user.target.wants/neutron-openvswitch-agent.service" \ + --run-command "rm -f /usr/lib/systemd/system/neutron-openvswitch-agent.service" \ + -a overcloud-full.qcow2 +EOI + fi + if [ "${deploy_options_array['vpn']}" == 'True' ]; then echo -e "${blue}INFO: Enabling ZRPC and Quagga${reset}" ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI @@ -122,11 +140,7 @@ EOF -a overcloud-full.qcow2 if [ "${deploy_options_array['dataplane']}" == 'ovs_dpdk' ]; then - LIBGUESTFS_BACKEND=direct virt-customize --run-command "yum install -y /root/dpdk_rpms/*" \ - --run-command "sed -i '/RuntimeDirectoryMode=.*/d' /usr/lib/systemd/system/openvswitch-nonetwork.service" \ - --run-command "printf \"%s\\n\" RuntimeDirectoryMode=0775 Group=qemu UMask=0002 >> /usr/lib/systemd/system/openvswitch-nonetwork.service" \ - --run-command "sed -i 's/\\(^\\s\\+\\)\\(start_daemon "$OVS_VSWITCHD_PRIORITY"\\)/\\1umask 0002 \\&\\& \\2/' /usr/share/openvswitch/scripts/ovs-ctl" \ - -a overcloud-full.qcow2 + sed -i "/OS::TripleO::ComputeExtraConfigPre:/c\ OS::TripleO::ComputeExtraConfigPre: ./ovs-dpdk-preconfig.yaml" network-environment.yaml fi EOI @@ -164,19 +178,34 @@ EOI fi if [ -n "${deploy_options_array['performance']}" ]; then + ovs_dpdk_perf_flag="False" for option in "${performance_options[@]}" ; do - arr=($option) - # use compute's kernel settings for all nodes for now. - if [ "${arr[0]}" == "Compute" ] && [ "${arr[1]}" == "kernel" ]; then - kernel_args+=" ${arr[2]}=${arr[3]}" - fi + arr=($option) + # use compute's kernel settings for all nodes for now. + if [ "${arr[0]}" == "Compute" ] && [ "${arr[1]}" == "kernel" ]; then + kernel_args+=" ${arr[2]}=${arr[3]}" + fi + if [ "${arr[0]}" == "Compute" ] && [ "${arr[1]}" == "ovs" ]; then + eval "${arr[2]}=${arr[3]}" + ovs_dpdk_perf_flag="True" + fi done ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI - sed -i "/ComputeKernelArgs:/c\ ComputeKernelArgs: '$kernel_args'" ${ENV_FILE} - sed -i "$ a\resource_registry:\n OS::TripleO::NodeUserData: first-boot.yaml" ${ENV_FILE} - sed -i "/NovaSchedulerDefaultFilters:/c\ NovaSchedulerDefaultFilters: 'RamFilter,ComputeFilter,AvailabilityZoneFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,NUMATopologyFilter'" ${ENV_FILE} + sed -i "/ComputeKernelArgs:/c\ ComputeKernelArgs: '$kernel_args'" ${ENV_FILE} + sed -i "$ a\resource_registry:\n OS::TripleO::NodeUserData: first-boot.yaml" ${ENV_FILE} + sed -i "/NovaSchedulerDefaultFilters:/c\ NovaSchedulerDefaultFilters: 'RamFilter,ComputeFilter,AvailabilityZoneFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,NUMATopologyFilter'" ${ENV_FILE} EOI + + if [[ "${deploy_options_array['dataplane']}" == 'ovs_dpdk' && "$ovs_dpdk_perf_flag" == "True" ]]; then + for ovs_option in ${!ovs_option_heat_arr[@]}; do + if [ -n "${!ovs_option}" ]; then + ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI + sed -i "/${ovs_option_heat_arr[$ovs_option]}:/c\ ${ovs_option_heat_arr[$ovs_option]}: ${!ovs_option}" ${ENV_FILE} +EOI + fi + done + fi fi if [[ -z "${deploy_options_array['sdn_controller']}" || "${deploy_options_array['sdn_controller']}" == 'False' ]]; then @@ -213,15 +242,14 @@ EOI EOI fi - # Override any previous packages if FDIO and ODL L2 - #if [[ "${deploy_options_array['vpp']}" == 'True' && "${deploy_options_array['sdn_controller']}" == 'opendaylight' && "${deploy_options_array['sdn_l3']}" == "False" ]]; then - # ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI - # LIBGUESTFS_BACKEND=direct virt-customize --run-command "yum -y remove opendaylight vpp vpp-api-python vpp-lib vpp-plugins honeycomb" \ - # --run-command "yum -y install /root/fdio_l2/*.rpm" \ - # --run-command "rm -f /etc/sysctl.d/80-vpp.conf" \ - # -a overcloud-full.qcow2 -#EOI - #fi + # Override ODL if FDIO and ODL L2 + if [[ "${deploy_options_array['vpp']}" == 'True' && "${deploy_options_array['sdn_controller']}" == 'opendaylight' && "${deploy_options_array['sdn_l3']}" == "False" ]]; then + ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI + LIBGUESTFS_BACKEND=direct virt-customize --run-command "yum -y remove opendaylight" \ + --run-command "yum -y install /root/fdio_l2/opendaylight*.rpm" \ + -a overcloud-full.qcow2 +EOI + fi # check if ceph should be enabled if [ "${deploy_options_array['ceph']}" == 'True' ]; then @@ -344,17 +372,21 @@ if ! openstack stack list | grep CREATE_COMPLETE 1>/dev/null; then fi EOI - # Configure DPDK + # Configure DPDK and restart ovs agent after bringing up br-phy if [ "${deploy_options_array['dataplane']}" == 'ovs_dpdk' ]; then ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI || (echo "DPDK config failed, exiting..."; exit 1) source stackrc set -o errexit for node in \$(nova list | grep novacompute | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"); do -echo "Running DPDK test app on \$node" +echo "Checking DPDK status and bringing up br-phy on \$node" ssh -T ${SSH_OPTIONS[@]} "heat-admin@\$node" <<EOF set -o errexit -sudo dpdk_helloworld --no-pci -sudo dpdk_nic_bind -s +sudo dpdk-devbind -s +sudo ifup br-phy +if [[ -z "${deploy_options_array['sdn_controller']}" || "${deploy_options_array['sdn_controller']}" == 'False' ]]; then + echo "Restarting openvswitch agent to pick up VXLAN tunneling" + sudo systemctl restart neutron-openvswitch-agent +fi EOF done EOI diff --git a/lib/python/apex/deploy_settings.py b/lib/python/apex/deploy_settings.py index 9fb4c6f7..dc58d764 100644 --- a/lib/python/apex/deploy_settings.py +++ b/lib/python/apex/deploy_settings.py @@ -34,7 +34,7 @@ OPT_DEPLOY_SETTINGS = ['performance', 'odl_vpp_routing_node'] VALID_ROLES = ['Controller', 'Compute', 'ObjectStorage'] -VALID_PERF_OPTS = ['kernel', 'nova', 'vpp'] +VALID_PERF_OPTS = ['kernel', 'nova', 'vpp', 'ovs'] VALID_DATAPLANES = ['ovs', 'ovs_dpdk', 'fdio'] diff --git a/tests/test_apex_network_settings.py b/tests/test_apex_network_settings.py index 8f994352..a1dbaf1c 100644 --- a/tests/test_apex_network_settings.py +++ b/tests/test_apex_network_settings.py @@ -89,13 +89,10 @@ class TestNetworkSettings(object): ns = NetworkSettings('../config/network/network_settings.yaml') assert_is_instance(ns, NetworkSettings) for role in ['controller', 'compute']: - nic_index = 1 + nic_index = 0 print(ns.nics) for network in ns.enabled_network_list: - if role == 'compute': - nic = 'eth' + str(nic_index - 1) - else: - nic = 'nic' + str(nic_index) + nic = 'eth' + str(nic_index) assert_equal(ns.nics[role][network], nic) nic_index += 1 @@ -107,7 +104,7 @@ class TestNetworkSettings(object): ns = NetworkSettings(files_dir+'network_settings.yaml') storage_net_nicmap = ns['networks'][STORAGE_NETWORK]['nic_mapping'] # set duplicate nic - storage_net_nicmap['controller']['members'][0] = 'nic1' + storage_net_nicmap['controller']['members'][0] = 'eth0' assert_raises(NetworkSettingsException, NetworkSettings, ns) # remove nic members storage_net_nicmap['controller']['members'] = [] |