From 92a19dfa2f545de5d56059e55a8380cad3246aee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C5=82awek=20Kap=C5=82o=C5=84ski?= Date: Fri, 26 May 2017 20:57:41 +0000 Subject: [PATCH] Remove designateclient from commands related to zones All commands related to zones, like create/update/list/delete zone are now made using keystoneauth1 client and direct REST calls to cloud. Change-Id: Id3a0fc0aa55e62832fd6fb85cafda8d55023d01f --- shade/_tasks.py | 20 --------- shade/openstackcloud.py | 46 +++++++++++--------- shade/tests/unit/test_recordset.py | 38 +++++++++++------ shade/tests/unit/test_zone.py | 68 +++++++++++++++--------------- 4 files changed, 88 insertions(+), 84 deletions(-) diff --git a/shade/_tasks.py b/shade/_tasks.py index c350510b7..6076affea 100644 --- a/shade/_tasks.py +++ b/shade/_tasks.py @@ -407,26 +407,6 @@ class RolesForUser(task_manager.Task): return client.keystone_client.roles.roles_for_user(**self.args) -class ZoneList(task_manager.Task): - def main(self, client): - return client.designate_client.zones.list() - - -class ZoneCreate(task_manager.Task): - def main(self, client): - return client.designate_client.zones.create(**self.args) - - -class ZoneUpdate(task_manager.Task): - def main(self, client): - return client.designate_client.zones.update(**self.args) - - -class ZoneDelete(task_manager.Task): - def main(self, client): - return client.designate_client.zones.delete(**self.args) - - class RecordSetList(task_manager.Task): def main(self, client): return client.designate_client.recordsets.list(**self.args) diff --git a/shade/openstackcloud.py b/shade/openstackcloud.py index 88e58d60d..d15166945 100644 --- a/shade/openstackcloud.py +++ b/shade/openstackcloud.py @@ -6916,8 +6916,9 @@ class OpenStackCloud( :returns: A list of zones dicts. """ - with _utils.shade_exceptions("Error fetching zones list"): - return self.manager.submit_task(_tasks.ZoneList()) + return self._dns_client.get( + "/v2/zones", + error_message="Error fetching zones list") def get_zone(self, name_or_id, filters=None): """Get a zone by name or ID. @@ -6936,7 +6937,7 @@ class OpenStackCloud( def search_zones(self, name_or_id=None, filters=None): zones = self.list_zones() - return _utils._filter_list(zones, name_or_id, filters) + return _utils._filter_list(zones['zones'], name_or_id, filters) def create_zone(self, name, zone_type=None, email=None, description=None, ttl=None, masters=None): @@ -6965,11 +6966,23 @@ class OpenStackCloud( "Invalid type %s, valid choices are PRIMARY or SECONDARY" % zone_type) - with _utils.shade_exceptions("Unable to create zone {name}".format( - name=name)): - return self.manager.submit_task(_tasks.ZoneCreate( - name=name, type_=zone_type, email=email, - description=description, ttl=ttl, masters=masters)) + zone = { + "name": name, + "email": email, + "description": description, + } + if ttl is not None: + zone["ttl"] = ttl + + if zone_type is not None: + zone["type"] = zone_type + + if masters is not None: + zone["masters"] = masters + + return self._dns_client.post( + "/v2/zones", json=zone, + error_message="Unable to create zone {name}".format(name=name)) @_utils.valid_kwargs('email', 'description', 'ttl', 'masters') def update_zone(self, name_or_id, **kwargs): @@ -6992,13 +7005,9 @@ class OpenStackCloud( raise OpenStackCloudException( "Zone %s not found." % name_or_id) - with _utils.shade_exceptions( - "Error updating zone {0}".format(name_or_id)): - new_zone = self.manager.submit_task( - _tasks.ZoneUpdate( - zone=zone['id'], values=kwargs)) - - return new_zone + return self._dns_client.patch( + "/v2/zones/{zone_id}".format(zone_id=zone['id']), json=kwargs, + error_message="Error updating zone {0}".format(name_or_id)) def delete_zone(self, name_or_id): """Delete a zone. @@ -7015,10 +7024,9 @@ class OpenStackCloud( self.log.debug("Zone %s not found for deleting", name_or_id) return False - with _utils.shade_exceptions( - "Error deleting zone {0}".format(name_or_id)): - self.manager.submit_task( - _tasks.ZoneDelete(zone=zone['id'])) + return self._dns_client.delete( + "/v2/zones/{zone_id}".format(zone_id=zone['id']), + error_message="Error deleting zone {0}".format(name_or_id)) return True diff --git a/shade/tests/unit/test_recordset.py b/shade/tests/unit/test_recordset.py index 975a70630..f639170d5 100644 --- a/shade/tests/unit/test_recordset.py +++ b/shade/tests/unit/test_recordset.py @@ -43,16 +43,16 @@ new_recordset['zone'] = recordset_zone class TestRecordset(base.RequestsMockTestCase): - def setUp(self): - super(TestRecordset, self).setUp() - self.use_designate() - def test_create_recordset(self): self.register_uris([ dict(method='GET', uri=self.get_mock_url( - 'dns', 'public', append=['zones']), - json={"zones": [zone]}), + 'dns', 'public', append=['v2', 'zones']), + json={ + "zones": [zone], + "links": {}, + "metadata": { + 'total_count': 1}}), self.get_designate_discovery_mock_dict(), dict(method='GET', uri=self.get_mock_url( @@ -86,8 +86,12 @@ class TestRecordset(base.RequestsMockTestCase): self.register_uris([ dict(method='GET', uri=self.get_mock_url( - 'dns', 'public', append=['zones']), - json={"zones": [zone]}), + 'dns', 'public', append=['v2', 'zones']), + json={ + "zones": [zone], + "links": {}, + "metadata": { + 'total_count': 1}}), self.get_designate_discovery_mock_dict(), dict(method='GET', uri=self.get_mock_url( @@ -128,8 +132,12 @@ class TestRecordset(base.RequestsMockTestCase): self.register_uris([ dict(method='GET', uri=self.get_mock_url( - 'dns', 'public', append=['zones']), - json={"zones": [zone]}), + 'dns', 'public', append=['v2', 'zones']), + json={ + "zones": [zone], + "links": {}, + "metadata": { + 'total_count': 1}}), self.get_designate_discovery_mock_dict(), dict(method='GET', uri=self.get_mock_url( @@ -194,8 +202,12 @@ class TestRecordset(base.RequestsMockTestCase): self.register_uris([ dict(method='GET', uri=self.get_mock_url( - 'dns', 'public', append=['zones']), - json={"zones": [zone]}), + 'dns', 'public', append=['v2', 'zones']), + json={ + "zones": [zone], + "links": {}, + "metadata": { + 'total_count': 1}}), self.get_designate_discovery_mock_dict(), dict(method='GET', uri=self.get_mock_url( @@ -256,6 +268,7 @@ class TestRecordset(base.RequestsMockTestCase): def _prepare_get_recordset_calls(self, zone_id, name_or_id): self.register_uris([ + self.get_designate_discovery_mock_dict(), dict(method='GET', uri=self.get_mock_url( 'dns', 'public', append=['zones'], @@ -298,6 +311,7 @@ class TestRecordset(base.RequestsMockTestCase): def test_get_recordset_not_found_returns_false(self): recordset_name = "www.nonexistingrecord.net." self.register_uris([ + self.get_designate_discovery_mock_dict(), dict(method='GET', uri=self.get_mock_url( 'dns', 'public', append=['zones'], diff --git a/shade/tests/unit/test_zone.py b/shade/tests/unit/test_zone.py index 344bb0aae..3d481364c 100644 --- a/shade/tests/unit/test_zone.py +++ b/shade/tests/unit/test_zone.py @@ -31,15 +31,11 @@ new_zone_dict['id'] = '1' class TestZone(base.RequestsMockTestCase): - def setUp(self): - super(TestZone, self).setUp() - self.use_designate() - def test_create_zone(self): self.register_uris([ dict(method='POST', uri=self.get_mock_url( - 'dns', 'public', append=['zones']), + 'dns', 'public', append=['v2', 'zones']), json=new_zone_dict, validate=dict( json=zone_dict)) @@ -58,11 +54,11 @@ class TestZone(base.RequestsMockTestCase): self.register_uris([ dict(method='POST', uri=self.get_mock_url( - 'dns', 'public', append=['zones']), + 'dns', 'public', append=['v2', 'zones']), status_code=500) ]) with testtools.ExpectedException( - shade.OpenStackCloudException, + shade.exc.OpenStackCloudHTTPError, "Unable to create zone example.net." ): self.cloud.create_zone('example.net.') @@ -75,18 +71,15 @@ class TestZone(base.RequestsMockTestCase): self.register_uris([ dict(method='GET', uri=self.get_mock_url( - 'dns', 'public', append=['zones']), - json={"zones": [new_zone_dict]}), - self.get_designate_discovery_mock_dict(), - dict(method='GET', - uri=self.get_mock_url( - 'dns', 'public', append=['zones'], - qs_elements=['name=1']), - json={'zones': [new_zone_dict]}), - self.get_designate_discovery_mock_dict(), + 'dns', 'public', append=['v2', 'zones']), + json={ + "zones": [new_zone_dict], + "links": {}, + "metadata": { + 'total_count': 1}}), dict(method='PATCH', uri=self.get_mock_url( - 'dns', 'public', append=['zones', '1']), + 'dns', 'public', append=['v2', 'zones', '1']), json=updated_zone, validate=dict( json={"ttl": new_ttl})) @@ -99,18 +92,15 @@ class TestZone(base.RequestsMockTestCase): self.register_uris([ dict(method='GET', uri=self.get_mock_url( - 'dns', 'public', append=['zones']), - json={"zones": [new_zone_dict]}), - self.get_designate_discovery_mock_dict(), - dict(method='GET', - uri=self.get_mock_url( - 'dns', 'public', append=['zones'], - qs_elements=['name=1']), - json={'zones': [new_zone_dict]}), - self.get_designate_discovery_mock_dict(), + 'dns', 'public', append=['v2', 'zones']), + json={ + "zones": [new_zone_dict], + "links": {}, + "metadata": { + 'total_count': 1}}), dict(method='DELETE', uri=self.get_mock_url( - 'dns', 'public', append=['zones', '1']), + 'dns', 'public', append=['v2', 'zones', '1']), json=new_zone_dict) ]) self.assertTrue(self.cloud.delete_zone('1')) @@ -120,8 +110,12 @@ class TestZone(base.RequestsMockTestCase): self.register_uris([ dict(method='GET', uri=self.get_mock_url( - 'dns', 'public', append=['zones']), - json={"zones": [new_zone_dict]}) + 'dns', 'public', append=['v2', 'zones']), + json={ + "zones": [new_zone_dict], + "links": {}, + "metadata": { + 'total_count': 1}}) ]) zone = self.cloud.get_zone('1') self.assertEqual(zone['id'], '1') @@ -131,8 +125,12 @@ class TestZone(base.RequestsMockTestCase): self.register_uris([ dict(method='GET', uri=self.get_mock_url( - 'dns', 'public', append=['zones']), - json={"zones": [new_zone_dict]}) + 'dns', 'public', append=['v2', 'zones']), + json={ + "zones": [new_zone_dict], + "links": {}, + "metadata": { + 'total_count': 1}}) ]) zone = self.cloud.get_zone('example.net.') self.assertEqual(zone['name'], 'example.net.') @@ -142,8 +140,12 @@ class TestZone(base.RequestsMockTestCase): self.register_uris([ dict(method='GET', uri=self.get_mock_url( - 'dns', 'public', append=['zones']), - json={"zones": []}) + 'dns', 'public', append=['v2', 'zones']), + json={ + "zones": [], + "links": {}, + "metadata": { + 'total_count': 1}}) ]) zone = self.cloud.get_zone('nonexistingzone.net.') self.assertFalse(zone)