--- version: '2.0' std.create_instance: type: direct description: | Creates VM and waits till VM OS is up and running. input: - name - image_id - flavor_id - ssh_username: null - ssh_password: null # Name of previously created keypair to inject into the instance. # Either ssh credentials or keypair must be provided. - key_name: null # Security_groups: A list of security group names - security_groups: null # An ordered list of nics to be added to this server, with information about connected networks, fixed IPs, port etc. # Example: nics: [{"net-id": "27aa8c1c-d6b8-4474-b7f7-6cdcf63ac856"}] - nics: null task-defaults: on-error: - delete_vm output: ip: <% $.vm_ip %> id: <% $.vm_id %> name: <% $.name %> status: <% $.status %> tasks: create_vm: description: Initial request to create a VM. action: nova.servers_create name=<% $.name %> image=<% $.image_id %> flavor=<% $.flavor_id %> input: key_name: <% $.key_name %> security_groups: <% $.security_groups %> nics: <% $.nics %> publish: vm_id: <% task(create_vm).result.id %> on-success: - search_for_ip search_for_ip: description: Gets first free ip from Nova floating IPs. action: nova.floating_ips_findall instance_id=null publish: vm_ip: <% task(search_for_ip).result[0].ip %> on-success: - wait_vm_active wait_vm_active: description: Waits till VM is ACTIVE. action: nova.servers_find id=<% $.vm_id %> status="ACTIVE" retry: count: 10 delay: 10 publish: status: <% task(wait_vm_active).result.status %> on-success: - associate_ip associate_ip: description: Associate server with one of floating IPs. action: nova.servers_add_floating_ip server=<% $.vm_id %> address=<% $.vm_ip %> wait-after: 5 on-success: - wait_ssh wait_ssh: description: Wait till operating system on the VM is up (SSH command). action: std.wait_ssh username=<% $.ssh_username %> password=<% $.ssh_password %> host=<% $.vm_ip %> retry: count: 10 delay: 10 delete_vm: description: Destroy VM. workflow: std.delete_instance instance_id=<% $.vm_id %> on-complete: - fail