Issue with registered ec2 creation variable
<p>I have a playbook that creates an ec2 instance and from that creation I want to register the output as a var. From there I would use the registered var to create and attach an ebs volume. However I'm running into the following error. </p>

<pre><code> - name: Create EC2 instance for zone A
   ec2:
    key_name: "{{ keypair }}"
    group: "{{ security_groups }}"
    image: "{{ ami }}"
    instance_type: "{{ instance_type }}"
    wait: true
    region: "{{ ec2_region }}"
    vpc_subnet_id: "{{ subneta }}"
    assign_public_ip: "{{ public_choice }}"
    zone: "{{ zonea }}"
    count: 1
    instance_tags:
      Name: "db{{ item }}a.{{ env }}"
      envtype: "{{ envtype }}"
   register: ec2
   with_sequence: "start=1 end={{ num }}"


 - debug:
    msg: "{{ ec2 }}"
 - debug:
    msg: "{{ ec2.instance_ids }}"
</code></pre>

<p>With this I get the following output</p>

<pre><code>dumbledore@ansible1a:/etc/ansible/roles/db_ec2/tasks &gt; ansible-playbook db_ec2.yml -e 'env=qa num=1 ebs=true'
 ______
&lt; PLAY &gt;
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

 ______________________
&lt; TASK [db_ec2 : fail] &gt;
 ----------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

 _______________________
&lt; TASK [db_ec2 : debug] &gt;
 -----------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost] =&gt; {
    "msg": "If you need to change any default variables for this playbook edit vars/qa.yml and vars/ebs.yml for ebs configs"
}
 _________________________
&lt; TASK [db_ec2 : include] &gt;
 -------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

included: /etc/ansible/roles/db_ec2/tasks/./db_create.yml for localhost
 ________________________________________________
&lt; TASK [db_ec2 : Create EC2 instance for zone A] &gt;
 ------------------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

changed: [localhost] =&gt; (item=1)
 _______________________
&lt; TASK [db_ec2 : debug] &gt;
 -----------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost] =&gt; {
    "msg": {
        "changed": true,
        "msg": "All items completed",
        "results": [
            {
                "_ansible_no_log": false,
                "changed": true,
                "instance_ids": [
                    "i-1046c108"
                ],
                "instances": [
                    {
                        "ami_launch_index": "0",
                        "architecture": "x86_64",
                        "block_device_mapping": {
                            "/dev/sda1": {
                                "delete_on_termination": true,
                                "status": "attached",
                                "volume_id": "vol-55812edd"
                            }
                        },
                        "dns_name": "",
                        "ebs_optimized": false,
                        "groups": {
                            "sg-749f3c0d": "qa-ssh",
                            "sg-8f983bf6": "qa-db"
                        },
                        "hypervisor": "xen",
                        "id": "i-1046c108",
                        "image_id": "ami-55e31a35",
                        "instance_type": "m4.xlarge",
                        "kernel": null,
                        "key_name": "ccpkey",
                        "launch_time": "2016-09-28T00:28:00.000Z",
                        "placement": "us-west-2a",
                        "private_dns_name": "ip-10-50-36-201.us-west-2.compute.internal",
                        "private_ip": "10.50.36.201",
                        "public_dns_name": "",
                        "public_ip": null,
                        "ramdisk": null,
                        "region": "us-west-2",
                        "root_device_name": "/dev/sda1",
                        "root_device_type": "ebs",
                        "state": "running",
                        "state_code": 16,
                        "tags": {
                            "Name": "db1a.qa",
                            "envtype": "qa-db"
                        },
                        "tenancy": "default",
                        "virtualization_type": "hvm"
                    }
                ],
                "invocation": {
                    "module_args": {
                        "assign_public_ip": false,
                        "aws_access_key": null,
                        "aws_secret_key": null,
                        "count": 1,
                        "count_tag": null,
                        "ebs_optimized": false,
                        "ec2_url": null,
                        "exact_count": null,
                        "group": [
                            "qa-db",
                            "qa-ssh"
                        ],
                        "group_id": null,
                        "id": null,
                        "image": "ami-55e31a35",
                        "instance_ids": null,
                        "instance_profile_name": null,
                        "instance_tags": {
                            "Name": "db1a.qa",
                            "envtype": "qa-db"
                        },
                        "instance_type": "m4.xlarge",
                        "kernel": null,
                        "key_name": "ccpkey",
                        "monitoring": false,
                        "network_interfaces": null,
                        "placement_group": null,
                        "private_ip": null,
                        "profile": null,
                        "ramdisk": null,
                        "region": "us-west-2",
                        "security_token": null,
                        "source_dest_check": true,
                        "spot_price": null,
                        "spot_type": "one-time",
                        "spot_wait_timeout": 600,
                        "state": "present",
                        "tenancy": "default",
                        "termination_protection": false,
                        "user_data": null,
                        "validate_certs": true,
                        "volumes": null,
                        "vpc_subnet_id": "subnet-5d625c39",
                        "wait": true,
                        "wait_timeout": 300,
                        "zone": "us-west-2a"
                    },
                    "module_name": "ec2"
                },
                "item": "1",
                "tagged_instances": []
            }
        ]
    }
}
 _______________________
&lt; TASK [db_ec2 : debug] &gt;
 -----------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

fatal: [localhost]: FAILED! =&gt; {"failed": true, "msg": "'dict object' has no attribute 'instance_ids'"}
 ____________
&lt; PLAY RECAP &gt;
 ------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

localhost                  : ok=4    changed=1    unreachable=0    failed=1
</code></pre>

<p>So I can see that the variable that should exist does in the output of the full ec2 variable. But when trying to use the key specific variable of ec2.instance_ids it fails...</p>

<p>EDIT:</p>

<p>This appears to be specific to with_sequence. If I remove the with sequence and change it up to something like this. </p>

<pre><code> - name: Create EC2 instance for zone A
   ec2:
    key_name: "{{ keypair }}"
    group: "{{ security_groups }}"
    image: "{{ ami }}"
    instance_type: "{{ instance_type }}"
    region: "{{ ec2_region }}"
    vpc_subnet_id: "{{ subneta }}"
    assign_public_ip: "{{ public_choice }}"
    zone: "{{ zonea }}"
    count: "{{ num }}"
    wait: true
    instance_tags:
      envtype: "{{ envtype }}"
   register: ec2

 - debug:
    msg: "{{ item.id }}"
   with_items: "{{ ec2.instances }}"
</code></pre>

<p>I no longer get any errors and it prints the instance ID without issue. </p>

<p>Not sure how with_sequence would affect here, but I see atleast one basic problem here.</p>

<p>When you register the output of ec2 task in a variable named "ec2", you can refer to instance_ids with the following -</p>

<pre><code>ec2.results[0].instance_ids
</code></pre>

<p>Ansible task is complaining because there is no top level key named as "instance_ids" within "ec2", rather it is present in "results" key within "ec2".</p>

<p>Hope this makes sense unless I am interpreting your question incorrectly.</p>

python ansible ansible-playbook