Bug 2041429

Summary: Support NFV Deployments with "overcloud node provision" command
Product: Red Hat OpenStack Reporter: Saravanan KR <skramaja>
Component: tripleo-ansibleAssignee: Vadim Khitrin <vkhitrin>
Status: CLOSED ERRATA QA Contact: Joe H. Rahme <jhakimra>
Severity: high Docs Contact:
Priority: high    
Version: 17.0 (Wallaby)CC: eshulman, hakhande, jamsmith, jparker, kgilliga, oblaut, sbaker, sshnaidm, vkhitrin
Target Milestone: ---Keywords: AutomationBlocker, Triaged
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: tripleo-ansible-3.3.1-0.20220512232330.47d0ab5..el9ost, tripleo-ansible-3.3.1-0.20220513002809.47d0ab5.el8ost Doc Type: Enhancement
Doc Text:
You can now pre-provision bare metal nodes in your application by using the `overcloud node [un]provision` command.
Story Points: ---
Clone Of: Environment:
Last Closed: 2022-09-21 12:18:11 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Saravanan KR 2022-01-17 10:45:40 UTC
"openstack overcloud node provision" will provision the overcloud nodes as per the provided baremetal_deployment.yaml file and then run network-config (os-net-config).

For NFV, before running os-net-config, there are a few other steps to be run to successfully complete os-net-config. First is kernel args, which is addressed by BZ #2035325. Second is to configure OvS-DPDK, which requires to be configured before os-net-config but after kernel args.


Refer the deploy_steps_tasks from https://github.com/openstack/tripleo-heat-templates/blob/master/deployment/openvswitch/openvswitch-dpdk-baremetal-ansible.yaml file (pasted below for reference). There need to be an option to configure OvS-DPDK before network config on "overcloud node provision" command.

      deploy_steps_tasks:
        - - name: Ddp packages and select the package
            vars:
              ddp_package: {get_attr: [RoleParametersDpdk, value, ddp_package]}
            block:
              - name: Gets latest version of required Ddp package
                shell: "ls --sort=version -r /lib/firmware/intel/ice/{{ ddp_package }}/ice[_-]?*.pkg"
                register: ddp_package_files
              - name: ddp package selection
                vars:
                  ddp_package_file: "{{ ddp_package_files.stdout.split('\n')[0] }}"
                shell: |
                  rm -f /lib/firmware/intel/ice/ddp/ice.pkg
                  ln -s {{ ddp_package_file }} /lib/firmware/intel/ice/ddp/ice.pkg
                  dracut -f
                when: ddp_package_files is defined and ddp_package_file|string != ""
            when: step|int == 0 and ddp_package|string != "ddp"
        - get_attr: [BootParams, role_data, deploy_steps_tasks]
        - - name: Run ovs-dpdk role
            when: step|int == 0
            include_role:
              name: tripleo_ovs_dpdk
            vars:
              tripleo_ovs_dpdk_pmd_core_list: {get_attr: [RoleParametersDpdk, value, pmd]}
              tripleo_ovs_dpdk_lcore_list: {get_attr: [RoleParametersDpdk, value, lcore]}
              tripleo_ovs_dpdk_memory_channels: {get_attr: [RoleParametersDpdk, value, memory_channels]}
              tripleo_ovs_dpdk_socket_memory: {get_attr: [RoleParametersDpdk, value, socket_mem]}
              tripleo_ovs_dpdk_revalidator_cores: {get_attr: [RoleParametersDpdk, value, revalidator]}
              tripleo_ovs_dpdk_handler_cores: {get_attr: [RoleParametersDpdk, value, handler]}
              tripleo_ovs_dpdk_pmd_auto_lb: {get_attr: [RoleParametersDpdk, value, pmd_auto_lb]}
              tripleo_ovs_dpdk_pmd_load_threshold: {get_attr: [RoleParametersDpdk, value, pmd_load_threshold]}
              tripleo_ovs_dpdk_pmd_improvement_threshold: {get_attr: [RoleParametersDpdk, value, pmd_improvement_threshold]}
              tripleo_ovs_dpdk_pmd_rebal_interval: {get_attr: [RoleParametersDpdk, value, pmd_rebal_interval]}
              tripleo_ovs_dpdk_emc_insertion_probablity:
                if:
                - {get_param: OvsDisableEMC}
                - 0
              tripleo_ovs_dpdk_enable_tso: {get_attr: [RoleParametersDpdk, value, enable_tso]}
              tripleo_ovs_dpdk_vhost_postcopy_support:
                if:
                  - is_realtime
                  - false
                  - {get_attr: [RoleParametersDpdk, value, nova_postcopy]}

Comment 2 Steve Baker 2022-01-17 21:11:44 UTC
The kernelargs playbook[1] shows exactly how to develop for and use the provision ansible_playbooks mechanism. I think it is more appropriate for the NVF squad to write this DPDK specific playbook. We can help though, feel free to ask questions and add us to reviews.

[1] https://review.opendev.org/c/openstack/tripleo-ansible/+/823734
    https://review.opendev.org/c/openstack/tripleo-docs/+/823735

Comment 3 Haresh Khandelwal 2022-04-13 08:01:34 UTC
*** Bug 2074001 has been marked as a duplicate of this bug. ***

Comment 15 errata-xmlrpc 2022-09-21 12:18:11 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (Release of components for Red Hat OpenStack Platform 17.0 (Wallaby)), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHEA-2022:6543