From 1349227339897d393aebf02567fe16c158b439d0 Mon Sep 17 00:00:00 2001 From: Cedric Brandily Date: Wed, 15 Apr 2015 14:57:43 +0200 Subject: [PATCH] Allow relative names in record-create Currently record-create requires absolute names. This change allows to provide relative (to the domain) names with the new option --relative. Change-Id: I78258ea734a4105fae8f9f3ef30fe86e018b5388 Closes-Bug: #1444452 --- designateclient/cli/records.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/designateclient/cli/records.py b/designateclient/cli/records.py index 9e94137..e05103c 100644 --- a/designateclient/cli/records.py +++ b/designateclient/cli/records.py @@ -64,7 +64,8 @@ class CreateRecordCommand(base.CreateCommand): parser = super(CreateRecordCommand, self).get_parser(prog_name) parser.add_argument('domain_id', help="Domain ID or Name") - parser.add_argument('--name', help="Record Name", required=True) + parser.add_argument( + '--name', help="Record (relative|absolute) Name", required=True) parser.add_argument('--type', help="Record Type", required=True) parser.add_argument('--data', help="Record Data", required=True) parser.add_argument('--ttl', type=int, help="Record TTL") @@ -74,6 +75,22 @@ class CreateRecordCommand(base.CreateCommand): return parser def execute(self, parsed_args): + domain_id = self.find_resourceid_by_name_or_id( + 'domains', parsed_args.domain_id) + + if not parsed_args.name.endswith('.'): + # Relative name? + domain_name = self.client.domains.get(domain_id)['name'] + absolute = parsed_args.name + '.' + relative = absolute + domain_name + if absolute.endswith('.' + domain_name): + # Relative name or absolute name missing final period? + msg = ('"%s" is a relative name but looks like an absolute ' + 'name, use --name "%s" or "%s"' + % (parsed_args.name, absolute, relative)) + raise ValueError(msg) + parsed_args.name = relative + record = Record( name=parsed_args.name, type=parsed_args.type, @@ -89,8 +106,6 @@ class CreateRecordCommand(base.CreateCommand): if parsed_args.description: record.description = parsed_args.description - domain_id = self.find_resourceid_by_name_or_id( - 'domains', parsed_args.domain_id) return self.client.records.create(domain_id, record)