diff options
author | Jenkins <jenkins@review.openstack.org> | 2016-04-06 16:58:08 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2016-04-06 16:58:09 +0000 |
commit | a9385ac8f55560e73ab5d35e95b5c4c143474c26 (patch) | |
tree | d6fc0bb81e602ec7728c07e8d18b2ad26afb030a /designateclient/v2 | |
parent | ead5a2e2246f75bb482bd187b2e9fe5695a3bdbb (diff) | |
parent | d2b88c88c529176db0f3c900ddb411d770fd1277 (diff) | |
download | python-designateclient-a9385ac8f55560e73ab5d35e95b5c4c143474c26.tar.gz |
Merge "Implement zone import"
Diffstat (limited to 'designateclient/v2')
-rw-r--r-- | designateclient/v2/cli/zones.py | 97 | ||||
-rw-r--r-- | designateclient/v2/zones.py | 13 |
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) |