tripleo-common/workbooks/stack.yaml
Dougal Matthews bcd72d2ada Send a message every time we get the stack
This allows clients to get live updates on the stack status when the
workflow gets them. Otherwise they will need to wait for the workflow
and poll the stack.

Change-Id: I55945adb5bd7d3159248e262f4b510c59c897ebb
2018-05-04 19:30:13 +00:00

144 lines
3.8 KiB
YAML

---
version: '2.0'
name: tripleo.stack.v1
description: TripleO Stack Workflows
workflows:
_heat_stacks_get:
tags:
- tripleo-common-managed
input:
- stack
- queue_name: null
tasks:
heat_stacks_get:
action: heat.stacks_get stack_id=<% $.stack %>
publish:
stack: <% 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:
stack: <% task(heat_stacks_get).result %>
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_get
input:
stack: <% $.stack %>
queue_name: <% $.queue_name %>
timeout: <% $.timeout %>
publish:
stack_status: <% task().result.stack.stack_status %>
retry:
delay: 15
count: <% $.timeout / 15 %>
continue-on: <% task().result.stack.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_get
input:
stack: <% $.stack %>
queue_name: <% $.queue_name %>
timeout: <% $.timeout %>
publish:
stack_status: <% task().result.stack.stack_status %>
retry:
delay: 15
count: <% $.timeout / 15 %>
continue-on: <% task().result.stack.stack_status in ['CREATE_COMPLETE', 'CREATE_FAILED', 'UPDATE_COMPLETE', 'UPDATE_FAILED', 'DELETE_FAILED'] %>
wait_for_stack_does_not_exist:
input:
- stack
- timeout: 3600
tags:
- tripleo-common-managed
tasks:
wait_for_stack_does_not_exist:
action: heat.stacks_list
timeout: <% $.timeout %>
retry:
delay: 15
count: <% $.timeout / 15 %>
continue-on: <% $.stack in task().result.select([$.stack_name, $.id]).flatten() %>
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 stack=<% $.stack %>
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:
action: zaqar.queue_post
retry: count=5 delay=1
input:
queue_name: <% $.queue_name %>
messages:
body:
type: tripleo.scale.v1.delete_stack
payload:
status: <% $.get('status', 'SUCCESS') %>
message: <% $.get('message', '') %>
execution: <% execution() %>
on-success:
- fail: <% $.get('status') = "FAILED" %>