mirror of
				https://github.com/fluxcd/flux2.git
				synced 2025-10-31 16:26:36 +08:00 
			
		
		
		
	Merge pull request #4329 from fluxcd/tidy-nits
Address various issues throughout code base
This commit is contained in:
		| @ -131,8 +131,8 @@ func (names apiType) upsertAndWait(object upsertWaitable, mutate func() error) e | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for %s reconciliation", names.kind) | 	logger.Waitingf("waiting for %s reconciliation", names.kind) | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		isReady(ctx, kubeClient, namespacedName, object)); err != nil { | 		isReady(kubeClient, namespacedName, object)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	logger.Successf("%s reconciliation completed", names.kind) | 	logger.Successf("%s reconciliation completed", names.kind) | ||||||
| @ -165,6 +165,6 @@ func parseLabels() (map[string]string, error) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func validateObjectName(name string) bool { | func validateObjectName(name string) bool { | ||||||
| 	r := regexp.MustCompile("^[a-z0-9]([a-z0-9\\-]){0,61}[a-z0-9]$") | 	r := regexp.MustCompile(`^[a-z0-9]([a-z0-9\-]){0,61}[a-z0-9]$`) | ||||||
| 	return r.MatchString(name) | 	return r.MatchString(name) | ||||||
| } | } | ||||||
|  | |||||||
| @ -132,8 +132,8 @@ func createAlertCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for Alert reconciliation") | 	logger.Waitingf("waiting for Alert reconciliation") | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		isAlertReady(ctx, kubeClient, namespacedName, &alert)); err != nil { | 		isAlertReady(kubeClient, namespacedName, &alert)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	logger.Successf("Alert %s is ready", name) | 	logger.Successf("Alert %s is ready", name) | ||||||
| @ -171,9 +171,8 @@ func upsertAlert(ctx context.Context, kubeClient client.Client, | |||||||
| 	return namespacedName, nil | 	return namespacedName, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func isAlertReady(ctx context.Context, kubeClient client.Client, | func isAlertReady(kubeClient client.Client, namespacedName types.NamespacedName, alert *notificationv1b2.Alert) wait.ConditionWithContextFunc { | ||||||
| 	namespacedName types.NamespacedName, alert *notificationv1b2.Alert) wait.ConditionFunc { | 	return func(ctx context.Context) (bool, error) { | ||||||
| 	return func() (bool, error) { |  | ||||||
| 		err := kubeClient.Get(ctx, namespacedName, alert) | 		err := kubeClient.Get(ctx, namespacedName, alert) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
|  | |||||||
| @ -127,8 +127,8 @@ func createAlertProviderCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for Provider reconciliation") | 	logger.Waitingf("waiting for Provider reconciliation") | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		isAlertProviderReady(ctx, kubeClient, namespacedName, &provider)); err != nil { | 		isAlertProviderReady(kubeClient, namespacedName, &provider)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -168,9 +168,8 @@ func upsertAlertProvider(ctx context.Context, kubeClient client.Client, | |||||||
| 	return namespacedName, nil | 	return namespacedName, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func isAlertProviderReady(ctx context.Context, kubeClient client.Client, | func isAlertProviderReady(kubeClient client.Client, namespacedName types.NamespacedName, provider *notificationv1.Provider) wait.ConditionWithContextFunc { | ||||||
| 	namespacedName types.NamespacedName, provider *notificationv1.Provider) wait.ConditionFunc { | 	return func(ctx context.Context) (bool, error) { | ||||||
| 	return func() (bool, error) { |  | ||||||
| 		err := kubeClient.Get(ctx, namespacedName, provider) | 		err := kubeClient.Get(ctx, namespacedName, provider) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
|  | |||||||
| @ -303,8 +303,8 @@ func createHelmReleaseCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for HelmRelease reconciliation") | 	logger.Waitingf("waiting for HelmRelease reconciliation") | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		isHelmReleaseReady(ctx, kubeClient, namespacedName, &helmRelease)); err != nil { | 		isHelmReleaseReady(kubeClient, namespacedName, &helmRelease)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	logger.Successf("HelmRelease %s is ready", name) | 	logger.Successf("HelmRelease %s is ready", name) | ||||||
| @ -344,9 +344,8 @@ func upsertHelmRelease(ctx context.Context, kubeClient client.Client, | |||||||
| 	return namespacedName, nil | 	return namespacedName, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func isHelmReleaseReady(ctx context.Context, kubeClient client.Client, | func isHelmReleaseReady(kubeClient client.Client, namespacedName types.NamespacedName, helmRelease *helmv2.HelmRelease) wait.ConditionWithContextFunc { | ||||||
| 	namespacedName types.NamespacedName, helmRelease *helmv2.HelmRelease) wait.ConditionFunc { | 	return func(ctx context.Context) (bool, error) { | ||||||
| 	return func() (bool, error) { |  | ||||||
| 		err := kubeClient.Get(ctx, namespacedName, helmRelease) | 		err := kubeClient.Get(ctx, namespacedName, helmRelease) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
|  | |||||||
| @ -54,13 +54,12 @@ the status of the object.`), | |||||||
| 	RunE: createImagePolicyRun} | 	RunE: createImagePolicyRun} | ||||||
|  |  | ||||||
| type imagePolicyFlags struct { | type imagePolicyFlags struct { | ||||||
| 	imageRef        string | 	imageRef      string | ||||||
| 	semver          string | 	semver        string | ||||||
| 	alpha           string | 	alpha         string | ||||||
| 	numeric         string | 	numeric       string | ||||||
| 	filterRegex     string | 	filterRegex   string | ||||||
| 	filterExtract   string | 	filterExtract string | ||||||
| 	filterNumerical string |  | ||||||
| } | } | ||||||
|  |  | ||||||
| var imagePolicyArgs = imagePolicyFlags{} | var imagePolicyArgs = imagePolicyFlags{} | ||||||
| @ -183,7 +182,6 @@ func validateExtractStr(template string, capNames []string) error { | |||||||
| 		name, num, rest, ok := extract(template) | 		name, num, rest, ok := extract(template) | ||||||
| 		if !ok { | 		if !ok { | ||||||
| 			// Malformed extract string, assume user didn't want this | 			// Malformed extract string, assume user didn't want this | ||||||
| 			template = template[1:] |  | ||||||
| 			return fmt.Errorf("--filter-extract is malformed") | 			return fmt.Errorf("--filter-extract is malformed") | ||||||
| 		} | 		} | ||||||
| 		template = rest | 		template = rest | ||||||
|  | |||||||
| @ -263,8 +263,8 @@ func createKsCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for Kustomization reconciliation") | 	logger.Waitingf("waiting for Kustomization reconciliation") | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		isKustomizationReady(ctx, kubeClient, namespacedName, &kustomization)); err != nil { | 		isKustomizationReady(kubeClient, namespacedName, &kustomization)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	logger.Successf("Kustomization %s is ready", name) | 	logger.Successf("Kustomization %s is ready", name) | ||||||
| @ -304,9 +304,8 @@ func upsertKustomization(ctx context.Context, kubeClient client.Client, | |||||||
| 	return namespacedName, nil | 	return namespacedName, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func isKustomizationReady(ctx context.Context, kubeClient client.Client, | func isKustomizationReady(kubeClient client.Client, namespacedName types.NamespacedName, kustomization *kustomizev1.Kustomization) wait.ConditionWithContextFunc { | ||||||
| 	namespacedName types.NamespacedName, kustomization *kustomizev1.Kustomization) wait.ConditionFunc { | 	return func(ctx context.Context) (bool, error) { | ||||||
| 	return func() (bool, error) { |  | ||||||
| 		err := kubeClient.Get(ctx, namespacedName, kustomization) | 		err := kubeClient.Get(ctx, namespacedName, kustomization) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
|  | |||||||
| @ -139,8 +139,8 @@ func createReceiverCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for Receiver reconciliation") | 	logger.Waitingf("waiting for Receiver reconciliation") | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		isReceiverReady(ctx, kubeClient, namespacedName, &receiver)); err != nil { | 		isReceiverReady(kubeClient, namespacedName, &receiver)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	logger.Successf("Receiver %s is ready", name) | 	logger.Successf("Receiver %s is ready", name) | ||||||
| @ -180,9 +180,8 @@ func upsertReceiver(ctx context.Context, kubeClient client.Client, | |||||||
| 	return namespacedName, nil | 	return namespacedName, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func isReceiverReady(ctx context.Context, kubeClient client.Client, | func isReceiverReady(kubeClient client.Client, namespacedName types.NamespacedName, receiver *notificationv1.Receiver) wait.ConditionWithContextFunc { | ||||||
| 	namespacedName types.NamespacedName, receiver *notificationv1.Receiver) wait.ConditionFunc { | 	return func(ctx context.Context) (bool, error) { | ||||||
| 	return func() (bool, error) { |  | ||||||
| 		err := kubeClient.Get(ctx, namespacedName, receiver) | 		err := kubeClient.Get(ctx, namespacedName, receiver) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
|  | |||||||
| @ -204,8 +204,8 @@ func createSourceBucketCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for Bucket source reconciliation") | 	logger.Waitingf("waiting for Bucket source reconciliation") | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		isBucketReady(ctx, kubeClient, namespacedName, bucket)); err != nil { | 		isBucketReady(kubeClient, namespacedName, bucket)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	logger.Successf("Bucket source reconciliation completed") | 	logger.Successf("Bucket source reconciliation completed") | ||||||
| @ -248,9 +248,8 @@ func upsertBucket(ctx context.Context, kubeClient client.Client, | |||||||
| 	return namespacedName, nil | 	return namespacedName, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func isBucketReady(ctx context.Context, kubeClient client.Client, | func isBucketReady(kubeClient client.Client, namespacedName types.NamespacedName, bucket *sourcev1.Bucket) wait.ConditionWithContextFunc { | ||||||
| 	namespacedName types.NamespacedName, bucket *sourcev1.Bucket) wait.ConditionFunc { | 	return func(ctx context.Context) (bool, error) { | ||||||
| 	return func() (bool, error) { |  | ||||||
| 		err := kubeClient.Get(ctx, namespacedName, bucket) | 		err := kubeClient.Get(ctx, namespacedName, bucket) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
|  | |||||||
| @ -325,8 +325,8 @@ func createSourceGitCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for GitRepository source reconciliation") | 	logger.Waitingf("waiting for GitRepository source reconciliation") | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		isGitRepositoryReady(ctx, kubeClient, namespacedName, &gitRepository)); err != nil { | 		isGitRepositoryReady(kubeClient, namespacedName, &gitRepository)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	logger.Successf("GitRepository source reconciliation completed") | 	logger.Successf("GitRepository source reconciliation completed") | ||||||
| @ -369,9 +369,8 @@ func upsertGitRepository(ctx context.Context, kubeClient client.Client, | |||||||
| 	return namespacedName, nil | 	return namespacedName, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func isGitRepositoryReady(ctx context.Context, kubeClient client.Client, | func isGitRepositoryReady(kubeClient client.Client, namespacedName types.NamespacedName, gitRepository *sourcev1.GitRepository) wait.ConditionWithContextFunc { | ||||||
| 	namespacedName types.NamespacedName, gitRepository *sourcev1.GitRepository) wait.ConditionFunc { | 	return func(ctx context.Context) (bool, error) { | ||||||
| 	return func() (bool, error) { |  | ||||||
| 		err := kubeClient.Get(ctx, namespacedName, gitRepository) | 		err := kubeClient.Get(ctx, namespacedName, gitRepository) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
|  | |||||||
| @ -231,8 +231,8 @@ func createSourceHelmCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for HelmRepository source reconciliation") | 	logger.Waitingf("waiting for HelmRepository source reconciliation") | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		isHelmRepositoryReady(ctx, kubeClient, namespacedName, helmRepository)); err != nil { | 		isHelmRepositoryReady(kubeClient, namespacedName, helmRepository)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	logger.Successf("HelmRepository source reconciliation completed") | 	logger.Successf("HelmRepository source reconciliation completed") | ||||||
| @ -280,9 +280,8 @@ func upsertHelmRepository(ctx context.Context, kubeClient client.Client, | |||||||
| 	return namespacedName, nil | 	return namespacedName, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func isHelmRepositoryReady(ctx context.Context, kubeClient client.Client, | func isHelmRepositoryReady(kubeClient client.Client, namespacedName types.NamespacedName, helmRepository *sourcev1.HelmRepository) wait.ConditionWithContextFunc { | ||||||
| 	namespacedName types.NamespacedName, helmRepository *sourcev1.HelmRepository) wait.ConditionFunc { | 	return func(ctx context.Context) (bool, error) { | ||||||
| 	return func() (bool, error) { |  | ||||||
| 		err := kubeClient.Get(ctx, namespacedName, helmRepository) | 		err := kubeClient.Get(ctx, namespacedName, helmRepository) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
|  | |||||||
| @ -192,8 +192,8 @@ func createSourceOCIRepositoryCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for OCIRepository reconciliation") | 	logger.Waitingf("waiting for OCIRepository reconciliation") | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		isOCIRepositoryReady(ctx, kubeClient, namespacedName, repository)); err != nil { | 		isOCIRepositoryReady(kubeClient, namespacedName, repository)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	logger.Successf("OCIRepository reconciliation completed") | 	logger.Successf("OCIRepository reconciliation completed") | ||||||
| @ -236,9 +236,8 @@ func upsertOCIRepository(ctx context.Context, kubeClient client.Client, | |||||||
| 	return namespacedName, nil | 	return namespacedName, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func isOCIRepositoryReady(ctx context.Context, kubeClient client.Client, | func isOCIRepositoryReady(kubeClient client.Client, namespacedName types.NamespacedName, ociRepository *sourcev1.OCIRepository) wait.ConditionWithContextFunc { | ||||||
| 	namespacedName types.NamespacedName, ociRepository *sourcev1.OCIRepository) wait.ConditionFunc { | 	return func(ctx context.Context) (bool, error) { | ||||||
| 	return func() (bool, error) { |  | ||||||
| 		err := kubeClient.Get(ctx, namespacedName, ociRepository) | 		err := kubeClient.Get(ctx, namespacedName, ociRepository) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
|  | |||||||
| @ -46,7 +46,6 @@ type exportableWithSecretList interface { | |||||||
| } | } | ||||||
|  |  | ||||||
| type exportWithSecretCommand struct { | type exportWithSecretCommand struct { | ||||||
| 	apiType |  | ||||||
| 	object exportableWithSecret | 	object exportableWithSecret | ||||||
| 	list   exportableWithSecretList | 	list   exportableWithSecretList | ||||||
| } | } | ||||||
|  | |||||||
| @ -19,9 +19,10 @@ package main | |||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"github.com/spf13/cobra" | 	"github.com/spf13/cobra" | ||||||
|  | 	"golang.org/x/text/cases" | ||||||
|  | 	"golang.org/x/text/language" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  |  | ||||||
| 	notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" | 	notificationv1 "github.com/fluxcd/notification-controller/api/v1beta2" | ||||||
| @ -77,7 +78,8 @@ func init() { | |||||||
| func (s alertListAdapter) summariseItem(i int, includeNamespace bool, includeKind bool) []string { | func (s alertListAdapter) summariseItem(i int, includeNamespace bool, includeKind bool) []string { | ||||||
| 	item := s.Items[i] | 	item := s.Items[i] | ||||||
| 	status, msg := statusAndMessage(item.Status.Conditions) | 	status, msg := statusAndMessage(item.Status.Conditions) | ||||||
| 	return append(nameColumns(&item, includeNamespace, includeKind), strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) | 	return append(nameColumns(&item, includeNamespace, includeKind), | ||||||
|  | 		cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (s alertListAdapter) headers(includeNamespace bool) []string { | func (s alertListAdapter) headers(includeNamespace bool) []string { | ||||||
|  | |||||||
| @ -19,11 +19,13 @@ package main | |||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" |  | ||||||
|  | 	"github.com/spf13/cobra" | ||||||
|  | 	"golang.org/x/text/cases" | ||||||
|  | 	"golang.org/x/text/language" | ||||||
|  | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  |  | ||||||
| 	helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" | 	helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" | ||||||
| 	"github.com/spf13/cobra" |  | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| var getHelmReleaseCmd = &cobra.Command{ | var getHelmReleaseCmd = &cobra.Command{ | ||||||
| @ -75,7 +77,7 @@ func (a helmReleaseListAdapter) summariseItem(i int, includeNamespace bool, incl | |||||||
| 	revision := item.Status.LastAppliedRevision | 	revision := item.Status.LastAppliedRevision | ||||||
| 	status, msg := statusAndMessage(item.Status.Conditions) | 	status, msg := statusAndMessage(item.Status.Conditions) | ||||||
| 	return append(nameColumns(&item, includeNamespace, includeKind), | 	return append(nameColumns(&item, includeNamespace, includeKind), | ||||||
| 		revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) | 		revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (a helmReleaseListAdapter) headers(includeNamespace bool) []string { | func (a helmReleaseListAdapter) headers(includeNamespace bool) []string { | ||||||
|  | |||||||
| @ -19,10 +19,11 @@ package main | |||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" |  | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	"github.com/spf13/cobra" | 	"github.com/spf13/cobra" | ||||||
|  | 	"golang.org/x/text/cases" | ||||||
|  | 	"golang.org/x/text/language" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  |  | ||||||
| 	imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" | 	imagev1 "github.com/fluxcd/image-reflector-controller/api/v1beta2" | ||||||
| @ -82,7 +83,7 @@ func (s imageRepositoryListAdapter) summariseItem(i int, includeNamespace bool, | |||||||
| 		lastScan = item.Status.LastScanResult.ScanTime.Time.Format(time.RFC3339) | 		lastScan = item.Status.LastScanResult.ScanTime.Time.Format(time.RFC3339) | ||||||
| 	} | 	} | ||||||
| 	return append(nameColumns(&item, includeNamespace, includeKind), | 	return append(nameColumns(&item, includeNamespace, includeKind), | ||||||
| 		lastScan, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) | 		lastScan, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (s imageRepositoryListAdapter) headers(includeNamespace bool) []string { | func (s imageRepositoryListAdapter) headers(includeNamespace bool) []string { | ||||||
|  | |||||||
| @ -19,10 +19,11 @@ package main | |||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" |  | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	"github.com/spf13/cobra" | 	"github.com/spf13/cobra" | ||||||
|  | 	"golang.org/x/text/cases" | ||||||
|  | 	"golang.org/x/text/language" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  |  | ||||||
| 	autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" | 	autov1 "github.com/fluxcd/image-automation-controller/api/v1beta1" | ||||||
| @ -81,7 +82,8 @@ func (s imageUpdateAutomationListAdapter) summariseItem(i int, includeNamespace | |||||||
| 	if item.Status.LastAutomationRunTime != nil { | 	if item.Status.LastAutomationRunTime != nil { | ||||||
| 		lastRun = item.Status.LastAutomationRunTime.Time.Format(time.RFC3339) | 		lastRun = item.Status.LastAutomationRunTime.Time.Format(time.RFC3339) | ||||||
| 	} | 	} | ||||||
| 	return append(nameColumns(&item, includeNamespace, includeKind), lastRun, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) | 	return append(nameColumns(&item, includeNamespace, includeKind), lastRun, | ||||||
|  | 		cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (s imageUpdateAutomationListAdapter) headers(includeNamespace bool) []string { | func (s imageUpdateAutomationListAdapter) headers(includeNamespace bool) []string { | ||||||
|  | |||||||
| @ -19,9 +19,10 @@ package main | |||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"github.com/spf13/cobra" | 	"github.com/spf13/cobra" | ||||||
|  | 	"golang.org/x/text/cases" | ||||||
|  | 	"golang.org/x/text/language" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  |  | ||||||
| 	kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" | 	kustomizev1 "github.com/fluxcd/kustomize-controller/api/v1" | ||||||
| @ -83,7 +84,7 @@ func (a kustomizationListAdapter) summariseItem(i int, includeNamespace bool, in | |||||||
| 	revision = utils.TruncateHex(revision) | 	revision = utils.TruncateHex(revision) | ||||||
| 	msg = utils.TruncateHex(msg) | 	msg = utils.TruncateHex(msg) | ||||||
| 	return append(nameColumns(&item, includeNamespace, includeKind), | 	return append(nameColumns(&item, includeNamespace, includeKind), | ||||||
| 		revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) | 		revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (a kustomizationListAdapter) headers(includeNamespace bool) []string { | func (a kustomizationListAdapter) headers(includeNamespace bool) []string { | ||||||
|  | |||||||
| @ -19,9 +19,10 @@ package main | |||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"github.com/spf13/cobra" | 	"github.com/spf13/cobra" | ||||||
|  | 	"golang.org/x/text/cases" | ||||||
|  | 	"golang.org/x/text/language" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  |  | ||||||
| 	notificationv1 "github.com/fluxcd/notification-controller/api/v1" | 	notificationv1 "github.com/fluxcd/notification-controller/api/v1" | ||||||
| @ -74,7 +75,8 @@ func init() { | |||||||
| func (s receiverListAdapter) summariseItem(i int, includeNamespace bool, includeKind bool) []string { | func (s receiverListAdapter) summariseItem(i int, includeNamespace bool, includeKind bool) []string { | ||||||
| 	item := s.Items[i] | 	item := s.Items[i] | ||||||
| 	status, msg := statusAndMessage(item.Status.Conditions) | 	status, msg := statusAndMessage(item.Status.Conditions) | ||||||
| 	return append(nameColumns(&item, includeNamespace, includeKind), strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) | 	return append(nameColumns(&item, includeNamespace, includeKind), | ||||||
|  | 		cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (s receiverListAdapter) headers(includeNamespace bool) []string { | func (s receiverListAdapter) headers(includeNamespace bool) []string { | ||||||
|  | |||||||
| @ -19,9 +19,10 @@ package main | |||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"github.com/spf13/cobra" | 	"github.com/spf13/cobra" | ||||||
|  | 	"golang.org/x/text/cases" | ||||||
|  | 	"golang.org/x/text/language" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  |  | ||||||
| 	sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" | 	sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" | ||||||
| @ -85,7 +86,7 @@ func (a *bucketListAdapter) summariseItem(i int, includeNamespace bool, includeK | |||||||
| 	revision = utils.TruncateHex(revision) | 	revision = utils.TruncateHex(revision) | ||||||
| 	msg = utils.TruncateHex(msg) | 	msg = utils.TruncateHex(msg) | ||||||
| 	return append(nameColumns(&item, includeNamespace, includeKind), | 	return append(nameColumns(&item, includeNamespace, includeKind), | ||||||
| 		revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) | 		revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (a bucketListAdapter) headers(includeNamespace bool) []string { | func (a bucketListAdapter) headers(includeNamespace bool) []string { | ||||||
|  | |||||||
| @ -19,9 +19,10 @@ package main | |||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"github.com/spf13/cobra" | 	"github.com/spf13/cobra" | ||||||
|  | 	"golang.org/x/text/cases" | ||||||
|  | 	"golang.org/x/text/language" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  |  | ||||||
| 	sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" | 	sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" | ||||||
| @ -86,7 +87,7 @@ func (a *helmChartListAdapter) summariseItem(i int, includeNamespace bool, inclu | |||||||
| 	// Message may still contain reference of e.g. commit chart was build from | 	// Message may still contain reference of e.g. commit chart was build from | ||||||
| 	msg = utils.TruncateHex(msg) | 	msg = utils.TruncateHex(msg) | ||||||
| 	return append(nameColumns(&item, includeNamespace, includeKind), | 	return append(nameColumns(&item, includeNamespace, includeKind), | ||||||
| 		revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) | 		revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (a helmChartListAdapter) headers(includeNamespace bool) []string { | func (a helmChartListAdapter) headers(includeNamespace bool) []string { | ||||||
|  | |||||||
| @ -19,9 +19,10 @@ package main | |||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"github.com/spf13/cobra" | 	"github.com/spf13/cobra" | ||||||
|  | 	"golang.org/x/text/cases" | ||||||
|  | 	"golang.org/x/text/language" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  |  | ||||||
| 	sourcev1 "github.com/fluxcd/source-controller/api/v1" | 	sourcev1 "github.com/fluxcd/source-controller/api/v1" | ||||||
| @ -85,7 +86,7 @@ func (a *gitRepositoryListAdapter) summariseItem(i int, includeNamespace bool, i | |||||||
| 	revision = utils.TruncateHex(revision) | 	revision = utils.TruncateHex(revision) | ||||||
| 	msg = utils.TruncateHex(msg) | 	msg = utils.TruncateHex(msg) | ||||||
| 	return append(nameColumns(&item, includeNamespace, includeKind), | 	return append(nameColumns(&item, includeNamespace, includeKind), | ||||||
| 		revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) | 		revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (a gitRepositoryListAdapter) headers(includeNamespace bool) []string { | func (a gitRepositoryListAdapter) headers(includeNamespace bool) []string { | ||||||
|  | |||||||
| @ -19,9 +19,10 @@ package main | |||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"github.com/spf13/cobra" | 	"github.com/spf13/cobra" | ||||||
|  | 	"golang.org/x/text/cases" | ||||||
|  | 	"golang.org/x/text/language" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  |  | ||||||
| 	sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" | 	sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" | ||||||
| @ -85,7 +86,7 @@ func (a *helmRepositoryListAdapter) summariseItem(i int, includeNamespace bool, | |||||||
| 	revision = utils.TruncateHex(revision) | 	revision = utils.TruncateHex(revision) | ||||||
| 	msg = utils.TruncateHex(msg) | 	msg = utils.TruncateHex(msg) | ||||||
| 	return append(nameColumns(&item, includeNamespace, includeKind), | 	return append(nameColumns(&item, includeNamespace, includeKind), | ||||||
| 		revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) | 		revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (a helmRepositoryListAdapter) headers(includeNamespace bool) []string { | func (a helmRepositoryListAdapter) headers(includeNamespace bool) []string { | ||||||
|  | |||||||
| @ -19,9 +19,10 @@ package main | |||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" |  | ||||||
|  |  | ||||||
| 	"github.com/spf13/cobra" | 	"github.com/spf13/cobra" | ||||||
|  | 	"golang.org/x/text/cases" | ||||||
|  | 	"golang.org/x/text/language" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  |  | ||||||
| 	sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" | 	sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" | ||||||
| @ -85,7 +86,7 @@ func (a *ociRepositoryListAdapter) summariseItem(i int, includeNamespace bool, i | |||||||
| 	revision = utils.TruncateHex(revision) | 	revision = utils.TruncateHex(revision) | ||||||
| 	msg = utils.TruncateHex(msg) | 	msg = utils.TruncateHex(msg) | ||||||
| 	return append(nameColumns(&item, includeNamespace, includeKind), | 	return append(nameColumns(&item, includeNamespace, includeKind), | ||||||
| 		revision, strings.Title(strconv.FormatBool(item.Spec.Suspend)), status, msg) | 		revision, cases.Title(language.English).String(strconv.FormatBool(item.Spec.Suspend)), status, msg) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (a ociRepositoryListAdapter) headers(includeNamespace bool) []string { | func (a ociRepositoryListAdapter) headers(includeNamespace bool) []string { | ||||||
|  | |||||||
| @ -74,7 +74,7 @@ type logsFlags struct { | |||||||
| 	fluxNamespace string | 	fluxNamespace string | ||||||
| 	allNamespaces bool | 	allNamespaces bool | ||||||
| 	sinceTime     string | 	sinceTime     string | ||||||
| 	sinceSeconds  time.Duration | 	sinceDuration time.Duration | ||||||
| } | } | ||||||
|  |  | ||||||
| var logsArgs = logsFlags{ | var logsArgs = logsFlags{ | ||||||
| @ -91,7 +91,7 @@ func init() { | |||||||
| 	logsCmd.Flags().Int64VarP(&logsArgs.tail, "tail", "", logsArgs.tail, "lines of recent log file to display") | 	logsCmd.Flags().Int64VarP(&logsArgs.tail, "tail", "", logsArgs.tail, "lines of recent log file to display") | ||||||
| 	logsCmd.Flags().StringVarP(&logsArgs.fluxNamespace, "flux-namespace", "", rootArgs.defaults.Namespace, "the namespace where the Flux components are running") | 	logsCmd.Flags().StringVarP(&logsArgs.fluxNamespace, "flux-namespace", "", rootArgs.defaults.Namespace, "the namespace where the Flux components are running") | ||||||
| 	logsCmd.Flags().BoolVarP(&logsArgs.allNamespaces, "all-namespaces", "A", false, "displays logs for objects across all namespaces") | 	logsCmd.Flags().BoolVarP(&logsArgs.allNamespaces, "all-namespaces", "A", false, "displays logs for objects across all namespaces") | ||||||
| 	logsCmd.Flags().DurationVar(&logsArgs.sinceSeconds, "since", logsArgs.sinceSeconds, "Only return logs newer than a relative duration like 5s, 2m, or 3h. Defaults to all logs. Only one of since-time / since may be used.") | 	logsCmd.Flags().DurationVar(&logsArgs.sinceDuration, "since", logsArgs.sinceDuration, "Only return logs newer than a relative duration like 5s, 2m, or 3h. Defaults to all logs. Only one of since-time / since may be used.") | ||||||
| 	logsCmd.Flags().StringVar(&logsArgs.sinceTime, "since-time", logsArgs.sinceTime, "Only return logs after a specific date (RFC3339). Defaults to all logs. Only one of since-time / since may be used.") | 	logsCmd.Flags().StringVar(&logsArgs.sinceTime, "since-time", logsArgs.sinceTime, "Only return logs after a specific date (RFC3339). Defaults to all logs. Only one of since-time / since may be used.") | ||||||
| 	rootCmd.AddCommand(logsCmd) | 	rootCmd.AddCommand(logsCmd) | ||||||
| } | } | ||||||
| @ -129,8 +129,8 @@ func logsCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 		logOpts.TailLines = &logsArgs.tail | 		logOpts.TailLines = &logsArgs.tail | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if len(logsArgs.sinceTime) > 0 && logsArgs.sinceSeconds != 0 { | 	if len(logsArgs.sinceTime) > 0 && logsArgs.sinceDuration != 0 { | ||||||
| 		return fmt.Errorf("at most one of `sinceTime` or `sinceSeconds` may be specified") | 		return fmt.Errorf("at most one of `sinceTime` or `sinceDuration` may be specified") | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if len(logsArgs.sinceTime) > 0 { | 	if len(logsArgs.sinceTime) > 0 { | ||||||
| @ -141,9 +141,9 @@ func logsCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 		logOpts.SinceTime = &t | 		logOpts.SinceTime = &t | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if logsArgs.sinceSeconds != 0 { | 	if logsArgs.sinceDuration != 0 { | ||||||
| 		// round up to the nearest second | 		// round up to the nearest second | ||||||
| 		sec := int64(logsArgs.sinceSeconds.Round(time.Second).Seconds()) | 		sec := int64(logsArgs.sinceDuration.Round(time.Second).Seconds()) | ||||||
| 		logOpts.SinceSeconds = &sec | 		logOpts.SinceSeconds = &sec | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | |||||||
| @ -82,7 +82,7 @@ func TestLogsSinceTimeInvalid(t *testing.T) { | |||||||
| func TestLogsSinceOnlyOneAllowed(t *testing.T) { | func TestLogsSinceOnlyOneAllowed(t *testing.T) { | ||||||
| 	cmd := cmdTestCase{ | 	cmd := cmdTestCase{ | ||||||
| 		args:   "logs --since=2m --since-time=2021-08-06T14:26:25.546Z", | 		args:   "logs --since=2m --since-time=2021-08-06T14:26:25.546Z", | ||||||
| 		assert: assertError("at most one of `sinceTime` or `sinceSeconds` may be specified"), | 		assert: assertError("at most one of `sinceTime` or `sinceDuration` may be specified"), | ||||||
| 	} | 	} | ||||||
| 	cmd.runTestCmd(t) | 	cmd.runTestCmd(t) | ||||||
| } | } | ||||||
|  | |||||||
| @ -203,6 +203,9 @@ func NewTestEnvKubeManager(testClusterMode TestClusterMode) (*testEnvKubeManager | |||||||
|  |  | ||||||
| 		useExistingCluster := true | 		useExistingCluster := true | ||||||
| 		config, err := clientcmd.BuildConfigFromFlags("", testKubeConfig) | 		config, err := clientcmd.BuildConfigFromFlags("", testKubeConfig) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
| 		testEnv := &envtest.Environment{ | 		testEnv := &envtest.Environment{ | ||||||
| 			UseExistingCluster: &useExistingCluster, | 			UseExistingCluster: &useExistingCluster, | ||||||
| 			Config:             config, | 			Config:             config, | ||||||
| @ -337,8 +340,6 @@ type cmdTestCase struct { | |||||||
| 	// Tests use assertFunc to assert on an output, success or failure. This | 	// Tests use assertFunc to assert on an output, success or failure. This | ||||||
| 	// can be a function defined by the test or existing function above. | 	// can be a function defined by the test or existing function above. | ||||||
| 	assert assertFunc | 	assert assertFunc | ||||||
| 	// Filename that contains yaml objects to load into Kubernetes |  | ||||||
| 	objectFile string |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (cmd *cmdTestCase) runTestCmd(t *testing.T) { | func (cmd *cmdTestCase) runTestCmd(t *testing.T) { | ||||||
|  | |||||||
| @ -28,7 +28,6 @@ import ( | |||||||
| 	"github.com/google/go-containerregistry/pkg/crane" | 	"github.com/google/go-containerregistry/pkg/crane" | ||||||
| 	"github.com/google/go-containerregistry/pkg/logs" | 	"github.com/google/go-containerregistry/pkg/logs" | ||||||
| 	"github.com/google/go-containerregistry/pkg/name" | 	"github.com/google/go-containerregistry/pkg/name" | ||||||
| 	reg "github.com/google/go-containerregistry/pkg/name" |  | ||||||
| 	"github.com/google/go-containerregistry/pkg/v1/remote" | 	"github.com/google/go-containerregistry/pkg/v1/remote" | ||||||
| 	"github.com/google/go-containerregistry/pkg/v1/remote/transport" | 	"github.com/google/go-containerregistry/pkg/v1/remote/transport" | ||||||
| 	"github.com/spf13/cobra" | 	"github.com/spf13/cobra" | ||||||
| @ -266,12 +265,12 @@ func pushArtifactCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 		return fmt.Errorf("pushing artifact failed: %w", err) | 		return fmt.Errorf("pushing artifact failed: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	digest, err := reg.NewDigest(digestURL) | 	digest, err := name.NewDigest(digestURL) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return fmt.Errorf("artifact digest parsing failed: %w", err) | 		return fmt.Errorf("artifact digest parsing failed: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	tag, err := reg.NewTag(url) | 	tag, err := name.NewTag(url) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return fmt.Errorf("artifact tag parsing failed: %w", err) | 		return fmt.Errorf("artifact tag parsing failed: %w", err) | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -113,8 +113,8 @@ func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { | |||||||
| 	logger.Successf("%s annotated", reconcile.kind) | 	logger.Successf("%s annotated", reconcile.kind) | ||||||
|  |  | ||||||
| 	if reconcile.kind == notificationv1b2.AlertKind || reconcile.kind == notificationv1.ReceiverKind { | 	if reconcile.kind == notificationv1b2.AlertKind || reconcile.kind == notificationv1.ReceiverKind { | ||||||
| 		if err = wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 		if err = wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 			isReconcileReady(ctx, kubeClient, namespacedName, reconcile.object)); err != nil { | 			isReconcileReady(kubeClient, namespacedName, reconcile.object)); err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @ -124,8 +124,8 @@ func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { | |||||||
|  |  | ||||||
| 	lastHandledReconcileAt := reconcile.object.lastHandledReconcileRequest() | 	lastHandledReconcileAt := reconcile.object.lastHandledReconcileRequest() | ||||||
| 	logger.Waitingf("waiting for %s reconciliation", reconcile.kind) | 	logger.Waitingf("waiting for %s reconciliation", reconcile.kind) | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		reconciliationHandled(ctx, kubeClient, namespacedName, reconcile.object, lastHandledReconcileAt)); err != nil { | 		reconciliationHandled(kubeClient, namespacedName, reconcile.object, lastHandledReconcileAt)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	readyCond := apimeta.FindStatusCondition(reconcilableConditions(reconcile.object), meta.ReadyCondition) | 	readyCond := apimeta.FindStatusCondition(reconcilableConditions(reconcile.object), meta.ReadyCondition) | ||||||
| @ -140,9 +140,8 @@ func (reconcile reconcileCommand) run(cmd *cobra.Command, args []string) error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func reconciliationHandled(ctx context.Context, kubeClient client.Client, | func reconciliationHandled(kubeClient client.Client, namespacedName types.NamespacedName, obj reconcilable, lastHandledReconcileAt string) wait.ConditionWithContextFunc { | ||||||
| 	namespacedName types.NamespacedName, obj reconcilable, lastHandledReconcileAt string) wait.ConditionFunc { | 	return func(ctx context.Context) (bool, error) { | ||||||
| 	return func() (bool, error) { |  | ||||||
| 		err := kubeClient.Get(ctx, namespacedName, obj.asClientObject()) | 		err := kubeClient.Get(ctx, namespacedName, obj.asClientObject()) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
| @ -176,9 +175,8 @@ func requestReconciliation(ctx context.Context, kubeClient client.Client, | |||||||
| 	}) | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
| func isReconcileReady(ctx context.Context, kubeClient client.Client, | func isReconcileReady(kubeClient client.Client, namespacedName types.NamespacedName, obj reconcilable) wait.ConditionWithContextFunc { | ||||||
| 	namespacedName types.NamespacedName, obj reconcilable) wait.ConditionFunc { | 	return func(ctx context.Context) (bool, error) { | ||||||
| 	return func() (bool, error) { |  | ||||||
| 		err := kubeClient.Get(ctx, namespacedName, obj.asClientObject()) | 		err := kubeClient.Get(ctx, namespacedName, obj.asClientObject()) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
|  | |||||||
| @ -84,8 +84,8 @@ func reconcileAlertProviderCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 	logger.Successf("Provider annotated") | 	logger.Successf("Provider annotated") | ||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for reconciliation") | 	logger.Waitingf("waiting for reconciliation") | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		isAlertProviderReady(ctx, kubeClient, namespacedName, &alertProvider)); err != nil { | 		isAlertProviderReady(kubeClient, namespacedName, &alertProvider)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	logger.Successf("Provider reconciliation completed") | 	logger.Successf("Provider reconciliation completed") | ||||||
|  | |||||||
| @ -43,10 +43,6 @@ func init() { | |||||||
| 	reconcileImageCmd.AddCommand(reconcileImageUpdateCmd) | 	reconcileImageCmd.AddCommand(reconcileImageUpdateCmd) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (obj imageUpdateAutomationAdapter) suspended() bool { |  | ||||||
| 	return obj.ImageUpdateAutomation.Spec.Suspend |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (obj imageUpdateAutomationAdapter) lastHandledReconcileRequest() string { | func (obj imageUpdateAutomationAdapter) lastHandledReconcileRequest() string { | ||||||
| 	return obj.Status.GetLastHandledReconcileRequest() | 	return obj.Status.GetLastHandledReconcileRequest() | ||||||
| } | } | ||||||
|  | |||||||
| @ -88,8 +88,8 @@ func reconcileReceiverCmdRun(cmd *cobra.Command, args []string) error { | |||||||
| 	logger.Successf("Receiver annotated") | 	logger.Successf("Receiver annotated") | ||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for Receiver reconciliation") | 	logger.Waitingf("waiting for Receiver reconciliation") | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		isReceiverReady(ctx, kubeClient, namespacedName, &receiver)); err != nil { | 		isReceiverReady(kubeClient, namespacedName, &receiver)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | |||||||
| @ -82,8 +82,8 @@ func (reconcile reconcileWithSourceCommand) run(cmd *cobra.Command, args []strin | |||||||
| 	logger.Successf("%s annotated", reconcile.kind) | 	logger.Successf("%s annotated", reconcile.kind) | ||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for %s reconciliation", reconcile.kind) | 	logger.Waitingf("waiting for %s reconciliation", reconcile.kind) | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		reconciliationHandled(ctx, kubeClient, namespacedName, reconcile.object, lastHandledReconcileAt)); err != nil { | 		reconciliationHandled(kubeClient, namespacedName, reconcile.object, lastHandledReconcileAt)); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | |||||||
| @ -212,8 +212,8 @@ func (resume resumeCommand) reconcile(ctx context.Context, res resumable) reconc | |||||||
|  |  | ||||||
| 	logger.Waitingf("waiting for %s reconciliation", resume.kind) | 	logger.Waitingf("waiting for %s reconciliation", resume.kind) | ||||||
|  |  | ||||||
| 	if err := wait.PollImmediate(rootArgs.pollInterval, rootArgs.timeout, | 	if err := wait.PollUntilContextTimeout(ctx, rootArgs.pollInterval, rootArgs.timeout, true, | ||||||
| 		isReady(ctx, resume.client, namespacedName, res)); err != nil { | 		isReady(resume.client, namespacedName, res)); err != nil { | ||||||
| 		return reconcileResponse{ | 		return reconcileResponse{ | ||||||
| 			resumable: res, | 			resumable: res, | ||||||
| 			err:       err, | 			err:       err, | ||||||
|  | |||||||
| @ -56,9 +56,8 @@ func statusableConditions(object statusable) []metav1.Condition { | |||||||
| 	return []metav1.Condition{} | 	return []metav1.Condition{} | ||||||
| } | } | ||||||
|  |  | ||||||
| func isReady(ctx context.Context, kubeClient client.Client, | func isReady(kubeClient client.Client, namespacedName types.NamespacedName, object statusable) wait.ConditionWithContextFunc { | ||||||
| 	namespacedName types.NamespacedName, object statusable) wait.ConditionFunc { | 	return func(ctx context.Context) (bool, error) { | ||||||
| 	return func() (bool, error) { |  | ||||||
| 		err := kubeClient.Get(ctx, namespacedName, object.asClientObject()) | 		err := kubeClient.Get(ctx, namespacedName, object.asClientObject()) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							| @ -48,6 +48,7 @@ require ( | |||||||
| 	github.com/theckman/yacspin v0.13.12 | 	github.com/theckman/yacspin v0.13.12 | ||||||
| 	golang.org/x/crypto v0.14.0 | 	golang.org/x/crypto v0.14.0 | ||||||
| 	golang.org/x/term v0.13.0 | 	golang.org/x/term v0.13.0 | ||||||
|  | 	golang.org/x/text v0.13.0 | ||||||
| 	k8s.io/api v0.27.4 | 	k8s.io/api v0.27.4 | ||||||
| 	k8s.io/apiextensions-apiserver v0.27.4 | 	k8s.io/apiextensions-apiserver v0.27.4 | ||||||
| 	k8s.io/apimachinery v0.27.4 | 	k8s.io/apimachinery v0.27.4 | ||||||
| @ -195,7 +196,6 @@ require ( | |||||||
| 	golang.org/x/oauth2 v0.13.0 // indirect | 	golang.org/x/oauth2 v0.13.0 // indirect | ||||||
| 	golang.org/x/sync v0.3.0 // indirect | 	golang.org/x/sync v0.3.0 // indirect | ||||||
| 	golang.org/x/sys v0.13.0 // indirect | 	golang.org/x/sys v0.13.0 // indirect | ||||||
| 	golang.org/x/text v0.13.0 // indirect |  | ||||||
| 	golang.org/x/time v0.3.0 // indirect | 	golang.org/x/time v0.3.0 // indirect | ||||||
| 	golang.org/x/tools v0.13.0 // indirect | 	golang.org/x/tools v0.13.0 // indirect | ||||||
| 	gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect | 	gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect | ||||||
|  | |||||||
| @ -539,10 +539,8 @@ func maskDockerconfigjsonSopsData(dataMap map[string]string, encode bool) error | |||||||
| func maskBase64EncryptedSopsData(dataMap map[string]string, mask string) error { | func maskBase64EncryptedSopsData(dataMap map[string]string, mask string) error { | ||||||
| 	for k, v := range dataMap { | 	for k, v := range dataMap { | ||||||
| 		data, err := base64.StdEncoding.DecodeString(v) | 		data, err := base64.StdEncoding.DecodeString(v) | ||||||
| 		if err != nil { | 		if corruptErr := base64.CorruptInputError(0); errors.As(err, &corruptErr) { | ||||||
| 			if _, ok := err.(base64.CorruptInputError); ok { | 			return corruptErr | ||||||
| 				return err |  | ||||||
| 			} |  | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if bytes.Contains(data, []byte("sops")) && bytes.Contains(data, []byte("ENC[")) { | 		if bytes.Contains(data, []byte("sops")) && bytes.Contains(data, []byte("ENC[")) { | ||||||
|  | |||||||
| @ -116,13 +116,14 @@ func (b *Builder) Diff() (string, bool, error) { | |||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return "", createdOrDrifted, err | 				return "", createdOrDrifted, err | ||||||
| 			} | 			} | ||||||
| 			defer cleanupDir(tmpDir) |  | ||||||
|  |  | ||||||
| 			err = diff(liveFile, mergedFile, &output) | 			err = diff(liveFile, mergedFile, &output) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
|  | 				cleanupDir(tmpDir) | ||||||
| 				return "", createdOrDrifted, err | 				return "", createdOrDrifted, err | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | 			cleanupDir(tmpDir) | ||||||
| 			createdOrDrifted = true | 			createdOrDrifted = true | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | |||||||
| @ -54,5 +54,5 @@ func (p *SafeRelativePath) Type() string { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (p *SafeRelativePath) Description() string { | func (p *SafeRelativePath) Description() string { | ||||||
| 	return fmt.Sprintf("secure relative path") | 	return "secure relative path" | ||||||
| } | } | ||||||
|  | |||||||
| @ -20,6 +20,7 @@ import ( | |||||||
| 	"context" | 	"context" | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"k8s.io/apimachinery/pkg/util/wait" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| @ -172,10 +173,8 @@ func kustomizationPathDiffers(ctx context.Context, kube client.Client, objKey cl | |||||||
| 	return k.Spec.Path, nil | 	return k.Spec.Path, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func kustomizationReconciled(ctx context.Context, kube client.Client, objKey client.ObjectKey, | func kustomizationReconciled(kube client.Client, objKey client.ObjectKey, kustomization *kustomizev1.Kustomization, expectRevision string) wait.ConditionWithContextFunc { | ||||||
| 	kustomization *kustomizev1.Kustomization, expectRevision string) func() (bool, error) { | 	return func(ctx context.Context) (bool, error) { | ||||||
|  |  | ||||||
| 	return func() (bool, error) { |  | ||||||
| 		if err := kube.Get(ctx, objKey, kustomization); err != nil { | 		if err := kube.Get(ctx, objKey, kustomization); err != nil { | ||||||
| 			return false, err | 			return false, err | ||||||
| 		} | 		} | ||||||
|  | |||||||
| @ -325,7 +325,7 @@ func (b *PlainGitBootstrapper) ReconcileSyncConfig(ctx context.Context, options | |||||||
| 			return fmt.Errorf("failed to generate OpenPGP entity: %w", err) | 			return fmt.Errorf("failed to generate OpenPGP entity: %w", err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	commitMsg := fmt.Sprintf("Add Flux sync manifests") | 	commitMsg := "Add Flux sync manifests" | ||||||
| 	if b.commitMessageAppendix != "" { | 	if b.commitMessageAppendix != "" { | ||||||
| 		commitMsg = commitMsg + "\n\n" + b.commitMessageAppendix | 		commitMsg = commitMsg + "\n\n" + b.commitMessageAppendix | ||||||
| 	} | 	} | ||||||
| @ -401,9 +401,8 @@ func (b *PlainGitBootstrapper) ReportKustomizationHealth(ctx context.Context, op | |||||||
|  |  | ||||||
| 	expectRevision := fmt.Sprintf("%s@%s", options.Branch, git.Hash(head).Digest()) | 	expectRevision := fmt.Sprintf("%s@%s", options.Branch, git.Hash(head).Digest()) | ||||||
| 	var k kustomizev1.Kustomization | 	var k kustomizev1.Kustomization | ||||||
| 	if err := wait.PollImmediate(pollInterval, timeout, kustomizationReconciled( | 	if err := wait.PollUntilContextTimeout(ctx, pollInterval, timeout, true, | ||||||
| 		ctx, b.kube, objKey, &k, expectRevision), | 		kustomizationReconciled(b.kube, objKey, &k, expectRevision)); err != nil { | ||||||
| 	); err != nil { |  | ||||||
| 		b.logger.Failuref(err.Error()) | 		b.logger.Failuref(err.Error()) | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| @ -465,9 +464,7 @@ func getOpenPgpEntity(keyRing openpgp.EntityList, passphrase, keyID string) (*op | |||||||
|  |  | ||||||
| 	var entity *openpgp.Entity | 	var entity *openpgp.Entity | ||||||
| 	if keyID != "" { | 	if keyID != "" { | ||||||
| 		if strings.HasPrefix(keyID, "0x") { | 		keyID = strings.TrimPrefix(keyID, "0x") | ||||||
| 			keyID = strings.TrimPrefix(keyID, "0x") |  | ||||||
| 		} |  | ||||||
| 		if len(keyID) != 16 { | 		if len(keyID) != 16 { | ||||||
| 			return nil, fmt.Errorf("invalid GPG key id length; expected %d, got %d", 16, len(keyID)) | 			return nil, fmt.Errorf("invalid GPG key id length; expected %d, got %d", 16, len(keyID)) | ||||||
| 		} | 		} | ||||||
|  | |||||||
| @ -16,7 +16,7 @@ limitations under the License. | |||||||
|  |  | ||||||
| package kustomization | package kustomization | ||||||
|  |  | ||||||
| import "sigs.k8s.io/kustomize/api/filesys" | import "sigs.k8s.io/kustomize/kyaml/filesys" | ||||||
|  |  | ||||||
| type Options struct { | type Options struct { | ||||||
| 	FileSystem filesys.FileSystem | 	FileSystem filesys.FileSystem | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ import ( | |||||||
| 	"github.com/olekukonko/tablewriter" | 	"github.com/olekukonko/tablewriter" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // TablePrinter is a printer that prints Flux cmd	outputs. | // TablePrinter is a printer that prints Flux cmd outputs. | ||||||
| func TablePrinter(header []string) PrinterFunc { | func TablePrinter(header []string) PrinterFunc { | ||||||
| 	return func(w io.Writer, args ...interface{}) error { | 	return func(w io.Writer, args ...interface{}) error { | ||||||
| 		var rows [][]string | 		var rows [][]string | ||||||
| @ -35,9 +35,7 @@ func TablePrinter(header []string) PrinterFunc { | |||||||
| 					if !ok { | 					if !ok { | ||||||
| 						return fmt.Errorf("unsupported type %T", v) | 						return fmt.Errorf("unsupported type %T", v) | ||||||
| 					} | 					} | ||||||
| 					for i := range s { | 					rows = append(rows, s...) | ||||||
| 						rows = append(rows, s[i]) |  | ||||||
| 					} |  | ||||||
| 				} | 				} | ||||||
| 			default: | 			default: | ||||||
| 				return fmt.Errorf("unsupported type %T", arg) | 				return fmt.Errorf("unsupported type %T", arg) | ||||||
|  | |||||||
| @ -48,7 +48,8 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list appsv1.DeploymentList | 		var list appsv1.DeploymentList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("Deployment/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) | 					logger.Failuref("Deployment/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) | ||||||
| 					aggregateErr = append(aggregateErr, err) | 					aggregateErr = append(aggregateErr, err) | ||||||
| @ -61,7 +62,8 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list corev1.ServiceList | 		var list corev1.ServiceList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("Service/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) | 					logger.Failuref("Service/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) | ||||||
| 					aggregateErr = append(aggregateErr, err) | 					aggregateErr = append(aggregateErr, err) | ||||||
| @ -74,7 +76,8 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list networkingv1.NetworkPolicyList | 		var list networkingv1.NetworkPolicyList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("NetworkPolicy/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) | 					logger.Failuref("NetworkPolicy/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) | ||||||
| 					aggregateErr = append(aggregateErr, err) | 					aggregateErr = append(aggregateErr, err) | ||||||
| @ -87,7 +90,8 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list corev1.ServiceAccountList | 		var list corev1.ServiceAccountList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace(namespace), selector); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("ServiceAccount/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) | 					logger.Failuref("ServiceAccount/%s/%s deletion failed: %s", r.Namespace, r.Name, err.Error()) | ||||||
| 					aggregateErr = append(aggregateErr, err) | 					aggregateErr = append(aggregateErr, err) | ||||||
| @ -100,7 +104,8 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list rbacv1.ClusterRoleList | 		var list rbacv1.ClusterRoleList | ||||||
| 		if err := kubeClient.List(ctx, &list, selector); err == nil { | 		if err := kubeClient.List(ctx, &list, selector); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("ClusterRole/%s deletion failed: %s", r.Name, err.Error()) | 					logger.Failuref("ClusterRole/%s deletion failed: %s", r.Name, err.Error()) | ||||||
| 					aggregateErr = append(aggregateErr, err) | 					aggregateErr = append(aggregateErr, err) | ||||||
| @ -113,7 +118,8 @@ func Components(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list rbacv1.ClusterRoleBindingList | 		var list rbacv1.ClusterRoleBindingList | ||||||
| 		if err := kubeClient.List(ctx, &list, selector); err == nil { | 		if err := kubeClient.List(ctx, &list, selector); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("ClusterRoleBinding/%s deletion failed: %s", r.Name, err.Error()) | 					logger.Failuref("ClusterRoleBinding/%s deletion failed: %s", r.Name, err.Error()) | ||||||
| 					aggregateErr = append(aggregateErr, err) | 					aggregateErr = append(aggregateErr, err) | ||||||
| @ -134,7 +140,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list sourcev1.GitRepositoryList | 		var list sourcev1.GitRepositoryList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				r.Finalizers = []string{} | 				r.Finalizers = []string{} | ||||||
| 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | ||||||
| @ -148,7 +155,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list sourcev1b2.OCIRepositoryList | 		var list sourcev1b2.OCIRepositoryList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				r.Finalizers = []string{} | 				r.Finalizers = []string{} | ||||||
| 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | ||||||
| @ -162,7 +170,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list sourcev1b2.HelmRepositoryList | 		var list sourcev1b2.HelmRepositoryList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				r.Finalizers = []string{} | 				r.Finalizers = []string{} | ||||||
| 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | ||||||
| @ -176,7 +185,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list sourcev1b2.HelmChartList | 		var list sourcev1b2.HelmChartList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				r.Finalizers = []string{} | 				r.Finalizers = []string{} | ||||||
| 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | ||||||
| @ -190,7 +200,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list sourcev1b2.BucketList | 		var list sourcev1b2.BucketList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				r.Finalizers = []string{} | 				r.Finalizers = []string{} | ||||||
| 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | ||||||
| @ -204,7 +215,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list kustomizev1.KustomizationList | 		var list kustomizev1.KustomizationList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				r.Finalizers = []string{} | 				r.Finalizers = []string{} | ||||||
| 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | ||||||
| @ -218,7 +230,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list helmv2.HelmReleaseList | 		var list helmv2.HelmReleaseList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				r.Finalizers = []string{} | 				r.Finalizers = []string{} | ||||||
| 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | ||||||
| @ -232,7 +245,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list notificationv1b2.AlertList | 		var list notificationv1b2.AlertList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				r.Finalizers = []string{} | 				r.Finalizers = []string{} | ||||||
| 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | ||||||
| @ -246,7 +260,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list notificationv1b2.ProviderList | 		var list notificationv1b2.ProviderList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				r.Finalizers = []string{} | 				r.Finalizers = []string{} | ||||||
| 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | ||||||
| @ -260,7 +275,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list notificationv1.ReceiverList | 		var list notificationv1.ReceiverList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				r.Finalizers = []string{} | 				r.Finalizers = []string{} | ||||||
| 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | ||||||
| @ -274,7 +290,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list imagev1.ImagePolicyList | 		var list imagev1.ImagePolicyList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				r.Finalizers = []string{} | 				r.Finalizers = []string{} | ||||||
| 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | ||||||
| @ -288,7 +305,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list imagev1.ImageRepositoryList | 		var list imagev1.ImageRepositoryList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				r.Finalizers = []string{} | 				r.Finalizers = []string{} | ||||||
| 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | ||||||
| @ -302,7 +320,8 @@ func Finalizers(ctx context.Context, logger log.Logger, kubeClient client.Client | |||||||
| 	{ | 	{ | ||||||
| 		var list autov1.ImageUpdateAutomationList | 		var list autov1.ImageUpdateAutomationList | ||||||
| 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | 		if err := kubeClient.List(ctx, &list, client.InNamespace("")); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				r.Finalizers = []string{} | 				r.Finalizers = []string{} | ||||||
| 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | 				if err := kubeClient.Update(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | 					logger.Failuref("%s/%s/%s removing finalizers failed: %s", r.Kind, r.Namespace, r.Name, err.Error()) | ||||||
| @ -324,7 +343,8 @@ func CustomResourceDefinitions(ctx context.Context, logger log.Logger, kubeClien | |||||||
| 	{ | 	{ | ||||||
| 		var list apiextensionsv1.CustomResourceDefinitionList | 		var list apiextensionsv1.CustomResourceDefinitionList | ||||||
| 		if err := kubeClient.List(ctx, &list, selector); err == nil { | 		if err := kubeClient.List(ctx, &list, selector); err == nil { | ||||||
| 			for _, r := range list.Items { | 			for i := range list.Items { | ||||||
|  | 				r := list.Items[i] | ||||||
| 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | 				if err := kubeClient.Delete(ctx, &r, opts); err != nil { | ||||||
| 					logger.Failuref("CustomResourceDefinition/%s deletion failed: %s", r.Name, err.Error()) | 					logger.Failuref("CustomResourceDefinition/%s deletion failed: %s", r.Name, err.Error()) | ||||||
| 					aggregateErr = append(aggregateErr, err) | 					aggregateErr = append(aggregateErr, err) | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Hidde Beydals
					Hidde Beydals