From f6c14c939d9484fc13dd3c25ccbeeb65f545fc29 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Wed, 8 Jun 2022 17:36:16 +0300 Subject: [PATCH 1/2] Add CRDs to `flux check` command Verify that the Flux CRDs are registered on the cluster and print their version. Signed-off-by: Stefan Prodan --- cmd/flux/check.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/cmd/flux/check.go b/cmd/flux/check.go index 5ad70f9b..05b69e14 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -24,6 +24,7 @@ import ( "github.com/Masterminds/semver/v3" "github.com/spf13/cobra" v1 "k8s.io/api/apps/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" "k8s.io/client-go/kubernetes" "sigs.k8s.io/controller-runtime/pkg/client" @@ -95,9 +96,16 @@ func runCheckCmd(cmd *cobra.Command, args []string) error { if !componentsCheck() { checkFailed = true } + + logger.Actionf("checking crds") + if !crdsCheck() { + checkFailed = true + } + if checkFailed { os.Exit(1) } + logger.Successf("all checks passed") return nil } @@ -205,3 +213,28 @@ func componentsCheck() bool { } return ok } + +func crdsCheck() bool { + ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout) + defer cancel() + + kubeClient, err := utils.KubeClient(kubeconfigArgs, kubeclientOptions) + if err != nil { + return false + } + + ok := true + selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} + var list apiextensionsv1.CustomResourceDefinitionList + if err := kubeClient.List(ctx, &list, client.InNamespace(*kubeconfigArgs.Namespace), selector); err == nil { + for _, crd := range list.Items { + if len(crd.Status.StoredVersions) > 0 { + logger.Successf(crd.Name + "/" + crd.Status.StoredVersions[0]) + } else { + ok = false + logger.Failuref("no stored versions for %s", crd.Name) + } + } + } + return ok +} From 443e5b5539c0d99b14acf7ec2c215a3b573c3be9 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Thu, 9 Jun 2022 09:27:27 +0300 Subject: [PATCH 2/2] Fail check if no controllers or crds are found Signed-off-by: Stefan Prodan --- cmd/flux/check.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/cmd/flux/check.go b/cmd/flux/check.go index 05b69e14..cf43654a 100644 --- a/cmd/flux/check.go +++ b/cmd/flux/check.go @@ -103,6 +103,7 @@ func runCheckCmd(cmd *cobra.Command, args []string) error { } if checkFailed { + logger.Failuref("check failed") os.Exit(1) } @@ -199,7 +200,14 @@ func componentsCheck() bool { ok := true selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} var list v1.DeploymentList - if err := kubeClient.List(ctx, &list, client.InNamespace(*kubeconfigArgs.Namespace), selector); err == nil { + ns := *kubeconfigArgs.Namespace + if err := kubeClient.List(ctx, &list, client.InNamespace(ns), selector); err == nil { + if len(list.Items) == 0 { + logger.Failuref("no controllers found in the '%s' namespace with the label selector '%s=%s'", + ns, manifestgen.PartOfLabelKey, manifestgen.PartOfLabelValue) + return false + } + for _, d := range list.Items { if ref, err := buildComponentObjectRefs(d.Name); err == nil { if err := statusChecker.Assess(ref...); err != nil { @@ -227,6 +235,12 @@ func crdsCheck() bool { selector := client.MatchingLabels{manifestgen.PartOfLabelKey: manifestgen.PartOfLabelValue} var list apiextensionsv1.CustomResourceDefinitionList if err := kubeClient.List(ctx, &list, client.InNamespace(*kubeconfigArgs.Namespace), selector); err == nil { + if len(list.Items) == 0 { + logger.Failuref("no crds found with the label selector '%s=%s'", + manifestgen.PartOfLabelKey, manifestgen.PartOfLabelValue) + return false + } + for _, crd := range list.Items { if len(crd.Status.StoredVersions) > 0 { logger.Successf(crd.Name + "/" + crd.Status.StoredVersions[0])