191 lines
8.3 KiB
Python
Executable File
191 lines
8.3 KiB
Python
Executable File
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
from six.moves import http_client as httplib
|
|
import pecan
|
|
from wsme import types as wsme_types
|
|
import wsmeext.pecan as wsme_pecan
|
|
|
|
from nfv_common import debug
|
|
|
|
from nfv_vim.api.controllers.v1.virtualised_resources._networks_model import NetworkResourceClass
|
|
from nfv_vim.api.controllers.v1.virtualised_resources._networks_middleware import NetworkResourceType
|
|
from nfv_vim.api.controllers.v1.virtualised_resources._networks_middleware import NetworkSubnetType
|
|
from nfv_vim.api.controllers.v1.virtualised_resources._networks_middleware import NetworkSubnetResourceType
|
|
from nfv_vim.api.controllers.v1.virtualised_resources._networks_middleware import NetworkType
|
|
from nfv_vim.api.controllers.v1.virtualised_resources._networks_middleware import network_allocate
|
|
from nfv_vim.api.controllers.v1.virtualised_resources._networks_middleware import network_get
|
|
from nfv_vim.api.controllers.v1.virtualised_resources._networks_middleware import network_get_all
|
|
from nfv_vim.api.controllers.v1.virtualised_resources._networks_middleware import network_update
|
|
from nfv_vim.api.controllers.v1.virtualised_resources._networks_middleware import network_delete
|
|
|
|
DLOG = debug.debug_get_logger('nfv_vim.api.virtualised_network')
|
|
|
|
|
|
class NetworkCreateInputData(wsme_types.Base):
|
|
"""
|
|
Virtualised Resources - Network Create Input Data
|
|
"""
|
|
network_resource_id = wsme_types.wsattr(unicode, mandatory=True)
|
|
reservation_id = wsme_types.wsattr(unicode, mandatory=False)
|
|
network_resource_type = wsme_types.wsattr(NetworkResourceClass,
|
|
mandatory=True)
|
|
type_network_data = wsme_types.wsattr(NetworkType, mandatory=False,
|
|
default=None)
|
|
type_subnet_data = wsme_types.wsattr(NetworkSubnetType, mandatory=False,
|
|
default=None)
|
|
meta_data = wsme_types.wsattr(unicode, mandatory=False, default=None)
|
|
|
|
|
|
class NetworkCreateOutputData(wsme_types.Base):
|
|
"""
|
|
Virtualised Resources - Network Create Output Data
|
|
"""
|
|
operation_result = wsme_types.wsattr(unicode, mandatory=False, default=None)
|
|
network_data = wsme_types.wsattr(NetworkResourceType, mandatory=False)
|
|
subnet_data = wsme_types.wsattr(NetworkSubnetResourceType, mandatory=False)
|
|
message = wsme_types.wsattr(unicode, mandatory=False, default=None)
|
|
|
|
|
|
class NetworkUpdateInputData(wsme_types.Base):
|
|
"""
|
|
Virtualised Resources - Network Create Input Data
|
|
"""
|
|
network_resource_id = wsme_types.wsattr(unicode, mandatory=True)
|
|
update_network_data = wsme_types.wsattr(NetworkType, mandatory=False,
|
|
default=None)
|
|
update_subnet_data = wsme_types.wsattr(NetworkSubnetType, mandatory=False,
|
|
default=None)
|
|
meta_data = wsme_types.wsattr(unicode, mandatory=False, default=None)
|
|
|
|
|
|
class NetworkUpdateOutputData(wsme_types.Base):
|
|
"""
|
|
Virtualised Resources - Network Update Output Data
|
|
"""
|
|
operation_result = wsme_types.wsattr(unicode, mandatory=False, default=None)
|
|
network_resource_id = wsme_types.wsattr(unicode, mandatory=True)
|
|
network_data = wsme_types.wsattr(NetworkResourceType, mandatory=False)
|
|
subnet_data = wsme_types.wsattr(NetworkSubnetResourceType, mandatory=False)
|
|
message = wsme_types.wsattr(unicode, mandatory=False, default=None)
|
|
|
|
|
|
class NetworkDeleteInputData(wsme_types.Base):
|
|
"""
|
|
Virtualised Resources - Network Delete Input Data
|
|
"""
|
|
network_resource_ids = wsme_types.wsattr([unicode], mandatory=True)
|
|
|
|
|
|
class NetworkDeleteOutputData(wsme_types.Base):
|
|
"""
|
|
Virtualised Resources - Network Delete Output Data
|
|
"""
|
|
operation_result = wsme_types.wsattr(unicode, mandatory=False, default=None)
|
|
network_resource_ids = wsme_types.wsattr([unicode], mandatory=False)
|
|
message = wsme_types.wsattr(unicode, mandatory=False, default=None)
|
|
|
|
|
|
class NetworkQueryOutputData(wsme_types.Base):
|
|
"""
|
|
Virtualised Resources - Network Query Output Data
|
|
"""
|
|
operation_result = wsme_types.wsattr(unicode, mandatory=False, default=None)
|
|
query_result = wsme_types.wsattr([NetworkResourceType], mandatory=False)
|
|
message = wsme_types.wsattr(unicode, mandatory=False, default=None)
|
|
|
|
|
|
class NetworksAPI(pecan.rest.RestController):
|
|
"""
|
|
Virtualised Resources - Networks API
|
|
"""
|
|
@wsme_pecan.wsexpose(NetworkQueryOutputData, unicode,
|
|
status_code=httplib.OK)
|
|
def get_one(self, network_resource_id):
|
|
DLOG.verbose("Network-API get called for network %s."
|
|
% network_resource_id)
|
|
|
|
(http_status_code, network_resource_type) \
|
|
= network_get(network_resource_id)
|
|
if httplib.OK == http_status_code:
|
|
output_data = NetworkQueryOutputData()
|
|
output_data.query_result = list()
|
|
output_data.query_result.append(network_resource_type)
|
|
return output_data
|
|
else:
|
|
return pecan.abort(http_status_code)
|
|
|
|
@wsme_pecan.wsexpose(NetworkQueryOutputData, status_code=httplib.OK)
|
|
def get_all(self):
|
|
DLOG.verbose("Network-API get-all called.")
|
|
|
|
(http_status_code, network_resource_types) = network_get_all()
|
|
if httplib.OK == http_status_code:
|
|
output_data = NetworkQueryOutputData()
|
|
output_data.query_result = network_resource_types
|
|
return output_data
|
|
else:
|
|
return pecan.abort(http_status_code)
|
|
|
|
@wsme_pecan.wsexpose(NetworkCreateOutputData, body=NetworkCreateInputData,
|
|
status_code=httplib.CREATED)
|
|
def post(self, input_data):
|
|
DLOG.verbose("Network-API create called for network %s."
|
|
% input_data.network_resource_id)
|
|
|
|
if 'network' == input_data.network_resource_type:
|
|
(http_status_code, network_resource_type) \
|
|
= network_allocate(input_data.network_resource_id,
|
|
input_data.type_network_data)
|
|
if httplib.OK == http_status_code:
|
|
output_data = NetworkCreateOutputData()
|
|
output_data.network_data = network_resource_type
|
|
return output_data
|
|
else:
|
|
return pecan.abort(http_status_code)
|
|
else:
|
|
DLOG.error("Unexpected network resource type %s for network %s."
|
|
% (input_data.network_resource_type,
|
|
input_data.network_resource_id))
|
|
return pecan.abort(httplib.INTERNAL_SERVER_ERROR)
|
|
|
|
@wsme_pecan.wsexpose(NetworkUpdateOutputData, body=NetworkUpdateInputData,
|
|
status_code=httplib.OK)
|
|
def patch(self, input_data):
|
|
DLOG.verbose("Network-API update called for network %s."
|
|
% input_data.network_resource_id)
|
|
|
|
if input_data.update_network_data is not None:
|
|
(http_status_code, network_resource_type) \
|
|
= network_update(input_data.network_resource_id,
|
|
input_data.update_network_data)
|
|
if httplib.OK == http_status_code:
|
|
output_data = NetworkUpdateOutputData()
|
|
output_data.network_data = network_resource_type
|
|
return output_data
|
|
else:
|
|
return pecan.abort(http_status_code)
|
|
else:
|
|
DLOG.error("Unexpected network resource for network %s."
|
|
% input_data.network_resource_id)
|
|
return pecan.abort(httplib.INTERNAL_SERVER_ERROR)
|
|
|
|
@wsme_pecan.wsexpose(NetworkDeleteOutputData, body=NetworkDeleteInputData,
|
|
status_code=httplib.OK)
|
|
def delete(self, input_data):
|
|
DLOG.verbose("Network-API delete called for network(s) %s."
|
|
% input_data.network_resource_ids)
|
|
|
|
(http_status_code, deleted_network_resource_ids) \
|
|
= network_delete(input_data.network_resource_ids)
|
|
if httplib.OK == http_status_code:
|
|
if 0 < len(deleted_network_resource_ids):
|
|
output_data = NetworkDeleteOutputData()
|
|
output_data.network_resource_ids = deleted_network_resource_ids
|
|
return output_data
|
|
else:
|
|
return pecan.abort(httplib.NOT_FOUND)
|
|
else:
|
|
return pecan.abort(http_status_code)
|