tripleo-common/workbooks/stack.yaml

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