Hi Jon,

That helped, I needed to specific attribute='private_ip_address' for a
map() arguments and was able to find some more documentation here,
http://docs.ansible.com/ansible/playbooks_filters.html#other-useful-filters

I'm now trying to break out subnet ids from subnet_facts

    - name: Get subnets
      ec2_vpc_subnet_facts:
        aws_access_key: "{{ aws_access_key }}"
        aws_secret_key: "{{ aws_secret_key }}"
        region: "{{ aws_region }}"
        security_token: "{{ security_token }}"
        filters:
          vpc-id: "{{ returned_vpc.vpcs[0].id }}"
          "tag:Name": "{{ item }}"
      register: subnetDMZ_facts
      with_items:
        - "{{ DMZ_subnet1 }}"
        - "{{ DMZ_subnet2 }}"
        - "{{ DMZ_subnet3 }}"

I get a data structure like this
ok: [localhost] => {
    "subnetDMZ_facts.results": [
        {
            "_ansible_no_log": false,
            "changed": false,
            "invocation": {
                "module_args": {
                    "aws_access_key": "XXXXX",
                    "aws_secret_key":
"VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
                    "ec2_url": null,
                    "filters": {
                        "tag:Name": "SubDMZ1",
                        "vpc-id": "vpc-XXXXXXXX"
                    },
                    "profile": null,
                    "region": "us-west-2",
                    "security_token":
"VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
                    "validate_certs": true
                },
                "module_name": "ec2_vpc_subnet_facts"
            },
            "item": "SubDMZ1",
            "subnets": [
                {
                    "availability_zone": "us-west-2a",
                    "available_ip_address_count": 57,
                    "cidr_block": "10.201.0.0/26",
                    "default_for_az": "false",
                    "id": "subnet-XXXXXXX",
                    "map_public_ip_on_launch": "false",
                    "state": "available",
                    "tags": {
                        "Name": "SubDMZ1"
                    },
                    "vpc_id": "vpc-XXXXXXX"
                }
            ]
        },
        {...

Subnets is a list. I was previously manually setting each subnet_id value
manually via
subnet_ids: ['{{ subnetDMZ_facts.results[0].subnets[0].id }}', '{{
subnetDMZ_facts.results[1].subnets[0].id }}', '{{
subnetDMZ_facts.results[1].subnets[0].id }}' ]

I tried using the subnet[0].id as the attribute
subnets_map: "{{
subnetDMZ_facts.results|map(attribute='subnets[0].id')|list }}"
fatal: [localhost]: FAILED! => {"failed": true, "msg": "ERROR! 'dict
object' has no attribute 'subnets[0]'"}

I can access other vales, just not list items, e.g.
subnets_map: "{{
subnetDMZ_facts.results|map(attribute='invocation.module_args.aws_access_key')|list
}}"

TIA


On 23 March 2016 at 08:02, 'J Hawkesworth' via Ansible Project <
[email protected]> wrote:

> I think you can do this using the map filter
>
> something like (untested)
>
> - name: Set server names address for webapp proxy server
>       set_fact:
>         servers: "{{ ec2_facts.instances|map('private_ip_address')|list }}"
>
>
> Have a look at: http://jinja.pocoo.org/docs/dev/templates/#map
>
> HTH
>
> Jon
>
> On Tuesday, 22 March 2016 21:22:02 UTC, Stephen Granger wrote:
>>
>> I'm using the ec2_remote_facts module to get a list of instances based on
>> filters.
>>
>> I want to create another list that contains the
>> ec2_facts.instances[0-n].private_ip
>>
>> This is the logic I'm after
>>
>> - name: Set server names address for webapp proxy server
>>       set_fact:
>>         servers[item]: "{{ ec2_facts.instances[item].private_ip_address
>> }}"
>>       with_sequence: "start=0 end={{ ec2_facts.instances|(length -1) }}"
>>
>> but it doesn't work
>>
>> "msg": "ERROR! 'list object' has no attribute u'0'"
>>
>> I can manually set each fact
>>
>> - name: Set server names address for webapp proxy server
>>       set_fact:
>>         servers: ["{{ ec2_facts.instances[0].private_ip_address }}", "{{
>> ec2_facts.instances[1].private_ip_address }}" ]
>>
>> But this is not optimal as it doesn't work for variable length lists.
>>
>> --
>> Steve
>>
> --
> 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/8b75727a-4daf-44da-9463-7731e89f4152%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/8b75727a-4daf-44da-9463-7731e89f4152%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Steve

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

Reply via email to