On Thursday, 23 August 2018 21.03.14 CEST [email protected] wrote:
> I have a dict that looks like:
> 
>     "msg": [
>         {
>             "assign_ipv6_address_on_creation": false,
>             "availability_zone": "us-west-1a",
>             "available_ip_address_count": 250,
>             "cidr_block": "10.0.1.0/24",
>             "default_for_az": false,
>             "id": "subnet-030ff449eaea87042",
>             "ipv6_cidr_block_association_set": [],
>             "map_public_ip_on_launch": false,
>             "state": "available",
>             "subnet_id": "subnet-030ff449eaea87042",
>             "tags": {
>                 "Name": "private-a"
>             },
>             "vpc_id": "vpc-0a8c42654fe5f4a2b"
>         },
>         {
>             "assign_ipv6_address_on_creation": false,
>             "availability_zone": "us-west-1a",
>             "available_ip_address_count": 251,
>             "cidr_block": "10.0.2.0/24",
>             "default_for_az": false,
>             "id": "subnet-0e2db57655e833a66",
>             "ipv6_cidr_block_association_set": [],
>             "map_public_ip_on_launch": false,
>             "state": "available",
>             "subnet_id": "subnet-0e2db57655e833a66",
>             "tags": {
>                 "Name": "public-a"
>             },
>             "vpc_id": "vpc-0a8c42654fe5f4a2b"
>         },

<snip />

> 
> and I'm attempting to extract subnet_id for only public subnets like so:
> 
> - name: set public vpc subnets
>   set_fact:
>     vpc_public_subnet_ids: "{{ item | selectattr('Name', 'search', 
> 'public.+') | map(attribute='subnet_id') | list }}"
>   loop: "{{ vpc_subnet_facts.subnets }}"
> 
> I've tried a number of ways to filter out this information but to no avail. 
> The most common error is *"Unexpected templating type error occurred on ({{ 
> item | selectattr('Name', 'search', 'public.+') | 
> map(attribute='subnet_id') | list }}): expected string or buffer"}"*
> I feel as if I'm making some rather basic mistake here. Any help is 
> appreciated. 

selectattr only works on list not dicts.
And you don't have a Name at that level only tags.Name

So this should work

  - name: set public vpc subnets
    set_fact:
      vpc_public_subnet_ids: "{{ vpc_subnet_facts.subnets | 
selectattr('tags.Name', 'search', 'public.+') | map(attribute='subnet_id') | 
list }}"

So you where very close to find the solution.

-- 
Kai Stian Olstad


-- 
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/3103612.W4BkT6hQ3H%40x1.
For more options, visit https://groups.google.com/d/optout.

Reply via email to