Thanks for replying Benno. I did exactly that with debugging and can see
where the problem is.
First let me say I haven't been completely honest about the way I've been
invoking the ec2_module. I have simplified the call for readability but
from the debug output I can see I shouldn't have since it covers the
problem. In case I do:
- ec2_group:
name: group-{{ ec2_env }}
description: "firewall"
vpc_id: "vpc-xxxxxxxx"
region: "eu-west-1"
...
register: group_sg
then all is fine. The debug message is simple:
ok: [localhost] => {
"msg": "group_id -- {'invocation': {'module_name': u'ec2_group',
'module_args': ''}, 'changed': True, 'group_id': 'sg-xxxxxxxx'}"
}
However my case I'm invoking ec2_group via with_dict loop as given below:
- hosts: localhost
connection: local
gather_facts: false
vars_files:
- group_vars/app_servers
- group_vars/vpcs
tasks:
- name: "Some group"
ec2_group:
name: group-{{ ec2_env }}
description: "group firewall"
vpc_id: "{{ item.key }}"
region: "{{ item.value.region }}"
purge_rules: false
purge_rules_egress: false
rules:
- proto: tcp
from_port: 22
to_port: 22
cidr_ip: 0.0.0.0/0
- proto: tcp
from_port: xxxxx
to_port: xxxxx
cidr_ip: "{{ item.value.cidr }}"
.
.
.
- proto: all
group_name: group-{{ ec2_env }}
rules_egress:
- proto: all
type: all
cidr_ip: 0.0.0.0/0
with_dict: vpc
when: item.value.name == ec2_env
register: group_sg
where the dictionary is a VPC mappings as follows:
vpc:
vpc-xxxxxxxx:
name: nameX
region: ap-southeast-2
cidr: "xxxxxxxx/16"
subnets:
- { zone: "ap-southeast-2a", subnet: "subnet-xxxxxxxx" }
- { zone: "ap-southeast-2b", subnet: "subnet-xxxxxxxx" }
subnets_app:
- { zone: "ap-southeast-2a", subnet: "subnet-xxxxxxxx" }
- { zone: "ap-southeast-2b", subnet: "subnet-xxxxxxxx" }
subnets_db:
- { zone: "ap-southeast-2a", subnet: "subnet-xxxxxxxx" }
- { zone: "ap-southeast-2b", subnet: "subnet-xxxxxxxx" }
.
.
.
vpc-yyyyyyyy:
name: nameY
region: eu-west-1
cidr: "xxxxxxxx/16"
subnets:
- { zone: "eu-west-1a", subnet: "subnet-xxxxxxxx" }
- { zone: "eu-west-1b", subnet: "subnet-xxxxxxxx" }
- { zone: "eu-west-1c", subnet: "subnet-xxxxxxxx" }
subnets_app:
- { zone: "eu-west-1a", subnet: "subnet-xxxxxxxx" }
- { zone: "eu-west-1b", subnet: "subnet-xxxxxxxx" }
- { zone: "eu-west-1c", subnet: "subnet-xxxxxxxx" }
subnets_db:
- { zone: "eu-west-1a", subnet: "subnet-xxxxxxxx" }
- { zone: "eu-west-1b", subnet: "subnet-xxxxxxxx" }
- { zone: "eu-west-1c", subnet: "subnet-xxxxxxxx" }
in which case I get the following complex structure as outout:
TASK: [debug var=group_sg]
***************************************************
ok: [localhost] => {
"var": {
"group_sg": {
"changed": true,
"msg": "All items completed",
"results": [
{
"changed": false,
"skipped": true
},
{
"changed": false,
"skipped": true
},
{
"changed": false,
"skipped": true
},
{
"changed": true,
"group_id": "sg-xxxxxxxx",
"invocation": {
"module_args": "",
"module_name": "ec2_group"
},
"item": {
"key": "vpc-xxxxxxxx",
"value": {
"cidr": "xxxxxxxx/16",
"name": "xxxxxxxx",
"region": "eu-west-1",
"subnets": [
{
"subnet": "subnet-xxxxxxxx",
"zone": "eu-west-1a"
},
{
"subnet": "subnet-xxxxxxxx",
"zone": "eu-west-1b"
},
{
"subnet": "subnet-xxxxxxxx",
"zone": "eu-west-1c"
}
],
"subnets_app": [
{
"subnet": "subnet-xxxxxxxx",
"zone": "eu-west-1a"
},
{
"subnet": "subnet-xxxxxxxx",
"zone": "eu-west-1b"
},
{
"subnet": "subnet-xxxxxxxx",
"zone": "eu-west-1c"
}
],
"subnets_db": [
{
"subnet": "subnet-xxxxxxxx",
"zone": "eu-west-1a"
},
{
"subnet": "subnet-xxxxxxxx",
"zone": "eu-west-1b"
},
{
"subnet": "subnet-xxxxxxxx",
"zone": "eu-west-1c"
}
]
}
}
},
{
"changed": false,
"skipped": true
}
]
}
}
}
Yeah, I'm trying to make the play generic and apply to any VPC/subnets in
any region.
Thanks again for your help.
Igor
On Thursday, May 28, 2015 at 3:35:04 PM UTC+10, benno joy wrote:
>
> Hi Igor,
>
> - debug: msg="group_id -- {{ group_sg.group_id }}" should work, can you
> please try
>
> - debug: var=group_sg and see what are the keys that you are getting.
>
> Also for question 2. there were a few fixes added to filter groups in the
> same vpc, can you please try the latest devel branch,
>
>
> - Benno
>
>
>
>
>
> On Thu, May 28, 2015 at 10:26 AM, Igor Cicimov <
> [email protected] <javascript:>> wrote:
>
>> Replying to my self about the second part of my question re:
>>
>> - proto: all
>> group_name: group-name
>>
>> It came up that the group name has to unique in the region otherwise the
>> call will fail. The AWS console on other hand allows creation of security
>> groups with the same name in same region in case they belong to different
>> VPC's.
>>
>>
>>
>> On Thursday, May 28, 2015 at 2:33:51 PM UTC+10, Igor Cicimov wrote:
>>>
>>> I have the following as part of a play:
>>>
>>> - ec2_group:
>>> name: group-name
>>> description: "firewall"
>>> vpc_id: "{{ vpc_id }}"
>>> region: "{{ region }}"
>>> purge_rules: false
>>> purge_rules_egress: false
>>> rules:
>>> - proto: tcp
>>> from_port: 22
>>> to_port: 22
>>> cidr_ip: 0.0.0.0/0
>>> ...
>>> #- proto: all
>>> # group_name: group-name
>>> register: group_sg
>>>
>>> - debug: msg="group_id -- {{ group_sg.group_id }}"
>>>
>>> which fails with the error:
>>>
>>> TASK: [debug msg="group_id -- {{ group_sg.group_id }}"]
>>> **********************
>>> fatal: [localhost] => One or more undefined variables: 'dict object' has
>>> no attribute 'group_id'
>>>
>>> Isn't this the right way of getting this attribute? Or this is not an
>>> option for a SG created inside VPC? The SG is being created fine though for
>>> the specified VPC and region.
>>>
>>> Another thing is that I'm anable to use:
>>>
>>> - proto: all
>>> group_name: group-name
>>>
>>> as in the official Ansible page example in the rules since I'm getting
>>> the following error:
>>>
>>> File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line
>>> 1226, in get_status
>>> raise self.ResponseError(response.status, response.reason, body)
>>> boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <Response><Errors><Error><Code>InvalidGroup.NotFound</Code><Message>You
>>> have specified two resources that belong to different
>>> networks.</Message></Error></Errors><RequestID>dee577be-...</RequestID></Response>
>>>
>>> Any ideas?
>>>
>>> $ ansible --version
>>> ansible 1.9.1
>>>
>>>
>>> Thanks,
>>> Igor
>>>
>> --
>> 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] <javascript:>.
>> To post to this group, send email to [email protected]
>> <javascript:>.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/ansible-project/5135d1c1-5d10-40ad-8a4b-22828b94a382%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/ansible-project/5135d1c1-5d10-40ad-8a4b-22828b94a382%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/a14cb730-f026-4f5b-8422-7d463cce6a44%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.