diff --git a/api/proto/v1/config-service.proto b/api/proto/v1/config-service.proto index a7c2e636a4cb39fe5267d172ba7afc7969707971..d626cd817695d8f6bcc93c703fb150a46e6717d6 100644 --- a/api/proto/v1/config-service.proto +++ b/api/proto/v1/config-service.proto @@ -36,7 +36,7 @@ message InfoServiceResponse { string api = 1; Status status = 2; string message = 3; - string info = 4; + string info = 4; } message InstanceCredentialsRequest { @@ -65,4 +65,5 @@ service ReadinessService { service InformationService { rpc RetrieveServiceIp(InstanceRequest) returns (InfoServiceResponse); -} \ No newline at end of file + rpc CheckServiceExists(InstanceRequest) returns (InfoServiceResponse); +} diff --git a/build_and_publish.sh b/build_and_publish.sh index d9ea15ba1cb6d129a48d148cde26ae851340d557..767a46b2e61b5fc1735bf90e469a8813e305ff7c 100755 --- a/build_and_publish.sh +++ b/build_and_publish.sh @@ -1,6 +1,6 @@ #!/bin/bash -TAG=1.3.2 +TAG=1.4.1 WHAT=janitor sudo docker build --rm -t artifactory.software.geant.org/nmaas-docker-local/nmaas-$WHAT:$TAG . sudo docker push artifactory.software.geant.org/nmaas-docker-local/nmaas-$WHAT:$TAG diff --git a/pkg/service/v1/config-service.go b/pkg/service/v1/config-service.go index b534161d3bedaeddd9edf0a745ab33a09a0004ba..c48df51e6d6ec5f8f215cfc9db629030e96d16ee 100644 --- a/pkg/service/v1/config-service.go +++ b/pkg/service/v1/config-service.go @@ -550,3 +550,31 @@ func (s *informationServiceServer) RetrieveServiceIp(ctx context.Context, req *v } } + +func (s *informationServiceServer) CheckServiceExists(ctx context.Context, req *v1.InstanceRequest) (*v1.InfoServiceResponse, error) { + + log.Printf("Entered CheckServiceExists method") + + // check if the API version requested by client is supported by server + if err := checkAPI(req.Api, apiVersion); err != nil { + return nil, err + } + + depl := req.Deployment + + //check if given k8s namespace exists + _, err := s.kubeAPI.CoreV1().Namespaces().Get(ctx, depl.Namespace, metav1.GetOptions{}) + if err != nil { + return prepareInfoResponse(v1.Status_FAILED, namespaceNotFound, ""), err + } + + log.Printf("About to read service %s details from namespace %s", depl.Uid, depl.Namespace) + + ser, err := s.kubeAPI.CoreV1().Services(depl.Namespace).Get(ctx, depl.Uid, metav1.GetOptions{}) + if err != nil { + return prepareInfoResponse(v1.Status_FAILED, "Service not found!", ""), err + } + + return prepareInfoResponse(v1.Status_OK, "", ser.Name), err + +} diff --git a/pkg/service/v1/config-service_test.go b/pkg/service/v1/config-service_test.go index 5b9df9a681dcb12216ea444464a2a693030899ba..c80601afb3af5f59fa1ac15ab4a3ce25513525eb 100644 --- a/pkg/service/v1/config-service_test.go +++ b/pkg/service/v1/config-service_test.go @@ -197,6 +197,46 @@ func TestInformationServiceServer_RetrieveServiceIp(t *testing.T) { } } +func TestInformationServiceServer_CheckServiceExists(t *testing.T) { + client := testclient.NewSimpleClientset() + server := NewInformationServiceServer(client) + + //Fail on API version check + res, err := server.CheckServiceExists(context.Background(), &illegal_req) + if err == nil || res != nil { + t.Fail() + } + + //Fail on namespace check + freq := v1.InstanceRequest{Api:apiVersion, Deployment:&fake_ns_inst} + res, err = server.CheckServiceExists(context.Background(), &freq) + if err == nil || res.Status != v1.Status_FAILED { + t.Fail() + } + + //create mock namespace + ns := corev1.Namespace{} + ns.Name = "test-namespace" + _, _ = client.CoreV1().Namespaces().Create(context.Background(), &ns, metav1.CreateOptions{}) + + //Fail on loading services + res, err = server.CheckServiceExists(context.Background(), &req) + if err == nil || res.Status != v1.Status_FAILED || res.Message != "Service not found!" { + t.Fail() + } + + //create mock service without ingress + s1 := corev1.Service{} + s1.Name = "test-uid" + _, _ = client.CoreV1().Services("test-namespace").Create(context.Background(), &s1, metav1.CreateOptions{}) + + //Pass + res, err = server.CheckServiceExists(context.Background(), &req) + if res.Status != v1.Status_OK { + t.Fail() + } +} + func TestCertManagerServiceServer_DeleteIfExists(t *testing.T) { client := testclient.NewSimpleClientset() server := NewCertManagerServiceServer(client)