heat_template_version: rocky

description: >
  OpenStack ironic-neutron-agent service

parameters:
  ContainerIronicNeutronAgentImage:
    description: The container image to use for the ironic-neutron-agent
    type: string
  ContainerNeutronConfigImage:
    description: The container image to use for the neutron config_volume
    type: string
  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
  IronicPassword:
    description: The password for the Ironic service and db account, used by the Ironic services
    type: string
    hidden: true
  KeystoneRegion:
    type: string
    default: 'regionOne'
    description: Keystone region for endpoint

resources:

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

  NeutronBase:
    type: ../neutron/neutron-base.yaml
    properties:
      ServiceData: {get_param: ServiceData}
      ServiceNetMap: {get_param: ServiceNetMap}
      DefaultPasswords: {get_param: DefaultPasswords}
      EndpointMap: {get_param: EndpointMap}
      RoleName: {get_param: RoleName}
      RoleParameters: {get_param: RoleParameters}

  NeutronLogging:
    type: OS::TripleO::Services::Logging::NeutronCommon
    properties:
      NeutronServiceName: ironic-neutron-agent

outputs:
  role_data:
    description: Role data for ironic-neutron-agent service
    value:
      service_name: ironic_neutron_agent
      config_settings:
        map_merge:
          - get_attr: [NeutronBase, role_data, config_settings]
          - neutron::agents::ml2::networking_baremetal::user: 'ironic'
          - neutron::agents::ml2::networking_baremetal::password: {get_param: IronicPassword}
          - neutron::agents::ml2::networking_baremetal::auth_url: { get_param: [ EndpointMap, KeystoneInternal, uri_no_suffix ] }
          - neutron::agents::ml2::networking_baremetal::project_name: 'service'
          - neutron::agents::ml2::networking_baremetal::user_domain_name: 'Default'
          - neutron::agents::ml2::networking_baremetal::project_domain_name: 'Default'
          - neutron::agents::ml2::networking_baremetal::region_name: {get_param: KeystoneRegion}
          - get_attr: [NeutronLogging, config_settings]
      puppet_config:
        config_volume: neutron
        puppet_tags: neutron_config,ironic_neutron_agent_config
        step_config:
          include tripleo::profile::base::neutron::agents::networking_baremetal
        config_image: {get_param: ContainerNeutronConfigImage}
      kolla_config:
        /var/lib/kolla/config_files/ironic_neutron_agent.json:
          command: /usr/bin/ironic-neutron-agent --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ironic_neutron_agent.ini --config-dir /etc/neutron/conf.d/common
          config_files:
            - source: "/var/lib/kolla/config_files/src/*"
              dest: "/"
              merge: true
              preserve_properties: true
          permissions:
            - path: /var/log/neutron
              owner: neutron:neutron
              recurse: true
      docker_config:
        step_4:
          ironic_neutron_agent:
            start_order: 80
            image: {get_param: ContainerIronicNeutronAgentImage}
            net: host
            pid: host
            privileged: true
            restart: always
            healthcheck: {get_attr: [ContainersCommon, healthcheck_rpc_port]}
            volumes:
              list_concat:
                - {get_attr: [ContainersCommon, volumes]}
                - {get_attr: [NeutronLogging, volumes]}
                -
                  - /var/lib/kolla/config_files/ironic_neutron_agent.json:/var/lib/kolla/config_files/config.json:ro
                  - /var/lib/config-data/puppet-generated/neutron/:/var/lib/kolla/config_files/src:ro
            environment:
              KOLLA_CONFIG_STRATEGY: COPY_ALWAYS
      host_prep_tasks: {get_attr: [NeutronLogging, host_prep_tasks]}
      upgrade_tasks: []
