txaws-dev team mailing list archive
-
txaws-dev team
-
Mailing list archive
-
Message #00127
[Merge] lp:~franciscosouza/txaws/txaws-vpc into lp:txaws
Francisco Souza has proposed merging lp:~franciscosouza/txaws/txaws-vpc into lp:txaws.
Requested reviews:
txAWS Committers (txaws-dev)
For more details, see:
https://code.launchpad.net/~franciscosouza/txaws/txaws-vpc/+merge/133250
ec2/client: added support for VPC
This change adds supports for running instances in VPC subnets.
For that, it was necessary to update the EC2 API version,
I picked the last version.
https://codereview.appspot.com/6826065/
--
https://code.launchpad.net/~franciscosouza/txaws/txaws-vpc/+merge/133250
Your team txAWS Committers is requested to review the proposed merge of lp:~franciscosouza/txaws/txaws-vpc into lp:txaws.
=== modified file 'txaws/client/discover/tests/test_command.py'
--- txaws/client/discover/tests/test_command.py 2012-01-27 02:10:24 +0000
+++ txaws/client/discover/tests/test_command.py 2012-11-07 13:59:28 +0000
@@ -74,9 +74,9 @@
url = (
"http://endpoint?AWSAccessKeyId=key&"
"Action=DescribeRegions&"
- "Signature=3%2BHSkQQosF1Sr9AL3kdY31tEfTWQ2whjJOUSc3kvc2c%3D&"
+ "Signature=7fyxNidMkL%2B85udGOxqm%2BgM2o1gLyeLG2a0UOmfBOXQ%3D&"
"SignatureMethod=HmacSHA256&SignatureVersion=2&"
- "Timestamp=2010-06-04T23%3A40%3A00Z&Version=2009-11-30")
+ "Timestamp=2010-06-04T23%3A40%3A00Z&Version=2012-08-15")
self.assertEqual("GET", self.method)
self.assertEqual(url, self.url)
self.assertEqual("URL: %s\n"
@@ -99,9 +99,9 @@
url = (
"http://endpoint?AWSAccessKeyId=key&"
"Action=DescribeRegions&RegionName.0=us-west-1&"
- "Signature=6D8aCgSPQOYixowRHy26aRFzK2Vwgixl9uwegYX9nLA%3D&"
+ "Signature=FL4JjDKbWdg531q1KKUPild%2BvyqspA5wxSmOeWXWsJI%3D&"
"SignatureMethod=HmacSHA256&SignatureVersion=2&"
- "Timestamp=2010-06-04T23%3A40%3A00Z&Version=2009-11-30")
+ "Timestamp=2010-06-04T23%3A40%3A00Z&Version=2012-08-15")
self.assertEqual("GET", self.method)
self.assertEqual(url, self.url)
self.assertEqual("URL: %s\n"
@@ -128,9 +128,9 @@
url = (
"http://endpoint?AWSAccessKeyId=key&"
"Action=DescribeRegions&RegionName.0=us-west-1&"
- "Signature=6D8aCgSPQOYixowRHy26aRFzK2Vwgixl9uwegYX9nLA%3D&"
+ "Signature=FL4JjDKbWdg531q1KKUPild%2BvyqspA5wxSmOeWXWsJI%3D&"
"SignatureMethod=HmacSHA256&SignatureVersion=2&"
- "Timestamp=2010-06-04T23%3A40%3A00Z&Version=2009-11-30")
+ "Timestamp=2010-06-04T23%3A40%3A00Z&Version=2012-08-15")
self.assertEqual("GET", self.method)
self.assertEqual(url, self.url)
self.assertEqual("URL: %s\n"
@@ -185,9 +185,9 @@
url = (
"http://endpoint?AWSAccessKeyId=key&"
"Action=DescribeRegions&RegionName.0=us-west-1&"
- "Signature=6D8aCgSPQOYixowRHy26aRFzK2Vwgixl9uwegYX9nLA%3D&"
+ "Signature=FL4JjDKbWdg531q1KKUPild%2BvyqspA5wxSmOeWXWsJI%3D&"
"SignatureMethod=HmacSHA256&SignatureVersion=2&"
- "Timestamp=2010-06-04T23%3A40%3A00Z&Version=2009-11-30")
+ "Timestamp=2010-06-04T23%3A40%3A00Z&Version=2012-08-15")
self.assertEqual("GET", self.method)
self.assertEqual(url, self.url)
self.assertEqual("URL: %s\n"
=== modified file 'txaws/ec2/client.py'
--- txaws/ec2/client.py 2012-05-05 00:17:02 +0000
+++ txaws/ec2/client.py 2012-11-07 13:59:28 +0000
@@ -48,7 +48,7 @@
def run_instances(self, image_id, min_count, max_count,
security_groups=None, key_name=None, instance_type=None,
user_data=None, availability_zone=None, kernel_id=None,
- ramdisk_id=None):
+ ramdisk_id=None, subnet_id=None, security_group_ids=None):
"""Run new instances.
TODO: blockDeviceMapping, monitoring, subnetId
@@ -57,9 +57,21 @@
"MaxCount": str(max_count)}
if key_name is not None:
params["KeyName"] = key_name
- if security_groups is not None:
+ if subnet_id is not None:
+ params["SubnetId"] = subnet_id
+ if security_group_ids is not None:
+ for i, id in enumerate(security_group_ids):
+ params["SecurityGroupId.%d" % (i + 1)] = id
+ else:
+ msg = "You must specify the security_group_ids with the subnet_id"
+ raise ValueError(msg)
+ elif security_groups is not None:
for i, name in enumerate(security_groups):
params["SecurityGroup.%d" % (i + 1)] = name
+ else:
+ msg = ("You must specify either the subnet_id and "
+ "security_group_ids or security_groups")
+ raise ValueError(msg)
if user_data is not None:
params["UserData"] = b64encode(user_data)
if instance_type is not None:
=== 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-07 13:59:28 +0000
@@ -377,6 +377,59 @@
ramdisk_id=u"r-1234")
d.addCallback(self.check_parsed_run_instances)
+ def test_run_instances_with_subnet(self):
+ class StubQuery(object):
+ def __init__(stub, action="", creds=None, endpoint=None,
+ other_params={}):
+ self.assertEqual(action, "RunInstances")
+ self.assertEqual(creds.access_key, "foo")
+ self.assertEqual(creds.secret_key, "bar")
+ self.assertEquals(
+ other_params,
+ {"ImageId": "ami-1234", "MaxCount": "2", "MinCount": "1",
+ "SecurityGroupId.1": u"sg-a72d9f92e", "KeyName": u"default",
+ "UserData": "Zm9v", "InstanceType": u"m1.small",
+ "Placement.AvailabilityZone": u"us-east-1b",
+ "KernelId": u"k-1234", "RamdiskId": u"r-1234",
+ "SubnetId": "subnet-a72d829f"})
+
+ def submit(self):
+ return succeed(
+ payload.sample_run_instances_result)
+
+ creds = AWSCredentials("foo", "bar")
+ ec2 = client.EC2Client(creds, query_factory=StubQuery)
+ d = ec2.run_instances("ami-1234", 1, 2, security_group_ids=[u"sg-a72d9f92e"],
+ key_name=u"default", user_data=u"foo", instance_type=u"m1.small",
+ availability_zone=u"us-east-1b", kernel_id=u"k-1234",
+ ramdisk_id=u"r-1234", subnet_id="subnet-a72d829f")
+ d.addCallback(self.check_parsed_run_instances)
+
+ def test_run_instances_with_subnet_but_without_secgroup_id(self):
+ creds = AWSCredentials("foo", "bar")
+ ec2 = client.EC2Client(creds)
+ error = self.assertRaises(ValueError, ec2.run_instances, "ami-1234", 1, 2,
+ key_name=u"default", user_data=u"foo", instance_type=u"m1.small",
+ availability_zone=u"us-east-1b", kernel_id=u"k-1234",
+ ramdisk_id=u"r-1234", subnet_id="subnet-a72d829f")
+ self.assertEqual(
+ str(error),
+ "You must specify the security_group_ids with the subnet_id"
+ )
+
+ def test_run_instances_without_subnet_and_secgroups(self):
+ creds = AWSCredentials("foo", "bar")
+ ec2 = client.EC2Client(creds)
+ error = self.assertRaises(ValueError, ec2.run_instances, "ami-1234", 1, 2,
+ key_name=u"default", user_data=u"foo", instance_type=u"m1.small",
+ availability_zone=u"us-east-1b", kernel_id=u"k-1234",
+ ramdisk_id=u"r-1234")
+ self.assertEqual(
+ str(error),
+ ("You must specify either the subnet_id and "
+ "security_group_ids or security_groups")
+ )
+
class EC2ClientSecurityGroupsTestCase(TXAWSTestCase):
@@ -1561,7 +1614,7 @@
{"AWSAccessKeyId": "foo",
"Action": "DescribeInstances",
"SignatureVersion": "2",
- "Version": "2009-11-30"})
+ "Version": "2012-08-15"})
def test_init_other_args_are_params(self):
query = client.Query(
@@ -1575,7 +1628,7 @@
"InstanceId.0": "12345",
"SignatureVersion": "2",
"Timestamp": "2007-11-12T13:14:15Z",
- "Version": "2009-11-30"})
+ "Version": "2012-08-15"})
def test_no_timestamp_if_expires_in_other_params(self):
"""
@@ -1593,7 +1646,7 @@
"Action": "DescribeInstances",
"SignatureVersion": "2",
"Expires": "2007-11-12T13:14:15Z",
- "Version": "2009-11-30"})
+ "Version": "2012-08-15"})
def test_sign(self):
query = client.Query(
@@ -1601,7 +1654,7 @@
endpoint=self.endpoint,
time_tuple=(2007, 11, 12, 13, 14, 15, 0, 0, 0))
query.sign()
- self.assertEqual("G4c2NtQaFNhWWT8EWPVIIOpHVr0mGUYwJVYss9krsMU=",
+ self.assertEqual("c0gbkemrGEJdqxWOl2UZYaygYiBLVjrpWBs7bTN7Ndo=",
query.params["Signature"])
def test_old_sign(self):
@@ -1612,7 +1665,7 @@
other_params={"SignatureVersion": "1"})
query.sign()
self.assertEqual(
- "9xP+PIs/3QXW+4mWX6WGR4nGqfE=", query.params["Signature"])
+ "7tWrIC5VYvXOjVE+roVoyDUt2Yw=", query.params["Signature"])
def test_unsupported_sign(self):
query = client.Query(
=== modified file 'txaws/server/tests/test_call.py'
--- txaws/server/tests/test_call.py 2012-01-27 02:10:24 +0000
+++ txaws/server/tests/test_call.py 2012-11-07 13:59:28 +0000
@@ -11,4 +11,4 @@
2009-11-30, which is the earliest version we support.
"""
call = Call()
- self.assertEqual(call.version, "2009-11-30")
+ self.assertEqual(call.version, "2012-08-15")
=== modified file 'txaws/version.py'
--- txaws/version.py 2012-01-24 23:18:36 +0000
+++ txaws/version.py 2012-11-07 13:59:28 +0000
@@ -1,3 +1,3 @@
txaws = "0.2.3"
-ec2_api = "2009-11-30"
+ec2_api = "2012-08-15"
s3_api = "2006-03-01"
Follow ups