From d3a86803b4bef8e309c94fe8142b89332087fcc5 Mon Sep 17 00:00:00 2001 From: Mikhail Ovsyannikov Date: Fri, 12 Dec 2014 14:33:24 +0300 Subject: [PATCH 1/4] added ex_plecement_group to create_node --- libcloud/compute/drivers/ec2.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py index 32b578fcb8..cd369b430a 100644 --- a/libcloud/compute/drivers/ec2.py +++ b/libcloud/compute/drivers/ec2.py @@ -2166,6 +2166,10 @@ def create_node(self, **kwargs): :keyword ex_subnet: The subnet to launch the instance into. :type ex_subnet: :class:`.EC2Subnet` + + :keyword ex_placement_group: The placement group to launch + the instance into. + :type ex_placement_group: ``str`` """ image = kwargs["image"] size = kwargs["size"] @@ -2207,6 +2211,7 @@ def create_node(self, **kwargs): for sig in range(len(security_group_ids)): params['SecurityGroupId.%d' % (sig + 1,)] =\ security_group_ids[sig] + print(params) if 'location' in kwargs: availability_zone = getattr(kwargs['location'], @@ -2254,6 +2259,9 @@ def create_node(self, **kwargs): if 'ex_subnet' in kwargs: params['SubnetId'] = kwargs['ex_subnet'].id + if 'ex_placement_group' in kwargs and kwargs['ex_placement_group']: + params['Placement.GroupName'] = kwargs['ex_placement_group'] + object = self.connection.request(self.path, params=params).object nodes = self._to_nodes(object, 'instancesSet/item') From d84595ee186ee10127ccdc8b9ef9e4246b4181e9 Mon Sep 17 00:00:00 2001 From: Mikhail Ovsyannikov Date: Fri, 12 Dec 2014 15:42:00 +0300 Subject: [PATCH 2/4] [AWS] del print --- libcloud/compute/drivers/ec2.py | 1 - 1 file changed, 1 deletion(-) diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py index cd369b430a..b420f539be 100644 --- a/libcloud/compute/drivers/ec2.py +++ b/libcloud/compute/drivers/ec2.py @@ -2211,7 +2211,6 @@ def create_node(self, **kwargs): for sig in range(len(security_group_ids)): params['SecurityGroupId.%d' % (sig + 1,)] =\ security_group_ids[sig] - print(params) if 'location' in kwargs: availability_zone = getattr(kwargs['location'], From 6512f349f3940fa83fe16f5cc49a834ec627afdc Mon Sep 17 00:00:00 2001 From: Mikhail Ovsyannikov Date: Fri, 12 Dec 2014 19:01:48 +0300 Subject: [PATCH 3/4] [AWS] Placement Groups --- libcloud/compute/drivers/ec2.py | 72 +++++++++++++++++++ .../fixtures/ec2/create_placement_groups.xml | 4 ++ .../fixtures/ec2/delete_placement_groups.xml | 4 ++ .../ec2/describe_placement_groups.xml | 15 ++++ libcloud/test/compute/test_ec2.py | 27 +++++++ 5 files changed, 122 insertions(+) create mode 100644 libcloud/test/compute/fixtures/ec2/create_placement_groups.xml create mode 100644 libcloud/test/compute/fixtures/ec2/delete_placement_groups.xml create mode 100644 libcloud/test/compute/fixtures/ec2/describe_placement_groups.xml diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py index b420f539be..68d064945c 100644 --- a/libcloud/compute/drivers/ec2.py +++ b/libcloud/compute/drivers/ec2.py @@ -65,6 +65,7 @@ 'EC2NodeLocation', 'EC2ReservedNode', 'EC2SecurityGroup', + 'EC2PlacementGroup', 'EC2Network', 'EC2NetworkSubnet', 'EC2NetworkInterface', @@ -1730,6 +1731,21 @@ def __repr__(self): % (self.id, self.name)) +class EC2PlacementGroup(object): + """Represents information about a Placement Grous + + Note: This class is EC2 specific. + """ + def __init__(self, name, state, strategy='cluster', extra=None): + self.name = name + self.strategy = strategy + self.extra = extra or {} + + def __repr__(self): + return ' + d4904fd9-82c2-4ea5-adfe-a9cc3EXAMPLE + true + diff --git a/libcloud/test/compute/fixtures/ec2/delete_placement_groups.xml b/libcloud/test/compute/fixtures/ec2/delete_placement_groups.xml new file mode 100644 index 0000000000..69091a37e5 --- /dev/null +++ b/libcloud/test/compute/fixtures/ec2/delete_placement_groups.xml @@ -0,0 +1,4 @@ + + d4904fd9-82c2-4ea5-adfe-a9cc3EXAMPLE + true + diff --git a/libcloud/test/compute/fixtures/ec2/describe_placement_groups.xml b/libcloud/test/compute/fixtures/ec2/describe_placement_groups.xml new file mode 100644 index 0000000000..787eb67962 --- /dev/null +++ b/libcloud/test/compute/fixtures/ec2/describe_placement_groups.xml @@ -0,0 +1,15 @@ + + d4904fd9-82c2-4ea5-adfe-a9cc3EXAMPLE + + + XYZ-cluster + cluster + available + + + XYZ-cluster2 + cluster + available + + + diff --git a/libcloud/test/compute/test_ec2.py b/libcloud/test/compute/test_ec2.py index ce84912bfa..1463e78f0d 100644 --- a/libcloud/test/compute/test_ec2.py +++ b/libcloud/test/compute/test_ec2.py @@ -928,6 +928,21 @@ def test_ex_create_security_group(self): self.assertEqual(group["group_id"], "sg-52e2f530") + def test_ex_create_placement_groups(self): + resp = self.driver.ex_create_placement_group("NewPG") + self.assertTrue(resp) + + def test_ex_delete_placement_groups(self): + pgs = self.driver.ex_list_placement_groups() + pg = pgs[0] + + resp = self.driver.ex_delete_placement_group(pg.name) + self.assertTrue(resp) + + def test_ex_list_placement_groups(self): + pgs = self.driver.ex_list_placement_groups() + self.assertEqual(len(pgs), 2) + def test_ex_list_networks(self): vpcs = self.driver.ex_list_networks() @@ -1494,6 +1509,18 @@ def _DetachInternetGateway(self, method, url, body, headers): body = self.fixtures.load('detach_internet_gateway.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) + def _CreatePlacementGroup(self, method, url, body, headers): + body = self.fixtures.load('create_placement_groups.xml') + return (httplib.OK, body, {}, httplib.responses[httplib.OK]) + + def _DeletePlacementGroup(self, method, url, body, headers): + body = self.fixtures.load('delete_placement_groups.xml') + return (httplib.OK, body, {}, httplib.responses[httplib.OK]) + + def _DescribePlacementGroups(self, method, url, body, headers): + body = self.fixtures.load('describe_placement_groups.xml') + return (httplib.OK, body, {}, httplib.responses[httplib.OK]) + class EucMockHttp(EC2MockHttp): fixtures = ComputeFileFixtures('ec2') From 0e51cd4f32b1790a0aa91979da9d11cf11da2d04 Mon Sep 17 00:00:00 2001 From: Mikhail Ovsyannikov Date: Mon, 15 Dec 2014 13:29:37 +0300 Subject: [PATCH 4/4] [AWS] fixes in placement groups --- libcloud/compute/drivers/ec2.py | 31 ++++++++++++++++++------------- libcloud/test/compute/test_ec2.py | 2 ++ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py index 68d064945c..a6b3ecefaf 100644 --- a/libcloud/compute/drivers/ec2.py +++ b/libcloud/compute/drivers/ec2.py @@ -1742,8 +1742,8 @@ def __init__(self, name, state, strategy='cluster', extra=None): self.extra = extra or {} def __repr__(self): - return '