Merge "CLI support for queue existence and metadata operations"

This commit is contained in:
Jenkins
2014-09-16 16:25:33 +00:00
committed by Gerrit Code Review
3 changed files with 159 additions and 23 deletions

View File

@@ -46,8 +46,12 @@ zaqarclient.api =
openstack.queuing.v1 = openstack.queuing.v1 =
queue_list = zaqarclient.queues.v1.cli:ListQueues queue_list = zaqarclient.queues.v1.cli:ListQueues
queue_create = zaqarclient.queues.v1.cli:CreateQueues queue_create = zaqarclient.queues.v1.cli:CreateQueue
queue_delete = zaqarclient.queues.v1.cli:DeleteQueues queue_delete = zaqarclient.queues.v1.cli:DeleteQueue
queue_exists = zaqarclient.queues.v1.cli:CheckQueueExistence
queue_set_metadata = zaqarclient.queues.v1.cli:SetQueueMetadata
queue_get_metadata = zaqarclient.queues.v1.cli:GetQueueMetadata
queue_stats = zaqarclient.queues.v1.cli:GetQueueStats
openstack.cli.extension = openstack.cli.extension =
queuing = zaqarclient.queues.cli queuing = zaqarclient.queues.cli

View File

@@ -12,8 +12,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
import json
import logging import logging
import six
from cliff import command from cliff import command
from cliff import lister from cliff import lister
@@ -22,16 +22,16 @@ from cliff import show
from openstackclient.common import utils from openstackclient.common import utils
class CreateQueues(show.ShowOne): class CreateQueue(show.ShowOne):
"""List available queues.""" """Create a queue."""
log = logging.getLogger(__name__ + ".CreateQueues") log = logging.getLogger(__name__ + ".CreateQueue")
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super(CreateQueues, self).get_parser(prog_name) parser = super(CreateQueue, self).get_parser(prog_name)
parser.add_argument( parser.add_argument(
"name", "queue_name",
metavar="<name>", metavar="<queue_name>",
help="Name of the queue") help="Name of the queue")
return parser return parser
@@ -40,29 +40,34 @@ class CreateQueues(show.ShowOne):
client = self.app.client_manager.queuing client = self.app.client_manager.queuing
name = parsed_args.name queue_name = parsed_args.queue_name
client.queue(name) data = client.queue(queue_name)
return zip(*sorted(six.iteritems({"name": name}))) columns = ('Name',)
properties = ("_Name",)
return columns, utils.get_item_properties(data, properties)
class DeleteQueues(command.Command): class DeleteQueue(command.Command):
"""List available queues.""" """Delete a queue."""
log = logging.getLogger(__name__ + ".DeleteQueues") log = logging.getLogger(__name__ + ".DeleteQueue")
def get_parser(self, prog_name): def get_parser(self, prog_name):
parser = super(DeleteQueues, self).get_parser(prog_name) parser = super(DeleteQueue, self).get_parser(prog_name)
parser.add_argument( parser.add_argument(
"name", "queue_name",
metavar="<name>", metavar="<queue_name>",
help="Name of the queue") help="Name of the queue")
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
self.log.debug("take_action(%s)" % parsed_args) self.log.debug("take_action(%s)" % parsed_args)
client = self.app.client_manager.queuing client = self.app.client_manager.queuing
client.queue(parsed_args.name).delete()
queue_name = parsed_args.queue_name
client.queue(queue_name).delete()
class ListQueues(lister.Lister): class ListQueues(lister.Lister):
@@ -95,6 +100,130 @@ class ListQueues(lister.Lister):
kwargs["limit"] = parsed_args.limit kwargs["limit"] = parsed_args.limit
data = client.queues(**kwargs) data = client.queues(**kwargs)
columns = ["_Name"] columns = ("Name", )
properties = ("_Name",)
return (columns,
(utils.get_item_properties(s, properties) for s in data))
return (columns, (utils.get_item_properties(s, columns) for s in data))
class CheckQueueExistence(show.ShowOne):
"""Check queue existence."""
log = logging.getLogger(__name__ + ".CheckQueueExistence")
def get_parser(self, prog_name):
parser = super(CheckQueueExistence, self).get_parser(prog_name)
parser.add_argument(
"queue_name",
metavar="<queue_name>",
help="Name of the queue")
return parser
def take_action(self, parsed_args):
self.log.debug("take_action(%s)" % parsed_args)
client = self.app.client_manager.queuing
queue_name = parsed_args.queue_name
queue = client.queue(queue_name, auto_create=False)
columns = ('Exists',)
data = dict(exists=queue.exists())
return columns, utils.get_dict_properties(data, columns)
class SetQueueMetadata(command.Command):
"""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="<queue_name>",
help="Name of the queue")
parser.add_argument(
"queue_metadata",
metavar="<queue_metadata>",
help="Queue metadata")
return parser
def take_action(self, parsed_args):
self.log.debug("take_action(%s)" % parsed_args)
client = self.app.client_manager.queuing
queue_name = parsed_args.queue_name
queue_metadata = parsed_args.queue_metadata
queue_exists = client.queue(queue_name, auto_create=False).exists()
if not queue_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(show.ShowOne):
"""Get queue metadata."""
log = logging.getLogger(__name__ + ".GetQueueMetadata")
def get_parser(self, prog_name):
parser = super(GetQueueMetadata, self).get_parser(prog_name)
parser.add_argument(
"queue_name",
metavar="<queue_name>",
help="Name of the queue")
return parser
def take_action(self, parsed_args):
self.log.debug("take_action(%s)" % parsed_args)
client = self.app.client_manager.queuing
queue_name = parsed_args.queue_name
queue = client.queue(queue_name, auto_create=False)
if not queue.exists():
raise RuntimeError("Queue(%s) does not exist." % queue_name)
columns = ("Metadata",)
data = dict(metadata=queue.metadata())
return columns, utils.get_dict_properties(data, columns)
class GetQueueStats(show.ShowOne):
"""Get queue stats."""
log = logging.getLogger(__name__ + ".GetQueueStats")
def get_parser(self, prog_name):
parser = super(GetQueueStats, self).get_parser(prog_name)
parser.add_argument(
"queue_name",
metavar="<queue_name>",
help="Name of the queue")
return parser
def take_action(self, parsed_args):
self.log.debug("take_action(%s)" % parsed_args)
client = self.app.client_manager.queuing
queue_name = parsed_args.queue_name
queue = client.queue(queue_name, auto_create=False)
if not queue.exists():
raise RuntimeError('Queue(%s) does not exist.' % queue_name)
columns = ("Stats",)
data = dict(stats=queue.stats)
return columns, utils.get_dict_properties(data, columns)

View File

@@ -52,7 +52,8 @@ class Queue(object):
:param new_meta: A dictionary containing :param new_meta: A dictionary containing
an updated metadata object. If present an updated metadata object. If present
the queue metadata will be updated in the queue metadata will be updated in
remote server. remote server. If the new_meta is empty,
the metadata object will be cleared.
:type new_meta: `dict` :type new_meta: `dict`
:param force_reload: Whether to ignored the :param force_reload: Whether to ignored the
cached metadata and reload it from the cached metadata and reload it from the
@@ -63,7 +64,9 @@ class Queue(object):
""" """
req, trans = self.client._request_and_transport() req, trans = self.client._request_and_transport()
if new_meta: # NOTE(jeffrey4l): Ensure that metadata is cleared when the new_meta
# is a empty dict.
if new_meta is not None:
core.queue_set_metadata(trans, req, self._name, new_meta) core.queue_set_metadata(trans, req, self._name, new_meta)
self._metadata = new_meta self._metadata = new_meta