diff --git a/src/osm_client/Dockerfile b/src/osm_client/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..1c74274047be341435c8587c7894985764d252e6 --- /dev/null +++ b/src/osm_client/Dockerfile @@ -0,0 +1,77 @@ +# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (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 python:3.10.16-slim + + +# Install dependencies +RUN apt-get --yes --quiet --quiet update +RUN apt-get --yes --quiet --quiet install wget g++ git build-essential cmake make git \ + libpcre2-dev python3-dev python3-pip python3-cffi curl software-properties-common && \ + rm -rf /var/lib/apt/lists/* + +# Set Python to show logs as they occur +ENV PYTHONUNBUFFERED=0 + + +# Download the gRPC health probe +RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \ + wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \ + chmod +x /bin/grpc_health_probe + +# Get generic Python packages +RUN python3 -m pip install --upgrade pip +RUN python3 -m pip install --upgrade setuptools wheel +RUN python3 -m pip install --upgrade pip-tools + +# Get common Python packages +# Note: this step enables sharing the previous Docker build steps among all the Python components +WORKDIR /var/teraflow +COPY common_requirements.in common_requirements.in +RUN pip-compile --quiet --output-file=common_requirements.txt common_requirements.in +RUN python3 -m pip install -r common_requirements.txt + +# Add common files into working directory +WORKDIR /var/teraflow/common +COPY src/common/. ./ +RUN rm -rf proto + +# Create proto sub-folder, copy .proto files, and generate Python code +RUN mkdir -p /var/teraflow/common/proto +WORKDIR /var/teraflow/common/proto +RUN touch __init__.py +COPY proto/*.proto ./ +RUN python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. *.proto +RUN rm *.proto +RUN find . -type f -exec sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' {} \; + +# Create component sub-folders +RUN mkdir -p /var/teraflow/osm_client +WORKDIR /var/teraflow/osm_client +ENV OSM_CLIENT_VERSION=v16.0 +RUN python3 -m pip install -r "https://osm.etsi.org/gitweb/?p=osm/IM.git;a=blob_plain;f=requirements.txt;hb=${OSM_CLIENT_VERSION}" +RUN python3 -m pip install "git+https://osm.etsi.org/gerrit/osm/IM.git@${OSM_CLIENT_VERSION}#egg=osm-im" --upgrade +#Clone OsmCLient code +RUN git clone https://osm.etsi.org/gerrit/osm/osmclient +RUN git -C osmclient checkout ${OSM_CLIENT_VERSION} +# Install osmClient using pip +RUN python3 -m pip install -r osmclient/requirements.txt +RUN python3 -m pip install ./osmclient + +# Add component files into working directory +WORKDIR /var/teraflow +COPY src/osm_client/. osm_client/ + +# Start the service +ENTRYPOINT ["python", "-m", "osm_client.service"] diff --git a/src/osm_client/client/OsmClient.py b/src/osm_client/client/OsmClient.py index a040f661c9c4dfae4f89303e65b1240d253de40f..239e2a2fbe5f6e7fb922cb0476de1eda6929b508 100644 --- a/src/osm_client/client/OsmClient.py +++ b/src/osm_client/client/OsmClient.py @@ -15,7 +15,7 @@ import grpc, logging from common.Constants import ServiceNameEnum from common.Settings import get_service_host, get_service_port_grpc -from common.proto.osm_client_pb2_grpc import osmClientServiceStub +from common.proto.osm_client_pb2_grpc import OsmServiceStub from common.proto.context_pb2 import (Empty) from common.tools.client.RetryDecorator import retry, delay_exponential from common.tools.grpc.Tools import grpc_message_to_json_string @@ -43,7 +43,7 @@ class OsmClient: def connect(self): self.channel = grpc.insecure_channel(self.endpoint) - self.stub = osmClientServiceStub(self.channel) + self.stub = OsmServiceStub(self.channel) def close(self): if self.channel is not None: self.channel.close() diff --git a/src/osm_client/service/OsmClientService.py b/src/osm_client/service/OsmClientService.py index ccbf1536626a9295e14d51417a1808f89409dacb..81ec534d2a7c5815ff754b66e496e7f2b847fb2e 100644 --- a/src/osm_client/service/OsmClientService.py +++ b/src/osm_client/service/OsmClientService.py @@ -18,10 +18,6 @@ from common.proto.osm_client_pb2_grpc import add_OsmServiceServicer_to_server from common.tools.service.GenericGrpcService import GenericGrpcService from osm_client.service.OsmClientServiceServicerImpl import OsmClientServiceServicerImpl -from osmclient import client -from osmclient.common.exceptions import ClientException - - class OsmClientService(GenericGrpcService): def __init__(self, cls_name: str = __name__) -> None: port = get_service_port_grpc(ServiceNameEnum.OSMCLIENT) diff --git a/src/osm_client/service/OsmClientServiceServicerImpl.py b/src/osm_client/service/OsmClientServiceServicerImpl.py index f45c682a4bc594a5981e879ced32c9338ec1310f..5bbde3b8b40f1ab02bda403690d22b96980325b4 100644 --- a/src/osm_client/service/OsmClientServiceServicerImpl.py +++ b/src/osm_client/service/OsmClientServiceServicerImpl.py @@ -17,7 +17,7 @@ from common.method_wrappers.Decorator import MetricsPool, safe_and_metered_rpc_m from common.tools.grpc.Tools import grpc_message_to_json_string from common.proto.context_pb2 import (Empty) from common.proto.osm_client_pb2 import CreateRequest, CreateResponse, NsiListResponse, GetRequest, GetResponse, DeleteRequest, DeleteResponse -from common.proto.osm_client_pb2_grpc import osmCLientServiceServicer +from common.proto.osm_client_pb2_grpc import OsmServiceServicer from osmclient import client from osmclient.common.exceptions import ClientException from osm_client.Config import OSM_ADDRESS @@ -26,7 +26,7 @@ LOGGER = logging.getLogger(__name__) METRICS_POOL = MetricsPool('OSMCLIENT', 'RPC') -class OsmClientServiceServicerImpl(osmCLientServiceServicer): +class OsmClientServiceServicerImpl(OsmServiceServicer): def __init__(self): LOGGER.info('Creating Servicer...') self.myclient = client.Client(host=OSM_ADDRESS, sol005=True)