mistral-extra/examples/v2/calculator/calculator.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