heat_template_version: pike
description: 'Upgrade for via ansible by applying a step related tag'

parameters:
  UpgradeStepConfig:
     type: json
     description: Config (ansible yaml) that will be used to step through the deployment.
     default: ''

  step:
    type: string
    description: Step number of the upgrade

  SkipUpgradeConfigTags:
    type: comma_delimited_list
    description: Ansible tags to skip during upgrade, e.g validation skips pre-upgrade validations
    default: []

resources:

  AnsibleConfig:
    type: OS::Heat::Value
    properties:
      value:
        str_replace:
          template: CONFIG
          params:
            CONFIG:
              - hosts: localhost
                connection: local
                tasks: {get_param: UpgradeStepConfig}

  AnsibleUpgradeConfigImpl:
    type: OS::Heat::SoftwareConfig
    properties:
      group: ansible
      options:
        skip_tags:
          list_join:
            - ","
            - {get_param: SkipUpgradeConfigTags}
        tags:
          str_replace:
            template: "common,stepSTEP"
            params:
              STEP: {get_param: step}
        modulepath: /usr/share/ansible-modules
      inputs:
      - name: role
      config: {get_attr: [AnsibleConfig, value]}

outputs:
  OS::stack_id:
    description: The software config which runs ansible with tags
    value: {get_resource: AnsibleUpgradeConfigImpl}
  upgrade_config:
    description:  The configuration file used for upgrade
    value: {get_attr: [AnsibleConfig, value]}
