from neutron.plugins.nicira.dbexts import maclearning as mac_db
from neutron.plugins.nicira.dbexts import nicira_db
from neutron.plugins.nicira.dbexts import nicira_networkgw_db as networkgw_db
-from neutron.plugins.nicira.dbexts import nicira_qos_db as qos_db
+from neutron.plugins.nicira.dbexts import qos_db
from neutron.plugins.nicira import dhcpmeta_modes
from neutron.plugins.nicira.extensions import maclearning as mac_ext
from neutron.plugins.nicira.extensions import nvp_networkgw as networkgw
from neutron.plugins.nicira.extensions import nvp_qos as ext_qos
+from neutron.plugins.nicira.nsxlib import queue as queuelib
from neutron.plugins.nicira import NvpApiClient
from neutron.plugins.nicira import nvplib
def create_qos_queue(self, context, qos_queue, check_policy=True):
q = qos_queue.get('qos_queue')
self._validate_qos_queue(context, q)
- q['id'] = nvplib.create_lqueue(self.cluster,
- self._nvp_lqueue(q))
+ q['id'] = queuelib.create_lqueue(self.cluster, q)
return super(NvpPluginV2, self).create_qos_queue(context, qos_queue)
- def delete_qos_queue(self, context, id, raise_in_use=True):
- filters = {'queue_id': [id]}
+ def delete_qos_queue(self, context, queue_id, raise_in_use=True):
+ filters = {'queue_id': [queue_id]}
queues = self._get_port_queue_bindings(context, filters)
if queues:
if raise_in_use:
raise ext_qos.QueueInUseByPort()
else:
return
- nvplib.delete_lqueue(self.cluster, id)
- return super(NvpPluginV2, self).delete_qos_queue(context, id)
+ queuelib.delete_lqueue(self.cluster, queue_id)
+ return super(NvpPluginV2, self).delete_qos_queue(context, queue_id)
# License for the specific language governing permissions and limitations
# under the License.
+from neutron.api.v2.attributes import is_attr_set
from neutron.openstack.common import log
from neutron.version import version_info
def check_and_truncate(display_name):
- if display_name and len(display_name) > MAX_DISPLAY_NAME_LEN:
+ if is_attr_set(display_name) and len(display_name) > MAX_DISPLAY_NAME_LEN:
LOG.debug(_("Specified name:'%s' exceeds maximum length. "
"It will be truncated on NVP"), display_name)
return display_name[:MAX_DISPLAY_NAME_LEN]
# vim: tabstop=4 shiftwidth=4 softtabstop=4
#
-# Copyright 2013 Nicira Networks, Inc. All rights reserved.
+# Copyright 2013 VMware, 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
# License for the specific language governing permissions and limitations
# under the License.
#
-# @author: Aaron Rosen, Nicira, Inc
import sqlalchemy as sa
from sqlalchemy import orm
from neutron.db import models_v2
from neutron.openstack.common import log
from neutron.openstack.common import uuidutils
-from neutron.plugins.nicira.common import utils
from neutron.plugins.nicira.extensions import nvp_qos as ext_qos
context.session.add(qos_queue)
return self._make_qos_queue_dict(qos_queue)
- def get_qos_queue(self, context, id, fields=None):
+ def get_qos_queue(self, context, queue_id, fields=None):
return self._make_qos_queue_dict(
- self._get_qos_queue(context, id), fields)
+ self._get_qos_queue(context, queue_id), fields)
- def _get_qos_queue(self, context, id):
+ def _get_qos_queue(self, context, queue_id):
try:
- return self._get_by_id(context, QoSQueue, id)
+ return self._get_by_id(context, QoSQueue, queue_id)
except exc.NoResultFound:
- raise ext_qos.QueueNotFound(id=id)
+ raise ext_qos.QueueNotFound(id=queue_id)
def get_qos_queues(self, context, filters=None, fields=None):
return self._get_collection(context, QoSQueue,
self._make_qos_queue_dict,
filters=filters, fields=fields)
- def delete_qos_queue(self, context, id):
- qos_queue = self._get_qos_queue(context, id)
+ def delete_qos_queue(self, context, queue_id):
+ qos_queue = self._get_qos_queue(context, queue_id)
with context.session.begin(subtransactions=True):
context.session.delete(qos_queue)
# Max can be None
if max and min > max:
raise ext_qos.QueueMinGreaterMax()
-
- def _nvp_lqueue(self, queue):
- """Convert fields to nvp fields."""
- nvp_queue = {}
- params = {'name': 'display_name',
- 'qos_marking': 'qos_marking',
- 'min': 'min_bandwidth_rate',
- 'max': 'max_bandwidth_rate',
- 'dscp': 'dscp'}
- nvp_queue = dict(
- (nvp_name, queue.get(api_name))
- for api_name, nvp_name in params.iteritems()
- if attr.is_attr_set(queue.get(api_name))
- )
- if 'display_name' in nvp_queue:
- nvp_queue['display_name'] = utils.check_and_truncate(
- nvp_queue['display_name'])
- return nvp_queue
--- /dev/null
+# Copyright 2014 VMware, 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.
+
+from neutron.api.v2 import attributes as attr
+from neutron.common import exceptions as exception
+from neutron.openstack.common import excutils
+from neutron.openstack.common import jsonutils
+from neutron.openstack.common import log
+from neutron.plugins.nicira.common import utils
+from neutron.plugins.nicira import NvpApiClient
+from neutron.plugins.nicira.nvplib import _build_uri_path
+from neutron.plugins.nicira.nvplib import do_request
+
+HTTP_POST = "POST"
+HTTP_DELETE = "DELETE"
+
+LQUEUE_RESOURCE = "lqueue"
+
+LOG = log.getLogger(__name__)
+
+
+def create_lqueue(cluster, queue_data):
+ params = {
+ 'name': 'display_name',
+ 'qos_marking': 'qos_marking',
+ 'min': 'min_bandwidth_rate',
+ 'max': 'max_bandwidth_rate',
+ 'dscp': 'dscp'
+ }
+ queue_obj = dict(
+ (nvp_name, queue_data.get(api_name))
+ for api_name, nvp_name in params.iteritems()
+ if attr.is_attr_set(queue_data.get(api_name))
+ )
+ if 'display_name' in queue_obj:
+ queue_obj['display_name'] = utils.check_and_truncate(
+ queue_obj['display_name'])
+
+ queue_obj['tags'] = utils.get_tags()
+ try:
+ return do_request(HTTP_POST,
+ _build_uri_path(LQUEUE_RESOURCE),
+ jsonutils.dumps(queue_obj),
+ cluster=cluster)['uuid']
+ except NvpApiClient.NvpApiException:
+ # FIXME(salv-orlando): This should not raise NeutronException
+ with excutils.save_and_reraise_exception():
+ raise exception.NeutronException()
+
+
+def delete_lqueue(cluster, queue_id):
+ try:
+ do_request(HTTP_DELETE,
+ _build_uri_path(LQUEUE_RESOURCE,
+ resource_id=queue_id),
+ cluster=cluster)
+ except Exception:
+ # FIXME(salv-orlando): This should not raise NeutronException
+ with excutils.save_and_reraise_exception():
+ raise exception.NeutronException()
msg = _('NVP version is not set. Unable to complete request '
'correctly. Check log for NVP communication errors.')
raise NvpApiClient.ServiceUnavailable(message=msg)
-
-
-# -----------------------------------------------------------------------------
-# QOS API Calls
-# -----------------------------------------------------------------------------
-def create_lqueue(cluster, lqueue):
- uri = _build_uri_path(LQUEUE_RESOURCE)
- lqueue['tags'] = [{'tag': NEUTRON_VERSION, 'scope': 'quantum'}]
- try:
- return do_request(HTTP_POST, uri, json.dumps(lqueue),
- cluster=cluster)['uuid']
- except NvpApiClient.NvpApiException:
- # FIXME(salv-orlando): This should not raise QauntumException
- LOG.exception(_("Failed to create logical queue"))
- raise exception.NeutronException()
-
-
-def delete_lqueue(cluster, id):
- try:
- do_request(HTTP_DELETE, _build_uri_path(LQUEUE_RESOURCE,
- resource_id=id),
- cluster=cluster)
- except Exception:
- # FIXME(salv-orlando): This should not raise QauntumException
- LOG.exception(_("Failed to delete logical queue"))
- raise exception.NeutronException()
--- /dev/null
+# Copyright (c) 2014 VMware, Inc.
+#
+# 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 mock
+
+from neutron.common import exceptions
+from neutron.plugins.nicira.nsxlib import queue as queuelib
+from neutron.plugins.nicira import NvpApiClient
+from neutron.tests.unit.nicira.test_nvplib import NvplibTestCase
+
+
+class TestLogicalQueueLib(NvplibTestCase):
+
+ def setUp(self):
+ super(TestLogicalQueueLib, self).setUp()
+ self.fake_queue = {
+ 'name': 'fake_queue',
+ 'min': 0, 'max': 256,
+ 'dscp': 0, 'qos_marking': False
+ }
+
+ def test_create_and_get_lqueue(self):
+ queue_id = queuelib.create_lqueue(
+ self.fake_cluster, self.fake_queue)
+ queue_res = queuelib.do_request(
+ 'GET',
+ queuelib._build_uri_path('lqueue', resource_id=queue_id),
+ cluster=self.fake_cluster)
+ self.assertEqual(queue_id, queue_res['uuid'])
+ self.assertEqual('fake_queue', queue_res['display_name'])
+
+ def test_create_lqueue_nsx_error_raises(self):
+ def raise_nsx_exc(*args, **kwargs):
+ raise NvpApiClient.NvpApiException()
+
+ with mock.patch.object(queuelib, 'do_request', new=raise_nsx_exc):
+ self.assertRaises(
+ exceptions.NeutronException, queuelib.create_lqueue,
+ self.fake_cluster, self.fake_queue)
+
+ def test_delete_lqueue(self):
+ queue_id = queuelib.create_lqueue(
+ self.fake_cluster, self.fake_queue)
+ queuelib.delete_lqueue(self.fake_cluster, queue_id)
+ self.assertRaises(exceptions.NotFound,
+ queuelib.do_request,
+ 'GET',
+ queuelib._build_uri_path(
+ 'lqueue', resource_id=queue_id),
+ cluster=self.fake_cluster)
+
+ def test_delete_non_existing_lqueue_raises(self):
+ self.assertRaises(exceptions.NeutronException,
+ queuelib.delete_lqueue,
+ self.fake_cluster, 'whatever')
from neutron.plugins.nicira.common import exceptions as nvp_exc
from neutron.plugins.nicira.common import sync
from neutron.plugins.nicira.dbexts import nicira_db
-from neutron.plugins.nicira.dbexts import nicira_qos_db as qos_db
+from neutron.plugins.nicira.dbexts import qos_db
from neutron.plugins.nicira.extensions import distributedrouter as dist_router
from neutron.plugins.nicira.extensions import nvp_networkgw
from neutron.plugins.nicira.extensions import nvp_qos as ext_qos
from neutron.plugins.nicira import NeutronPlugin
+from neutron.plugins.nicira import nsxlib
from neutron.plugins.nicira import NvpApiClient
from neutron.plugins.nicira.NvpApiClient import NVPVersion
from neutron.plugins.nicira import nvplib
return []
-class TestNiciraQoSQueue(NiciraPluginV2TestCase):
+class TestQoSQueue(NiciraPluginV2TestCase):
def setUp(self, plugin=None):
cfg.CONF.set_override('api_extensions_path', NVPEXT_PATH)
- super(TestNiciraQoSQueue, self).setUp()
+ super(TestQoSQueue, self).setUp()
ext_mgr = NvpQoSTestExtensionManager()
self.ext_api = test_extensions.setup_extensions_middleware(ext_mgr)
body['qos_queue']['dscp'] = dscp
if default:
body['qos_queue']['default'] = default
-
res = self._create_qos_queue('json', body)
qos_queue = self.deserialize('json', res)
if res.status_int >= 400:
def test_create_trusted_qos_queue(self):
with mock.patch.object(qos_db.LOG, 'info') as log:
- with mock.patch.object(nvplib, 'do_request',
+ with mock.patch.object(nsxlib.queue, 'do_request',
return_value={"uuid": "fake_queue"}):
with self.qos_queue(name='fake_lqueue', min=34, max=44,
qos_marking='trusted', default=False) as q:
self.fake_cluster, 'whatever')
-class TestNvplibLQueue(NvplibTestCase):
-
- def test_create_and_get_lqueue(self):
- queue_id = nvplib.create_lqueue(self.fake_cluster,
- {'display_name': 'fake_queue',
- 'min_bandwidth_rate': 0,
- 'max_bandwidth_rate': 256,
- 'dscp': 0,
- 'qos_marking': False})
- queue_res = nvplib.do_request(
- nvplib.HTTP_GET,
- nvplib._build_uri_path('lqueue', resource_id=queue_id),
- cluster=self.fake_cluster)
- self.assertEqual(queue_id, queue_res['uuid'])
- self.assertEqual('fake_queue', queue_res['display_name'])
-
- def test_create_lqueue_nvp_error_raises(self):
- def raise_nvp_exc(*args, **kwargs):
- raise NvpApiClient.NvpApiException()
-
- with mock.patch.object(nvplib, 'do_request', new=raise_nvp_exc):
- self.assertRaises(
- exceptions.NeutronException, nvplib.create_lqueue,
- self.fake_cluster, {})
-
- def test_delete_lqueue(self):
- queue_id = nvplib.create_lqueue(self.fake_cluster,
- {'display_name': 'fake_queue',
- 'min_bandwidth_rate': 0,
- 'max_bandwidth_rate': 256,
- 'dscp': 0,
- 'qos_marking': False})
- nvplib.delete_lqueue(self.fake_cluster, queue_id)
- self.assertRaises(exceptions.NotFound,
- nvplib.do_request,
- nvplib.HTTP_GET,
- nvplib._build_uri_path(
- 'lqueue', resource_id=queue_id),
- cluster=self.fake_cluster)
-
- def test_delete_non_existing_lqueue_raises(self):
- self.assertRaises(exceptions.NeutronException,
- nvplib.delete_lqueue,
- self.fake_cluster, 'whatever')
-
-
class TestNvplibLogicalPorts(NvplibTestCase):
def _create_switch_and_port(self, tenant_id='pippo',