diff --git a/utils/k8s/K8sUtil.go b/utils/k8s/K8sUtil.go index 751ea3bc..743a96d2 100644 --- a/utils/k8s/K8sUtil.go +++ b/utils/k8s/K8sUtil.go @@ -960,7 +960,10 @@ func (impl K8sServiceImpl) GetCoreV1ClientByRestConfig(restConfig *rest.Config) func (impl K8sServiceImpl) 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 } @@ -1341,7 +1344,10 @@ func (impl K8sServiceImpl) GetApiResources(restConfig *rest.Config, includeOnlyV } 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 f27ce967..df22b333 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 ClusterConfig struct {