From 145a7275f351d6399c4642b453cfb773f35a1d6e Mon Sep 17 00:00:00 2001 From: Kiall Mac Innes Date: Fri, 14 Dec 2012 13:04:30 -0800 Subject: [PATCH] Support CLI updating of domains/records/servers. Updates to all resource types should now be functional. Change-Id: I9057ebd4ebffdeeb70c0c9b962c49b3dcb68d8f4 --- monikerclient/cli/domains.py | 17 +++++++++++------ monikerclient/cli/records.py | 31 +++++++++++++++++++++---------- monikerclient/cli/servers.py | 29 ++++++++++++++++++++--------- monikerclient/warlock.py | 2 ++ 4 files changed, 54 insertions(+), 25 deletions(-) diff --git a/monikerclient/cli/domains.py b/monikerclient/cli/domains.py index 3013f1a..152705d 100644 --- a/monikerclient/cli/domains.py +++ b/monikerclient/cli/domains.py @@ -49,6 +49,7 @@ class CreateDomainCommand(base.CreateCommand): parser.add_argument('--name', help="Domain Name", required=True) parser.add_argument('--email', help="Domain Email", required=True) + parser.add_argument('--ttl', type=int, help="Time To Live (Seconds)") return parser @@ -56,6 +57,7 @@ class CreateDomainCommand(base.CreateCommand): domain = Domain( name=parsed_args.name, email=parsed_args.email, + ttl=parsed_args.ttl, ) return self.client.domains.create(domain) @@ -70,6 +72,7 @@ class UpdateDomainCommand(base.UpdateCommand): parser.add_argument('id', help="Domain ID") parser.add_argument('--name', help="Domain Name") parser.add_argument('--email', help="Domain Email") + parser.add_argument('--ttl', help="Time To Live (Seconds)") return parser @@ -77,12 +80,14 @@ class UpdateDomainCommand(base.UpdateCommand): # TODO: API needs updating.. this get is silly domain = self.client.domains.get(parsed_args.id) - # TODO: How do we tell if an arg was supplied or intentionally set to - # None? - domain.update({ - 'name': parsed_args.name, - 'email': parsed_args.email, - }) + if parsed_args.name: + domain.name = parsed_args.name + + if parsed_args.email: + domain.email = parsed_args.email + + if parsed_args.ttl: + domain.ttl = parsed_args.ttl return self.client.domains.update(domain) diff --git a/monikerclient/cli/records.py b/monikerclient/cli/records.py index d3bc41e..8cd7935 100644 --- a/monikerclient/cli/records.py +++ b/monikerclient/cli/records.py @@ -68,9 +68,11 @@ class CreateRecordCommand(base.CreateCommand): name=parsed_args.name, type=parsed_args.type, data=parsed_args.data, - ttl=parsed_args.ttl, ) + if parsed_args.ttl: + record.ttl = parsed_args.ttl + return self.client.records.create(parsed_args.domain_id, record) @@ -85,7 +87,11 @@ class UpdateRecordCommand(base.UpdateCommand): parser.add_argument('--name', help="Record Name") parser.add_argument('--type', help="Record Type") parser.add_argument('--data', help="Record Data") - parser.add_argument('--ttl', type=int, help="Record TTL") + + ttl_group = parser.add_mutually_exclusive_group() + ttl_group.add_argument('--ttl', type=int, + help="Record Time To Live (Seconds)") + ttl_group.add_argument('--no-ttl', action='store_true') return parser @@ -93,14 +99,19 @@ class UpdateRecordCommand(base.UpdateCommand): # TODO: API needs updating.. this get is silly record = self.client.records.get(parsed_args.domain_id, parsed_args.id) - # TODO: How do we tell if an arg was supplied or intentionally set to - # None? - record.update({ - 'name': parsed_args.name, - 'type': parsed_args.type, - 'data': parsed_args.data, - 'ttl': parsed_args.ttl, - }) + if parsed_args.name: + record.name = parsed_args.name + + if parsed_args.type: + record.type = parsed_args.type + + if parsed_args.data: + record.data = parsed_args.data + + if parsed_args.no_ttl: + record.ttl = None + elif parsed_args.ttl: + record.ttl = parsed_args.ttl return self.client.records.update(parsed_args.domain_id, record) diff --git a/monikerclient/cli/servers.py b/monikerclient/cli/servers.py index 39f9fdc..3e9f03c 100644 --- a/monikerclient/cli/servers.py +++ b/monikerclient/cli/servers.py @@ -71,8 +71,14 @@ class UpdateServerCommand(base.UpdateCommand): parser.add_argument('id', help="Server ID") parser.add_argument('--name', help="Server Name") - parser.add_argument('--ipv4', help="Server IPv4 Address") - parser.add_argument('--ipv6', help="Server IPv6 Address") + + ipv4_group = parser.add_mutually_exclusive_group() + ipv4_group.add_argument('--ipv4', help="Server IPv4 Address") + ipv4_group.add_argument('--no-ipv4', action='store_true') + + ipv6_group = parser.add_mutually_exclusive_group() + ipv6_group.add_argument('--ipv6', help="Server IPv6 Address") + ipv6_group.add_argument('--no-ipv6', action='store_true') return parser @@ -80,13 +86,18 @@ class UpdateServerCommand(base.UpdateCommand): # TODO: API needs updating.. this get is silly server = self.client.servers.get(parsed_args.id) - # TODO: How do we tell if an arg was supplied or intentionally set to - # None? - server.update({ - 'name': parsed_args.name, - 'ipv4': parsed_args.ipv4, - 'ipv6': parsed_args.ipv6, - }) + if parsed_args.name: + server.name = parsed_args.name + + if parsed_args.no_ipv4: + server.ipv4 = None + elif parsed_args.ipv4: + server.ipv4 = parsed_args.ipv4 + + if parsed_args.no_ipv6: + server.ipv6 = None + elif parsed_args.ipv6: + server.ipv6 = parsed_args.ipv6 return self.client.servers.update(server) diff --git a/monikerclient/warlock.py b/monikerclient/warlock.py index c0337a0..3166a3f 100644 --- a/monikerclient/warlock.py +++ b/monikerclient/warlock.py @@ -99,6 +99,8 @@ def model_factory(schema): return copy.deepcopy(dict(self)) def update(self, other): + # NOTE(kiall): It seems update() doesn't update the + # self.__dict__['changes'] dict correctly. mutation = dict(self.items()) mutation.update(other) try: