---
version: '2.0'
name: tripleo.deployment.v1
description: TripleO deployment workflows

workflows:

  deploy_on_server:

    input:
      - server_uuid
      - server_name
      - config
      - config_name
      - group
      - queue_name: tripleo

    tags:
      - tripleo-common-managed

    tasks:

      deploy_config:
        action: tripleo.deployment.config
        on-complete: send_message
        input:
          server_id: <% $.server_uuid %>
          name: <% $.config_name %>
          config: <% $.config %>
          group: <% $.group %>
        publish:
          stdout: <% task().result.deploy_stdout %>
          stderr: <% task().result.deploy_stderr %>
          status_code: <% task().result.deploy_status_code %>
        publish-on-error:
          status: FAILED
          message: <% task().result %>

      send_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          execution: <% execution() %>
          status: <% $.get("status", "SUCCESS") %>
          message: <% $.get("message", "") %>
          payload:
            server_uuid: <% $.server_uuid %>
            server_name: <% $.server_name %>
            config_name: <% $.config_name %>
            status_code: <% $.get("status_code", "") %>
            stdout: <% $.get("stdout", "") %>
            stderr: <% $.get("stderr", "") %>

  deploy_on_servers:

    input:
      - server_name
      - config_name
      - config
      - group: script
      - queue_name: tripleo

    tags:
      - tripleo-common-managed

    tasks:

      check_if_all_servers:
        on-success:
          - get_servers_matching: <% $.server_name != "all" %>
          - get_all_servers: <% $.server_name = "all" %>

      get_servers_matching:
        action: nova.servers_list
        on-success: deploy_on_servers
        publish:
          servers_with_name: <% task().result._info.where($.name.indexOf(execution().input.server_name) > -1) %>

      get_all_servers:
        action: nova.servers_list
        on-success: deploy_on_servers
        publish:
          servers_with_name: <% task().result._info %>

      deploy_on_servers:
        on-success: send_success_message
        on-error: send_failed_message
        with-items: server in <% $.servers_with_name %>
        workflow: tripleo.deployment.v1.deploy_on_server
        input:
          server_name: <% $.server.name %>
          server_uuid: <% $.server.id %>
          config: <% $.config %>
          config_name: <% $.config_name %>
          group: <% $.group %>
          queue_name: <% $.queue_name %>

      send_success_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: SUCCESS
          execution: <% execution() %>

      send_failed_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: FAILED
          execution: <% execution() %>
          message: <% task(deploy_on_servers).result %>

  deploy_plan:

    description: >
      Deploy the overcloud for a plan.

    input:
      - container
      - run_validations: False
      - timeout: 240
      - skip_deploy_identifier: False
      - queue_name: tripleo
      - config_download: False
      - ssh_network: ctlplane

    tags:
      - tripleo-common-managed

    tasks:
      send_start_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: RUNNING
          deployment_status: DEPLOYING
          message: "Initializing <% $.container %> plan deployment"
          execution: <% execution() %>
          plan_name: <% $.container %>
        on-complete: add_validation_ssh_key

      add_validation_ssh_key:
        workflow: tripleo.validations.v1.add_validation_ssh_key_parameter
        input:
          container: <% $.container %>
          queue_name: <% $.queue_name %>
        on-complete:
          - run_validations: <% $.run_validations %>
          - container_image_prepare_params: <% not $.run_validations %>

      run_validations:
        workflow: tripleo.validations.v1.run_groups
        input:
          group_names:
            - 'pre-deployment'
          plan: <% $.container %>
          queue_name: <% $.queue_name %>
        publish-on-error:
          message: <% task().result %>
        on-success: container_image_prepare_params
        on-error: set_deployment_failed

      container_image_prepare_params:
        action: tripleo.container_images.prepare_params
        input:
          container: <% $.container %>
        publish-on-error:
          message: <% task().result %>
        on-success: create_swift_rings_backup_plan
        on-error: set_deployment_failed

      create_swift_rings_backup_plan:
        workflow: tripleo.swift_backup.v1.create_swift_backup_container_plan
        input:
          container: <% $.container %>
          queue_name: <% $.queue_name %>
          container_suffix: "-swift-rings"
          swift_tar: "swift-rings.tar.gz"
          get_url_parm: SwiftRingGetTempurl
          put_url_parm: SwiftRingPutTempurl
          use_default_templates: true
        publish-on-error:
          message: <% task().result %>
        on-success: create_ceph_ansible_fetch_directory_backup_plan
        on-error: set_deployment_failed

      create_ceph_ansible_fetch_directory_backup_plan:
        workflow: tripleo.swift_backup.v1.create_swift_backup_container_plan
        input:
          container: <% $.container %>
          queue_name: <% $.queue_name %>
          container_suffix: "_ceph_ansible_fetch_dir"
          swift_tar: "temporary_dir.tar.gz"
          get_url_parm: SwiftFetchDirGetTempurl
          put_url_parm: SwiftFetchDirPutTempurl
          use_default_templates: true
        publish-on-error:
          message: <% task().result %>
        on-success: cell_v2_discover_hosts
        on-error: set_deployment_failed

      cell_v2_discover_hosts:
        action: tripleo.baremetal.cell_v2_discover_hosts
        publish-on-error:
          message: <% task().result %>
        on-success: send_stack_deployment_message
        on-error: set_deployment_failed

      send_stack_deployment_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: RUNNING
          deployment_status: DEPLOYING
          message: "Creating <% $.container %> Heat stack"
          execution: <% execution() %>
          plan_name: <% $.container %>
        on-complete: deploy

      deploy:
        action: tripleo.deployment.deploy
        input:
          timeout: <% $.timeout %>
          container: <% $.container %>
          skip_deploy_identifier: <% $.skip_deploy_identifier %>
        publish-on-error:
          message: <% task().result %>
        on-success:
          - wait_for_stack_complete: <% $.config_download %>
          - set_deployment_deploying: <% not $.config_download %>
        on-error: set_deployment_failed

      wait_for_stack_complete:
        workflow: tripleo.stack.v1.wait_for_stack_complete_or_failed
        input:
          stack: <% $.container %>
          queue_name: <% $.queue_name %>
        publish-on-error:
          message: <% task().result %>
        publish:
          message: Stack status <% task().result.stack_status %>
        on-error: set_deployment_failed
        on-success:
          - message_stack_complete: <% task().result.stack_status = "CREATE_COMPLETE" %>
          - get_servers: <% task().result.stack_status = "CREATE_COMPLETE" %>
          - set_deployment_failed: <% task().result.stack_status != "CREATE_COMPLETE" %>

      message_stack_complete:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: <% $.get('status', 'RUNNING') %>
          deployment_status: DEPLOYING
          execution: <% execution() %>
          plan_name: <% $.container %>
          message: <% $.get("message", "") %>

      get_servers:
        action: nova.servers_list
        publish:
          # FIXME(mandre) we want only the servers part of the plan
          servers: <% task().result._info.select($.addresses.ctlplane.addr).flatten() %>
        publish-on-error:
          message: <% task().result %>
        on-success: get_private_key
        on-error: set_deployment_failed

      get_private_key:
        action: tripleo.validations.get_privkey
        publish:
          private_key: <% task().result %>
        publish-on-error:
          message: <% task().result %>
        on-success: enable_ssh_admin
        on-error: set_deployment_failed

      enable_ssh_admin:
        workflow: tripleo.access.v1.enable_ssh_admin
        input:
          ssh_servers: <% $.servers %>
          ssh_private_key: <% $.private_key %>
          # FIXME(mandre) this shouldn't be hardcoded
          ssh_user: heat-admin
          plan_name: <% $.container %>
        publish-on-error:
          message: <% task().result %>
        on-success: config_download_deploy
        on-error: set_deployment_failed

      config_download_deploy:
        workflow: config_download_deploy
        input:
          plan_name: <% $.container %>
          queue_name: <% $.queue_name %>
          ssh_network: <% $.get('ssh_network') %>
        publish-on-error:
          message: <% task().result %>
        on-success: set_deployment_success
        on-error: set_deployment_failed

      set_deployment_failed:
        on-success: send_message
        publish:
          status: FAILED
          deployment_status: DEPLOY_FAILED

      set_deployment_success:
        on-success: send_message
        publish:
          status: SUCCESS
          deployment_status: DEPLOY_SUCCESS

      set_deployment_deploying:
        on-success: send_message
        publish:
          status: SUCCESS
          deployment_status: DEPLOYING

      send_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: <% $.status %>
          message: <% $.get('message', '') %>
          execution: <% execution() %>
          plan_name: <% $.container %>
          deployment_status: <% $.deployment_status %>

  get_horizon_url:

    description: >
      Retrieve the Horizon URL from the Overcloud stack.

    input:
      - stack: overcloud
      - queue_name: tripleo

    tags:
      - tripleo-common-managed

    output:
      horizon_url: <% $.horizon_url %>

    tasks:
      get_horizon_url:
        action: heat.stacks_output_show
        input:
          stack_id: <% $.stack %>
          output_key: EndpointMap
        publish:
          horizon_url: <% task().result.output.output_value.HorizonPublic.uri %>
        on-success: send_message
        publish-on-error:
          status: FAILED
          message: <% task().result %>

      send_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: <% $.get('status', 'SUCCESS') %>
          execution: <% execution() %>
          message: <% $.get('message', '') %>
          payload:
            horizon_url: <% $.get('horizon_url', '') %>

  config_download_deploy:

    description: >
      Configure the overcloud with config-download.

    input:
      - queue_name: tripleo
      - plan_name: overcloud
      - ssh_network: ctlplane
      - work_dir: /var/lib/mistral
      - verbosity: 1
      - blacklist: []
      - override_ansible_cfg: ""
      - config_download_timeout: 14400

    tags:
      - tripleo-common-managed

    tasks:

      get_blacklisted_hostnames:
        action: heat.stacks_output_show
        input:
          stack_id: <% $.plan_name %>
          output_key: BlacklistedHostnames
        publish:
          blacklisted_hostnames: <% task().result.output.output_value.where($ != "") %>
        on-success: get_config
        on-error: send_message
        publish-on-error:
          status: FAILED
          message: <% task().result %>
          deployment_status: DEPLOY_FAILED

      get_config:
        action: tripleo.config.get_overcloud_config
        input:
          container: <% $.get('plan_name') %>
          container_config: <% $.get('plan_name') %>-config
        on-success: download_config
        on-error: send_message
        publish-on-error:
          status: FAILED
          message: <% task().result %>
          deployment_status: DEPLOY_FAILED

      download_config:
        action: tripleo.config.download_config
        input:
          work_dir: <% $.get('work_dir') %>/<% $.get('plan_name') %>
          container_config: <% $.get('plan_name') %>-config
        on-success: send_msg_config_download
        on-error: send_message
        publish-on-error:
          status: FAILED
          message: <% task().result %>
          deployment_status: DEPLOY_FAILED

      send_msg_config_download:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: <% $.get('status', 'RUNNING') %>
          deployment_status: DEPLOYING
          execution: <% execution() %>
          message: Config downloaded at <% $.get('work_dir') %>/<% $.get('plan_name') %>
          plan_name: <% $.plan_name %>
        on-success: get_private_key

      get_private_key:
        action: tripleo.validations.get_privkey
        publish:
          private_key: <% task().result %>
        on-success: generate_inventory
        on-error: send_message
        publish-on-error:
          status: FAILED
          message: <% task().result %>
          deployment_status: DEPLOY_FAILED

      generate_inventory:
        action: tripleo.ansible-generate-inventory
        input:
          ansible_ssh_user: tripleo-admin
          work_dir: <% $.get('work_dir') %>/<% $.get('plan_name') %>
          plan_name: <% $.get('plan_name') %>
          ssh_network: <% $.get('ssh_network') %>
        publish:
          inventory: <% task().result %>
        on-success: send_msg_generate_inventory
        on-error: send_message
        publish-on-error:
          status: FAILED
          message: <% task().result %>
          deployment_status: DEPLOY_FAILED

      send_msg_generate_inventory:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: <% $.get('status', 'RUNNING') %>
          deployment_status: DEPLOYING
          execution: <% execution() %>
          message: Inventory generated at <% $.get('inventory') %>
          plan_name: <% $.plan_name %>
        on-success: send_msg_run_ansible

      send_msg_run_ansible:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: <% $.get('status', 'RUNNING') %>
          deployment_status: DEPLOYING
          execution: <% execution() %>
          plan_name: <% $.plan_name %>
          message: >
            Running ansible playbook at <% $.get('work_dir') %>/<% $.get('plan_name') %>/deploy_steps_playbook.yaml.
            See log file at <% $.get('work_dir') %>/<% $.get('plan_name') %>/ansible.log for progress.
            ...
        on-success: run_ansible

      run_ansible:
        action: tripleo.ansible-playbook
        input:
          inventory: <% $.inventory %>
          playbook: <% $.get('work_dir') %>/<% $.get('plan_name') %>/deploy_steps_playbook.yaml
          playbook_name: deploy_steps_playbook.yaml
          plan_name: <% $.plan_name %>
          remote_user: tripleo-admin
          ssh_private_key: <% $.private_key %>
          use_openstack_credentials: true
          verbosity: <% $.get('verbosity') %>
          become: true
          work_dir: <% $.get('work_dir') %>/<% $.get('plan_name') %>
          queue_name: <% $.queue_name %>
          reproduce_command: true
          trash_output: true
          blacklisted_hostnames: <% $.blacklisted_hostnames %>
          override_ansible_cfg: <% $.override_ansible_cfg %>
          command_timeout: <% $.config_download_timeout %>
          execution_id: <% execution().id %>
        publish:
          log_path: <% task().result.get('log_path') %>
          deployment_status: DEPLOY_SUCCESS
        on-success:
          - ansible_passed: <% task().result.returncode = 0 %>
          - ansible_timeout: <% task().result.returncode = 124 %>
          - ansible_failed: <% not task().result.returncode in [0, 124] %>
        on-error: send_message
        publish-on-error:
          status: FAILED
          message: Ansible failed, check log at <% $.get('work_dir') %>/<% $.get('plan_name') %>/ansible.log.
          deployment_status: DEPLOY_FAILED

      ansible_passed:
        on-success: send_message
        publish:
          status: SUCCESS
          message: Ansible passed.
          deployment_status: DEPLOY_SUCCESS

      ansible_timeout:
        on-success: send_message
        publish:
          status: FAILED
          message: Ansible timed out at <% $.config_download_timeout %> seconds.
          deployment_status: DEPLOY_FAILED

      ansible_failed:
        on-success: send_message
        publish:
          status: FAILED
          message: Ansible failed, check log at <% $.get('work_dir') %>/<% $.get('plan_name') %>/ansible.log.
          deployment_status: DEPLOY_FAILED

      send_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: <% $.get('status', 'SUCCESS') %>
          execution: <% execution() %>
          message: <% $.get('message', '') %>
          plan_name: <% $.plan_name %>
          deployment_status: <% $.deployment_status %>

  config_download_export:

    description: Creates an export tarball and an associated Swift tempurl for config-download for the given plan.

    input:
      - plan
      - queue_name: tripleo
      - config_type: ""

    tags:
      - tripleo-common-managed

    tasks:

      get_config:
        action: tripleo.config.get_overcloud_config
        input:
          container: <% $.plan %>
          container_config: <% $.plan %>-config
          config_type: <% $.config_type %>
        on-success: create_tempurl
        on-error: send_message
        publish-on-error:
          status: FAILED
          message: <% task().result %>

      create_tempurl:
        action: tripleo.swift.tempurl
        on-success: set_status_success
        on-error: send_message
        input:
          container: <% $.plan %>-config
          obj: "<% $.plan %>-config.tar.gz"
          valid: 14400
        publish-on-error:
          status: FAILED
          message: <% task().result %>

      set_status_success:
        on-success: send_message
        publish:
          status: SUCCESS
          message: "config-download export successful"
          tempurl: <% task(create_tempurl).result %>

      send_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: <% $.status %>
          execution: <% execution() %>
          plan_name: <% $.plan %>
          message: <% $.get('message', '') %>
          payload:
            tempurl: <% $.get('tempurl', '') %>

  undeploy_plan:

    description: >
      Undeploy a plan.

    input:
      - container
      - timeout: 240
      - queue_name: tripleo

    tags:
      - tripleo-common-managed

    tasks:
      send_start_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: RUNNING
          deployment_status: UNDEPLOYING
          message: "Deleting <% $.container %> deployment"
          execution: <% execution() %>
          plan_name: <% $.container %>
        on-complete: delete_stack

      delete_stack:
        workflow: tripleo.stack.v1.delete_stack
        input:
          stack: <% $.container %>
          queue_name: <% $.queue_name %>
        on-complete: send_undeployed_message
        publish-on-error:
          status: FAILED
          deployment_status: UNDEPLOY_FAILED
          message: "Failed to delete <% $.container %> deployment: <% task().result %>"
        publish:
          status: SUCCESS
          deployment_status: UNDEPLOYED
          message: "Deleted <% $.container %> deployment"

      send_undeployed_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: <% $.status %>
          deployment_status: <% $.deployment_status %>
          message: <% $.message %>
          execution: <% execution() %>
          plan_name: <% $.container %>

  create_overcloudrc:
    description: >
      Given the name of a container and optionally a comma-separated string
      of hosts that shouldn't be proxied, generate the overcloudrc files
      needed to access the overcloud via the CLI.

    tags:
      - tripleo-common-managed

    input:
      - container: overcloud
      - no_proxy: ''
      - queue_name: tripleo

    tasks:
      generate_overcloud_rc:
        action: tripleo.deployment.overcloudrc
        input:
          container: <% $.container %>
          no_proxy: <% $.no_proxy %>
        on-complete: send_message
        publish-on-error:
          status: FAILED
          message: <% task().result %>
        publish:
          status: SUCCESS
          message: <% task().result %>

      send_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: <% $.status %>
          execution: <% execution() %>
          message: <% $.get('message', '') %>

  get_deployment_status:
    description: >
      Get deployment status and update it if needed based on stack and
      config_downlooad status.

    tags:
      - tripleo-common-managed

    input:
      - plan: overcloud
      - queue_name: tripleo

    output:
      deployment_status: <% $.deployment_status %>

    tasks:

      get_deployment_status:
        action: tripleo.deployment.get_deployment_status
        input:
          plan: <% $.plan %>
        publish:
          status_update: <% yaml_parse(coalesce(task().result.status_update, '')) %>
          deployment_status: <% task().result.deployment_status %>
        on-complete:
          - reload_deployment_status: <% $.status_update = null and $.deployment_status != null %>
          - update_status: <% $.status_update != null and $.deployment_status != null %>
          - send_message: <% $.deployment_status = null %>
        publish-on-error:
          message: No deployment status found for plan <% $.plan %>
          deployment_status: ""

      update_status:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: RUNNING
          execution: <% execution() %>
          plan_name: <% $.plan %>
          deployment_status: <% $.status_update %>
        on-complete: reload_deployment_status

      reload_deployment_status:
        action: swift.get_object
        input:
          container: <% $.plan %>-messages
          obj: deployment_status.yaml
        publish:
          deployment_status: <% yaml_parse(task().result.last()) %>
        on-complete: send_message

      send_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          execution: <% execution() %>
          status: <% $.get("status", "SUCCESS") %>
          payload:
            deployment_status: <% $.get(deployment_status, "") %>

  set_deployment_status_success:
    description: >
      Set deployment status to success and return the new status

    tags:
      - tripleo-common-managed

    input:
      - plan: overcloud
      - queue_name: tripleo

    output:
      deployment_status: <% $.deployment_status %>

    tasks:

      set_deployment_success:
        on-success: send_message
        publish:
          status: SUCCESS
          deployment_status: DEPLOY_SUCCESS

      send_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: <% $.status %>
          message: <% $.get('message', '') %>
          execution: <% execution() %>
          plan_name: <% $.plan %>
          deployment_status: <% $.deployment_status %>
          payload:
            deployment_status: <% $.deployment_status %>

  set_deployment_status_failed:
    description: >
      Set deployment status to failed and return the new status

    tags:
      - tripleo-common-managed

    input:
      - plan: overcloud
      - queue_name: tripleo

    output:
      deployment_status: <% $.deployment_status %>

    tasks:

      set_deployment_failed:
        on-success: send_message
        publish:
          status: SUCCESS
          deployment_status: DEPLOY_FAILED

      send_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: <% $.status %>
          message: <% $.get('message', '') %>
          execution: <% execution() %>
          plan_name: <% $.plan %>
          deployment_status: <% $.deployment_status %>
          payload:
            deployment_status: <% $.deployment_status %>

  set_deployment_status_deploying:
    description: >
      Set deployment status to deploying and return the new status

    tags:
      - tripleo-common-managed

    input:
      - plan: overcloud
      - queue_name: tripleo

    output:
      deployment_status: <% $.deployment_status %>

    tasks:

      set_deployment_failed:
        on-success: send_message
        publish:
          status: SUCCESS
          deployment_status: DEPLOYING

      send_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          status: <% $.status %>
          message: <% $.get('message', '') %>
          execution: <% execution() %>
          plan_name: <% $.plan %>
          deployment_status: <% $.deployment_status %>
          payload:
            deployment_status: <% $.deployment_status %>

  get_deployment_failures:
    description: >
      Get deployment failures

    tags:
      - tripleo-common-managed

    input:
      - plan: overcloud
      - queue_name: tripleo

    output:
      deployment_failures: <% $.deployment_failures %>

    tasks:

      get_deployment_failures:
        action: tripleo.deployment.get_deployment_failures
        input:
          plan: <% $.plan %>
        publish:
          deployment_failures: <% task().result.failures %>
          message: <% task().result.message %>
          status: <% task().result.message and "FAILED" or "SUCCESS" %>
        on-complete: send_message
        publish-on-error:
          status: FAILED
          message: <% task().result %>

      send_message:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          execution: <% execution() %>
          status: <% $.get("status", "SUCCESS") %>
          message: <% $.get("message", "") %>
          payload:
            deployment_failures: <% $.get(deployment_failures, "") %>

  recover_deployment_status:
    description: >
      Convert an existing deployment into one that supports config-download

    tags:
      - tripleo-common-managed

    input:
      - container: overcloud
      - queue_name: tripleo

    tasks:
      query:
        action: heat.stacks_get
        input:
          stack_id: <% $.container %>
        publish:
          stack_status: <% task().result.stack_status %>
          message: <% task().result.stack_status_reason %>
        publish-on-error:
          stack_status: NO_STACK
        on-success: convert_deployment_status
        on-error: convert_deployment_status

      convert_deployment_status:
        action: tripleo.deployment.convert_status
        input:
          status: <% $.stack_status %>
        publish:
          deployment_status: <% task().result %>
        on-complete: recover

      recover:
        workflow: tripleo.messaging.v1.send
        input:
          queue_name: <% $.queue_name %>
          type: <% execution().name %>
          execution: <% execution() %>
          deployment_status: <% $.deployment_status %>
          plan_name: <% $.container %>
          message: <% $.get('message', '') %>
