heat_template_version: rocky

description: >
  OpenStack containerized Liquidio compute service
parameters:
  ContainerLiquidioImage:
    description: The container image to use for the Liquidio Service
    type: string
  ContainerLiquidioConfigImage:
    description: The container image to use for the Liquidio config generation
    type: string
  EndpointMap:
    default: {}
    description: Mapping of service endpoint -> protocol. Typically set
                 via parameter_defaults in the resource registry.
    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
  LiquidioSriovVfNum:
    type: number
    description: Number of vf interfaces to be created on Compute nodes
    default: 4
    constraints:
      - range: { min: 1, max: 64 }
        description: Vfs should be between 1 and 64
  LiquidioConfigureMode:
    type: string
    description: Mode of installation, either odl, ovn or ovs
    default: ml2-odl
    constraints:
      - allowed_values: [ 'ml2-odl', 'ml2-ovn', 'ml2-ovs' ]
        description: ConfigureMode for Liquidio service
  LiquidioEnableBonding:
    type: boolean
    description: DVR Enabled or not
    default: true
  LiquidioBondingOptions:
    type: string
    description: Bonding options for Liquido interfaces
    default: active-backup
    constraints:
      - allowed_values:
        - active-backup
        - balance-tcp
        - balance-slb
  LiquidioProviderMappings:
    type: string
    description: BridgeMappings used in ODL/OVN Deployments
    default: 'datacentre:eth1'

resources:

  ContainersCommon:
    type: ../containers-common.yaml

outputs:
  role_data:
    description: Role data for Liquidio compute service.
    value:
      service_name: liquidio_compute_config
      config_settings:
        tripleo::host::liquidio::compute::vf_nums: {get_param: LiquidioSriovVfNum}
        tripleo::host::liquidio::compute::configure_mode: {get_param: LiquidioConfigureMode}
        tripleo::host::liquidio::compute::enable_bonding: {get_param: LiquidioEnableBonding}
        tripleo::host::liquidio::compute::bonding_options: {get_param: LiquidioBondingOptions}
        tripleo::host::liquidio::compute::provider_mappings: {get_param: LiquidioProviderMappings}
      puppet_config:
        config_volume: liquidio
        puppet_tags: liquidio_config
        step_config: |
          include ::tripleo::host::liquidio::compute
        config_image: {get_param: ContainerLiquidioConfigImage}
      kolla_config:
        /var/lib/kolla/config_files/liquidio_config.json:
          command: "/usr/bin/liquidio-compute start"
          config_files:
            - source: "/var/lib/kolla/config_files/src/*"
              dest: "/"
              merge: true
              preserve_properties: true
          permissions:
            - path: /var/log/liquidio/
              owner: root:root
              recurse: true
      docker_config:
        step_5:
          liquidio_compute_service:
            start_order: 10
            image: {get_param: ContainerLiquidioImage}
            net: host
            detach: true
            user: root
            privileged: true
            restart: always
            volumes:
              list_concat:
                - {get_attr: [ContainersCommon, volumes]}
                -
                  - /var/lib/kolla/config_files/liquidio_config.json:/var/lib/kolla/config_files/config.json:ro
                  - /var/lib/config-data/puppet-generated/liquidio/:/var/lib/kolla/config_files/src:ro
                  - /etc/udev/:/etc/udev/:z
                  - /usr/lib/udev/:/usr/lib/udev/:z
                  - /lib/modules/:/lib/modules/:z
                  - /usr/lib/firmware/liquidio/:/usr/lib/firmware/liquidio/:z
                  - /dev:/dev
                  - /run:/run
            environment:
              KOLLA_CONFIG_STRATEGY: COPY_ALWAYS
