FROM python:3.12-slim RUN pip install --no-cache-dir grpcio grpcio-tools WORKDIR /app COPY proto/ /app/proto/ COPY gobgp_client.py /app/ RUN mkdir -p /app/gobgpapi && \ python -m grpc_tools.protoc \ -I/app/proto \ --python_out=/app/gobgpapi \ --grpc_python_out=/app/gobgpapi \ /app/proto/api/*.proto && \ # IMPORTANT: Créer les __init__.py pour que Python traite ces dossiers comme des modules touch /app/gobgpapi/__init__.py && \ touch /app/gobgpapi/api/__init__.py # On ajoute /app et /app/gobgpapi au path ENV PYTHONPATH=$PYTHONPATH:/app:/app/gobgpapi CMD ["python", "gobgp_client.py"] import grpc from api import gobgp_pb2, gobgp_pb2_grpc # Connexion channel = grpc.insecure_channel('gobgp1:50051') stub = gobgp_pb2_grpc.GoBgpServiceStub(channel) try: # Dans l'API GoBgpService, la méthode est GetBgp # Elle prend un message GetBgpRequest vide response = stub.GetBgp(gobgp_pb2.GetBgpRequest()) print("--- BGP Global Info ---") print(response) except grpc.RpcError as e: print(f"Erreur gRPC : {e.code()} - {e.details()}") except AttributeError: # Si GetBgp n'existe pas, essayons GetGlobal (ancienne version) print("GetBgp non trouvé, essai de GetGlobal...") response = stub.GetGlobal(gobgp_pb2.GetGlobalRequest()) print(response)