Loading src/common/Constants.py +1 −2 Original line number Diff line number Diff line Loading @@ -83,7 +83,6 @@ DEFAULT_SERVICE_HTTP_PORTS = { # Default HTTP/REST-API service base URLs DEFAULT_SERVICE_HTTP_BASEURLS = { ServiceNameEnum.CONTEXT .value : '/api', ServiceNameEnum.COMPUTE .value : '/restconf/data', ServiceNameEnum.COMPUTE .value : '/restconf', ServiceNameEnum.WEBUI .value : None, } src/compute/service/__main__.py +1 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ from .rest_server.nbi_plugins.ietf_l2vpn import register_ietf_l2vpn terminate = threading.Event() LOGGER = None def signal_handler(signal, frame): # pylint: disable=redefined-outer-name def signal_handler(signal, frame): # pylint: disable=redefined-outer-name, unused-argument LOGGER.warning('Terminate signal received') terminate.set() Loading src/compute/service/rest_server/nbi_plugins/debug_api/Resources.py +4 −40 Original line number Diff line number Diff line Loading @@ -12,48 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. from flask.json import jsonify from flask_restful import Resource from common.proto.context_pb2 import ConnectionId, ContextId, DeviceId, Empty, LinkId, ServiceId, SliceId, TopologyId from common.proto.policy_pb2 import PolicyRuleId from common.tools.grpc.Tools import grpc_message_to_json from common.tools.object_factory.Connection import json_connection_id from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Device import json_device_id from common.tools.object_factory.Link import json_link_id from common.tools.object_factory.PolicyRule import json_policyrule_id from common.tools.object_factory.Service import json_service_id from common.tools.object_factory.Slice import json_slice_id from common.tools.object_factory.Topology import json_topology_id from common.proto.context_pb2 import Empty from context.client.ContextClient import ContextClient def format_grpc_to_json(grpc_reply): return jsonify(grpc_message_to_json(grpc_reply)) def grpc_connection_id(connection_uuid): return ConnectionId(**json_connection_id(connection_uuid)) def grpc_context_id(context_uuid): return ContextId(**json_context_id(context_uuid)) def grpc_device_id(device_uuid): return DeviceId(**json_device_id(device_uuid)) def grpc_link_id(link_uuid): return LinkId(**json_link_id(link_uuid)) def grpc_service_id(context_uuid, service_uuid): return ServiceId(**json_service_id(service_uuid, context_id=json_context_id(context_uuid))) def grpc_slice_id(context_uuid, slice_uuid): return SliceId(**json_slice_id(slice_uuid, context_id=json_context_id(context_uuid))) def grpc_topology_id(context_uuid, topology_uuid): return TopologyId(**json_topology_id(topology_uuid, context_id=json_context_id(context_uuid))) def grpc_policy_rule_id(policy_rule_uuid): return PolicyRuleId(**json_policyrule_id(policy_rule_uuid)) from .Tools import ( format_grpc_to_json, grpc_connection_id, grpc_context_id, grpc_device_id, grpc_link_id, grpc_policy_rule_id, grpc_service_id, grpc_slice_id, grpc_topology_id) class _Resource(Resource): Loading src/compute/service/rest_server/nbi_plugins/debug_api/Tools.py 0 → 100644 +54 −0 Original line number Diff line number Diff line # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from flask.json import jsonify from common.proto.context_pb2 import ConnectionId, ContextId, DeviceId, LinkId, ServiceId, SliceId, TopologyId from common.proto.policy_pb2 import PolicyRuleId from common.tools.grpc.Tools import grpc_message_to_json from common.tools.object_factory.Connection import json_connection_id from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Device import json_device_id from common.tools.object_factory.Link import json_link_id from common.tools.object_factory.PolicyRule import json_policyrule_id from common.tools.object_factory.Service import json_service_id from common.tools.object_factory.Slice import json_slice_id from common.tools.object_factory.Topology import json_topology_id def format_grpc_to_json(grpc_reply): return jsonify(grpc_message_to_json(grpc_reply)) def grpc_connection_id(connection_uuid): return ConnectionId(**json_connection_id(connection_uuid)) def grpc_context_id(context_uuid): return ContextId(**json_context_id(context_uuid)) def grpc_device_id(device_uuid): return DeviceId(**json_device_id(device_uuid)) def grpc_link_id(link_uuid): return LinkId(**json_link_id(link_uuid)) def grpc_service_id(context_uuid, service_uuid): return ServiceId(**json_service_id(service_uuid, context_id=json_context_id(context_uuid))) def grpc_slice_id(context_uuid, slice_uuid): return SliceId(**json_slice_id(slice_uuid, context_id=json_context_id(context_uuid))) def grpc_topology_id(context_uuid, topology_uuid): return TopologyId(**json_topology_id(topology_uuid, context_id=json_context_id(context_uuid))) def grpc_policy_rule_id(policy_rule_uuid): return PolicyRuleId(**json_policyrule_id(policy_rule_uuid)) src/compute/service/rest_server/nbi_plugins/debug_api/__init__.py +16 −20 Original line number Diff line number Diff line Loading @@ -12,52 +12,48 @@ # See the License for the specific language governing permissions and # limitations under the License. # RFC 8466 - L2VPN Service Model (L2SM) # Ref: https://datatracker.ietf.org/doc/html/rfc8466 from compute.service.rest_server.RestServer import RestServer from .Resources import ( Connection, ConnectionIds, Connections, Context, ContextIds, Contexts, Device, DeviceIds, Devices, Link, LinkIds, Links, PolicyRule, PolicyRuleIds, PolicyRules, Service, ServiceIds, Services, Slice, SliceIds, Slices, Topologies, Topology, TopologyIds) URL_PREFIX = '/api' URL_PREFIX = '/debug-api' # Use 'path' type in Service and Sink because service_uuid and link_uuid might contain char '/' and Flask is unable to # recognize them in 'string' type. # Use 'path' type since some identifiers might contain char '/' and Flask is unable to recognize them in 'string' type. RESOURCES = [ # (endpoint_name, resource_class, resource_url) ('api.context_ids', ContextIds, '/context_ids'), ('api.contexts', Contexts, '/contexts'), ('api.context', Context, '/context/<string:context_uuid>'), ('api.context', Context, '/context/<path:context_uuid>'), ('api.topology_ids', TopologyIds, '/context/<string:context_uuid>/topology_ids'), ('api.topologies', Topologies, '/context/<string:context_uuid>/topologies'), ('api.topology', Topology, '/context/<string:context_uuid>/topology/<string:topology_uuid>'), ('api.topology_ids', TopologyIds, '/context/<path:context_uuid>/topology_ids'), ('api.topologies', Topologies, '/context/<path:context_uuid>/topologies'), ('api.topology', Topology, '/context/<path:context_uuid>/topology/<path:topology_uuid>'), ('api.service_ids', ServiceIds, '/context/<string:context_uuid>/service_ids'), ('api.services', Services, '/context/<string:context_uuid>/services'), ('api.service', Service, '/context/<string:context_uuid>/service/<path:service_uuid>'), ('api.service_ids', ServiceIds, '/context/<path:context_uuid>/service_ids'), ('api.services', Services, '/context/<path:context_uuid>/services'), ('api.service', Service, '/context/<path:context_uuid>/service/<path:service_uuid>'), ('api.slice_ids', SliceIds, '/context/<string:context_uuid>/slice_ids'), ('api.slices', Slices, '/context/<string:context_uuid>/slices'), ('api.slice', Slice, '/context/<string:context_uuid>/slice/<path:slice_uuid>'), ('api.slice_ids', SliceIds, '/context/<path:context_uuid>/slice_ids'), ('api.slices', Slices, '/context/<path:context_uuid>/slices'), ('api.slice', Slice, '/context/<path:context_uuid>/slice/<path:slice_uuid>'), ('api.device_ids', DeviceIds, '/device_ids'), ('api.devices', Devices, '/devices'), ('api.device', Device, '/device/<string:device_uuid>'), ('api.device', Device, '/device/<path:device_uuid>'), ('api.link_ids', LinkIds, '/link_ids'), ('api.links', Links, '/links'), ('api.link', Link, '/link/<path:link_uuid>'), ('api.connection_ids', ConnectionIds, '/context/<string:context_uuid>/service/<path:service_uuid>/connection_ids'), ('api.connections', Connections, '/context/<string:context_uuid>/service/<path:service_uuid>/connections'), ('api.connection_ids', ConnectionIds, '/context/<path:context_uuid>/service/<path:service_uuid>/connection_ids'), ('api.connections', Connections, '/context/<path:context_uuid>/service/<path:service_uuid>/connections'), ('api.connection', Connection, '/connection/<path:connection_uuid>'), ('api.policyrule_ids', PolicyRuleIds, '/policyrule_ids'), ('api.policyrules', PolicyRules, '/policyrules'), ('api.policyrule', PolicyRule, '/policyrule/<string:policyrule_uuid>'), ('api.policyrule', PolicyRule, '/policyrule/<path:policyrule_uuid>'), ] def register_debug_api(rest_server : RestServer): Loading Loading
src/common/Constants.py +1 −2 Original line number Diff line number Diff line Loading @@ -83,7 +83,6 @@ DEFAULT_SERVICE_HTTP_PORTS = { # Default HTTP/REST-API service base URLs DEFAULT_SERVICE_HTTP_BASEURLS = { ServiceNameEnum.CONTEXT .value : '/api', ServiceNameEnum.COMPUTE .value : '/restconf/data', ServiceNameEnum.COMPUTE .value : '/restconf', ServiceNameEnum.WEBUI .value : None, }
src/compute/service/__main__.py +1 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ from .rest_server.nbi_plugins.ietf_l2vpn import register_ietf_l2vpn terminate = threading.Event() LOGGER = None def signal_handler(signal, frame): # pylint: disable=redefined-outer-name def signal_handler(signal, frame): # pylint: disable=redefined-outer-name, unused-argument LOGGER.warning('Terminate signal received') terminate.set() Loading
src/compute/service/rest_server/nbi_plugins/debug_api/Resources.py +4 −40 Original line number Diff line number Diff line Loading @@ -12,48 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. from flask.json import jsonify from flask_restful import Resource from common.proto.context_pb2 import ConnectionId, ContextId, DeviceId, Empty, LinkId, ServiceId, SliceId, TopologyId from common.proto.policy_pb2 import PolicyRuleId from common.tools.grpc.Tools import grpc_message_to_json from common.tools.object_factory.Connection import json_connection_id from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Device import json_device_id from common.tools.object_factory.Link import json_link_id from common.tools.object_factory.PolicyRule import json_policyrule_id from common.tools.object_factory.Service import json_service_id from common.tools.object_factory.Slice import json_slice_id from common.tools.object_factory.Topology import json_topology_id from common.proto.context_pb2 import Empty from context.client.ContextClient import ContextClient def format_grpc_to_json(grpc_reply): return jsonify(grpc_message_to_json(grpc_reply)) def grpc_connection_id(connection_uuid): return ConnectionId(**json_connection_id(connection_uuid)) def grpc_context_id(context_uuid): return ContextId(**json_context_id(context_uuid)) def grpc_device_id(device_uuid): return DeviceId(**json_device_id(device_uuid)) def grpc_link_id(link_uuid): return LinkId(**json_link_id(link_uuid)) def grpc_service_id(context_uuid, service_uuid): return ServiceId(**json_service_id(service_uuid, context_id=json_context_id(context_uuid))) def grpc_slice_id(context_uuid, slice_uuid): return SliceId(**json_slice_id(slice_uuid, context_id=json_context_id(context_uuid))) def grpc_topology_id(context_uuid, topology_uuid): return TopologyId(**json_topology_id(topology_uuid, context_id=json_context_id(context_uuid))) def grpc_policy_rule_id(policy_rule_uuid): return PolicyRuleId(**json_policyrule_id(policy_rule_uuid)) from .Tools import ( format_grpc_to_json, grpc_connection_id, grpc_context_id, grpc_device_id, grpc_link_id, grpc_policy_rule_id, grpc_service_id, grpc_slice_id, grpc_topology_id) class _Resource(Resource): Loading
src/compute/service/rest_server/nbi_plugins/debug_api/Tools.py 0 → 100644 +54 −0 Original line number Diff line number Diff line # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from flask.json import jsonify from common.proto.context_pb2 import ConnectionId, ContextId, DeviceId, LinkId, ServiceId, SliceId, TopologyId from common.proto.policy_pb2 import PolicyRuleId from common.tools.grpc.Tools import grpc_message_to_json from common.tools.object_factory.Connection import json_connection_id from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Device import json_device_id from common.tools.object_factory.Link import json_link_id from common.tools.object_factory.PolicyRule import json_policyrule_id from common.tools.object_factory.Service import json_service_id from common.tools.object_factory.Slice import json_slice_id from common.tools.object_factory.Topology import json_topology_id def format_grpc_to_json(grpc_reply): return jsonify(grpc_message_to_json(grpc_reply)) def grpc_connection_id(connection_uuid): return ConnectionId(**json_connection_id(connection_uuid)) def grpc_context_id(context_uuid): return ContextId(**json_context_id(context_uuid)) def grpc_device_id(device_uuid): return DeviceId(**json_device_id(device_uuid)) def grpc_link_id(link_uuid): return LinkId(**json_link_id(link_uuid)) def grpc_service_id(context_uuid, service_uuid): return ServiceId(**json_service_id(service_uuid, context_id=json_context_id(context_uuid))) def grpc_slice_id(context_uuid, slice_uuid): return SliceId(**json_slice_id(slice_uuid, context_id=json_context_id(context_uuid))) def grpc_topology_id(context_uuid, topology_uuid): return TopologyId(**json_topology_id(topology_uuid, context_id=json_context_id(context_uuid))) def grpc_policy_rule_id(policy_rule_uuid): return PolicyRuleId(**json_policyrule_id(policy_rule_uuid))
src/compute/service/rest_server/nbi_plugins/debug_api/__init__.py +16 −20 Original line number Diff line number Diff line Loading @@ -12,52 +12,48 @@ # See the License for the specific language governing permissions and # limitations under the License. # RFC 8466 - L2VPN Service Model (L2SM) # Ref: https://datatracker.ietf.org/doc/html/rfc8466 from compute.service.rest_server.RestServer import RestServer from .Resources import ( Connection, ConnectionIds, Connections, Context, ContextIds, Contexts, Device, DeviceIds, Devices, Link, LinkIds, Links, PolicyRule, PolicyRuleIds, PolicyRules, Service, ServiceIds, Services, Slice, SliceIds, Slices, Topologies, Topology, TopologyIds) URL_PREFIX = '/api' URL_PREFIX = '/debug-api' # Use 'path' type in Service and Sink because service_uuid and link_uuid might contain char '/' and Flask is unable to # recognize them in 'string' type. # Use 'path' type since some identifiers might contain char '/' and Flask is unable to recognize them in 'string' type. RESOURCES = [ # (endpoint_name, resource_class, resource_url) ('api.context_ids', ContextIds, '/context_ids'), ('api.contexts', Contexts, '/contexts'), ('api.context', Context, '/context/<string:context_uuid>'), ('api.context', Context, '/context/<path:context_uuid>'), ('api.topology_ids', TopologyIds, '/context/<string:context_uuid>/topology_ids'), ('api.topologies', Topologies, '/context/<string:context_uuid>/topologies'), ('api.topology', Topology, '/context/<string:context_uuid>/topology/<string:topology_uuid>'), ('api.topology_ids', TopologyIds, '/context/<path:context_uuid>/topology_ids'), ('api.topologies', Topologies, '/context/<path:context_uuid>/topologies'), ('api.topology', Topology, '/context/<path:context_uuid>/topology/<path:topology_uuid>'), ('api.service_ids', ServiceIds, '/context/<string:context_uuid>/service_ids'), ('api.services', Services, '/context/<string:context_uuid>/services'), ('api.service', Service, '/context/<string:context_uuid>/service/<path:service_uuid>'), ('api.service_ids', ServiceIds, '/context/<path:context_uuid>/service_ids'), ('api.services', Services, '/context/<path:context_uuid>/services'), ('api.service', Service, '/context/<path:context_uuid>/service/<path:service_uuid>'), ('api.slice_ids', SliceIds, '/context/<string:context_uuid>/slice_ids'), ('api.slices', Slices, '/context/<string:context_uuid>/slices'), ('api.slice', Slice, '/context/<string:context_uuid>/slice/<path:slice_uuid>'), ('api.slice_ids', SliceIds, '/context/<path:context_uuid>/slice_ids'), ('api.slices', Slices, '/context/<path:context_uuid>/slices'), ('api.slice', Slice, '/context/<path:context_uuid>/slice/<path:slice_uuid>'), ('api.device_ids', DeviceIds, '/device_ids'), ('api.devices', Devices, '/devices'), ('api.device', Device, '/device/<string:device_uuid>'), ('api.device', Device, '/device/<path:device_uuid>'), ('api.link_ids', LinkIds, '/link_ids'), ('api.links', Links, '/links'), ('api.link', Link, '/link/<path:link_uuid>'), ('api.connection_ids', ConnectionIds, '/context/<string:context_uuid>/service/<path:service_uuid>/connection_ids'), ('api.connections', Connections, '/context/<string:context_uuid>/service/<path:service_uuid>/connections'), ('api.connection_ids', ConnectionIds, '/context/<path:context_uuid>/service/<path:service_uuid>/connection_ids'), ('api.connections', Connections, '/context/<path:context_uuid>/service/<path:service_uuid>/connections'), ('api.connection', Connection, '/connection/<path:connection_uuid>'), ('api.policyrule_ids', PolicyRuleIds, '/policyrule_ids'), ('api.policyrules', PolicyRules, '/policyrules'), ('api.policyrule', PolicyRule, '/policyrule/<string:policyrule_uuid>'), ('api.policyrule', PolicyRule, '/policyrule/<path:policyrule_uuid>'), ] def register_debug_api(rest_server : RestServer): Loading