summaryrefslogtreecommitdiff
path: root/boto/ec2/securitygroup.py
diff options
context:
space:
mode:
authorMitch Garnaat <mitch@garnaat.com>2012-05-15 18:59:46 -0700
committerMitch Garnaat <mitch@garnaat.com>2012-05-15 18:59:46 -0700
commit1aa1133e8502ea6c95e49ac34681569df5ace46b (patch)
treea25397b20d7d409131ccfbfce5d4dca23d7e52a4 /boto/ec2/securitygroup.py
parent911f42b97fdccbc55e160ec323df0cad6fe64c6b (diff)
parent6588ea270bfc9e0bb4d17263b72ee8b5255545c5 (diff)
downloadboto-2.4.0.tar.gz
Merge branch 'release-2.4.0'2.4.0
Diffstat (limited to 'boto/ec2/securitygroup.py')
-rw-r--r--boto/ec2/securitygroup.py87
1 files changed, 61 insertions, 26 deletions
diff --git a/boto/ec2/securitygroup.py b/boto/ec2/securitygroup.py
index 87d4b25e..83292fea 100644
--- a/boto/ec2/securitygroup.py
+++ b/boto/ec2/securitygroup.py
@@ -82,10 +82,13 @@ class SecurityGroup(TaggedEC2Object):
setattr(self, name, value)
def delete(self):
- return self.connection.delete_security_group(self.name)
+ if self.vpc_id:
+ return self.connection.delete_security_group(group_id=self.id)
+ else:
+ return self.connection.delete_security_group(self.name)
def add_rule(self, ip_protocol, from_port, to_port,
- src_group_name, src_group_owner_id, cidr_ip):
+ src_group_name, src_group_owner_id, cidr_ip, src_group_group_id):
"""
Add a rule to the SecurityGroup object. Note that this method
only changes the local version of the object. No information
@@ -96,10 +99,10 @@ class SecurityGroup(TaggedEC2Object):
rule.from_port = from_port
rule.to_port = to_port
self.rules.append(rule)
- rule.add_grant(src_group_name, src_group_owner_id, cidr_ip)
+ rule.add_grant(src_group_name, src_group_owner_id, cidr_ip, src_group_group_id)
def remove_rule(self, ip_protocol, from_port, to_port,
- src_group_name, src_group_owner_id, cidr_ip):
+ src_group_name, src_group_owner_id, cidr_ip, src_group_group_id):
"""
Remove a rule to the SecurityGroup object. Note that this method
only changes the local version of the object. No information
@@ -113,7 +116,7 @@ class SecurityGroup(TaggedEC2Object):
target_rule = rule
target_grant = None
for grant in rule.grants:
- if grant.name == src_group_name:
+ if grant.name == src_group_name or grant.group_id == src_group_group_id:
if grant.owner_id == src_group_owner_id:
if grant.cidr_ip == cidr_ip:
target_grant = grant
@@ -151,48 +154,75 @@ class SecurityGroup(TaggedEC2Object):
:rtype: bool
:return: True if successful.
"""
+ group_name = None
+ if not self.vpc_id:
+ group_name = self.name
+ group_id = None
+ if self.vpc_id:
+ group_id = self.id
+ src_group_name = None
+ src_group_owner_id = None
+ src_group_group_id = None
if src_group:
cidr_ip = None
- src_group_name = src_group.name
src_group_owner_id = src_group.owner_id
- else:
- src_group_name = None
- src_group_owner_id = None
- status = self.connection.authorize_security_group(self.name,
+ if not self.vpc_id:
+ src_group_name = src_group.name
+ else:
+ if hasattr(src_group, 'group_id'):
+ src_group_group_id = src_group.group_id
+ else:
+ src_group_group_id = src_group.id
+ status = self.connection.authorize_security_group(group_name,
src_group_name,
src_group_owner_id,
ip_protocol,
from_port,
to_port,
- cidr_ip)
+ cidr_ip,
+ group_id,
+ src_group_group_id)
if status:
if type(cidr_ip) != list:
cidr_ip = [cidr_ip]
for single_cidr_ip in cidr_ip:
self.add_rule(ip_protocol, from_port, to_port, src_group_name,
- src_group_owner_id, single_cidr_ip)
-
+ src_group_owner_id, single_cidr_ip, src_group_group_id)
return status
def revoke(self, ip_protocol=None, from_port=None, to_port=None,
cidr_ip=None, src_group=None):
+ group_name = None
+ if not self.vpc_id:
+ group_name = self.name
+ group_id = None
+ if self.vpc_id:
+ group_id = self.id
+ src_group_name = None
+ src_group_owner_id = None
+ src_group_group_id = None
if src_group:
- cidr_ip=None
- src_group_name = src_group.name
+ cidr_ip = None
src_group_owner_id = src_group.owner_id
- else:
- src_group_name = None
- src_group_owner_id = None
- status = self.connection.revoke_security_group(self.name,
+ if not self.vpc_id:
+ src_group_name = src_group.name
+ else:
+ if hasattr(src_group, 'group_id'):
+ src_group_group_id = src_group.group_id
+ else:
+ src_group_group_id = src_group.id
+ status = self.connection.revoke_security_group(group_name,
src_group_name,
src_group_owner_id,
ip_protocol,
from_port,
to_port,
- cidr_ip)
+ cidr_ip,
+ group_id,
+ src_group_group_id)
if status:
self.remove_rule(ip_protocol, from_port, to_port, src_group_name,
- src_group_owner_id, cidr_ip)
+ src_group_owner_id, cidr_ip, src_group_group_id)
return status
def copy_to_region(self, region, name=None):
@@ -220,9 +250,10 @@ class SecurityGroup(TaggedEC2Object):
source_groups = []
for rule in self.rules:
for grant in rule.grants:
- if grant.name:
- if grant.name not in source_groups:
- source_groups.append(grant.name)
+ grant_nom = grant.name or grant.group_id
+ if grant_nom:
+ if grant_nom not in source_groups:
+ source_groups.append(grant_nom)
sg.authorize(None, None, None, None, grant)
else:
sg.authorize(rule.ip_protocol, rule.from_port, rule.to_port,
@@ -287,9 +318,10 @@ class IPPermissions(object):
else:
setattr(self, name, value)
- def add_grant(self, name=None, owner_id=None, cidr_ip=None):
+ def add_grant(self, name=None, owner_id=None, cidr_ip=None, group_id=None):
grant = GroupOrCIDR(self)
grant.owner_id = owner_id
+ grant.group_id = group_id
grant.name = name
grant.cidr_ip = cidr_ip
self.grants.append(grant)
@@ -299,6 +331,7 @@ class GroupOrCIDR(object):
def __init__(self, parent=None):
self.owner_id = None
+ self.group_id = None
self.name = None
self.cidr_ip = None
@@ -306,7 +339,7 @@ class GroupOrCIDR(object):
if self.cidr_ip:
return '%s' % self.cidr_ip
else:
- return '%s-%s' % (self.name, self.owner_id)
+ return '%s-%s' % (self.name or self.group_id, self.owner_id)
def startElement(self, name, attrs, connection):
return None
@@ -314,6 +347,8 @@ class GroupOrCIDR(object):
def endElement(self, name, value, connection):
if name == 'userId':
self.owner_id = value
+ elif name == 'groupId':
+ self.group_id = value
elif name == 'groupName':
self.name = value
if name == 'cidrIp':