Merge "Fix H302 violations in plugins package"
This commit is contained in:
commit
ae3e92fe0c
@ -88,7 +88,7 @@ from neutron.plugins.bigswitch.db import porttracker_db
|
|||||||
from neutron.plugins.bigswitch import extensions
|
from neutron.plugins.bigswitch import extensions
|
||||||
from neutron.plugins.bigswitch import routerrule_db
|
from neutron.plugins.bigswitch import routerrule_db
|
||||||
from neutron.plugins.bigswitch import servermanager
|
from neutron.plugins.bigswitch import servermanager
|
||||||
from neutron.plugins.bigswitch.version import version_string_with_vcs
|
from neutron.plugins.bigswitch import version
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -474,7 +474,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
|||||||
def __init__(self, server_timeout=None):
|
def __init__(self, server_timeout=None):
|
||||||
super(NeutronRestProxyV2, self).__init__()
|
super(NeutronRestProxyV2, self).__init__()
|
||||||
LOG.info(_('NeutronRestProxy: Starting plugin. Version=%s'),
|
LOG.info(_('NeutronRestProxy: Starting plugin. Version=%s'),
|
||||||
version_string_with_vcs())
|
version.version_string_with_vcs())
|
||||||
pl_config.register_config()
|
pl_config.register_config()
|
||||||
self.evpool = eventlet.GreenPool(cfg.CONF.RESTPROXY.thread_pool_size)
|
self.evpool = eventlet.GreenPool(cfg.CONF.RESTPROXY.thread_pool_size)
|
||||||
|
|
||||||
|
@ -27,8 +27,8 @@ from __future__ import print_function
|
|||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from six.moves import xrange
|
from six import moves
|
||||||
from wsgiref.simple_server import make_server
|
from wsgiref import simple_server
|
||||||
|
|
||||||
|
|
||||||
class TestNetworkCtrl(object):
|
class TestNetworkCtrl(object):
|
||||||
@ -93,7 +93,7 @@ class TestNetworkCtrl(object):
|
|||||||
def request_handler(self, method, uri, body):
|
def request_handler(self, method, uri, body):
|
||||||
retstatus = self.default_status
|
retstatus = self.default_status
|
||||||
retbody = self.default_response
|
retbody = self.default_response
|
||||||
for i in xrange(len(self.matches)):
|
for i in moves.xrange(len(self.matches)):
|
||||||
(prior, method_regexp, uri_regexp, handler, data, multi) = \
|
(prior, method_regexp, uri_regexp, handler, data, multi) = \
|
||||||
self.matches[i]
|
self.matches[i]
|
||||||
if re.match(method_regexp, method) and re.match(uri_regexp, uri):
|
if re.match(method_regexp, method) and re.match(uri_regexp, uri):
|
||||||
@ -156,7 +156,7 @@ class TestNetworkCtrl(object):
|
|||||||
print('%s: %s' % ('Response',
|
print('%s: %s' % ('Response',
|
||||||
json.dumps(body_data, sort_keys=True, indent=4)))
|
json.dumps(body_data, sort_keys=True, indent=4)))
|
||||||
return body
|
return body
|
||||||
return make_server(self.host, self.port, app)
|
return simple_server.make_server(self.host, self.port, app)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
print("Serving on port %d ..." % self.port)
|
print("Serving on port %d ..." % self.port)
|
||||||
|
@ -22,39 +22,27 @@
|
|||||||
"""Determine version of NeutronRestProxy plugin"""
|
"""Determine version of NeutronRestProxy plugin"""
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
|
||||||
# if vcsversion exists, use it. Else, use LOCALBRANCH:LOCALREVISION
|
from neutron.plugins.bigswitch import vcsversion
|
||||||
try:
|
|
||||||
from neutron.plugins.bigswitch.vcsversion import version_info
|
|
||||||
except ImportError:
|
|
||||||
version_info = {'branch_nick': u'LOCALBRANCH',
|
|
||||||
'revision_id': u'LOCALREVISION',
|
|
||||||
'revno': 0}
|
|
||||||
try:
|
|
||||||
from neutron.plugins.bigswitch.vcsversion import NeutronRestPROXY_VERSION
|
|
||||||
except ImportError:
|
|
||||||
NeutronRestPROXY_VERSION = ['2013', '1', None]
|
|
||||||
try:
|
|
||||||
from neutron.plugins.bigswitch.vcsversion import FINAL
|
|
||||||
except ImportError:
|
|
||||||
FINAL = False # This becomes true at Release Candidate time
|
|
||||||
|
|
||||||
|
|
||||||
YEAR, COUNT, REVISION = NeutronRestPROXY_VERSION
|
YEAR, COUNT, REVISION = vcsversion.NEUTRONRESTPROXY_VERSION
|
||||||
|
|
||||||
|
|
||||||
def canonical_version_string():
|
def canonical_version_string():
|
||||||
return '.'.join(filter(None, NeutronRestPROXY_VERSION))
|
return '.'.join(filter(None,
|
||||||
|
vcsversion.NEUTRONRESTPROXY_VERSION))
|
||||||
|
|
||||||
|
|
||||||
def version_string():
|
def version_string():
|
||||||
if FINAL:
|
if vcsversion.FINAL:
|
||||||
return canonical_version_string()
|
return canonical_version_string()
|
||||||
else:
|
else:
|
||||||
return '%s-dev' % (canonical_version_string(),)
|
return '%s-dev' % (canonical_version_string(),)
|
||||||
|
|
||||||
|
|
||||||
def vcs_version_string():
|
def vcs_version_string():
|
||||||
return "%s:%s" % (version_info['branch_nick'], version_info['revision_id'])
|
return "%s:%s" % (vcsversion.version_info['branch_nick'],
|
||||||
|
vcsversion.version_info['revision_id'])
|
||||||
|
|
||||||
|
|
||||||
def version_string_with_vcs():
|
def version_string_with_vcs():
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
|
|
||||||
"""A Vlan Bitmap class to handle allocation/de-allocation of vlan ids."""
|
"""A Vlan Bitmap class to handle allocation/de-allocation of vlan ids."""
|
||||||
from six.moves import xrange
|
from six import moves
|
||||||
|
|
||||||
from neutron.common import constants
|
from neutron.common import constants
|
||||||
from neutron.plugins.brocade.db import models as brocade_db
|
from neutron.plugins.brocade.db import models as brocade_db
|
||||||
@ -49,7 +49,7 @@ class VlanBitmap(object):
|
|||||||
min_vlan_search = vlan_id or MIN_VLAN
|
min_vlan_search = vlan_id or MIN_VLAN
|
||||||
max_vlan_search = (vlan_id and vlan_id + 1) or MAX_VLAN
|
max_vlan_search = (vlan_id and vlan_id + 1) or MAX_VLAN
|
||||||
|
|
||||||
for vlan in xrange(min_vlan_search, max_vlan_search):
|
for vlan in moves.xrange(min_vlan_search, max_vlan_search):
|
||||||
if vlan not in self.vlans:
|
if vlan not in self.vlans:
|
||||||
self.vlans.add(vlan)
|
self.vlans.add(vlan)
|
||||||
return vlan
|
return vlan
|
||||||
|
@ -22,7 +22,7 @@ from webob import exc
|
|||||||
|
|
||||||
from neutron.api import api_common as common
|
from neutron.api import api_common as common
|
||||||
from neutron.api import extensions
|
from neutron.api import extensions
|
||||||
from neutron.manager import NeutronManager
|
from neutron import manager
|
||||||
from neutron.plugins.cisco.common import cisco_exceptions as exception
|
from neutron.plugins.cisco.common import cisco_exceptions as exception
|
||||||
from neutron.plugins.cisco.common import cisco_faults as faults
|
from neutron.plugins.cisco.common import cisco_faults as faults
|
||||||
from neutron.plugins.cisco.extensions import _qos_view as qos_view
|
from neutron.plugins.cisco.extensions import _qos_view as qos_view
|
||||||
@ -63,7 +63,7 @@ class Qos(extensions.ExtensionDescriptor):
|
|||||||
parent_resource = dict(member_name="tenant",
|
parent_resource = dict(member_name="tenant",
|
||||||
collection_name="extensions/csco/tenants")
|
collection_name="extensions/csco/tenants")
|
||||||
|
|
||||||
controller = QosController(NeutronManager.get_plugin())
|
controller = QosController(manager.NeutronManager.get_plugin())
|
||||||
return [extensions.ResourceExtension('qoss', controller,
|
return [extensions.ResourceExtension('qoss', controller,
|
||||||
parent=parent_resource)]
|
parent=parent_resource)]
|
||||||
|
|
||||||
|
@ -33,13 +33,13 @@ from neutron.plugins.cisco.common import cisco_exceptions as cisco_exc
|
|||||||
from neutron.plugins.cisco.common import config as conf
|
from neutron.plugins.cisco.common import config as conf
|
||||||
from neutron.plugins.cisco.db import network_db_v2 as cdb
|
from neutron.plugins.cisco.db import network_db_v2 as cdb
|
||||||
from neutron.plugins.cisco.db import nexus_db_v2 as nxos_db
|
from neutron.plugins.cisco.db import nexus_db_v2 as nxos_db
|
||||||
from neutron.plugins.cisco.l2device_plugin_base import L2DevicePluginBase
|
from neutron.plugins.cisco import l2device_plugin_base
|
||||||
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class NexusPlugin(L2DevicePluginBase):
|
class NexusPlugin(l2device_plugin_base.L2DevicePluginBase):
|
||||||
"""Nexus PlugIn Main Class."""
|
"""Nexus PlugIn Main Class."""
|
||||||
_networks = {}
|
_networks = {}
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
#
|
#
|
||||||
# @author: Ivar Lazzaro, Embrane, Inc.
|
# @author: Ivar Lazzaro, Embrane, Inc.
|
||||||
|
|
||||||
from functools import wraps
|
import functools
|
||||||
|
|
||||||
from heleosapi import exceptions as h_exc
|
from heleosapi import exceptions as h_exc
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ def handler(event, handler):
|
|||||||
else:
|
else:
|
||||||
handler[event].append(f)
|
handler[event].append(f)
|
||||||
|
|
||||||
@wraps(f)
|
@functools.wraps(f)
|
||||||
def wrapped_f(*args, **kwargs):
|
def wrapped_f(*args, **kwargs):
|
||||||
return f(*args, **kwargs)
|
return f(*args, **kwargs)
|
||||||
return wrapped_f
|
return wrapped_f
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
# @author: Alessandro Pilotti, Cloudbase Solutions Srl
|
# @author: Alessandro Pilotti, Cloudbase Solutions Srl
|
||||||
|
|
||||||
from six.moves import xrange
|
from six import moves
|
||||||
from sqlalchemy.orm import exc
|
from sqlalchemy.orm import exc
|
||||||
|
|
||||||
from neutron.common import exceptions as n_exc
|
from neutron.common import exceptions as n_exc
|
||||||
@ -201,7 +201,8 @@ class HyperVPluginDB(object):
|
|||||||
# physical network
|
# physical network
|
||||||
vlan_ids = set()
|
vlan_ids = set()
|
||||||
for vlan_range in vlan_ranges:
|
for vlan_range in vlan_ranges:
|
||||||
vlan_ids |= set(xrange(vlan_range[0], vlan_range[1] + 1))
|
vlan_ids |= set(moves.xrange(vlan_range[0],
|
||||||
|
vlan_range[1] + 1))
|
||||||
|
|
||||||
# remove from table unallocated vlans not currently allocatable
|
# remove from table unallocated vlans not currently allocatable
|
||||||
self._remove_non_allocatable_vlans(session,
|
self._remove_non_allocatable_vlans(session,
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
|
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
|
||||||
|
|
||||||
from neutron.db.models_v2 import model_base
|
from neutron.db import model_base
|
||||||
|
|
||||||
|
|
||||||
class VlanAllocation(model_base.BASEV2):
|
class VlanAllocation(model_base.BASEV2):
|
||||||
|
@ -28,7 +28,7 @@ from neutron.api.v2 import attributes
|
|||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
from neutron.plugins.ibm.common import config # noqa
|
from neutron.plugins.ibm.common import config # noqa
|
||||||
from neutron.plugins.ibm.common import constants
|
from neutron.plugins.ibm.common import constants
|
||||||
from neutron.wsgi import Serializer
|
from neutron import wsgi
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ class RequestHandler(object):
|
|||||||
'''Serializes a dictionary with a single key.'''
|
'''Serializes a dictionary with a single key.'''
|
||||||
|
|
||||||
if isinstance(data, dict):
|
if isinstance(data, dict):
|
||||||
return Serializer().serialize(data, self.content_type())
|
return wsgi.Serializer().serialize(data, self.content_type())
|
||||||
elif data:
|
elif data:
|
||||||
raise TypeError(_("unable to serialize object type: '%s'") %
|
raise TypeError(_("unable to serialize object type: '%s'") %
|
||||||
type(data))
|
type(data))
|
||||||
@ -106,7 +106,7 @@ class RequestHandler(object):
|
|||||||
if status_code == httplib.NO_CONTENT:
|
if status_code == httplib.NO_CONTENT:
|
||||||
return data
|
return data
|
||||||
try:
|
try:
|
||||||
deserialized_data = Serializer(
|
deserialized_data = wsgi.Serializer(
|
||||||
metadata=self._s_meta).deserialize(data, self.content_type())
|
metadata=self._s_meta).deserialize(data, self.content_type())
|
||||||
deserialized_data = deserialized_data['body']
|
deserialized_data = deserialized_data['body']
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from six.moves import xrange
|
from six import moves
|
||||||
from sqlalchemy.orm import exc
|
from sqlalchemy.orm import exc
|
||||||
|
|
||||||
from neutron.common import exceptions as n_exc
|
from neutron.common import exceptions as n_exc
|
||||||
@ -49,7 +49,7 @@ def sync_network_states(network_vlan_ranges):
|
|||||||
# physical network
|
# physical network
|
||||||
vlan_ids = set()
|
vlan_ids = set()
|
||||||
for vlan_range in vlan_ranges:
|
for vlan_range in vlan_ranges:
|
||||||
vlan_ids |= set(xrange(vlan_range[0], vlan_range[1] + 1))
|
vlan_ids |= set(moves.xrange(vlan_range[0], vlan_range[1] + 1))
|
||||||
|
|
||||||
# remove from table unallocated vlans not currently allocatable
|
# remove from table unallocated vlans not currently allocatable
|
||||||
if physical_network in allocations:
|
if physical_network in allocations:
|
||||||
|
@ -26,7 +26,7 @@ from neutron import context as ctx
|
|||||||
from neutron.extensions import portbindings
|
from neutron.extensions import portbindings
|
||||||
from neutron.openstack.common import log
|
from neutron.openstack.common import log
|
||||||
from neutron.plugins.bigswitch import config as pl_config
|
from neutron.plugins.bigswitch import config as pl_config
|
||||||
from neutron.plugins.bigswitch.plugin import NeutronRestProxyV2Base
|
from neutron.plugins.bigswitch import plugin
|
||||||
from neutron.plugins.bigswitch import servermanager
|
from neutron.plugins.bigswitch import servermanager
|
||||||
from neutron.plugins.ml2 import driver_api as api
|
from neutron.plugins.ml2 import driver_api as api
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ from neutron.plugins.ml2 import driver_api as api
|
|||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class BigSwitchMechanismDriver(NeutronRestProxyV2Base,
|
class BigSwitchMechanismDriver(plugin.NeutronRestProxyV2Base,
|
||||||
api.MechanismDriver):
|
api.MechanismDriver):
|
||||||
|
|
||||||
"""Mechanism Driver for Big Switch Networks Controller.
|
"""Mechanism Driver for Big Switch Networks Controller.
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from oslo.config import cfg
|
from oslo.config import cfg
|
||||||
from six.moves import xrange
|
from six import moves
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
from sqlalchemy.orm import exc as sa_exc
|
from sqlalchemy.orm import exc as sa_exc
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ class GreTypeDriver(type_tunnel.TunnelTypeDriver):
|
|||||||
"%(tun_min)s:%(tun_max)s"),
|
"%(tun_min)s:%(tun_max)s"),
|
||||||
{'tun_min': tun_min, 'tun_max': tun_max})
|
{'tun_min': tun_min, 'tun_max': tun_max})
|
||||||
else:
|
else:
|
||||||
gre_ids |= set(xrange(tun_min, tun_max + 1))
|
gre_ids |= set(moves.xrange(tun_min, tun_max + 1))
|
||||||
|
|
||||||
session = db_api.get_session()
|
session = db_api.get_session()
|
||||||
with session.begin(subtransactions=True):
|
with session.begin(subtransactions=True):
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from oslo.config import cfg
|
from oslo.config import cfg
|
||||||
from six.moves import xrange
|
from six import moves
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
|
|
||||||
from neutron.common import constants as q_const
|
from neutron.common import constants as q_const
|
||||||
@ -112,7 +112,7 @@ class VlanTypeDriver(api.TypeDriver):
|
|||||||
# this physical network
|
# this physical network
|
||||||
vlan_ids = set()
|
vlan_ids = set()
|
||||||
for vlan_min, vlan_max in vlan_ranges:
|
for vlan_min, vlan_max in vlan_ranges:
|
||||||
vlan_ids |= set(xrange(vlan_min, vlan_max + 1))
|
vlan_ids |= set(moves.xrange(vlan_min, vlan_max + 1))
|
||||||
|
|
||||||
# remove from table unallocated vlans not currently
|
# remove from table unallocated vlans not currently
|
||||||
# allocatable
|
# allocatable
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
from neutron.openstack.common import importutils
|
from neutron.openstack.common import importutils
|
||||||
from neutron.openstack.common import jsonutils
|
from neutron.openstack.common import jsonutils
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
from neutron.plugins.mlnx.common.comm_utils import RetryDecorator
|
from neutron.plugins.mlnx.common import comm_utils
|
||||||
from neutron.plugins.mlnx.common import exceptions
|
from neutron.plugins.mlnx.common import exceptions
|
||||||
|
|
||||||
zmq = importutils.try_import('eventlet.green.zmq')
|
zmq = importutils.try_import('eventlet.green.zmq')
|
||||||
@ -49,7 +49,7 @@ class EswitchUtils(object):
|
|||||||
self.poller.register(self._conn, zmq.POLLIN)
|
self.poller.register(self._conn, zmq.POLLIN)
|
||||||
return self.__conn
|
return self.__conn
|
||||||
|
|
||||||
@RetryDecorator(exceptions.RequestTimeout)
|
@comm_utils.RetryDecorator(exceptions.RequestTimeout)
|
||||||
def send_msg(self, msg):
|
def send_msg(self, msg):
|
||||||
self._conn.send(msg)
|
self._conn.send(msg)
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from six.moves import xrange
|
from six import moves
|
||||||
from sqlalchemy.orm import exc
|
from sqlalchemy.orm import exc
|
||||||
|
|
||||||
from neutron.common import exceptions as n_exc
|
from neutron.common import exceptions as n_exc
|
||||||
@ -87,7 +87,7 @@ def sync_network_states(network_vlan_ranges):
|
|||||||
# physical network
|
# physical network
|
||||||
vlan_ids = set()
|
vlan_ids = set()
|
||||||
for vlan_range in vlan_ranges:
|
for vlan_range in vlan_ranges:
|
||||||
vlan_ids |= set(xrange(vlan_range[0], vlan_range[1] + 1))
|
vlan_ids |= set(moves.xrange(vlan_range[0], vlan_range[1] + 1))
|
||||||
|
|
||||||
# remove from table unallocated vlans not currently allocatable
|
# remove from table unallocated vlans not currently allocatable
|
||||||
_remove_non_allocatable_vlans(session, allocations,
|
_remove_non_allocatable_vlans(session, allocations,
|
||||||
|
@ -25,7 +25,7 @@ from neutron.api.v2 import attributes
|
|||||||
from neutron.api.v2 import base
|
from neutron.api.v2 import base
|
||||||
from neutron.common import constants
|
from neutron.common import constants
|
||||||
from neutron.common import exceptions
|
from neutron.common import exceptions
|
||||||
from neutron.manager import NeutronManager
|
from neutron import manager
|
||||||
from neutron import quota
|
from neutron import quota
|
||||||
|
|
||||||
|
|
||||||
@ -195,7 +195,7 @@ class Packetfilter(extensions.ExtensionDescriptor):
|
|||||||
quota.QUOTAS.register_resource(qresource)
|
quota.QUOTAS.register_resource(qresource)
|
||||||
|
|
||||||
resource = base.create_resource(COLLECTION, RESOURCE,
|
resource = base.create_resource(COLLECTION, RESOURCE,
|
||||||
NeutronManager.get_plugin(),
|
manager.NeutronManager.get_plugin(),
|
||||||
PACKET_FILTER_ATTR_PARAMS)
|
PACKET_FILTER_ATTR_PARAMS)
|
||||||
pf_ext = extensions.ResourceExtension(
|
pf_ext = extensions.ResourceExtension(
|
||||||
COLLECTION, resource, attr_map=PACKET_FILTER_ATTR_PARAMS)
|
COLLECTION, resource, attr_map=PACKET_FILTER_ATTR_PARAMS)
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#
|
#
|
||||||
# @author: Ronak Shah, Nuage Networks, Alcatel-Lucent USA Inc.
|
# @author: Ronak Shah, Nuage Networks, Alcatel-Lucent USA Inc.
|
||||||
|
|
||||||
from abc import abstractmethod
|
import abc
|
||||||
|
|
||||||
from neutron.api import extensions
|
from neutron.api import extensions
|
||||||
from neutron.api.v2 import base
|
from neutron.api.v2 import base
|
||||||
@ -86,22 +86,22 @@ class Netpartition(object):
|
|||||||
|
|
||||||
class NetPartitionPluginBase(object):
|
class NetPartitionPluginBase(object):
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def create_net_partition(self, context, router):
|
def create_net_partition(self, context, router):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def update_net_partition(self, context, id, router):
|
def update_net_partition(self, context, id, router):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def get_net_partition(self, context, id, fields=None):
|
def get_net_partition(self, context, id, fields=None):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def delete_net_partition(self, context, id):
|
def delete_net_partition(self, context, id):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def get_net_partitions(self, context, filters=None, fields=None):
|
def get_net_partitions(self, context, filters=None, fields=None):
|
||||||
pass
|
pass
|
||||||
|
@ -18,10 +18,10 @@
|
|||||||
|
|
||||||
import httplib
|
import httplib
|
||||||
import time
|
import time
|
||||||
from urlparse import urljoin
|
|
||||||
|
|
||||||
from oslo.config import cfg
|
from oslo.config import cfg
|
||||||
import requests
|
import requests
|
||||||
|
from six.moves.urllib import parse
|
||||||
|
|
||||||
from neutron.openstack.common import jsonutils as json
|
from neutron.openstack.common import jsonutils as json
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
@ -65,8 +65,8 @@ class NVSDController(object):
|
|||||||
|
|
||||||
headers = {"Content-Type": "application/json"}
|
headers = {"Content-Type": "application/json"}
|
||||||
|
|
||||||
login_url = urljoin(self.api_url,
|
login_url = parse.urljoin(self.api_url,
|
||||||
"/pluginhandler/ocplugin/authmgmt/login")
|
"/pluginhandler/ocplugin/authmgmt/login")
|
||||||
|
|
||||||
data = json.dumps({"user_name": self._user, "passwd": self._password})
|
data = json.dumps({"user_name": self._user, "passwd": self._password})
|
||||||
|
|
||||||
@ -114,9 +114,9 @@ class NVSDController(object):
|
|||||||
|
|
||||||
headers = {"Content-Type": content_type}
|
headers = {"Content-Type": content_type}
|
||||||
|
|
||||||
uri = urljoin(url, "?authToken=%s" % self.auth_token)
|
uri = parse.urljoin(url, "?authToken=%s" % self.auth_token)
|
||||||
|
|
||||||
url = urljoin(self.api_url, uri)
|
url = parse.urljoin(self.api_url, uri)
|
||||||
|
|
||||||
request_ok = False
|
request_ok = False
|
||||||
response = None
|
response = None
|
||||||
|
@ -21,7 +21,7 @@ import time
|
|||||||
import eventlet
|
import eventlet
|
||||||
import netaddr
|
import netaddr
|
||||||
from oslo.config import cfg
|
from oslo.config import cfg
|
||||||
from six.moves import xrange
|
from six import moves
|
||||||
|
|
||||||
from neutron.agent import l2population_rpc
|
from neutron.agent import l2population_rpc
|
||||||
from neutron.agent.linux import ip_lib
|
from neutron.agent.linux import ip_lib
|
||||||
@ -173,8 +173,8 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin,
|
|||||||
'''
|
'''
|
||||||
self.veth_mtu = veth_mtu
|
self.veth_mtu = veth_mtu
|
||||||
self.root_helper = root_helper
|
self.root_helper = root_helper
|
||||||
self.available_local_vlans = set(xrange(q_const.MIN_VLAN_TAG,
|
self.available_local_vlans = set(moves.xrange(q_const.MIN_VLAN_TAG,
|
||||||
q_const.MAX_VLAN_TAG))
|
q_const.MAX_VLAN_TAG))
|
||||||
self.tunnel_types = tunnel_types or []
|
self.tunnel_types = tunnel_types or []
|
||||||
self.l2_pop = l2_population
|
self.l2_pop = l2_population
|
||||||
self.agent_state = {
|
self.agent_state = {
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from six.moves import xrange
|
from six import moves
|
||||||
from sqlalchemy import func
|
from sqlalchemy import func
|
||||||
from sqlalchemy.orm import exc
|
from sqlalchemy.orm import exc
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ def sync_vlan_allocations(network_vlan_ranges):
|
|||||||
# physical network
|
# physical network
|
||||||
vlan_ids = set()
|
vlan_ids = set()
|
||||||
for vlan_range in vlan_ranges:
|
for vlan_range in vlan_ranges:
|
||||||
vlan_ids |= set(xrange(vlan_range[0], vlan_range[1] + 1))
|
vlan_ids |= set(moves.xrange(vlan_range[0], vlan_range[1] + 1))
|
||||||
|
|
||||||
# remove from table unallocated vlans not currently allocatable
|
# remove from table unallocated vlans not currently allocatable
|
||||||
if physical_network in allocations:
|
if physical_network in allocations:
|
||||||
@ -211,7 +211,7 @@ def sync_tunnel_allocations(tunnel_id_ranges):
|
|||||||
"%(tun_min)s:%(tun_max)s"),
|
"%(tun_min)s:%(tun_max)s"),
|
||||||
{'tun_min': tun_min, 'tun_max': tun_max})
|
{'tun_min': tun_min, 'tun_max': tun_max})
|
||||||
else:
|
else:
|
||||||
tunnel_ids |= set(xrange(tun_min, tun_max + 1))
|
tunnel_ids |= set(moves.xrange(tun_min, tun_max + 1))
|
||||||
|
|
||||||
session = db.get_session()
|
session = db.get_session()
|
||||||
with session.begin():
|
with session.begin():
|
||||||
@ -371,7 +371,7 @@ def add_tunnel_endpoint(ip, max_retries=10):
|
|||||||
# doesn't conflict with any other concurrently executed
|
# doesn't conflict with any other concurrently executed
|
||||||
# DB transactions in spite of the specified transactions
|
# DB transactions in spite of the specified transactions
|
||||||
# isolation level value
|
# isolation level value
|
||||||
for i in xrange(max_retries):
|
for i in moves.xrange(max_retries):
|
||||||
LOG.debug(_('Adding a tunnel endpoint for %s'), ip)
|
LOG.debug(_('Adding a tunnel endpoint for %s'), ip)
|
||||||
try:
|
try:
|
||||||
session = db.get_session()
|
session = db.get_session()
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
|
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
|
||||||
from sqlalchemy.schema import UniqueConstraint
|
from sqlalchemy.schema import UniqueConstraint
|
||||||
|
|
||||||
|
from neutron.db import model_base
|
||||||
from neutron.db import models_v2
|
from neutron.db import models_v2
|
||||||
from neutron.db.models_v2 import model_base
|
|
||||||
from sqlalchemy import orm
|
from sqlalchemy import orm
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ from neutron.extensions import portbindings
|
|||||||
from neutron.openstack.common import importutils
|
from neutron.openstack.common import importutils
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
from neutron.plugins.plumgrid.common import exceptions as plum_excep
|
from neutron.plugins.plumgrid.common import exceptions as plum_excep
|
||||||
from neutron.plugins.plumgrid.plumgrid_plugin.plugin_ver import VERSION
|
from neutron.plugins.plumgrid.plumgrid_plugin import plugin_ver
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
PLUM_DRIVER = 'neutron.plugins.plumgrid.drivers.plumlib.Plumlib'
|
PLUM_DRIVER = 'neutron.plugins.plumgrid.drivers.plumlib.Plumlib'
|
||||||
@ -555,7 +555,7 @@ class NeutronPluginPLUMgridV2(db_base_plugin_v2.NeutronDbPluginV2,
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def _get_plugin_version(self):
|
def _get_plugin_version(self):
|
||||||
return VERSION
|
return plugin_ver.VERSION
|
||||||
|
|
||||||
def _port_viftype_binding(self, context, port):
|
def _port_viftype_binding(self, context, port):
|
||||||
port[portbindings.VIF_TYPE] = portbindings.VIF_TYPE_IOVISOR
|
port[portbindings.VIF_TYPE] = portbindings.VIF_TYPE_IOVISOR
|
||||||
|
@ -31,7 +31,6 @@ from ryu.app import rest_nw_id
|
|||||||
|
|
||||||
from neutron.agent.linux import ip_lib
|
from neutron.agent.linux import ip_lib
|
||||||
from neutron.agent.linux import ovs_lib
|
from neutron.agent.linux import ovs_lib
|
||||||
from neutron.agent.linux.ovs_lib import VifPort
|
|
||||||
from neutron.agent import rpc as agent_rpc
|
from neutron.agent import rpc as agent_rpc
|
||||||
from neutron.agent import securitygroups_rpc as sg_rpc
|
from neutron.agent import securitygroups_rpc as sg_rpc
|
||||||
from neutron.common import config as logging_config
|
from neutron.common import config as logging_config
|
||||||
@ -143,7 +142,7 @@ class OVSBridge(ovs_lib.OVSBridge):
|
|||||||
return
|
return
|
||||||
|
|
||||||
ofport = self.get_ofport(name)
|
ofport = self.get_ofport(name)
|
||||||
return VifPort(name, ofport, None, None, self)
|
return ovs_lib.VifPort(name, ofport, None, None, self)
|
||||||
|
|
||||||
def get_external_ports(self):
|
def get_external_ports(self):
|
||||||
return self._get_ports(self._get_external_port)
|
return self._get_ports(self._get_external_port)
|
||||||
|
@ -14,13 +14,13 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from abc import ABCMeta
|
import abc
|
||||||
import httplib
|
import httplib
|
||||||
import six
|
import six
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
from neutron.plugins.vmware.api_client import ctrl_conn_to_str
|
from neutron.plugins.vmware import api_client
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ DEFAULT_CONCURRENT_CONNECTIONS = 3
|
|||||||
DEFAULT_CONNECT_TIMEOUT = 5
|
DEFAULT_CONNECT_TIMEOUT = 5
|
||||||
|
|
||||||
|
|
||||||
@six.add_metaclass(ABCMeta)
|
@six.add_metaclass(abc.ABCMeta)
|
||||||
class ApiClientBase(object):
|
class ApiClientBase(object):
|
||||||
"""An abstract baseclass for all API client implementations."""
|
"""An abstract baseclass for all API client implementations."""
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ class ApiClientBase(object):
|
|||||||
if getattr(conn, 'last_used', now) < now - self.CONN_IDLE_TIMEOUT:
|
if getattr(conn, 'last_used', now) < now - self.CONN_IDLE_TIMEOUT:
|
||||||
LOG.info(_("[%(rid)d] Connection %(conn)s idle for %(sec)0.2f "
|
LOG.info(_("[%(rid)d] Connection %(conn)s idle for %(sec)0.2f "
|
||||||
"seconds; reconnecting."),
|
"seconds; reconnecting."),
|
||||||
{'rid': rid, 'conn': ctrl_conn_to_str(conn),
|
{'rid': rid, 'conn': api_client.ctrl_conn_to_str(conn),
|
||||||
'sec': now - conn.last_used})
|
'sec': now - conn.last_used})
|
||||||
conn = self._create_connection(*self._conn_params(conn))
|
conn = self._create_connection(*self._conn_params(conn))
|
||||||
|
|
||||||
@ -118,7 +118,8 @@ class ApiClientBase(object):
|
|||||||
qsize = self._conn_pool.qsize()
|
qsize = self._conn_pool.qsize()
|
||||||
LOG.debug(_("[%(rid)d] Acquired connection %(conn)s. %(qsize)d "
|
LOG.debug(_("[%(rid)d] Acquired connection %(conn)s. %(qsize)d "
|
||||||
"connection(s) available."),
|
"connection(s) available."),
|
||||||
{'rid': rid, 'conn': ctrl_conn_to_str(conn), 'qsize': qsize})
|
{'rid': rid, 'conn': api_client.ctrl_conn_to_str(conn),
|
||||||
|
'qsize': qsize})
|
||||||
if auto_login and self.auth_cookie(conn) is None:
|
if auto_login and self.auth_cookie(conn) is None:
|
||||||
self._wait_for_login(conn, headers)
|
self._wait_for_login(conn, headers)
|
||||||
return conn
|
return conn
|
||||||
@ -138,7 +139,8 @@ class ApiClientBase(object):
|
|||||||
if self._conn_params(http_conn) not in self._api_providers:
|
if self._conn_params(http_conn) not in self._api_providers:
|
||||||
LOG.debug(_("[%(rid)d] Released connection %(conn)s is not an "
|
LOG.debug(_("[%(rid)d] Released connection %(conn)s is not an "
|
||||||
"API provider for the cluster"),
|
"API provider for the cluster"),
|
||||||
{'rid': rid, 'conn': ctrl_conn_to_str(http_conn)})
|
{'rid': rid,
|
||||||
|
'conn': api_client.ctrl_conn_to_str(http_conn)})
|
||||||
return
|
return
|
||||||
elif hasattr(http_conn, "no_release"):
|
elif hasattr(http_conn, "no_release"):
|
||||||
return
|
return
|
||||||
@ -147,7 +149,8 @@ class ApiClientBase(object):
|
|||||||
# Reconnect to provider.
|
# Reconnect to provider.
|
||||||
LOG.warn(_("[%(rid)d] Connection returned in bad state, "
|
LOG.warn(_("[%(rid)d] Connection returned in bad state, "
|
||||||
"reconnecting to %(conn)s"),
|
"reconnecting to %(conn)s"),
|
||||||
{'rid': rid, 'conn': ctrl_conn_to_str(http_conn)})
|
{'rid': rid,
|
||||||
|
'conn': api_client.ctrl_conn_to_str(http_conn)})
|
||||||
http_conn = self._create_connection(*self._conn_params(http_conn))
|
http_conn = self._create_connection(*self._conn_params(http_conn))
|
||||||
priority = self._next_conn_priority
|
priority = self._next_conn_priority
|
||||||
self._next_conn_priority += 1
|
self._next_conn_priority += 1
|
||||||
@ -172,7 +175,7 @@ class ApiClientBase(object):
|
|||||||
self._conn_pool.put((priority, http_conn))
|
self._conn_pool.put((priority, http_conn))
|
||||||
LOG.debug(_("[%(rid)d] Released connection %(conn)s. %(qsize)d "
|
LOG.debug(_("[%(rid)d] Released connection %(conn)s. %(qsize)d "
|
||||||
"connection(s) available."),
|
"connection(s) available."),
|
||||||
{'rid': rid, 'conn': ctrl_conn_to_str(http_conn),
|
{'rid': rid, 'conn': api_client.ctrl_conn_to_str(http_conn),
|
||||||
'qsize': self._conn_pool.qsize()})
|
'qsize': self._conn_pool.qsize()})
|
||||||
|
|
||||||
def _wait_for_login(self, conn, headers=None):
|
def _wait_for_login(self, conn, headers=None):
|
||||||
@ -181,7 +184,7 @@ class ApiClientBase(object):
|
|||||||
data = self._get_provider_data(conn)
|
data = self._get_provider_data(conn)
|
||||||
if data is None:
|
if data is None:
|
||||||
LOG.error(_("Login request for an invalid connection: '%s'"),
|
LOG.error(_("Login request for an invalid connection: '%s'"),
|
||||||
ctrl_conn_to_str(conn))
|
api_client.ctrl_conn_to_str(conn))
|
||||||
return
|
return
|
||||||
provider_sem = data[0]
|
provider_sem = data[0]
|
||||||
if provider_sem.acquire(blocking=False):
|
if provider_sem.acquire(blocking=False):
|
||||||
|
@ -15,8 +15,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
from abc import ABCMeta
|
import abc
|
||||||
from abc import abstractmethod
|
|
||||||
import copy
|
import copy
|
||||||
import eventlet
|
import eventlet
|
||||||
import httplib
|
import httplib
|
||||||
@ -27,7 +26,7 @@ import six.moves.urllib.parse as urlparse
|
|||||||
|
|
||||||
from neutron.openstack.common import excutils
|
from neutron.openstack.common import excutils
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
from neutron.plugins.vmware.api_client import ctrl_conn_to_str
|
from neutron.plugins.vmware import api_client
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -40,7 +39,7 @@ DEFAULT_MAXIMUM_REQUEST_ID = 4294967295
|
|||||||
DOWNLOAD_TIMEOUT = 180
|
DOWNLOAD_TIMEOUT = 180
|
||||||
|
|
||||||
|
|
||||||
@six.add_metaclass(ABCMeta)
|
@six.add_metaclass(abc.ABCMeta)
|
||||||
class ApiRequest(object):
|
class ApiRequest(object):
|
||||||
'''An abstract baseclass for all ApiRequest implementations.
|
'''An abstract baseclass for all ApiRequest implementations.
|
||||||
|
|
||||||
@ -64,15 +63,15 @@ class ApiRequest(object):
|
|||||||
httplib.SERVICE_UNAVAILABLE
|
httplib.SERVICE_UNAVAILABLE
|
||||||
]
|
]
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def start(self):
|
def start(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def join(self):
|
def join(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def copy(self):
|
def copy(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -284,4 +283,5 @@ class ApiRequest(object):
|
|||||||
|
|
||||||
def _request_str(self, conn, url):
|
def _request_str(self, conn, url):
|
||||||
'''Return string representation of connection.'''
|
'''Return string representation of connection.'''
|
||||||
return "%s %s/%s" % (self._method, ctrl_conn_to_str(conn), url)
|
return "%s %s/%s" % (self._method, api_client.ctrl_conn_to_str(conn),
|
||||||
|
url)
|
||||||
|
@ -17,14 +17,14 @@
|
|||||||
|
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
from neutron.api.v2.attributes import is_attr_set
|
from neutron.api.v2 import attributes
|
||||||
from neutron.openstack.common import log
|
from neutron.openstack.common import log
|
||||||
from neutron.version import version_info
|
from neutron import version
|
||||||
|
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
MAX_DISPLAY_NAME_LEN = 40
|
MAX_DISPLAY_NAME_LEN = 40
|
||||||
NEUTRON_VERSION = version_info.release_string()
|
NEUTRON_VERSION = version.version_info.release_string()
|
||||||
|
|
||||||
|
|
||||||
# Allowed network types for the NSX Plugin
|
# Allowed network types for the NSX Plugin
|
||||||
@ -61,7 +61,8 @@ def device_id_to_vm_id(device_id, obfuscate=False):
|
|||||||
|
|
||||||
|
|
||||||
def check_and_truncate(display_name):
|
def check_and_truncate(display_name):
|
||||||
if is_attr_set(display_name) and len(display_name) > MAX_DISPLAY_NAME_LEN:
|
if (attributes.is_attr_set(display_name) and
|
||||||
|
len(display_name) > MAX_DISPLAY_NAME_LEN):
|
||||||
LOG.debug(_("Specified name:'%s' exceeds maximum length. "
|
LOG.debug(_("Specified name:'%s' exceeds maximum length. "
|
||||||
"It will be truncated on NSX"), display_name)
|
"It will be truncated on NSX"), display_name)
|
||||||
return display_name[:MAX_DISPLAY_NAME_LEN]
|
return display_name[:MAX_DISPLAY_NAME_LEN]
|
||||||
|
@ -15,13 +15,13 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
from abc import abstractmethod
|
import abc
|
||||||
|
|
||||||
from oslo.config import cfg
|
from oslo.config import cfg
|
||||||
|
|
||||||
from neutron.api.v2 import attributes
|
from neutron.api.v2 import attributes
|
||||||
from neutron.api.v2 import resource_helper
|
from neutron.api.v2 import resource_helper
|
||||||
from neutron.plugins.vmware.common.utils import NetworkTypes
|
from neutron.plugins.vmware.common import utils
|
||||||
|
|
||||||
GATEWAY_RESOURCE_NAME = "network_gateway"
|
GATEWAY_RESOURCE_NAME = "network_gateway"
|
||||||
DEVICE_RESOURCE_NAME = "gateway_device"
|
DEVICE_RESOURCE_NAME = "gateway_device"
|
||||||
@ -113,11 +113,11 @@ def _validate_connector_type(data, valid_values=None):
|
|||||||
msg = _("A connector type is required to create a gateway device")
|
msg = _("A connector type is required to create a gateway device")
|
||||||
return msg
|
return msg
|
||||||
connector_types = (valid_values if valid_values else
|
connector_types = (valid_values if valid_values else
|
||||||
[NetworkTypes.GRE,
|
[utils.NetworkTypes.GRE,
|
||||||
NetworkTypes.STT,
|
utils.NetworkTypes.STT,
|
||||||
NetworkTypes.BRIDGE,
|
utils.NetworkTypes.BRIDGE,
|
||||||
'ipsec%s' % NetworkTypes.GRE,
|
'ipsec%s' % utils.NetworkTypes.GRE,
|
||||||
'ipsec%s' % NetworkTypes.STT])
|
'ipsec%s' % utils.NetworkTypes.STT])
|
||||||
if data not in connector_types:
|
if data not in connector_types:
|
||||||
msg = _("Unknown connector type: %s") % data
|
msg = _("Unknown connector type: %s") % data
|
||||||
return msg
|
return msg
|
||||||
@ -196,55 +196,55 @@ class Networkgw(object):
|
|||||||
|
|
||||||
class NetworkGatewayPluginBase(object):
|
class NetworkGatewayPluginBase(object):
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def create_network_gateway(self, context, network_gateway):
|
def create_network_gateway(self, context, network_gateway):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def update_network_gateway(self, context, id, network_gateway):
|
def update_network_gateway(self, context, id, network_gateway):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def get_network_gateway(self, context, id, fields=None):
|
def get_network_gateway(self, context, id, fields=None):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def delete_network_gateway(self, context, id):
|
def delete_network_gateway(self, context, id):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def get_network_gateways(self, context, filters=None, fields=None,
|
def get_network_gateways(self, context, filters=None, fields=None,
|
||||||
sorts=None, limit=None, marker=None,
|
sorts=None, limit=None, marker=None,
|
||||||
page_reverse=False):
|
page_reverse=False):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def connect_network(self, context, network_gateway_id,
|
def connect_network(self, context, network_gateway_id,
|
||||||
network_mapping_info):
|
network_mapping_info):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def disconnect_network(self, context, network_gateway_id,
|
def disconnect_network(self, context, network_gateway_id,
|
||||||
network_mapping_info):
|
network_mapping_info):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def create_gateway_device(self, context, gateway_device):
|
def create_gateway_device(self, context, gateway_device):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def update_gateway_device(self, context, id, gateway_device):
|
def update_gateway_device(self, context, id, gateway_device):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def delete_gateway_device(self, context, id):
|
def delete_gateway_device(self, context, id):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def get_gateway_device(self, context, id, fields=None):
|
def get_gateway_device(self, context, id, fields=None):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def get_gateway_devices(self, context, filters=None, fields=None,
|
def get_gateway_devices(self, context, filters=None, fields=None,
|
||||||
sorts=None, limit=None, marker=None,
|
sorts=None, limit=None, marker=None,
|
||||||
page_reverse=False):
|
page_reverse=False):
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
from abc import abstractmethod
|
import abc
|
||||||
|
|
||||||
from neutron.api import extensions
|
from neutron.api import extensions
|
||||||
from neutron.api.v2 import attributes as attr
|
from neutron.api.v2 import attributes as attr
|
||||||
@ -205,19 +205,19 @@ class Qos(object):
|
|||||||
|
|
||||||
|
|
||||||
class QueuePluginBase(object):
|
class QueuePluginBase(object):
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def create_qos_queue(self, context, queue):
|
def create_qos_queue(self, context, queue):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def delete_qos_queue(self, context, id):
|
def delete_qos_queue(self, context, id):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def get_qos_queue(self, context, id, fields=None):
|
def get_qos_queue(self, context, id, fields=None):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abc.abstractmethod
|
||||||
def get_qos_queues(self, context, filters=None, fields=None, sorts=None,
|
def get_qos_queues(self, context, filters=None, fields=None, sorts=None,
|
||||||
limit=None, marker=None, page_reverse=False):
|
limit=None, marker=None, page_reverse=False):
|
||||||
pass
|
pass
|
||||||
|
@ -19,7 +19,7 @@ from neutron.common import exceptions as exception
|
|||||||
from neutron.openstack.common import log
|
from neutron.openstack.common import log
|
||||||
from neutron.plugins.vmware.api_client import exception as api_exc
|
from neutron.plugins.vmware.api_client import exception as api_exc
|
||||||
from neutron.plugins.vmware.common import exceptions as nsx_exc
|
from neutron.plugins.vmware.common import exceptions as nsx_exc
|
||||||
from neutron.version import version_info
|
from neutron import version
|
||||||
|
|
||||||
HTTP_GET = "GET"
|
HTTP_GET = "GET"
|
||||||
HTTP_POST = "POST"
|
HTTP_POST = "POST"
|
||||||
@ -27,7 +27,7 @@ HTTP_DELETE = "DELETE"
|
|||||||
HTTP_PUT = "PUT"
|
HTTP_PUT = "PUT"
|
||||||
# Prefix to be used for all NSX API calls
|
# Prefix to be used for all NSX API calls
|
||||||
URI_PREFIX = "/ws.v1"
|
URI_PREFIX = "/ws.v1"
|
||||||
NEUTRON_VERSION = version_info.release_string()
|
NEUTRON_VERSION = version.version_info.release_string()
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -20,9 +20,7 @@ from neutron.openstack.common import log
|
|||||||
from neutron.plugins.vmware.api_client import exception as api_exc
|
from neutron.plugins.vmware.api_client import exception as api_exc
|
||||||
from neutron.plugins.vmware.common import exceptions as nsx_exc
|
from neutron.plugins.vmware.common import exceptions as nsx_exc
|
||||||
from neutron.plugins.vmware.common import utils
|
from neutron.plugins.vmware.common import utils
|
||||||
from neutron.plugins.vmware.nsxlib import _build_uri_path
|
from neutron.plugins.vmware import nsxlib
|
||||||
from neutron.plugins.vmware.nsxlib import do_request
|
|
||||||
from neutron.plugins.vmware.nsxlib import get_all_query_pages
|
|
||||||
from neutron.plugins.vmware.nsxlib import switch
|
from neutron.plugins.vmware.nsxlib import switch
|
||||||
|
|
||||||
HTTP_GET = "GET"
|
HTTP_GET = "GET"
|
||||||
@ -60,8 +58,8 @@ def create_l2_gw_service(cluster, tenant_id, display_name, devices):
|
|||||||
"gateways": gateways,
|
"gateways": gateways,
|
||||||
"type": "L2GatewayServiceConfig"
|
"type": "L2GatewayServiceConfig"
|
||||||
}
|
}
|
||||||
return do_request(
|
return nsxlib.do_request(
|
||||||
HTTP_POST, _build_uri_path(GWSERVICE_RESOURCE),
|
HTTP_POST, nsxlib._build_uri_path(GWSERVICE_RESOURCE),
|
||||||
json.dumps(gwservice_obj), cluster=cluster)
|
json.dumps(gwservice_obj), cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
@ -76,9 +74,9 @@ def plug_l2_gw_service(cluster, lswitch_id, lport_id,
|
|||||||
|
|
||||||
|
|
||||||
def get_l2_gw_service(cluster, gateway_id):
|
def get_l2_gw_service(cluster, gateway_id):
|
||||||
return do_request(
|
return nsxlib.do_request(
|
||||||
HTTP_GET, _build_uri_path(GWSERVICE_RESOURCE,
|
HTTP_GET, nsxlib._build_uri_path(GWSERVICE_RESOURCE,
|
||||||
resource_id=gateway_id),
|
resource_id=gateway_id),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
@ -88,9 +86,9 @@ def get_l2_gw_services(cluster, tenant_id=None,
|
|||||||
if tenant_id:
|
if tenant_id:
|
||||||
actual_filters['tag'] = tenant_id
|
actual_filters['tag'] = tenant_id
|
||||||
actual_filters['tag_scope'] = 'os_tid'
|
actual_filters['tag_scope'] = 'os_tid'
|
||||||
return get_all_query_pages(
|
return nsxlib.get_all_query_pages(
|
||||||
_build_uri_path(GWSERVICE_RESOURCE,
|
nsxlib._build_uri_path(GWSERVICE_RESOURCE,
|
||||||
filters=actual_filters),
|
filters=actual_filters),
|
||||||
cluster)
|
cluster)
|
||||||
|
|
||||||
|
|
||||||
@ -101,15 +99,17 @@ def update_l2_gw_service(cluster, gateway_id, display_name):
|
|||||||
# Nothing to update
|
# Nothing to update
|
||||||
return gwservice_obj
|
return gwservice_obj
|
||||||
gwservice_obj["display_name"] = utils.check_and_truncate(display_name)
|
gwservice_obj["display_name"] = utils.check_and_truncate(display_name)
|
||||||
return do_request(HTTP_PUT, _build_uri_path(GWSERVICE_RESOURCE,
|
return nsxlib.do_request(HTTP_PUT,
|
||||||
resource_id=gateway_id),
|
nsxlib._build_uri_path(GWSERVICE_RESOURCE,
|
||||||
json.dumps(gwservice_obj), cluster=cluster)
|
resource_id=gateway_id),
|
||||||
|
json.dumps(gwservice_obj), cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def delete_l2_gw_service(cluster, gateway_id):
|
def delete_l2_gw_service(cluster, gateway_id):
|
||||||
do_request(HTTP_DELETE, _build_uri_path(GWSERVICE_RESOURCE,
|
nsxlib.do_request(HTTP_DELETE,
|
||||||
resource_id=gateway_id),
|
nsxlib._build_uri_path(GWSERVICE_RESOURCE,
|
||||||
cluster=cluster)
|
resource_id=gateway_id),
|
||||||
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def _build_gateway_device_body(tenant_id, display_name, neutron_id,
|
def _build_gateway_device_body(tenant_id, display_name, neutron_id,
|
||||||
@ -148,8 +148,8 @@ def create_gateway_device(cluster, tenant_id, display_name, neutron_id,
|
|||||||
connector_type, connector_ip,
|
connector_type, connector_ip,
|
||||||
client_certificate, tz_uuid)
|
client_certificate, tz_uuid)
|
||||||
try:
|
try:
|
||||||
return do_request(
|
return nsxlib.do_request(
|
||||||
HTTP_POST, _build_uri_path(TRANSPORTNODE_RESOURCE),
|
HTTP_POST, nsxlib._build_uri_path(TRANSPORTNODE_RESOURCE),
|
||||||
json.dumps(body), cluster=cluster)
|
json.dumps(body), cluster=cluster)
|
||||||
except api_exc.InvalidSecurityCertificate:
|
except api_exc.InvalidSecurityCertificate:
|
||||||
raise nsx_exc.InvalidSecurityCertificate()
|
raise nsx_exc.InvalidSecurityCertificate()
|
||||||
@ -163,46 +163,48 @@ def update_gateway_device(cluster, gateway_id, tenant_id,
|
|||||||
connector_type, connector_ip,
|
connector_type, connector_ip,
|
||||||
client_certificate, tz_uuid)
|
client_certificate, tz_uuid)
|
||||||
try:
|
try:
|
||||||
return do_request(
|
return nsxlib.do_request(
|
||||||
HTTP_PUT,
|
HTTP_PUT,
|
||||||
_build_uri_path(TRANSPORTNODE_RESOURCE, resource_id=gateway_id),
|
nsxlib._build_uri_path(TRANSPORTNODE_RESOURCE,
|
||||||
|
resource_id=gateway_id),
|
||||||
json.dumps(body), cluster=cluster)
|
json.dumps(body), cluster=cluster)
|
||||||
except api_exc.InvalidSecurityCertificate:
|
except api_exc.InvalidSecurityCertificate:
|
||||||
raise nsx_exc.InvalidSecurityCertificate()
|
raise nsx_exc.InvalidSecurityCertificate()
|
||||||
|
|
||||||
|
|
||||||
def delete_gateway_device(cluster, device_uuid):
|
def delete_gateway_device(cluster, device_uuid):
|
||||||
return do_request(HTTP_DELETE,
|
return nsxlib.do_request(HTTP_DELETE,
|
||||||
_build_uri_path(TRANSPORTNODE_RESOURCE,
|
nsxlib._build_uri_path(TRANSPORTNODE_RESOURCE,
|
||||||
device_uuid),
|
device_uuid),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def get_gateway_device_status(cluster, device_uuid):
|
def get_gateway_device_status(cluster, device_uuid):
|
||||||
status_res = do_request(HTTP_GET,
|
status_res = nsxlib.do_request(HTTP_GET,
|
||||||
_build_uri_path(TRANSPORTNODE_RESOURCE,
|
nsxlib._build_uri_path(
|
||||||
device_uuid,
|
TRANSPORTNODE_RESOURCE,
|
||||||
extra_action='status'),
|
device_uuid,
|
||||||
cluster=cluster)
|
extra_action='status'),
|
||||||
|
cluster=cluster)
|
||||||
# Returns the connection status
|
# Returns the connection status
|
||||||
return status_res['connection']['connected']
|
return status_res['connection']['connected']
|
||||||
|
|
||||||
|
|
||||||
def get_gateway_devices_status(cluster, tenant_id=None):
|
def get_gateway_devices_status(cluster, tenant_id=None):
|
||||||
if tenant_id:
|
if tenant_id:
|
||||||
gw_device_query_path = _build_uri_path(
|
gw_device_query_path = nsxlib._build_uri_path(
|
||||||
TRANSPORTNODE_RESOURCE,
|
TRANSPORTNODE_RESOURCE,
|
||||||
fields="uuid,tags",
|
fields="uuid,tags",
|
||||||
relations="TransportNodeStatus",
|
relations="TransportNodeStatus",
|
||||||
filters={'tag': tenant_id,
|
filters={'tag': tenant_id,
|
||||||
'tag_scope': 'os_tid'})
|
'tag_scope': 'os_tid'})
|
||||||
else:
|
else:
|
||||||
gw_device_query_path = _build_uri_path(
|
gw_device_query_path = nsxlib._build_uri_path(
|
||||||
TRANSPORTNODE_RESOURCE,
|
TRANSPORTNODE_RESOURCE,
|
||||||
fields="uuid,tags",
|
fields="uuid,tags",
|
||||||
relations="TransportNodeStatus")
|
relations="TransportNodeStatus")
|
||||||
|
|
||||||
response = get_all_query_pages(gw_device_query_path, cluster)
|
response = nsxlib.get_all_query_pages(gw_device_query_path, cluster)
|
||||||
results = {}
|
results = {}
|
||||||
for item in response:
|
for item in response:
|
||||||
results[item['uuid']] = (item['_relations']['TransportNodeStatus']
|
results[item['uuid']] = (item['_relations']['TransportNodeStatus']
|
||||||
|
@ -22,8 +22,7 @@ from neutron.openstack.common import log
|
|||||||
from neutron.plugins.vmware.api_client import exception as api_exc
|
from neutron.plugins.vmware.api_client import exception as api_exc
|
||||||
from neutron.plugins.vmware.common import exceptions as nsx_exc
|
from neutron.plugins.vmware.common import exceptions as nsx_exc
|
||||||
from neutron.plugins.vmware.common import utils
|
from neutron.plugins.vmware.common import utils
|
||||||
from neutron.plugins.vmware.nsxlib import _build_uri_path
|
from neutron.plugins.vmware import nsxlib
|
||||||
from neutron.plugins.vmware.nsxlib import do_request
|
|
||||||
|
|
||||||
HTTP_GET = "GET"
|
HTTP_GET = "GET"
|
||||||
HTTP_POST = "POST"
|
HTTP_POST = "POST"
|
||||||
@ -43,10 +42,11 @@ def service_cluster_exists(cluster, svc_cluster_id):
|
|||||||
try:
|
try:
|
||||||
exists = (
|
exists = (
|
||||||
svc_cluster_id and
|
svc_cluster_id and
|
||||||
do_request(HTTP_GET,
|
nsxlib.do_request(HTTP_GET,
|
||||||
_build_uri_path(SERVICECLUSTER_RESOURCE,
|
nsxlib._build_uri_path(
|
||||||
resource_id=svc_cluster_id),
|
SERVICECLUSTER_RESOURCE,
|
||||||
cluster=cluster) is not None)
|
resource_id=svc_cluster_id),
|
||||||
|
cluster=cluster) is not None)
|
||||||
except exception.NotFound:
|
except exception.NotFound:
|
||||||
pass
|
pass
|
||||||
return exists
|
return exists
|
||||||
@ -57,19 +57,19 @@ def lsn_for_network_create(cluster, network_id):
|
|||||||
"edge_cluster_uuid": cluster.default_service_cluster_uuid,
|
"edge_cluster_uuid": cluster.default_service_cluster_uuid,
|
||||||
"tags": utils.get_tags(n_network_id=network_id)
|
"tags": utils.get_tags(n_network_id=network_id)
|
||||||
}
|
}
|
||||||
return do_request(HTTP_POST,
|
return nsxlib.do_request(HTTP_POST,
|
||||||
_build_uri_path(LSERVICESNODE_RESOURCE),
|
nsxlib._build_uri_path(LSERVICESNODE_RESOURCE),
|
||||||
json.dumps(lsn_obj),
|
json.dumps(lsn_obj),
|
||||||
cluster=cluster)["uuid"]
|
cluster=cluster)["uuid"]
|
||||||
|
|
||||||
|
|
||||||
def lsn_for_network_get(cluster, network_id):
|
def lsn_for_network_get(cluster, network_id):
|
||||||
filters = {"tag": network_id, "tag_scope": "n_network_id"}
|
filters = {"tag": network_id, "tag_scope": "n_network_id"}
|
||||||
results = do_request(HTTP_GET,
|
results = nsxlib.do_request(HTTP_GET,
|
||||||
_build_uri_path(LSERVICESNODE_RESOURCE,
|
nsxlib._build_uri_path(LSERVICESNODE_RESOURCE,
|
||||||
fields="uuid",
|
fields="uuid",
|
||||||
filters=filters),
|
filters=filters),
|
||||||
cluster=cluster)['results']
|
cluster=cluster)['results']
|
||||||
if not results:
|
if not results:
|
||||||
raise exception.NotFound()
|
raise exception.NotFound()
|
||||||
elif len(results) == 1:
|
elif len(results) == 1:
|
||||||
@ -77,22 +77,22 @@ def lsn_for_network_get(cluster, network_id):
|
|||||||
|
|
||||||
|
|
||||||
def lsn_delete(cluster, lsn_id):
|
def lsn_delete(cluster, lsn_id):
|
||||||
do_request(HTTP_DELETE,
|
nsxlib.do_request(HTTP_DELETE,
|
||||||
_build_uri_path(LSERVICESNODE_RESOURCE,
|
nsxlib._build_uri_path(LSERVICESNODE_RESOURCE,
|
||||||
resource_id=lsn_id),
|
resource_id=lsn_id),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def lsn_port_host_entries_update(
|
def lsn_port_host_entries_update(
|
||||||
cluster, lsn_id, lsn_port_id, conf, hosts_data):
|
cluster, lsn_id, lsn_port_id, conf, hosts_data):
|
||||||
hosts_obj = {'hosts': hosts_data}
|
hosts_obj = {'hosts': hosts_data}
|
||||||
do_request(HTTP_PUT,
|
nsxlib.do_request(HTTP_PUT,
|
||||||
_build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
nsxlib._build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
||||||
parent_resource_id=lsn_id,
|
parent_resource_id=lsn_id,
|
||||||
resource_id=lsn_port_id,
|
resource_id=lsn_port_id,
|
||||||
extra_action=conf),
|
extra_action=conf),
|
||||||
json.dumps(hosts_obj),
|
json.dumps(hosts_obj),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def lsn_port_create(cluster, lsn_id, port_data):
|
def lsn_port_create(cluster, lsn_id, port_data):
|
||||||
@ -103,28 +103,29 @@ def lsn_port_create(cluster, lsn_id, port_data):
|
|||||||
n_subnet_id=port_data["subnet_id"]),
|
n_subnet_id=port_data["subnet_id"]),
|
||||||
"type": "LogicalServicesNodePortConfig",
|
"type": "LogicalServicesNodePortConfig",
|
||||||
}
|
}
|
||||||
return do_request(HTTP_POST,
|
return nsxlib.do_request(HTTP_POST,
|
||||||
_build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
nsxlib._build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
||||||
parent_resource_id=lsn_id),
|
parent_resource_id=lsn_id),
|
||||||
json.dumps(port_obj),
|
json.dumps(port_obj),
|
||||||
cluster=cluster)["uuid"]
|
cluster=cluster)["uuid"]
|
||||||
|
|
||||||
|
|
||||||
def lsn_port_delete(cluster, lsn_id, lsn_port_id):
|
def lsn_port_delete(cluster, lsn_id, lsn_port_id):
|
||||||
return do_request(HTTP_DELETE,
|
return nsxlib.do_request(HTTP_DELETE,
|
||||||
_build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
nsxlib._build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
||||||
parent_resource_id=lsn_id,
|
parent_resource_id=lsn_id,
|
||||||
resource_id=lsn_port_id),
|
resource_id=lsn_port_id),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def _lsn_port_get(cluster, lsn_id, filters):
|
def _lsn_port_get(cluster, lsn_id, filters):
|
||||||
results = do_request(HTTP_GET,
|
results = nsxlib.do_request(HTTP_GET,
|
||||||
_build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
nsxlib._build_uri_path(
|
||||||
parent_resource_id=lsn_id,
|
LSERVICESNODEPORT_RESOURCE,
|
||||||
fields="uuid",
|
parent_resource_id=lsn_id,
|
||||||
filters=filters),
|
fields="uuid",
|
||||||
cluster=cluster)['results']
|
filters=filters),
|
||||||
|
cluster=cluster)['results']
|
||||||
if not results:
|
if not results:
|
||||||
raise exception.NotFound()
|
raise exception.NotFound()
|
||||||
elif len(results) == 1:
|
elif len(results) == 1:
|
||||||
@ -142,11 +143,12 @@ def lsn_port_by_subnet_get(cluster, lsn_id, subnet_id):
|
|||||||
|
|
||||||
|
|
||||||
def lsn_port_info_get(cluster, lsn_id, lsn_port_id):
|
def lsn_port_info_get(cluster, lsn_id, lsn_port_id):
|
||||||
result = do_request(HTTP_GET,
|
result = nsxlib.do_request(HTTP_GET,
|
||||||
_build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
nsxlib._build_uri_path(
|
||||||
parent_resource_id=lsn_id,
|
LSERVICESNODEPORT_RESOURCE,
|
||||||
resource_id=lsn_port_id),
|
parent_resource_id=lsn_id,
|
||||||
cluster=cluster)
|
resource_id=lsn_port_id),
|
||||||
|
cluster=cluster)
|
||||||
for tag in result['tags']:
|
for tag in result['tags']:
|
||||||
if tag['scope'] == 'n_subnet_id':
|
if tag['scope'] == 'n_subnet_id':
|
||||||
result['subnet_id'] = tag['tag']
|
result['subnet_id'] = tag['tag']
|
||||||
@ -160,13 +162,13 @@ def lsn_port_plug_network(cluster, lsn_id, lsn_port_id, lswitch_port_id):
|
|||||||
"peer_port_uuid": lswitch_port_id
|
"peer_port_uuid": lswitch_port_id
|
||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
do_request(HTTP_PUT,
|
nsxlib.do_request(HTTP_PUT,
|
||||||
_build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
nsxlib._build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
||||||
parent_resource_id=lsn_id,
|
parent_resource_id=lsn_id,
|
||||||
resource_id=lsn_port_id,
|
resource_id=lsn_port_id,
|
||||||
is_attachment=True),
|
is_attachment=True),
|
||||||
json.dumps(patch_obj),
|
json.dumps(patch_obj),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
except api_exc.Conflict:
|
except api_exc.Conflict:
|
||||||
# This restriction might be lifted at some point
|
# This restriction might be lifted at some point
|
||||||
msg = (_("Attempt to plug Logical Services Node %(lsn)s into "
|
msg = (_("Attempt to plug Logical Services Node %(lsn)s into "
|
||||||
@ -181,29 +183,29 @@ def _lsn_configure_action(
|
|||||||
cluster, lsn_id, action, is_enabled, obj):
|
cluster, lsn_id, action, is_enabled, obj):
|
||||||
lsn_obj = {"enabled": is_enabled}
|
lsn_obj = {"enabled": is_enabled}
|
||||||
lsn_obj.update(obj)
|
lsn_obj.update(obj)
|
||||||
do_request(HTTP_PUT,
|
nsxlib.do_request(HTTP_PUT,
|
||||||
_build_uri_path(LSERVICESNODE_RESOURCE,
|
nsxlib._build_uri_path(LSERVICESNODE_RESOURCE,
|
||||||
resource_id=lsn_id,
|
resource_id=lsn_id,
|
||||||
extra_action=action),
|
extra_action=action),
|
||||||
json.dumps(lsn_obj),
|
json.dumps(lsn_obj),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def _lsn_port_configure_action(
|
def _lsn_port_configure_action(
|
||||||
cluster, lsn_id, lsn_port_id, action, is_enabled, obj):
|
cluster, lsn_id, lsn_port_id, action, is_enabled, obj):
|
||||||
do_request(HTTP_PUT,
|
nsxlib.do_request(HTTP_PUT,
|
||||||
_build_uri_path(LSERVICESNODE_RESOURCE,
|
nsxlib._build_uri_path(LSERVICESNODE_RESOURCE,
|
||||||
resource_id=lsn_id,
|
resource_id=lsn_id,
|
||||||
extra_action=action),
|
extra_action=action),
|
||||||
json.dumps({"enabled": is_enabled}),
|
json.dumps({"enabled": is_enabled}),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
do_request(HTTP_PUT,
|
nsxlib.do_request(HTTP_PUT,
|
||||||
_build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
nsxlib._build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
||||||
parent_resource_id=lsn_id,
|
parent_resource_id=lsn_id,
|
||||||
resource_id=lsn_port_id,
|
resource_id=lsn_port_id,
|
||||||
extra_action=action),
|
extra_action=action),
|
||||||
json.dumps(obj),
|
json.dumps(obj),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def _get_opts(name, value):
|
def _get_opts(name, value):
|
||||||
@ -239,14 +241,14 @@ def lsn_metadata_configure(
|
|||||||
|
|
||||||
def _lsn_port_host_action(
|
def _lsn_port_host_action(
|
||||||
cluster, lsn_id, lsn_port_id, host_obj, extra_action, action):
|
cluster, lsn_id, lsn_port_id, host_obj, extra_action, action):
|
||||||
do_request(HTTP_POST,
|
nsxlib.do_request(HTTP_POST,
|
||||||
_build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
nsxlib._build_uri_path(LSERVICESNODEPORT_RESOURCE,
|
||||||
parent_resource_id=lsn_id,
|
parent_resource_id=lsn_id,
|
||||||
resource_id=lsn_port_id,
|
resource_id=lsn_port_id,
|
||||||
extra_action=extra_action,
|
extra_action=extra_action,
|
||||||
filters={"action": action}),
|
filters={"action": action}),
|
||||||
json.dumps(host_obj),
|
json.dumps(host_obj),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def lsn_port_dhcp_host_add(cluster, lsn_id, lsn_port_id, host_data):
|
def lsn_port_dhcp_host_add(cluster, lsn_id, lsn_port_id, host_data):
|
||||||
|
@ -20,8 +20,7 @@ from neutron.openstack.common import jsonutils
|
|||||||
from neutron.openstack.common import log
|
from neutron.openstack.common import log
|
||||||
from neutron.plugins.vmware.api_client import exception as api_exc
|
from neutron.plugins.vmware.api_client import exception as api_exc
|
||||||
from neutron.plugins.vmware.common import utils
|
from neutron.plugins.vmware.common import utils
|
||||||
from neutron.plugins.vmware.nsxlib import _build_uri_path
|
from neutron.plugins.vmware import nsxlib
|
||||||
from neutron.plugins.vmware.nsxlib import do_request
|
|
||||||
|
|
||||||
HTTP_POST = "POST"
|
HTTP_POST = "POST"
|
||||||
HTTP_DELETE = "DELETE"
|
HTTP_DELETE = "DELETE"
|
||||||
@ -50,10 +49,10 @@ def create_lqueue(cluster, queue_data):
|
|||||||
|
|
||||||
queue_obj['tags'] = utils.get_tags()
|
queue_obj['tags'] = utils.get_tags()
|
||||||
try:
|
try:
|
||||||
return do_request(HTTP_POST,
|
return nsxlib.do_request(HTTP_POST,
|
||||||
_build_uri_path(LQUEUE_RESOURCE),
|
nsxlib._build_uri_path(LQUEUE_RESOURCE),
|
||||||
jsonutils.dumps(queue_obj),
|
jsonutils.dumps(queue_obj),
|
||||||
cluster=cluster)['uuid']
|
cluster=cluster)['uuid']
|
||||||
except api_exc.NsxApiException:
|
except api_exc.NsxApiException:
|
||||||
# FIXME(salv-orlando): This should not raise NeutronException
|
# FIXME(salv-orlando): This should not raise NeutronException
|
||||||
with excutils.save_and_reraise_exception():
|
with excutils.save_and_reraise_exception():
|
||||||
@ -62,10 +61,10 @@ def create_lqueue(cluster, queue_data):
|
|||||||
|
|
||||||
def delete_lqueue(cluster, queue_id):
|
def delete_lqueue(cluster, queue_id):
|
||||||
try:
|
try:
|
||||||
do_request(HTTP_DELETE,
|
nsxlib.do_request(HTTP_DELETE,
|
||||||
_build_uri_path(LQUEUE_RESOURCE,
|
nsxlib._build_uri_path(LQUEUE_RESOURCE,
|
||||||
resource_id=queue_id),
|
resource_id=queue_id),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
except Exception:
|
except Exception:
|
||||||
# FIXME(salv-orlando): This should not raise NeutronException
|
# FIXME(salv-orlando): This should not raise NeutronException
|
||||||
with excutils.save_and_reraise_exception():
|
with excutils.save_and_reraise_exception():
|
||||||
|
@ -22,12 +22,9 @@ from neutron.openstack.common import log
|
|||||||
from neutron.plugins.vmware.api_client import exception as api_exc
|
from neutron.plugins.vmware.api_client import exception as api_exc
|
||||||
from neutron.plugins.vmware.common import exceptions as nsx_exc
|
from neutron.plugins.vmware.common import exceptions as nsx_exc
|
||||||
from neutron.plugins.vmware.common import utils
|
from neutron.plugins.vmware.common import utils
|
||||||
from neutron.plugins.vmware.nsxlib import _build_uri_path
|
from neutron.plugins.vmware import nsxlib
|
||||||
from neutron.plugins.vmware.nsxlib import do_request
|
from neutron.plugins.vmware.nsxlib import switch
|
||||||
from neutron.plugins.vmware.nsxlib import get_all_query_pages
|
from neutron.plugins.vmware.nsxlib import versioning
|
||||||
from neutron.plugins.vmware.nsxlib.switch import get_port
|
|
||||||
from neutron.plugins.vmware.nsxlib.versioning import DEFAULT_VERSION
|
|
||||||
from neutron.plugins.vmware.nsxlib.versioning import versioned
|
|
||||||
|
|
||||||
HTTP_GET = "GET"
|
HTTP_GET = "GET"
|
||||||
HTTP_POST = "POST"
|
HTTP_POST = "POST"
|
||||||
@ -80,8 +77,9 @@ def _create_implicit_routing_lrouter(cluster, neutron_router_id, tenant_id,
|
|||||||
"SingleDefaultRouteImplicitRoutingConfig",
|
"SingleDefaultRouteImplicitRoutingConfig",
|
||||||
distributed=distributed,
|
distributed=distributed,
|
||||||
**implicit_routing_config)
|
**implicit_routing_config)
|
||||||
return do_request(HTTP_POST, _build_uri_path(LROUTER_RESOURCE),
|
return nsxlib.do_request(HTTP_POST,
|
||||||
jsonutils.dumps(lrouter_obj), cluster=cluster)
|
nsxlib._build_uri_path(LROUTER_RESOURCE),
|
||||||
|
jsonutils.dumps(lrouter_obj), cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def create_implicit_routing_lrouter(cluster, neutron_router_id, tenant_id,
|
def create_implicit_routing_lrouter(cluster, neutron_router_id, tenant_id,
|
||||||
@ -125,33 +123,36 @@ def create_explicit_routing_lrouter(cluster, neutron_router_id, tenant_id,
|
|||||||
lrouter_obj = _prepare_lrouter_body(
|
lrouter_obj = _prepare_lrouter_body(
|
||||||
display_name, neutron_router_id, tenant_id,
|
display_name, neutron_router_id, tenant_id,
|
||||||
"RoutingTableRoutingConfig", distributed=distributed)
|
"RoutingTableRoutingConfig", distributed=distributed)
|
||||||
router = do_request(HTTP_POST, _build_uri_path(LROUTER_RESOURCE),
|
router = nsxlib.do_request(HTTP_POST,
|
||||||
jsonutils.dumps(lrouter_obj), cluster=cluster)
|
nsxlib._build_uri_path(LROUTER_RESOURCE),
|
||||||
|
jsonutils.dumps(lrouter_obj), cluster=cluster)
|
||||||
default_gw = {'prefix': '0.0.0.0/0', 'next_hop_ip': nexthop}
|
default_gw = {'prefix': '0.0.0.0/0', 'next_hop_ip': nexthop}
|
||||||
create_explicit_route_lrouter(cluster, router['uuid'], default_gw)
|
create_explicit_route_lrouter(cluster, router['uuid'], default_gw)
|
||||||
return router
|
return router
|
||||||
|
|
||||||
|
|
||||||
def delete_lrouter(cluster, lrouter_id):
|
def delete_lrouter(cluster, lrouter_id):
|
||||||
do_request(HTTP_DELETE, _build_uri_path(LROUTER_RESOURCE,
|
nsxlib.do_request(HTTP_DELETE,
|
||||||
resource_id=lrouter_id),
|
nsxlib._build_uri_path(LROUTER_RESOURCE,
|
||||||
cluster=cluster)
|
resource_id=lrouter_id),
|
||||||
|
|
||||||
|
|
||||||
def get_lrouter(cluster, lrouter_id):
|
|
||||||
return do_request(HTTP_GET,
|
|
||||||
_build_uri_path(LROUTER_RESOURCE,
|
|
||||||
resource_id=lrouter_id,
|
|
||||||
relations='LogicalRouterStatus'),
|
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
|
def get_lrouter(cluster, lrouter_id):
|
||||||
|
return nsxlib.do_request(HTTP_GET,
|
||||||
|
nsxlib._build_uri_path(
|
||||||
|
LROUTER_RESOURCE,
|
||||||
|
resource_id=lrouter_id,
|
||||||
|
relations='LogicalRouterStatus'),
|
||||||
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def query_lrouters(cluster, fields=None, filters=None):
|
def query_lrouters(cluster, fields=None, filters=None):
|
||||||
return get_all_query_pages(
|
return nsxlib.get_all_query_pages(
|
||||||
_build_uri_path(LROUTER_RESOURCE,
|
nsxlib._build_uri_path(LROUTER_RESOURCE,
|
||||||
fields=fields,
|
fields=fields,
|
||||||
relations='LogicalRouterStatus',
|
relations='LogicalRouterStatus',
|
||||||
filters=filters),
|
filters=filters),
|
||||||
cluster)
|
cluster)
|
||||||
|
|
||||||
|
|
||||||
@ -180,39 +181,40 @@ def update_implicit_routing_lrouter(cluster, r_id, display_name, nexthop):
|
|||||||
"default_route_next_hop")
|
"default_route_next_hop")
|
||||||
if nh_element:
|
if nh_element:
|
||||||
nh_element["gateway_ip_address"] = nexthop
|
nh_element["gateway_ip_address"] = nexthop
|
||||||
return do_request(HTTP_PUT, _build_uri_path(LROUTER_RESOURCE,
|
return nsxlib.do_request(HTTP_PUT,
|
||||||
resource_id=r_id),
|
nsxlib._build_uri_path(LROUTER_RESOURCE,
|
||||||
jsonutils.dumps(lrouter_obj),
|
resource_id=r_id),
|
||||||
cluster=cluster)
|
jsonutils.dumps(lrouter_obj),
|
||||||
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def get_explicit_routes_lrouter(cluster, router_id, protocol_type='static'):
|
def get_explicit_routes_lrouter(cluster, router_id, protocol_type='static'):
|
||||||
static_filter = {'protocol': protocol_type}
|
static_filter = {'protocol': protocol_type}
|
||||||
existing_routes = do_request(
|
existing_routes = nsxlib.do_request(
|
||||||
HTTP_GET,
|
HTTP_GET,
|
||||||
_build_uri_path(LROUTERRIB_RESOURCE,
|
nsxlib._build_uri_path(LROUTERRIB_RESOURCE,
|
||||||
filters=static_filter,
|
filters=static_filter,
|
||||||
fields="*",
|
fields="*",
|
||||||
parent_resource_id=router_id),
|
parent_resource_id=router_id),
|
||||||
cluster=cluster)['results']
|
cluster=cluster)['results']
|
||||||
return existing_routes
|
return existing_routes
|
||||||
|
|
||||||
|
|
||||||
def delete_explicit_route_lrouter(cluster, router_id, route_id):
|
def delete_explicit_route_lrouter(cluster, router_id, route_id):
|
||||||
do_request(HTTP_DELETE,
|
nsxlib.do_request(HTTP_DELETE,
|
||||||
_build_uri_path(LROUTERRIB_RESOURCE,
|
nsxlib._build_uri_path(LROUTERRIB_RESOURCE,
|
||||||
resource_id=route_id,
|
resource_id=route_id,
|
||||||
parent_resource_id=router_id),
|
parent_resource_id=router_id),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def create_explicit_route_lrouter(cluster, router_id, route):
|
def create_explicit_route_lrouter(cluster, router_id, route):
|
||||||
next_hop_ip = route.get("nexthop") or route.get("next_hop_ip")
|
next_hop_ip = route.get("nexthop") or route.get("next_hop_ip")
|
||||||
prefix = route.get("destination") or route.get("prefix")
|
prefix = route.get("destination") or route.get("prefix")
|
||||||
uuid = do_request(
|
uuid = nsxlib.do_request(
|
||||||
HTTP_POST,
|
HTTP_POST,
|
||||||
_build_uri_path(LROUTERRIB_RESOURCE,
|
nsxlib._build_uri_path(LROUTERRIB_RESOURCE,
|
||||||
parent_resource_id=router_id),
|
parent_resource_id=router_id),
|
||||||
jsonutils.dumps({
|
jsonutils.dumps({
|
||||||
"action": "accept",
|
"action": "accept",
|
||||||
"next_hop_ip": next_hop_ip,
|
"next_hop_ip": next_hop_ip,
|
||||||
@ -267,12 +269,12 @@ def update_explicit_routes_lrouter(cluster, router_id, routes):
|
|||||||
def get_default_route_explicit_routing_lrouter_v33(cluster, router_id):
|
def get_default_route_explicit_routing_lrouter_v33(cluster, router_id):
|
||||||
static_filter = {"protocol": "static",
|
static_filter = {"protocol": "static",
|
||||||
"prefix": "0.0.0.0/0"}
|
"prefix": "0.0.0.0/0"}
|
||||||
default_route = do_request(
|
default_route = nsxlib.do_request(
|
||||||
HTTP_GET,
|
HTTP_GET,
|
||||||
_build_uri_path(LROUTERRIB_RESOURCE,
|
nsxlib._build_uri_path(LROUTERRIB_RESOURCE,
|
||||||
filters=static_filter,
|
filters=static_filter,
|
||||||
fields="*",
|
fields="*",
|
||||||
parent_resource_id=router_id),
|
parent_resource_id=router_id),
|
||||||
cluster=cluster)["results"][0]
|
cluster=cluster)["results"][0]
|
||||||
return default_route
|
return default_route
|
||||||
|
|
||||||
@ -293,12 +295,13 @@ def update_default_gw_explicit_routing_lrouter(cluster, router_id, next_hop):
|
|||||||
"next_hop_ip": next_hop,
|
"next_hop_ip": next_hop,
|
||||||
"prefix": "0.0.0.0/0",
|
"prefix": "0.0.0.0/0",
|
||||||
"protocol": "static"}
|
"protocol": "static"}
|
||||||
do_request(HTTP_PUT,
|
nsxlib.do_request(HTTP_PUT,
|
||||||
_build_uri_path(LROUTERRIB_RESOURCE,
|
nsxlib._build_uri_path(
|
||||||
resource_id=default_route['uuid'],
|
LROUTERRIB_RESOURCE,
|
||||||
parent_resource_id=router_id),
|
resource_id=default_route['uuid'],
|
||||||
jsonutils.dumps(new_default_route),
|
parent_resource_id=router_id),
|
||||||
cluster=cluster)
|
jsonutils.dumps(new_default_route),
|
||||||
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def update_explicit_routing_lrouter(cluster, router_id,
|
def update_explicit_routing_lrouter(cluster, router_id,
|
||||||
@ -313,9 +316,11 @@ def update_explicit_routing_lrouter(cluster, router_id,
|
|||||||
|
|
||||||
def query_lrouter_lports(cluster, lr_uuid, fields="*",
|
def query_lrouter_lports(cluster, lr_uuid, fields="*",
|
||||||
filters=None, relations=None):
|
filters=None, relations=None):
|
||||||
uri = _build_uri_path(LROUTERPORT_RESOURCE, parent_resource_id=lr_uuid,
|
uri = nsxlib._build_uri_path(LROUTERPORT_RESOURCE,
|
||||||
fields=fields, filters=filters, relations=relations)
|
parent_resource_id=lr_uuid,
|
||||||
return do_request(HTTP_GET, uri, cluster=cluster)['results']
|
fields=fields, filters=filters,
|
||||||
|
relations=relations)
|
||||||
|
return nsxlib.do_request(HTTP_GET, uri, cluster=cluster)['results']
|
||||||
|
|
||||||
|
|
||||||
def create_router_lport(cluster, lrouter_uuid, tenant_id, neutron_port_id,
|
def create_router_lport(cluster, lrouter_uuid, tenant_id, neutron_port_id,
|
||||||
@ -333,10 +338,10 @@ def create_router_lport(cluster, lrouter_uuid, tenant_id, neutron_port_id,
|
|||||||
# when creating the fake_ext_gw there is no mac_address present.
|
# when creating the fake_ext_gw there is no mac_address present.
|
||||||
if mac_address:
|
if mac_address:
|
||||||
lport_obj['mac_address'] = mac_address
|
lport_obj['mac_address'] = mac_address
|
||||||
path = _build_uri_path(LROUTERPORT_RESOURCE,
|
path = nsxlib._build_uri_path(LROUTERPORT_RESOURCE,
|
||||||
parent_resource_id=lrouter_uuid)
|
parent_resource_id=lrouter_uuid)
|
||||||
result = do_request(HTTP_POST, path, jsonutils.dumps(lport_obj),
|
result = nsxlib.do_request(HTTP_POST, path, jsonutils.dumps(lport_obj),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
|
|
||||||
LOG.debug(_("Created logical port %(lport_uuid)s on "
|
LOG.debug(_("Created logical port %(lport_uuid)s on "
|
||||||
"logical router %(lrouter_uuid)s"),
|
"logical router %(lrouter_uuid)s"),
|
||||||
@ -360,12 +365,12 @@ def update_router_lport(cluster, lrouter_uuid, lrouter_port_uuid,
|
|||||||
for key in lport_obj.keys():
|
for key in lport_obj.keys():
|
||||||
if lport_obj[key] is None:
|
if lport_obj[key] is None:
|
||||||
del lport_obj[key]
|
del lport_obj[key]
|
||||||
path = _build_uri_path(LROUTERPORT_RESOURCE,
|
path = nsxlib._build_uri_path(LROUTERPORT_RESOURCE,
|
||||||
lrouter_port_uuid,
|
lrouter_port_uuid,
|
||||||
parent_resource_id=lrouter_uuid)
|
parent_resource_id=lrouter_uuid)
|
||||||
result = do_request(HTTP_PUT, path,
|
result = nsxlib.do_request(HTTP_PUT, path,
|
||||||
jsonutils.dumps(lport_obj),
|
jsonutils.dumps(lport_obj),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
LOG.debug(_("Updated logical port %(lport_uuid)s on "
|
LOG.debug(_("Updated logical port %(lport_uuid)s on "
|
||||||
"logical router %(lrouter_uuid)s"),
|
"logical router %(lrouter_uuid)s"),
|
||||||
{'lport_uuid': lrouter_port_uuid, 'lrouter_uuid': lrouter_uuid})
|
{'lport_uuid': lrouter_port_uuid, 'lrouter_uuid': lrouter_uuid})
|
||||||
@ -374,8 +379,9 @@ def update_router_lport(cluster, lrouter_uuid, lrouter_port_uuid,
|
|||||||
|
|
||||||
def delete_router_lport(cluster, lrouter_uuid, lport_uuid):
|
def delete_router_lport(cluster, lrouter_uuid, lport_uuid):
|
||||||
"""Creates a logical port on the assigned logical router."""
|
"""Creates a logical port on the assigned logical router."""
|
||||||
path = _build_uri_path(LROUTERPORT_RESOURCE, lport_uuid, lrouter_uuid)
|
path = nsxlib._build_uri_path(LROUTERPORT_RESOURCE, lport_uuid,
|
||||||
do_request(HTTP_DELETE, path, cluster=cluster)
|
lrouter_uuid)
|
||||||
|
nsxlib.do_request(HTTP_DELETE, path, cluster=cluster)
|
||||||
LOG.debug(_("Delete logical router port %(lport_uuid)s on "
|
LOG.debug(_("Delete logical router port %(lport_uuid)s on "
|
||||||
"logical router %(lrouter_uuid)s"),
|
"logical router %(lrouter_uuid)s"),
|
||||||
{'lport_uuid': lport_uuid,
|
{'lport_uuid': lport_uuid,
|
||||||
@ -383,8 +389,8 @@ def delete_router_lport(cluster, lrouter_uuid, lport_uuid):
|
|||||||
|
|
||||||
|
|
||||||
def delete_peer_router_lport(cluster, lr_uuid, ls_uuid, lp_uuid):
|
def delete_peer_router_lport(cluster, lr_uuid, ls_uuid, lp_uuid):
|
||||||
nsx_port = get_port(cluster, ls_uuid, lp_uuid,
|
nsx_port = switch.get_port(cluster, ls_uuid, lp_uuid,
|
||||||
relations="LogicalPortAttachment")
|
relations="LogicalPortAttachment")
|
||||||
relations = nsx_port.get('_relations')
|
relations = nsx_port.get('_relations')
|
||||||
if relations:
|
if relations:
|
||||||
att_data = relations.get('LogicalPortAttachment')
|
att_data = relations.get('LogicalPortAttachment')
|
||||||
@ -419,8 +425,8 @@ def plug_router_port_attachment(cluster, router_id, port_id,
|
|||||||
- L3GatewayAttachment [-> L3GatewayService uuid]
|
- L3GatewayAttachment [-> L3GatewayService uuid]
|
||||||
For the latter attachment type a VLAN ID can be specified as well.
|
For the latter attachment type a VLAN ID can be specified as well.
|
||||||
"""
|
"""
|
||||||
uri = _build_uri_path(LROUTERPORT_RESOURCE, port_id, router_id,
|
uri = nsxlib._build_uri_path(LROUTERPORT_RESOURCE, port_id, router_id,
|
||||||
is_attachment=True)
|
is_attachment=True)
|
||||||
attach_obj = {}
|
attach_obj = {}
|
||||||
attach_obj["type"] = nsx_attachment_type
|
attach_obj["type"] = nsx_attachment_type
|
||||||
if nsx_attachment_type == "PatchAttachment":
|
if nsx_attachment_type == "PatchAttachment":
|
||||||
@ -432,7 +438,7 @@ def plug_router_port_attachment(cluster, router_id, port_id,
|
|||||||
else:
|
else:
|
||||||
raise nsx_exc.InvalidAttachmentType(
|
raise nsx_exc.InvalidAttachmentType(
|
||||||
attachment_type=nsx_attachment_type)
|
attachment_type=nsx_attachment_type)
|
||||||
return do_request(
|
return nsxlib.do_request(
|
||||||
HTTP_PUT, uri, jsonutils.dumps(attach_obj), cluster=cluster)
|
HTTP_PUT, uri, jsonutils.dumps(attach_obj), cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
@ -447,9 +453,10 @@ def _create_nat_match_obj(**kwargs):
|
|||||||
|
|
||||||
def _create_lrouter_nat_rule(cluster, router_id, nat_rule_obj):
|
def _create_lrouter_nat_rule(cluster, router_id, nat_rule_obj):
|
||||||
LOG.debug(_("Creating NAT rule: %s"), nat_rule_obj)
|
LOG.debug(_("Creating NAT rule: %s"), nat_rule_obj)
|
||||||
uri = _build_uri_path(LROUTERNAT_RESOURCE, parent_resource_id=router_id)
|
uri = nsxlib._build_uri_path(LROUTERNAT_RESOURCE,
|
||||||
return do_request(HTTP_POST, uri, jsonutils.dumps(nat_rule_obj),
|
parent_resource_id=router_id)
|
||||||
cluster=cluster)
|
return nsxlib.do_request(HTTP_POST, uri, jsonutils.dumps(nat_rule_obj),
|
||||||
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def _build_snat_rule_obj(min_src_ip, max_src_ip, nat_match_obj):
|
def _build_snat_rule_obj(min_src_ip, max_src_ip, nat_match_obj):
|
||||||
@ -568,14 +575,15 @@ def delete_nat_rules_by_match(cluster, router_id, rule_type,
|
|||||||
|
|
||||||
|
|
||||||
def delete_router_nat_rule(cluster, router_id, rule_id):
|
def delete_router_nat_rule(cluster, router_id, rule_id):
|
||||||
uri = _build_uri_path(LROUTERNAT_RESOURCE, rule_id, router_id)
|
uri = nsxlib._build_uri_path(LROUTERNAT_RESOURCE, rule_id, router_id)
|
||||||
do_request(HTTP_DELETE, uri, cluster=cluster)
|
nsxlib.do_request(HTTP_DELETE, uri, cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def query_nat_rules(cluster, router_id, fields="*", filters=None):
|
def query_nat_rules(cluster, router_id, fields="*", filters=None):
|
||||||
uri = _build_uri_path(LROUTERNAT_RESOURCE, parent_resource_id=router_id,
|
uri = nsxlib._build_uri_path(LROUTERNAT_RESOURCE,
|
||||||
fields=fields, filters=filters)
|
parent_resource_id=router_id,
|
||||||
return get_all_query_pages(uri, cluster)
|
fields=fields, filters=filters)
|
||||||
|
return nsxlib.get_all_query_pages(uri, cluster)
|
||||||
|
|
||||||
|
|
||||||
# NOTE(salvatore-orlando): The following FIXME applies in general to
|
# NOTE(salvatore-orlando): The following FIXME applies in general to
|
||||||
@ -583,9 +591,9 @@ def query_nat_rules(cluster, router_id, fields="*", filters=None):
|
|||||||
# FIXME(salvatore-orlando): need a lock around the list of IPs on an iface
|
# FIXME(salvatore-orlando): need a lock around the list of IPs on an iface
|
||||||
def update_lrouter_port_ips(cluster, lrouter_id, lport_id,
|
def update_lrouter_port_ips(cluster, lrouter_id, lport_id,
|
||||||
ips_to_add, ips_to_remove):
|
ips_to_add, ips_to_remove):
|
||||||
uri = _build_uri_path(LROUTERPORT_RESOURCE, lport_id, lrouter_id)
|
uri = nsxlib._build_uri_path(LROUTERPORT_RESOURCE, lport_id, lrouter_id)
|
||||||
try:
|
try:
|
||||||
port = do_request(HTTP_GET, uri, cluster=cluster)
|
port = nsxlib.do_request(HTTP_GET, uri, cluster=cluster)
|
||||||
# TODO(salvatore-orlando): Enforce ips_to_add intersection with
|
# TODO(salvatore-orlando): Enforce ips_to_add intersection with
|
||||||
# ips_to_remove is empty
|
# ips_to_remove is empty
|
||||||
ip_address_set = set(port['ip_addresses'])
|
ip_address_set = set(port['ip_addresses'])
|
||||||
@ -593,7 +601,8 @@ def update_lrouter_port_ips(cluster, lrouter_id, lport_id,
|
|||||||
ip_address_set = ip_address_set | set(ips_to_add)
|
ip_address_set = ip_address_set | set(ips_to_add)
|
||||||
# Set is not JSON serializable - convert to list
|
# Set is not JSON serializable - convert to list
|
||||||
port['ip_addresses'] = list(ip_address_set)
|
port['ip_addresses'] = list(ip_address_set)
|
||||||
do_request(HTTP_PUT, uri, jsonutils.dumps(port), cluster=cluster)
|
nsxlib.do_request(HTTP_PUT, uri, jsonutils.dumps(port),
|
||||||
|
cluster=cluster)
|
||||||
except exception.NotFound:
|
except exception.NotFound:
|
||||||
# FIXME(salv-orlando):avoid raising different exception
|
# FIXME(salv-orlando):avoid raising different exception
|
||||||
data = {'lport_id': lport_id, 'lrouter_id': lrouter_id}
|
data = {'lport_id': lport_id, 'lrouter_id': lrouter_id}
|
||||||
@ -610,33 +619,34 @@ def update_lrouter_port_ips(cluster, lrouter_id, lport_id,
|
|||||||
|
|
||||||
ROUTER_FUNC_DICT = {
|
ROUTER_FUNC_DICT = {
|
||||||
'create_lrouter': {
|
'create_lrouter': {
|
||||||
2: {DEFAULT_VERSION: create_implicit_routing_lrouter, },
|
2: {versioning.DEFAULT_VERSION: create_implicit_routing_lrouter, },
|
||||||
3: {DEFAULT_VERSION: create_implicit_routing_lrouter,
|
3: {versioning.DEFAULT_VERSION: create_implicit_routing_lrouter,
|
||||||
1: create_implicit_routing_lrouter_with_distribution,
|
1: create_implicit_routing_lrouter_with_distribution,
|
||||||
2: create_explicit_routing_lrouter, }, },
|
2: create_explicit_routing_lrouter, }, },
|
||||||
'update_lrouter': {
|
'update_lrouter': {
|
||||||
2: {DEFAULT_VERSION: update_implicit_routing_lrouter, },
|
2: {versioning.DEFAULT_VERSION: update_implicit_routing_lrouter, },
|
||||||
3: {DEFAULT_VERSION: update_implicit_routing_lrouter,
|
3: {versioning.DEFAULT_VERSION: update_implicit_routing_lrouter,
|
||||||
2: update_explicit_routing_lrouter, }, },
|
2: update_explicit_routing_lrouter, }, },
|
||||||
'create_lrouter_dnat_rule': {
|
'create_lrouter_dnat_rule': {
|
||||||
2: {DEFAULT_VERSION: create_lrouter_dnat_rule_v2, },
|
2: {versioning.DEFAULT_VERSION: create_lrouter_dnat_rule_v2, },
|
||||||
3: {DEFAULT_VERSION: create_lrouter_dnat_rule_v3, }, },
|
3: {versioning.DEFAULT_VERSION: create_lrouter_dnat_rule_v3, }, },
|
||||||
'create_lrouter_snat_rule': {
|
'create_lrouter_snat_rule': {
|
||||||
2: {DEFAULT_VERSION: create_lrouter_snat_rule_v2, },
|
2: {versioning.DEFAULT_VERSION: create_lrouter_snat_rule_v2, },
|
||||||
3: {DEFAULT_VERSION: create_lrouter_snat_rule_v3, }, },
|
3: {versioning.DEFAULT_VERSION: create_lrouter_snat_rule_v3, }, },
|
||||||
'create_lrouter_nosnat_rule': {
|
'create_lrouter_nosnat_rule': {
|
||||||
2: {DEFAULT_VERSION: create_lrouter_nosnat_rule_v2, },
|
2: {versioning.DEFAULT_VERSION: create_lrouter_nosnat_rule_v2, },
|
||||||
3: {DEFAULT_VERSION: create_lrouter_nosnat_rule_v3, }, },
|
3: {versioning.DEFAULT_VERSION: create_lrouter_nosnat_rule_v3, }, },
|
||||||
'create_lrouter_nodnat_rule': {
|
'create_lrouter_nodnat_rule': {
|
||||||
2: {DEFAULT_VERSION: create_lrouter_nodnat_rule_v2, },
|
2: {versioning.DEFAULT_VERSION: create_lrouter_nodnat_rule_v2, },
|
||||||
3: {DEFAULT_VERSION: create_lrouter_nodnat_rule_v3, }, },
|
3: {versioning.DEFAULT_VERSION: create_lrouter_nodnat_rule_v3, }, },
|
||||||
'get_default_route_explicit_routing_lrouter': {
|
'get_default_route_explicit_routing_lrouter': {
|
||||||
3: {DEFAULT_VERSION: get_default_route_explicit_routing_lrouter_v32,
|
3: {versioning.DEFAULT_VERSION:
|
||||||
|
get_default_route_explicit_routing_lrouter_v32,
|
||||||
2: get_default_route_explicit_routing_lrouter_v32, }, },
|
2: get_default_route_explicit_routing_lrouter_v32, }, },
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@versioned(ROUTER_FUNC_DICT)
|
@versioning.versioned(ROUTER_FUNC_DICT)
|
||||||
def create_lrouter(cluster, *args, **kwargs):
|
def create_lrouter(cluster, *args, **kwargs):
|
||||||
if kwargs.get('distributed', None):
|
if kwargs.get('distributed', None):
|
||||||
v = cluster.api_client.get_version()
|
v = cluster.api_client.get_version()
|
||||||
@ -645,12 +655,12 @@ def create_lrouter(cluster, *args, **kwargs):
|
|||||||
return v
|
return v
|
||||||
|
|
||||||
|
|
||||||
@versioned(ROUTER_FUNC_DICT)
|
@versioning.versioned(ROUTER_FUNC_DICT)
|
||||||
def get_default_route_explicit_routing_lrouter(cluster, *args, **kwargs):
|
def get_default_route_explicit_routing_lrouter(cluster, *args, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@versioned(ROUTER_FUNC_DICT)
|
@versioning.versioned(ROUTER_FUNC_DICT)
|
||||||
def update_lrouter(cluster, *args, **kwargs):
|
def update_lrouter(cluster, *args, **kwargs):
|
||||||
if kwargs.get('routes', None):
|
if kwargs.get('routes', None):
|
||||||
v = cluster.api_client.get_version()
|
v = cluster.api_client.get_version()
|
||||||
@ -659,21 +669,21 @@ def update_lrouter(cluster, *args, **kwargs):
|
|||||||
return v
|
return v
|
||||||
|
|
||||||
|
|
||||||
@versioned(ROUTER_FUNC_DICT)
|
@versioning.versioned(ROUTER_FUNC_DICT)
|
||||||
def create_lrouter_dnat_rule(cluster, *args, **kwargs):
|
def create_lrouter_dnat_rule(cluster, *args, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@versioned(ROUTER_FUNC_DICT)
|
@versioning.versioned(ROUTER_FUNC_DICT)
|
||||||
def create_lrouter_snat_rule(cluster, *args, **kwargs):
|
def create_lrouter_snat_rule(cluster, *args, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@versioned(ROUTER_FUNC_DICT)
|
@versioning.versioned(ROUTER_FUNC_DICT)
|
||||||
def create_lrouter_nosnat_rule(cluster, *args, **kwargs):
|
def create_lrouter_nosnat_rule(cluster, *args, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@versioned(ROUTER_FUNC_DICT)
|
@versioning.versioned(ROUTER_FUNC_DICT)
|
||||||
def create_lrouter_nodnat_rule(cluster, *args, **kwargs):
|
def create_lrouter_nodnat_rule(cluster, *args, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
@ -20,10 +20,7 @@ from neutron.common import exceptions
|
|||||||
from neutron.openstack.common import excutils
|
from neutron.openstack.common import excutils
|
||||||
from neutron.openstack.common import log
|
from neutron.openstack.common import log
|
||||||
from neutron.plugins.vmware.common import utils
|
from neutron.plugins.vmware.common import utils
|
||||||
from neutron.plugins.vmware.nsxlib import _build_uri_path
|
from neutron.plugins.vmware import nsxlib
|
||||||
from neutron.plugins.vmware.nsxlib import do_request
|
|
||||||
from neutron.plugins.vmware.nsxlib import format_exception
|
|
||||||
from neutron.plugins.vmware.nsxlib import get_all_query_pages
|
|
||||||
|
|
||||||
HTTP_GET = "GET"
|
HTTP_GET = "GET"
|
||||||
HTTP_POST = "POST"
|
HTTP_POST = "POST"
|
||||||
@ -45,10 +42,10 @@ def mk_body(**kwargs):
|
|||||||
|
|
||||||
|
|
||||||
def query_security_profiles(cluster, fields=None, filters=None):
|
def query_security_profiles(cluster, fields=None, filters=None):
|
||||||
return get_all_query_pages(
|
return nsxlib.get_all_query_pages(
|
||||||
_build_uri_path(SECPROF_RESOURCE,
|
nsxlib._build_uri_path(SECPROF_RESOURCE,
|
||||||
fields=fields,
|
fields=fields,
|
||||||
filters=filters),
|
filters=filters),
|
||||||
cluster)
|
cluster)
|
||||||
|
|
||||||
|
|
||||||
@ -82,7 +79,7 @@ def create_security_profile(cluster, tenant_id, neutron_id, security_profile):
|
|||||||
hidden_rules['logical_port_ingress_rules']),
|
hidden_rules['logical_port_ingress_rules']),
|
||||||
logical_port_egress_rules=hidden_rules['logical_port_egress_rules']
|
logical_port_egress_rules=hidden_rules['logical_port_egress_rules']
|
||||||
)
|
)
|
||||||
rsp = do_request(HTTP_POST, path, body, cluster=cluster)
|
rsp = nsxlib.do_request(HTTP_POST, path, body, cluster=cluster)
|
||||||
if security_profile.get('name') == 'default':
|
if security_profile.get('name') == 'default':
|
||||||
# If security group is default allow ip traffic between
|
# If security group is default allow ip traffic between
|
||||||
# members of the same security profile is allowed and ingress traffic
|
# members of the same security profile is allowed and ingress traffic
|
||||||
@ -116,9 +113,9 @@ def update_security_group_rules(cluster, spid, rules):
|
|||||||
body = mk_body(
|
body = mk_body(
|
||||||
logical_port_ingress_rules=rules['logical_port_ingress_rules'],
|
logical_port_ingress_rules=rules['logical_port_ingress_rules'],
|
||||||
logical_port_egress_rules=rules['logical_port_egress_rules'])
|
logical_port_egress_rules=rules['logical_port_egress_rules'])
|
||||||
rsp = do_request(HTTP_PUT, path, body, cluster=cluster)
|
rsp = nsxlib.do_request(HTTP_PUT, path, body, cluster=cluster)
|
||||||
except exceptions.NotFound as e:
|
except exceptions.NotFound as e:
|
||||||
LOG.error(format_exception("Unknown", e, locals()))
|
LOG.error(nsxlib.format_exception("Unknown", e, locals()))
|
||||||
#FIXME(salvatore-orlando): This should not raise NeutronException
|
#FIXME(salvatore-orlando): This should not raise NeutronException
|
||||||
raise exceptions.NeutronException()
|
raise exceptions.NeutronException()
|
||||||
LOG.debug(_("Updated Security Profile: %s"), rsp)
|
LOG.debug(_("Updated Security Profile: %s"), rsp)
|
||||||
@ -126,19 +123,20 @@ def update_security_group_rules(cluster, spid, rules):
|
|||||||
|
|
||||||
|
|
||||||
def update_security_profile(cluster, spid, name):
|
def update_security_profile(cluster, spid, name):
|
||||||
return do_request(HTTP_PUT,
|
return nsxlib.do_request(HTTP_PUT,
|
||||||
_build_uri_path(SECPROF_RESOURCE, resource_id=spid),
|
nsxlib._build_uri_path(SECPROF_RESOURCE,
|
||||||
json.dumps({
|
resource_id=spid),
|
||||||
"display_name": utils.check_and_truncate(name)
|
json.dumps({
|
||||||
}),
|
"display_name": utils.check_and_truncate(name)
|
||||||
cluster=cluster)
|
}),
|
||||||
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def delete_security_profile(cluster, spid):
|
def delete_security_profile(cluster, spid):
|
||||||
path = "/ws.v1/security-profile/%s" % spid
|
path = "/ws.v1/security-profile/%s" % spid
|
||||||
|
|
||||||
try:
|
try:
|
||||||
do_request(HTTP_DELETE, path, cluster=cluster)
|
nsxlib.do_request(HTTP_DELETE, path, cluster=cluster)
|
||||||
except exceptions.NotFound:
|
except exceptions.NotFound:
|
||||||
with excutils.save_and_reraise_exception():
|
with excutils.save_and_reraise_exception():
|
||||||
# This is not necessarily an error condition
|
# This is not necessarily an error condition
|
||||||
|
@ -24,9 +24,7 @@ from neutron.openstack.common import log
|
|||||||
from neutron.plugins.vmware.api_client import exception as api_exc
|
from neutron.plugins.vmware.api_client import exception as api_exc
|
||||||
from neutron.plugins.vmware.common import exceptions as nsx_exc
|
from neutron.plugins.vmware.common import exceptions as nsx_exc
|
||||||
from neutron.plugins.vmware.common import utils
|
from neutron.plugins.vmware.common import utils
|
||||||
from neutron.plugins.vmware.nsxlib import _build_uri_path
|
from neutron.plugins.vmware import nsxlib
|
||||||
from neutron.plugins.vmware.nsxlib import do_request
|
|
||||||
from neutron.plugins.vmware.nsxlib import get_all_query_pages
|
|
||||||
|
|
||||||
HTTP_GET = "GET"
|
HTTP_GET = "GET"
|
||||||
HTTP_POST = "POST"
|
HTTP_POST = "POST"
|
||||||
@ -68,10 +66,10 @@ def _configure_extensions(lport_obj, mac_address, fixed_ips,
|
|||||||
|
|
||||||
def get_lswitch_by_id(cluster, lswitch_id):
|
def get_lswitch_by_id(cluster, lswitch_id):
|
||||||
try:
|
try:
|
||||||
lswitch_uri_path = _build_uri_path(
|
lswitch_uri_path = nsxlib._build_uri_path(
|
||||||
LSWITCH_RESOURCE, lswitch_id,
|
LSWITCH_RESOURCE, lswitch_id,
|
||||||
relations="LogicalSwitchStatus")
|
relations="LogicalSwitchStatus")
|
||||||
return do_request(HTTP_GET, lswitch_uri_path, cluster=cluster)
|
return nsxlib.do_request(HTTP_GET, lswitch_uri_path, cluster=cluster)
|
||||||
except exception.NotFound:
|
except exception.NotFound:
|
||||||
# FIXME(salv-orlando): this should not raise a neutron exception
|
# FIXME(salv-orlando): this should not raise a neutron exception
|
||||||
raise exception.NetworkNotFound(net_id=lswitch_id)
|
raise exception.NetworkNotFound(net_id=lswitch_id)
|
||||||
@ -81,19 +79,19 @@ def get_lswitches(cluster, neutron_net_id):
|
|||||||
|
|
||||||
def lookup_switches_by_tag():
|
def lookup_switches_by_tag():
|
||||||
# Fetch extra logical switches
|
# Fetch extra logical switches
|
||||||
lswitch_query_path = _build_uri_path(
|
lswitch_query_path = nsxlib._build_uri_path(
|
||||||
LSWITCH_RESOURCE,
|
LSWITCH_RESOURCE,
|
||||||
fields="uuid,display_name,tags,lport_count",
|
fields="uuid,display_name,tags,lport_count",
|
||||||
relations="LogicalSwitchStatus",
|
relations="LogicalSwitchStatus",
|
||||||
filters={'tag': neutron_net_id,
|
filters={'tag': neutron_net_id,
|
||||||
'tag_scope': 'quantum_net_id'})
|
'tag_scope': 'quantum_net_id'})
|
||||||
return get_all_query_pages(lswitch_query_path, cluster)
|
return nsxlib.get_all_query_pages(lswitch_query_path, cluster)
|
||||||
|
|
||||||
lswitch_uri_path = _build_uri_path(LSWITCH_RESOURCE, neutron_net_id,
|
lswitch_uri_path = nsxlib._build_uri_path(LSWITCH_RESOURCE, neutron_net_id,
|
||||||
relations="LogicalSwitchStatus")
|
relations="LogicalSwitchStatus")
|
||||||
results = []
|
results = []
|
||||||
try:
|
try:
|
||||||
ls = do_request(HTTP_GET, lswitch_uri_path, cluster=cluster)
|
ls = nsxlib.do_request(HTTP_GET, lswitch_uri_path, cluster=cluster)
|
||||||
results.append(ls)
|
results.append(ls)
|
||||||
for tag in ls['tags']:
|
for tag in ls['tags']:
|
||||||
if (tag['scope'] == "multi_lswitch" and
|
if (tag['scope'] == "multi_lswitch" and
|
||||||
@ -127,23 +125,23 @@ def create_lswitch(cluster, neutron_net_id, tenant_id, display_name,
|
|||||||
"scope": "shared"})
|
"scope": "shared"})
|
||||||
if "tags" in kwargs:
|
if "tags" in kwargs:
|
||||||
lswitch_obj["tags"].extend(kwargs["tags"])
|
lswitch_obj["tags"].extend(kwargs["tags"])
|
||||||
uri = _build_uri_path(LSWITCH_RESOURCE)
|
uri = nsxlib._build_uri_path(LSWITCH_RESOURCE)
|
||||||
lswitch = do_request(HTTP_POST, uri, json.dumps(lswitch_obj),
|
lswitch = nsxlib.do_request(HTTP_POST, uri, json.dumps(lswitch_obj),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
LOG.debug(_("Created logical switch: %s"), lswitch['uuid'])
|
LOG.debug(_("Created logical switch: %s"), lswitch['uuid'])
|
||||||
return lswitch
|
return lswitch
|
||||||
|
|
||||||
|
|
||||||
def update_lswitch(cluster, lswitch_id, display_name,
|
def update_lswitch(cluster, lswitch_id, display_name,
|
||||||
tenant_id=None, **kwargs):
|
tenant_id=None, **kwargs):
|
||||||
uri = _build_uri_path(LSWITCH_RESOURCE, resource_id=lswitch_id)
|
uri = nsxlib._build_uri_path(LSWITCH_RESOURCE, resource_id=lswitch_id)
|
||||||
lswitch_obj = {"display_name": utils.check_and_truncate(display_name),
|
lswitch_obj = {"display_name": utils.check_and_truncate(display_name),
|
||||||
"tags": utils.get_tags(os_tid=tenant_id)}
|
"tags": utils.get_tags(os_tid=tenant_id)}
|
||||||
if "tags" in kwargs:
|
if "tags" in kwargs:
|
||||||
lswitch_obj["tags"].extend(kwargs["tags"])
|
lswitch_obj["tags"].extend(kwargs["tags"])
|
||||||
try:
|
try:
|
||||||
return do_request(HTTP_PUT, uri, json.dumps(lswitch_obj),
|
return nsxlib.do_request(HTTP_PUT, uri, json.dumps(lswitch_obj),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
except exception.NotFound as e:
|
except exception.NotFound as e:
|
||||||
LOG.error(_("Network not found, Error: %s"), str(e))
|
LOG.error(_("Network not found, Error: %s"), str(e))
|
||||||
raise exception.NetworkNotFound(net_id=lswitch_id)
|
raise exception.NetworkNotFound(net_id=lswitch_id)
|
||||||
@ -158,7 +156,7 @@ def delete_networks(cluster, net_id, lswitch_ids):
|
|||||||
for ls_id in lswitch_ids:
|
for ls_id in lswitch_ids:
|
||||||
path = "/ws.v1/lswitch/%s" % ls_id
|
path = "/ws.v1/lswitch/%s" % ls_id
|
||||||
try:
|
try:
|
||||||
do_request(HTTP_DELETE, path, cluster=cluster)
|
nsxlib.do_request(HTTP_DELETE, path, cluster=cluster)
|
||||||
except exception.NotFound as e:
|
except exception.NotFound as e:
|
||||||
LOG.error(_("Network not found, Error: %s"), str(e))
|
LOG.error(_("Network not found, Error: %s"), str(e))
|
||||||
raise exception.NetworkNotFound(net_id=ls_id)
|
raise exception.NetworkNotFound(net_id=ls_id)
|
||||||
@ -170,15 +168,18 @@ def query_lswitch_lports(cluster, ls_uuid, fields="*",
|
|||||||
if filters and "attachment" in filters:
|
if filters and "attachment" in filters:
|
||||||
filters['attachment_vif_uuid'] = filters["attachment"]
|
filters['attachment_vif_uuid'] = filters["attachment"]
|
||||||
del filters['attachment']
|
del filters['attachment']
|
||||||
uri = _build_uri_path(LSWITCHPORT_RESOURCE, parent_resource_id=ls_uuid,
|
uri = nsxlib._build_uri_path(LSWITCHPORT_RESOURCE,
|
||||||
fields=fields, filters=filters, relations=relations)
|
parent_resource_id=ls_uuid,
|
||||||
return do_request(HTTP_GET, uri, cluster=cluster)['results']
|
fields=fields,
|
||||||
|
filters=filters,
|
||||||
|
relations=relations)
|
||||||
|
return nsxlib.do_request(HTTP_GET, uri, cluster=cluster)['results']
|
||||||
|
|
||||||
|
|
||||||
def delete_port(cluster, switch, port):
|
def delete_port(cluster, switch, port):
|
||||||
uri = "/ws.v1/lswitch/" + switch + "/lport/" + port
|
uri = "/ws.v1/lswitch/" + switch + "/lport/" + port
|
||||||
try:
|
try:
|
||||||
do_request(HTTP_DELETE, uri, cluster=cluster)
|
nsxlib.do_request(HTTP_DELETE, uri, cluster=cluster)
|
||||||
except exception.NotFound:
|
except exception.NotFound:
|
||||||
LOG.exception(_("Port or Network not found"))
|
LOG.exception(_("Port or Network not found"))
|
||||||
raise exception.PortNotFoundOnNetwork(
|
raise exception.PortNotFoundOnNetwork(
|
||||||
@ -234,9 +235,10 @@ def get_ports(cluster, networks=None, devices=None, tenants=None):
|
|||||||
# call. In release L-** or M-**, we might want to swap the calls
|
# call. In release L-** or M-**, we might want to swap the calls
|
||||||
# as it's likely that ports with the new tag would outnumber the
|
# as it's likely that ports with the new tag would outnumber the
|
||||||
# ones with the old tag
|
# ones with the old tag
|
||||||
ports = get_all_query_pages(lport_query_path_obsolete, cluster)
|
ports = nsxlib.get_all_query_pages(lport_query_path_obsolete,
|
||||||
|
cluster)
|
||||||
if not ports:
|
if not ports:
|
||||||
ports = get_all_query_pages(lport_query_path, cluster)
|
ports = nsxlib.get_all_query_pages(lport_query_path, cluster)
|
||||||
except exception.NotFound:
|
except exception.NotFound:
|
||||||
LOG.warn(_("Lswitch %s not found in NSX"), lswitch)
|
LOG.warn(_("Lswitch %s not found in NSX"), lswitch)
|
||||||
ports = None
|
ports = None
|
||||||
@ -259,16 +261,16 @@ def get_port_by_neutron_tag(cluster, lswitch_uuid, neutron_port_id):
|
|||||||
Returns the NSX UUID of the logical port with tag q_port_id equal to
|
Returns the NSX UUID of the logical port with tag q_port_id equal to
|
||||||
neutron_port_id or None if the port is not Found.
|
neutron_port_id or None if the port is not Found.
|
||||||
"""
|
"""
|
||||||
uri = _build_uri_path(LSWITCHPORT_RESOURCE,
|
uri = nsxlib._build_uri_path(LSWITCHPORT_RESOURCE,
|
||||||
parent_resource_id=lswitch_uuid,
|
parent_resource_id=lswitch_uuid,
|
||||||
fields='uuid',
|
fields='uuid',
|
||||||
filters={'tag': neutron_port_id,
|
filters={'tag': neutron_port_id,
|
||||||
'tag_scope': 'q_port_id'})
|
'tag_scope': 'q_port_id'})
|
||||||
LOG.debug(_("Looking for port with q_port_id tag '%(neutron_port_id)s' "
|
LOG.debug(_("Looking for port with q_port_id tag '%(neutron_port_id)s' "
|
||||||
"on: '%(lswitch_uuid)s'"),
|
"on: '%(lswitch_uuid)s'"),
|
||||||
{'neutron_port_id': neutron_port_id,
|
{'neutron_port_id': neutron_port_id,
|
||||||
'lswitch_uuid': lswitch_uuid})
|
'lswitch_uuid': lswitch_uuid})
|
||||||
res = do_request(HTTP_GET, uri, cluster=cluster)
|
res = nsxlib.do_request(HTTP_GET, uri, cluster=cluster)
|
||||||
num_results = len(res["results"])
|
num_results = len(res["results"])
|
||||||
if num_results >= 1:
|
if num_results >= 1:
|
||||||
if num_results > 1:
|
if num_results > 1:
|
||||||
@ -287,7 +289,7 @@ def get_port(cluster, network, port, relations=None):
|
|||||||
if relations:
|
if relations:
|
||||||
uri += "relations=%s" % relations
|
uri += "relations=%s" % relations
|
||||||
try:
|
try:
|
||||||
return do_request(HTTP_GET, uri, cluster=cluster)
|
return nsxlib.do_request(HTTP_GET, uri, cluster=cluster)
|
||||||
except exception.NotFound as e:
|
except exception.NotFound as e:
|
||||||
LOG.error(_("Port or Network not found, Error: %s"), str(e))
|
LOG.error(_("Port or Network not found, Error: %s"), str(e))
|
||||||
raise exception.PortNotFoundOnNetwork(
|
raise exception.PortNotFoundOnNetwork(
|
||||||
@ -313,8 +315,8 @@ def update_port(cluster, lswitch_uuid, lport_uuid, neutron_port_id, tenant_id,
|
|||||||
|
|
||||||
path = "/ws.v1/lswitch/" + lswitch_uuid + "/lport/" + lport_uuid
|
path = "/ws.v1/lswitch/" + lswitch_uuid + "/lport/" + lport_uuid
|
||||||
try:
|
try:
|
||||||
result = do_request(HTTP_PUT, path, json.dumps(lport_obj),
|
result = nsxlib.do_request(HTTP_PUT, path, json.dumps(lport_obj),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
LOG.debug(_("Updated logical port %(result)s "
|
LOG.debug(_("Updated logical port %(result)s "
|
||||||
"on logical switch %(uuid)s"),
|
"on logical switch %(uuid)s"),
|
||||||
{'result': result['uuid'], 'uuid': lswitch_uuid})
|
{'result': result['uuid'], 'uuid': lswitch_uuid})
|
||||||
@ -345,10 +347,10 @@ def create_lport(cluster, lswitch_uuid, tenant_id, neutron_port_id,
|
|||||||
queue_id, mac_learning_enabled,
|
queue_id, mac_learning_enabled,
|
||||||
allowed_address_pairs)
|
allowed_address_pairs)
|
||||||
|
|
||||||
path = _build_uri_path(LSWITCHPORT_RESOURCE,
|
path = nsxlib._build_uri_path(LSWITCHPORT_RESOURCE,
|
||||||
parent_resource_id=lswitch_uuid)
|
parent_resource_id=lswitch_uuid)
|
||||||
result = do_request(HTTP_POST, path, json.dumps(lport_obj),
|
result = nsxlib.do_request(HTTP_POST, path, json.dumps(lport_obj),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
|
|
||||||
LOG.debug(_("Created logical port %(result)s on logical switch %(uuid)s"),
|
LOG.debug(_("Created logical port %(result)s on logical switch %(uuid)s"),
|
||||||
{'result': result['uuid'], 'uuid': lswitch_uuid})
|
{'result': result['uuid'], 'uuid': lswitch_uuid})
|
||||||
@ -358,9 +360,9 @@ def create_lport(cluster, lswitch_uuid, tenant_id, neutron_port_id,
|
|||||||
def get_port_status(cluster, lswitch_id, port_id):
|
def get_port_status(cluster, lswitch_id, port_id):
|
||||||
"""Retrieve the operational status of the port."""
|
"""Retrieve the operational status of the port."""
|
||||||
try:
|
try:
|
||||||
r = do_request(HTTP_GET,
|
r = nsxlib.do_request(HTTP_GET,
|
||||||
"/ws.v1/lswitch/%s/lport/%s/status" %
|
"/ws.v1/lswitch/%s/lport/%s/status" %
|
||||||
(lswitch_id, port_id), cluster=cluster)
|
(lswitch_id, port_id), cluster=cluster)
|
||||||
except exception.NotFound as e:
|
except exception.NotFound as e:
|
||||||
LOG.error(_("Port not found, Error: %s"), str(e))
|
LOG.error(_("Port not found, Error: %s"), str(e))
|
||||||
raise exception.PortNotFoundOnNetwork(
|
raise exception.PortNotFoundOnNetwork(
|
||||||
@ -372,12 +374,12 @@ def get_port_status(cluster, lswitch_id, port_id):
|
|||||||
|
|
||||||
|
|
||||||
def plug_interface(cluster, lswitch_id, lport_id, att_obj):
|
def plug_interface(cluster, lswitch_id, lport_id, att_obj):
|
||||||
return do_request(HTTP_PUT,
|
return nsxlib.do_request(HTTP_PUT,
|
||||||
_build_uri_path(LSWITCHPORT_RESOURCE,
|
nsxlib._build_uri_path(LSWITCHPORT_RESOURCE,
|
||||||
lport_id, lswitch_id,
|
lport_id, lswitch_id,
|
||||||
is_attachment=True),
|
is_attachment=True),
|
||||||
json.dumps(att_obj),
|
json.dumps(att_obj),
|
||||||
cluster=cluster)
|
cluster=cluster)
|
||||||
|
|
||||||
|
|
||||||
def plug_vif_interface(
|
def plug_vif_interface(
|
||||||
|
@ -60,7 +60,7 @@ from neutron.plugins.vmware.common import exceptions as nsx_exc
|
|||||||
from neutron.plugins.vmware.common import nsx_utils
|
from neutron.plugins.vmware.common import nsx_utils
|
||||||
from neutron.plugins.vmware.common import securitygroups as sg_utils
|
from neutron.plugins.vmware.common import securitygroups as sg_utils
|
||||||
from neutron.plugins.vmware.common import sync
|
from neutron.plugins.vmware.common import sync
|
||||||
from neutron.plugins.vmware.common.utils import NetworkTypes
|
from neutron.plugins.vmware.common import utils as c_utils
|
||||||
from neutron.plugins.vmware.dbexts import db as nsx_db
|
from neutron.plugins.vmware.dbexts import db as nsx_db
|
||||||
from neutron.plugins.vmware.dbexts import distributedrouter as dist_rtr
|
from neutron.plugins.vmware.dbexts import distributedrouter as dist_rtr
|
||||||
from neutron.plugins.vmware.dbexts import maclearning as mac_db
|
from neutron.plugins.vmware.dbexts import maclearning as mac_db
|
||||||
@ -374,8 +374,8 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
|||||||
max_ports = self.nsx_opts.max_lp_per_overlay_ls
|
max_ports = self.nsx_opts.max_lp_per_overlay_ls
|
||||||
allow_extra_lswitches = False
|
allow_extra_lswitches = False
|
||||||
for network_binding in network_bindings:
|
for network_binding in network_bindings:
|
||||||
if network_binding.binding_type in (NetworkTypes.FLAT,
|
if network_binding.binding_type in (c_utils.NetworkTypes.FLAT,
|
||||||
NetworkTypes.VLAN):
|
c_utils.NetworkTypes.VLAN):
|
||||||
max_ports = self.nsx_opts.max_lp_per_bridged_ls
|
max_ports = self.nsx_opts.max_lp_per_bridged_ls
|
||||||
allow_extra_lswitches = True
|
allow_extra_lswitches = True
|
||||||
break
|
break
|
||||||
@ -621,7 +621,7 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
|||||||
True,
|
True,
|
||||||
ip_addresses)
|
ip_addresses)
|
||||||
ext_network = self.get_network(context, port_data['network_id'])
|
ext_network = self.get_network(context, port_data['network_id'])
|
||||||
if ext_network.get(pnet.NETWORK_TYPE) == NetworkTypes.L3_EXT:
|
if ext_network.get(pnet.NETWORK_TYPE) == c_utils.NetworkTypes.L3_EXT:
|
||||||
# Update attachment
|
# Update attachment
|
||||||
physical_network = (ext_network[pnet.PHYSICAL_NETWORK] or
|
physical_network = (ext_network[pnet.PHYSICAL_NETWORK] or
|
||||||
self.cluster.default_l3_gw_service_uuid)
|
self.cluster.default_l3_gw_service_uuid)
|
||||||
@ -758,12 +758,13 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
|||||||
err_msg = None
|
err_msg = None
|
||||||
if not network_type_set:
|
if not network_type_set:
|
||||||
err_msg = _("%s required") % pnet.NETWORK_TYPE
|
err_msg = _("%s required") % pnet.NETWORK_TYPE
|
||||||
elif network_type in (NetworkTypes.GRE, NetworkTypes.STT,
|
elif network_type in (c_utils.NetworkTypes.GRE,
|
||||||
NetworkTypes.FLAT):
|
c_utils.NetworkTypes.STT,
|
||||||
|
c_utils.NetworkTypes.FLAT):
|
||||||
if segmentation_id_set:
|
if segmentation_id_set:
|
||||||
err_msg = _("Segmentation ID cannot be specified with "
|
err_msg = _("Segmentation ID cannot be specified with "
|
||||||
"flat network type")
|
"flat network type")
|
||||||
elif network_type == NetworkTypes.VLAN:
|
elif network_type == c_utils.NetworkTypes.VLAN:
|
||||||
if not segmentation_id_set:
|
if not segmentation_id_set:
|
||||||
err_msg = _("Segmentation ID must be specified with "
|
err_msg = _("Segmentation ID must be specified with "
|
||||||
"vlan network type")
|
"vlan network type")
|
||||||
@ -782,7 +783,7 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
|||||||
raise n_exc.VlanIdInUse(
|
raise n_exc.VlanIdInUse(
|
||||||
vlan_id=segmentation_id,
|
vlan_id=segmentation_id,
|
||||||
physical_network=physical_network)
|
physical_network=physical_network)
|
||||||
elif network_type == NetworkTypes.L3_EXT:
|
elif network_type == c_utils.NetworkTypes.L3_EXT:
|
||||||
if (segmentation_id_set and
|
if (segmentation_id_set and
|
||||||
not utils.is_valid_vlan_tag(segmentation_id)):
|
not utils.is_valid_vlan_tag(segmentation_id)):
|
||||||
err_msg = (_("%(segmentation_id)s out of range "
|
err_msg = (_("%(segmentation_id)s out of range "
|
||||||
@ -888,9 +889,10 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
|||||||
if bindings:
|
if bindings:
|
||||||
transport_entry = {}
|
transport_entry = {}
|
||||||
for binding in bindings:
|
for binding in bindings:
|
||||||
if binding.binding_type in [NetworkTypes.FLAT,
|
if binding.binding_type in [c_utils.NetworkTypes.FLAT,
|
||||||
NetworkTypes.VLAN]:
|
c_utils.NetworkTypes.VLAN]:
|
||||||
transport_entry['transport_type'] = NetworkTypes.BRIDGE
|
transport_entry['transport_type'] = (
|
||||||
|
c_utils.NetworkTypes.BRIDGE)
|
||||||
transport_entry['binding_config'] = {}
|
transport_entry['binding_config'] = {}
|
||||||
vlan_id = binding.vlan_id
|
vlan_id = binding.vlan_id
|
||||||
if vlan_id:
|
if vlan_id:
|
||||||
@ -910,8 +912,9 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin,
|
|||||||
|
|
||||||
transport_entry = {}
|
transport_entry = {}
|
||||||
transport_type = transport_zone.get(pnet.NETWORK_TYPE)
|
transport_type = transport_zone.get(pnet.NETWORK_TYPE)
|
||||||
if transport_type in [NetworkTypes.FLAT, NetworkTypes.VLAN]:
|
if transport_type in [c_utils.NetworkTypes.FLAT,
|
||||||
transport_entry['transport_type'] = NetworkTypes.BRIDGE
|
c_utils.NetworkTypes.VLAN]:
|
||||||
|
transport_entry['transport_type'] = c_utils.NetworkTypes.BRIDGE
|
||||||
transport_entry['binding_config'] = {}
|
transport_entry['binding_config'] = {}
|
||||||
vlan_id = transport_zone.get(pnet.SEGMENTATION_ID)
|
vlan_id = transport_zone.get(pnet.SEGMENTATION_ID)
|
||||||
if vlan_id:
|
if vlan_id:
|
||||||
|
@ -43,10 +43,8 @@ from neutron.plugins.vmware.nsxlib import router as routerlib
|
|||||||
from neutron.plugins.vmware.nsxlib import switch as switchlib
|
from neutron.plugins.vmware.nsxlib import switch as switchlib
|
||||||
from neutron.plugins.vmware.plugins import base
|
from neutron.plugins.vmware.plugins import base
|
||||||
from neutron.plugins.vmware.vshield.common import constants as vcns_const
|
from neutron.plugins.vmware.vshield.common import constants as vcns_const
|
||||||
from neutron.plugins.vmware.vshield.common.constants import RouterStatus
|
|
||||||
from neutron.plugins.vmware.vshield.common import exceptions
|
from neutron.plugins.vmware.vshield.common import exceptions
|
||||||
from neutron.plugins.vmware.vshield.tasks.constants import TaskState
|
from neutron.plugins.vmware.vshield.tasks import constants as tasks_const
|
||||||
from neutron.plugins.vmware.vshield.tasks.constants import TaskStatus
|
|
||||||
from neutron.plugins.vmware.vshield import vcns_driver
|
from neutron.plugins.vmware.vshield import vcns_driver
|
||||||
from sqlalchemy.orm import exc as sa_exc
|
from sqlalchemy.orm import exc as sa_exc
|
||||||
|
|
||||||
@ -64,15 +62,15 @@ ROUTER_STATUS = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
ROUTER_STATUS_LEVEL = {
|
ROUTER_STATUS_LEVEL = {
|
||||||
service_constants.ACTIVE: RouterStatus.ROUTER_STATUS_ACTIVE,
|
service_constants.ACTIVE: vcns_const.RouterStatus.ROUTER_STATUS_ACTIVE,
|
||||||
service_constants.DOWN: RouterStatus.ROUTER_STATUS_DOWN,
|
service_constants.DOWN: vcns_const.RouterStatus.ROUTER_STATUS_DOWN,
|
||||||
service_constants.PENDING_CREATE: (
|
service_constants.PENDING_CREATE: (
|
||||||
RouterStatus.ROUTER_STATUS_PENDING_CREATE
|
vcns_const.RouterStatus.ROUTER_STATUS_PENDING_CREATE
|
||||||
),
|
),
|
||||||
service_constants.PENDING_DELETE: (
|
service_constants.PENDING_DELETE: (
|
||||||
RouterStatus.ROUTER_STATUS_PENDING_DELETE
|
vcns_const.RouterStatus.ROUTER_STATUS_PENDING_DELETE
|
||||||
),
|
),
|
||||||
service_constants.ERROR: RouterStatus.ROUTER_STATUS_ERROR
|
service_constants.ERROR: vcns_const.RouterStatus.ROUTER_STATUS_ERROR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -310,7 +308,7 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin,
|
|||||||
self.vcns_driver.external_network,
|
self.vcns_driver.external_network,
|
||||||
addr, mask, secondary=secondary)
|
addr, mask, secondary=secondary)
|
||||||
if sync:
|
if sync:
|
||||||
task.wait(TaskState.RESULT)
|
task.wait(tasks_const.TaskState.RESULT)
|
||||||
|
|
||||||
def _update_router_gw_info(self, context, router_id, info):
|
def _update_router_gw_info(self, context, router_id, info):
|
||||||
if not self._is_advanced_service_router(context, router_id):
|
if not self._is_advanced_service_router(context, router_id):
|
||||||
@ -576,11 +574,11 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin,
|
|||||||
lrouter = routerlib.get_lrouter(self.cluster, id)
|
lrouter = routerlib.get_lrouter(self.cluster, id)
|
||||||
lr_status = lrouter["_relations"]["LogicalRouterStatus"]
|
lr_status = lrouter["_relations"]["LogicalRouterStatus"]
|
||||||
if lr_status["fabric_status"]:
|
if lr_status["fabric_status"]:
|
||||||
nsx_status = RouterStatus.ROUTER_STATUS_ACTIVE
|
nsx_status = vcns_const.RouterStatus.ROUTER_STATUS_ACTIVE
|
||||||
else:
|
else:
|
||||||
nsx_status = RouterStatus.ROUTER_STATUS_DOWN
|
nsx_status = vcns_const.RouterStatus.ROUTER_STATUS_DOWN
|
||||||
except n_exc.NotFound:
|
except n_exc.NotFound:
|
||||||
nsx_status = RouterStatus.ROUTER_STATUS_ERROR
|
nsx_status = vcns_const.RouterStatus.ROUTER_STATUS_ERROR
|
||||||
|
|
||||||
return nsx_status
|
return nsx_status
|
||||||
|
|
||||||
@ -606,11 +604,11 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin,
|
|||||||
if (nsx_lrouter["_relations"]["LogicalRouterStatus"]
|
if (nsx_lrouter["_relations"]["LogicalRouterStatus"]
|
||||||
["fabric_status"]):
|
["fabric_status"]):
|
||||||
nsx_status[nsx_lrouter['uuid']] = (
|
nsx_status[nsx_lrouter['uuid']] = (
|
||||||
RouterStatus.ROUTER_STATUS_ACTIVE
|
vcns_const.RouterStatus.ROUTER_STATUS_ACTIVE
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
nsx_status[nsx_lrouter['uuid']] = (
|
nsx_status[nsx_lrouter['uuid']] = (
|
||||||
RouterStatus.ROUTER_STATUS_DOWN
|
vcns_const.RouterStatus.ROUTER_STATUS_DOWN
|
||||||
)
|
)
|
||||||
|
|
||||||
return nsx_status
|
return nsx_status
|
||||||
@ -685,7 +683,8 @@ class NsxAdvancedPlugin(sr_db.ServiceRouter_mixin,
|
|||||||
if router_type == ROUTER_TYPE_ADVANCED:
|
if router_type == ROUTER_TYPE_ADVANCED:
|
||||||
vse_status_level = vse_status_all.get(router['id'])
|
vse_status_level = vse_status_all.get(router['id'])
|
||||||
if vse_status_level is None:
|
if vse_status_level is None:
|
||||||
vse_status_level = RouterStatus.ROUTER_STATUS_ERROR
|
vse_status_level = (
|
||||||
|
vcns_const.RouterStatus.ROUTER_STATUS_ERROR)
|
||||||
if vse_status_level > ROUTER_STATUS_LEVEL[router['status']]:
|
if vse_status_level > ROUTER_STATUS_LEVEL[router['status']]:
|
||||||
router['status'] = ROUTER_STATUS[vse_status_level]
|
router['status'] = ROUTER_STATUS[vse_status_level]
|
||||||
|
|
||||||
@ -1729,7 +1728,7 @@ class VcnsCallbacks(object):
|
|||||||
# Router might have been deleted before deploy finished
|
# Router might have been deleted before deploy finished
|
||||||
LOG.exception(_("Router %s not found"), lrouter['uuid'])
|
LOG.exception(_("Router %s not found"), lrouter['uuid'])
|
||||||
|
|
||||||
if task.status == TaskStatus.COMPLETED:
|
if task.status == tasks_const.TaskStatus.COMPLETED:
|
||||||
LOG.debug(_("Successfully deployed %(edge_id)s for "
|
LOG.debug(_("Successfully deployed %(edge_id)s for "
|
||||||
"router %(name)s"), {
|
"router %(name)s"), {
|
||||||
'edge_id': task.userdata['edge_id'],
|
'edge_id': task.userdata['edge_id'],
|
||||||
@ -1757,7 +1756,7 @@ class VcnsCallbacks(object):
|
|||||||
jobdata = task.userdata['jobdata']
|
jobdata = task.userdata['jobdata']
|
||||||
router_id = task.userdata['router_id']
|
router_id = task.userdata['router_id']
|
||||||
context = jobdata['context']
|
context = jobdata['context']
|
||||||
if task.status == TaskStatus.COMPLETED:
|
if task.status == tasks_const.TaskStatus.COMPLETED:
|
||||||
vcns_db.delete_vcns_router_binding(context.session,
|
vcns_db.delete_vcns_router_binding(context.session,
|
||||||
router_id)
|
router_id)
|
||||||
|
|
||||||
|
@ -15,8 +15,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
from neutronclient.neutron.v2_0 import find_resourceid_by_name_or_id
|
from neutronclient.neutron import v2_0 as client
|
||||||
from neutronclient.neutron.v2_0 import NeutronCommand
|
|
||||||
|
|
||||||
LSN_PATH = '/lsns'
|
LSN_PATH = '/lsns'
|
||||||
|
|
||||||
@ -29,7 +28,7 @@ def print_report(write_func, report):
|
|||||||
write_func(_("Port uuids = %s\n\n") % ports)
|
write_func(_("Port uuids = %s\n\n") % ports)
|
||||||
|
|
||||||
|
|
||||||
class NetworkReport(NeutronCommand):
|
class NetworkReport(client.NeutronCommand):
|
||||||
"""Retrieve network migration report."""
|
"""Retrieve network migration report."""
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
@ -40,14 +39,15 @@ class NetworkReport(NeutronCommand):
|
|||||||
|
|
||||||
def run(self, parsed_args):
|
def run(self, parsed_args):
|
||||||
net = parsed_args.network
|
net = parsed_args.network
|
||||||
net_id = find_resourceid_by_name_or_id(self.app.client, 'network', net)
|
net_id = client.find_resourceid_by_name_or_id(self.app.client,
|
||||||
|
'network', net)
|
||||||
res = self.app.client.get("%s/%s" % (LSN_PATH, net_id))
|
res = self.app.client.get("%s/%s" % (LSN_PATH, net_id))
|
||||||
if res:
|
if res:
|
||||||
self.app.stdout.write(_('Migration report is:\n'))
|
self.app.stdout.write(_('Migration report is:\n'))
|
||||||
print_report(self.app.stdout.write, res['lsn'])
|
print_report(self.app.stdout.write, res['lsn'])
|
||||||
|
|
||||||
|
|
||||||
class NetworkMigrate(NeutronCommand):
|
class NetworkMigrate(client.NeutronCommand):
|
||||||
"""Perform network migration."""
|
"""Perform network migration."""
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
@ -58,7 +58,8 @@ class NetworkMigrate(NeutronCommand):
|
|||||||
|
|
||||||
def run(self, parsed_args):
|
def run(self, parsed_args):
|
||||||
net = parsed_args.network
|
net = parsed_args.network
|
||||||
net_id = find_resourceid_by_name_or_id(self.app.client, 'network', net)
|
net_id = client.find_resourceid_by_name_or_id(self.app.client,
|
||||||
|
'network', net)
|
||||||
body = {'network': net_id}
|
body = {'network': net_id}
|
||||||
res = self.app.client.post(LSN_PATH, body={'lsn': body})
|
res = self.app.client.post(LSN_PATH, body={'lsn': body})
|
||||||
if res:
|
if res:
|
||||||
|
@ -23,10 +23,9 @@ from neutron.openstack.common import log as logging
|
|||||||
from neutron.plugins.vmware.common import utils
|
from neutron.plugins.vmware.common import utils
|
||||||
from neutron.plugins.vmware.vshield.common import (
|
from neutron.plugins.vmware.vshield.common import (
|
||||||
constants as vcns_const)
|
constants as vcns_const)
|
||||||
from neutron.plugins.vmware.vshield.common.constants import RouterStatus
|
from neutron.plugins.vmware.vshield.common import constants as common_constants
|
||||||
from neutron.plugins.vmware.vshield.common import exceptions
|
from neutron.plugins.vmware.vshield.common import exceptions
|
||||||
from neutron.plugins.vmware.vshield.tasks.constants import TaskState
|
from neutron.plugins.vmware.vshield.tasks import constants
|
||||||
from neutron.plugins.vmware.vshield.tasks.constants import TaskStatus
|
|
||||||
from neutron.plugins.vmware.vshield.tasks import tasks
|
from neutron.plugins.vmware.vshield.tasks import tasks
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
@ -114,11 +113,11 @@ class EdgeApplianceDriver(object):
|
|||||||
|
|
||||||
def _edge_status_to_level(self, status):
|
def _edge_status_to_level(self, status):
|
||||||
if status == 'GREEN':
|
if status == 'GREEN':
|
||||||
status_level = RouterStatus.ROUTER_STATUS_ACTIVE
|
status_level = common_constants.RouterStatus.ROUTER_STATUS_ACTIVE
|
||||||
elif status in ('GREY', 'YELLOW'):
|
elif status in ('GREY', 'YELLOW'):
|
||||||
status_level = RouterStatus.ROUTER_STATUS_DOWN
|
status_level = common_constants.RouterStatus.ROUTER_STATUS_DOWN
|
||||||
else:
|
else:
|
||||||
status_level = RouterStatus.ROUTER_STATUS_ERROR
|
status_level = common_constants.RouterStatus.ROUTER_STATUS_ERROR
|
||||||
return status_level
|
return status_level
|
||||||
|
|
||||||
def _enable_loadbalancer(self, edge):
|
def _enable_loadbalancer(self, edge):
|
||||||
@ -137,12 +136,13 @@ class EdgeApplianceDriver(object):
|
|||||||
except exceptions.VcnsApiException as e:
|
except exceptions.VcnsApiException as e:
|
||||||
LOG.exception(_("VCNS: Failed to get edge status:\n%s"),
|
LOG.exception(_("VCNS: Failed to get edge status:\n%s"),
|
||||||
e.response)
|
e.response)
|
||||||
status_level = RouterStatus.ROUTER_STATUS_ERROR
|
status_level = common_constants.RouterStatus.ROUTER_STATUS_ERROR
|
||||||
try:
|
try:
|
||||||
desc = jsonutils.loads(e.response)
|
desc = jsonutils.loads(e.response)
|
||||||
if desc.get('errorCode') == (
|
if desc.get('errorCode') == (
|
||||||
vcns_const.VCNS_ERROR_CODE_EDGE_NOT_RUNNING):
|
vcns_const.VCNS_ERROR_CODE_EDGE_NOT_RUNNING):
|
||||||
status_level = RouterStatus.ROUTER_STATUS_DOWN
|
status_level = (
|
||||||
|
common_constants.RouterStatus.ROUTER_STATUS_DOWN)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
LOG.exception(e.response)
|
LOG.exception(e.response)
|
||||||
|
|
||||||
@ -175,7 +175,7 @@ class EdgeApplianceDriver(object):
|
|||||||
LOG.exception(_("VCNS: Failed to update vnic %d"),
|
LOG.exception(_("VCNS: Failed to update vnic %d"),
|
||||||
config['index'])
|
config['index'])
|
||||||
|
|
||||||
return TaskStatus.COMPLETED
|
return constants.TaskStatus.COMPLETED
|
||||||
|
|
||||||
def update_interface(self, router_id, edge_id, index, network,
|
def update_interface(self, router_id, edge_id, index, network,
|
||||||
address=None, netmask=None, secondary=None,
|
address=None, netmask=None, secondary=None,
|
||||||
@ -220,7 +220,7 @@ class EdgeApplianceDriver(object):
|
|||||||
edge_id = response['edgeId']
|
edge_id = response['edgeId']
|
||||||
LOG.debug(_("VCNS: deploying edge %s"), edge_id)
|
LOG.debug(_("VCNS: deploying edge %s"), edge_id)
|
||||||
userdata['edge_id'] = edge_id
|
userdata['edge_id'] = edge_id
|
||||||
status = TaskStatus.PENDING
|
status = constants.TaskStatus.PENDING
|
||||||
except exceptions.VcnsApiException:
|
except exceptions.VcnsApiException:
|
||||||
with excutils.save_and_reraise_exception():
|
with excutils.save_and_reraise_exception():
|
||||||
LOG.exception(_("VCNS: deploy edge failed for router %s."),
|
LOG.exception(_("VCNS: deploy edge failed for router %s."),
|
||||||
@ -235,11 +235,11 @@ class EdgeApplianceDriver(object):
|
|||||||
task.userdata['retries'] = 0
|
task.userdata['retries'] = 0
|
||||||
system_status = response.get('systemStatus', None)
|
system_status = response.get('systemStatus', None)
|
||||||
if system_status is None:
|
if system_status is None:
|
||||||
status = TaskStatus.PENDING
|
status = constants.TaskStatus.PENDING
|
||||||
elif system_status == 'good':
|
elif system_status == 'good':
|
||||||
status = TaskStatus.COMPLETED
|
status = constants.TaskStatus.COMPLETED
|
||||||
else:
|
else:
|
||||||
status = TaskStatus.ERROR
|
status = constants.TaskStatus.ERROR
|
||||||
except exceptions.VcnsApiException:
|
except exceptions.VcnsApiException:
|
||||||
with excutils.save_and_reraise_exception():
|
with excutils.save_and_reraise_exception():
|
||||||
LOG.exception(_("VCNS: Edge %s status query failed."), edge_id)
|
LOG.exception(_("VCNS: Edge %s status query failed."), edge_id)
|
||||||
@ -252,19 +252,19 @@ class EdgeApplianceDriver(object):
|
|||||||
'edge_id': edge_id,
|
'edge_id': edge_id,
|
||||||
'retries': retries}
|
'retries': retries}
|
||||||
LOG.exception(msg)
|
LOG.exception(msg)
|
||||||
status = TaskStatus.PENDING
|
status = constants.TaskStatus.PENDING
|
||||||
else:
|
else:
|
||||||
msg = _("VCNS: Unable to retrieve edge %s status. "
|
msg = _("VCNS: Unable to retrieve edge %s status. "
|
||||||
"Abort.") % edge_id
|
"Abort.") % edge_id
|
||||||
LOG.exception(msg)
|
LOG.exception(msg)
|
||||||
status = TaskStatus.ERROR
|
status = constants.TaskStatus.ERROR
|
||||||
LOG.debug(_("VCNS: Edge %s status"), edge_id)
|
LOG.debug(_("VCNS: Edge %s status"), edge_id)
|
||||||
return status
|
return status
|
||||||
|
|
||||||
def _result_edge(self, task):
|
def _result_edge(self, task):
|
||||||
router_name = task.userdata['router_name']
|
router_name = task.userdata['router_name']
|
||||||
edge_id = task.userdata.get('edge_id')
|
edge_id = task.userdata.get('edge_id')
|
||||||
if task.status != TaskStatus.COMPLETED:
|
if task.status != constants.TaskStatus.COMPLETED:
|
||||||
LOG.error(_("VCNS: Failed to deploy edge %(edge_id)s "
|
LOG.error(_("VCNS: Failed to deploy edge %(edge_id)s "
|
||||||
"for %(name)s, status %(status)d"), {
|
"for %(name)s, status %(status)d"), {
|
||||||
'edge_id': edge_id,
|
'edge_id': edge_id,
|
||||||
@ -280,7 +280,7 @@ class EdgeApplianceDriver(object):
|
|||||||
def _delete_edge(self, task):
|
def _delete_edge(self, task):
|
||||||
edge_id = task.userdata['edge_id']
|
edge_id = task.userdata['edge_id']
|
||||||
LOG.debug(_("VCNS: start destroying edge %s"), edge_id)
|
LOG.debug(_("VCNS: start destroying edge %s"), edge_id)
|
||||||
status = TaskStatus.COMPLETED
|
status = constants.TaskStatus.COMPLETED
|
||||||
if edge_id:
|
if edge_id:
|
||||||
try:
|
try:
|
||||||
self.vcns.delete_edge(edge_id)
|
self.vcns.delete_edge(edge_id)
|
||||||
@ -291,10 +291,10 @@ class EdgeApplianceDriver(object):
|
|||||||
"%(response)s") % {
|
"%(response)s") % {
|
||||||
'edge_id': edge_id, 'response': e.response}
|
'edge_id': edge_id, 'response': e.response}
|
||||||
LOG.exception(msg)
|
LOG.exception(msg)
|
||||||
status = TaskStatus.ERROR
|
status = constants.TaskStatus.ERROR
|
||||||
except Exception:
|
except Exception:
|
||||||
LOG.exception(_("VCNS: Failed to delete %s"), edge_id)
|
LOG.exception(_("VCNS: Failed to delete %s"), edge_id)
|
||||||
status = TaskStatus.ERROR
|
status = constants.TaskStatus.ERROR
|
||||||
|
|
||||||
return status
|
return status
|
||||||
|
|
||||||
@ -347,7 +347,7 @@ class EdgeApplianceDriver(object):
|
|||||||
|
|
||||||
if wait_for_exec:
|
if wait_for_exec:
|
||||||
# wait until the deploy task is executed so edge_id is available
|
# wait until the deploy task is executed so edge_id is available
|
||||||
task.wait(TaskState.EXECUTED)
|
task.wait(constants.TaskState.EXECUTED)
|
||||||
|
|
||||||
return task
|
return task
|
||||||
|
|
||||||
@ -402,11 +402,11 @@ class EdgeApplianceDriver(object):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
self.vcns.update_nat_config(edge_id, nat)
|
self.vcns.update_nat_config(edge_id, nat)
|
||||||
status = TaskStatus.COMPLETED
|
status = constants.TaskStatus.COMPLETED
|
||||||
except exceptions.VcnsApiException as e:
|
except exceptions.VcnsApiException as e:
|
||||||
LOG.exception(_("VCNS: Failed to create snat rule:\n%s"),
|
LOG.exception(_("VCNS: Failed to create snat rule:\n%s"),
|
||||||
e.response)
|
e.response)
|
||||||
status = TaskStatus.ERROR
|
status = constants.TaskStatus.ERROR
|
||||||
|
|
||||||
return status
|
return status
|
||||||
|
|
||||||
@ -439,7 +439,7 @@ class EdgeApplianceDriver(object):
|
|||||||
'type': addrtype, 'addr': address})
|
'type': addrtype, 'addr': address})
|
||||||
nat = self.get_nat_config(edge_id)
|
nat = self.get_nat_config(edge_id)
|
||||||
del nat['version']
|
del nat['version']
|
||||||
status = TaskStatus.COMPLETED
|
status = constants.TaskStatus.COMPLETED
|
||||||
for nat_rule in nat['rules']['natRulesDtos']:
|
for nat_rule in nat['rules']['natRulesDtos']:
|
||||||
if nat_rule[addrtype] == address:
|
if nat_rule[addrtype] == address:
|
||||||
rule_id = nat_rule['ruleId']
|
rule_id = nat_rule['ruleId']
|
||||||
@ -448,7 +448,7 @@ class EdgeApplianceDriver(object):
|
|||||||
except exceptions.VcnsApiException as e:
|
except exceptions.VcnsApiException as e:
|
||||||
LOG.exception(_("VCNS: Failed to delete snat rule:\n"
|
LOG.exception(_("VCNS: Failed to delete snat rule:\n"
|
||||||
"%s"), e.response)
|
"%s"), e.response)
|
||||||
status = TaskStatus.ERROR
|
status = constants.TaskStatus.ERROR
|
||||||
|
|
||||||
return status
|
return status
|
||||||
|
|
||||||
@ -513,7 +513,7 @@ class EdgeApplianceDriver(object):
|
|||||||
if task != self.updated_task['nat'][edge_id]:
|
if task != self.updated_task['nat'][edge_id]:
|
||||||
# this task does not have the latest config, abort now
|
# this task does not have the latest config, abort now
|
||||||
# for speedup
|
# for speedup
|
||||||
return TaskStatus.ABORT
|
return constants.TaskStatus.ABORT
|
||||||
|
|
||||||
rules = task.userdata['rules']
|
rules = task.userdata['rules']
|
||||||
LOG.debug(_("VCNS: start updating nat rules: %s"), rules)
|
LOG.debug(_("VCNS: start updating nat rules: %s"), rules)
|
||||||
@ -527,11 +527,11 @@ class EdgeApplianceDriver(object):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
self.vcns.update_nat_config(edge_id, nat)
|
self.vcns.update_nat_config(edge_id, nat)
|
||||||
status = TaskStatus.COMPLETED
|
status = constants.TaskStatus.COMPLETED
|
||||||
except exceptions.VcnsApiException as e:
|
except exceptions.VcnsApiException as e:
|
||||||
LOG.exception(_("VCNS: Failed to create snat rule:\n%s"),
|
LOG.exception(_("VCNS: Failed to create snat rule:\n%s"),
|
||||||
e.response)
|
e.response)
|
||||||
status = TaskStatus.ERROR
|
status = constants.TaskStatus.ERROR
|
||||||
|
|
||||||
return status
|
return status
|
||||||
|
|
||||||
@ -572,7 +572,7 @@ class EdgeApplianceDriver(object):
|
|||||||
task.userdata.get('skippable', True)):
|
task.userdata.get('skippable', True)):
|
||||||
# this task does not have the latest config, abort now
|
# this task does not have the latest config, abort now
|
||||||
# for speedup
|
# for speedup
|
||||||
return TaskStatus.ABORT
|
return constants.TaskStatus.ABORT
|
||||||
gateway = task.userdata['gateway']
|
gateway = task.userdata['gateway']
|
||||||
routes = task.userdata['routes']
|
routes = task.userdata['routes']
|
||||||
LOG.debug(_("VCNS: start updating routes for %s"), edge_id)
|
LOG.debug(_("VCNS: start updating routes for %s"), edge_id)
|
||||||
@ -597,11 +597,11 @@ class EdgeApplianceDriver(object):
|
|||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
self.vcns.update_routes(edge_id, request)
|
self.vcns.update_routes(edge_id, request)
|
||||||
status = TaskStatus.COMPLETED
|
status = constants.TaskStatus.COMPLETED
|
||||||
except exceptions.VcnsApiException as e:
|
except exceptions.VcnsApiException as e:
|
||||||
LOG.exception(_("VCNS: Failed to update routes:\n%s"),
|
LOG.exception(_("VCNS: Failed to update routes:\n%s"),
|
||||||
e.response)
|
e.response)
|
||||||
status = TaskStatus.ERROR
|
status = constants.TaskStatus.ERROR
|
||||||
|
|
||||||
return status
|
return status
|
||||||
|
|
||||||
|
@ -22,8 +22,7 @@ from eventlet import greenthread
|
|||||||
from neutron.common import exceptions
|
from neutron.common import exceptions
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
from neutron.openstack.common import loopingcall
|
from neutron.openstack.common import loopingcall
|
||||||
from neutron.plugins.vmware.vshield.tasks.constants import TaskState
|
from neutron.plugins.vmware.vshield.tasks import constants
|
||||||
from neutron.plugins.vmware.vshield.tasks.constants import TaskStatus
|
|
||||||
|
|
||||||
DEFAULT_INTERVAL = 1000
|
DEFAULT_INTERVAL = 1000
|
||||||
|
|
||||||
@ -31,7 +30,7 @@ LOG = logging.getLogger(__name__)
|
|||||||
|
|
||||||
|
|
||||||
def nop(task):
|
def nop(task):
|
||||||
return TaskStatus.COMPLETED
|
return constants.TaskStatus.COMPLETED
|
||||||
|
|
||||||
|
|
||||||
class TaskException(exceptions.NeutronException):
|
class TaskException(exceptions.NeutronException):
|
||||||
@ -64,12 +63,12 @@ class Task():
|
|||||||
self.status = None
|
self.status = None
|
||||||
|
|
||||||
self._monitors = {
|
self._monitors = {
|
||||||
TaskState.START: [],
|
constants.TaskState.START: [],
|
||||||
TaskState.EXECUTED: [],
|
constants.TaskState.EXECUTED: [],
|
||||||
TaskState.RESULT: []
|
constants.TaskState.RESULT: []
|
||||||
}
|
}
|
||||||
self._states = [None, None, None, None]
|
self._states = [None, None, None, None]
|
||||||
self._state = TaskState.NONE
|
self._state = constants.TaskState.NONE
|
||||||
|
|
||||||
def _add_monitor(self, action, func):
|
def _add_monitor(self, action, func):
|
||||||
self._monitors[action].append(func)
|
self._monitors[action].append(func)
|
||||||
@ -106,10 +105,10 @@ class Task():
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
def _start(self):
|
def _start(self):
|
||||||
return self._invoke_monitor(TaskState.START)
|
return self._invoke_monitor(constants.TaskState.START)
|
||||||
|
|
||||||
def _executed(self):
|
def _executed(self):
|
||||||
return self._invoke_monitor(TaskState.EXECUTED)
|
return self._invoke_monitor(constants.TaskState.EXECUTED)
|
||||||
|
|
||||||
def _update_status(self, status):
|
def _update_status(self, status):
|
||||||
if self.status == status:
|
if self.status == status:
|
||||||
@ -118,21 +117,21 @@ class Task():
|
|||||||
self.status = status
|
self.status = status
|
||||||
|
|
||||||
def _finished(self):
|
def _finished(self):
|
||||||
return self._invoke_monitor(TaskState.RESULT)
|
return self._invoke_monitor(constants.TaskState.RESULT)
|
||||||
|
|
||||||
def add_start_monitor(self, func):
|
def add_start_monitor(self, func):
|
||||||
return self._add_monitor(TaskState.START, func)
|
return self._add_monitor(constants.TaskState.START, func)
|
||||||
|
|
||||||
def add_executed_monitor(self, func):
|
def add_executed_monitor(self, func):
|
||||||
return self._add_monitor(TaskState.EXECUTED, func)
|
return self._add_monitor(constants.TaskState.EXECUTED, func)
|
||||||
|
|
||||||
def add_result_monitor(self, func):
|
def add_result_monitor(self, func):
|
||||||
return self._add_monitor(TaskState.RESULT, func)
|
return self._add_monitor(constants.TaskState.RESULT, func)
|
||||||
|
|
||||||
def wait(self, state):
|
def wait(self, state):
|
||||||
if (state < TaskState.START or
|
if (state < constants.TaskState.START or
|
||||||
state > TaskState.RESULT or
|
state > constants.TaskState.RESULT or
|
||||||
state == TaskState.STATUS):
|
state == constants.TaskState.STATUS):
|
||||||
raise InvalidState(state=state)
|
raise InvalidState(state=state)
|
||||||
|
|
||||||
if state <= self._state:
|
if state <= self._state:
|
||||||
@ -190,7 +189,7 @@ class TaskManager():
|
|||||||
'task': str(task),
|
'task': str(task),
|
||||||
'cb': str(task._execute_callback)}
|
'cb': str(task._execute_callback)}
|
||||||
LOG.exception(msg)
|
LOG.exception(msg)
|
||||||
status = TaskStatus.ERROR
|
status = constants.TaskStatus.ERROR
|
||||||
|
|
||||||
LOG.debug(_("Task %(task)s return %(status)s"), {
|
LOG.debug(_("Task %(task)s return %(status)s"), {
|
||||||
'task': str(task),
|
'task': str(task),
|
||||||
@ -233,9 +232,9 @@ class TaskManager():
|
|||||||
'task': str(task),
|
'task': str(task),
|
||||||
'cb': str(task._status_callback)}
|
'cb': str(task._status_callback)}
|
||||||
LOG.exception(msg)
|
LOG.exception(msg)
|
||||||
status = TaskStatus.ERROR
|
status = constants.TaskStatus.ERROR
|
||||||
task._update_status(status)
|
task._update_status(status)
|
||||||
if status != TaskStatus.PENDING:
|
if status != constants.TaskStatus.PENDING:
|
||||||
self._dequeue(task, True)
|
self._dequeue(task, True)
|
||||||
|
|
||||||
def _enqueue(self, task):
|
def _enqueue(self, task):
|
||||||
@ -262,7 +261,7 @@ class TaskManager():
|
|||||||
while tasks:
|
while tasks:
|
||||||
task = tasks[0]
|
task = tasks[0]
|
||||||
status = self._execute(task)
|
status = self._execute(task)
|
||||||
if status == TaskStatus.PENDING:
|
if status == constants.TaskStatus.PENDING:
|
||||||
break
|
break
|
||||||
self._dequeue(task, False)
|
self._dequeue(task, False)
|
||||||
|
|
||||||
@ -277,7 +276,7 @@ class TaskManager():
|
|||||||
for resource_id in self._tasks.keys():
|
for resource_id in self._tasks.keys():
|
||||||
tasks = list(self._tasks[resource_id])
|
tasks = list(self._tasks[resource_id])
|
||||||
for task in tasks:
|
for task in tasks:
|
||||||
task._update_status(TaskStatus.ABORT)
|
task._update_status(constants.TaskStatus.ABORT)
|
||||||
self._dequeue(task, False)
|
self._dequeue(task, False)
|
||||||
|
|
||||||
def _get_task(self):
|
def _get_task(self):
|
||||||
@ -314,7 +313,7 @@ class TaskManager():
|
|||||||
# The thread is killed during _execute(). To guarantee
|
# The thread is killed during _execute(). To guarantee
|
||||||
# the task been aborted correctly, put it to the queue.
|
# the task been aborted correctly, put it to the queue.
|
||||||
self._enqueue(task)
|
self._enqueue(task)
|
||||||
elif task.status != TaskStatus.PENDING:
|
elif task.status != constants.TaskStatus.PENDING:
|
||||||
self._result(task)
|
self._result(task)
|
||||||
else:
|
else:
|
||||||
self._enqueue(task)
|
self._enqueue(task)
|
||||||
|
@ -410,7 +410,7 @@ class TestOVSBridge(RyuAgentTestCase):
|
|||||||
side_effect=[None, {'opts': 'opts_val'}]),
|
side_effect=[None, {'opts': 'opts_val'}]),
|
||||||
mock.patch(self._AGENT_NAME + '.OVSBridge.get_ofport',
|
mock.patch(self._AGENT_NAME + '.OVSBridge.get_ofport',
|
||||||
return_value=1),
|
return_value=1),
|
||||||
mock.patch(self._AGENT_NAME + '.VifPort')
|
mock.patch('neutron.agent.linux.ovs_lib.VifPort')
|
||||||
) as (mock_db, mock_ofport, mock_vif):
|
) as (mock_db, mock_ofport, mock_vif):
|
||||||
br = self.mod_agent.OVSBridge('br_name', 'helper')
|
br = self.mod_agent.OVSBridge('br_name', 'helper')
|
||||||
vifport = br._get_external_port('iface')
|
vifport = br._get_external_port('iface')
|
||||||
@ -434,7 +434,7 @@ class TestOVSBridge(RyuAgentTestCase):
|
|||||||
{'opts': 'opts_val'}]),
|
{'opts': 'opts_val'}]),
|
||||||
mock.patch(self._AGENT_NAME + '.OVSBridge.get_ofport',
|
mock.patch(self._AGENT_NAME + '.OVSBridge.get_ofport',
|
||||||
return_value=1),
|
return_value=1),
|
||||||
mock.patch(self._AGENT_NAME + '.VifPort')
|
mock.patch('neutron.agent.linux.ovs_lib.VifPort')
|
||||||
) as (mock_db, mock_ofport, mock_vif):
|
) as (mock_db, mock_ofport, mock_vif):
|
||||||
br = self.mod_agent.OVSBridge('br_name', 'helper')
|
br = self.mod_agent.OVSBridge('br_name', 'helper')
|
||||||
vifport = br._get_external_port('iface')
|
vifport = br._get_external_port('iface')
|
||||||
@ -452,7 +452,7 @@ class TestOVSBridge(RyuAgentTestCase):
|
|||||||
side_effect=[None, {'remote_ip': '0.0.0.0'}]),
|
side_effect=[None, {'remote_ip': '0.0.0.0'}]),
|
||||||
mock.patch(self._AGENT_NAME + '.OVSBridge.get_ofport',
|
mock.patch(self._AGENT_NAME + '.OVSBridge.get_ofport',
|
||||||
return_value=1),
|
return_value=1),
|
||||||
mock.patch(self._AGENT_NAME + '.VifPort')
|
mock.patch('neutron.agent.linux.ovs_lib.VifPort')
|
||||||
) as (mock_db, mock_ofport, mock_vif):
|
) as (mock_db, mock_ofport, mock_vif):
|
||||||
br = self.mod_agent.OVSBridge('br_name', 'helper')
|
br = self.mod_agent.OVSBridge('br_name', 'helper')
|
||||||
vifport = br._get_external_port('iface')
|
vifport = br._get_external_port('iface')
|
||||||
|
@ -21,9 +21,7 @@ import contextlib
|
|||||||
import mock
|
import mock
|
||||||
|
|
||||||
from neutron.common import exceptions
|
from neutron.common import exceptions
|
||||||
from neutron.services.loadbalancer.drivers.haproxy import (
|
from neutron.services.loadbalancer.drivers.haproxy import namespace_driver
|
||||||
namespace_driver
|
|
||||||
)
|
|
||||||
from neutron.tests import base
|
from neutron.tests import base
|
||||||
|
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ class TestQoSQueue(test_nsx_plugin.NsxPluginV2TestCase):
|
|||||||
|
|
||||||
def test_create_trusted_qos_queue(self):
|
def test_create_trusted_qos_queue(self):
|
||||||
with mock.patch.object(qos_db.LOG, 'info') as log:
|
with mock.patch.object(qos_db.LOG, 'info') as log:
|
||||||
with mock.patch.object(nsxlib.queue, 'do_request',
|
with mock.patch.object(nsxlib, 'do_request',
|
||||||
return_value={"uuid": "fake_queue"}):
|
return_value={"uuid": "fake_queue"}):
|
||||||
with self.qos_queue(name='fake_lqueue', min=34, max=44,
|
with self.qos_queue(name='fake_lqueue', min=34, max=44,
|
||||||
qos_marking='trusted', default=False) as q:
|
qos_marking='trusted', default=False) as q:
|
||||||
|
@ -180,7 +180,7 @@ class L2GatewayTestCase(base.NsxlibTestCase):
|
|||||||
connector_type = 'stt'
|
connector_type = 'stt'
|
||||||
connector_ip = '1.1.1.1'
|
connector_ip = '1.1.1.1'
|
||||||
client_certificate = 'this_should_be_a_certificate'
|
client_certificate = 'this_should_be_a_certificate'
|
||||||
with mock.patch.object(l2gwlib, 'do_request') as request_mock:
|
with mock.patch.object(nsxlib, 'do_request') as request_mock:
|
||||||
expected_req_body = self._create_expected_req_body(
|
expected_req_body = self._create_expected_req_body(
|
||||||
display_name, neutron_id, connector_type.upper(),
|
display_name, neutron_id, connector_type.upper(),
|
||||||
connector_ip, client_certificate)
|
connector_ip, client_certificate)
|
||||||
@ -202,7 +202,7 @@ class L2GatewayTestCase(base.NsxlibTestCase):
|
|||||||
connector_type = 'stt'
|
connector_type = 'stt'
|
||||||
connector_ip = '1.1.1.1'
|
connector_ip = '1.1.1.1'
|
||||||
client_certificate = 'this_should_be_a_certificate'
|
client_certificate = 'this_should_be_a_certificate'
|
||||||
with mock.patch.object(l2gwlib, 'do_request') as request_mock:
|
with mock.patch.object(nsxlib, 'do_request') as request_mock:
|
||||||
expected_req_body = self._create_expected_req_body(
|
expected_req_body = self._create_expected_req_body(
|
||||||
display_name, neutron_id, connector_type.upper(),
|
display_name, neutron_id, connector_type.upper(),
|
||||||
connector_ip, client_certificate)
|
connector_ip, client_certificate)
|
||||||
@ -225,7 +225,7 @@ class L2GatewayTestCase(base.NsxlibTestCase):
|
|||||||
neutron_id = 'whatever'
|
neutron_id = 'whatever'
|
||||||
connector_type = 'stt'
|
connector_type = 'stt'
|
||||||
connector_ip = '1.1.1.1'
|
connector_ip = '1.1.1.1'
|
||||||
with mock.patch.object(l2gwlib, 'do_request') as request_mock:
|
with mock.patch.object(nsxlib, 'do_request') as request_mock:
|
||||||
expected_req_body = self._create_expected_req_body(
|
expected_req_body = self._create_expected_req_body(
|
||||||
display_name, neutron_id, connector_type.upper(),
|
display_name, neutron_id, connector_type.upper(),
|
||||||
connector_ip, None)
|
connector_ip, None)
|
||||||
@ -244,7 +244,7 @@ class L2GatewayTestCase(base.NsxlibTestCase):
|
|||||||
def test_get_gw_device_status(self):
|
def test_get_gw_device_status(self):
|
||||||
# NOTE(salv-orlando): This unit test mocks backend calls rather than
|
# NOTE(salv-orlando): This unit test mocks backend calls rather than
|
||||||
# leveraging the fake NVP API client
|
# leveraging the fake NVP API client
|
||||||
with mock.patch.object(l2gwlib, 'do_request') as request_mock:
|
with mock.patch.object(nsxlib, 'do_request') as request_mock:
|
||||||
l2gwlib.get_gateway_device_status(self.fake_cluster, 'whatever')
|
l2gwlib.get_gateway_device_status(self.fake_cluster, 'whatever')
|
||||||
request_mock.assert_called_once_with(
|
request_mock.assert_called_once_with(
|
||||||
"GET",
|
"GET",
|
||||||
@ -288,7 +288,7 @@ class L2GatewayTestCase(base.NsxlibTestCase):
|
|||||||
def test_delete_gw_device(self):
|
def test_delete_gw_device(self):
|
||||||
# NOTE(salv-orlando): This unit test mocks backend calls rather than
|
# NOTE(salv-orlando): This unit test mocks backend calls rather than
|
||||||
# leveraging the fake NVP API client
|
# leveraging the fake NVP API client
|
||||||
with mock.patch.object(l2gwlib, 'do_request') as request_mock:
|
with mock.patch.object(nsxlib, 'do_request') as request_mock:
|
||||||
l2gwlib.delete_gateway_device(self.fake_cluster, 'whatever')
|
l2gwlib.delete_gateway_device(self.fake_cluster, 'whatever')
|
||||||
request_mock.assert_called_once_with(
|
request_mock.assert_called_once_with(
|
||||||
"DELETE",
|
"DELETE",
|
||||||
|
@ -28,7 +28,8 @@ class LSNTestCase(base.BaseTestCase):
|
|||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(LSNTestCase, self).setUp()
|
super(LSNTestCase, self).setUp()
|
||||||
self.mock_request_p = mock.patch.object(lsnlib, 'do_request')
|
self.mock_request_p = mock.patch(
|
||||||
|
'neutron.plugins.vmware.nsxlib.do_request')
|
||||||
self.mock_request = self.mock_request_p.start()
|
self.mock_request = self.mock_request_p.start()
|
||||||
self.cluster = mock.Mock()
|
self.cluster = mock.Mock()
|
||||||
self.cluster.default_service_cluster_uuid = 'foo'
|
self.cluster.default_service_cluster_uuid = 'foo'
|
||||||
|
@ -18,6 +18,7 @@ import mock
|
|||||||
|
|
||||||
from neutron.common import exceptions
|
from neutron.common import exceptions
|
||||||
from neutron.plugins.vmware.api_client import exception as api_exc
|
from neutron.plugins.vmware.api_client import exception as api_exc
|
||||||
|
from neutron.plugins.vmware import nsxlib
|
||||||
from neutron.plugins.vmware.nsxlib import queue as queuelib
|
from neutron.plugins.vmware.nsxlib import queue as queuelib
|
||||||
from neutron.tests.unit.vmware.nsxlib import base
|
from neutron.tests.unit.vmware.nsxlib import base
|
||||||
|
|
||||||
@ -35,9 +36,9 @@ class TestLogicalQueueLib(base.NsxlibTestCase):
|
|||||||
def test_create_and_get_lqueue(self):
|
def test_create_and_get_lqueue(self):
|
||||||
queue_id = queuelib.create_lqueue(
|
queue_id = queuelib.create_lqueue(
|
||||||
self.fake_cluster, self.fake_queue)
|
self.fake_cluster, self.fake_queue)
|
||||||
queue_res = queuelib.do_request(
|
queue_res = nsxlib.do_request(
|
||||||
'GET',
|
'GET',
|
||||||
queuelib._build_uri_path('lqueue', resource_id=queue_id),
|
nsxlib._build_uri_path('lqueue', resource_id=queue_id),
|
||||||
cluster=self.fake_cluster)
|
cluster=self.fake_cluster)
|
||||||
self.assertEqual(queue_id, queue_res['uuid'])
|
self.assertEqual(queue_id, queue_res['uuid'])
|
||||||
self.assertEqual('fake_queue', queue_res['display_name'])
|
self.assertEqual('fake_queue', queue_res['display_name'])
|
||||||
@ -46,7 +47,7 @@ class TestLogicalQueueLib(base.NsxlibTestCase):
|
|||||||
def raise_nsx_exc(*args, **kwargs):
|
def raise_nsx_exc(*args, **kwargs):
|
||||||
raise api_exc.NsxApiException()
|
raise api_exc.NsxApiException()
|
||||||
|
|
||||||
with mock.patch.object(queuelib, 'do_request', new=raise_nsx_exc):
|
with mock.patch.object(nsxlib, 'do_request', new=raise_nsx_exc):
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exceptions.NeutronException, queuelib.create_lqueue,
|
exceptions.NeutronException, queuelib.create_lqueue,
|
||||||
self.fake_cluster, self.fake_queue)
|
self.fake_cluster, self.fake_queue)
|
||||||
@ -56,9 +57,9 @@ class TestLogicalQueueLib(base.NsxlibTestCase):
|
|||||||
self.fake_cluster, self.fake_queue)
|
self.fake_cluster, self.fake_queue)
|
||||||
queuelib.delete_lqueue(self.fake_cluster, queue_id)
|
queuelib.delete_lqueue(self.fake_cluster, queue_id)
|
||||||
self.assertRaises(exceptions.NotFound,
|
self.assertRaises(exceptions.NotFound,
|
||||||
queuelib.do_request,
|
nsxlib.do_request,
|
||||||
'GET',
|
'GET',
|
||||||
queuelib._build_uri_path(
|
nsxlib._build_uri_path(
|
||||||
'lqueue', resource_id=queue_id),
|
'lqueue', resource_id=queue_id),
|
||||||
cluster=self.fake_cluster)
|
cluster=self.fake_cluster)
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ class TestExplicitLRouters(base.NsxlibTestCase):
|
|||||||
'type': 'LogicalRouterStatus',
|
'type': 'LogicalRouterStatus',
|
||||||
'lport_link_up_count': 0, }, }
|
'lport_link_up_count': 0, }, }
|
||||||
|
|
||||||
with mock.patch.object(routerlib, 'do_request',
|
with mock.patch.object(nsxlib, 'do_request',
|
||||||
return_value=self._get_lrouter(tenant_id,
|
return_value=self._get_lrouter(tenant_id,
|
||||||
router_name,
|
router_name,
|
||||||
router_id,
|
router_id,
|
||||||
@ -165,7 +165,7 @@ class TestExplicitLRouters(base.NsxlibTestCase):
|
|||||||
router_id = 'fake_router_id'
|
router_id = 'fake_router_id'
|
||||||
nexthop_ip = '10.0.0.1'
|
nexthop_ip = '10.0.0.1'
|
||||||
with mock.patch.object(
|
with mock.patch.object(
|
||||||
routerlib, 'do_request',
|
nsxlib, 'do_request',
|
||||||
return_value=self._get_lrouter(tenant_id,
|
return_value=self._get_lrouter(tenant_id,
|
||||||
router_name,
|
router_name,
|
||||||
router_id)):
|
router_id)):
|
||||||
@ -599,7 +599,7 @@ class TestLogicalRouters(base.NsxlibTestCase):
|
|||||||
return {'_relations': {'LogicalPortAttachment':
|
return {'_relations': {'LogicalPortAttachment':
|
||||||
{'peer_port_uuid': lrouter_port['uuid']}}}
|
{'peer_port_uuid': lrouter_port['uuid']}}}
|
||||||
# mock get_port
|
# mock get_port
|
||||||
with mock.patch.object(routerlib, 'get_port', new=fakegetport):
|
with mock.patch.object(switchlib, 'get_port', new=fakegetport):
|
||||||
routerlib.delete_peer_router_lport(self.fake_cluster,
|
routerlib.delete_peer_router_lport(self.fake_cluster,
|
||||||
lrouter_port['uuid'],
|
lrouter_port['uuid'],
|
||||||
'whatwever', 'whatever')
|
'whatwever', 'whatever')
|
||||||
@ -678,7 +678,7 @@ class TestLogicalRouters(base.NsxlibTestCase):
|
|||||||
def raise_nsx_exc(*args, **kwargs):
|
def raise_nsx_exc(*args, **kwargs):
|
||||||
raise api_exc.NsxApiException()
|
raise api_exc.NsxApiException()
|
||||||
|
|
||||||
with mock.patch.object(routerlib, 'do_request', new=raise_nsx_exc):
|
with mock.patch.object(nsxlib, 'do_request', new=raise_nsx_exc):
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
nsx_exc.NsxPluginException, routerlib.update_lrouter_port_ips,
|
nsx_exc.NsxPluginException, routerlib.update_lrouter_port_ips,
|
||||||
self.fake_cluster, lrouter['uuid'],
|
self.fake_cluster, lrouter['uuid'],
|
||||||
|
@ -40,10 +40,10 @@ from neutron.plugins.vmware.api_client import exception as api_exc
|
|||||||
from neutron.plugins.vmware.api_client import version as version_module
|
from neutron.plugins.vmware.api_client import version as version_module
|
||||||
from neutron.plugins.vmware.common import exceptions as nsx_exc
|
from neutron.plugins.vmware.common import exceptions as nsx_exc
|
||||||
from neutron.plugins.vmware.common import sync
|
from neutron.plugins.vmware.common import sync
|
||||||
|
from neutron.plugins.vmware.common import utils
|
||||||
from neutron.plugins.vmware.dbexts import db as nsx_db
|
from neutron.plugins.vmware.dbexts import db as nsx_db
|
||||||
from neutron.plugins.vmware.extensions import distributedrouter as dist_router
|
from neutron.plugins.vmware.extensions import distributedrouter as dist_router
|
||||||
from neutron.plugins.vmware import nsxlib
|
from neutron.plugins.vmware import nsxlib
|
||||||
from neutron.plugins.vmware.plugins import base
|
|
||||||
from neutron.tests.unit import _test_extension_portbindings as test_bindings
|
from neutron.tests.unit import _test_extension_portbindings as test_bindings
|
||||||
import neutron.tests.unit.test_db_plugin as test_plugin
|
import neutron.tests.unit.test_db_plugin as test_plugin
|
||||||
import neutron.tests.unit.test_extension_ext_gw_mode as test_ext_gw_mode
|
import neutron.tests.unit.test_extension_ext_gw_mode as test_ext_gw_mode
|
||||||
@ -221,7 +221,7 @@ class TestPortsV2(NsxPluginV2TestCase,
|
|||||||
|
|
||||||
def test_create_port_maintenance_returns_503(self):
|
def test_create_port_maintenance_returns_503(self):
|
||||||
with self.network() as net:
|
with self.network() as net:
|
||||||
with mock.patch.object(nsxlib.switch, 'do_request',
|
with mock.patch.object(nsxlib, 'do_request',
|
||||||
side_effect=nsx_exc.MaintenanceInProgress):
|
side_effect=nsx_exc.MaintenanceInProgress):
|
||||||
data = {'port': {'network_id': net['network']['id'],
|
data = {'port': {'network_id': net['network']['id'],
|
||||||
'admin_state_up': False,
|
'admin_state_up': False,
|
||||||
@ -322,7 +322,7 @@ class TestNetworksV2(test_plugin.TestNetworksV2, NsxPluginV2TestCase):
|
|||||||
data = {'network': {'name': 'foo',
|
data = {'network': {'name': 'foo',
|
||||||
'admin_state_up': True,
|
'admin_state_up': True,
|
||||||
'tenant_id': self._tenant_id}}
|
'tenant_id': self._tenant_id}}
|
||||||
with mock.patch.object(nsxlib.switch, 'do_request',
|
with mock.patch.object(nsxlib, 'do_request',
|
||||||
side_effect=nsx_exc.MaintenanceInProgress):
|
side_effect=nsx_exc.MaintenanceInProgress):
|
||||||
net_req = self.new_create_request('networks', data, self.fmt)
|
net_req = self.new_create_request('networks', data, self.fmt)
|
||||||
res = net_req.get_response(self.api)
|
res = net_req.get_response(self.api)
|
||||||
@ -380,13 +380,6 @@ class TestSecurityGroup(ext_sg.TestSecurityGroups, SecurityGroupsTestCase):
|
|||||||
self.deserialize(self.fmt, res)
|
self.deserialize(self.fmt, res)
|
||||||
self.assertEqual(res.status_int, 400)
|
self.assertEqual(res.status_int, 400)
|
||||||
|
|
||||||
def test_update_security_group_deal_with_exc(self):
|
|
||||||
name = 'foo security group'
|
|
||||||
with mock.patch.object(nsxlib.switch, 'do_request',
|
|
||||||
side_effect=api_exc.NsxApiException):
|
|
||||||
with self.security_group(name=name) as sg:
|
|
||||||
self.assertEqual(sg['security_group']['name'], name)
|
|
||||||
|
|
||||||
|
|
||||||
class TestL3ExtensionManager(object):
|
class TestL3ExtensionManager(object):
|
||||||
|
|
||||||
@ -459,7 +452,7 @@ class L3NatTest(test_l3_plugin.L3BaseForIntTests, NsxPluginV2TestCase):
|
|||||||
|
|
||||||
def _create_l3_ext_network(self, vlan_id=None):
|
def _create_l3_ext_network(self, vlan_id=None):
|
||||||
name = 'l3_ext_net'
|
name = 'l3_ext_net'
|
||||||
net_type = base.NetworkTypes.L3_EXT
|
net_type = utils.NetworkTypes.L3_EXT
|
||||||
providernet_args = {pnet.NETWORK_TYPE: net_type,
|
providernet_args = {pnet.NETWORK_TYPE: net_type,
|
||||||
pnet.PHYSICAL_NETWORK: 'l3_gw_uuid'}
|
pnet.PHYSICAL_NETWORK: 'l3_gw_uuid'}
|
||||||
if vlan_id:
|
if vlan_id:
|
||||||
@ -478,7 +471,7 @@ class TestL3NatTestCase(L3NatTest,
|
|||||||
|
|
||||||
def _test_create_l3_ext_network(self, vlan_id=None):
|
def _test_create_l3_ext_network(self, vlan_id=None):
|
||||||
name = 'l3_ext_net'
|
name = 'l3_ext_net'
|
||||||
net_type = base.NetworkTypes.L3_EXT
|
net_type = utils.NetworkTypes.L3_EXT
|
||||||
expected = [('subnets', []), ('name', name), ('admin_state_up', True),
|
expected = [('subnets', []), ('name', name), ('admin_state_up', True),
|
||||||
('status', 'ACTIVE'), ('shared', False),
|
('status', 'ACTIVE'), ('shared', False),
|
||||||
(external_net.EXTERNAL, True),
|
(external_net.EXTERNAL, True),
|
||||||
@ -957,7 +950,7 @@ class TestL3NatTestCase(L3NatTest,
|
|||||||
with self._create_l3_ext_network() as net:
|
with self._create_l3_ext_network() as net:
|
||||||
with self.subnet(network=net) as s:
|
with self.subnet(network=net) as s:
|
||||||
with mock.patch.object(
|
with mock.patch.object(
|
||||||
nsxlib.router,
|
nsxlib,
|
||||||
'do_request',
|
'do_request',
|
||||||
side_effect=nsx_exc.MaintenanceInProgress):
|
side_effect=nsx_exc.MaintenanceInProgress):
|
||||||
data = {'router': {'tenant_id': 'whatever'}}
|
data = {'router': {'tenant_id': 'whatever'}}
|
||||||
|
Loading…
Reference in New Issue
Block a user