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.

Reply via email to