tripleo-common/workbooks/stack.yaml
Dougal Matthews 5399657bdd Exit wait_for_stack_does_not_exist if the status is delete failed
The current implementation waits for 10 minutes, regardless of the stack
status. This will exit earlier and fail the workflow, triggering the
error handling in the delete_stack workflow.

Change-Id: I1c38e9c4f1c8e5a7be8a354549ebfdcbd2e822cd
Closes-Bug: #1777074
2018-12-20 14:12:05 +00:00

145 lines
4.1 KiB
YAML

---
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().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', '') %>