--- version: '2.0' name: tripleo.stack.v1 description: TripleO Stack Workflows workflows: _heat_stacks_list: tags: - tripleo-common-managed input: - queue_name: null tasks: heat_stacks_list: action: heat.stacks_list publish: stacks: <% task().result %> on-success: - send_message: <% bool($.queue_name) %> send_message: workflow: tripleo.messaging.v1.send input: queue_name: <% $.queue_name %> type: <% execution().name %> status: "RUNNING" # This should never be the end of a workflow execution: <% execution() %> payload: stacks: <% $.stacks %> wait_for_stack_complete_or_failed: input: - stack - timeout: 14400 # 4 hours. Default timeout of stack deployment - queue_name: null tags: - tripleo-common-managed tasks: wait_for_stack_status: workflow: _heat_stacks_list input: queue_name: <% $.queue_name %> timeout: <% $.timeout %> publish: stack_status: <% let(stack => $.stack) -> task().result.stacks.where($.stack_name = $stack).first().stack_status %> retry: delay: 15 count: <% $.timeout / 15 %> continue-on: <% $.stack_status in ['CREATE_IN_PROGRESS', 'UPDATE_IN_PROGRESS', 'DELETE_IN_PROGRESS'] %> wait_for_stack_in_progress: input: - stack - timeout: 600 # 10 minutes. Should not take much longer for a stack to transition to IN_PROGRESS - queue_name: null tags: - tripleo-common-managed tasks: wait_for_stack_status: workflow: _heat_stacks_list input: stack: <% $.stack %> queue_name: <% $.queue_name %> timeout: <% $.timeout %> publish: stack_status: <% let(stack => $.stack) -> task().result.stacks.where($.stack_name = $stack).first().stack_status %> retry: delay: 15 count: <% $.timeout / 15 %> continue-on: <% $.stack_status in ['CREATE_COMPLETE', 'CREATE_FAILED', 'UPDATE_COMPLETE', 'UPDATE_FAILED', 'DELETE_FAILED'] %> wait_for_stack_does_not_exist: input: - stack - timeout: 3600 - queue_name: null tags: - tripleo-common-managed tasks: wait_for_stack_status: workflow: _heat_stacks_list input: queue_name: <% $.queue_name %> timeout: <% $.timeout %> publish: stack_status: <% let(stack => $.stack) -> task().result.stacks.where($.stack_name = $stack).first({}).get(stack_status) %> retry: delay: 15 count: <% $.timeout / 15 %> continue-on: <% $.stack_status = 'DELETE_FAILED' or $.stack in task().result.stacks.select([$.stack_name, $.id]).flatten() %> on-complete: fail: <% $.stack_status = 'DELETE_FAILED' %> delete_stack: input: - stack - queue_name: tripleo tags: - tripleo-common-managed tasks: delete_the_stack: action: heat.stacks_delete stack_id=<% $.stack %> on-success: wait_for_stack_does_not_exist on-error: delete_the_stack_failed delete_the_stack_failed: on-success: send_message publish: status: FAILED message: <% task(delete_the_stack).result %> wait_for_stack_does_not_exist: workflow: tripleo.stack.v1.wait_for_stack_does_not_exist input: stack: <% $.stack %> queue_name: <% $.queue_name %> on-success: send_message on-error: wait_for_stack_does_not_exist_failed wait_for_stack_does_not_exist_failed: on-success: send_message publish: status: FAILED message: <% task(wait_for_stack_does_not_exist).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', '') %>