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