heat_template_version: rocky

description: Host config and reboot service which configures Kernel Args and reboot

parameters:
  RoleNetIpMap:
    default: {}
    type: json
  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
  KernelArgs:
    default: ""
    type: string
    description: Kernel Args to apply to the host
    tags:
      - role_specific
  TunedProfileName:
    default: 'throughput-performance'
    type: string
    description: Tuned Profile to apply to the host
    tags:
      - role_specific
  IsolCpusList:
    default: ""
    type: string
    description: >
      List of logical CPU ids whic need to be isolated from the host processes.
      This input is provided to the tuned profile cpu-partitioning to configure
      systemd and repin interrupts (IRQ repinning).
    tags:
      - role_specific
  NodeRebootWaitTimeout:
    default: 900
    type: number
    description: Timeout in seconds to specify the wait time for ansible node reboot

resources:
  RoleParametersValue:
    type: OS::Heat::Value
    properties:
      type: json
      value:
        map_replace:
          - map_replace:
            - tuned_profile: TunedProfileName
              isolated_cores: IsolCpusList
              kernel_args: KernelArgs
            - values: {get_param: [RoleParameters]}
          - values:
              TunedProfileName: {get_param: TunedProfileName}
              IsolCpusList: {get_param: IsolCpusList}
              KernelArgs: {get_param: KernelArgs}

outputs:
  role_data:
    description: Role data for the Host Config Service
    value:
      service_name: boot_params_service
      deploy_steps_tasks:
        # TODO(skramaja): Tasks of Tuned TripleO service can be used here
        # But the configuration in that service has to be moved from host_prep_tasks to step 0 of deploy_step_tasks
        - name: Configure tuned before reboot
          when: step|int == 0
          import_role:
            name: tuned
          vars:
            tuned_profile: {get_attr: [RoleParametersValue, value, tuned_profile]}
            tuned_isolated_cores: {get_attr: [RoleParametersValue, value, isolated_cores]}
        - name: Configure kernel args and reboot
          when: step|int == 0
          import_role:
            name: tripleo-kernel
            tasks_from: kernelargs.yml
          vars:
            tripleo_kernel_args: {get_attr: [RoleParametersValue, value, kernel_args]}
            tripleo_kernel_reboot_timeout: {get_param: NodeRebootWaitTimeout}
