diff --git a/setup.cfg b/setup.cfg index a8706c9c..b4b9cb46 100644 --- a/setup.cfg +++ b/setup.cfg @@ -77,6 +77,7 @@ openstack.messaging.v2 = messaging_flavor_delete = zaqarclient.queues.v2.cli:DeleteFlavor messaging_flavor_update = zaqarclient.queues.v2.cli:UpdateFlavor messaging_flavor_show = zaqarclient.queues.v2.cli:ShowFlavor + messaging_flavor_create = zaqarclient.queues.v2.cli:CreateFlavor openstack.cli.extension = messaging = zaqarclient.queues.cli diff --git a/zaqarclient/queues/v1/cli.py b/zaqarclient/queues/v1/cli.py index ff71032f..60fe0495 100644 --- a/zaqarclient/queues/v1/cli.py +++ b/zaqarclient/queues/v1/cli.py @@ -459,7 +459,8 @@ class CreateFlavor(show.ShowOne): metavar="", type=json.loads, default={}, - help="Describes flavor-specific capabilities") + help="Describes flavor-specific capabilities, " + "This option is only available in client api version < 2 .") return parser def take_action(self, parsed_args): diff --git a/zaqarclient/queues/v1/flavor.py b/zaqarclient/queues/v1/flavor.py index 0b69bc27..3671a000 100644 --- a/zaqarclient/queues/v1/flavor.py +++ b/zaqarclient/queues/v1/flavor.py @@ -46,8 +46,9 @@ class Flavor(object): self.capabilities = flavor.get("capabilities", {}) except errors.ResourceNotFound: - data = {'pool': self.pool, - 'capabilities': self.capabilities} + data = {'pool': self.pool} + if self.client.api_version <= 1.1: + data['capabilities'] = self.capabilities req, trans = self.client._request_and_transport() core.flavor_create(trans, req, self.name, data) diff --git a/zaqarclient/queues/v2/cli.py b/zaqarclient/queues/v2/cli.py index 7e7b03e2..0448cac2 100644 --- a/zaqarclient/queues/v2/cli.py +++ b/zaqarclient/queues/v2/cli.py @@ -14,6 +14,8 @@ from zaqarclient.queues.v1 import cli +from openstackclient.common import utils + class CreateQueue(cli.CreateQueue): """Create a queue""" @@ -73,3 +75,27 @@ class ShowFlavor(cli.ShowFlavor): class UpdateFlavor(cli.UpdateFlavor): """Update a flavor's attributes""" pass + + +class CreateFlavor(cli.CreateFlavor): + """Create a pool flavor""" + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)" % parsed_args) + + client = self.app.client_manager.messaging + + # FIXME(flwang): For now, we still use `pool` though it's not really + # correct since it's representing `pool_group` actually. But given we + # will remove pool group soon and get a 1:n mapping for flavor:pool, + # so let's keep it as it's, just for now. + kwargs = {} + if parsed_args.capabilities != {}: + raise AttributeError("<--capabilities> option is only\ + available in client api version < 2") + data = client.flavor(parsed_args.flavor_name, + pool=parsed_args.pool_group, + **kwargs) + + columns = ('Name', 'Pool', 'Capabilities') + return columns, utils.get_item_properties(data, columns)