diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 6161bd4e..1c3e3cf6 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -54,6 +54,9 @@ jobs: ./bin/tk create source git podinfo \ --url https://github.com/stefanprodan/podinfo \ --tag-semver=">=3.2.3" + - name: tk get sources git + run: | + ./bin/tk get sources git - name: tk create kustomization run: | ./bin/tk create kustomization podinfo \ @@ -68,6 +71,9 @@ jobs: - name: tk sync kustomization --with-source run: | ./bin/tk sync kustomization podinfo --with-source + - name: tk get kustomizations + run: | + ./bin/tk get kustomizations - name: tk check run: | ./bin/tk check diff --git a/cmd/tk/get.go b/cmd/tk/get.go new file mode 100644 index 00000000..6a23315d --- /dev/null +++ b/cmd/tk/get.go @@ -0,0 +1,14 @@ +package main + +import ( + "github.com/spf13/cobra" +) + +var getCmd = &cobra.Command{ + Use: "get", + Short: "Get commands", +} + +func init() { + rootCmd.AddCommand(getCmd) +} diff --git a/cmd/tk/get_kustomization.go b/cmd/tk/get_kustomization.go new file mode 100644 index 00000000..c3101f36 --- /dev/null +++ b/cmd/tk/get_kustomization.go @@ -0,0 +1,63 @@ +package main + +import ( + "context" + + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1alpha1" + "github.com/spf13/cobra" + corev1 "k8s.io/api/core/v1" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +var getKsCmd = &cobra.Command{ + Use: "kustomizations", + Aliases: []string{"ks"}, + Short: "Get kustomizations status", + Long: ` +The get kustomizations command prints the status of the resources.`, + RunE: getKsCmdRun, +} + +func init() { + getCmd.AddCommand(getKsCmd) +} + +func getKsCmdRun(cmd *cobra.Command, args []string) error { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + + kubeClient, err := utils.kubeClient(kubeconfig) + if err != nil { + return err + } + + var list kustomizev1.KustomizationList + err = kubeClient.List(ctx, &list, client.InNamespace(namespace)) + if err != nil { + return err + } + + if len(list.Items) == 0 { + logFailure("no kustomizations found in %s namespace", namespace) + return nil + } + + for _, kustomization := range list.Items { + isInitialized := false + for _, condition := range kustomization.Status.Conditions { + if condition.Type == kustomizev1.ReadyCondition { + if condition.Status != corev1.ConditionFalse { + logSuccess("%s last applied revision %s", kustomization.GetName(), kustomization.Status.LastAppliedRevision) + } else { + logFailure("%s %s", kustomization.GetName(), condition.Message) + } + isInitialized = true + break + } + } + if !isInitialized { + logFailure("%s is not ready", kustomization.GetName()) + } + } + return nil +} diff --git a/cmd/tk/get_source.go b/cmd/tk/get_source.go new file mode 100644 index 00000000..39a5f550 --- /dev/null +++ b/cmd/tk/get_source.go @@ -0,0 +1,14 @@ +package main + +import ( + "github.com/spf13/cobra" +) + +var getSourceCmd = &cobra.Command{ + Use: "sources", + Short: "Get sources commands", +} + +func init() { + getCmd.AddCommand(getSourceCmd) +} diff --git a/cmd/tk/get_source_git.go b/cmd/tk/get_source_git.go new file mode 100644 index 00000000..2cc9e3dd --- /dev/null +++ b/cmd/tk/get_source_git.go @@ -0,0 +1,62 @@ +package main + +import ( + "context" + + sourcev1 "github.com/fluxcd/source-controller/api/v1alpha1" + "github.com/spf13/cobra" + corev1 "k8s.io/api/core/v1" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +var getSourceGitCmd = &cobra.Command{ + Use: "git", + Short: "Get git sources status", + Long: ` +The get sources command prints the status of the git resources.`, + RunE: getSourceGitCmdRun, +} + +func init() { + getSourceCmd.AddCommand(getSourceGitCmd) +} + +func getSourceGitCmdRun(cmd *cobra.Command, args []string) error { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + + kubeClient, err := utils.kubeClient(kubeconfig) + if err != nil { + return err + } + + var list sourcev1.GitRepositoryList + err = kubeClient.List(ctx, &list, client.InNamespace(namespace)) + if err != nil { + return err + } + + if len(list.Items) == 0 { + logFailure("no sources found in %s namespace", namespace) + return nil + } + + for _, source := range list.Items { + isInitialized := false + for _, condition := range source.Status.Conditions { + if condition.Type == sourcev1.ReadyCondition { + if condition.Status != corev1.ConditionFalse { + logSuccess("%s last fetched revision %s", source.GetName(), source.Status.Artifact.Revision) + } else { + logFailure("%s %s", source.GetName(), condition.Message) + } + isInitialized = true + break + } + } + if !isInitialized { + logFailure("%s is not ready", source.GetName()) + } + } + return nil +} diff --git a/cmd/tk/sync_kustomization.go b/cmd/tk/sync_kustomization.go index e1def0fa..6451239f 100644 --- a/cmd/tk/sync_kustomization.go +++ b/cmd/tk/sync_kustomization.go @@ -94,11 +94,6 @@ func syncKsCmdRun(cmd *cobra.Command, args []string) error { return err } - err = kubeClient.Get(ctx, namespacedName, &kustomization) - if err != nil { - return err - } - if kustomization.Status.LastAppliedRevision != "" { logSuccess("applied revision %s", kustomization.Status.LastAppliedRevision) } else {