From ca460f08630283eb07a66fa8a5a1bfbc856bf157 Mon Sep 17 00:00:00 2001 From: Lukasz Lopatowski <llopat@man.poznan.pl> Date: Wed, 3 Jun 2020 10:59:33 +0200 Subject: [PATCH] Fixed StatefulSet handling --- pkg/service/v1/config-service.go | 28 +++++++++++++++------------ pkg/service/v1/config-service_test.go | 22 ++++++++++----------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/pkg/service/v1/config-service.go b/pkg/service/v1/config-service.go index 25747d9..6bdfada 100644 --- a/pkg/service/v1/config-service.go +++ b/pkg/service/v1/config-service.go @@ -222,7 +222,7 @@ func (s *configServiceServer) DeleteIfExists(ctx context.Context, req *v1.Instan //check if configmap exist _, err = s.kubeAPI.CoreV1().ConfigMaps(depl.Namespace).Get(depl.Uid, metav1.GetOptions{}) if err != nil { - return prepareResponse(v1.Status_OK,"ConfigMap not exists or is unavailable"), nil + return prepareResponse(v1.Status_OK, "ConfigMap not exists or is unavailable"), nil } //delete configmap @@ -414,25 +414,29 @@ func (s *readinessServiceServer) CheckIfReady(ctx context.Context, req *v1.Insta return prepareResponse(v1.Status_FAILED, namespaceNotFound), err } - //looking for deployment and checking its status + log.Print("looking for deployment and checking its status") dep, err := s.kubeAPI.ExtensionsV1beta1().Deployments(depl.Namespace).Get(depl.Uid, metav1.GetOptions{}) - if err == nil { - if *dep.Spec.Replicas == dep.Status.ReadyReplicas { - return prepareResponse(v1.Status_OK, "Deployment is ready"), nil - } - return prepareResponse(v1.Status_PENDING, "Waiting for deployment"), err - } else { - //deployment not found, looking for statefulset and checking its status + if err != nil { + log.Print("deployment not found, looking for statefulset and checking its status") sts, err2 := s.kubeAPI.AppsV1().StatefulSets(depl.Namespace).Get(depl.Uid, metav1.GetOptions{}) - if err2 == nil { + if err2 != nil { + log.Print("statefulset not found as well") + return prepareResponse(v1.Status_FAILED, "Neither Deployment nor StatefulSet found!"), err2 + } else { + log.Print("statefulset found, verifying status") if *sts.Spec.Replicas == sts.Status.ReadyReplicas { return prepareResponse(v1.Status_OK, "StatefulSet is ready"), nil } - return prepareResponse(v1.Status_PENDING, "Waiting for deployment"), err + return prepareResponse(v1.Status_PENDING, "Waiting for statefulset"), nil + } + } else { + log.Print("deployment found, verifying status") + if *dep.Spec.Replicas == dep.Status.ReadyReplicas { + return prepareResponse(v1.Status_OK, "Deployment is ready"), nil } + return prepareResponse(v1.Status_PENDING, "Waiting for deployment"), nil } - return prepareResponse(v1.Status_FAILED, "Neither Deployment nor StatefulSet found!"), err } func (s *informationServiceServer) RetrieveServiceIp(ctx context.Context, req *v1.InstanceRequest) (*v1.InfoServiceResponse, error) { diff --git a/pkg/service/v1/config-service_test.go b/pkg/service/v1/config-service_test.go index d536e35..48aa0cf 100644 --- a/pkg/service/v1/config-service_test.go +++ b/pkg/service/v1/config-service_test.go @@ -114,17 +114,17 @@ func TestReadinessServiceServer_CheckIfReadyWithStatefulSet(t *testing.T) { } //create mock statefulset that is fully deployed - sts := appsv1.StatefulSet{} - sts.Name = "test-uid" - q := int32(5) - sts.Spec.Replicas = &q - sts.Status.ReadyReplicas = q - _, _ = client.AppsV1().StatefulSets("test-namespace").Create(&sts) - - res, err = server.CheckIfReady(context.Background(), &req) - if err != nil || res.Status != v1.Status_OK { - t.Fail() - } + sts := appsv1.StatefulSet{} + sts.Name = "test-uid" + q := int32(5) + sts.Spec.Replicas = &q + sts.Status.ReadyReplicas = q + _, _ = client.AppsV1().StatefulSets("test-namespace").Create(&sts) + + res, err = server.CheckIfReady(context.Background(), &req) + if err != nil || res.Status != v1.Status_OK { + t.Fail() + } } func TestInformationServiceServer_RetrieveServiceIp(t *testing.T) { -- GitLab