Support CLI updating of domains/records/servers.

Updates to all resource types should now be functional.

Change-Id: I9057ebd4ebffdeeb70c0c9b962c49b3dcb68d8f4
This commit is contained in:
Kiall Mac Innes 2012-12-14 13:04:30 -08:00
parent f4537b64c5
commit 145a7275f3
4 changed files with 54 additions and 25 deletions

@ -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)

@ -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)

@ -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)

@ -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: