Peter
Peter

Reputation: 981

Get the AMI ID of an AMI created with Ansible

I'm building an EC2 instance with Ansible, then creating an AMI from the instance. I'm sure I'm missing something here, but how do I get the DI of the newly created AMI? I've tried:

tasks:
- name: create an ami in us-east-1
  ec2_ami: wait=yes
           aws_access_key={{ ec2_access_key }}
           aws_secret_key={{ ec2_secret_key }}
           instance_id={{ item }}
           region={{ region1 }}
           name=data-mgmt-qa-006
  with_items: hostvars[inventory_hostname]['ansible_ec2_instance_id']
  register: ec2_ami_info

- debug: var=item
  with_items: ec2_ami_info.image_id 

and:

tasks:
- name: create an ami in us-east-1
  ec2_ami: wait=yes
           aws_access_key={{ ec2_access_key }}
           aws_secret_key={{ ec2_secret_key }}
           instance_id={{ item }}
           region={{ region1 }}
           name=data-mgmt-qa-006
  with_items: hostvars[inventory_hostname]['ansible_ec2_instance_id']
  register: instance

- debug: var=item
  with_items: instance.image_id

The latter 'register' is copied from the docs, but I'm not able to get the right with_items obviously.

The AMI is being created fine. Any suggestions would be much appreciated.

Upvotes: 3

Views: 2317

Answers (2)

Peter
Peter

Reputation: 981

Ran debug var=instance, and got:

TASK: [debug var=instance] **************************************************** 
ok: [54.90.128.104] => {
"instance": {
    "changed": true, 
    "msg": "All items completed", 
    "results": [
        {
            "changed": true, 
            "image_id": "ami-be14b9d6", 
            "invocation": {
                "module_args": "wait=yes aws_access_key=**** aws_secret_key=**** instance_id=i-393284d2 region=us-east-1 name=blah", 
                "module_name": "ec2_ami"
            }, 
            "item": "i-393284d2", 
            "msg": "AMI creation operation complete", 
            "state": "available"
        }
    ]
}
}

Given that:

- debug: var=instance.results[0].image_id

gave the correct results.

Upvotes: 7

Ben Whaley
Ben Whaley

Reputation: 34416

The ec2_ami task is correct, but your invocation of the debug module is wrong. Try this:

- debug: var=instance.image_id

or alternatively

- debug: msg={{instance.image_id}}

You don't need with_items here since there's only one value. with_items is a loop.

Upvotes: 2

Related Questions