heat_template_version: pike
parameters:
  image:
    type: string
    default: unused
  flavor:
    type: string
    default: unused
  key_name:
    type: string
    default: unused
    description: Name of keypair to assign to servers
  security_groups:
    type: json
    default: []
  # Require this so we can validate the parent passes the
  # correct value
  user_data_format:
    type: string
  user_data:
    type: string
    default: ''
  name:
    type: string
    default: 'deployed-server'
  image_update_policy:
    type: string
    default: ''
  networks:
    type: comma_delimited_list
    default: ''
  metadata:
    type: json
    default: {}
  software_config_transport:
    default: POLL_SERVER_CFN
    type: string
  scheduler_hints:
    type: json
    description: Optional scheduler hints to pass to nova
    default: {}
  UpgradeInitCommand:
    type: string
    description: |
      Command or script snippet to run on all overcloud nodes to
      initialize the upgrade process. E.g. a repository switch.
    default: ''
  deployment_swift_data:
    type: json
    default: {}

resources:
  deployed-server:
    type: OS::Heat::DeployedServer
    properties:
      name: {get_param: name}
      software_config_transport: {get_param: software_config_transport}
      deployment_swift_data: {get_param: deployment_swift_data}

  UpgradeInitConfig:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config:
        list_join:
        - ''
        - - "#!/bin/bash\n\n"
          - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
          - get_param: UpgradeInitCommand

  UpgradeInitDeployment:
    type: OS::Heat::SoftwareDeployment
    properties:
      name: UpgradeInitDeployment
      server: {get_resource: deployed-server}
      config: {get_resource: UpgradeInitConfig}


  InstanceIdConfig:
    type: OS::Heat::StructuredConfig
    properties:
      group: apply-config
      config:
        instance-id: {get_resource: deployed-server}

  InstanceIdDeployment:
    type: OS::Heat::StructuredDeployment
    properties:
      name: InstanceIdDeployment
      config: {get_resource: InstanceIdConfig}
      server: {get_resource: deployed-server}
    depends_on: UpgradeInitDeployment

  HostsEntryConfig:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config: |
          #!/bin/bash
          set -eux
          mkdir -p $heat_outputs_path
          host=$(hostname -s)
          echo -n $host > $heat_outputs_path.hostname
          cat $heat_outputs_path.hostname
      outputs:
        - name: hostname
          description: hostname

  HostsEntryDeployment:
    type: OS::Heat::SoftwareDeployment
    properties:
      name: HostsEntryDeployment
      config: {get_resource: HostsEntryConfig}
      server: {get_resource: deployed-server}

  DeployedServerBootstrapConfig:
    type: OS::TripleO::DeployedServer::Bootstrap
    properties:
      server: {get_resource: deployed-server}

  ControlPlanePort:
    type: OS::TripleO::DeployedServer::ControlPlanePort
    properties:
      network: ctlplane
      name:
        list_join:
          - '-'
          - - {get_attr: [HostsEntryDeployment, hostname]}
            - ctlplane
      replacement_policy: AUTO

outputs:
  OS::stack_id:
    value: {get_resource: deployed-server}
  networks:
    value:
      ctlplane:
        - {get_attr: [ControlPlanePort, fixed_ips, 0, ip_address]}
  name:
    value: {get_attr: [HostsEntryDeployment, hostname]}
  os_collect_config:
    value: {get_attr: [deployed-server, os_collect_config]}