Rather than trying to do this with a one line jinja2 statement, could I use
with_items and when? I tried this, but it generates an error.
- name: create elb
local_action:
module: ec2_elb_lb
name: "elb1"
scheme: internet-facing
state: present
subnets: "{{ item.id }}"
security_group_ids: "{{ elb_sg.group_id }}"
region: us-east-1
listeners:
- protocol: http
load_balancer_port: 80
instance_port: 80
with_items: vpc.subnets
when: vpc.subnets.resource_tags.tier == 'elb'
register: elb
I get this error:
error while evaluating conditional: vpc.subnets.resource_tags.tier == 'elb'
I'm hoping this method can be used, but I'm not sure of the format for the
conditional.
On Friday, September 5, 2014 5:34:18 PM UTC-4, itarchmerc wrote:
>
> OK....getting closer. I had to upgrade Jinja2 to version 2.8-dev in order
> to get the equalto test. Now the debug statement executes without error;
> however, this doesn't return the information I need. The statement below
> gives me all resource_tags if the tier key equals "elb". What I really
> need is the subnet id value if the resource_tag has the tier key equal to
> "elb". I feel like another level of nesting is required. Any ideas on how
> to get the subnet id? Thank you James for all your help so far!
>
> "vpc": {
> "changed": false,
> "invocation": {
> "module_args": "",
> "module_name": "ec2_vpc"
> },
> "subnets": [
> {
> "az": "us-east-1c",
> "cidr": "10.0.0.x/26",
> "id": "subnet-123456789", -----> I need this value
> "resource_tags": {
> "Name": "elb1",
> "tier": "elb"
> }
> },
> {
> "az": "us-east-1a",
> "cidr": "10.0.0.x/26",
> "id": "subnet-abcdefgh", ----> and this
> "resource_tags": {
> "Name": "elb2",
> "tier": "elb"
> }
> }
>
> On Friday, September 5, 2014 4:07:04 PM UTC-4, James Cammarata wrote:
>>
>> You could use the selectattr() filter, however it looks like the
>> 'equalto' test is new (it doesn't work in my version of jinja2, which is
>> 2.7.x). But it would looks something like this:
>>
>> - debug: msg="{{vpc.subnets | map(attribute='resource_tags') |
>> selectattr('tier', 'equalto', 'elb') | list}}"
>>
>>
>>
>> On Fri, Sep 5, 2014 at 9:45 AM, itarchmerc <[email protected]> wrote:
>>
>>> I got one step further. Using this debug statement, I was able to get
>>> the list of resource_tags:
>>>
>>> debug: msg="{{vpc.subnets | map(attribute='resource_tags') |
>>> map(attribute='tier') | list}}"
>>>
>>> I'm not sure if this is the right way to go about getting this
>>> information, so please let me know if there is a better way.
>>>
>>> Unfortunately, I'm still having difficulty having the task only pull the
>>> subnet id for the subnets tagged as tier=elb. Can I use something after
>>> the pipe instead of list to limit the results, or do I need to use
>>> with_items, with_dict? Thanks.
>>>
>>> On Friday, September 5, 2014 8:32:02 AM UTC-4, itarchmerc wrote:
>>>>
>>>> That worked perfectly to get the list of subnets. Thank you!
>>>>
>>>> The only issue I have now is limiting the returned values. The syntax
>>>> below is returning all 6 subnets in my vpc, but I only want the 2 subnets
>>>> that I gave a resource tag of tier=elb. I'm trying to use the when clause
>>>> with the ec2_elb_lb module, but I can't get the syntax right there. I
>>>> tried:
>>>>
>>>> when: {{ vpc.subnets | map(attribute='tier') | list }} == 'elb'
>>>>
>>>> This generates a syntax error each time. What should the format be in
>>>> a when clause and/or is this the right way to approach limiting the
>>>> results, or should I be using with_items or with_dict? Thanks for the
>>>> help!
>>>>
>>>> On Thursday, September 4, 2014 11:14:53 PM UTC-4, James Cammarata wrote:
>>>>>
>>>>> Hi. From the look of the above, you're using the "complex args"
>>>>> structure to pass the params to the module. In this case, the list should
>>>>> not be a comma-separated list but should instead just be the array of
>>>>> IDs.
>>>>> For example:
>>>>>
>>>>> subnets: "{{vpc.subnets | map(attribute='id') | list}}"
>>>>>
>>>>> The syntax you're using above would work if you were instead using
>>>>> key=value parameters, ie: subnets="{{ vpc.subnets | join(','
>>>>> attribute='id') }}"
>>>>>
>>>>>
>>>>> On Thu, Sep 4, 2014 at 2:41 PM, itarchmerc <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> I have a playbook that creates a VPC with multiple subnets which
>>>>>> works fine. I then have a playbook that tries to create an ELB and I
>>>>>> need
>>>>>> to set the subnets to 2 of the subnets returned from the vpc creation.
>>>>>> There are 6 total subnets within the VPC, but two of them have
>>>>>> resource_tags set to tier:elb. I only want the 2 subnets with those
>>>>>> tags.
>>>>>>
>>>>>> I saw a post <https://github.com/ansible/ansible/pull/7051> that
>>>>>> said the following would work, but I get an invalid subnet ID error.
>>>>>> (look
>>>>>> for the comments from @coop)
>>>>>>
>>>>>> subnets: "{{ vpc.subnets | join(',' attribute='id') }}"
>>>>>>
>>>>>> My playbook is almost exactly the same as @coop in the post above,
>>>>>> but I have 6 subnets instead of 1. I feel like I should be able to use
>>>>>> something like the above with a when clause to only get subnets tagged
>>>>>> as
>>>>>> elb. Any help is appreciated.
>>>>>>
>>>>>> --
>>>>>> 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/a2e130f5-007e-49b3-965f-
>>>>>> 31810e866efa%40googlegroups.com
>>>>>> <https://groups.google.com/d/msgid/ansible-project/a2e130f5-007e-49b3-965f-31810e866efa%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/2d35fff9-9df6-4afc-b571-557af330677c%40googlegroups.com
>>>
>>> <https://groups.google.com/d/msgid/ansible-project/2d35fff9-9df6-4afc-b571-557af330677c%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/57d14455-8124-48e6-b601-ffd3e4e6f4b9%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.