DigitalOceanNodeDriver minor revisions - Raise on api_version / key or key-secret mismatch - Added tests for v1 and v2 DigitalOceanNodeDriver using wrong keys - Updated examples to include explicit api_version values
Signed-off-by: Tomaz Muraus <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/af15645b Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/af15645b Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/af15645b Branch: refs/heads/trunk Commit: af15645b556a32ec65d6c66805754bd5d9d48650 Parents: fbaaee7 Author: jcastillo2nd <[email protected]> Authored: Thu May 28 13:46:18 2015 +0000 Committer: Tomaz Muraus <[email protected]> Committed: Sun Jun 14 18:05:58 2015 +0800 ---------------------------------------------------------------------- docs/examples/compute/digitalocean/instantiate_api_v1.0.py | 2 +- docs/examples/compute/digitalocean/instantiate_api_v2.0.py | 2 +- libcloud/compute/drivers/digitalocean.py | 7 +++++++ libcloud/dns/drivers/digitalocean.py | 3 ++- libcloud/test/compute/test_digitalocean_v1.py | 5 +++++ libcloud/test/compute/test_digitalocean_v2.py | 5 +++++ libcloud/test/dns/test_digitalocean.py | 2 ++ 7 files changed, 23 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/af15645b/docs/examples/compute/digitalocean/instantiate_api_v1.0.py ---------------------------------------------------------------------- diff --git a/docs/examples/compute/digitalocean/instantiate_api_v1.0.py b/docs/examples/compute/digitalocean/instantiate_api_v1.0.py index c1b822d..ea498d1 100644 --- a/docs/examples/compute/digitalocean/instantiate_api_v1.0.py +++ b/docs/examples/compute/digitalocean/instantiate_api_v1.0.py @@ -2,4 +2,4 @@ from libcloud.compute.types import Provider from libcloud.compute.providers import get_driver cls = get_driver(Provider.DIGITAL_OCEAN) -driver = cls('client id', 'api key') +driver = cls('client id', 'api key', api_version='v1') http://git-wip-us.apache.org/repos/asf/libcloud/blob/af15645b/docs/examples/compute/digitalocean/instantiate_api_v2.0.py ---------------------------------------------------------------------- diff --git a/docs/examples/compute/digitalocean/instantiate_api_v2.0.py b/docs/examples/compute/digitalocean/instantiate_api_v2.0.py index 1a29362..83e4e7a 100644 --- a/docs/examples/compute/digitalocean/instantiate_api_v2.0.py +++ b/docs/examples/compute/digitalocean/instantiate_api_v2.0.py @@ -3,4 +3,4 @@ from libcloud.compute.providers import get_driver cls = get_driver(Provider.DIGITAL_OCEAN) -driver = cls('access token') +driver = cls('access token', api_version='v2') http://git-wip-us.apache.org/repos/asf/libcloud/blob/af15645b/libcloud/compute/drivers/digitalocean.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/drivers/digitalocean.py b/libcloud/compute/drivers/digitalocean.py index 46355fb..aa6dba4 100644 --- a/libcloud/compute/drivers/digitalocean.py +++ b/libcloud/compute/drivers/digitalocean.py @@ -21,6 +21,7 @@ from libcloud.utils.py3 import httplib from libcloud.common.digitalocean import DigitalOcean_v1_BaseDriver from libcloud.common.digitalocean import DigitalOcean_v2_BaseDriver +from libcloud.common.types import InvalidCredsError from libcloud.compute.types import Provider, NodeState from libcloud.compute.base import NodeDriver, Node from libcloud.compute.base import NodeImage, NodeSize, NodeLocation, KeyPair @@ -57,6 +58,12 @@ class DigitalOceanNodeDriver(NodeDriver): def __new__(cls, key, secret=None, api_version='v2', **kwargs): if cls is DigitalOceanNodeDriver: if api_version == 'v1' or secret is not None: + if secret is None: + raise InvalidCredsError( + 'secret missing for v1 authentication') + if secret is not None and api_version == 'v2': + raise InvalidCredsError( + 'secret not accepted for v2 authentication') cls = DigitalOcean_v1_NodeDriver elif api_version == 'v2': cls = DigitalOcean_v2_NodeDriver http://git-wip-us.apache.org/repos/asf/libcloud/blob/af15645b/libcloud/dns/drivers/digitalocean.py ---------------------------------------------------------------------- diff --git a/libcloud/dns/drivers/digitalocean.py b/libcloud/dns/drivers/digitalocean.py index 3470fa0..ad8a297 100644 --- a/libcloud/dns/drivers/digitalocean.py +++ b/libcloud/dns/drivers/digitalocean.py @@ -65,7 +65,8 @@ class DigitalOceanDNSDriver(DigitalOcean_v2_BaseDriver, DNSDriver): data = self._paginated_request('/v2/domains/%s/records' % (zone.id), 'domain_records') # TODO: Not use list comprehension to add zone to record for proper data map -# functionality? +# functionality? This passes a reference to zone for each data currently +# to _to_record which returns a Record. map() does not take keywords return list(map(self._to_record, data, [zone for z in data])) def get_zone(self, zone_id): http://git-wip-us.apache.org/repos/asf/libcloud/blob/af15645b/libcloud/test/compute/test_digitalocean_v1.py ---------------------------------------------------------------------- diff --git a/libcloud/test/compute/test_digitalocean_v1.py b/libcloud/test/compute/test_digitalocean_v1.py index 33c7f1c..0dd0e3c 100644 --- a/libcloud/test/compute/test_digitalocean_v1.py +++ b/libcloud/test/compute/test_digitalocean_v1.py @@ -29,6 +29,7 @@ from libcloud.compute.drivers.digitalocean import DigitalOceanNodeDriver from libcloud.test import LibcloudTestCase, MockHttpTestCase from libcloud.test.file_fixtures import ComputeFileFixtures from libcloud.test.secrets import DIGITALOCEAN_v1_PARAMS +from libcloud.test.secrets import DIGITALOCEAN_v2_PARAMS # class DigitalOceanTests(unittest.TestCase, TestCaseMixin): @@ -41,6 +42,10 @@ class DigitalOcean_v1_Tests(LibcloudTestCase): self.driver = DigitalOceanNodeDriver(*DIGITALOCEAN_v1_PARAMS, api_version='v1') + def test_v1_uses_v2_key(self): + self.assertRaises(InvalidCredsError, DigitalOceanNodeDriver, + *DIGITALOCEAN_v2_PARAMS, api_version='v1') + def test_authentication(self): DigitalOceanMockHttp.type = 'UNAUTHORIZED_CLIENT' self.assertRaises(InvalidCredsError, self.driver.list_nodes) http://git-wip-us.apache.org/repos/asf/libcloud/blob/af15645b/libcloud/test/compute/test_digitalocean_v2.py ---------------------------------------------------------------------- diff --git a/libcloud/test/compute/test_digitalocean_v2.py b/libcloud/test/compute/test_digitalocean_v2.py index 0d00f41..73db2af 100644 --- a/libcloud/test/compute/test_digitalocean_v2.py +++ b/libcloud/test/compute/test_digitalocean_v2.py @@ -28,6 +28,7 @@ from libcloud.compute.drivers.digitalocean import DigitalOceanNodeDriver from libcloud.test import LibcloudTestCase, MockHttpTestCase from libcloud.test.file_fixtures import ComputeFileFixtures +from libcloud.test.secrets import DIGITALOCEAN_v1_PARAMS from libcloud.test.secrets import DIGITALOCEAN_v2_PARAMS @@ -40,6 +41,10 @@ class DigitalOcean_v2_Tests(LibcloudTestCase): DigitalOceanMockHttp.type = None self.driver = DigitalOceanNodeDriver(*DIGITALOCEAN_v2_PARAMS) + def test_v2_uses_v1_key(self): + self.assertRaises(InvalidCredsError, DigitalOceanNodeDriver, + *DIGITALOCEAN_v1_PARAMS, api_version='v2') + def test_authentication(self): DigitalOceanMockHttp.type = 'UNAUTHORIZED' self.assertRaises(InvalidCredsError, self.driver.list_nodes) http://git-wip-us.apache.org/repos/asf/libcloud/blob/af15645b/libcloud/test/dns/test_digitalocean.py ---------------------------------------------------------------------- diff --git a/libcloud/test/dns/test_digitalocean.py b/libcloud/test/dns/test_digitalocean.py index f1bb92e..6a5f222 100644 --- a/libcloud/test/dns/test_digitalocean.py +++ b/libcloud/test/dns/test_digitalocean.py @@ -15,11 +15,13 @@ import sys import unittest +from libcloud.common.types import InvalidCredsError from libcloud.dns.drivers.digitalocean import DigitalOceanDNSDriver from libcloud.dns.types import RecordType from libcloud.test import LibcloudTestCase, MockHttpTestCase from libcloud.test.file_fixtures import DNSFileFixtures from libcloud.test.secrets import DIGITALOCEAN_v2_PARAMS +from libcloud.test.secrets import DIGITALOCEAN_v1_PARAMS from libcloud.utils.py3 import httplib
