129 lines
3.6 KiB
YAML
129 lines
3.6 KiB
YAML
---
|
|
version: "2.0"
|
|
|
|
name: calculator
|
|
|
|
actions:
|
|
calc_summ:
|
|
description: HTTP request to the server.
|
|
base: std.http
|
|
base-input:
|
|
url: 'http://<% $.vm_ip %>:5000/summ'
|
|
method: POST
|
|
body:
|
|
arguments: <% $.arguments %>
|
|
output:
|
|
summ_result: <% $.content.result %>
|
|
input:
|
|
- vm_ip
|
|
- arguments
|
|
|
|
run_calculator_server:
|
|
description: SSH command to run the server.
|
|
base: std.ssh
|
|
base-input:
|
|
host: <% $.host %>
|
|
username: <% $.username %>
|
|
password: <% $.password %>
|
|
cmd: 'nohup python ~/web_app.py > web_app.log &'
|
|
input:
|
|
- host
|
|
- username
|
|
- password
|
|
|
|
workflows:
|
|
run_calculator:
|
|
type: direct
|
|
|
|
input:
|
|
- server_name # Name of the new instance
|
|
- image_id # image id from Glance service
|
|
- flavor_id # flavor id - type of instance hardware
|
|
- ssh_username # VM username
|
|
- ssh_password # VM password
|
|
- to_email # email address to send notifications to
|
|
- from_email # email address to send notifications from
|
|
- smtp_server # SMTP server to use for sending emails (e.g. smtp.gmail.com:587)
|
|
- smtp_password # password to connect to SMTP server
|
|
|
|
task-defaults:
|
|
on-error:
|
|
- send_create_vm_error
|
|
|
|
description: |
|
|
This workflow spins up a vm,
|
|
deploys calculator web app on it
|
|
and runs the calculation by sending
|
|
a request to calculator app.
|
|
|
|
tasks:
|
|
create_vm:
|
|
description: Initial request to create a VM.
|
|
workflow: std.create_instance
|
|
input:
|
|
name: <% $.server_name %>
|
|
image_id: <% $.image_id %>
|
|
flavor_id: <% $.flavor_id %>
|
|
ssh_username: <% $.ssh_username %>
|
|
ssh_password: <% $.ssh_password %>
|
|
publish:
|
|
vm_id: <% task(create_vm).result.id %>
|
|
vm_ip: <% task(create_vm).result.ip %>
|
|
on-success:
|
|
- run_server
|
|
|
|
run_server:
|
|
description: When VM is up, we are able to run the server on VM (SSH command).
|
|
action: run_calculator_server host=<% $.vm_ip %> username=<% $.ssh_username %> password=<% $.ssh_password %>
|
|
on-success:
|
|
- calc_summ
|
|
|
|
calc_summ:
|
|
description: Send HTTP request on server and calc the result.
|
|
action: calc_summ arguments=[32, 45, 23] vm_ip=<% $.vm_ip %>
|
|
retry:
|
|
count: 10
|
|
delay: 1
|
|
publish:
|
|
result: <% task(calc_summ).result.summ_result %>
|
|
on-complete:
|
|
- send_result_email
|
|
|
|
send_result_email:
|
|
description: Email the result of the calculation.
|
|
action: std.email
|
|
input:
|
|
from_addr: <% $.from_email %>
|
|
to_addrs: [<% $.to_email %>]
|
|
subject: Workflow result
|
|
body: |
|
|
Workflow result of execution <% execution().id %> is <% $.result %>
|
|
|
|
-- Thanks, Mistral Team.
|
|
smtp_server: <% $.smtp_server %>
|
|
smtp_password: <% $.smtp_password %>
|
|
on-complete:
|
|
- delete_vm
|
|
|
|
send_create_vm_error:
|
|
description: In case of createVM error send e-mail with error message.
|
|
action: std.email
|
|
input:
|
|
from_addr: <% $.from_email %>
|
|
to_addrs: [<% $.to_email %>]
|
|
subject: Workflow error
|
|
body: |
|
|
Failed to create a VM in execution <% execution().id %>
|
|
|
|
-- Thanks, Mistral Team.
|
|
smtp_server: <% $.smtp_server %>
|
|
smtp_password: <% $.smtp_password %>
|
|
on-complete:
|
|
- delete_vm
|
|
|
|
delete_vm:
|
|
description: Destroy VM.
|
|
workflow: std.delete_instance instance_id=<% $.vm_id %>
|
|
on-error:
|
|
- fail
|