Configure node before Network Config

In specific deployments, it is required to perform additional configurations on the overcloud node before network deployment, but after applying kernel args. For example, OvS-DPDK deployment requires DPDK to be enabled in OpenvSwitch before network deployment (os-net-config), but after the hugepages are created (hugepages are created using kernel args). This requirement is also valid for some 3rd party SDN integration. This kind of configuration requires additional TripleO service definitions. This document explains how to achieve such deployments on and after train release.

Note

In queens release, the resource PreNetworkConfig can be overridden to achieve the required behavior, which has been deprecated from train onwards. The implementations based on PreNetworkConfig should be moved to other available alternates.

The TripleO service OS::TripleO::BootParams configures the parameter KernelArgs and reboots the node using the tripleo-ansible role tripleo_kernel. Some points to consider on KernelArgs:

  • BootParams service is enabled by default on all the roles.

  • The node will be restarted only when kernel args are applied for the first time (fresh node configuration).

  • In case of adding KernelArgs during update/upgrade/scale operations, when a particular role does not have KernelArgs, it results in node reboot. Such scenarios should be treated as role migration instead adding only KernelArgs.

  • KernelArgs can be updated from wallaby release onwards (where the role already has KernelArgs but requires modification). In such cases, the node reboot has to be planned by the user manually, after the TripleO deployment is completed. For example, increasing the hugepages count post deployment.

The firstboot scripts provide a mechanism to apply the custom node configuration which is independent of kernel args.

Custom Service

When a configuration needs to be applied on the node after reboot and before the network config, then a custom service template should be added that includes the BootParams resource (example below) and any other required configuration. It is important to allow the default implementation of BootParams service to be included as it is, because any improvements or fixes will be automatically included in the deployment.

Here is an example OvS-DPDK has been configured after BootParams but before network config:

heat_template_version: wallaby

description: >
  Open vSwitch Configuration

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. Use
                 parameter_merge_strategies to merge it with the defaults.
    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

resources
  BootParams:
    type: /usr/share/openstack-tripleo-heat-templates/deployments/kernel/kernel-boot-params-baremetal-ansible.yaml
    properties:
      ServiceData: {get_param: ServiceData}
      ServiceNetMap: {get_param: ServiceNetMap}
      EndpointMap: {get_param: EndpointMap}
      RoleName: {get_param: RoleName}
      RoleParameters: {get_param: RoleParameters}

outputs:
  role_data:
    description: Role data for the Open vSwitch service.
    value:
      service_name: openvswitch
      deploy_steps_tasks:
        - get_attr: [BootParams, role_data, deploy_steps_tasks]
        - - name: Run ovs-dpdk role
            when: step|int == 0
            include_role:
              name: tripleo_ovs_dpdk

Note

In the above sample service definition, the condition step|int == 0 in the deploy_steps_tasks section forces the associated steps to run before starting any other node configuration (including network deployment).

Add this service to the roles definition of the required roles so that the configuration can be applied after reboot but before network deployment.