summaryrefslogtreecommitdiff
path: root/designateclient/v2
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-04-06 16:58:08 +0000
committerGerrit Code Review <review@openstack.org>2016-04-06 16:58:09 +0000
commita9385ac8f55560e73ab5d35e95b5c4c143474c26 (patch)
treed6fc0bb81e602ec7728c07e8d18b2ad26afb030a /designateclient/v2
parentead5a2e2246f75bb482bd187b2e9fe5695a3bdbb (diff)
parentd2b88c88c529176db0f3c900ddb411d770fd1277 (diff)
downloadpython-designateclient-a9385ac8f55560e73ab5d35e95b5c4c143474c26.tar.gz
Merge "Implement zone import"
Diffstat (limited to 'designateclient/v2')
-rw-r--r--designateclient/v2/cli/zones.py97
-rw-r--r--designateclient/v2/zones.py13
2 files changed, 109 insertions, 1 deletions
diff --git a/designateclient/v2/cli/zones.py b/designateclient/v2/cli/zones.py
index 7f49671..234d910 100644
--- a/designateclient/v2/cli/zones.py
+++ b/designateclient/v2/cli/zones.py
@@ -37,6 +37,10 @@ def _format_zone_export_record(zone_export_record):
zone_export_record.pop('links', None)
+def _format_zone_import_record(zone_import_record):
+ zone_import_record.pop('links', None)
+
+
class ListZonesCommand(lister.Lister):
"""List zones"""
@@ -501,3 +505,96 @@ class ShowZoneExportFileCommand(show.ShowOne):
data = client.zone_exports.get_export(parsed_args.zone_export_id)
return ['data'], [data]
+
+
+class ImportZoneCommand(show.ShowOne):
+ """Import a Zone from a file on the filesystem"""
+
+ def get_parser(self, prog_name):
+ parser = super(ImportZoneCommand, self).get_parser(
+ prog_name)
+
+ parser.add_argument('zone_file_path',
+ help="Path to a zone file", type=str)
+
+ return parser
+
+ def take_action(self, parsed_args):
+ client = self.app.client_manager.dns
+
+ with open(parsed_args.zone_file_path, 'r') as f:
+ zone_file_contents = f.read()
+
+ data = client.zone_imports.create(zone_file_contents)
+ _format_zone_import_record(data)
+
+ LOG.info('Zone Import %s was created', data['id'])
+
+ return six.moves.zip(*sorted(six.iteritems(data)))
+
+
+class ListZoneImportsCommand(lister.Lister):
+ """List Zone Imports"""
+
+ columns = [
+ 'id',
+ 'zone_id',
+ 'created_at',
+ 'status',
+ 'message',
+ ]
+
+ def get_parser(self, prog_name):
+ parser = super(ListZoneImportsCommand, self).get_parser(
+ prog_name)
+
+ return parser
+
+ def take_action(self, parsed_args):
+ client = self.app.client_manager.dns
+
+ data = client.zone_imports.list()
+
+ cols = self.columns
+ return cols, (utils.get_item_properties(s, cols)
+ for s in data['imports'])
+
+
+class ShowZoneImportCommand(show.ShowOne):
+ """Show a Zone Import"""
+
+ def get_parser(self, prog_name):
+ parser = super(ShowZoneImportCommand, self).get_parser(
+ prog_name)
+
+ parser.add_argument('zone_import_id', help="Zone Import ID", type=str)
+
+ return parser
+
+ def take_action(self, parsed_args):
+ client = self.app.client_manager.dns
+
+ data = client.zone_imports.get_import_record(
+ parsed_args.zone_import_id)
+ _format_zone_import_record(data)
+
+ return six.moves.zip(*sorted(six.iteritems(data)))
+
+
+class DeleteZoneImportCommand(command.Command):
+ """Delete a Zone Import"""
+
+ def get_parser(self, prog_name):
+ parser = super(DeleteZoneImportCommand, self).get_parser(
+ prog_name)
+
+ parser.add_argument('zone_import_id', help="Zone Import ID", type=str)
+
+ return parser
+
+ def take_action(self, parsed_args):
+ client = self.app.client_manager.dns
+
+ client.zone_imports.delete(parsed_args.zone_import_id)
+
+ LOG.info('Zone Import %s was deleted', parsed_args.zone_import_id)
diff --git a/designateclient/v2/zones.py b/designateclient/v2/zones.py
index 8c200c8..fa9abad 100644
--- a/designateclient/v2/zones.py
+++ b/designateclient/v2/zones.py
@@ -147,4 +147,15 @@ class ZoneExportsController(V2Controller):
class ZoneImportsController(V2Controller):
- pass
+ 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):
+ return self._get('/zones/tasks/imports/%s' % zone_import_id)
+
+ def list(self):
+ return self._get('/zones/tasks/imports')
+
+ def delete(self, zone_import_id):
+ return self._delete('/zones/tasks/imports/%s' % zone_import_id)