Index: [revision details]
=== added file '[revision details]'
--- [revision details] 2012-01-01 00:00:00 +0000
+++ [revision details] 2012-01-01 00:00:00 +0000
@@ -0,0 +1,2 @@
+Old revision: andreas@canonical.com-20121030114050-j8a7328o10mq91x3
+New revision: f@souza.cc-20121108195619-rg09fqskyo573g06
Index: txaws/ec2/client.py
=== modified file 'txaws/ec2/client.py'
--- txaws/ec2/client.py 2012-05-05 00:17:02 +0000
+++ txaws/ec2/client.py 2012-11-08 19:56:19 +0000
@@ -110,28 +110,37 @@
d = query.submit()
return d.addCallback(self.parser.describe_security_groups)
- def create_security_group(self, name, description):
+ def create_security_group(self, name, description, vpc_id=None):
"""Create security group.
@param name: Name of the new security group.
@param description: Description of the new security group.
+ @param vpc_id: ID of the VPC to which the security group will belong.
@return: A C{Deferred} that will fire with a truth value for the
success of the operation.
"""
parameters = {"GroupName": name, "GroupDescription": description}
+ if vpc_id:
+ parameters["VpcId"] = vpc_id
query = self.query_factory(
action="CreateSecurityGroup", creds=self.creds,
endpoint=self.endpoint, other_params=parameters)
d = query.submit()
- return d.addCallback(self.parser.truth_return)
+ return d.addCallback(self.parser.create_security_group)
- def delete_security_group(self, name):
+ def delete_security_group(self, name=None, id=None):
"""
- @param name: Name of the new security group.
+ @param name: Name of the security group.
+ @param id: Id of the security group.
@return: A C{Deferred} that will fire with a truth value for the
success of the operation.
"""
- parameter = {"GroupName": name}
+ if name:
+ parameter = {"GroupName": name}
+ elif id:
+ parameter = {"GroupId": id}
+ else:
+ raise ValueError("You must provide either the security group name or id")
query = self.query_factory(
action="DeleteSecurityGroup", creds=self.creds,
endpoint=self.endpoint, other_params=parameter)
@@ -670,6 +679,7 @@
root = XML(xml_bytes)
result = []
for group_info in root.findall("securityGroupInfo/item"):
+ id = group_info.findtext("groupId")
name = group_info.findtext("groupName")
description = group_info.findtext("groupDescription")
owner_id = group_info.findtext("ownerId")
@@ -709,11 +719,15 @@
for user_id, group_name in allowed_groups]
security_group = model.SecurityGroup(
- name, description, owner_id=owner_id,
+ id, name, description, owner_id=owner_id,
groups=allowed_groups, ips=allowed_ips)
result.append(security_group)
return result
+ def create_security_group(self, xml_bytes):
+ root = XML(xml_bytes)
+ return root.findtext("groupId")
+
def truth_return(self, xml_bytes):
"""Parse the XML for a truth value.
Index: txaws/ec2/model.py
=== modified file 'txaws/ec2/model.py'
--- txaws/ec2/model.py 2012-03-02 22:00:10 +0000
+++ txaws/ec2/model.py 2012-11-08 18:37:45 +0000
@@ -80,7 +80,8 @@
@ivar allowed_ips: The sequence of L{IPPermission} instances for this
security group.
"""
- def __init__(self, name, description, owner_id="", groups=None, ips=None):
+ def __init__(self, id, name, description, owner_id="", groups=None, ips=None):
+ self.id = id
self.name = name
self.description = description
self.owner_id = owner_id
Index: txaws/testing/payload.py
=== modified file 'txaws/testing/payload.py'
--- txaws/testing/payload.py 2012-05-16 02:47:12 +0000
+++ txaws/testing/payload.py 2012-11-08 18:57:38 +0000
@@ -213,6 +213,7 @@
+ sg-a1a1a1
WebServers
Web servers
UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM
@@ -228,6 +229,7 @@
-
UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM
+ sg-a1a1a1
WebServers
Web Servers
@@ -256,6 +258,7 @@
-
UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM
+ sg-a1a1a1
MessageServers
Message Servers
@@ -274,6 +277,7 @@
-
UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM
+ sg-c3c3c3
WebServers
Web Servers
@@ -457,6 +461,7 @@
sample_create_security_group = """\
true
+ sg-1a2b3c4d
""" % (version.ec2_api,)
Index: txaws/ec2/tests/test_client.py
=== modified file 'txaws/ec2/tests/test_client.py'
--- txaws/ec2/tests/test_client.py 2012-03-02 22:00:10 +0000
+++ txaws/ec2/tests/test_client.py 2012-11-08 19:20:49 +0000
@@ -400,6 +400,7 @@
def check_results(security_groups):
[security_group] = security_groups
+ self.assertEquals(security_group.id, "sg-a1a1a1")
self.assertEquals(security_group.owner_id,
"UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM")
self.assertEquals(security_group.name, "WebServers")
@@ -440,6 +441,7 @@
security_group = security_groups[0]
self.assertEquals(security_group.owner_id,
"UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM")
+ self.assertEquals(security_group.id, "sg-a1a1a1")
self.assertEquals(security_group.name, "MessageServers")
self.assertEquals(security_group.description, "Message Servers")
self.assertEquals(security_group.allowed_groups, [])
@@ -451,6 +453,7 @@
security_group = security_groups[1]
self.assertEquals(security_group.owner_id,
"UYY3TLBUXIEON5NQVUUX6OMPWBZIQNFM")
+ self.assertEquals(security_group.id, "sg-c3c3c3")
self.assertEquals(security_group.name, "WebServers")
self.assertEquals(security_group.description, "Web Servers")
self.assertEquals([(pair.user_id, pair.group_name)
@@ -583,14 +586,45 @@
def submit(self):
return succeed(payload.sample_create_security_group)
+ def check_result(id):
+ self.assertEquals(id, "sg-1a2b3c4d")
+
creds = AWSCredentials("foo", "bar")
ec2 = client.EC2Client(creds, query_factory=StubQuery)
d = ec2.create_security_group(
"WebServers",
"The group for the web server farm.")
- return self.assertTrue(d)
-
- def test_delete_security_group(self):
+ return d.addCallback(check_result)
+
+ def test_create_security_group_with_VPC(self):
+ class StubQuery(object):
+
+ def __init__(stub, action="", creds=None, endpoint=None,
+ other_params={}):
+ self.assertEqual(action, "CreateSecurityGroup")
+ self.assertEqual(creds.access_key, "foo")
+ self.assertEqual(creds.secret_key, "bar")
+ self.assertEqual(other_params, {
+ "GroupName": "WebServers",
+ "GroupDescription": "The group for the web server farm.",
+ "VpcId": "vpc-a4f2",
+ })
+
+ def submit(self):
+ return succeed(payload.sample_create_security_group)
+
+ def check_result(id):
+ self.assertEquals(id, "sg-1a2b3c4d")
+
+ creds = AWSCredentials("foo", "bar")
+ ec2 = client.EC2Client(creds, query_factory=StubQuery)
+ d = ec2.create_security_group(
+ "WebServers",
+ "The group for the web server farm.",
+ "vpc-a4f2")
+ return d.addCallback(check_result)
+
+ def test_delete_security_group_using_name(self):
"""
L{EC2Client.delete_security_group} returns a C{Deferred} that
eventually fires with a true value, indicating the success of the
@@ -615,6 +649,40 @@
d = ec2.delete_security_group("WebServers")
return self.assertTrue(d)
+ def test_delete_security_group_using_id(self):
+ """
+ L{EC2Client.delete_security_group} returns a C{Deferred} that
+ eventually fires with a true value, indicating the success of the
+ operation.
+ """
+ class StubQuery(object):
+
+ def __init__(stub, action="", creds=None, endpoint=None,
+ other_params={}):
+ self.assertEqual(action, "DeleteSecurityGroup")
+ self.assertEqual(creds.access_key, "foo")
+ self.assertEqual(creds.secret_key, "bar")
+ self.assertEqual(other_params, {
+ "GroupId": "sg-a1a1a1",
+ })
+
+ def submit(self):
+ return succeed(payload.sample_delete_security_group)
+
+ creds = AWSCredentials("foo", "bar")
+ ec2 = client.EC2Client(creds, query_factory=StubQuery)
+ d = ec2.delete_security_group(id="sg-a1a1a1")
+ return self.assertTrue(d)
+
+ def test_delete_security_group_without_id_and_name(self):
+ creds = AWSCredentials("foo", "bar")
+ ec2 = client.EC2Client(creds)
+ error = self.assertRaises(ValueError, ec2.delete_security_group)
+ self.assertEquals(
+ str(error),
+ "You must provide either the security group name or id",
+ )
+
def test_delete_security_group_failure(self):
"""
L{EC2Client.delete_security_group} returns a C{Deferred} that
Index: txaws/ec2/tests/test_model.py
=== modified file 'txaws/ec2/tests/test_model.py'
--- txaws/ec2/tests/test_model.py 2012-01-23 01:04:25 +0000
+++ txaws/ec2/tests/test_model.py 2012-11-08 18:37:45 +0000
@@ -8,7 +8,8 @@
class SecurityGroupTestCase(TXAWSTestCase):
def test_creation_defaults(self):
- group = model.SecurityGroup("name", "desc")
+ group = model.SecurityGroup("sg-a3f2", "name", "desc")
+ self.assertEquals(group.id, "sg-a3f2")
self.assertEquals(group.name, "name")
self.assertEquals(group.description, "desc")
self.assertEquals(group.owner_id, "")
@@ -18,14 +19,15 @@
def test_creation_all_parameters(self):
user = "somegal24"
other_groups = [
- model.SecurityGroup("other1", "another group 1"),
- model.SecurityGroup("other2", "another group 2")]
+ model.SecurityGroup("sg-other1", "other1", "another group 1"),
+ model.SecurityGroup("sg-other2", "other2", "another group 2")]
user_group_pairs = [
model.UserIDGroupPair(user, other_groups[0].name),
model.UserIDGroupPair(user, other_groups[1].name)]
ips = [model.IPPermission("tcp", "80", "80", "10.0.1.0/24")]
group = model.SecurityGroup(
- "name", "desc", owner_id="me", groups=user_group_pairs, ips=ips)
+ "id", "name", "desc", owner_id="me", groups=user_group_pairs, ips=ips)
+ self.assertEquals(group.id, "id")
self.assertEquals(group.name, "name")
self.assertEquals(group.description, "desc")
self.assertEquals(group.owner_id, "me")