(WIP) feat: support list and get server's metadata.
Support list metadata, or get metadata items. Change-Id: Ie0803defaef0ff9f4691011c1e807fc8f3be7143
This commit is contained in:
parent
68219061fd
commit
0f33b3e73b
|
@ -2536,7 +2536,7 @@ nova meta
|
|||
|
||||
usage: nova meta <server> <action> <key=value> [<key=value> ...]
|
||||
|
||||
Set or delete metadata on a server.
|
||||
Set, get, delete or list metadata on a server.
|
||||
|
||||
**Positional arguments:**
|
||||
|
||||
|
@ -2544,7 +2544,7 @@ Set or delete metadata on a server.
|
|||
Name or ID of server.
|
||||
|
||||
``<action>``
|
||||
Actions: 'set' or 'delete'.
|
||||
Actions: 'set', 'delete', 'get', 'list'.
|
||||
|
||||
``<key=value>``
|
||||
Metadata to set or delete (only key is necessary on delete).
|
||||
|
|
|
@ -2018,6 +2018,28 @@ class ServerManager(base.BootingManagerWithFind):
|
|||
'rotation': rotation}
|
||||
return self._action('createBackup', server, body)
|
||||
|
||||
def list_meta(self, server):
|
||||
"""
|
||||
Lists all metadata for a server.
|
||||
|
||||
:param server: The :class:`Server` (or its ID) to share onto.
|
||||
:returns: A dict of metadata.
|
||||
"""
|
||||
return self._get("/servers/%s/metadata" % base.getid(server))
|
||||
|
||||
def get_meta(self, server, keys):
|
||||
"""
|
||||
Shows details for a metadata item, by key, for a server.
|
||||
|
||||
:param server: The :class:`Server` to add metadata to
|
||||
:param keys: A list of metadata keys to delete from the server
|
||||
"""
|
||||
result = {'meta': {}}
|
||||
for k in keys:
|
||||
resp, body = self._get("/servers/%s/metadata/%s" % (base.getid(server), k))
|
||||
result['meta'].update(body.get('meta', {}))
|
||||
return result
|
||||
|
||||
def set_meta(self, server, metadata):
|
||||
"""
|
||||
Set a server's metadata
|
||||
|
|
|
@ -2523,17 +2523,20 @@ def do_backup(cs, args):
|
|||
@utils.arg(
|
||||
'action',
|
||||
metavar='<action>',
|
||||
choices=['set', 'delete'],
|
||||
help=_("Actions: 'set' or 'delete'."))
|
||||
choices=['set', 'delete', 'get', 'list'],
|
||||
help=_("Actions: 'set', 'delete', 'get', 'list'"))
|
||||
@utils.arg(
|
||||
'metadata',
|
||||
metavar='<key=value>',
|
||||
nargs='+',
|
||||
action='append',
|
||||
default=[],
|
||||
help=_('Metadata to set or delete (only key is necessary on delete).'))
|
||||
help=_('Metadata to perform action (set, delete, get or list): '
|
||||
'both key and value are required on set; '
|
||||
'only key is necessary on get or delele; '
|
||||
'list does not require any metadata.'))
|
||||
def do_meta(cs, args):
|
||||
"""Set or delete metadata on a server."""
|
||||
"""Set, get, delete or list metadata on a server."""
|
||||
server = _find_server(cs, args.server)
|
||||
metadata = _extract_metadata(args)
|
||||
|
||||
|
@ -2541,6 +2544,10 @@ def do_meta(cs, args):
|
|||
cs.servers.set_meta(server, metadata)
|
||||
elif args.action == 'delete':
|
||||
cs.servers.delete_meta(server, sorted(metadata.keys(), reverse=True))
|
||||
elif args.action == 'get':
|
||||
cs.servers.get_meta(server, sorted(metadata.keys(), reverse=True))
|
||||
elif args.action == 'list':
|
||||
cs.servers.list_meta(server)
|
||||
|
||||
|
||||
def _print_server(cs, args, server=None, wrap=0):
|
||||
|
|
Loading…
Reference in New Issue