From 1a3e8f4a5bdb81b520610ba88cb98ae5be3b83ff Mon Sep 17 00:00:00 2001 From: gigimon Date: Tue, 14 Jan 2014 14:18:43 +0200 Subject: [PATCH] * fix ec2 driver delete_key_pair for accept KeyPair object (how openstack and cloudstack)\n* fix old method ex_delete_keypair it doesn't work because call delete_key_pair with name=keypair\n* fix unit tests for list_key_pair (not work backward compatibility test)\n* fix delete_key_pair test --- libcloud/compute/drivers/ec2.py | 14 +++++++++++-- .../compute/fixtures/ec2/associate_vpc_address.xml | 2 +- .../test/compute/fixtures/ec2/delete_key_pair.xml | 4 ++++ libcloud/test/compute/test_ec2.py | 23 ++++++++++++---------- 4 files changed, 30 insertions(+), 13 deletions(-) create mode 100644 libcloud/test/compute/fixtures/ec2/delete_key_pair.xml diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py index 164fd88..1d08c23 100644 --- a/libcloud/compute/drivers/ec2.py +++ b/libcloud/compute/drivers/ec2.py @@ -1547,9 +1547,17 @@ class BaseEC2NodeDriver(NodeDriver): return key_pair def delete_key_pair(self, key_pair): + """ + Delete a KeyPair. + + :param keypair: KeyPair to delete + :type keypair: :class:`KeyPair` + + :rtype: ``bool`` + """ params = { 'Action': 'DeleteKeyPair', - 'KeyName': key_pair + 'KeyName': key_pair.name } result = self.connection.request(self.path, params=params).object element = findtext(element=result, xpath='return', @@ -2955,7 +2963,9 @@ class BaseEC2NodeDriver(NodeDriver): warnings.warn('This method has been deprecated in favor of ' 'delete_key_pair method') - return self.delete_key_pair(name=keypair) + keypair = KeyPair(name=keypair, driver=self, public_key='', fingerprint='') + + return self.delete_key_pair(keypair) def ex_import_keypair_from_string(self, name, key_material): """ diff --git a/libcloud/test/compute/fixtures/ec2/associate_vpc_address.xml b/libcloud/test/compute/fixtures/ec2/associate_vpc_address.xml index 46433e2..21348ed 100644 --- a/libcloud/test/compute/fixtures/ec2/associate_vpc_address.xml +++ b/libcloud/test/compute/fixtures/ec2/associate_vpc_address.xml @@ -1,5 +1,5 @@ - 1b3bf0d9-6c51-4443-a218-f25ecdc98c2a + s132fsz2-6cdg-4ox3-a148-lpqnvdc98c2a true eipassoc-167a8073 \ No newline at end of file diff --git a/libcloud/test/compute/fixtures/ec2/delete_key_pair.xml b/libcloud/test/compute/fixtures/ec2/delete_key_pair.xml new file mode 100644 index 0000000..3e605b0 --- /dev/null +++ b/libcloud/test/compute/fixtures/ec2/delete_key_pair.xml @@ -0,0 +1,4 @@ + + 59dbff89-35bd-4eac-99ed-be587 + true + \ No newline at end of file diff --git a/libcloud/test/compute/test_ec2.py b/libcloud/test/compute/test_ec2.py index e0af93d..2a8fd6e 100644 --- a/libcloud/test/compute/test_ec2.py +++ b/libcloud/test/compute/test_ec2.py @@ -524,23 +524,26 @@ class EC2Tests(LibcloudTestCase, TestCaseMixin): keys = self.driver.ex_describe_all_keypairs() self.assertEqual(keys, ['gsg-keypair']) - def test_ex_describe_keypairs(self): - keypair1 = self.driver.ex_describe_keypair('gsg-keypair') + def test_list_key_pairs(self): + keypair1 = self.driver.list_key_pairs()[0] + + self.assertEqual(keypair1.name, 'gsg-keypair') + self.assertEqual(keypair1.fingerprint, null_fingerprint) # Test backward compatibility keypair2 = self.driver.ex_describe_keypairs('gsg-keypair') - self.assertEqual(keypair1['keyName'], 'gsg-keypair') - self.assertEqual(keypair1['keyFingerprint'], null_fingerprint) self.assertEqual(keypair2['keyName'], 'gsg-keypair') self.assertEqual(keypair2['keyFingerprint'], null_fingerprint) - def ex_delete_key_pair(self): - success = self.driver.delete_key_pair('testkey') + def test_delete_key_pair(self): + keypair = self.driver.list_key_pairs()[0] + success = self.driver.delete_key_pair(keypair) + self.assertTrue(success) # Test old and deprecated method - resp = self.driver.ex_delete_keypair('testkey') + resp = self.driver.ex_delete_keypair('gsg-keypair') self.assertTrue(resp) def test_ex_describe_tags(self): @@ -1256,10 +1259,10 @@ class EC2MockHttp(MockHttpTestCase): body = self.fixtures.load('deregister_image.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) - def _DeleteKeypair(self, method, url, body, headers): - self.assertUrlContainsQueryParams(url, {'KeyPair': 'testkey'}) + def _DeleteKeyPair(self, method, url, body, headers): + self.assertUrlContainsQueryParams(url, {'KeyName': 'gsg-keypair'}) - body = self.fixtures.load('delete_keypair.xml') + body = self.fixtures.load('delete_key_pair.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) def _ModifyImageAttribute(self, method, url, body, headers): -- 1.8.3.4 (Apple Git-47)