From a0fc3a647a4a4231e376975ac071b6fb45575bfe Mon Sep 17 00:00:00 2001 From: Prakash Kumar Date: Fri, 19 Jan 2024 02:15:14 +0530 Subject: [PATCH] error handling for unreachable cluster in GetNodesList and GetApiResources functions in k8sutil --- utils/k8s/K8sUtil.go | 10 ++++++++-- utils/k8s/bean.go | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/utils/k8s/K8sUtil.go b/utils/k8s/K8sUtil.go index 4547c52f..d122409f 100644 --- a/utils/k8s/K8sUtil.go +++ b/utils/k8s/K8sUtil.go @@ -905,7 +905,10 @@ func (impl K8sUtil) GetCoreV1ClientByRestConfig(restConfig *rest.Config) (*v12.C func (impl K8sUtil) GetNodesList(ctx context.Context, k8sClientSet *kubernetes.Clientset) (*v1.NodeList, error) { nodeList, err := k8sClientSet.CoreV1().Nodes().List(ctx, metav1.ListOptions{}) - if err != nil { + if err != nil && strings.Contains(err.Error(), DnsLookupNoSuchHostError) { + impl.logger.Errorw("k8s cluster unreachable", "err", err) + return nil, &utils.ApiError{HttpStatusCode: http.StatusBadRequest, Code: "200", UserMessage: "k8s cluster unreachable"} + } else if err != nil { impl.logger.Errorw("error in getting node list", "err", err) return nil, err } @@ -1286,7 +1289,10 @@ func (impl K8sUtil) GetApiResources(restConfig *rest.Config, includeOnlyVerb str } apiResourcesListFromK8s, err := discoveryClient.ServerPreferredResources() - if err != nil { + if err != nil && strings.Contains(err.Error(), DnsLookupNoSuchHostError) { + impl.logger.Errorw("k8s cluster unreachable", "err", err) + return nil, &utils.ApiError{HttpStatusCode: http.StatusBadRequest, Code: "200", UserMessage: "k8s cluster unreachable"} + } else if err != nil { //takes care when K8s is unable to handle the request for some resources Isk8sApiError := strings.Contains(err.Error(), "unable to retrieve the complete list of server APIs") switch Isk8sApiError { diff --git a/utils/k8s/bean.go b/utils/k8s/bean.go index 0bcd729a..47d47118 100644 --- a/utils/k8s/bean.go +++ b/utils/k8s/bean.go @@ -24,6 +24,7 @@ const ( DEVTRON_APP_LABEL_KEY = "app" DEVTRON_APP_LABEL_VALUE1 = "devtron" DEVTRON_APP_LABEL_VALUE2 = "orchestrator" + DnsLookupNoSuchHostError = "no such host" ) type ClusterResourceListMap struct {