diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py index 32b578fcb8..a6b3ecefaf 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..e1565656ac 100644 --- a/libcloud/test/compute/test_ec2.py +++ b/libcloud/test/compute/test_ec2.py @@ -29,6 +29,7 @@ from libcloud.compute.drivers.ec2 import EC2APNENodeDriver from libcloud.compute.drivers.ec2 import EC2APSESydneyNodeDriver from libcloud.compute.drivers.ec2 import EC2SAEastNodeDriver +from libcloud.compute.drivers.ec2 import EC2PlacementGroup from libcloud.compute.drivers.ec2 import NimbusNodeDriver, EucNodeDriver from libcloud.compute.drivers.ec2 import OutscaleSASNodeDriver from libcloud.compute.drivers.ec2 import IdempotentParamError @@ -928,6 +929,22 @@ 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) + self.assertIsInstance(pgs[0], EC2PlacementGroup) + def test_ex_list_networks(self): vpcs = self.driver.ex_list_networks() @@ -1494,6 +1511,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')