I'm trying to use Ansible to automate the creation of Amazon machine
images. The basic process is: 1) create an instance 2) run ansible play on
that instance 3) convert that instance to an AMI
Right now I'm cramming all of these steps into one playbook with three
separate plays, primarily because the AWS API is run against the host
'localhost' whereas provisioning the instance with Ansible requires
pointing Ansible to the instance. The problem is that the 'convert instance
to ami' play will run regardless of whether the previous play succeeded or
failed. I only want to create the AMI if the instance was actually
successfully provisioned, but I haven't found a good way to do it. Playbook
looks like this:
------------------------------
- name: provision instance
hosts: localhost
vars:
[...]
tasks:
- name: create instance
ec2:
[...]
wait: yes
register: ec2
- name: add instances to inventory / nodejs group
add_host:
hostname: "{{item.public_dns_name}}"
groups: nodejs
with_items: ec2.tagged_instances
- name: wait for instance accessible
wait_for:
host: "{{item.public_dns_name}}"
port: 22
search_regex: "OpenSSH"
with_items: ec2.tagged_instances
- name: run ansible on all hosts in group
become: yes
hosts: nodejs
roles:
- nodejs
- name: convert instance to ami
hosts: localhost
vars:
region: us-west-2
tasks:
- name: build ami
ec2_ami:
name: amlx-nodejs
description: basic nodejs image
instance_id: "{{item.id}}"
region: "{{region}}"
wait: yes
with_items: ec2.tagged_instances
Does anyone have any ideas for a better way to structure this? I thought
this would be a very simple situation, but it's the first time I've had to
run plays across different hosts, and clearly I'm missing something.
Thanks for your help!
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/ed1e2f78-fe0c-4d14-ba62-e03347605906%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.