Merge "Add nvp queue support to client"
This commit is contained in:
90
quantumclient/quantum/v2_0/nvp_qos_queue.py
Normal file
90
quantumclient/quantum/v2_0/nvp_qos_queue.py
Normal file
@@ -0,0 +1,90 @@
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright 2013 Nicira Inc.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import logging
|
||||
|
||||
from quantumclient.quantum import v2_0 as quantumv20
|
||||
|
||||
|
||||
class ListQoSQueue(quantumv20.ListCommand):
|
||||
"""List queues that belong to a given tenant."""
|
||||
|
||||
resource = 'qos_queue'
|
||||
log = logging.getLogger(__name__ + '.ListQoSQueue')
|
||||
_formatters = {}
|
||||
list_columns = ['id', 'name', 'min', 'max',
|
||||
'qos_marking', 'dscp', 'default']
|
||||
|
||||
|
||||
class ShowQoSQueue(quantumv20.ShowCommand):
|
||||
"""Show information of a given queue."""
|
||||
|
||||
resource = 'qos_queue'
|
||||
log = logging.getLogger(__name__ + '.ShowQoSQueue')
|
||||
allow_names = True
|
||||
|
||||
|
||||
class CreateQoSQueue(quantumv20.CreateCommand):
|
||||
"""Create a queue."""
|
||||
|
||||
resource = 'qos_queue'
|
||||
log = logging.getLogger(__name__ + '.CreateQoSQueue')
|
||||
|
||||
def add_known_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'name', metavar='NAME',
|
||||
help='Name of queue')
|
||||
parser.add_argument(
|
||||
'--min',
|
||||
help='min-rate'),
|
||||
parser.add_argument(
|
||||
'--max',
|
||||
help='max-rate'),
|
||||
parser.add_argument(
|
||||
'--qos-marking',
|
||||
help='qos marking untrusted/trusted'),
|
||||
parser.add_argument(
|
||||
'--default',
|
||||
default=False,
|
||||
help=('If true all ports created with be the size of this queue'
|
||||
' if queue is not specified')),
|
||||
parser.add_argument(
|
||||
'--dscp',
|
||||
help='Differentiated Services Code Point'),
|
||||
|
||||
def args2body(self, parsed_args):
|
||||
params = {'name': parsed_args.name,
|
||||
'default': parsed_args.default}
|
||||
if parsed_args.min:
|
||||
params['min'] = parsed_args.min
|
||||
if parsed_args.max:
|
||||
params['max'] = parsed_args.max
|
||||
if parsed_args.qos_marking:
|
||||
params['qos_marking'] = parsed_args.qos_marking
|
||||
if parsed_args.dscp:
|
||||
params['dscp'] = parsed_args.dscp
|
||||
if parsed_args.tenant_id:
|
||||
params['tenant_id'] = parsed_args.tenant_id
|
||||
return {'qos_queue': params}
|
||||
|
||||
|
||||
class DeleteQoSQueue(quantumv20.DeleteCommand):
|
||||
"""Delete a given queue."""
|
||||
|
||||
log = logging.getLogger(__name__ + '.DeleteQoSQueue')
|
||||
resource = 'qos_queue'
|
||||
allow_names = True
|
||||
@@ -191,6 +191,14 @@ COMMAND_V2 = {
|
||||
'lb-healthmonitor-disassociate': utils.import_class(
|
||||
'quantumclient.quantum.v2_0.lb.healthmonitor'
|
||||
'.DisassociateHealthMonitor'),
|
||||
'queue-create': utils.import_class(
|
||||
'quantumclient.quantum.v2_0.nvp_qos_queue.CreateQoSQueue'),
|
||||
'queue-delete': utils.import_class(
|
||||
'quantumclient.quantum.v2_0.nvp_qos_queue.DeleteQoSQueue'),
|
||||
'queue-show': utils.import_class(
|
||||
'quantumclient.quantum.v2_0.nvp_qos_queue.ShowQoSQueue'),
|
||||
'queue-list': utils.import_class(
|
||||
'quantumclient.quantum.v2_0.nvp_qos_queue.ListQoSQueue'),
|
||||
}
|
||||
|
||||
COMMANDS = {'2.0': COMMAND_V2}
|
||||
|
||||
@@ -141,7 +141,7 @@ class CLITestV20Base(testtools.TestCase):
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
||||
non_admin_status_resources = ['subnet', 'floatingip', 'security_group',
|
||||
'security_group_rule']
|
||||
'security_group_rule', 'qos_queue']
|
||||
if (resource in non_admin_status_resources):
|
||||
body = {resource: {}, }
|
||||
else:
|
||||
|
||||
80
quantumclient/tests/unit/test_cli20_nvp_queue.py
Normal file
80
quantumclient/tests/unit/test_cli20_nvp_queue.py
Normal file
@@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env python
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
# Copyright 2013 Nicira Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import sys
|
||||
|
||||
from quantumclient.quantum.v2_0 import nvp_qos_queue as qos
|
||||
from quantumclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20NvpQosQueue(test_cli20.CLITestV20Base):
|
||||
def test_create_qos_queue(self):
|
||||
"""Create a qos queue."""
|
||||
resource = 'qos_queue'
|
||||
cmd = qos.CreateQoSQueue(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
name = 'my_queue'
|
||||
default = False
|
||||
args = ['--default', default, name]
|
||||
position_names = ['name', 'default']
|
||||
position_values = [name, default]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_qos_queue_all_values(self):
|
||||
"""Create a qos queue."""
|
||||
resource = 'qos_queue'
|
||||
cmd = qos.CreateQoSQueue(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
name = 'my_queue'
|
||||
default = False
|
||||
min = '10'
|
||||
max = '40'
|
||||
qos_marking = 'untrusted'
|
||||
dscp = '0'
|
||||
args = ['--default', default, '--min', min, '--max', max,
|
||||
'--qos-marking', qos_marking, '--dscp', dscp, name]
|
||||
position_names = ['name', 'default', 'min', 'max', 'qos_marking',
|
||||
'dscp']
|
||||
position_values = [name, default, min, max, qos_marking, dscp]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_list_qos_queue(self):
|
||||
resources = "qos_queues"
|
||||
cmd = qos.ListQoSQueue(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_show_qos_queue_id(self):
|
||||
resource = 'qos_queue'
|
||||
cmd = qos.ShowQoSQueue(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id'])
|
||||
|
||||
def test_delete_qos_queue(self):
|
||||
resource = 'qos_queue'
|
||||
cmd = qos.DeleteQoSQueue(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
||||
@@ -170,6 +170,8 @@ class Client(object):
|
||||
associate_pool_health_monitors_path = "/lb/pools/%s/health_monitors"
|
||||
disassociate_pool_health_monitors_path = (
|
||||
"/lb/pools/%(pool)s/health_monitors/%(health_monitor)s")
|
||||
qos_queues_path = "/qos-queues"
|
||||
qos_queue_path = "/qos-queues/%s"
|
||||
|
||||
# API has no way to report plurals, so we have to hard code them
|
||||
EXTED_PLURALS = {'routers': 'router',
|
||||
@@ -673,6 +675,35 @@ class Client(object):
|
||||
{'pool': pool, 'health_monitor': health_monitor})
|
||||
return self.delete(path)
|
||||
|
||||
@APIParamsCall
|
||||
def create_qos_queue(self, body=None):
|
||||
"""
|
||||
Creates a new queue
|
||||
"""
|
||||
return self.post(self.qos_queues_path, body=body)
|
||||
|
||||
@APIParamsCall
|
||||
def list_qos_queues(self, **_params):
|
||||
"""
|
||||
Fetches a list of all queues for a tenant
|
||||
"""
|
||||
return self.get(self.qos_queues_path, params=_params)
|
||||
|
||||
@APIParamsCall
|
||||
def show_qos_queue(self, queue, **_params):
|
||||
"""
|
||||
Fetches information of a certain queue
|
||||
"""
|
||||
return self.get(self.qos_queue_path % (queue),
|
||||
params=_params)
|
||||
|
||||
@APIParamsCall
|
||||
def delete_qos_queue(self, queue):
|
||||
"""
|
||||
Deletes the specified queue
|
||||
"""
|
||||
return self.delete(self.qos_queue_path % (queue))
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
""" Initialize a new client for the Quantum v2.0 API. """
|
||||
super(Client, self).__init__()
|
||||
|
||||
Reference in New Issue
Block a user