diff --git a/doc/source/command/queue.rst b/doc/source/command/queue.rst index cd483086..a6ae2f5b 100644 --- a/doc/source/command/queue.rst +++ b/doc/source/command/queue.rst @@ -112,7 +112,8 @@ openstack queue set metadata usage: openstack queue set metadata [-h] -Set queue metadata. +Set queue metadata.All the metadata of the queue will be replaced by +queue_metadata. **Positional arguments:** diff --git a/zaqarclient/queues/v2/cli.py b/zaqarclient/queues/v2/cli.py index b35b80b2..80e48870 100644 --- a/zaqarclient/queues/v2/cli.py +++ b/zaqarclient/queues/v2/cli.py @@ -48,9 +48,41 @@ class GetQueueStats(cli.GetQueueStats): pass -class SetQueueMetadata(cli.SetQueueMetadata): +class SetQueueMetadata(command.Command): """Set queue metadata""" - pass + + _description = _("Set queue metadata") + log = logging.getLogger(__name__ + ".SetQueueMetadata") + + def get_parser(self, prog_name): + parser = super(SetQueueMetadata, self).get_parser(prog_name) + parser.add_argument( + "queue_name", + metavar="", + help="Name of the queue") + parser.add_argument( + "queue_metadata", + metavar="", + help="Queue metadata, All the metadata of " + "the queue will be replaced by queue_metadata") + return parser + + def take_action(self, parsed_args): + client = _get_client(self, parsed_args) + queue_name = parsed_args.queue_name + queue_metadata = parsed_args.queue_metadata + if (client.api_version == 1 and + not client.queue(queue_name, auto_create=False).exists()): + raise RuntimeError("Queue(%s) does not exist." % queue_name) + + try: + valid_metadata = json.loads(queue_metadata) + except ValueError: + raise RuntimeError("Queue metadata(%s) is not a valid json." % + queue_metadata) + + client.queue(queue_name, auto_create=False).\ + metadata(new_meta=valid_metadata) class GetQueueMetadata(cli.GetQueueMetadata):