2014-11-13 09:56:24 +01:00
|
|
|
# Copyright 2015 Hewlett-Packard Development Company, L.P.
|
|
|
|
#
|
|
|
|
# Author: Endre Karlson <endre.karlson@hp.com>
|
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
|
|
# not use this file except in compliance with the License. You may obtain
|
|
|
|
# a copy of the License at
|
|
|
|
#
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
|
|
# License for the specific language governing permissions and limitations
|
|
|
|
# under the License.
|
2016-01-27 20:11:44 +00:00
|
|
|
from designateclient.v2.base import V2Controller
|
2014-11-13 09:56:24 +01:00
|
|
|
from designateclient.v2 import utils as v2_utils
|
|
|
|
|
|
|
|
|
2016-01-27 20:11:44 +00:00
|
|
|
class ZoneController(V2Controller):
|
2014-11-13 09:56:24 +01:00
|
|
|
def create(self, name, type_=None, email=None, description=None, ttl=None,
|
2017-01-31 23:00:38 +00:00
|
|
|
masters=None, attributes=None):
|
2023-11-17 08:44:57 -08:00
|
|
|
type_ = type_ or 'PRIMARY'
|
2014-11-13 09:56:24 +01:00
|
|
|
|
|
|
|
data = {
|
2023-11-17 08:44:57 -08:00
|
|
|
'name': name,
|
|
|
|
'type': type_
|
2014-11-13 09:56:24 +01:00
|
|
|
}
|
|
|
|
|
2023-11-17 08:44:57 -08:00
|
|
|
if type_ == 'PRIMARY':
|
2015-08-21 04:00:10 +00:00
|
|
|
if email:
|
2023-11-17 08:44:57 -08:00
|
|
|
data['email'] = email
|
2014-11-13 09:56:24 +01:00
|
|
|
|
|
|
|
if ttl is not None:
|
2023-11-17 08:44:57 -08:00
|
|
|
data['ttl'] = ttl
|
2014-11-13 09:56:24 +01:00
|
|
|
|
2023-11-17 08:44:57 -08:00
|
|
|
elif type_ == 'SECONDARY' and masters:
|
|
|
|
data['masters'] = masters
|
2014-11-13 09:56:24 +01:00
|
|
|
|
|
|
|
if description is not None:
|
2023-11-17 08:44:57 -08:00
|
|
|
data['description'] = description
|
2014-11-13 09:56:24 +01:00
|
|
|
|
2017-01-31 23:00:38 +00:00
|
|
|
if attributes is not None:
|
2023-11-17 08:44:57 -08:00
|
|
|
data['attributes'] = attributes
|
2017-01-31 23:00:38 +00:00
|
|
|
|
2014-11-13 09:56:24 +01:00
|
|
|
return self._post('/zones', data=data)
|
|
|
|
|
|
|
|
def list(self, criterion=None, marker=None, limit=None):
|
|
|
|
url = self.build_url('/zones', criterion, marker, limit)
|
|
|
|
|
2023-11-17 08:44:57 -08:00
|
|
|
return self._get(url, response_key='zones')
|
2014-11-13 09:56:24 +01:00
|
|
|
|
|
|
|
def get(self, zone):
|
|
|
|
zone = v2_utils.resolve_by_name(self.list, zone)
|
|
|
|
|
2023-11-17 08:44:57 -08:00
|
|
|
return self._get(f'/zones/{zone}')
|
2014-11-13 09:56:24 +01:00
|
|
|
|
|
|
|
def update(self, zone, values):
|
|
|
|
zone = v2_utils.resolve_by_name(self.list, zone)
|
|
|
|
|
2023-11-17 08:44:57 -08:00
|
|
|
url = self.build_url(f'/zones/{zone}')
|
2014-11-13 09:56:24 +01:00
|
|
|
|
|
|
|
return self._patch(url, data=values)
|
|
|
|
|
2020-04-26 20:25:50 +03:00
|
|
|
def delete(self, zone, delete_shares=False):
|
2014-11-13 09:56:24 +01:00
|
|
|
zone = v2_utils.resolve_by_name(self.list, zone)
|
|
|
|
|
2023-11-17 08:44:57 -08:00
|
|
|
url = self.build_url(f'/zones/{zone}')
|
2014-11-13 09:56:24 +01:00
|
|
|
|
2020-04-26 20:25:50 +03:00
|
|
|
if delete_shares:
|
|
|
|
headers = {'X-Designate-Delete-Shares': 'true'}
|
|
|
|
_resp, body = self.client.session.delete(url, headers=headers)
|
|
|
|
else:
|
|
|
|
_resp, body = self.client.session.delete(url)
|
|
|
|
|
|
|
|
return body
|
2014-11-13 09:56:24 +01:00
|
|
|
|
|
|
|
def abandon(self, zone):
|
|
|
|
zone = v2_utils.resolve_by_name(self.list, zone)
|
|
|
|
|
2023-11-17 08:44:57 -08:00
|
|
|
url = f'/zones/{zone}/tasks/abandon'
|
2014-11-13 09:56:24 +01:00
|
|
|
|
|
|
|
self.client.session.post(url)
|
|
|
|
|
|
|
|
def axfr(self, zone):
|
|
|
|
zone = v2_utils.resolve_by_name(self.list, zone)
|
|
|
|
|
2023-11-17 08:44:57 -08:00
|
|
|
url = f'/zones/{zone}/tasks/xfr'
|
2014-11-13 09:56:24 +01:00
|
|
|
|
|
|
|
self.client.session.post(url)
|
|
|
|
|
2021-06-17 15:48:22 +02:00
|
|
|
def pool_move(self, zone, values):
|
|
|
|
zone = v2_utils.resolve_by_name(self.list, zone)
|
|
|
|
|
|
|
|
url = self.build_url('/zones/%s/tasks/pool_move' % zone)
|
|
|
|
|
|
|
|
return self._post(url, data=values)
|
|
|
|
|
2014-11-13 09:56:24 +01:00
|
|
|
|
2016-01-27 20:11:44 +00:00
|
|
|
class ZoneTransfersController(V2Controller):
|
2014-11-13 09:56:24 +01:00
|
|
|
def create_request(self, zone, target_project_id, description=None):
|
|
|
|
zone = v2_utils.resolve_by_name(self.client.zones.list, zone)
|
|
|
|
|
|
|
|
data = {
|
2023-11-17 08:44:57 -08:00
|
|
|
'target_project_id': target_project_id
|
2014-11-13 09:56:24 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if description is not None:
|
2023-11-17 08:44:57 -08:00
|
|
|
data['description'] = description
|
2014-11-13 09:56:24 +01:00
|
|
|
|
2023-11-17 08:44:57 -08:00
|
|
|
url = f'/zones/{zone}/tasks/transfer_requests'
|
2014-11-13 09:56:24 +01:00
|
|
|
|
|
|
|
return self._post(url, data=data)
|
|
|
|
|
|
|
|
def get_request(self, transfer_id):
|
2023-11-17 08:44:57 -08:00
|
|
|
url = f'/zones/tasks/transfer_requests/{transfer_id}'
|
2014-11-13 09:56:24 +01:00
|
|
|
return self._get(url)
|
|
|
|
|
|
|
|
def list_requests(self):
|
|
|
|
url = '/zones/tasks/transfer_requests'
|
2023-11-17 08:44:57 -08:00
|
|
|
return self._get(url, response_key='transfer_requests')
|
2014-11-13 09:56:24 +01:00
|
|
|
|
|
|
|
def update_request(self, transfer_id, values):
|
2023-11-17 08:44:57 -08:00
|
|
|
url = f'/zones/tasks/transfer_requests/{transfer_id}'
|
2014-11-13 09:56:24 +01:00
|
|
|
return self._patch(url, data=values)
|
|
|
|
|
|
|
|
def delete_request(self, transfer_id):
|
2023-11-17 08:44:57 -08:00
|
|
|
url = f'/zones/tasks/transfer_requests/{transfer_id}'
|
2014-11-13 09:56:24 +01:00
|
|
|
self._delete(url)
|
|
|
|
|
|
|
|
def accept_request(self, transfer_id, key):
|
|
|
|
url = '/zones/tasks/transfer_accepts'
|
|
|
|
|
|
|
|
data = {
|
2023-11-17 08:44:57 -08:00
|
|
|
'key': key,
|
|
|
|
'zone_transfer_request_id': transfer_id
|
2014-11-13 09:56:24 +01:00
|
|
|
}
|
|
|
|
return self._post(url, data=data)
|
|
|
|
|
|
|
|
def get_accept(self, accept_id):
|
2023-11-17 08:44:57 -08:00
|
|
|
url = f'/zones/tasks/transfer_accepts/{accept_id}'
|
2014-11-13 09:56:24 +01:00
|
|
|
return self._get(url)
|
2016-03-22 17:08:18 -05:00
|
|
|
|
2016-06-14 15:12:38 +05:30
|
|
|
def list_accepts(self):
|
|
|
|
url = '/zones/tasks/transfer_accepts'
|
2023-11-17 08:44:57 -08:00
|
|
|
return self._get(url, response_key='transfer_accepts')
|
2016-06-14 15:12:38 +05:30
|
|
|
|
2016-03-22 17:08:18 -05:00
|
|
|
|
|
|
|
class ZoneExportsController(V2Controller):
|
|
|
|
def create(self, zone):
|
|
|
|
zone_id = v2_utils.resolve_by_name(self.client.zones.list, zone)
|
|
|
|
|
2023-11-17 08:44:57 -08:00
|
|
|
return self._post(f'/zones/{zone_id}/tasks/export')
|
2016-03-22 17:08:18 -05:00
|
|
|
|
|
|
|
def get_export_record(self, zone_export_id):
|
2023-11-17 08:44:57 -08:00
|
|
|
return self._get(f'/zones/tasks/exports/{zone_export_id}')
|
2016-03-22 17:08:18 -05:00
|
|
|
|
|
|
|
def list(self):
|
|
|
|
return self._get('/zones/tasks/exports')
|
|
|
|
|
|
|
|
def delete(self, zone_export_id):
|
2023-11-17 08:44:57 -08:00
|
|
|
return self._delete(f'/zones/tasks/exports/{zone_export_id}')
|
2016-03-22 17:08:18 -05:00
|
|
|
|
|
|
|
def get_export(self, zone_export_id):
|
2023-11-17 08:44:57 -08:00
|
|
|
return self._get(f'/zones/tasks/exports/{zone_export_id}/export',
|
2016-03-22 17:08:18 -05:00
|
|
|
headers={'Accept': 'text/dns'})
|
|
|
|
|
|
|
|
|
|
|
|
class ZoneImportsController(V2Controller):
|
2016-03-24 19:21:31 -05:00
|
|
|
def create(self, zone_file_contents):
|
|
|
|
return self._post('/zones/tasks/imports', data=zone_file_contents,
|
|
|
|
headers={'Content-Type': 'text/dns'})
|
|
|
|
|
|
|
|
def get_import_record(self, zone_import_id):
|
2023-11-17 08:44:57 -08:00
|
|
|
return self._get(f'/zones/tasks/imports/{zone_import_id}')
|
2016-03-24 19:21:31 -05:00
|
|
|
|
|
|
|
def list(self):
|
|
|
|
return self._get('/zones/tasks/imports')
|
|
|
|
|
|
|
|
def delete(self, zone_import_id):
|
2023-11-17 08:44:57 -08:00
|
|
|
return self._delete(f'/zones/tasks/imports/{zone_import_id}')
|
2020-04-26 20:25:50 +03:00
|
|
|
|
|
|
|
|
|
|
|
class ZoneShareController(V2Controller):
|
|
|
|
def create(self, zone, target_project_id):
|
|
|
|
zone_id = v2_utils.resolve_by_name(self.client.zones.list, zone)
|
|
|
|
|
2023-11-17 08:44:57 -08:00
|
|
|
data = {'target_project_id': target_project_id}
|
2020-04-26 20:25:50 +03:00
|
|
|
|
|
|
|
return self._post(f'/zones/{zone_id}/shares', data=data)
|
|
|
|
|
|
|
|
def list(self, zone, criterion=None, marker=None, limit=None):
|
|
|
|
zone_id = v2_utils.resolve_by_name(self.client.zones.list, zone)
|
|
|
|
url = self.build_url(f'/zones/{zone_id}/shares',
|
|
|
|
criterion, marker, limit)
|
|
|
|
|
|
|
|
return self._get(url, response_key='shared_zones')
|
|
|
|
|
|
|
|
def delete(self, zone, shared_zone_id):
|
|
|
|
zone_id = v2_utils.resolve_by_name(self.client.zones.list, zone)
|
|
|
|
|
|
|
|
return self._delete(f'/zones/{zone_id}/shares/{shared_zone_id}')
|
|
|
|
|
|
|
|
def get(self, zone, shared_zone_id):
|
|
|
|
zone_id = v2_utils.resolve_by_name(self.client.zones.list, zone)
|
|
|
|
|
|
|
|
return self._get(f'/zones/{zone_id}/shares/{shared_zone_id}')
|