From 3ed6927de31e97f6d39e208420f35b09f41bec74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=87=8E=20=E7=9B=B4=E4=BA=BA?= Date: Wed, 24 Nov 2021 10:20:16 +0900 Subject: [PATCH 1/9] Check and show health state of K8s Namespace resource --- .../piped/cloudprovider/kubernetes/state.go | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/pkg/app/piped/cloudprovider/kubernetes/state.go b/pkg/app/piped/cloudprovider/kubernetes/state.go index c2a60c1bf0..8cacca4ff3 100644 --- a/pkg/app/piped/cloudprovider/kubernetes/state.go +++ b/pkg/app/piped/cloudprovider/kubernetes/state.go @@ -108,6 +108,8 @@ func determineResourceHealth(key ResourceKey, obj *unstructured.Unstructured) (s return determineClusterRoleHealth(obj) case KindClusterRoleBinding: return determineClusterRoleBindingHealth(obj) + case KindNameSpace: + return determineNameSpace(obj) default: desc = "Unimplemented or unknown resource" return @@ -534,3 +536,44 @@ func determineServiceAccountHealth(obj *unstructured.Unstructured) (status model status = model.KubernetesResourceState_HEALTHY return } + +func determineNameSpace(obj *unstructured.Unstructured) (status model.KubernetesResourceState_HealthStatus, desc string) { + ns := &corev1.Namespace{} + err := scheme.Scheme.Convert(obj, ns, nil) + if err != nil { + status = model.KubernetesResourceState_OTHER + desc = fmt.Sprintf("Unexpected error while calculating: unable to convert %T to %T: %v", obj, ns, err) + return + } + + switch ns.Status.Phase { + case corev1.NamespaceActive: + // Correct + case corev1.NamespaceTerminating: + status = model.KubernetesResourceState_OTHER + desc = "NameSpace is gracefully terminated" + default: + status = model.KubernetesResourceState_OTHER + desc = "The current phase of NameSpace is unexpected" + } + + status = model.KubernetesResourceState_HEALTHY + + var cond *corev1.NamespaceCondition + L: + for i := range ns.Status.Conditions { + c := ns.Status.Conditions[i] + switch c.Type { + case corev1.NamespaceDeletionDiscoveryFailure, corev1.NamespaceDeletionContentFailure, corev1.NamespaceDeletionGVParsingFailure: + cond = &c + break L + } + } + + if cond != nil && cond.Status == corev1.ConditionTrue { + status = model.KubernetesResourceState_OTHER + desc = cond.Message + return + } + return +} From 7e7c432e1da45a41b92bb13e3cb6bff3270df97a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=87=8E=20=E7=9B=B4=E4=BA=BA?= Date: Wed, 24 Nov 2021 10:23:50 +0900 Subject: [PATCH 2/9] Add NameSpace to resouce keys --- pkg/app/piped/cloudprovider/kubernetes/resourcekey.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/app/piped/cloudprovider/kubernetes/resourcekey.go b/pkg/app/piped/cloudprovider/kubernetes/resourcekey.go index bd2fc0d896..8a9852ea11 100644 --- a/pkg/app/piped/cloudprovider/kubernetes/resourcekey.go +++ b/pkg/app/piped/cloudprovider/kubernetes/resourcekey.go @@ -76,6 +76,7 @@ const ( KindRoleBinding = "RoleBinding" KindClusterRole = "ClusterRole" KindClusterRoleBinding = "ClusterRoleBinding" + KindNameSpace = "NameSpace" DefaultNamespace = "default" ) From fe58316387ea523ff8faff4600e12264d1847387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=87=8E=20=E7=9B=B4=E4=BA=BA?= Date: Wed, 24 Nov 2021 10:24:23 +0900 Subject: [PATCH 3/9] Format codes --- pkg/app/piped/cloudprovider/kubernetes/state.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/app/piped/cloudprovider/kubernetes/state.go b/pkg/app/piped/cloudprovider/kubernetes/state.go index 8cacca4ff3..68a783ab22 100644 --- a/pkg/app/piped/cloudprovider/kubernetes/state.go +++ b/pkg/app/piped/cloudprovider/kubernetes/state.go @@ -560,15 +560,15 @@ func determineNameSpace(obj *unstructured.Unstructured) (status model.Kubernetes status = model.KubernetesResourceState_HEALTHY var cond *corev1.NamespaceCondition - L: - for i := range ns.Status.Conditions { - c := ns.Status.Conditions[i] - switch c.Type { - case corev1.NamespaceDeletionDiscoveryFailure, corev1.NamespaceDeletionContentFailure, corev1.NamespaceDeletionGVParsingFailure: - cond = &c - break L - } +L: + for i := range ns.Status.Conditions { + c := ns.Status.Conditions[i] + switch c.Type { + case corev1.NamespaceDeletionDiscoveryFailure, corev1.NamespaceDeletionContentFailure, corev1.NamespaceDeletionGVParsingFailure: + cond = &c + break L } + } if cond != nil && cond.Status == corev1.ConditionTrue { status = model.KubernetesResourceState_OTHER From b1e490d1f9912055443810a6a96578a6457f5daf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=87=8E=20=E7=9B=B4=E4=BA=BA?= Date: Wed, 24 Nov 2021 13:43:34 +0900 Subject: [PATCH 4/9] Avoid labeled statement --- pkg/app/piped/cloudprovider/kubernetes/state.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/app/piped/cloudprovider/kubernetes/state.go b/pkg/app/piped/cloudprovider/kubernetes/state.go index 68a783ab22..45b490b0b8 100644 --- a/pkg/app/piped/cloudprovider/kubernetes/state.go +++ b/pkg/app/piped/cloudprovider/kubernetes/state.go @@ -560,13 +560,15 @@ func determineNameSpace(obj *unstructured.Unstructured) (status model.Kubernetes status = model.KubernetesResourceState_HEALTHY var cond *corev1.NamespaceCondition -L: + for i := range ns.Status.Conditions { c := ns.Status.Conditions[i] switch c.Type { case corev1.NamespaceDeletionDiscoveryFailure, corev1.NamespaceDeletionContentFailure, corev1.NamespaceDeletionGVParsingFailure: cond = &c - break L + } + if cond != nil { + break } } From 4a52ed1acee788de6b4516a987ef16d2b08afc6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=87=8E=20=E7=9B=B4=E4=BA=BA?= Date: Wed, 24 Nov 2021 13:44:00 +0900 Subject: [PATCH 5/9] fix --- pkg/app/piped/cloudprovider/kubernetes/state.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/app/piped/cloudprovider/kubernetes/state.go b/pkg/app/piped/cloudprovider/kubernetes/state.go index 45b490b0b8..1787eebd2d 100644 --- a/pkg/app/piped/cloudprovider/kubernetes/state.go +++ b/pkg/app/piped/cloudprovider/kubernetes/state.go @@ -560,7 +560,6 @@ func determineNameSpace(obj *unstructured.Unstructured) (status model.Kubernetes status = model.KubernetesResourceState_HEALTHY var cond *corev1.NamespaceCondition - for i := range ns.Status.Conditions { c := ns.Status.Conditions[i] switch c.Type { From ab8573856365d0229f0a9ba82bff46342d668067 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=87=8E=20=E7=9B=B4=E4=BA=BA?= Date: Wed, 24 Nov 2021 13:44:47 +0900 Subject: [PATCH 6/9] Return if something wrong --- pkg/app/piped/cloudprovider/kubernetes/state.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/app/piped/cloudprovider/kubernetes/state.go b/pkg/app/piped/cloudprovider/kubernetes/state.go index 1787eebd2d..59af7dabc6 100644 --- a/pkg/app/piped/cloudprovider/kubernetes/state.go +++ b/pkg/app/piped/cloudprovider/kubernetes/state.go @@ -552,9 +552,11 @@ func determineNameSpace(obj *unstructured.Unstructured) (status model.Kubernetes case corev1.NamespaceTerminating: status = model.KubernetesResourceState_OTHER desc = "NameSpace is gracefully terminated" + return default: status = model.KubernetesResourceState_OTHER desc = "The current phase of NameSpace is unexpected" + return } status = model.KubernetesResourceState_HEALTHY From e61d7432be306ddd4ce7d1d8818ae1139068bf07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=87=8E=20=E7=9B=B4=E4=BA=BA?= Date: Wed, 24 Nov 2021 13:56:37 +0900 Subject: [PATCH 7/9] Fix comment --- pkg/app/piped/cloudprovider/kubernetes/state.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/app/piped/cloudprovider/kubernetes/state.go b/pkg/app/piped/cloudprovider/kubernetes/state.go index 59af7dabc6..90a561e6a3 100644 --- a/pkg/app/piped/cloudprovider/kubernetes/state.go +++ b/pkg/app/piped/cloudprovider/kubernetes/state.go @@ -548,7 +548,7 @@ func determineNameSpace(obj *unstructured.Unstructured) (status model.Kubernetes switch ns.Status.Phase { case corev1.NamespaceActive: - // Correct + // Go to determine based on the status' conditions. case corev1.NamespaceTerminating: status = model.KubernetesResourceState_OTHER desc = "NameSpace is gracefully terminated" From f280a224a2d10a34835883957ed4faff9049f40d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=87=8E=20=E7=9B=B4=E4=BA=BA?= Date: Wed, 24 Nov 2021 13:57:00 +0900 Subject: [PATCH 8/9] Remove redundant return --- pkg/app/piped/cloudprovider/kubernetes/state.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/app/piped/cloudprovider/kubernetes/state.go b/pkg/app/piped/cloudprovider/kubernetes/state.go index 90a561e6a3..4273e5d7a9 100644 --- a/pkg/app/piped/cloudprovider/kubernetes/state.go +++ b/pkg/app/piped/cloudprovider/kubernetes/state.go @@ -576,7 +576,6 @@ func determineNameSpace(obj *unstructured.Unstructured) (status model.Kubernetes if cond != nil && cond.Status == corev1.ConditionTrue { status = model.KubernetesResourceState_OTHER desc = cond.Message - return } return } From 2e896c88344b56a448330a4563cd62aca3b2de59 Mon Sep 17 00:00:00 2001 From: Naoto Ono Date: Wed, 24 Nov 2021 15:23:25 +0900 Subject: [PATCH 9/9] Update pkg/app/piped/cloudprovider/kubernetes/state.go Co-authored-by: Le Van Nghia --- pkg/app/piped/cloudprovider/kubernetes/state.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/app/piped/cloudprovider/kubernetes/state.go b/pkg/app/piped/cloudprovider/kubernetes/state.go index 4273e5d7a9..ca0b37fa25 100644 --- a/pkg/app/piped/cloudprovider/kubernetes/state.go +++ b/pkg/app/piped/cloudprovider/kubernetes/state.go @@ -555,7 +555,7 @@ func determineNameSpace(obj *unstructured.Unstructured) (status model.Kubernetes return default: status = model.KubernetesResourceState_OTHER - desc = "The current phase of NameSpace is unexpected" + desc = fmt.Sprintf("The NameSpace is at an unexpected phase: %s", ns.Status.Phase) return }