"The launching of the instances works fine, but I can't seem to find the
right way to use the registered result. "

Looks like there are two arrays here:

 ec2.results[0].instances
 and
 ec2.results[1].instances

So, trivially, you could wait like this:

- name: Wait for the instances to boot by checking the ssh port
  local_action: wait_for host={{item.public_dns_name}} port=22 delay=60
 timeout=320 state=started
  with_items: ec2.results.0.instances

- name: Wait for the instances to boot by checking the ssh port
  local_action: wait_for host={{item.public_dns_name}} port=22 delay=60
 timeout=320 state=started
  with_items: ec2.results.1.instances

Which I realize isn't perfect, but it's ok-ish.

An alternative might be to write a role that launches instances into an AZ,
and invoke that role twice.




On Fri, Sep 5, 2014 at 9:33 PM, Tim Van de Walle <
[email protected]> wrote:

> I have a role that launches ec2 instances, registers them in a group and
> waits for the ssh port to respond before continuing on in provisioning. The
> play works as expected, however for reliability reasons we have to launch
> instances in more than one availability zone. This requires executing the
> ec2 module multiple times with different definitions. We can't use count to
> launch multiple instances. The standard task for the role is listed below
> (this only launches one instance definition at a time):
>
> - name: Launch image(s)
>   local_action:
>     module: ec2
>     region: "{{item.ec2_region}}"
>     zone: "{{item.ec2_zone}}"
>     instance_type: "{{item.ec2_instance_type}}"
>     image: "{{item.ec2_image}}"
>     key_name: "{{item.ec2_keypair}}"
>     exact_count: "{{item.ec2_exact_count}}"
>     group: "{{item.ec2_security_groups}}"
>     instance_tags: "{{item.ec2_tags}}"
>     count_tag: "{{item.ec2_tags}}"
>     vpc_subnet_id: "{{item.ec2_vpc_subnet_id}}"
>     instance_profile_name: "{{item.ec2_instance_profile_name}}"
>     wait: true
>   register: ec2
>
> - name: Add new servers to group for configuration
>   local_action: add_host hostname={{item.public_dns_name}} groupname={{
> ec2_groupname}}
>   with_items: ec2.instances
>   when: ec2.changed
>
>
> - name: Wait for the instances to boot by checking the ssh port
>   local_action: wait_for host={{item.public_dns_name}} port=22 delay=60
> timeout=320 state=started
>   with_items: ec2.instances
>   when: ec2.changed
>
>
> To simplify the calling playbook I decided to pass in a list of ec2
> definitions and use with_items to launch them. The launching of the
> instances works fine, but I can't seem to find the right way to use the
> registered result. The playbook and a slightly edited version of the
> registered result is listed below. I need to be able to loop through the
> instances in the results list, but it doesn't seem like the looping
> constructs work in this situation. Anybody run into this kind of pattern
> and solve it in a different way? I feel like maybe I'm just coming at it
> from the wrong direction.
>
> - name: Launch image(s)
>   local_action:
>     module: ec2
>     region: "{{item.ec2_region}}"
>     zone: "{{item.ec2_zone}}"
>     instance_type: "{{item.ec2_instance_type}}"
>     image: "{{item.ec2_image}}"
>     key_name: "{{item.ec2_keypair}}"
>     exact_count: "{{item.ec2_exact_count}}"
>     group: "{{item.ec2_security_groups}}"
>     instance_tags: "{{item.ec2_tags}}"
>     count_tag: "{{item.ec2_tags}}"
>     vpc_subnet_id: "{{item.ec2_vpc_subnet_id}}"
>     instance_profile_name: "{{item.ec2_instance_profile_name}}"
>     wait: true
>   register: ec2
>   with_items: ec2_defs
>
> The registered result looks like this:
>
> ok: [localhost] => {
>     "ec2": {
>         "changed": true,
>         "msg": "All items completed",
>         "results": [
>             {
>                 "changed": true,
>                 "instance_ids": [
>                     "i-85170f6a"
>                 ],
>                 "instances": [
>                     {
>                         "ami_launch_index": "0",
>                         "architecture": "x86_64",
>                         "ebs_optimized": false,
>                         "hypervisor": "xen",
>                     }
>                 ],
>                 ]
>             },
>             {
>                 "changed": true,
>                 "instance_ids": [
>                     "i-9c18cf77"
>                 ],
>                 "instances": [
>                     {
>                         "ami_launch_index": "0",
>                         "architecture": "x86_64",
>                         "ebs_optimized": false,
>                         "hypervisor": "xen",
>                     }
>                 ],
>                 ]
>             }
>         ]
>     }
>
> Thanks.
>
> Tim
>
>
>  --
> 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/e74d2d54-43c0-4c85-8d46-4dfe3d40ab66%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/e74d2d54-43c0-4c85-8d46-4dfe3d40ab66%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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/CA%2BnsWgyUwgqO7iZgF3cAnD3gLhW2dd1bcMkYOaVHKx5BvxZMHQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to