Fixing pep8 errors
removing excess debug lines
This commit is contained in:
parent
dafac9726b
commit
15a625ba16
@ -51,11 +51,11 @@ class APIRouterV01(wsgi.Router):
|
|||||||
mapper.resource('network', 'networks',
|
mapper.resource('network', 'networks',
|
||||||
controller=networks.Controller(),
|
controller=networks.Controller(),
|
||||||
path_prefix=uri_prefix)
|
path_prefix=uri_prefix)
|
||||||
mapper.resource('port', 'ports',
|
mapper.resource('port', 'ports',
|
||||||
controller=ports.Controller(),
|
controller=ports.Controller(),
|
||||||
parent_resource=dict(member_name='network',
|
parent_resource=dict(member_name='network',
|
||||||
collection_name=\
|
collection_name=uri_prefix +\
|
||||||
uri_prefix + 'networks'))
|
'networks'))
|
||||||
|
|
||||||
mapper.connect("get_resource",
|
mapper.connect("get_resource",
|
||||||
uri_prefix + 'networks/{network_id}/' \
|
uri_prefix + 'networks/{network_id}/' \
|
||||||
|
@ -52,7 +52,7 @@ class Fault(webob.exc.HTTPException):
|
|||||||
fault_data = {
|
fault_data = {
|
||||||
fault_name: {
|
fault_name: {
|
||||||
'code': code,
|
'code': code,
|
||||||
'message': self.wrapped_exc.explanation,
|
'message': self.wrapped_exc.explanation,
|
||||||
'detail': self.wrapped_exc.detail}}
|
'detail': self.wrapped_exc.detail}}
|
||||||
# 'code' is an attribute on the fault tag itself
|
# 'code' is an attribute on the fault tag itself
|
||||||
metadata = {'application/xml': {'attributes': {fault_name: 'code'}}}
|
metadata = {'application/xml': {'attributes': {fault_name: 'code'}}}
|
||||||
|
@ -78,7 +78,7 @@ class Controller(common.QuantumController):
|
|||||||
except exc.HTTPError as e:
|
except exc.HTTPError as e:
|
||||||
return faults.Fault(e)
|
return faults.Fault(e)
|
||||||
network = self.network_manager.\
|
network = self.network_manager.\
|
||||||
create_network(tenant_id,req_params['network-name'])
|
create_network(tenant_id, req_params['network-name'])
|
||||||
builder = networks_view.get_view_builder(req)
|
builder = networks_view.get_view_builder(req)
|
||||||
result = builder.build(network)
|
result = builder.build(network)
|
||||||
return dict(networks=result)
|
return dict(networks=result)
|
||||||
|
@ -24,24 +24,25 @@ from quantum.common import exceptions as exception
|
|||||||
|
|
||||||
LOG = logging.getLogger('quantum.api.ports')
|
LOG = logging.getLogger('quantum.api.ports')
|
||||||
|
|
||||||
|
|
||||||
class Controller(common.QuantumController):
|
class Controller(common.QuantumController):
|
||||||
""" Port API controller for Quantum API """
|
""" Port API controller for Quantum API """
|
||||||
|
|
||||||
_port_ops_param_list = [{
|
_port_ops_param_list = [{
|
||||||
'param-name': 'port-state',
|
'param-name': 'port-state',
|
||||||
'default-value': 'DOWN',
|
'default-value': 'DOWN',
|
||||||
'required': False},]
|
'required': False},
|
||||||
|
]
|
||||||
|
|
||||||
_attachment_ops_param_list = [{
|
_attachment_ops_param_list = [{
|
||||||
'param-name': 'attachment-id',
|
'param-name': 'attachment-id',
|
||||||
'required': True},]
|
'required': True},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
_serialization_metadata = {
|
_serialization_metadata = {
|
||||||
"application/xml": {
|
"application/xml": {
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"port": ["id","state"],
|
"port": ["id", "state"],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -49,14 +50,14 @@ class Controller(common.QuantumController):
|
|||||||
def __init__(self, plugin_conf_file=None):
|
def __init__(self, plugin_conf_file=None):
|
||||||
self._resource_name = 'port'
|
self._resource_name = 'port'
|
||||||
super(Controller, self).__init__()
|
super(Controller, self).__init__()
|
||||||
|
|
||||||
def index(self, req, tenant_id, network_id):
|
def index(self, req, tenant_id, network_id):
|
||||||
""" Returns a list of port ids for a given network """
|
""" Returns a list of port ids for a given network """
|
||||||
return self._items(req, tenant_id, network_id, is_detail=False)
|
return self._items(req, tenant_id, network_id, is_detail=False)
|
||||||
|
|
||||||
def _items(self, req, tenant_id, network_id, is_detail):
|
def _items(self, req, tenant_id, network_id, is_detail):
|
||||||
""" Returns a list of networks. """
|
""" Returns a list of networks. """
|
||||||
try :
|
try:
|
||||||
ports = self.network_manager.get_all_ports(tenant_id, network_id)
|
ports = self.network_manager.get_all_ports(tenant_id, network_id)
|
||||||
builder = ports_view.get_view_builder(req)
|
builder = ports_view.get_view_builder(req)
|
||||||
result = [builder.build(port, is_detail)['port']
|
result = [builder.build(port, is_detail)['port']
|
||||||
@ -64,7 +65,7 @@ class Controller(common.QuantumController):
|
|||||||
return dict(ports=result)
|
return dict(ports=result)
|
||||||
except exception.NetworkNotFound as e:
|
except exception.NetworkNotFound as e:
|
||||||
return faults.Fault(faults.NetworkNotFound(e))
|
return faults.Fault(faults.NetworkNotFound(e))
|
||||||
|
|
||||||
def show(self, req, tenant_id, network_id, id):
|
def show(self, req, tenant_id, network_id, id):
|
||||||
""" Returns port details for given port and network """
|
""" Returns port details for given port and network """
|
||||||
try:
|
try:
|
||||||
@ -77,7 +78,7 @@ class Controller(common.QuantumController):
|
|||||||
except exception.NetworkNotFound as e:
|
except exception.NetworkNotFound as e:
|
||||||
return faults.Fault(faults.NetworkNotFound(e))
|
return faults.Fault(faults.NetworkNotFound(e))
|
||||||
except exception.PortNotFound as e:
|
except exception.PortNotFound as e:
|
||||||
return faults.Fault(faults.PortNotFound(e))
|
return faults.Fault(faults.PortNotFound(e))
|
||||||
|
|
||||||
def create(self, req, tenant_id, network_id):
|
def create(self, req, tenant_id, network_id):
|
||||||
""" Creates a new port for a given network """
|
""" Creates a new port for a given network """
|
||||||
@ -87,17 +88,17 @@ class Controller(common.QuantumController):
|
|||||||
self._parse_request_params(req, self._port_ops_param_list)
|
self._parse_request_params(req, self._port_ops_param_list)
|
||||||
except exc.HTTPError as e:
|
except exc.HTTPError as e:
|
||||||
return faults.Fault(e)
|
return faults.Fault(e)
|
||||||
try:
|
try:
|
||||||
port = self.network_manager.create_port(tenant_id,
|
port = self.network_manager.create_port(tenant_id,
|
||||||
network_id,
|
network_id,
|
||||||
req_params['port-state'])
|
req_params['port-state'])
|
||||||
builder = ports_view.get_view_builder(req)
|
builder = ports_view.get_view_builder(req)
|
||||||
result = builder.build(port)
|
result = builder.build(port)
|
||||||
return dict(ports=result)
|
return dict(ports=result)
|
||||||
except exception.NetworkNotFound as e:
|
except exception.NetworkNotFound as e:
|
||||||
return faults.Fault(faults.NetworkNotFound(e))
|
return faults.Fault(faults.NetworkNotFound(e))
|
||||||
except exception.StateInvalid as e:
|
except exception.StateInvalid as e:
|
||||||
return faults.Fault(faults.RequestedStateInvalid(e))
|
return faults.Fault(faults.RequestedStateInvalid(e))
|
||||||
|
|
||||||
def update(self, req, tenant_id, network_id, id):
|
def update(self, req, tenant_id, network_id, id):
|
||||||
""" Updates the state of a port for a given network """
|
""" Updates the state of a port for a given network """
|
||||||
@ -106,9 +107,9 @@ class Controller(common.QuantumController):
|
|||||||
req_params = \
|
req_params = \
|
||||||
self._parse_request_params(req, self._port_ops_param_list)
|
self._parse_request_params(req, self._port_ops_param_list)
|
||||||
except exc.HTTPError as e:
|
except exc.HTTPError as e:
|
||||||
return faults.Fault(e)
|
return faults.Fault(e)
|
||||||
try:
|
try:
|
||||||
port = self.network_manager.update_port(tenant_id,network_id, id,
|
port = self.network_manager.update_port(tenant_id, network_id, id,
|
||||||
req_params['port-state'])
|
req_params['port-state'])
|
||||||
builder = ports_view.get_view_builder(req)
|
builder = ports_view.get_view_builder(req)
|
||||||
result = builder.build(port, True)
|
result = builder.build(port, True)
|
||||||
@ -117,26 +118,24 @@ class Controller(common.QuantumController):
|
|||||||
return faults.Fault(faults.NetworkNotFound(e))
|
return faults.Fault(faults.NetworkNotFound(e))
|
||||||
except exception.PortNotFound as e:
|
except exception.PortNotFound as e:
|
||||||
return faults.Fault(faults.PortNotFound(e))
|
return faults.Fault(faults.PortNotFound(e))
|
||||||
except exception.StateInvalid as e:
|
except exception.StateInvalid as e:
|
||||||
return faults.Fault(faults.RequestedStateInvalid(e))
|
return faults.Fault(faults.RequestedStateInvalid(e))
|
||||||
|
|
||||||
|
|
||||||
def delete(self, req, tenant_id, network_id, id):
|
def delete(self, req, tenant_id, network_id, id):
|
||||||
""" Destroys the port with the given id """
|
""" Destroys the port with the given id """
|
||||||
#look for port state in request
|
#look for port state in request
|
||||||
try:
|
try:
|
||||||
self.network_manager.delete_port(tenant_id, network_id, id)
|
self.network_manager.delete_port(tenant_id, network_id, id)
|
||||||
return exc.HTTPAccepted()
|
return exc.HTTPAccepted()
|
||||||
#TODO(salvatore-orlando): Handle portInUse error
|
# TODO(salvatore-orlando): Handle portInUse error
|
||||||
except exception.NetworkNotFound as e:
|
except exception.NetworkNotFound as e:
|
||||||
return faults.Fault(faults.NetworkNotFound(e))
|
return faults.Fault(faults.NetworkNotFound(e))
|
||||||
except exception.PortNotFound as e:
|
except exception.PortNotFound as e:
|
||||||
return faults.Fault(faults.PortNotFound(e))
|
return faults.Fault(faults.PortNotFound(e))
|
||||||
except exception.PortInUse as e:
|
except exception.PortInUse as e:
|
||||||
return faults.Fault(faults.PortInUse(e))
|
return faults.Fault(faults.PortInUse(e))
|
||||||
|
|
||||||
|
def get_resource(self, req, tenant_id, network_id, id):
|
||||||
def get_resource(self,req,tenant_id, network_id, id):
|
|
||||||
try:
|
try:
|
||||||
result = self.network_manager.get_interface_details(
|
result = self.network_manager.get_interface_details(
|
||||||
tenant_id, network_id, id)
|
tenant_id, network_id, id)
|
||||||
@ -144,12 +143,9 @@ class Controller(common.QuantumController):
|
|||||||
except exception.NetworkNotFound as e:
|
except exception.NetworkNotFound as e:
|
||||||
return faults.Fault(faults.NetworkNotFound(e))
|
return faults.Fault(faults.NetworkNotFound(e))
|
||||||
except exception.PortNotFound as e:
|
except exception.PortNotFound as e:
|
||||||
return faults.Fault(faults.PortNotFound(e))
|
return faults.Fault(faults.PortNotFound(e))
|
||||||
|
|
||||||
#TODO - Complete implementation of these APIs
|
def attach_resource(self, req, tenant_id, network_id, id):
|
||||||
def attach_resource(self,req,tenant_id, network_id, id):
|
|
||||||
content_type = req.best_match_content_type()
|
|
||||||
print "Content type:%s" %content_type
|
|
||||||
try:
|
try:
|
||||||
req_params = \
|
req_params = \
|
||||||
self._parse_request_params(req,
|
self._parse_request_params(req,
|
||||||
@ -158,26 +154,24 @@ class Controller(common.QuantumController):
|
|||||||
return faults.Fault(e)
|
return faults.Fault(e)
|
||||||
try:
|
try:
|
||||||
self.network_manager.plug_interface(tenant_id,
|
self.network_manager.plug_interface(tenant_id,
|
||||||
network_id,id,
|
network_id, id,
|
||||||
req_params['attachment-id'])
|
req_params['attachment-id'])
|
||||||
return exc.HTTPAccepted()
|
return exc.HTTPAccepted()
|
||||||
except exception.NetworkNotFound as e:
|
except exception.NetworkNotFound as e:
|
||||||
return faults.Fault(faults.NetworkNotFound(e))
|
return faults.Fault(faults.NetworkNotFound(e))
|
||||||
except exception.PortNotFound as e:
|
except exception.PortNotFound as e:
|
||||||
return faults.Fault(faults.PortNotFound(e))
|
return faults.Fault(faults.PortNotFound(e))
|
||||||
except exception.PortInUse as e:
|
except exception.PortInUse as e:
|
||||||
return faults.Fault(faults.PortInUse(e))
|
return faults.Fault(faults.PortInUse(e))
|
||||||
except exception.AlreadyAttached as e:
|
except exception.AlreadyAttached as e:
|
||||||
return faults.Fault(faults.AlreadyAttached(e))
|
return faults.Fault(faults.AlreadyAttached(e))
|
||||||
|
|
||||||
|
def detach_resource(self, req, tenant_id, network_id, id):
|
||||||
#TODO - Complete implementation of these APIs
|
|
||||||
def detach_resource(self,req,tenant_id, network_id, id):
|
|
||||||
try:
|
try:
|
||||||
self.network_manager.unplug_interface(tenant_id,
|
self.network_manager.unplug_interface(tenant_id,
|
||||||
network_id,id)
|
network_id, id)
|
||||||
return exc.HTTPAccepted()
|
return exc.HTTPAccepted()
|
||||||
except exception.NetworkNotFound as e:
|
except exception.NetworkNotFound as e:
|
||||||
return faults.Fault(faults.NetworkNotFound(e))
|
return faults.Fault(faults.NetworkNotFound(e))
|
||||||
except exception.PortNotFound as e:
|
except exception.PortNotFound as e:
|
||||||
return faults.Fault(faults.PortNotFound(e))
|
return faults.Fault(faults.PortNotFound(e))
|
||||||
|
@ -13,4 +13,3 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
# @author: Somik Behera, Nicira Networks, Inc.
|
|
@ -33,17 +33,16 @@ class ViewBuilder(object):
|
|||||||
|
|
||||||
def build(self, network_data, is_detail=False):
|
def build(self, network_data, is_detail=False):
|
||||||
"""Generic method used to generate a network entity."""
|
"""Generic method used to generate a network entity."""
|
||||||
print "NETWORK-DATA:%s" %network_data
|
|
||||||
if is_detail:
|
if is_detail:
|
||||||
network = self._build_detail(network_data)
|
network = self._build_detail(network_data)
|
||||||
else:
|
else:
|
||||||
network = self._build_simple(network_data)
|
network = self._build_simple(network_data)
|
||||||
return network
|
return network
|
||||||
|
|
||||||
def _build_simple(self, network_data):
|
def _build_simple(self, network_data):
|
||||||
"""Return a simple model of a server."""
|
"""Return a simple model of a server."""
|
||||||
return dict(network=dict(id=network_data['net-id']))
|
return dict(network=dict(id=network_data['net-id']))
|
||||||
|
|
||||||
def _build_detail(self, network_data):
|
def _build_detail(self, network_data):
|
||||||
"""Return a simple model of a server."""
|
"""Return a simple model of a server."""
|
||||||
return dict(network=dict(id=network_data['net-id'],
|
return dict(network=dict(id=network_data['net-id'],
|
||||||
|
@ -31,17 +31,16 @@ class ViewBuilder(object):
|
|||||||
|
|
||||||
def build(self, port_data, is_detail=False):
|
def build(self, port_data, is_detail=False):
|
||||||
"""Generic method used to generate a port entity."""
|
"""Generic method used to generate a port entity."""
|
||||||
print "PORT-DATA:%s" %port_data
|
|
||||||
if is_detail:
|
if is_detail:
|
||||||
port = self._build_detail(port_data)
|
port = self._build_detail(port_data)
|
||||||
else:
|
else:
|
||||||
port = self._build_simple(port_data)
|
port = self._build_simple(port_data)
|
||||||
return port
|
return port
|
||||||
|
|
||||||
def _build_simple(self, port_data):
|
def _build_simple(self, port_data):
|
||||||
"""Return a simple model of a server."""
|
"""Return a simple model of a server."""
|
||||||
return dict(port=dict(id=port_data['port-id']))
|
return dict(port=dict(id=port_data['port-id']))
|
||||||
|
|
||||||
def _build_detail(self, port_data):
|
def _build_detail(self, port_data):
|
||||||
"""Return a simple model of a server."""
|
"""Return a simple model of a server."""
|
||||||
return dict(port=dict(id=port_data['port-id'],
|
return dict(port=dict(id=port_data['port-id'],
|
||||||
|
@ -36,7 +36,7 @@ def usage():
|
|||||||
print "detail_iface <tenant-id> <net-id> <port-id>"
|
print "detail_iface <tenant-id> <net-id> <port-id>"
|
||||||
print "list_iface <tenant-id> <net-id>\n"
|
print "list_iface <tenant-id> <net-id>\n"
|
||||||
|
|
||||||
if len(sys.argv) < 2 or len(sys.argv) > 6:
|
if len(sys.argv) < 2 or len(sys.argv) > 6:
|
||||||
usage()
|
usage()
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
||||||
@ -89,13 +89,13 @@ elif sys.argv[1] == "plug_iface" and len(sys.argv) == 6:
|
|||||||
elif sys.argv[1] == "unplug_iface" and len(sys.argv) == 5:
|
elif sys.argv[1] == "unplug_iface" and len(sys.argv) == 5:
|
||||||
manager.unplug_interface(sys.argv[2], sys.argv[3], sys.argv[4])
|
manager.unplug_interface(sys.argv[2], sys.argv[3], sys.argv[4])
|
||||||
print "UnPlugged remote interface " \
|
print "UnPlugged remote interface " \
|
||||||
"from Virtual Port:%s Virtual Network:%s" % (sys.argv[4],
|
"from Virtual Port:%s Virtual Network:%s" % (sys.argv[4],
|
||||||
sys.argv[3])
|
sys.argv[3])
|
||||||
elif sys.argv[1] == "detail_iface" and len(sys.argv) == 5:
|
elif sys.argv[1] == "detail_iface" and len(sys.argv) == 5:
|
||||||
remote_iface = manager.get_interface_details(sys.argv[2],
|
remote_iface = manager.get_interface_details(sys.argv[2],
|
||||||
sys.argv[3], sys.argv[4])
|
sys.argv[3], sys.argv[4])
|
||||||
print "Remote interface on Virtual Port:%s " \
|
print "Remote interface on Virtual Port:%s " \
|
||||||
"Virtual Network:%s is %s" % (sys.argv[4],
|
"Virtual Network:%s is %s" % (sys.argv[4],
|
||||||
sys.argv[3], remote_iface)
|
sys.argv[3], remote_iface)
|
||||||
elif sys.argv[1] == "list_iface" and len(sys.argv) == 4:
|
elif sys.argv[1] == "list_iface" and len(sys.argv) == 4:
|
||||||
iface_list = manager.get_all_attached_interfaces(sys.argv[2], sys.argv[3])
|
iface_list = manager.get_all_attached_interfaces(sys.argv[2], sys.argv[3])
|
||||||
@ -107,4 +107,3 @@ elif sys.argv[1] == "all" and len(sys.argv) == 2:
|
|||||||
else:
|
else:
|
||||||
print "invalid arguments: %s" % str(sys.argv)
|
print "invalid arguments: %s" % str(sys.argv)
|
||||||
usage()
|
usage()
|
||||||
|
|
||||||
|
@ -209,7 +209,7 @@ def find_config_file(options, args):
|
|||||||
fix_path(os.path.join('~', '.quantum')),
|
fix_path(os.path.join('~', '.quantum')),
|
||||||
fix_path('~'),
|
fix_path('~'),
|
||||||
os.path.join(FLAGS.state_path, 'etc'),
|
os.path.join(FLAGS.state_path, 'etc'),
|
||||||
os.path.join(FLAGS.state_path, 'etc','quantum'),
|
os.path.join(FLAGS.state_path, 'etc', 'quantum'),
|
||||||
'/etc/quantum/',
|
'/etc/quantum/',
|
||||||
'/etc']
|
'/etc']
|
||||||
for cfg_dir in config_file_dirs:
|
for cfg_dir in config_file_dirs:
|
||||||
@ -244,12 +244,10 @@ def load_paste_config(app_name, options, args):
|
|||||||
problem loading the configuration file.
|
problem loading the configuration file.
|
||||||
"""
|
"""
|
||||||
conf_file = find_config_file(options, args)
|
conf_file = find_config_file(options, args)
|
||||||
print "Conf_file:%s" %conf_file
|
|
||||||
if not conf_file:
|
if not conf_file:
|
||||||
raise RuntimeError("Unable to locate any configuration file. "
|
raise RuntimeError("Unable to locate any configuration file. "
|
||||||
"Cannot load application %s" % app_name)
|
"Cannot load application %s" % app_name)
|
||||||
try:
|
try:
|
||||||
print "App_name:%s" %app_name
|
|
||||||
conf = deploy.appconfig("config:%s" % conf_file, name=app_name)
|
conf = deploy.appconfig("config:%s" % conf_file, name=app_name)
|
||||||
return conf_file, conf
|
return conf_file, conf
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
|
@ -25,7 +25,7 @@ import logging
|
|||||||
|
|
||||||
class QuantumException(Exception):
|
class QuantumException(Exception):
|
||||||
"""Base Quantum Exception
|
"""Base Quantum Exception
|
||||||
|
|
||||||
Taken from nova.exception.NovaException
|
Taken from nova.exception.NovaException
|
||||||
To correctly use this class, inherit from it and define
|
To correctly use this class, inherit from it and define
|
||||||
a 'message' property. That message will get printf'd
|
a 'message' property. That message will get printf'd
|
||||||
@ -45,6 +45,7 @@ class QuantumException(Exception):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self._error_string
|
return self._error_string
|
||||||
|
|
||||||
|
|
||||||
class ProcessExecutionError(IOError):
|
class ProcessExecutionError(IOError):
|
||||||
def __init__(self, stdout=None, stderr=None, exit_code=None, cmd=None,
|
def __init__(self, stdout=None, stderr=None, exit_code=None, cmd=None,
|
||||||
description=None):
|
description=None):
|
||||||
@ -84,11 +85,11 @@ class NetworkNotFound(NotFound):
|
|||||||
class PortNotFound(NotFound):
|
class PortNotFound(NotFound):
|
||||||
message = _("Port %(port_id)s could not be found " \
|
message = _("Port %(port_id)s could not be found " \
|
||||||
"on network %(net_id)s")
|
"on network %(net_id)s")
|
||||||
|
|
||||||
|
|
||||||
class StateInvalid(QuantumException):
|
class StateInvalid(QuantumException):
|
||||||
message = _("Unsupported port state: %(port_state)s")
|
message = _("Unsupported port state: %(port_state)s")
|
||||||
|
|
||||||
|
|
||||||
class NetworkInUse(QuantumException):
|
class NetworkInUse(QuantumException):
|
||||||
message = _("Unable to complete operation on network %(net_id)s. " \
|
message = _("Unable to complete operation on network %(net_id)s. " \
|
||||||
@ -100,11 +101,13 @@ class PortInUse(QuantumException):
|
|||||||
"for network %(net_id)s. The attachment '%(att_id)s" \
|
"for network %(net_id)s. The attachment '%(att_id)s" \
|
||||||
"is plugged into the logical port.")
|
"is plugged into the logical port.")
|
||||||
|
|
||||||
|
|
||||||
class AlreadyAttached(QuantumException):
|
class AlreadyAttached(QuantumException):
|
||||||
message = _("Unable to plug the attachment %(att_id)s into port " \
|
message = _("Unable to plug the attachment %(att_id)s into port " \
|
||||||
"%(port_id)s for network %(net_id)s. The attachment is " \
|
"%(port_id)s for network %(net_id)s. The attachment is " \
|
||||||
"already plugged into port %(att_port_id)s")
|
"already plugged into port %(att_port_id)s")
|
||||||
|
|
||||||
|
|
||||||
class Duplicate(Error):
|
class Duplicate(Error):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ Global flags should be defined here, the rest are defined where they're used.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import getopt
|
import getopt
|
||||||
import os
|
import os
|
||||||
import string
|
import string
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@ -249,4 +249,3 @@ def DECLARE(name, module_string, flag_values=FLAGS):
|
|||||||
|
|
||||||
DEFINE_string('state_path', os.path.join(os.path.dirname(__file__), '../../'),
|
DEFINE_string('state_path', os.path.join(os.path.dirname(__file__), '../../'),
|
||||||
"Top-level directory for maintaining quantum's state")
|
"Top-level directory for maintaining quantum's state")
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@ from exceptions import ProcessExecutionError
|
|||||||
TIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
|
TIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
|
||||||
FLAGS = flags.FLAGS
|
FLAGS = flags.FLAGS
|
||||||
|
|
||||||
|
|
||||||
def int_from_bool_as_string(subject):
|
def int_from_bool_as_string(subject):
|
||||||
"""
|
"""
|
||||||
Interpret a string as a boolean and return either 1 or 0.
|
Interpret a string as a boolean and return either 1 or 0.
|
||||||
@ -188,6 +189,7 @@ def isotime(at=None):
|
|||||||
def parse_isotime(timestr):
|
def parse_isotime(timestr):
|
||||||
return datetime.datetime.strptime(timestr, TIME_FORMAT)
|
return datetime.datetime.strptime(timestr, TIME_FORMAT)
|
||||||
|
|
||||||
|
|
||||||
def getPluginFromConfig(file="config.ini"):
|
def getPluginFromConfig(file="config.ini"):
|
||||||
Config = ConfigParser.ConfigParser()
|
Config = ConfigParser.ConfigParser()
|
||||||
Config.read(os.path.join(FLAGS.state_path, file))
|
Config.read(os.path.join(FLAGS.state_path, file))
|
||||||
|
@ -40,6 +40,7 @@ from quantum.common import exceptions as exception
|
|||||||
|
|
||||||
LOG = logging.getLogger('quantum.common.wsgi')
|
LOG = logging.getLogger('quantum.common.wsgi')
|
||||||
|
|
||||||
|
|
||||||
class WritableLogger(object):
|
class WritableLogger(object):
|
||||||
"""A thin wrapper that responds to `write` and logs."""
|
"""A thin wrapper that responds to `write` and logs."""
|
||||||
|
|
||||||
@ -126,7 +127,7 @@ class Request(webob.Request):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
parts = self.path.rsplit('.', 1)
|
parts = self.path.rsplit('.', 1)
|
||||||
LOG.debug("Request parts:%s",parts)
|
LOG.debug("Request parts:%s", parts)
|
||||||
if len(parts) > 1:
|
if len(parts) > 1:
|
||||||
format = parts[1]
|
format = parts[1]
|
||||||
if format in ['json', 'xml']:
|
if format in ['json', 'xml']:
|
||||||
@ -134,7 +135,6 @@ class Request(webob.Request):
|
|||||||
|
|
||||||
ctypes = ['application/json', 'application/xml']
|
ctypes = ['application/json', 'application/xml']
|
||||||
bm = self.accept.best_match(ctypes)
|
bm = self.accept.best_match(ctypes)
|
||||||
LOG.debug("BM:%s",bm)
|
|
||||||
return bm or 'application/json'
|
return bm or 'application/json'
|
||||||
|
|
||||||
def get_content_type(self):
|
def get_content_type(self):
|
||||||
@ -336,10 +336,6 @@ class Controller(object):
|
|||||||
arg_dict = req.environ['wsgiorg.routing_args'][1]
|
arg_dict = req.environ['wsgiorg.routing_args'][1]
|
||||||
action = arg_dict['action']
|
action = arg_dict['action']
|
||||||
method = getattr(self, action)
|
method = getattr(self, action)
|
||||||
LOG.debug("ARG_DICT:%s",arg_dict)
|
|
||||||
LOG.debug("Action:%s",action)
|
|
||||||
LOG.debug("Method:%s",method)
|
|
||||||
LOG.debug("%s %s" % (req.method, req.url))
|
|
||||||
del arg_dict['controller']
|
del arg_dict['controller']
|
||||||
del arg_dict['action']
|
del arg_dict['action']
|
||||||
if 'format' in arg_dict:
|
if 'format' in arg_dict:
|
||||||
@ -349,8 +345,6 @@ class Controller(object):
|
|||||||
|
|
||||||
if type(result) is dict:
|
if type(result) is dict:
|
||||||
content_type = req.best_match_content_type()
|
content_type = req.best_match_content_type()
|
||||||
LOG.debug("Content type:%s",content_type)
|
|
||||||
LOG.debug("Result:%s",result)
|
|
||||||
default_xmlns = self.get_default_xmlns(req)
|
default_xmlns = self.get_default_xmlns(req)
|
||||||
body = self._serialize(result, content_type, default_xmlns)
|
body = self._serialize(result, content_type, default_xmlns)
|
||||||
|
|
||||||
@ -497,9 +491,7 @@ class Serializer(object):
|
|||||||
xmlns = metadata.get('xmlns', None)
|
xmlns = metadata.get('xmlns', None)
|
||||||
if xmlns:
|
if xmlns:
|
||||||
result.setAttribute('xmlns', xmlns)
|
result.setAttribute('xmlns', xmlns)
|
||||||
LOG.debug("DATA:%s",data)
|
|
||||||
if type(data) is list:
|
if type(data) is list:
|
||||||
LOG.debug("TYPE IS LIST")
|
|
||||||
collections = metadata.get('list_collections', {})
|
collections = metadata.get('list_collections', {})
|
||||||
if nodename in collections:
|
if nodename in collections:
|
||||||
metadata = collections[nodename]
|
metadata = collections[nodename]
|
||||||
@ -518,7 +510,6 @@ class Serializer(object):
|
|||||||
node = self._to_xml_node(doc, metadata, singular, item)
|
node = self._to_xml_node(doc, metadata, singular, item)
|
||||||
result.appendChild(node)
|
result.appendChild(node)
|
||||||
elif type(data) is dict:
|
elif type(data) is dict:
|
||||||
LOG.debug("TYPE IS DICT")
|
|
||||||
collections = metadata.get('dict_collections', {})
|
collections = metadata.get('dict_collections', {})
|
||||||
if nodename in collections:
|
if nodename in collections:
|
||||||
metadata = collections[nodename]
|
metadata = collections[nodename]
|
||||||
@ -538,8 +529,6 @@ class Serializer(object):
|
|||||||
result.appendChild(node)
|
result.appendChild(node)
|
||||||
else:
|
else:
|
||||||
# Type is atom
|
# Type is atom
|
||||||
LOG.debug("TYPE IS ATOM:%s",data)
|
|
||||||
node = doc.createTextNode(str(data))
|
node = doc.createTextNode(str(data))
|
||||||
result.appendChild(node)
|
result.appendChild(node)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -18,8 +18,9 @@
|
|||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Quantum's Manager class is responsible for parsing a config file and instantiating the correct
|
Quantum's Manager class is responsible for parsing a config file
|
||||||
plugin that concretely implement quantum_plugin_base class
|
and instantiating the correct plugin that concretely implement
|
||||||
|
quantum_plugin_base class
|
||||||
|
|
||||||
The caller should make sure that QuantumManager is a singleton.
|
The caller should make sure that QuantumManager is a singleton.
|
||||||
"""
|
"""
|
||||||
@ -34,7 +35,7 @@ CONFIG_FILE = "quantum/plugins.ini"
|
|||||||
|
|
||||||
class QuantumManager(object):
|
class QuantumManager(object):
|
||||||
|
|
||||||
def __init__(self,config=CONFIG_FILE):
|
def __init__(self, config=CONFIG_FILE):
|
||||||
self.configuration_file = CONFIG_FILE
|
self.configuration_file = CONFIG_FILE
|
||||||
plugin_location = utils.getPluginFromConfig(CONFIG_FILE)
|
plugin_location = utils.getPluginFromConfig(CONFIG_FILE)
|
||||||
print "PLUGIN LOCATION:%s" % plugin_location
|
print "PLUGIN LOCATION:%s" % plugin_location
|
||||||
|
@ -17,33 +17,32 @@
|
|||||||
|
|
||||||
from quantum.common import exceptions as exc
|
from quantum.common import exceptions as exc
|
||||||
|
|
||||||
|
|
||||||
class QuantumEchoPlugin(object):
|
class QuantumEchoPlugin(object):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
QuantumEchoPlugin is a demo plugin that doesn't
|
QuantumEchoPlugin is a demo plugin that doesn't
|
||||||
do anything but demonstrated the concept of a
|
do anything but demonstrated the concept of a
|
||||||
concrete Quantum Plugin. Any call to this plugin
|
concrete Quantum Plugin. Any call to this plugin
|
||||||
will result in just a "print" to std. out with
|
will result in just a "print" to std. out with
|
||||||
the name of the method that was called.
|
the name of the method that was called.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_all_networks(self, tenant_id):
|
def get_all_networks(self, tenant_id):
|
||||||
"""
|
"""
|
||||||
Returns a dictionary containing all
|
Returns a dictionary containing all
|
||||||
<network_uuid, network_name> for
|
<network_uuid, network_name> for
|
||||||
the specified tenant.
|
the specified tenant.
|
||||||
"""
|
"""
|
||||||
print("get_all_networks() called\n")
|
print("get_all_networks() called\n")
|
||||||
|
|
||||||
|
|
||||||
def create_network(self, tenant_id, net_name):
|
def create_network(self, tenant_id, net_name):
|
||||||
"""
|
"""
|
||||||
Creates a new Virtual Network, and assigns it
|
Creates a new Virtual Network, and assigns it
|
||||||
a symbolic name.
|
a symbolic name.
|
||||||
"""
|
"""
|
||||||
print("create_network() called\n")
|
print("create_network() called\n")
|
||||||
|
|
||||||
|
|
||||||
def delete_network(self, tenant_id, net_id):
|
def delete_network(self, tenant_id, net_id):
|
||||||
"""
|
"""
|
||||||
Deletes the network with the specified network identifier
|
Deletes the network with the specified network identifier
|
||||||
@ -51,38 +50,33 @@ class QuantumEchoPlugin(object):
|
|||||||
"""
|
"""
|
||||||
print("delete_network() called\n")
|
print("delete_network() called\n")
|
||||||
|
|
||||||
|
|
||||||
def get_network_details(self, tenant_id, net_id):
|
def get_network_details(self, tenant_id, net_id):
|
||||||
"""
|
"""
|
||||||
Deletes the Virtual Network belonging to a the
|
Deletes the Virtual Network belonging to a the
|
||||||
spec
|
spec
|
||||||
"""
|
"""
|
||||||
print("get_network_details() called\n")
|
print("get_network_details() called\n")
|
||||||
|
|
||||||
|
|
||||||
def rename_network(self, tenant_id, net_id, new_name):
|
def rename_network(self, tenant_id, net_id, new_name):
|
||||||
"""
|
"""
|
||||||
Updates the symbolic name belonging to a particular
|
Updates the symbolic name belonging to a particular
|
||||||
Virtual Network.
|
Virtual Network.
|
||||||
"""
|
"""
|
||||||
print("rename_network() called\n")
|
print("rename_network() called\n")
|
||||||
|
|
||||||
|
|
||||||
def get_all_ports(self, tenant_id, net_id):
|
def get_all_ports(self, tenant_id, net_id):
|
||||||
"""
|
"""
|
||||||
Retrieves all port identifiers belonging to the
|
Retrieves all port identifiers belonging to the
|
||||||
specified Virtual Network.
|
specified Virtual Network.
|
||||||
"""
|
"""
|
||||||
print("get_all_ports() called\n")
|
print("get_all_ports() called\n")
|
||||||
|
|
||||||
|
|
||||||
def create_port(self, tenant_id, net_id):
|
def create_port(self, tenant_id, net_id):
|
||||||
"""
|
"""
|
||||||
Creates a port on the specified Virtual Network.
|
Creates a port on the specified Virtual Network.
|
||||||
"""
|
"""
|
||||||
print("create_port() called\n")
|
print("create_port() called\n")
|
||||||
|
|
||||||
|
|
||||||
def delete_port(self, tenant_id, net_id, port_id):
|
def delete_port(self, tenant_id, net_id, port_id):
|
||||||
"""
|
"""
|
||||||
Deletes a port on a specified Virtual Network,
|
Deletes a port on a specified Virtual Network,
|
||||||
@ -91,40 +85,35 @@ class QuantumEchoPlugin(object):
|
|||||||
is deleted.
|
is deleted.
|
||||||
"""
|
"""
|
||||||
print("delete_port() called\n")
|
print("delete_port() called\n")
|
||||||
|
|
||||||
|
|
||||||
def get_port_details(self, tenant_id, net_id, port_id):
|
def get_port_details(self, tenant_id, net_id, port_id):
|
||||||
"""
|
"""
|
||||||
This method allows the user to retrieve a remote interface
|
This method allows the user to retrieve a remote interface
|
||||||
that is attached to this particular port.
|
that is attached to this particular port.
|
||||||
"""
|
"""
|
||||||
print("get_port_details() called\n")
|
print("get_port_details() called\n")
|
||||||
|
|
||||||
|
|
||||||
def plug_interface(self, tenant_id, net_id, port_id, remote_interface_id):
|
def plug_interface(self, tenant_id, net_id, port_id, remote_interface_id):
|
||||||
"""
|
"""
|
||||||
Attaches a remote interface to the specified port on the
|
Attaches a remote interface to the specified port on the
|
||||||
specified Virtual Network.
|
specified Virtual Network.
|
||||||
"""
|
"""
|
||||||
print("plug_interface() called\n")
|
print("plug_interface() called\n")
|
||||||
|
|
||||||
|
|
||||||
def unplug_interface(self, tenant_id, net_id, port_id):
|
def unplug_interface(self, tenant_id, net_id, port_id):
|
||||||
"""
|
"""
|
||||||
Detaches a remote interface from the specified port on the
|
Detaches a remote interface from the specified port on the
|
||||||
specified Virtual Network.
|
specified Virtual Network.
|
||||||
"""
|
"""
|
||||||
print("unplug_interface() called\n")
|
print("unplug_interface() called\n")
|
||||||
|
|
||||||
|
|
||||||
def get_interface_details(self, tenant_id, net_id, port_id):
|
def get_interface_details(self, tenant_id, net_id, port_id):
|
||||||
"""
|
"""
|
||||||
Retrieves the remote interface that is attached at this
|
Retrieves the remote interface that is attached at this
|
||||||
particular port.
|
particular port.
|
||||||
"""
|
"""
|
||||||
print("get_interface_details() called\n")
|
print("get_interface_details() called\n")
|
||||||
|
|
||||||
|
|
||||||
def get_all_attached_interfaces(self, tenant_id, net_id):
|
def get_all_attached_interfaces(self, tenant_id, net_id):
|
||||||
"""
|
"""
|
||||||
Retrieves all remote interfaces that are attached to
|
Retrieves all remote interfaces that are attached to
|
||||||
@ -132,6 +121,7 @@ class QuantumEchoPlugin(object):
|
|||||||
"""
|
"""
|
||||||
print("get_all_attached_interfaces() called\n")
|
print("get_all_attached_interfaces() called\n")
|
||||||
|
|
||||||
|
|
||||||
class DummyDataPlugin(object):
|
class DummyDataPlugin(object):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@ -139,18 +129,17 @@ class DummyDataPlugin(object):
|
|||||||
hard-coded data structures to aid in quantum
|
hard-coded data structures to aid in quantum
|
||||||
client/cli development
|
client/cli development
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def get_all_networks(self, tenant_id):
|
def get_all_networks(self, tenant_id):
|
||||||
"""
|
"""
|
||||||
Returns a dictionary containing all
|
Returns a dictionary containing all
|
||||||
<network_uuid, network_name> for
|
<network_uuid, network_name> for
|
||||||
the specified tenant.
|
the specified tenant.
|
||||||
"""
|
"""
|
||||||
nets = {"001": "lNet1", "002": "lNet2" , "003": "lNet3"}
|
nets = {"001": "lNet1", "002": "lNet2", "003": "lNet3"}
|
||||||
print("get_all_networks() called\n")
|
print("get_all_networks() called\n")
|
||||||
return nets
|
return nets
|
||||||
|
|
||||||
|
|
||||||
def create_network(self, tenant_id, net_name):
|
def create_network(self, tenant_id, net_name):
|
||||||
"""
|
"""
|
||||||
Creates a new Virtual Network, and assigns it
|
Creates a new Virtual Network, and assigns it
|
||||||
@ -159,8 +148,7 @@ class DummyDataPlugin(object):
|
|||||||
print("create_network() called\n")
|
print("create_network() called\n")
|
||||||
# return network_id of the created network
|
# return network_id of the created network
|
||||||
return 101
|
return 101
|
||||||
|
|
||||||
|
|
||||||
def delete_network(self, tenant_id, net_id):
|
def delete_network(self, tenant_id, net_id):
|
||||||
"""
|
"""
|
||||||
Deletes the network with the specified network identifier
|
Deletes the network with the specified network identifier
|
||||||
@ -168,25 +156,23 @@ class DummyDataPlugin(object):
|
|||||||
"""
|
"""
|
||||||
print("delete_network() called\n")
|
print("delete_network() called\n")
|
||||||
|
|
||||||
|
|
||||||
def get_network_details(self, tenant_id, net_id):
|
def get_network_details(self, tenant_id, net_id):
|
||||||
"""
|
"""
|
||||||
retrieved a list of all the remote vifs that
|
retrieved a list of all the remote vifs that
|
||||||
are attached to the network
|
are attached to the network
|
||||||
"""
|
"""
|
||||||
print("get_network_details() called\n")
|
print("get_network_details() called\n")
|
||||||
vifs_on_net = ["/tenant1/networks/net_id/portid/vif2.0", "/tenant1/networks/10/121/vif1.1"]
|
vifs_on_net = ["/tenant1/networks/net_id/portid/vif2.0",
|
||||||
|
"/tenant1/networks/10/121/vif1.1"]
|
||||||
return vifs_on_net
|
return vifs_on_net
|
||||||
|
|
||||||
|
|
||||||
def rename_network(self, tenant_id, net_id, new_name):
|
def rename_network(self, tenant_id, net_id, new_name):
|
||||||
"""
|
"""
|
||||||
Updates the symbolic name belonging to a particular
|
Updates the symbolic name belonging to a particular
|
||||||
Virtual Network.
|
Virtual Network.
|
||||||
"""
|
"""
|
||||||
print("rename_network() called\n")
|
print("rename_network() called\n")
|
||||||
|
|
||||||
|
|
||||||
def get_all_ports(self, tenant_id, net_id):
|
def get_all_ports(self, tenant_id, net_id):
|
||||||
"""
|
"""
|
||||||
Retrieves all port identifiers belonging to the
|
Retrieves all port identifiers belonging to the
|
||||||
@ -195,8 +181,7 @@ class DummyDataPlugin(object):
|
|||||||
print("get_all_ports() called\n")
|
print("get_all_ports() called\n")
|
||||||
port_ids_on_net = ["2", "3", "4"]
|
port_ids_on_net = ["2", "3", "4"]
|
||||||
return port_ids_on_net
|
return port_ids_on_net
|
||||||
|
|
||||||
|
|
||||||
def create_port(self, tenant_id, net_id):
|
def create_port(self, tenant_id, net_id):
|
||||||
"""
|
"""
|
||||||
Creates a port on the specified Virtual Network.
|
Creates a port on the specified Virtual Network.
|
||||||
@ -204,8 +189,7 @@ class DummyDataPlugin(object):
|
|||||||
print("create_port() called\n")
|
print("create_port() called\n")
|
||||||
#return the port id
|
#return the port id
|
||||||
return 201
|
return 201
|
||||||
|
|
||||||
|
|
||||||
def delete_port(self, tenant_id, net_id, port_id):
|
def delete_port(self, tenant_id, net_id, port_id):
|
||||||
"""
|
"""
|
||||||
Deletes a port on a specified Virtual Network,
|
Deletes a port on a specified Virtual Network,
|
||||||
@ -214,8 +198,7 @@ class DummyDataPlugin(object):
|
|||||||
is deleted.
|
is deleted.
|
||||||
"""
|
"""
|
||||||
print("delete_port() called\n")
|
print("delete_port() called\n")
|
||||||
|
|
||||||
|
|
||||||
def get_port_details(self, tenant_id, net_id, port_id):
|
def get_port_details(self, tenant_id, net_id, port_id):
|
||||||
"""
|
"""
|
||||||
This method allows the user to retrieve a remote interface
|
This method allows the user to retrieve a remote interface
|
||||||
@ -224,24 +207,21 @@ class DummyDataPlugin(object):
|
|||||||
print("get_port_details() called\n")
|
print("get_port_details() called\n")
|
||||||
#returns the remote interface UUID
|
#returns the remote interface UUID
|
||||||
return "/tenant1/networks/net_id/portid/vif2.1"
|
return "/tenant1/networks/net_id/portid/vif2.1"
|
||||||
|
|
||||||
|
|
||||||
def plug_interface(self, tenant_id, net_id, port_id, remote_interface_id):
|
def plug_interface(self, tenant_id, net_id, port_id, remote_interface_id):
|
||||||
"""
|
"""
|
||||||
Attaches a remote interface to the specified port on the
|
Attaches a remote interface to the specified port on the
|
||||||
specified Virtual Network.
|
specified Virtual Network.
|
||||||
"""
|
"""
|
||||||
print("plug_interface() called\n")
|
print("plug_interface() called\n")
|
||||||
|
|
||||||
|
|
||||||
def unplug_interface(self, tenant_id, net_id, port_id):
|
def unplug_interface(self, tenant_id, net_id, port_id):
|
||||||
"""
|
"""
|
||||||
Detaches a remote interface from the specified port on the
|
Detaches a remote interface from the specified port on the
|
||||||
specified Virtual Network.
|
specified Virtual Network.
|
||||||
"""
|
"""
|
||||||
print("unplug_interface() called\n")
|
print("unplug_interface() called\n")
|
||||||
|
|
||||||
|
|
||||||
def get_interface_details(self, tenant_id, net_id, port_id):
|
def get_interface_details(self, tenant_id, net_id, port_id):
|
||||||
"""
|
"""
|
||||||
Retrieves the remote interface that is attached at this
|
Retrieves the remote interface that is attached at this
|
||||||
@ -250,8 +230,7 @@ class DummyDataPlugin(object):
|
|||||||
print("get_interface_details() called\n")
|
print("get_interface_details() called\n")
|
||||||
#returns the remote interface UUID
|
#returns the remote interface UUID
|
||||||
return "/tenant1/networks/net_id/portid/vif2.0"
|
return "/tenant1/networks/net_id/portid/vif2.0"
|
||||||
|
|
||||||
|
|
||||||
def get_all_attached_interfaces(self, tenant_id, net_id):
|
def get_all_attached_interfaces(self, tenant_id, net_id):
|
||||||
"""
|
"""
|
||||||
Retrieves all remote interfaces that are attached to
|
Retrieves all remote interfaces that are attached to
|
||||||
@ -259,10 +238,11 @@ class DummyDataPlugin(object):
|
|||||||
"""
|
"""
|
||||||
print("get_all_attached_interfaces() called\n")
|
print("get_all_attached_interfaces() called\n")
|
||||||
# returns a list of all attached remote interfaces
|
# returns a list of all attached remote interfaces
|
||||||
vifs_on_net = ["/tenant1/networks/net_id/portid/vif2.0", "/tenant1/networks/10/121/vif1.1"]
|
vifs_on_net = ["/tenant1/networks/net_id/portid/vif2.0",
|
||||||
|
"/tenant1/networks/10/121/vif1.1"]
|
||||||
return vifs_on_net
|
return vifs_on_net
|
||||||
|
|
||||||
|
|
||||||
class FakePlugin(object):
|
class FakePlugin(object):
|
||||||
"""
|
"""
|
||||||
FakePlugin is a demo plugin that provides
|
FakePlugin is a demo plugin that provides
|
||||||
@ -272,72 +252,70 @@ class FakePlugin(object):
|
|||||||
|
|
||||||
#static data for networks and ports
|
#static data for networks and ports
|
||||||
_port_dict_1 = {
|
_port_dict_1 = {
|
||||||
1 : {'port-id': 1,
|
1: {'port-id': 1,
|
||||||
'port-state': 'DOWN',
|
'port-state': 'DOWN',
|
||||||
'attachment': None},
|
'attachment': None},
|
||||||
2 : {'port-id': 2,
|
2: {'port-id': 2,
|
||||||
'port-state':'UP',
|
'port-state': 'UP',
|
||||||
'attachment': None}
|
'attachment': None}
|
||||||
}
|
}
|
||||||
_port_dict_2 = {
|
_port_dict_2 = {
|
||||||
1 : {'port-id': 1,
|
1: {'port-id': 1,
|
||||||
'port-state': 'UP',
|
'port-state': 'UP',
|
||||||
'attachment': 'SomeFormOfVIFID'},
|
'attachment': 'SomeFormOfVIFID'},
|
||||||
2 : {'port-id': 2,
|
2: {'port-id': 2,
|
||||||
'port-state':'DOWN',
|
'port-state': 'DOWN',
|
||||||
'attachment': None}
|
'attachment': None}
|
||||||
}
|
}
|
||||||
_networks={'001':
|
_networks = {'001':
|
||||||
{
|
{
|
||||||
'net-id':'001',
|
'net-id': '001',
|
||||||
'net-name':'pippotest',
|
'net-name': 'pippotest',
|
||||||
'net-ports': _port_dict_1
|
'net-ports': _port_dict_1
|
||||||
},
|
},
|
||||||
'002':
|
'002':
|
||||||
{
|
{
|
||||||
'net-id':'002',
|
'net-id': '002',
|
||||||
'net-name':'cicciotest',
|
'net-name': 'cicciotest',
|
||||||
'net-ports': _port_dict_2
|
'net-ports': _port_dict_2
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
FakePlugin._net_counter=len(FakePlugin._networks)
|
FakePlugin._net_counter = len(FakePlugin._networks)
|
||||||
|
|
||||||
def _get_network(self, tenant_id, network_id):
|
def _get_network(self, tenant_id, network_id):
|
||||||
network = FakePlugin._networks.get(network_id)
|
network = FakePlugin._networks.get(network_id)
|
||||||
if not network:
|
if not network:
|
||||||
raise exc.NetworkNotFound(net_id=network_id)
|
raise exc.NetworkNotFound(net_id=network_id)
|
||||||
return network
|
return network
|
||||||
|
|
||||||
|
|
||||||
def _get_port(self, tenant_id, network_id, port_id):
|
def _get_port(self, tenant_id, network_id, port_id):
|
||||||
net = self._get_network(tenant_id, network_id)
|
net = self._get_network(tenant_id, network_id)
|
||||||
port = net['net-ports'].get(int(port_id))
|
port = net['net-ports'].get(int(port_id))
|
||||||
if not port:
|
if not port:
|
||||||
raise exc.PortNotFound(net_id=network_id, port_id=port_id)
|
raise exc.PortNotFound(net_id=network_id, port_id=port_id)
|
||||||
return port
|
return port
|
||||||
|
|
||||||
def _validate_port_state(self, port_state):
|
def _validate_port_state(self, port_state):
|
||||||
if port_state.upper() not in ('UP','DOWN'):
|
if port_state.upper() not in ('UP', 'DOWN'):
|
||||||
raise exc.StateInvalid(port_state=port_state)
|
raise exc.StateInvalid(port_state=port_state)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _validate_attachment(self, tenant_id, network_id, port_id,
|
def _validate_attachment(self, tenant_id, network_id, port_id,
|
||||||
remote_interface_id):
|
remote_interface_id):
|
||||||
network = self._get_network(tenant_id, network_id)
|
network = self._get_network(tenant_id, network_id)
|
||||||
for port in network['net-ports'].values():
|
for port in network['net-ports'].values():
|
||||||
if port['attachment'] == remote_interface_id:
|
if port['attachment'] == remote_interface_id:
|
||||||
raise exc.AlreadyAttached(net_id = network_id,
|
raise exc.AlreadyAttached(net_id=network_id,
|
||||||
port_id = port_id,
|
port_id=port_id,
|
||||||
att_id = port['attachment'],
|
att_id=port['attachment'],
|
||||||
att_port_id = port['port-id'])
|
att_port_id=port['port-id'])
|
||||||
|
|
||||||
def get_all_networks(self, tenant_id):
|
def get_all_networks(self, tenant_id):
|
||||||
"""
|
"""
|
||||||
Returns a dictionary containing all
|
Returns a dictionary containing all
|
||||||
<network_uuid, network_name> for
|
<network_uuid, network_name> for
|
||||||
the specified tenant.
|
the specified tenant.
|
||||||
"""
|
"""
|
||||||
print("get_all_networks() called\n")
|
print("get_all_networks() called\n")
|
||||||
return FakePlugin._networks.values()
|
return FakePlugin._networks.values()
|
||||||
@ -357,16 +335,16 @@ class FakePlugin(object):
|
|||||||
"""
|
"""
|
||||||
print("create_network() called\n")
|
print("create_network() called\n")
|
||||||
FakePlugin._net_counter += 1
|
FakePlugin._net_counter += 1
|
||||||
new_net_id=("0" * (3 - len(str(FakePlugin._net_counter)))) + \
|
new_net_id = ("0" * (3 - len(str(FakePlugin._net_counter)))) + \
|
||||||
str(FakePlugin._net_counter)
|
str(FakePlugin._net_counter)
|
||||||
print new_net_id
|
print new_net_id
|
||||||
new_net_dict={'net-id':new_net_id,
|
new_net_dict = {'net-id': new_net_id,
|
||||||
'net-name':net_name,
|
'net-name': net_name,
|
||||||
'net-ports': {}}
|
'net-ports': {}}
|
||||||
FakePlugin._networks[new_net_id]=new_net_dict
|
FakePlugin._networks[new_net_id] = new_net_dict
|
||||||
# return network_id of the created network
|
# return network_id of the created network
|
||||||
return new_net_dict
|
return new_net_dict
|
||||||
|
|
||||||
def delete_network(self, tenant_id, net_id):
|
def delete_network(self, tenant_id, net_id):
|
||||||
"""
|
"""
|
||||||
Deletes the network with the specified network identifier
|
Deletes the network with the specified network identifier
|
||||||
@ -384,7 +362,7 @@ class FakePlugin(object):
|
|||||||
return net
|
return net
|
||||||
# Network not found
|
# Network not found
|
||||||
raise exc.NetworkNotFound(net_id=net_id)
|
raise exc.NetworkNotFound(net_id=net_id)
|
||||||
|
|
||||||
def rename_network(self, tenant_id, net_id, new_name):
|
def rename_network(self, tenant_id, net_id, new_name):
|
||||||
"""
|
"""
|
||||||
Updates the symbolic name belonging to a particular
|
Updates the symbolic name belonging to a particular
|
||||||
@ -392,7 +370,7 @@ class FakePlugin(object):
|
|||||||
"""
|
"""
|
||||||
print("rename_network() called\n")
|
print("rename_network() called\n")
|
||||||
net = self._get_network(tenant_id, net_id)
|
net = self._get_network(tenant_id, net_id)
|
||||||
net['net-name']=new_name
|
net['net-name'] = new_name
|
||||||
return net
|
return net
|
||||||
|
|
||||||
def get_all_ports(self, tenant_id, net_id):
|
def get_all_ports(self, tenant_id, net_id):
|
||||||
@ -412,7 +390,7 @@ class FakePlugin(object):
|
|||||||
"""
|
"""
|
||||||
print("get_port_details() called\n")
|
print("get_port_details() called\n")
|
||||||
return self._get_port(tenant_id, net_id, port_id)
|
return self._get_port(tenant_id, net_id, port_id)
|
||||||
|
|
||||||
def create_port(self, tenant_id, net_id, port_state=None):
|
def create_port(self, tenant_id, net_id, port_state=None):
|
||||||
"""
|
"""
|
||||||
Creates a port on the specified Virtual Network.
|
Creates a port on the specified Virtual Network.
|
||||||
@ -420,15 +398,15 @@ class FakePlugin(object):
|
|||||||
print("create_port() called\n")
|
print("create_port() called\n")
|
||||||
net = self._get_network(tenant_id, net_id)
|
net = self._get_network(tenant_id, net_id)
|
||||||
# check port state
|
# check port state
|
||||||
# TODO(salvatore-orlando): Validate port state in API?
|
# TODO(salvatore-orlando): Validate port state in API?
|
||||||
self._validate_port_state(port_state)
|
self._validate_port_state(port_state)
|
||||||
ports = net['net-ports']
|
ports = net['net-ports']
|
||||||
new_port_id = max(ports.keys())+1
|
new_port_id = max(ports.keys()) + 1
|
||||||
new_port_dict = {'port-id':new_port_id,
|
new_port_dict = {'port-id': new_port_id,
|
||||||
'port-state': port_state,
|
'port-state': port_state,
|
||||||
'attachment': None}
|
'attachment': None}
|
||||||
ports[new_port_id] = new_port_dict
|
ports[new_port_id] = new_port_dict
|
||||||
return new_port_dict
|
return new_port_dict
|
||||||
|
|
||||||
def update_port(self, tenant_id, net_id, port_id, port_state):
|
def update_port(self, tenant_id, net_id, port_id, port_state):
|
||||||
"""
|
"""
|
||||||
@ -438,8 +416,8 @@ class FakePlugin(object):
|
|||||||
port = self._get_port(tenant_id, net_id, port_id)
|
port = self._get_port(tenant_id, net_id, port_id)
|
||||||
self._validate_port_state(port_state)
|
self._validate_port_state(port_state)
|
||||||
port['port-state'] = port_state
|
port['port-state'] = port_state
|
||||||
return port
|
return port
|
||||||
|
|
||||||
def delete_port(self, tenant_id, net_id, port_id):
|
def delete_port(self, tenant_id, net_id, port_id):
|
||||||
"""
|
"""
|
||||||
Deletes a port on a specified Virtual Network,
|
Deletes a port on a specified Virtual Network,
|
||||||
@ -451,11 +429,11 @@ class FakePlugin(object):
|
|||||||
net = self._get_network(tenant_id, net_id)
|
net = self._get_network(tenant_id, net_id)
|
||||||
port = self._get_port(tenant_id, net_id, port_id)
|
port = self._get_port(tenant_id, net_id, port_id)
|
||||||
if port['attachment']:
|
if port['attachment']:
|
||||||
raise exc.PortInUse(net_id=net_id,port_id=port_id,
|
raise exc.PortInUse(net_id=net_id, port_id=port_id,
|
||||||
att_id=port['attachment'])
|
att_id=port['attachment'])
|
||||||
try:
|
try:
|
||||||
net['net-ports'].pop(int(port_id))
|
net['net-ports'].pop(int(port_id))
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise exc.PortNotFound(net_id=net_id, port_id=port_id)
|
raise exc.PortNotFound(net_id=net_id, port_id=port_id)
|
||||||
|
|
||||||
def get_interface_details(self, tenant_id, net_id, port_id):
|
def get_interface_details(self, tenant_id, net_id, port_id):
|
||||||
@ -466,7 +444,7 @@ class FakePlugin(object):
|
|||||||
print("get_interface_details() called\n")
|
print("get_interface_details() called\n")
|
||||||
port = self._get_port(tenant_id, net_id, port_id)
|
port = self._get_port(tenant_id, net_id, port_id)
|
||||||
return port['attachment']
|
return port['attachment']
|
||||||
|
|
||||||
def plug_interface(self, tenant_id, net_id, port_id, remote_interface_id):
|
def plug_interface(self, tenant_id, net_id, port_id, remote_interface_id):
|
||||||
"""
|
"""
|
||||||
Attaches a remote interface to the specified port on the
|
Attaches a remote interface to the specified port on the
|
||||||
@ -478,10 +456,10 @@ class FakePlugin(object):
|
|||||||
remote_interface_id)
|
remote_interface_id)
|
||||||
port = self._get_port(tenant_id, net_id, port_id)
|
port = self._get_port(tenant_id, net_id, port_id)
|
||||||
if port['attachment']:
|
if port['attachment']:
|
||||||
raise exc.PortInUse(net_id=net_id,port_id=port_id,
|
raise exc.PortInUse(net_id=net_id, port_id=port_id,
|
||||||
att_id=port['attachment'])
|
att_id=port['attachment'])
|
||||||
port['attachment'] = remote_interface_id
|
port['attachment'] = remote_interface_id
|
||||||
|
|
||||||
def unplug_interface(self, tenant_id, net_id, port_id):
|
def unplug_interface(self, tenant_id, net_id, port_id):
|
||||||
"""
|
"""
|
||||||
Detaches a remote interface from the specified port on the
|
Detaches a remote interface from the specified port on the
|
||||||
@ -492,8 +470,8 @@ class FakePlugin(object):
|
|||||||
# TODO(salvatore-orlando):
|
# TODO(salvatore-orlando):
|
||||||
# Should unplug on port without attachment raise an Error?
|
# Should unplug on port without attachment raise an Error?
|
||||||
port['attachment'] = None
|
port['attachment'] = None
|
||||||
|
|
||||||
#TODO - neeed to update methods from this point onwards
|
# TODO - neeed to update methods from this point onwards
|
||||||
def get_all_attached_interfaces(self, tenant_id, net_id):
|
def get_all_attached_interfaces(self, tenant_id, net_id):
|
||||||
"""
|
"""
|
||||||
Retrieves all remote interfaces that are attached to
|
Retrieves all remote interfaces that are attached to
|
||||||
@ -501,6 +479,6 @@ class FakePlugin(object):
|
|||||||
"""
|
"""
|
||||||
print("get_all_attached_interfaces() called\n")
|
print("get_all_attached_interfaces() called\n")
|
||||||
# returns a list of all attached remote interfaces
|
# returns a list of all attached remote interfaces
|
||||||
vifs_on_net = ["/tenant1/networks/net_id/portid/vif2.0", "/tenant1/networks/10/121/vif1.1"]
|
vifs_on_net = ["/tenant1/networks/net_id/portid/vif2.0",
|
||||||
|
"/tenant1/networks/10/121/vif1.1"]
|
||||||
return vifs_on_net
|
return vifs_on_net
|
||||||
|
|
@ -13,4 +13,4 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
# @author: Somik Behera, Nicira Networks, Inc.
|
# @author: Somik Behera, Nicira Networks, Inc.
|
||||||
|
@ -88,7 +88,7 @@ class QuantumApiService(WsgiService):
|
|||||||
return service
|
return service
|
||||||
|
|
||||||
|
|
||||||
def serve_wsgi(cls, conf=None, options = None, args=None):
|
def serve_wsgi(cls, conf=None, options=None, args=None):
|
||||||
try:
|
try:
|
||||||
service = cls.create(conf, options, args)
|
service = cls.create(conf, options, args)
|
||||||
except Exception:
|
except Exception:
|
||||||
@ -99,7 +99,7 @@ def serve_wsgi(cls, conf=None, options = None, args=None):
|
|||||||
|
|
||||||
return service
|
return service
|
||||||
|
|
||||||
|
|
||||||
def _run_wsgi(app_name, paste_conf, paste_config_file):
|
def _run_wsgi(app_name, paste_conf, paste_config_file):
|
||||||
LOG.info(_('Using paste.deploy config at: %s'), paste_config_file)
|
LOG.info(_('Using paste.deploy config at: %s'), paste_config_file)
|
||||||
app = config.load_paste_app(paste_config_file, app_name)
|
app = config.load_paste_app(paste_config_file, app_name)
|
||||||
|
Loading…
Reference in New Issue
Block a user