nfv/nfv/nfv-vim/nfv_vim/api/controllers/v1/virtualised_resources/_networks_api.py

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)