heat_template_version: rocky

description: >
  Prepare container images

parameters:
  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
  ContainerImagePrepare:
    default: {}
    description: Used to run "openstack tripleo container image prepare".
                 This is run after the registry is installed to populate
                 the registry with images.
    type: json
  ContainerImagePrepareLogFile:
    default: '/var/log/tripleo-container-image-prepare.log'
    type: string
    description: Used to store outputs of "openstack tripleo container image prepare".
  DockerInsecureRegistryAddress:
    description: Optional. The IP Address and Port of an insecure docker
                 namespace that will be configured in /etc/sysconfig/docker.
                 The value can be multiple addresses separated by commas.
    type: comma_delimited_list
    default: []

  NeutronMechanismDrivers:
    default: 'ovn'
    description: |
        The mechanism drivers for the Neutron tenant network.
    type: comma_delimited_list

  DockerRegistryMirror:
    description: Optional. Mirror to use for registry docker.io
    default: ''
    type: string

{% for role in roles %}
  # Parameters generated for {{role.name}} Role
  {{role.name}}Services:
    description: A list of service resources (configured in the Heat
                 resource_registry) which represent nested stacks
                 for each service that should get installed on the {{role.name}} role.
    type: comma_delimited_list

  {{role.name}}Count:
    description: Number of {{role.name}} nodes to deploy
    type: number
    default: {{role.CountDefault|default(0)}}
{% endfor %}

outputs:
  role_data:
    description: Role data for container image prepare
    value:
      service_name: container_image_prepare
      external_deploy_tasks:
        - name: Container image prepare
          when: step|int == 1
          tags: container_image_prepare
          block:
          - set_fact:
              log_file: {get_param: ContainerImagePrepareLogFile}
          - name: Create temp file for prepare parameter
            tempfile:
              state: file
              suffix: -prepare-param
            register: prepare_param
            check_mode: no
          - name: Create temp file for role data
            tempfile:
              state: file
              suffix: -role-data
            register: role_data
            check_mode: no
          - name: Write ContainerImagePrepare parameter file
            copy:
              dest: "{{ '{{' }} prepare_param.path {{ '}}' }}"
              content:
                parameter_defaults:
                  ContainerImagePrepare: {get_param: ContainerImagePrepare}
                  DockerInsecureRegistryAddress: {get_param: DockerInsecureRegistryAddress}
                  NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
                  DockerRegistryMirror: {get_param: DockerRegistryMirror}
{% for role in roles %}
                  {{role.name}}Services: {get_param: {{role.name}}Services}
                  {{role.name}}Count: {get_param: {{role.name}}Count}
{% endfor %}
          - name: Write role data file
            copy:
              dest: "{{ '{{' }} role_data.path {{ '}}' }}"
              content: {{ roles }}
          - name: Run tripleo-container-image-prepare logged to {{ '{{' }} log_file {{ '}}' }}
            shell: sudo /usr/bin/tripleo-container-image-prepare --roles-file {{ '{{' }} role_data.path {{ '}}' }} --environment-file {{ '{{' }} prepare_param.path {{ '}}' }} --cleanup partial --log-file {{ '{{' }} log_file {{ '}}' }}
            no_log: True
          - name: Delete param file
            file:
              dest: "{{ '{{' }} prepare_param.path {{ '}}' }}"
              state: absent
            check_mode: no
          - name: Delete role file
            file:
              dest: "{{ '{{' }} role_data.path {{ '}}' }}"
              state: absent
            check_mode: no