diff --git a/cmd/flux/get_all.go b/cmd/flux/get_all.go new file mode 100644 index 00000000..9da709d3 --- /dev/null +++ b/cmd/flux/get_all.go @@ -0,0 +1,91 @@ +/* +Copyright 2021 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "strings" + + "github.com/spf13/cobra" + + helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1beta1" + notificationv1 "github.com/fluxcd/notification-controller/api/v1beta1" +) + +var getAllCmd = &cobra.Command{ + Use: "all", + Short: "Get all resources and statuses", + Long: "The get all command print the statuses of all resources.", + Example: ` # List all resources in a namespace + flux get all --namespace=flux-system + + # List all resources in all namespaces + flux get all --all-namespaces`, + RunE: func(cmd *cobra.Command, args []string) error { + err := getSourceAllCmd.RunE(cmd, args) + if err != nil { + logError(err) + } + + // all get command + var allCmd = []getCommand{ + { + apiType: helmReleaseType, + list: &helmReleaseListAdapter{&helmv2.HelmReleaseList{}}, + }, + { + apiType: kustomizationType, + list: &kustomizationListAdapter{&kustomizev1.KustomizationList{}}, + }, + { + apiType: receiverType, + list: receiverListAdapter{¬ificationv1.ReceiverList{}}, + }, + { + apiType: alertProviderType, + list: alertProviderListAdapter{¬ificationv1.ProviderList{}}, + }, + { + apiType: alertType, + list: &alertListAdapter{¬ificationv1.AlertList{}}, + }, + } + + err = getImageAllCmd.RunE(cmd, args) + if err != nil { + logError(err) + } + + for _, c := range allCmd { + if err := c.run(cmd, args); err != nil { + logError(err) + } + } + + return nil + }, +} + +func logError(err error) { + if !strings.Contains(err.Error(), "no matches for kind") { + logger.Failuref(err.Error()) + } +} + +func init() { + getCmd.AddCommand(getAllCmd) +} diff --git a/cmd/flux/get_image_all.go b/cmd/flux/get_image_all.go index 5f3c0728..d3b27b48 100644 --- a/cmd/flux/get_image_all.go +++ b/cmd/flux/get_image_all.go @@ -17,6 +17,8 @@ limitations under the License. package main import ( + "strings" + "github.com/spf13/cobra" autov1 "github.com/fluxcd/image-automation-controller/api/v1alpha1" @@ -33,6 +35,20 @@ var getImageAllCmd = &cobra.Command{ # List all image objects in all namespaces flux get images all --all-namespaces`, RunE: func(cmd *cobra.Command, args []string) error { + var allImageCmd = []getCommand{ + { + apiType: imageRepositoryType, + list: imageRepositoryListAdapter{&imagev1.ImageRepositoryList{}}, + }, + { + apiType: imagePolicyType, + list: &imagePolicyListAdapter{&imagev1.ImagePolicyList{}}, + }, + { + apiType: imageUpdateAutomationType, + list: &imageUpdateAutomationListAdapter{&autov1.ImageUpdateAutomationList{}}, + }, + } c := getCommand{ apiType: imageRepositoryType, list: imageRepositoryListAdapter{&imagev1.ImageRepositoryList{}}, @@ -41,20 +57,12 @@ var getImageAllCmd = &cobra.Command{ logger.Failuref(err.Error()) } - c = getCommand{ - apiType: imagePolicyType, - list: &imagePolicyListAdapter{&imagev1.ImagePolicyList{}}, - } - if err := c.run(cmd, args); err != nil { - logger.Failuref(err.Error()) - } - - c = getCommand{ - apiType: imageUpdateAutomationType, - list: &imageUpdateAutomationListAdapter{&autov1.ImageUpdateAutomationList{}}, - } - if err := c.run(cmd, args); err != nil { - logger.Failuref(err.Error()) + for _, c := range allImageCmd { + if err := c.run(cmd, args); err != nil { + if !strings.Contains(err.Error(), "no matches for kind") { + logger.Failuref(err.Error()) + } + } } return nil diff --git a/cmd/flux/get_source_all.go b/cmd/flux/get_source_all.go index 55770de5..a36bb50c 100644 --- a/cmd/flux/get_source_all.go +++ b/cmd/flux/get_source_all.go @@ -17,6 +17,8 @@ limitations under the License. package main import ( + "strings" + "github.com/spf13/cobra" sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" @@ -32,36 +34,31 @@ var getSourceAllCmd = &cobra.Command{ # List all sources in all namespaces flux get sources all --all-namespaces`, RunE: func(cmd *cobra.Command, args []string) error { - c := getCommand{ - apiType: bucketType, - list: &bucketListAdapter{&sourcev1.BucketList{}}, - } - if err := c.run(cmd, args); err != nil { - logger.Failuref(err.Error()) - } - - c = getCommand{ - apiType: gitRepositoryType, - list: &gitRepositoryListAdapter{&sourcev1.GitRepositoryList{}}, - } - if err := c.run(cmd, args); err != nil { - logger.Failuref(err.Error()) + var allSourceCmd = []getCommand{ + { + apiType: bucketType, + list: &bucketListAdapter{&sourcev1.BucketList{}}, + }, + { + apiType: gitRepositoryType, + list: &gitRepositoryListAdapter{&sourcev1.GitRepositoryList{}}, + }, + { + apiType: helmRepositoryType, + list: &helmRepositoryListAdapter{&sourcev1.HelmRepositoryList{}}, + }, + { + apiType: helmChartType, + list: &helmChartListAdapter{&sourcev1.HelmChartList{}}, + }, } - c = getCommand{ - apiType: helmRepositoryType, - list: &helmRepositoryListAdapter{&sourcev1.HelmRepositoryList{}}, - } - if err := c.run(cmd, args); err != nil { - logger.Failuref(err.Error()) - } - - c = getCommand{ - apiType: helmChartType, - list: &helmChartListAdapter{&sourcev1.HelmChartList{}}, - } - if err := c.run(cmd, args); err != nil { - logger.Failuref(err.Error()) + for _, c := range allSourceCmd { + if err := c.run(cmd, args); err != nil { + if !strings.Contains(err.Error(), "no matches for kind") { + logger.Failuref(err.Error()) + } + } } return nil diff --git a/docs/cmd/flux_get.md b/docs/cmd/flux_get.md index cb756545..f91ffe9f 100644 --- a/docs/cmd/flux_get.md +++ b/docs/cmd/flux_get.md @@ -31,6 +31,7 @@ The get sub-commands print the statuses of Flux resources. * [flux](../flux/) - Command line utility for assembling Kubernetes CD pipelines * [flux get alert-providers](../flux_get_alert-providers/) - Get Provider statuses * [flux get alerts](../flux_get_alerts/) - Get Alert statuses +* [flux get all](../flux_get_all/) - Get all resources and statuses * [flux get helmreleases](../flux_get_helmreleases/) - Get HelmRelease statuses * [flux get images](../flux_get_images/) - Get image automation object status * [flux get kustomizations](../flux_get_kustomizations/) - Get Kustomization statuses diff --git a/docs/cmd/flux_get_all.md b/docs/cmd/flux_get_all.md new file mode 100644 index 00000000..42a4e49d --- /dev/null +++ b/docs/cmd/flux_get_all.md @@ -0,0 +1,46 @@ +--- +title: "flux get all command" +--- +## flux get all + +Get all resources and statuses + +### Synopsis + +The get all command print the statuses of all resources. + +``` +flux get all [flags] +``` + +### Examples + +``` + # List all resources in a namespace + flux get all --namespace=flux-system + + # List all resources in all namespaces + flux get all --all-namespaces +``` + +### Options + +``` + -h, --help help for all +``` + +### Options inherited from parent commands + +``` + -A, --all-namespaces list the requested object(s) across all namespaces + --context string kubernetes context to use + --kubeconfig string absolute path to the kubeconfig file + -n, --namespace string the namespace scope for this operation (default "flux-system") + --timeout duration timeout for this operation (default 5m0s) + --verbose print generated objects +``` + +### SEE ALSO + +* [flux get](../flux_get/) - Get the resources and their status + diff --git a/mkdocs.yml b/mkdocs.yml index feab9507..ac7a942d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -147,6 +147,7 @@ nav: - Export image repository: cmd/flux_export_image_repository.md - Export image update: cmd/flux_export_image_update.md - Get: cmd/flux_get.md + - Get all: cmd/flux_get_all.md - Get kustomizations: cmd/flux_get_kustomizations.md - Get helmreleases: cmd/flux_get_helmreleases.md - Get sources: cmd/flux_get_sources.md