diff --git a/.github/workflows/kubeapps-general.yaml b/.github/workflows/kubeapps-general.yaml index 6dedc501c31..5a9399ed8bc 100644 --- a/.github/workflows/kubeapps-general.yaml +++ b/.github/workflows/kubeapps-general.yaml @@ -52,7 +52,7 @@ env: # Currently, we only build the images for linux/amd64 because building cross-platform images is extremely slow... IMG_PLATFORMS: "linux/amd64" KAPP_CONTROLLER_VERSION: "v0.49.0" - FLUX_VERSION: "v0.37.0" + FLUX_VERSION: "v2.2.2" K8S_KIND_VERSION: "v1.27.3@sha256:3966ac761ae0136263ffdb6cfd4db23ef8a83cba8a463690e98317add2c9ba72" KIND_VERSION: "v0.20.0" KUBECTL_VERSION: "v1.27.9" diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/cache/rate_limiting_queue.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/cache/rate_limiting_queue.go index 5bfbe0b20a4..4ad6b64bb8c 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/cache/rate_limiting_queue.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/cache/rate_limiting_queue.go @@ -4,6 +4,7 @@ package cache import ( + "context" "fmt" "strings" "sync" @@ -109,7 +110,7 @@ func (q *rateLimitingType) WaitUntilForgotten(item string) { // a call to .Forget(item). // TODO: (gfichtenholt) don't do wait.PollInfinite() here, use some sensible // timeout instead, and then this func will need to return an error - err := wait.PollInfinite(10*time.Millisecond, func() (bool, error) { + err := wait.PollUntilContextCancel(context.Background(), 10*time.Millisecond, true, func(ctx context.Context) (bool, error) { return q.rateLimiter.NumRequeues(item) == 0, nil }) if err != nil { diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/cache/watcher_cache.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/cache/watcher_cache.go index 0fd8d05b1ab..4eda56c25e6 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/cache/watcher_cache.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/cache/watcher_cache.go @@ -131,7 +131,7 @@ type NamespacedResourceWatcherCacheConfig struct { OnResyncFunc ResyncFunc // These funcs are needed to manipulate API-specific objects, such as flux's - // sourcev1.HelmRepository, in a generic fashion + // sourcev1beta2.HelmRepository, in a generic fashion NewObjFunc NewObjectFunc NewListFunc NewObjectListFunc ListItemsFunc GetListItemsFunc diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart.go index 58c104158f0..653d766849e 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart.go @@ -12,7 +12,7 @@ import ( "strings" "github.com/bufbuild/connect-go" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" corev1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/cache" "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/common" @@ -27,12 +27,12 @@ import ( "sigs.k8s.io/yaml" ) -func (s *Server) getChartInCluster(ctx context.Context, headers http.Header, key types.NamespacedName) (*sourcev1.HelmChart, error) { +func (s *Server) getChartInCluster(ctx context.Context, headers http.Header, key types.NamespacedName) (*sourcev1beta2.HelmChart, error) { client, err := s.getClient(headers, key.Namespace) if err != nil { return nil, err } - var chartObj sourcev1.HelmChart + var chartObj sourcev1beta2.HelmChart if err = client.Get(ctx, key, &chartObj); err != nil { return nil, connecterror.FromK8sError("get", "HelmChart", key.String(), err) } diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_integration_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_integration_test.go index cd9d85adb0a..8042756fc24 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_integration_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_integration_test.go @@ -12,7 +12,7 @@ import ( "testing" "time" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" grpc_retry "github.com/grpc-ecosystem/go-grpc-middleware/retry" corev1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" fluxplugin "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1" @@ -329,12 +329,12 @@ func TestKindClusterRepoAndChartRBAC(t *testing.T) { rules := map[string][]rbacv1.PolicyRule{ names[1].Namespace: { { - APIGroups: []string{sourcev1.GroupVersion.Group}, + APIGroups: []string{sourcev1beta2.GroupVersion.Group}, Resources: []string{fluxHelmRepositories}, Verbs: []string{"get", "list"}, }, { - APIGroups: []string{sourcev1.GroupVersion.Group}, + APIGroups: []string{sourcev1beta2.GroupVersion.Group}, Resources: []string{"helmcharts"}, Verbs: []string{"get", "list"}, }, diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_test.go index f61f22b8c49..938ec268ee1 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/chart_test.go @@ -15,7 +15,8 @@ import ( "github.com/bufbuild/connect-go" fluxmeta "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" redismock "github.com/go-redis/redismock/v8" corev1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/cache" @@ -186,7 +187,7 @@ func TestGetAvailablePackageDetail(t *testing.T) { } defer ts2.Close() - s, mock, err := newServerWithRepos(t, []sourcev1.HelmRepository{*repo}, charts, secretObjs) + s, mock, err := newServerWithRepos(t, []sourcev1beta2.HelmRepository{*repo}, charts, secretObjs) if err != nil { t.Fatalf("%+v", err) } @@ -290,7 +291,7 @@ func TestTransientHttpFailuresAreRetriedForChartCache(t *testing.T) { } defer ts2.Close() - s, mock, err := newServerWithRepos(t, []sourcev1.HelmRepository{*repo}, charts, nil) + s, mock, err := newServerWithRepos(t, []sourcev1beta2.HelmRepository{*repo}, charts, nil) if err != nil { t.Fatalf("%+v", err) } @@ -467,7 +468,7 @@ func TestNonExistingRepoOrInvalidPkgVersionGetAvailablePackageDetail(t *testing. } defer ts2.Close() - s, mock, err := newServerWithRepos(t, []sourcev1.HelmRepository{*repo}, charts, nil) + s, mock, err := newServerWithRepos(t, []sourcev1beta2.HelmRepository{*repo}, charts, nil) if err != nil { t.Fatalf("%+v", err) } @@ -648,7 +649,7 @@ func TestGetAvailablePackageVersions(t *testing.T) { } defer ts.Close() - s, mock, err := newServerWithRepos(t, []sourcev1.HelmRepository{*repo}, charts, nil) + s, mock, err := newServerWithRepos(t, []sourcev1beta2.HelmRepository{*repo}, charts, nil) if err != nil { t.Fatalf("%+v", err) } @@ -735,7 +736,7 @@ func TestGetOciAvailablePackageVersions(t *testing.T) { t.Fatal(err) } - s, mock, err := newServerWithRepos(t, []sourcev1.HelmRepository{*repo}, tc.charts, nil) + s, mock, err := newServerWithRepos(t, []sourcev1beta2.HelmRepository{*repo}, tc.charts, nil) if err != nil { t.Fatalf("%+v", err) } @@ -978,14 +979,14 @@ func TestChartWithRelativeURL(t *testing.T) { } })) - repoSpec := &sourcev1.HelmRepositorySpec{ + repoSpec := &sourcev1beta2.HelmRepositorySpec{ URL: ts.URL, Interval: metav1.Duration{Duration: 1 * time.Minute}, } - repoStatus := &sourcev1.HelmRepositoryStatus{ + repoStatus := &sourcev1beta2.HelmRepositoryStatus{ Artifact: &sourcev1.Artifact{ - Checksum: "651f952130ea96823711d08345b85e82be011dc6", + Digest: "651f952130ea96823711d08345b85e82be011dc6", LastUpdateTime: metav1.Time{Time: lastUpdateTime}, Revision: "651f952130ea96823711d08345b85e82be011dc6", }, @@ -1002,7 +1003,7 @@ func TestChartWithRelativeURL(t *testing.T) { defer ts.Close() s, mock, err := newServerWithRepos(t, - []sourcev1.HelmRepository{repo}, + []sourcev1beta2.HelmRepository{repo}, []testSpecChartWithUrl{ { chartID: fmt.Sprintf("%s/airflow", repoName), @@ -1072,7 +1073,7 @@ func TestGetOciAvailablePackageDetail(t *testing.T) { t.Fatal(err) } - s, mock, err := newServerWithRepos(t, []sourcev1.HelmRepository{*repo}, tc.charts, nil) + s, mock, err := newServerWithRepos(t, []sourcev1beta2.HelmRepository{*repo}, tc.charts, nil) if err != nil { t.Fatalf("%+v", err) } @@ -1128,8 +1129,8 @@ func TestGetOciAvailablePackageDetail(t *testing.T) { } } -func newChart(name, namespace string, spec *sourcev1.HelmChartSpec, status *sourcev1.HelmChartStatus) sourcev1.HelmChart { - helmChart := sourcev1.HelmChart{ +func newChart(name, namespace string, spec *sourcev1beta2.HelmChartSpec, status *sourcev1beta2.HelmChartStatus) sourcev1beta2.HelmChart { + helmChart := sourcev1beta2.HelmChart{ ObjectMeta: metav1.ObjectMeta{ Name: name, Generation: int64(1), diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/common/utils.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/common/utils.go index 2dbde9394e2..0e4cf588666 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/common/utils.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/common/utils.go @@ -5,6 +5,7 @@ package common import ( "bytes" + "context" "crypto/sha256" "encoding/base64" "encoding/json" @@ -23,8 +24,8 @@ import ( "github.com/bufbuild/connect-go" "github.com/docker/cli/cli/config" "github.com/docker/cli/cli/config/credentials" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + helmv2beta2 "github.com/fluxcd/helm-controller/api/v2beta2" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/go-redis/redis/v8" "github.com/google/go-containerregistry/pkg/authn" plugins "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/plugins/v1alpha1" @@ -67,20 +68,20 @@ func init() { } repositoriesGvr = schema.GroupVersionResource{ - Group: sourcev1.GroupVersion.Group, - Version: sourcev1.GroupVersion.Version, + Group: sourcev1beta2.GroupVersion.Group, + Version: sourcev1beta2.GroupVersion.Version, Resource: "helmrepositories", } chartsGvr = schema.GroupVersionResource{ - Group: sourcev1.GroupVersion.Group, - Version: sourcev1.GroupVersion.Version, + Group: sourcev1beta2.GroupVersion.Group, + Version: sourcev1beta2.GroupVersion.Version, Resource: "helmcharts", } releasesGvr = schema.GroupVersionResource{ - Group: helmv2.GroupVersion.Group, - Version: helmv2.GroupVersion.Version, + Group: helmv2beta2.GroupVersion.Group, + Version: helmv2beta2.GroupVersion.Version, Resource: "helmreleases", } } @@ -180,24 +181,23 @@ func NewRedisClientFromEnv(stopCh <-chan struct{}) (*redis.Client, error) { // ref https://github.com/vmware-tanzu/kubeapps/pull/4382#discussion_r820386531 var redisCli *redis.Client - err = wait.PollImmediate(redisInitClientRetryWait, redisInitClientTimeout, - func() (bool, error) { - redisCli = redis.NewClient(&redis.Options{ - Addr: REDIS_ADDR, - Password: REDIS_PASSWORD, - DB: REDIS_DB_NUM, - }) - - // ping redis to make sure client is connected - var pong string - if pong, err = redisCli.Ping(redisCli.Context()).Result(); err == nil { - log.Infof("Redis [PING]: %s", pong) - return true, nil - } - log.Infof("Waiting %s before retrying to due to %v...", redisInitClientRetryWait.String(), err) - return false, nil + err = wait.PollUntilContextTimeout(context.Background(), redisInitClientRetryWait, redisInitClientTimeout, true, func(ctx context.Context) (bool, error) { + redisCli = redis.NewClient(&redis.Options{ + Addr: REDIS_ADDR, + Password: REDIS_PASSWORD, + DB: REDIS_DB_NUM, }) + // ping redis to make sure client is connected + var pong string + if pong, err = redisCli.Ping(redisCli.Context()).Result(); err == nil { + log.Infof("Redis [PING]: %s", pong) + return true, nil + } + log.Infof("Waiting %s before retrying to due to %v...", redisInitClientRetryWait.String(), err) + return false, nil + }) + if err != nil { return nil, fmt.Errorf("initializing redis client failed after timeout of %s was reached, error: %v", redisInitClientTimeout.String(), err) } diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go index f432dd5d204..a60a10a8bad 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/global_vars_test.go @@ -5,13 +5,15 @@ package main import ( "encoding/json" - "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/pkg/k8sutils" "os" "time" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/pkg/k8sutils" + + helmv2beta2 "github.com/fluxcd/helm-controller/api/v2beta2" fluxmeta "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" corev1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1" "google.golang.org/protobuf/types/known/anypb" @@ -1004,119 +1006,122 @@ var ( }, } - add_repo_1 = sourcev1.HelmRepository{ + add_repo_1 = sourcev1beta2.HelmRepository{ TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.HelmRepositoryKind, - APIVersion: sourcev1.GroupVersion.String(), + Kind: sourcev1beta2.HelmRepositoryKind, + APIVersion: sourcev1beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "bar", Namespace: "foo", ResourceVersion: "1", }, - Spec: sourcev1.HelmRepositorySpec{ + Spec: sourcev1beta2.HelmRepositorySpec{ URL: "http://example.com", Interval: metav1.Duration{Duration: 10 * time.Minute}, }, } - add_repo_2 = sourcev1.HelmRepository{ + add_repo_2 = sourcev1beta2.HelmRepository{ TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.HelmRepositoryKind, - APIVersion: sourcev1.GroupVersion.String(), + Kind: sourcev1beta2.HelmRepositoryKind, + APIVersion: sourcev1beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "bar", Namespace: "foo", ResourceVersion: "1", }, - Spec: sourcev1.HelmRepositorySpec{ - URL: "http://example.com", - Interval: metav1.Duration{Duration: 10 * time.Minute}, + Spec: sourcev1beta2.HelmRepositorySpec{ + URL: "http://example.com", + Interval: metav1.Duration{Duration: 10 * time.Minute}, + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 SecretRef: &fluxmeta.LocalObjectReference{Name: "bar-"}, }, } - add_repo_3 = sourcev1.HelmRepository{ + add_repo_3 = sourcev1beta2.HelmRepository{ TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.HelmRepositoryKind, - APIVersion: sourcev1.GroupVersion.String(), + Kind: sourcev1beta2.HelmRepositoryKind, + APIVersion: sourcev1beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "bar", Namespace: "foo", ResourceVersion: "1", }, - Spec: sourcev1.HelmRepositorySpec{ - URL: "http://example.com", - Interval: metav1.Duration{Duration: 10 * time.Minute}, + Spec: sourcev1beta2.HelmRepositorySpec{ + URL: "http://example.com", + Interval: metav1.Duration{Duration: 10 * time.Minute}, + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 SecretRef: &fluxmeta.LocalObjectReference{Name: "secret-1"}, }, } - add_repo_4 = sourcev1.HelmRepository{ + add_repo_4 = sourcev1beta2.HelmRepository{ TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.HelmRepositoryKind, - APIVersion: sourcev1.GroupVersion.String(), + Kind: sourcev1beta2.HelmRepositoryKind, + APIVersion: sourcev1beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "bar", Namespace: "foo", ResourceVersion: "1", }, - Spec: sourcev1.HelmRepositorySpec{ - URL: "http://example.com", - Interval: metav1.Duration{Duration: 10 * time.Minute}, + Spec: sourcev1beta2.HelmRepositorySpec{ + URL: "http://example.com", + Interval: metav1.Duration{Duration: 10 * time.Minute}, + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 SecretRef: &fluxmeta.LocalObjectReference{Name: "bar-"}, PassCredentials: true, }, } - add_repo_5 = sourcev1.HelmRepository{ + add_repo_5 = sourcev1beta2.HelmRepository{ TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.HelmRepositoryKind, - APIVersion: sourcev1.GroupVersion.String(), + Kind: sourcev1beta2.HelmRepositoryKind, + APIVersion: sourcev1beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "bar", Namespace: "foo", ResourceVersion: "1", }, - Spec: sourcev1.HelmRepositorySpec{ + Spec: sourcev1beta2.HelmRepositorySpec{ URL: "http://example.com", Interval: metav1.Duration{Duration: 10 * time.Minute}, PassCredentials: true, }, } - add_repo_6 = sourcev1.HelmRepository{ + add_repo_6 = sourcev1beta2.HelmRepository{ TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.HelmRepositoryKind, - APIVersion: sourcev1.GroupVersion.String(), + Kind: sourcev1beta2.HelmRepositoryKind, + APIVersion: sourcev1beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "bar", Namespace: "foo", ResourceVersion: "1", }, - Spec: sourcev1.HelmRepositorySpec{ + Spec: sourcev1beta2.HelmRepositorySpec{ URL: github_stefanprodan_podinfo_oci_registry_url, Interval: metav1.Duration{Duration: 10 * time.Minute}, Type: "oci", }, } - add_repo_7 = sourcev1.HelmRepository{ + add_repo_7 = sourcev1beta2.HelmRepository{ TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.HelmRepositoryKind, - APIVersion: sourcev1.GroupVersion.String(), + Kind: sourcev1beta2.HelmRepositoryKind, + APIVersion: sourcev1beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "bar", Namespace: "foo", ResourceVersion: "1", }, - Spec: sourcev1.HelmRepositorySpec{ + Spec: sourcev1beta2.HelmRepositorySpec{ URL: github_stefanprodan_podinfo_oci_registry_url, Interval: metav1.Duration{Duration: 10 * time.Minute}, Type: "oci", @@ -1124,10 +1129,10 @@ var ( }, } - add_repo_8 = sourcev1.HelmRepository{ + add_repo_8 = sourcev1beta2.HelmRepository{ TypeMeta: metav1.TypeMeta{ - Kind: sourcev1.HelmRepositoryKind, - APIVersion: sourcev1.GroupVersion.String(), + Kind: sourcev1beta2.HelmRepositoryKind, + APIVersion: sourcev1beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "bar", @@ -1135,7 +1140,7 @@ var ( ResourceVersion: "1", Annotations: map[string]string{k8sutils.AnnotationDescriptionKey: "repo desc"}, }, - Spec: sourcev1.HelmRepositorySpec{ + Spec: sourcev1beta2.HelmRepositorySpec{ URL: "http://example.com", Interval: metav1.Duration{Duration: 10 * time.Minute}, }, @@ -1826,7 +1831,7 @@ var ( Namespace: "test", Generation: 1, }, - releaseStatus: helmv2.HelmReleaseStatus{ + releaseStatus: helmv2beta2.HelmReleaseStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, @@ -1839,7 +1844,7 @@ var ( LastTransitionTime: metav1.Time{Time: lastTransitionTime}, Type: "Released", Status: metav1.ConditionTrue, - Reason: helmv2.InstallSucceededReason, + Reason: helmv2beta2.InstallSucceededReason, Message: "Helm install succeeded", }, }, @@ -1881,7 +1886,7 @@ var ( releaseSuspend: true, releaseServiceAccountName: "foo", releaseValues: &v1.JSON{Raw: redis_existing_spec_completed_with_values_and_reconciliation_options_values_bytes}, - releaseStatus: helmv2.HelmReleaseStatus{ + releaseStatus: helmv2beta2.HelmReleaseStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, @@ -1894,7 +1899,7 @@ var ( LastTransitionTime: metav1.Time{Time: lastTransitionTime}, Type: "Released", Status: metav1.ConditionTrue, - Reason: helmv2.InstallSucceededReason, + Reason: helmv2beta2.InstallSucceededReason, Message: "Helm install succeeded", }, }, @@ -1918,20 +1923,20 @@ var ( Namespace: "test", Generation: 1, }, - releaseStatus: helmv2.HelmReleaseStatus{ + releaseStatus: helmv2beta2.HelmReleaseStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, Type: fluxmeta.ReadyCondition, Status: metav1.ConditionFalse, - Reason: helmv2.InstallFailedReason, + Reason: helmv2beta2.InstallFailedReason, Message: "install retries exhausted", }, { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, Type: "Released", Status: metav1.ConditionFalse, - Reason: helmv2.InstallFailedReason, + Reason: helmv2beta2.InstallFailedReason, Message: "Helm install failed: unable to build kubernetes objects from release manifest: error validating \"\": error validating data: ValidationError(Deployment.spec.replicas): invalid type for io.k8s.api.apps.v1.DeploymentSpec.replicas: got \"string\", expected \"integer\"", }, }, @@ -1956,13 +1961,13 @@ var ( Namespace: "test", Generation: 1, }, - releaseStatus: helmv2.HelmReleaseStatus{ + releaseStatus: helmv2beta2.HelmReleaseStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, Type: fluxmeta.ReadyCondition, Status: metav1.ConditionFalse, - Reason: helmv2.GetLastReleaseFailedReason, + Reason: helmv2beta2.GetLastReleaseFailedReason, Message: "failed to get last release revision", }, }, @@ -1985,13 +1990,13 @@ var ( Namespace: "test", Generation: 2, }, - releaseStatus: helmv2.HelmReleaseStatus{ + releaseStatus: helmv2beta2.HelmReleaseStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, Type: fluxmeta.ReadyCondition, Status: metav1.ConditionFalse, - Reason: helmv2.GetLastReleaseFailedReason, + Reason: helmv2beta2.GetLastReleaseFailedReason, Message: "failed to get last release revision", }, }, @@ -2022,7 +2027,7 @@ var ( Namespace: "namespace-2", Generation: 1, }, - releaseStatus: helmv2.HelmReleaseStatus{ + releaseStatus: helmv2beta2.HelmReleaseStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, @@ -2035,7 +2040,7 @@ var ( LastTransitionTime: metav1.Time{Time: lastTransitionTime}, Type: "Released", Status: metav1.ConditionTrue, - Reason: helmv2.InstallSucceededReason, + Reason: helmv2beta2.InstallSucceededReason, Message: "Helm install succeeded", }, }, @@ -2059,7 +2064,7 @@ var ( Namespace: "namespace-2", Generation: 1, }, - releaseStatus: helmv2.HelmReleaseStatus{ + releaseStatus: helmv2beta2.HelmReleaseStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, @@ -2072,7 +2077,7 @@ var ( LastTransitionTime: metav1.Time{Time: lastTransitionTime}, Type: "Released", Status: metav1.ConditionTrue, - Reason: helmv2.InstallSucceededReason, + Reason: helmv2beta2.InstallSucceededReason, Message: "Helm install succeeded", }, }, @@ -2096,7 +2101,7 @@ var ( Namespace: "test", Generation: 1, }, - releaseStatus: helmv2.HelmReleaseStatus{ + releaseStatus: helmv2beta2.HelmReleaseStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, @@ -2125,13 +2130,13 @@ var ( Namespace: "test", Generation: 1, }, - releaseStatus: helmv2.HelmReleaseStatus{ + releaseStatus: helmv2beta2.HelmReleaseStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, Type: fluxmeta.ReadyCondition, Status: metav1.ConditionFalse, - Reason: helmv2.ArtifactFailedReason, + Reason: helmv2beta2.ArtifactFailedReason, Message: "HelmChart 'default/kubeapps-my-redis' is not ready", }, }, @@ -2163,7 +2168,7 @@ var ( Namespace: "test", Generation: 1, }, - releaseStatus: helmv2.HelmReleaseStatus{ + releaseStatus: helmv2beta2.HelmReleaseStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, @@ -2176,7 +2181,7 @@ var ( LastTransitionTime: metav1.Time{Time: lastTransitionTime}, Type: "Released", Status: metav1.ConditionTrue, - Reason: helmv2.InstallSucceededReason, + Reason: helmv2beta2.InstallSucceededReason, Message: "Helm install succeeded", }, }, @@ -2270,41 +2275,41 @@ var ( PostInstallationNotes: "some notes", } - flux_helm_release_basic = newFluxHelmRelease(helmv2.HelmChartTemplateSpec{ + flux_helm_release_basic = newFluxHelmRelease(helmv2beta2.HelmChartTemplateSpec{ Chart: "podinfo", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "podinfo", Namespace: "namespace-1", }, }) - flux_helm_release_semver_constraint = newFluxHelmRelease(helmv2.HelmChartTemplateSpec{ + flux_helm_release_semver_constraint = newFluxHelmRelease(helmv2beta2.HelmChartTemplateSpec{ Chart: "podinfo", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "podinfo", Namespace: "namespace-1", }, Version: "> 5", }) - flux_helm_release_reconcile_options = &helmv2.HelmRelease{ + flux_helm_release_reconcile_options = &helmv2beta2.HelmRelease{ TypeMeta: metav1.TypeMeta{ - Kind: helmv2.HelmReleaseKind, - APIVersion: helmv2.GroupVersion.String(), + Kind: helmv2beta2.HelmReleaseKind, + APIVersion: helmv2beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "my-podinfo", Namespace: "test", ResourceVersion: "1", }, - Spec: helmv2.HelmReleaseSpec{ - Chart: helmv2.HelmChartTemplate{ - Spec: helmv2.HelmChartTemplateSpec{ + Spec: helmv2beta2.HelmReleaseSpec{ + Chart: helmv2beta2.HelmChartTemplate{ + Spec: helmv2beta2.HelmChartTemplateSpec{ Chart: "podinfo", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "podinfo", Namespace: "namespace-1", }, @@ -2322,22 +2327,22 @@ var ( "message": "what we do in the shadows", }}) - flux_helm_release_values = &helmv2.HelmRelease{ + flux_helm_release_values = &helmv2beta2.HelmRelease{ TypeMeta: metav1.TypeMeta{ - Kind: helmv2.HelmReleaseKind, - APIVersion: helmv2.GroupVersion.String(), + Kind: helmv2beta2.HelmReleaseKind, + APIVersion: helmv2beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "my-podinfo", Namespace: "test", ResourceVersion: "1", }, - Spec: helmv2.HelmReleaseSpec{ - Chart: helmv2.HelmChartTemplate{ - Spec: helmv2.HelmChartTemplateSpec{ + Spec: helmv2beta2.HelmReleaseSpec{ + Chart: helmv2beta2.HelmChartTemplate{ + Spec: helmv2beta2.HelmChartTemplateSpec{ Chart: "podinfo", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "podinfo", Namespace: "namespace-1", }, @@ -2352,10 +2357,10 @@ var ( InstalledPackageRef: installedRef("my-podinfo", "test"), } - flux_helm_release_updated_1 = &helmv2.HelmRelease{ + flux_helm_release_updated_1 = &helmv2beta2.HelmRelease{ TypeMeta: metav1.TypeMeta{ - Kind: helmv2.HelmReleaseKind, - APIVersion: helmv2.GroupVersion.String(), + Kind: helmv2beta2.HelmReleaseKind, + APIVersion: helmv2beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "my-redis", @@ -2363,12 +2368,12 @@ var ( Generation: int64(1), ResourceVersion: "1000", }, - Spec: helmv2.HelmReleaseSpec{ - Chart: helmv2.HelmChartTemplate{ - Spec: helmv2.HelmChartTemplateSpec{ + Spec: helmv2beta2.HelmReleaseSpec{ + Chart: helmv2beta2.HelmChartTemplate{ + Spec: helmv2beta2.HelmChartTemplateSpec{ Chart: "redis", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "bitnami-1", Namespace: "default", }, @@ -2379,10 +2384,10 @@ var ( }, } - flux_helm_release_updated_2 = &helmv2.HelmRelease{ + flux_helm_release_updated_2 = &helmv2beta2.HelmRelease{ TypeMeta: metav1.TypeMeta{ - Kind: helmv2.HelmReleaseKind, - APIVersion: helmv2.GroupVersion.String(), + Kind: helmv2beta2.HelmReleaseKind, + APIVersion: helmv2beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "my-redis", @@ -2390,12 +2395,12 @@ var ( Generation: int64(1), ResourceVersion: "1000", }, - Spec: helmv2.HelmReleaseSpec{ - Chart: helmv2.HelmChartTemplate{ - Spec: helmv2.HelmChartTemplateSpec{ + Spec: helmv2beta2.HelmReleaseSpec{ + Chart: helmv2beta2.HelmChartTemplate{ + Spec: helmv2beta2.HelmChartTemplateSpec{ Chart: "redis", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "bitnami-1", Namespace: "default", }, @@ -2419,7 +2424,7 @@ var ( Namespace: "test", Generation: 1, }, - releaseStatus: helmv2.HelmReleaseStatus{ + releaseStatus: helmv2beta2.HelmReleaseStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, @@ -2432,7 +2437,7 @@ var ( LastTransitionTime: metav1.Time{Time: lastTransitionTime}, Type: "Released", Status: metav1.ConditionTrue, - Reason: helmv2.InstallSucceededReason, + Reason: helmv2beta2.InstallSucceededReason, Message: "Helm install succeeded", }, }, @@ -2452,10 +2457,10 @@ var ( status: release.StatusDeployed, } - flux_helm_release_updated_target_ns_is_set = &helmv2.HelmRelease{ + flux_helm_release_updated_target_ns_is_set = &helmv2beta2.HelmRelease{ TypeMeta: metav1.TypeMeta{ - Kind: helmv2.HelmReleaseKind, - APIVersion: helmv2.GroupVersion.String(), + Kind: helmv2beta2.HelmReleaseKind, + APIVersion: helmv2beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "my-redis", @@ -2463,12 +2468,12 @@ var ( Generation: int64(1), ResourceVersion: "1000", }, - Spec: helmv2.HelmReleaseSpec{ - Chart: helmv2.HelmChartTemplate{ - Spec: helmv2.HelmChartTemplateSpec{ + Spec: helmv2beta2.HelmReleaseSpec{ + Chart: helmv2beta2.HelmChartTemplate{ + Spec: helmv2beta2.HelmChartTemplateSpec{ Chart: "redis", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "bitnami-1", Namespace: "default", }, @@ -2656,50 +2661,50 @@ var ( }, } - flux_helm_release_upgrade_policy_none = newFluxHelmRelease(helmv2.HelmChartTemplateSpec{ + flux_helm_release_upgrade_policy_none = newFluxHelmRelease(helmv2beta2.HelmChartTemplateSpec{ Chart: "podinfo", Version: "5.2.1", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "podinfo", Namespace: "namespace-1", }, }) - flux_helm_release_upgrade_policy_major = newFluxHelmRelease(helmv2.HelmChartTemplateSpec{ + flux_helm_release_upgrade_policy_major = newFluxHelmRelease(helmv2beta2.HelmChartTemplateSpec{ Chart: "podinfo", Version: ">=5.2.1", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "podinfo", Namespace: "namespace-1", }, }) - flux_helm_release_upgrade_policy_minor = newFluxHelmRelease(helmv2.HelmChartTemplateSpec{ + flux_helm_release_upgrade_policy_minor = newFluxHelmRelease(helmv2beta2.HelmChartTemplateSpec{ Chart: "podinfo", Version: ">=5.2.1 <6.0.0", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "podinfo", Namespace: "namespace-1", }, }) - flux_helm_release_upgrade_policy_patch = newFluxHelmRelease(helmv2.HelmChartTemplateSpec{ + flux_helm_release_upgrade_policy_patch = newFluxHelmRelease(helmv2beta2.HelmChartTemplateSpec{ Chart: "podinfo", Version: ">=5.2.1 <5.3.0", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "podinfo", Namespace: "namespace-1", }, }) - flux_helm_release_updated_upgrade_major = &helmv2.HelmRelease{ + flux_helm_release_updated_upgrade_major = &helmv2beta2.HelmRelease{ TypeMeta: metav1.TypeMeta{ - Kind: helmv2.HelmReleaseKind, - APIVersion: helmv2.GroupVersion.String(), + Kind: helmv2beta2.HelmReleaseKind, + APIVersion: helmv2beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "my-redis", @@ -2707,13 +2712,13 @@ var ( Generation: int64(1), ResourceVersion: "1000", }, - Spec: helmv2.HelmReleaseSpec{ - Chart: helmv2.HelmChartTemplate{ - Spec: helmv2.HelmChartTemplateSpec{ + Spec: helmv2beta2.HelmReleaseSpec{ + Chart: helmv2beta2.HelmChartTemplate{ + Spec: helmv2beta2.HelmChartTemplateSpec{ Version: ">=14.4.0", Chart: "redis", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "bitnami-1", Namespace: "default", }, @@ -2723,10 +2728,10 @@ var ( }, } - flux_helm_release_updated_upgrade_minor = &helmv2.HelmRelease{ + flux_helm_release_updated_upgrade_minor = &helmv2beta2.HelmRelease{ TypeMeta: metav1.TypeMeta{ - Kind: helmv2.HelmReleaseKind, - APIVersion: helmv2.GroupVersion.String(), + Kind: helmv2beta2.HelmReleaseKind, + APIVersion: helmv2beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "my-redis", @@ -2734,13 +2739,13 @@ var ( Generation: int64(1), ResourceVersion: "1000", }, - Spec: helmv2.HelmReleaseSpec{ - Chart: helmv2.HelmChartTemplate{ - Spec: helmv2.HelmChartTemplateSpec{ + Spec: helmv2beta2.HelmReleaseSpec{ + Chart: helmv2beta2.HelmChartTemplate{ + Spec: helmv2beta2.HelmChartTemplateSpec{ Version: ">=14.4.0 <15.0.0", Chart: "redis", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "bitnami-1", Namespace: "default", }, @@ -2750,10 +2755,10 @@ var ( }, } - flux_helm_release_updated_upgrade_patch = &helmv2.HelmRelease{ + flux_helm_release_updated_upgrade_patch = &helmv2beta2.HelmRelease{ TypeMeta: metav1.TypeMeta{ - Kind: helmv2.HelmReleaseKind, - APIVersion: helmv2.GroupVersion.String(), + Kind: helmv2beta2.HelmReleaseKind, + APIVersion: helmv2beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "my-redis", @@ -2761,13 +2766,13 @@ var ( Generation: int64(1), ResourceVersion: "1000", }, - Spec: helmv2.HelmReleaseSpec{ - Chart: helmv2.HelmChartTemplate{ - Spec: helmv2.HelmChartTemplateSpec{ + Spec: helmv2beta2.HelmReleaseSpec{ + Chart: helmv2beta2.HelmChartTemplate{ + Spec: helmv2beta2.HelmChartTemplateSpec{ Version: ">=14.4.0 <14.5.0", Chart: "redis", - SourceRef: helmv2.CrossNamespaceObjectReference{ - Kind: sourcev1.HelmRepositoryKind, + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ + Kind: sourcev1beta2.HelmRepositoryKind, Name: "bitnami-1", Namespace: "default", }, @@ -3225,14 +3230,15 @@ var ( } get_summaries_repo_1 = newRepo("bar", "foo", - &sourcev1.HelmRepositorySpec{ - URL: "http://example.com", - Interval: metav1.Duration{Duration: 10 * time.Minute}, + &sourcev1beta2.HelmRepositorySpec{ + URL: "http://example.com", + Interval: metav1.Duration{Duration: 10 * time.Minute}, + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 SecretRef: &fluxmeta.LocalObjectReference{}, }, - &sourcev1.HelmRepositoryStatus{ + &sourcev1beta2.HelmRepositoryStatus{ Artifact: &sourcev1.Artifact{ - Checksum: "651f952130ea96823711d08345b85e82be011dc6", + Digest: "651f952130ea96823711d08345b85e82be011dc6", LastUpdateTime: metav1.Time{Time: lastUpdateTime}, Path: "helmrepository/default/bitnami/index-651f952130ea96823711d08345b85e82be011dc6.yaml", Revision: "651f952130ea96823711d08345b85e82be011dc6", @@ -3251,13 +3257,13 @@ var ( }) get_summaries_repo_2 = newRepo("zot", "xyz", - &sourcev1.HelmRepositorySpec{ + &sourcev1beta2.HelmRepositorySpec{ URL: "http://example.com", Interval: metav1.Duration{Duration: 10 * time.Minute}, }, - &sourcev1.HelmRepositoryStatus{ + &sourcev1beta2.HelmRepositoryStatus{ Artifact: &sourcev1.Artifact{ - Checksum: "651f952130ea96823711d08345b85e82be011dc6", + Digest: "651f952130ea96823711d08345b85e82be011dc6", LastUpdateTime: metav1.Time{Time: lastUpdateTime}, Path: "helmrepository/default/bitnami/index-651f952130ea96823711d08345b85e82be011dc6.yaml", Revision: "651f952130ea96823711d08345b85e82be011dc6", @@ -3276,19 +3282,19 @@ var ( }) get_summaries_repo_3 = newRepo("pending", "xyz", - &sourcev1.HelmRepositorySpec{ + &sourcev1beta2.HelmRepositorySpec{ URL: "http://example.com", Interval: metav1.Duration{Duration: 10 * time.Minute}, }, - &sourcev1.HelmRepositoryStatus{ObservedGeneration: -1}, + &sourcev1beta2.HelmRepositoryStatus{ObservedGeneration: -1}, ) get_summaries_repo_4 = newRepo("failed", "xyz", - &sourcev1.HelmRepositorySpec{ + &sourcev1beta2.HelmRepositorySpec{ URL: "http://example.com", Interval: metav1.Duration{Duration: 10 * time.Minute}, }, - &sourcev1.HelmRepositoryStatus{ + &sourcev1beta2.HelmRepositoryStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, @@ -4021,19 +4027,19 @@ var ( } } - newFluxHelmRelease = func(chartSpec helmv2.HelmChartTemplateSpec) *helmv2.HelmRelease { - return &helmv2.HelmRelease{ + newFluxHelmRelease = func(chartSpec helmv2beta2.HelmChartTemplateSpec) *helmv2beta2.HelmRelease { + return &helmv2beta2.HelmRelease{ TypeMeta: metav1.TypeMeta{ - Kind: helmv2.HelmReleaseKind, - APIVersion: helmv2.GroupVersion.String(), + Kind: helmv2beta2.HelmReleaseKind, + APIVersion: helmv2beta2.GroupVersion.String(), }, ObjectMeta: metav1.ObjectMeta{ Name: "my-podinfo", Namespace: "test", ResourceVersion: "1", }, - Spec: helmv2.HelmReleaseSpec{ - Chart: helmv2.HelmChartTemplate{ + Spec: helmv2beta2.HelmReleaseSpec{ + Chart: helmv2beta2.HelmChartTemplate{ Spec: chartSpec, }, Interval: metav1.Duration{Duration: 1 * time.Minute}, diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/integration_utils_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/integration_utils_test.go index 923c0ef6075..4d649b1ce96 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/integration_utils_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/integration_utils_test.go @@ -18,9 +18,9 @@ import ( "testing" "time" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + helmv2beta2 "github.com/fluxcd/helm-controller/api/v2beta2" + fluxmeta "github.com/fluxcd/pkg/apis/meta" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/go-redis/redis/v8" "github.com/vmware-tanzu/kubeapps/cmd/apprepository-controller/pkg/client/clientset/versioned/scheme" plugins "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/plugins/v1alpha1" @@ -143,7 +143,7 @@ func checkEnv(t *testing.T) (fluxplugin.FluxV2PackagesServiceClient, fluxplugin. } // Check for helmrepositories left over from manual testing. This has caused me a lot grief - var l *sourcev1.HelmRepositoryList + var l *sourcev1beta2.HelmRepositoryList var names []string const maxWait = 25 for i := 0; i <= maxWait; i++ { @@ -251,12 +251,12 @@ func kubeAddHelmRepository(t *testing.T, name types.NamespacedName, typ, url, se if interval <= 0 { interval = time.Duration(10 * time.Minute) } - repo := sourcev1.HelmRepository{ + repo := sourcev1beta2.HelmRepository{ ObjectMeta: metav1.ObjectMeta{ Name: name.Name, Namespace: name.Namespace, }, - Spec: sourcev1.HelmRepositorySpec{ + Spec: sourcev1beta2.HelmRepositorySpec{ URL: url, Interval: metav1.Duration{Duration: interval}, }, @@ -267,7 +267,8 @@ func kubeAddHelmRepository(t *testing.T, name types.NamespacedName, typ, url, se } if secretName != "" { - repo.Spec.SecretRef = &meta.LocalObjectReference{ + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 + repo.Spec.SecretRef = &fluxmeta.LocalObjectReference{ Name: secretName, } } @@ -296,7 +297,7 @@ func kubeAddHelmRepositoryAndCleanup(t *testing.T, name types.NamespacedName, ty return err } -func kubeGetHelmRepository(t *testing.T, name types.NamespacedName) (*sourcev1.HelmRepository, error) { +func kubeGetHelmRepository(t *testing.T, name types.NamespacedName) (*sourcev1beta2.HelmRepository, error) { t.Logf("+kubeGetHelmRepository(%s)", name) ctx, cancel := context.WithTimeout(context.Background(), defaultContextTimeout) @@ -304,7 +305,7 @@ func kubeGetHelmRepository(t *testing.T, name types.NamespacedName) (*sourcev1.H if ifc, err := kubeGetCtrlClient(); err != nil { return nil, err } else { - var repo sourcev1.HelmRepository + var repo sourcev1beta2.HelmRepository if err := ifc.Get(ctx, name, &repo); err != nil { return nil, err } @@ -312,7 +313,7 @@ func kubeGetHelmRepository(t *testing.T, name types.NamespacedName) (*sourcev1.H } } -func kubeListAllHelmRepositories(t *testing.T) (*sourcev1.HelmRepositoryList, error) { +func kubeListAllHelmRepositories(t *testing.T) (*sourcev1beta2.HelmRepositoryList, error) { t.Logf("+kubeListAllHelmRepositories()") ctx, cancel := context.WithTimeout(context.Background(), defaultContextTimeout) @@ -320,7 +321,7 @@ func kubeListAllHelmRepositories(t *testing.T) (*sourcev1.HelmRepositoryList, er if ifc, err := kubeGetCtrlClient(); err != nil { return nil, err } else { - var repoList sourcev1.HelmRepositoryList + var repoList sourcev1beta2.HelmRepositoryList if err := ifc.List(ctx, &repoList); err != nil { return nil, err } @@ -339,7 +340,7 @@ func kubeWaitUntilHelmRepositoryIsReady(t *testing.T, name types.NamespacedName) } else { ctx, cancel := context.WithTimeout(context.Background(), 90*time.Second) defer cancel() - var repoList sourcev1.HelmRepositoryList + var repoList sourcev1beta2.HelmRepositoryList if watcher, err := ifc.Watch(ctx, &repoList); err != nil { return err } else { @@ -356,8 +357,8 @@ func kubeWaitUntilHelmRepositoryIsReady(t *testing.T, name types.NamespacedName) } switch event.Type { case watch.Added, watch.Modified: - if repo, ok := event.Object.(*sourcev1.HelmRepository); !ok { - return errors.New("Could not cast to *sourcev1.HelmRepository") + if repo, ok := event.Object.(*sourcev1beta2.HelmRepository); !ok { + return errors.New("Could not cast to *sourcev1beta2.HelmRepository") } else { hour, minute, second := time.Now().Clock() complete, success, reason := isHelmRepositoryReady(*repo) @@ -380,7 +381,7 @@ func kubeWaitUntilHelmRepositoryIsReady(t *testing.T, name types.NamespacedName) // this should eventually be replaced with flux plugin's DeleteRepository() func kubeDeleteHelmRepository(t *testing.T, name types.NamespacedName) error { t.Logf("+kubeDeleteHelmRepository(%s)", name) - repo := &sourcev1.HelmRepository{ + repo := &sourcev1beta2.HelmRepository{ ObjectMeta: metav1.ObjectMeta{ Name: name.Name, Namespace: name.Namespace, @@ -399,7 +400,7 @@ func kubeExistsHelmRepository(t *testing.T, name types.NamespacedName) (bool, er t.Logf("+kubeExistsHelmRepository(%s)", name) ctx, cancel := context.WithTimeout(context.Background(), defaultContextTimeout) defer cancel() - var repo sourcev1.HelmRepository + var repo sourcev1beta2.HelmRepository if ifc, err := kubeGetCtrlClient(); err != nil { return false, err } else if err = ifc.Get(ctx, name, &repo); err == nil { @@ -413,7 +414,7 @@ func kubeDeleteHelmRelease(t *testing.T, name types.NamespacedName) error { t.Logf("+kubeDeleteHelmRelease(%s)", name) ctx, cancel := context.WithTimeout(context.Background(), defaultContextTimeout) defer cancel() - release := &helmv2.HelmRelease{ + release := &helmv2beta2.HelmRelease{ ObjectMeta: metav1.ObjectMeta{ Name: name.Name, Namespace: name.Namespace, @@ -430,7 +431,7 @@ func kubeExistsHelmRelease(t *testing.T, name types.NamespacedName) (bool, error t.Logf("+kubeExistsHelmRelease(%s)", name) ctx, cancel := context.WithTimeout(context.Background(), defaultContextTimeout) defer cancel() - var rel helmv2.HelmRelease + var rel helmv2beta2.HelmRelease if ifc, err := kubeGetCtrlClient(); err != nil { return false, err } else if err = ifc.Get(ctx, name, &rel); err == nil { @@ -825,7 +826,7 @@ func kubeCreateSecret(t *testing.T, secret *apiv1.Secret) error { return err } -func kubeSetKubeappsManagedSecretOwnerRef(t *testing.T, secretName types.NamespacedName, ownerRepo *sourcev1.HelmRepository) error { +func kubeSetKubeappsManagedSecretOwnerRef(t *testing.T, secretName types.NamespacedName, ownerRepo *sourcev1beta2.HelmRepository) error { t.Logf("+kubeSetKubeappsManagedSecretOwnerRef(%s, %s)", secretName, ownerRepo.Name) typedClient, err := kubeGetTypedClient() if err != nil { @@ -851,9 +852,9 @@ func kubeSetKubeappsManagedSecretOwnerRef(t *testing.T, secretName types.Namespa *metav1.NewControllerRef( ownerRepo, schema.GroupVersionKind{ - Group: sourcev1.GroupVersion.Group, - Version: sourcev1.GroupVersion.Version, - Kind: sourcev1.HelmRepositoryKind, + Group: sourcev1beta2.GroupVersion.Group, + Version: sourcev1beta2.GroupVersion.Version, + Kind: sourcev1beta2.HelmRepositoryKind, }), } @@ -1028,11 +1029,11 @@ func kubeGetCtrlClient() (ctrlclient.WithWatch, error) { return nil, err } else { scheme := runtime.NewScheme() - err = sourcev1.AddToScheme(scheme) + err = sourcev1beta2.AddToScheme(scheme) if err != nil { return nil, err } - err = helmv2.AddToScheme(scheme) + err = helmv2beta2.AddToScheme(scheme) if err != nil { return nil, err } diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/oci_repo.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/oci_repo.go index efc9cea208f..5655f5783ae 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/oci_repo.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/oci_repo.go @@ -47,7 +47,7 @@ import ( "github.com/fluxcd/pkg/oci/auth/login" "github.com/fluxcd/pkg/version" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" // OCI Registry As a Storage (ORAS) orasregistryauthv2 "oras.land/oras-go/v2/registry/remote/auth" @@ -388,7 +388,7 @@ func newRegistryClient(isLogin bool, tlsConfig *tls.Config, getterOpts []getter. // OCI Helm repository, which defines a source, does not produce an Artifact // ref https://fluxcd.io/docs/components/source/helmrepositories/#helm-oci-repository -func (s *repoEventSink) onAddOciRepo(repo sourcev1.HelmRepository) ([]byte, bool, error) { +func (s *repoEventSink) onAddOciRepo(repo sourcev1beta2.HelmRepository) ([]byte, bool, error) { log.V(4).Infof("+onAddOciRepo(%s)", common.PrettyPrint(repo)) defer log.V(4).Info("-onAddOciRepo") @@ -446,7 +446,7 @@ func (s *repoEventSink) onAddOciRepo(repo sourcev1.HelmRepository) ([]byte, bool return buf.Bytes(), true, nil } -func (s *repoEventSink) onModifyOciRepo(key string, oldValue interface{}, repo sourcev1.HelmRepository) ([]byte, bool, error) { +func (s *repoEventSink) onModifyOciRepo(key string, oldValue interface{}, repo sourcev1beta2.HelmRepository) ([]byte, bool, error) { log.Infof("+onModifyOciRepo(%s)", common.PrettyPrint(repo)) defer log.Info("-onModifyOciRepo") @@ -578,12 +578,12 @@ func (r *OCIChartRepository) shortRepoName(fullRepoName string) (string, error) } } -func (s *Server) newOCIChartRepositoryAndLogin(ctx context.Context, repo sourcev1.HelmRepository) (*OCIChartRepository, error) { +func (s *Server) newOCIChartRepositoryAndLogin(ctx context.Context, repo sourcev1beta2.HelmRepository) (*OCIChartRepository, error) { sink := s.newRepoEventSink() return sink.newOCIChartRepositoryAndLogin(ctx, repo) } -func (s *repoEventSink) newOCIChartRepositoryAndLogin(ctx context.Context, repo sourcev1.HelmRepository) (*OCIChartRepository, error) { +func (s *repoEventSink) newOCIChartRepositoryAndLogin(ctx context.Context, repo sourcev1beta2.HelmRepository) (*OCIChartRepository, error) { if loginOpts, getterOpts, cred, err := s.clientOptionsForOciRepo(ctx, repo); err != nil { return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("Failed to create registry client: %w", err)) } else { @@ -651,7 +651,7 @@ func (s *repoEventSink) newOCIChartRepositoryAndLoginWithOptions(registryURL str return ociRepo, nil } -func (s *repoEventSink) clientOptionsForOciRepo(ctx context.Context, repo sourcev1.HelmRepository) ([]registry.LoginOption, []getter.Option, *orasregistryauthv2.Credential, error) { +func (s *repoEventSink) clientOptionsForOciRepo(ctx context.Context, repo sourcev1beta2.HelmRepository) ([]registry.LoginOption, []getter.Option, *orasregistryauthv2.Credential, error) { var loginOpts []registry.LoginOption var cred *orasregistryauthv2.Credential getterOpts := []getter.Option{ @@ -682,7 +682,7 @@ func (s *repoEventSink) clientOptionsForOciRepo(ctx context.Context, repo source } } - if repo.Spec.Provider != "" && repo.Spec.Provider != sourcev1.GenericOCIProvider { + if repo.Spec.Provider != "" && repo.Spec.Provider != sourcev1beta2.GenericOCIProvider { ctxTimeout, cancel := context.WithTimeout(ctx, repo.Spec.Timeout.Duration) defer cancel() @@ -736,7 +736,7 @@ func downloadChartWithHelmGetter(tlsConfig *tls.Config, getterOptions []getter.O return buf, err } -func getOciChartModels(appNames []string, allTags map[string]TagList, ociChartRepo *OCIChartRepository, repo *sourcev1.HelmRepository) ([]models.Chart, error) { +func getOciChartModels(appNames []string, allTags map[string]TagList, ociChartRepo *OCIChartRepository, repo *sourcev1beta2.HelmRepository) ([]models.Chart, error) { charts := []models.Chart{} for _, fullAppName := range appNames { appName, err := ociChartRepo.shortRepoName(fullAppName) @@ -758,7 +758,7 @@ func getOciChartModels(appNames []string, allTags map[string]TagList, ociChartRe return charts, nil } -func getOciChartModel(appName string, tags TagList, ociChartRepo *OCIChartRepository, repo *sourcev1.HelmRepository) (*models.Chart, error) { +func getOciChartModel(appName string, tags TagList, ociChartRepo *OCIChartRepository, repo *sourcev1beta2.HelmRepository) (*models.Chart, error) { // Encode repository names to store them in the database. encodedAppName := url.PathEscape(appName) chartID := path.Join(repo.Name, encodedAppName) @@ -872,8 +872,8 @@ func downloadOCIChartFn(ociRepo *OCIChartRepository) func(chartID, chartUrl, cha } // oidcAuth generates the OIDC credential authenticator based on the specified cloud provider. -func oidcAuth(ctx context.Context, repo sourcev1.HelmRepository) (*orasregistryauthv2.Credential, error) { - url := strings.TrimPrefix(repo.Spec.URL, sourcev1.OCIRepositoryPrefix) +func oidcAuth(ctx context.Context, repo sourcev1beta2.HelmRepository) (*orasregistryauthv2.Credential, error) { + url := strings.TrimPrefix(repo.Spec.URL, sourcev1beta2.OCIRepositoryPrefix) ref, err := name.ParseReference(url) if err != nil { return nil, fmt.Errorf("failed to parse URL '%s': %w", repo.Spec.URL, err) @@ -890,11 +890,11 @@ func oidcAuth(ctx context.Context, repo sourcev1.HelmRepository) (*orasregistrya func loginWithManager(ctx context.Context, provider, url string, ref name.Reference) (*orasregistryauthv2.Credential, error) { opts := login.ProviderOptions{} switch provider { - case sourcev1.AmazonOCIProvider: + case sourcev1beta2.AmazonOCIProvider: opts.AwsAutoLogin = true - case sourcev1.AzureOCIProvider: + case sourcev1beta2.AzureOCIProvider: opts.AzureAutoLogin = true - case sourcev1.GoogleOCIProvider: + case sourcev1beta2.GoogleOCIProvider: opts.GcpAutoLogin = true } diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release.go index fe7ca772d27..bfc20a93d87 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release.go @@ -12,9 +12,9 @@ import ( "time" "github.com/bufbuild/connect-go" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2beta2 "github.com/fluxcd/helm-controller/api/v2beta2" fluxmeta "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" corev1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/common" "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/pkg/connecterror" @@ -40,7 +40,7 @@ var ( ) // namespace maybe "", in which case releases from all namespaces are returned -func (s *Server) listReleasesInCluster(ctx context.Context, headers http.Header, namespace string) ([]helmv2.HelmRelease, error) { +func (s *Server) listReleasesInCluster(ctx context.Context, headers http.Header, namespace string) ([]helmv2beta2.HelmRelease, error) { client, err := s.getClient(headers, namespace) if err != nil { return nil, err @@ -53,7 +53,7 @@ func (s *Server) listReleasesInCluster(ctx context.Context, headers http.Header, // 2) there is a "consistent snapshot" problem, where the client doesn't want to // see any results created/updated/deleted after the first request is issued // To fix this, we must make use of resourceVersion := relList.GetResourceVersion() - var relList helmv2.HelmReleaseList + var relList helmv2beta2.HelmReleaseList if err = client.List(ctx, &relList); err != nil { return nil, connecterror.FromK8sError("list", "HelmRelease", namespace+"/*", err) } else { @@ -61,13 +61,13 @@ func (s *Server) listReleasesInCluster(ctx context.Context, headers http.Header, } } -func (s *Server) getReleaseInCluster(ctx context.Context, headers http.Header, key types.NamespacedName) (*helmv2.HelmRelease, error) { +func (s *Server) getReleaseInCluster(ctx context.Context, headers http.Header, key types.NamespacedName) (*helmv2beta2.HelmRelease, error) { client, err := s.getClient(headers, key.Namespace) if err != nil { return nil, err } - var rel helmv2.HelmRelease + var rel helmv2beta2.HelmRelease if err = client.Get(ctx, key, &rel); err != nil { return nil, connecterror.FromK8sError("get", "HelmRelease", key.String(), err) } @@ -106,7 +106,7 @@ func (s *Server) paginatedInstalledPkgSummaries(ctx context.Context, headers htt return installedPkgSummaries, nil } -func (s *Server) installedPkgSummaryFromRelease(ctx context.Context, headers http.Header, rel helmv2.HelmRelease) (*corev1.InstalledPackageSummary, error) { +func (s *Server) installedPkgSummaryFromRelease(ctx context.Context, headers http.Header, rel helmv2beta2.HelmRelease) (*corev1.InstalledPackageSummary, error) { name, err := common.NamespacedName(&rel) if err != nil { return nil, err @@ -235,6 +235,7 @@ func (s *Server) installedPackageDetail(ctx context.Context, headers http.Header // ValuesReference maybe a config map or a secret // this will only be present if install/upgrade succeeded + // TODO(agamez): flux upgrade - migrate to Status.History, see https://github.com/fluxcd/flux2/releases/tag/v2.2.0 pkgVersion := rel.Status.LastAppliedRevision if pkgVersion == "" { // this is the back-up option: will be there if the reconciliation is in progress or has failed @@ -287,7 +288,7 @@ func (s *Server) installedPackageDetail(ctx context.Context, headers http.Header }, nil } -func (s *Server) getReleaseViaHelmApi(headers http.Header, key types.NamespacedName, rel *helmv2.HelmRelease) (*release.Release, error) { +func (s *Server) getReleaseViaHelmApi(headers http.Header, key types.NamespacedName, rel *helmv2beta2.HelmRelease) (*release.Release, error) { // post installation notes can only be retrieved via helm APIs, flux doesn't do it // see discussion in https://cloud-native.slack.com/archives/CLAJ40HV3/p1629244025187100 if s.actionConfigGetter == nil { @@ -457,7 +458,7 @@ func (s *Server) updateRelease(ctx context.Context, headers http.Header, package // process and the current status no longer applies. metadata and spec I want // to keep, as they may have had added labels and/or annotations and/or // even other changes made by the user. - rel.Status = helmv2.HelmReleaseStatus{} + rel.Status = helmv2beta2.HelmReleaseStatus{} client, err := s.getClient(headers, packageRef.Context.Namespace) if err != nil { @@ -488,7 +489,7 @@ func (s *Server) deleteRelease(ctx context.Context, headers http.Header, package log.V(4).Infof("Deleting release: [%s]", packageRef.Identifier) - rel := &helmv2.HelmRelease{ + rel := &helmv2beta2.HelmRelease{ ObjectMeta: metav1.ObjectMeta{ Name: packageRef.Identifier, Namespace: packageRef.Context.Namespace, @@ -506,19 +507,19 @@ func (s *Server) deleteRelease(ctx context.Context, headers http.Header, package // 2. metadata.namespace, where this HelmRelease CRD will exist, same as (3) below // per https://github.com/vmware-tanzu/kubeapps/pull/3640#issuecomment-949315105 // 3. spec.targetNamespace, where flux will install any artifacts from the release -func (s *Server) newFluxHelmRelease(chart *models.Chart, targetName types.NamespacedName, versionExpr string, reconcile *corev1.ReconciliationOptions, values map[string]interface{}) (*helmv2.HelmRelease, error) { - fluxRelease := &helmv2.HelmRelease{ +func (s *Server) newFluxHelmRelease(chart *models.Chart, targetName types.NamespacedName, versionExpr string, reconcile *corev1.ReconciliationOptions, values map[string]interface{}) (*helmv2beta2.HelmRelease, error) { + fluxRelease := &helmv2beta2.HelmRelease{ ObjectMeta: metav1.ObjectMeta{ Name: targetName.Name, Namespace: targetName.Namespace, }, - Spec: helmv2.HelmReleaseSpec{ - Chart: helmv2.HelmChartTemplate{ - Spec: helmv2.HelmChartTemplateSpec{ + Spec: helmv2beta2.HelmReleaseSpec{ + Chart: helmv2beta2.HelmChartTemplate{ + Spec: helmv2beta2.HelmChartTemplateSpec{ Chart: chart.Name, - SourceRef: helmv2.CrossNamespaceObjectReference{ + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ Name: chart.Repo.Name, - Kind: sourcev1.HelmRepositoryKind, + Kind: sourcev1beta2.HelmRepositoryKind, Namespace: chart.Repo.Namespace, }, }, @@ -580,7 +581,7 @@ func (s *Server) newFluxHelmRelease(chart *models.Chart, targetName types.Namesp // when install completes with success // - "reason" field: failure only when flux returns "InstallFailed" reason // otherwise pending or unspecified when there are no status conditions to go by -func isHelmReleaseReady(rel helmv2.HelmRelease) (ready bool, status corev1.InstalledPackageStatus_StatusReason, userReason string) { +func isHelmReleaseReady(rel helmv2beta2.HelmRelease) (ready bool, status corev1.InstalledPackageStatus_StatusReason, userReason string) { if !checkReleaseGeneration(rel) { // according to https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties // observedGeneration represents the .metadata.generation that the condition was set based upon. @@ -600,9 +601,9 @@ func isHelmReleaseReady(rel helmv2.HelmRelease) (ready bool, status corev1.Insta // "reason": "InstallFailed" // i.e. not super useful userReason = readyCond.Reason - if userReason == helmv2.InstallFailedReason || - userReason == helmv2.UpgradeFailedReason || - userReason == helmv2.GetLastReleaseFailedReason { + if userReason == helmv2beta2.InstallFailedReason || + userReason == helmv2beta2.UpgradeFailedReason || + userReason == helmv2beta2.GetLastReleaseFailedReason { isInstallFailed = true } } @@ -626,7 +627,7 @@ func isHelmReleaseReady(rel helmv2.HelmRelease) (ready bool, status corev1.Insta return false, corev1.InstalledPackageStatus_STATUS_REASON_PENDING, userReason } -func installedPackageStatus(rel helmv2.HelmRelease) *corev1.InstalledPackageStatus { +func installedPackageStatus(rel helmv2beta2.HelmRelease) *corev1.InstalledPackageStatus { ready, reason, userReason := isHelmReleaseReady(rel) return &corev1.InstalledPackageStatus{ Ready: ready, @@ -635,7 +636,7 @@ func installedPackageStatus(rel helmv2.HelmRelease) *corev1.InstalledPackageStat } } -func installedPackageReconciliationOptions(rel *helmv2.HelmRelease) *corev1.ReconciliationOptions { +func installedPackageReconciliationOptions(rel *helmv2beta2.HelmRelease) *corev1.ReconciliationOptions { reconciliationOptions := &corev1.ReconciliationOptions{} reconciliationOptions.Interval = pkgutils.FromDuration(&rel.Spec.Interval) reconciliationOptions.Suspend = rel.Spec.Suspend @@ -643,7 +644,7 @@ func installedPackageReconciliationOptions(rel *helmv2.HelmRelease) *corev1.Reco return reconciliationOptions } -func installedPackageAvailablePackageRef(rel *helmv2.HelmRelease) (*corev1.AvailablePackageReference, error) { +func installedPackageAvailablePackageRef(rel *helmv2beta2.HelmRelease) (*corev1.AvailablePackageReference, error) { repoName := rel.Spec.Chart.Spec.SourceRef.Name if repoName == "" { return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("Missing required field spec.chart.spec.sourceRef.name")) @@ -669,7 +670,7 @@ func installedPackageAvailablePackageRef(rel *helmv2.HelmRelease) (*corev1.Avail } // ref https://fluxcd.io/docs/components/helm/helmreleases/ -func helmReleaseName(key types.NamespacedName, rel *helmv2.HelmRelease) types.NamespacedName { +func helmReleaseName(key types.NamespacedName, rel *helmv2beta2.HelmRelease) types.NamespacedName { helmReleaseName := rel.Spec.ReleaseName // according to docs ReleaseName is optional and defaults to a composition of // '[TargetNamespace-]Name'. @@ -690,7 +691,7 @@ func helmReleaseName(key types.NamespacedName, rel *helmv2.HelmRelease) types.Na return types.NamespacedName{Name: helmReleaseName, Namespace: helmReleaseNamespace} } -func checkReleaseGeneration(rel helmv2.HelmRelease) bool { +func checkReleaseGeneration(rel helmv2beta2.HelmRelease) bool { generation := rel.GetGeneration() observedGeneration := rel.Status.ObservedGeneration return generation > 0 && generation == observedGeneration diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release_integration_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release_integration_test.go index 057a92642ad..bc9c4a0c0b4 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release_integration_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release_integration_test.go @@ -12,8 +12,8 @@ import ( "testing" "time" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + helmv2beta2 "github.com/fluxcd/helm-controller/api/v2beta2" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" corev1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" @@ -949,7 +949,7 @@ func TestKindClusterRBAC_ReadRelease(t *testing.T) { rules := map[string][]rbacv1.PolicyRule{ ns2: { { - APIGroups: []string{helmv2.GroupVersion.Group}, + APIGroups: []string{helmv2beta2.GroupVersion.Group}, Resources: []string{fluxHelmReleases}, Verbs: []string{"get", "list"}, }, @@ -1044,14 +1044,14 @@ func TestKindClusterRBAC_ReadRelease(t *testing.T) { nsToRules := map[string][]rbacv1.PolicyRule{ ns1: { { - APIGroups: []string{sourcev1.GroupVersion.Group}, + APIGroups: []string{sourcev1beta2.GroupVersion.Group}, Resources: []string{"helmcharts"}, Verbs: []string{"get", "list"}, }, }, ns2: { { - APIGroups: []string{helmv2.GroupVersion.Group}, + APIGroups: []string{helmv2beta2.GroupVersion.Group}, Resources: []string{fluxHelmReleases}, Verbs: []string{"get", "list"}, }, @@ -1188,7 +1188,7 @@ func TestKindClusterRBAC_CreateRelease(t *testing.T) { nsToRules := map[string][]rbacv1.PolicyRule{ ns2: { { - APIGroups: []string{helmv2.GroupVersion.Group}, + APIGroups: []string{helmv2beta2.GroupVersion.Group}, Resources: []string{fluxHelmReleases}, Verbs: []string{"create"}, }, @@ -1218,14 +1218,14 @@ func TestKindClusterRBAC_CreateRelease(t *testing.T) { nsToRules = map[string][]rbacv1.PolicyRule{ ns1: { { - APIGroups: []string{sourcev1.GroupVersion.Group}, + APIGroups: []string{sourcev1beta2.GroupVersion.Group}, Resources: []string{"helmcharts"}, Verbs: []string{"get"}, }, }, ns2: { { - APIGroups: []string{helmv2.GroupVersion.Group}, + APIGroups: []string{helmv2beta2.GroupVersion.Group}, Resources: []string{fluxHelmReleases}, Verbs: []string{"create"}, }, @@ -1335,7 +1335,7 @@ func TestKindClusterRBAC_UpdateRelease(t *testing.T) { nsToRules := map[string][]rbacv1.PolicyRule{ ns2: { { - APIGroups: []string{helmv2.GroupVersion.Group}, + APIGroups: []string{helmv2beta2.GroupVersion.Group}, Resources: []string{fluxHelmReleases}, Verbs: []string{"get"}, }, @@ -1368,7 +1368,7 @@ func TestKindClusterRBAC_UpdateRelease(t *testing.T) { nsToRules = map[string][]rbacv1.PolicyRule{ ns2: { { - APIGroups: []string{helmv2.GroupVersion.Group}, + APIGroups: []string{helmv2beta2.GroupVersion.Group}, Resources: []string{fluxHelmReleases}, Verbs: []string{"get", "update"}, }, @@ -1476,7 +1476,7 @@ func TestKindClusterRBAC_DeleteRelease(t *testing.T) { nsToRules := map[string][]rbacv1.PolicyRule{ ns2: { { - APIGroups: []string{helmv2.GroupVersion.Group}, + APIGroups: []string{helmv2beta2.GroupVersion.Group}, Resources: []string{fluxHelmReleases}, Verbs: []string{"delete"}, }, diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release_test.go index 8f153485b55..214853e62d5 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/release_test.go @@ -12,9 +12,10 @@ import ( "time" "github.com/bufbuild/connect-go" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2beta2 "github.com/fluxcd/helm-controller/api/v2beta2" fluxmeta "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" corev1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" @@ -42,7 +43,7 @@ type testSpecGetInstalledPackages struct { releaseValues *v1.JSON releaseSuspend bool releaseServiceAccountName string - releaseStatus helmv2.HelmReleaseStatus + releaseStatus helmv2beta2.HelmReleaseStatus // only used to test edge cases now, most tests should not set this targetNamespace string } @@ -510,7 +511,7 @@ func TestCreateInstalledPackage(t *testing.T) { existingObjs testSpecCreateInstalledPackage expectedStatusCode codes.Code expectedResponse *corev1.CreateInstalledPackageResponse - expectedRelease *helmv2.HelmRelease + expectedRelease *helmv2beta2.HelmRelease defaultUpgradePolicyStr string }{ { @@ -636,7 +637,7 @@ func TestCreateInstalledPackage(t *testing.T) { } defer ts.Close() - s, mock, err := newSimpleServerWithRepos(t, []sourcev1.HelmRepository{*repo}) + s, mock, err := newSimpleServerWithRepos(t, []sourcev1beta2.HelmRepository{*repo}) if err != nil { t.Fatal(err) } @@ -685,12 +686,12 @@ func TestCreateInstalledPackage(t *testing.T) { t.Fatal(err) } else { key := types.NamespacedName{Namespace: tc.request.TargetContext.Namespace, Name: tc.request.Name} - var actualRel helmv2.HelmRelease + var actualRel helmv2beta2.HelmRelease if err = ctrlClient.Get(context.Background(), key, &actualRel); err != nil { t.Fatal(err) } else { // Values are JSON string and need to be compared as such - opts = cmpopts.IgnoreFields(helmv2.HelmReleaseSpec{}, "Values") + opts = cmpopts.IgnoreFields(helmv2beta2.HelmReleaseSpec{}, "Values") if got, want := &actualRel, tc.expectedRelease; !cmp.Equal(want, got, opts) { t.Errorf("mismatch (-want +got):\n%s", cmp.Diff(want, got, opts)) @@ -709,7 +710,7 @@ func TestUpdateInstalledPackage(t *testing.T) { existingK8sObjs *testSpecGetInstalledPackages expectedErrorCode connect.Code expectedResponse *corev1.UpdateInstalledPackageResponse - expectedRelease *helmv2.HelmRelease + expectedRelease *helmv2beta2.HelmRelease defaultUpgradePolicyStr string }{ { @@ -889,7 +890,7 @@ func TestUpdateInstalledPackage(t *testing.T) { Name: tc.expectedResponse.InstalledPackageRef.Identifier, } ctx := context.Background() - var actualRel helmv2.HelmRelease + var actualRel helmv2beta2.HelmRelease if ctrlClient, err := s.clientGetter.ControllerRuntime(http.Header{}, s.kubeappsCluster); err != nil { t.Fatal(err) } else if err = ctrlClient.Get(ctx, key, &actualRel); err != nil { @@ -897,7 +898,7 @@ func TestUpdateInstalledPackage(t *testing.T) { } // Values are JSON string and need to be compared as such - opts = cmpopts.IgnoreFields(helmv2.HelmReleaseSpec{}, "Values") + opts = cmpopts.IgnoreFields(helmv2beta2.HelmReleaseSpec{}, "Values") if got, want := &actualRel, tc.expectedRelease; !cmp.Equal(want, got, opts) { t.Errorf("mismatch (-want +got):\n%s", cmp.Diff(want, got, opts)) @@ -976,7 +977,7 @@ func TestDeleteInstalledPackage(t *testing.T) { Name: tc.request.InstalledPackageRef.Identifier, } ctx := context.Background() - var actualRel helmv2.HelmRelease + var actualRel helmv2beta2.HelmRelease if ctrlClient, err := s.clientGetter.ControllerRuntime(http.Header{}, s.kubeappsCluster); err != nil { t.Fatal(err) } else if err = ctrlClient.Get(ctx, key, &actualRel); !errors.IsNotFound(err) { @@ -1120,15 +1121,15 @@ func TestGetInstalledPackageResourceRefs(t *testing.T) { } } -func newChartsAndReleases(t *testing.T, existingK8sObjs []testSpecGetInstalledPackages) (charts []sourcev1.HelmChart, releases []helmv2.HelmRelease, cleanup func()) { +func newChartsAndReleases(t *testing.T, existingK8sObjs []testSpecGetInstalledPackages) (charts []sourcev1beta2.HelmChart, releases []helmv2beta2.HelmRelease, cleanup func()) { httpServers := []*httptest.Server{} cleanup = func() { for _, ts := range httpServers { ts.Close() } } - charts = []sourcev1.HelmChart{} - releases = []helmv2.HelmRelease{} + charts = []sourcev1beta2.HelmChart{} + releases = []helmv2beta2.HelmRelease{} for _, existing := range existingK8sObjs { tarGzBytes, err := os.ReadFile(existing.chartTarGz) @@ -1146,24 +1147,24 @@ func newChartsAndReleases(t *testing.T, existingK8sObjs []testSpecGetInstalledPa })) httpServers = append(httpServers, ts) - chartSpec := &sourcev1.HelmChartSpec{ + chartSpec := &sourcev1beta2.HelmChartSpec{ Chart: existing.chartName, - SourceRef: sourcev1.LocalHelmChartSourceReference{ + SourceRef: sourcev1beta2.LocalHelmChartSourceReference{ Name: existing.repoName, - Kind: sourcev1.HelmRepositoryKind, + Kind: sourcev1beta2.HelmRepositoryKind, }, Version: existing.chartSpecVersion, Interval: metav1.Duration{Duration: 1 * time.Minute}, } - chartStatus := &sourcev1.HelmChartStatus{ + chartStatus := &sourcev1beta2.HelmChartStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, Message: "Fetched revision: " + existing.chartSpecVersion, Type: fluxmeta.ReadyCondition, Status: metav1.ConditionTrue, - Reason: sourcev1.ChartPullSucceededReason, + Reason: sourcev1beta2.ChartPullSucceededReason, }, }, Artifact: &sourcev1.Artifact{ @@ -1174,14 +1175,14 @@ func newChartsAndReleases(t *testing.T, existingK8sObjs []testSpecGetInstalledPa chart := newChart(existing.chartName, existing.repoNamespace, chartSpec, chartStatus) charts = append(charts, chart) - releaseSpec := &helmv2.HelmReleaseSpec{ - Chart: helmv2.HelmChartTemplate{ - Spec: helmv2.HelmChartTemplateSpec{ + releaseSpec := &helmv2beta2.HelmReleaseSpec{ + Chart: helmv2beta2.HelmChartTemplate{ + Spec: helmv2beta2.HelmChartTemplateSpec{ Chart: existing.chartName, Version: existing.chartSpecVersion, - SourceRef: helmv2.CrossNamespaceObjectReference{ + SourceRef: helmv2beta2.CrossNamespaceObjectReference{ Name: existing.repoName, - Kind: sourcev1.HelmRepositoryKind, + Kind: sourcev1beta2.HelmRepositoryKind, Namespace: existing.repoNamespace, }, }, @@ -1208,8 +1209,8 @@ func newChartsAndReleases(t *testing.T, existingK8sObjs []testSpecGetInstalledPa return charts, releases, cleanup } -func newRelease(meta metav1.ObjectMeta, spec *helmv2.HelmReleaseSpec, status *helmv2.HelmReleaseStatus) helmv2.HelmRelease { - helmRelease := helmv2.HelmRelease{ +func newRelease(meta metav1.ObjectMeta, spec *helmv2beta2.HelmReleaseSpec, status *helmv2beta2.HelmReleaseStatus) helmv2beta2.HelmRelease { + helmRelease := helmv2beta2.HelmRelease{ ObjectMeta: meta, } diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo.go index 8886f4d479e..58df1f59bf4 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo.go @@ -18,7 +18,7 @@ import ( "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/pkg/k8sutils" fluxmeta "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" corev1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/plugins/fluxv2/packages/v1alpha1" "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/cache" @@ -52,7 +52,7 @@ var ( // returns a list of HelmRepositories from specified namespace. // ns can be "", in which case all namespaces (cluster-wide), excluding // the ones that the caller has no read access to -func (s *Server) listReposInNamespace(ctx context.Context, headers http.Header, ns string) ([]sourcev1.HelmRepository, error) { +func (s *Server) listReposInNamespace(ctx context.Context, headers http.Header, ns string) ([]sourcev1beta2.HelmRepository, error) { // the actual List(...) call will be executed in the context of // kubeapps-internal-kubeappsapis service account // ref https://github.com/vmware-tanzu/kubeapps/issues/4390 for explanation @@ -62,7 +62,7 @@ func (s *Server) listReposInNamespace(ctx context.Context, headers http.Header, return nil, err } - var repoList sourcev1.HelmRepositoryList + var repoList sourcev1beta2.HelmRepositoryList listOptions := ctrlclient.ListOptions{ Namespace: ns, } @@ -83,7 +83,7 @@ func (s *Server) listReposInNamespace(ctx context.Context, headers http.Header, return nil, err } } - items := []sourcev1.HelmRepository{} + items := []sourcev1beta2.HelmRepository{} for _, item := range repoList.Items { if allowedNamespaces.Has(item.GetNamespace()) { items = append(items, item) @@ -93,7 +93,7 @@ func (s *Server) listReposInNamespace(ctx context.Context, headers http.Header, } } -func (s *Server) getRepoInCluster(ctx context.Context, headers http.Header, key types.NamespacedName) (*sourcev1.HelmRepository, error) { +func (s *Server) getRepoInCluster(ctx context.Context, headers http.Header, key types.NamespacedName) (*sourcev1beta2.HelmRepository, error) { // unlike List(), there is no need to execute Get() in the context of // kubeapps-internal-kubeappsapis service account and then filter out results based on // whether or not the caller hasAccessToNamespace(). We can just pass the caller @@ -103,7 +103,7 @@ func (s *Server) getRepoInCluster(ctx context.Context, headers http.Header, key if err != nil { return nil, err } - var repo sourcev1.HelmRepository + var repo sourcev1beta2.HelmRepository if err = client.Get(ctx, key, &repo); err != nil { return nil, connecterror.FromK8sError("get", "HelmRepository", key.String(), err) } @@ -111,7 +111,7 @@ func (s *Server) getRepoInCluster(ctx context.Context, headers http.Header, key } // regexp expressions are used for matching actual names against expected patters -func (s *Server) filterReadyReposByName(repoList []sourcev1.HelmRepository, match []string) (sets.Set[string], error) { +func (s *Server) filterReadyReposByName(repoList []sourcev1beta2.HelmRepository, match []string) (sets.Set[string], error) { if s.repoCache == nil { return nil, connect.NewError(connect.CodeFailedPrecondition, fmt.Errorf("Server cache has not been properly initialized")) } @@ -232,7 +232,7 @@ func (s *Server) newRepo(ctx context.Context, request *connect.Request[corev1.Ad } typ := request.Msg.GetType() - if typ != "helm" && typ != sourcev1.HelmRepositoryTypeOCI { + if typ != "helm" && typ != sourcev1beta2.HelmRepositoryTypeOCI { return nil, connect.NewError(connect.CodeUnimplemented, fmt.Errorf("Repository type [%s] not supported", typ)) } @@ -323,7 +323,7 @@ func (s *Server) repoDetail(ctx context.Context, headers http.Header, repoRef *c // will have a FluxPackageRepositoryCustomDetail in it. Flux spec already clearly states // If you do not specify .spec.provider, it defaults to generic. // https://fluxcd.io/flux/components/source/helmrepositories/#provider - if repo.Spec.Provider != "" && repo.Spec.Provider != sourcev1.GenericOCIProvider { + if repo.Spec.Provider != "" && repo.Spec.Provider != sourcev1beta2.GenericOCIProvider { if customDetail, err = anypb.New(&v1alpha1.FluxPackageRepositoryCustomDetail{ Provider: repo.Spec.Provider, }); err != nil { @@ -357,7 +357,7 @@ func (s *Server) repoDetail(ctx context.Context, headers http.Header, repoRef *c func (s *Server) repoSummaries(ctx context.Context, headers http.Header, ns string) ([]*corev1.PackageRepositorySummary, error) { summaries := []*corev1.PackageRepositorySummary{} - var repos []sourcev1.HelmRepository + var repos []sourcev1beta2.HelmRepository var err error if ns == apiv1.NamespaceAll { if repos, err = s.listReposInNamespace(ctx, headers, ns); err != nil { @@ -368,7 +368,7 @@ func (s *Server) repoSummaries(ctx context.Context, headers http.Header, ns stri // namely, if a specific namespace is passed in, we need to list repos in that namespace // and if the caller happens not to have 'read' access to that namespace, a PermissionDenied // error should be raised, as opposed to returning an empty list with no error - var repoList sourcev1.HelmRepositoryList + var repoList sourcev1beta2.HelmRepositoryList var client ctrlclient.Client if client, err = s.getClient(headers, ns); err != nil { return nil, err @@ -401,7 +401,8 @@ func (s *Server) repoSummaries(ctx context.Context, headers http.Header, ns stri Type: typ, Url: repo.Spec.URL, Status: repoStatus(repo), - RequiresAuth: repo.Spec.SecretRef != nil, + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 + RequiresAuth: repo.Spec.SecretRef != nil, } summaries = append(summaries, summary) } @@ -454,6 +455,7 @@ func (s *Server) updateRepo(ctx context.Context, repoRef *corev1.PackageReposito } if isSecretUpdated { + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 if secret != nil { repo.Spec.SecretRef = &fluxmeta.LocalObjectReference{Name: secret.Name} } else { @@ -489,7 +491,7 @@ func (s *Server) updateRepo(ctx context.Context, repoRef *corev1.PackageReposito // process and the current status no longer applies. metadata and spec I want // to keep, as they may have had added labels and/or annotations and/or // even other changes made by the user. - repo.Status = sourcev1.HelmRepositoryStatus{} + repo.Status = sourcev1beta2.HelmRepositoryStatus{} if client, err := s.getClient(request.Header(), key.Namespace); err != nil { return nil, err @@ -527,7 +529,7 @@ func (s *Server) deleteRepo(ctx context.Context, headers http.Header, repoRef *c // For kubeapps-managed secrets environment secrets will be deleted (garbage-collected) // when the owner repo is deleted - repo := &sourcev1.HelmRepository{ + repo := &sourcev1beta2.HelmRepository{ ObjectMeta: metav1.ObjectMeta{ Name: repoRef.Identifier, Namespace: repoRef.Context.Namespace, @@ -560,10 +562,10 @@ func (s *repoEventSink) onAddRepo(key string, obj ctrlclient.Object) (interface{ log.V(4).Infof("+onAddRepo(%s)", key) defer log.V(4).Info("-onAddRepo()") - if repo, ok := obj.(*sourcev1.HelmRepository); !ok { - return nil, false, fmt.Errorf("expected an instance of *sourcev1.HelmRepository, got: %T", obj) + if repo, ok := obj.(*sourcev1beta2.HelmRepository); !ok { + return nil, false, fmt.Errorf("expected an instance of *sourcev1beta2.HelmRepository, got: %T", obj) } else if isRepoReady(*repo) { - if repo.Spec.Type == sourcev1.HelmRepositoryTypeOCI { + if repo.Spec.Type == sourcev1beta2.HelmRepositoryTypeOCI { return s.onAddOciRepo(*repo) } else { return s.onAddHttpRepo(*repo) @@ -577,9 +579,9 @@ func (s *repoEventSink) onAddRepo(key string, obj ctrlclient.Object) (interface{ } // ref https://fluxcd.io/docs/components/source/helmrepositories/#status -func (s *repoEventSink) onAddHttpRepo(repo sourcev1.HelmRepository) ([]byte, bool, error) { +func (s *repoEventSink) onAddHttpRepo(repo sourcev1beta2.HelmRepository) ([]byte, bool, error) { if artifact := repo.GetArtifact(); artifact != nil { - if checksum := artifact.Checksum; checksum == "" { + if checksum := artifact.Digest; checksum == "" { return nil, false, connect.NewError(connect.CodeInternal, fmt.Errorf("expected field status.artifact.checksum not found on HelmRepository\n[%s]", common.PrettyPrint(repo))) @@ -593,7 +595,7 @@ func (s *repoEventSink) onAddHttpRepo(repo sourcev1.HelmRepository) ([]byte, boo } } -func (s *repoEventSink) indexAndEncode(checksum string, repo sourcev1.HelmRepository) ([]byte, bool, error) { +func (s *repoEventSink) indexAndEncode(checksum string, repo sourcev1beta2.HelmRepository) ([]byte, bool, error) { charts, err := s.indexOneRepo(repo) if err != nil { return nil, false, err @@ -635,7 +637,7 @@ func (s *repoEventSink) indexAndEncode(checksum string, repo sourcev1.HelmReposi // it is assumed the caller has already checked that this repo is ready // At present, there is only one caller of indexOneRepo() and this check is already done by it -func (s *repoEventSink) indexOneRepo(repo sourcev1.HelmRepository) ([]models.Chart, error) { +func (s *repoEventSink) indexOneRepo(repo sourcev1beta2.HelmRepository) ([]models.Chart, error) { startTime := time.Now() // ref https://fluxcd.io/docs/components/source/helmrepositories/#status @@ -696,12 +698,12 @@ func (s *repoEventSink) indexOneRepo(repo sourcev1.HelmRepository) ([]models.Cha // onModifyRepo essentially tells the cache whether or not to and what to store for a given key func (s *repoEventSink) onModifyRepo(key string, obj ctrlclient.Object, oldValue interface{}) (interface{}, bool, error) { - if repo, ok := obj.(*sourcev1.HelmRepository); !ok { - return nil, false, fmt.Errorf("expected an instance of *sourcev1.HelmRepository, got: %T", obj) + if repo, ok := obj.(*sourcev1beta2.HelmRepository); !ok { + return nil, false, fmt.Errorf("expected an instance of *sourcev1beta2.HelmRepository, got: %T", obj) } else if isRepoReady(*repo) { // first check the repo is ready - if repo.Spec.Type == sourcev1.HelmRepositoryTypeOCI { + if repo.Spec.Type == sourcev1beta2.HelmRepositoryTypeOCI { return s.onModifyOciRepo(key, oldValue, *repo) } else { return s.onModifyHttpRepo(key, oldValue, *repo) @@ -714,16 +716,16 @@ func (s *repoEventSink) onModifyRepo(key string, obj ctrlclient.Object, oldValue } } -func (s *repoEventSink) onModifyHttpRepo(key string, oldValue interface{}, repo sourcev1.HelmRepository) ([]byte, bool, error) { +func (s *repoEventSink) onModifyHttpRepo(key string, oldValue interface{}, repo sourcev1beta2.HelmRepository) ([]byte, bool, error) { // We should to compare checksums on what's stored in the cache // vs the modified object to see if the contents has really changed before embarking on // expensive operation indexOneRepo() below. // ref https://fluxcd.io/docs/components/source/helmrepositories/#status var newChecksum string if artifact := repo.GetArtifact(); artifact != nil { - if newChecksum = artifact.Checksum; newChecksum == "" { + if newChecksum = artifact.Digest; newChecksum == "" { return nil, false, connect.NewError(connect.CodeInternal, - fmt.Errorf("expected field status.artifact.checksum not found on HelmRepository\n[%s]", + fmt.Errorf("expected field status.artifact.digest not found on HelmRepository\n[%s]", common.PrettyPrint(repo))) } } else { @@ -794,10 +796,11 @@ func (s *repoEventSink) fromKey(key string) (*types.NamespacedName, error) { return &types.NamespacedName{Namespace: parts[1], Name: parts[2]}, nil } -func (s *repoEventSink) getRepoSecret(ctx context.Context, repo sourcev1.HelmRepository) (*apiv1.Secret, error) { +func (s *repoEventSink) getRepoSecret(ctx context.Context, repo sourcev1beta2.HelmRepository) (*apiv1.Secret, error) { if repo.Spec.SecretRef == nil { return nil, nil } + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 secretName := repo.Spec.SecretRef.Name if secretName == "" { return nil, nil @@ -822,7 +825,7 @@ func (s *repoEventSink) getRepoSecret(ctx context.Context, repo sourcev1.HelmRep // The reason I do this here is to set up auth that may be needed to fetch chart tarballs by // ChartCache -func (s *repoEventSink) clientOptionsForHttpRepo(ctx context.Context, repo sourcev1.HelmRepository) (*common.HttpClientOptions, error) { +func (s *repoEventSink) clientOptionsForHttpRepo(ctx context.Context, repo sourcev1beta2.HelmRepository) (*common.HttpClientOptions, error) { if secret, err := s.getRepoSecret(ctx, repo); err == nil && secret != nil { return common.HttpClientOptionsFromSecret(*secret) } else { @@ -834,7 +837,7 @@ func (s *repoEventSink) clientOptionsForHttpRepo(ctx context.Context, repo sourc // repo-related utilities // -func isRepoReady(repo sourcev1.HelmRepository) bool { +func isRepoReady(repo sourcev1beta2.HelmRepository) bool { // see docs at https://fluxcd.io/docs/components/source/helmrepositories/ // Confirm the state we are observing is for the current generation if !checkRepoGeneration(repo) { @@ -851,7 +854,7 @@ func isRepoReady(repo sourcev1.HelmRepository) bool { // - reason: if present // docs: // 1. https://fluxcd.io/docs/components/source/helmrepositories/#status-examples -func isHelmRepositoryReady(repo sourcev1.HelmRepository) (complete bool, success bool, reason string) { +func isHelmRepositoryReady(repo sourcev1beta2.HelmRepository) (complete bool, success bool, reason string) { // flux source-controller v1beta2 API made a change so that we can no longer // rely on a simple "metadata.generation" vs "status.observedGeneration" check for a // quick answer. The resource may now exist with "observedGeneration": -1 either in @@ -879,7 +882,7 @@ func isHelmRepositoryReady(repo sourcev1.HelmRepository) (complete bool, success return false, false, reason } -func repoStatus(repo sourcev1.HelmRepository) *corev1.PackageRepositoryStatus { +func repoStatus(repo sourcev1beta2.HelmRepository) *corev1.PackageRepositoryStatus { complete, success, reason := isHelmRepositoryReady(repo) s := &corev1.PackageRepositoryStatus{ Ready: complete && success, @@ -896,7 +899,7 @@ func repoStatus(repo sourcev1.HelmRepository) *corev1.PackageRepositoryStatus { return s } -func checkRepoGeneration(repo sourcev1.HelmRepository) bool { +func checkRepoGeneration(repo sourcev1beta2.HelmRepository) bool { generation := repo.GetGeneration() observedGeneration := repo.Status.ObservedGeneration return generation > 0 && generation == observedGeneration @@ -911,7 +914,7 @@ func newFluxHelmRepo( interval string, secret *apiv1.Secret, passCredentials bool, - provider string) (*sourcev1.HelmRepository, error) { + provider string) (*sourcev1beta2.HelmRepository, error) { pollInterval := defaultPollInterval if interval != "" { if duration, err := pkgutils.ToDuration(interval); err != nil { @@ -920,23 +923,24 @@ func newFluxHelmRepo( pollInterval = *duration } } - fluxRepo := &sourcev1.HelmRepository{ + fluxRepo := &sourcev1beta2.HelmRepository{ ObjectMeta: metav1.ObjectMeta{ Name: targetName.Name, Namespace: targetName.Namespace, }, - Spec: sourcev1.HelmRepositorySpec{ + Spec: sourcev1beta2.HelmRepositorySpec{ URL: url, Interval: pollInterval, }, } - if typ == sourcev1.HelmRepositoryTypeOCI { - fluxRepo.Spec.Type = sourcev1.HelmRepositoryTypeOCI + if typ == sourcev1beta2.HelmRepositoryTypeOCI { + fluxRepo.Spec.Type = sourcev1beta2.HelmRepositoryTypeOCI } if desc != "" { k8sutils.SetDescription(&fluxRepo.ObjectMeta, desc) } if secret != nil { + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 fluxRepo.Spec.SecretRef = &fluxmeta.LocalObjectReference{ Name: secret.Name, } diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go index c3d74542ae9..86883ada240 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_auth.go @@ -10,7 +10,7 @@ import ( "net/http" "github.com/bufbuild/connect-go" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" corev1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/pkg/connecterror" "github.com/vmware-tanzu/kubeapps/pkg/kube" @@ -79,7 +79,7 @@ func (s *Server) handleRepoSecretForCreate( func (s *Server) handleRepoSecretForUpdate( ctx context.Context, headers http.Header, - repo *sourcev1.HelmRepository, + repo *sourcev1beta2.HelmRepository, newTlsConfig *corev1.PackageRepositoryTlsConfig, newAuth *corev1.PackageRepositoryAuth) (updatedSecret *apiv1.Secret, isKubeappsManagedSecret bool, isSecretUpdated bool, err error) { @@ -100,6 +100,7 @@ func (s *Server) handleRepoSecretForUpdate( secretInterface := typedClient.CoreV1().Secrets(repo.Namespace) var existingSecret *apiv1.Secret + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 if repo.Spec.SecretRef != nil { if existingSecret, err = secretInterface.Get(ctx, repo.Spec.SecretRef.Name, metav1.GetOptions{}); err != nil { return nil, false, false, connecterror.FromK8sError("get", "secret", repo.Spec.SecretRef.Name, err) @@ -207,7 +208,7 @@ func (s *Server) validateUserManagedRepoSecret( return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("Specified secret [%s] missing fields 'username' and/or 'password'", secretRef)) } case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_TLS: - if repoType == sourcev1.HelmRepositoryTypeOCI { + if repoType == sourcev1beta2.HelmRepositoryTypeOCI { // ref https://fluxcd.io/flux/components/source/helmrepositories/#tls-authentication // Note: TLS authentication is not yet supported by OCI Helm repositories. return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("Package repository authentication type %q is not supported for OCI repositories", auth.Type)) @@ -217,7 +218,7 @@ func (s *Server) validateUserManagedRepoSecret( } } case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON: - if repoType == sourcev1.HelmRepositoryTypeOCI { + if repoType == sourcev1beta2.HelmRepositoryTypeOCI { if secret.Data[apiv1.DockerConfigJsonKey] == nil { return nil, connect.NewError(connect.CodeInternal, fmt.Errorf("Specified secret [%s] missing field '%s'", secretRef, apiv1.DockerConfigJsonKey)) } @@ -250,8 +251,9 @@ func (s *Server) setOwnerReferencesForRepoSecret( ctx context.Context, headers http.Header, secret *apiv1.Secret, - repo *sourcev1.HelmRepository) error { + repo *sourcev1beta2.HelmRepository) error { + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 if repo.Spec.SecretRef != nil && secret != nil { if typedClient, err := s.clientGetter.Typed(headers, s.kubeappsCluster); err != nil { return err @@ -261,9 +263,9 @@ func (s *Server) setOwnerReferencesForRepoSecret( *metav1.NewControllerRef( repo, schema.GroupVersionKind{ - Group: sourcev1.GroupVersion.Group, - Version: sourcev1.GroupVersion.Version, - Kind: sourcev1.HelmRepositoryKind, + Group: sourcev1beta2.GroupVersion.Group, + Version: sourcev1beta2.GroupVersion.Version, + Kind: sourcev1beta2.HelmRepositoryKind, }), } if _, err := secretsInterface.Update(ctx, secret, metav1.UpdateOptions{}); err != nil { @@ -274,10 +276,11 @@ func (s *Server) setOwnerReferencesForRepoSecret( return nil } -func (s *Server) getRepoTlsConfigAndAuth(ctx context.Context, headers http.Header, repo sourcev1.HelmRepository) (*corev1.PackageRepositoryTlsConfig, *corev1.PackageRepositoryAuth, error) { +func (s *Server) getRepoTlsConfigAndAuth(ctx context.Context, headers http.Header, repo sourcev1beta2.HelmRepository) (*corev1.PackageRepositoryTlsConfig, *corev1.PackageRepositoryAuth, error) { var tlsConfig *corev1.PackageRepositoryTlsConfig var auth *corev1.PackageRepositoryAuth + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 if repo.Spec.SecretRef != nil { secretName := repo.Spec.SecretRef.Name if s == nil || s.clientGetter == nil { @@ -382,7 +385,7 @@ func newSecretFromTlsConfigAndAuth(repoName types.NamespacedName, } } case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_TLS: - if repoType == sourcev1.HelmRepositoryTypeOCI { + if repoType == sourcev1beta2.HelmRepositoryTypeOCI { // ref https://fluxcd.io/flux/components/source/helmrepositories/#tls-authentication // Note: TLS authentication is not yet supported by OCI Helm repositories. return nil, false, connect.NewError(connect.CodeInternal, fmt.Errorf("Package repository authentication type %q is not supported for OCI repositories", auth.Type)) @@ -410,7 +413,7 @@ func newSecretFromTlsConfigAndAuth(repoName types.NamespacedName, } } case corev1.PackageRepositoryAuth_PACKAGE_REPOSITORY_AUTH_TYPE_DOCKER_CONFIG_JSON: - if repoType != sourcev1.HelmRepositoryTypeOCI { + if repoType != sourcev1beta2.HelmRepositoryTypeOCI { return nil, false, connect.NewError(connect.CodeInternal, fmt.Errorf("Unsupported package repository authentication type: %q", auth.Type)) } @@ -566,7 +569,7 @@ func getRepoTlsConfigAndAuthWithKubeappsManagedSecrets(secret *apiv1.Secret) (*c return tlsConfig, auth, nil } -func isSecretKubeappsManaged(secret *apiv1.Secret, repo *sourcev1.HelmRepository) bool { +func isSecretKubeappsManaged(secret *apiv1.Secret, repo *sourcev1beta2.HelmRepository) bool { if !metav1.IsControlledBy(secret, repo) { return false } diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_integration_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_integration_test.go index 4fcd5f146d2..7f9a0e982e5 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_integration_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_integration_test.go @@ -1313,6 +1313,7 @@ func TestKindClusterUpdatePackageRepoSecretUnchanged(t *testing.T) { t.Fatal(err) } repoVersionBeforeUpdate := repoBeforeUpdate.ResourceVersion + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 secretNameBeforeUpdate := repoBeforeUpdate.Spec.SecretRef.Name secretBeforeUpdate, err := kubeGetSecret(t, types.NamespacedName{ Namespace: repoNamespace, @@ -1362,6 +1363,7 @@ func TestKindClusterUpdatePackageRepoSecretUnchanged(t *testing.T) { if repoVersionBeforeUpdate == repoVersionAfterUpdate { t.Fatalf("Expected repo version be different update") } + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 secretNameAfterUpdate := repoAfterUpdate.Spec.SecretRef.Name if secretNameAfterUpdate != secretNameBeforeUpdate { t.Fatalf("Expected secret to be the same after update") diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go index 28072152348..1ea51db8793 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/repo_test.go @@ -18,7 +18,8 @@ import ( "github.com/bufbuild/connect-go" fluxmeta "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1 "github.com/fluxcd/source-controller/api/v1" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" redismock "github.com/go-redis/redismock/v8" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" @@ -413,7 +414,7 @@ func TestGetAvailablePackageSummariesWithoutPagination(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - repos := []sourcev1.HelmRepository{} + repos := []sourcev1beta2.HelmRepository{} for _, rs := range tc.repos { ts2, repo, err := newHttpRepoAndServeIndex(rs.index, rs.name, rs.namespace, nil, "") @@ -478,7 +479,7 @@ func TestGetAvailablePackageSummariesWithPagination(t *testing.T) { index: testYaml("index-with-categories.yaml"), }, } - repos := []sourcev1.HelmRepository{} + repos := []sourcev1beta2.HelmRepository{} for _, rs := range existingRepos { ts2, repo, err := newHttpRepoAndServeIndex(rs.index, rs.name, rs.namespace, nil, "") if err != nil { @@ -615,14 +616,14 @@ func TestGetAvailablePackageSummaryAfterRepoIndexUpdate(t *testing.T) { })) defer ts.Close() - repoSpec := &sourcev1.HelmRepositorySpec{ + repoSpec := &sourcev1beta2.HelmRepositorySpec{ URL: "https://example.repo.com/charts", Interval: metav1.Duration{Duration: 1 * time.Minute}, } - repoStatus := &sourcev1.HelmRepositoryStatus{ + repoStatus := &sourcev1beta2.HelmRepositoryStatus{ Artifact: &sourcev1.Artifact{ - Checksum: "651f952130ea96823711d08345b85e82be011dc6", + Digest: "651f952130ea96823711d08345b85e82be011dc6", LastUpdateTime: metav1.Time{Time: lastUpdateTime}, Revision: "651f952130ea96823711d08345b85e82be011dc6", }, @@ -639,7 +640,7 @@ func TestGetAvailablePackageSummaryAfterRepoIndexUpdate(t *testing.T) { repoName := types.NamespacedName{Namespace: "ns2", Name: "testrepo"} repo := newRepo(repoName.Name, repoName.Namespace, repoSpec, repoStatus) - s, mock, err := newSimpleServerWithRepos(t, []sourcev1.HelmRepository{repo}) + s, mock, err := newSimpleServerWithRepos(t, []sourcev1beta2.HelmRepository{repo}) if err != nil { t.Fatalf("error instantiating the server: %v", err) } @@ -677,7 +678,7 @@ func TestGetAvailablePackageSummaryAfterRepoIndexUpdate(t *testing.T) { updateHappened = true // now we are going to simulate flux seeing an update of the index.yaml and modifying the // HelmRepository CRD which, in turn, causes k8s server to fire a MODIFY event - repo.Status.Artifact.Checksum = "4e881a3c34a5430c1059d2c4f753cb9aed006803" + repo.Status.Artifact.Digest = "4e881a3c34a5430c1059d2c4f753cb9aed006803" repo.Status.Artifact.Revision = "4e881a3c34a5430c1059d2c4f753cb9aed006803" // there will be a GET to retrieve the old value from the cache followed by a SET @@ -751,7 +752,7 @@ func TestGetAvailablePackageSummaryAfterFluxHelmRepoDelete(t *testing.T) { } defer ts.Close() - s, mock, err := newServerWithRepos(t, []sourcev1.HelmRepository{*repo}, charts, nil) + s, mock, err := newServerWithRepos(t, []sourcev1beta2.HelmRepository{*repo}, charts, nil) if err != nil { t.Fatalf("%+v", err) } @@ -846,7 +847,7 @@ func TestGetAvailablePackageSummaryAfterCacheResync(t *testing.T) { } defer ts2.Close() - s, mock, err := newSimpleServerWithRepos(t, []sourcev1.HelmRepository{*repo}) + s, mock, err := newSimpleServerWithRepos(t, []sourcev1beta2.HelmRepository{*repo}) if err != nil { t.Fatalf("error instantiating the server: %v", err) } @@ -931,7 +932,7 @@ func TestGetAvailablePackageSummariesAfterCacheResyncQueueNotIdle(t *testing.T) } // first, I'd like to fill up the work queue with a whole bunch of work items - repos := []*sourcev1.HelmRepository{} + repos := []*sourcev1beta2.HelmRepository{} mapReposCached := make(map[string][]byte) keysInOrder := []string{} @@ -1180,7 +1181,7 @@ func TestAddPackageRepository(t *testing.T) { name string request *corev1.AddPackageRepositoryRequest expectedResponse *corev1.AddPackageRepositoryResponse - expectedRepo *sourcev1.HelmRepository + expectedRepo *sourcev1beta2.HelmRepository errorCode connect.Code existingSecret *apiv1.Secret expectedCreatedSecret *apiv1.Secret @@ -1410,7 +1411,7 @@ func TestAddPackageRepository(t *testing.T) { if ctrlClient, err := s.clientGetter.ControllerRuntime(http.Header{}, s.kubeappsCluster); err != nil { t.Fatal(err) } else { - var actualRepo sourcev1.HelmRepository + var actualRepo sourcev1beta2.HelmRepository if err = ctrlClient.Get(ctx, nsname, &actualRepo); err != nil { t.Fatal(err) } else { @@ -1422,13 +1423,15 @@ func TestAddPackageRepository(t *testing.T) { t.Errorf("mismatch (-want +got):\n%s", cmp.Diff(want, got)) } } else { - opt1 := cmpopts.IgnoreFields(sourcev1.HelmRepositorySpec{}, "SecretRef") + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 + opt1 := cmpopts.IgnoreFields(sourcev1beta2.HelmRepositorySpec{}, "SecretRef") if got, want := &actualRepo, tc.expectedRepo; !cmp.Equal(want, got, opt1) { t.Errorf("mismatch (-want +got):\n%s", cmp.Diff(want, got, opt1)) } if tc.expectedCreatedSecret != nil { + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 if !strings.HasPrefix(actualRepo.Spec.SecretRef.Name, tc.expectedRepo.Spec.SecretRef.Name) { t.Errorf("SecretRef [%s] was expected to start with [%s]", actualRepo.Spec.SecretRef.Name, tc.expectedRepo.Spec.SecretRef.Name) @@ -1437,6 +1440,7 @@ func TestAddPackageRepository(t *testing.T) { // check expected secret has been created if typedClient, err := s.clientGetter.Typed(http.Header{}, s.kubeappsCluster); err != nil { t.Fatal(err) + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 } else if secret, err := typedClient.CoreV1().Secrets(nsname.Namespace).Get(ctx, actualRepo.Spec.SecretRef.Name, metav1.GetOptions{}); err != nil { t.Fatal(err) } else if got, want := secret, tc.expectedCreatedSecret; !cmp.Equal(want, got, opt2) { @@ -1447,6 +1451,7 @@ func TestAddPackageRepository(t *testing.T) { } } else if actualRepo.Spec.SecretRef != nil { t.Fatalf("Expected no secret, but found: [%q]", actualRepo.Spec.SecretRef.Name) + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 } else if tc.expectedRepo.Spec.SecretRef != nil { t.Fatalf("Error: unexpected state") } @@ -1623,7 +1628,7 @@ func TestGetPackageRepositoryDetail(t *testing.T) { secretRef = tc.repoSecret.Name secrets = append(secrets, tc.repoSecret) } - var repo *sourcev1.HelmRepository + var repo *sourcev1beta2.HelmRepository if !tc.pending && !tc.failed { var ts *httptest.Server var err error @@ -1633,11 +1638,11 @@ func TestGetPackageRepositoryDetail(t *testing.T) { } defer ts.Close() } else if tc.pending { - repoSpec := &sourcev1.HelmRepositorySpec{ + repoSpec := &sourcev1beta2.HelmRepositorySpec{ URL: "https://example.repo.com/charts", Interval: metav1.Duration{Duration: 1 * time.Minute}, } - repoStatus := &sourcev1.HelmRepositoryStatus{ + repoStatus := &sourcev1beta2.HelmRepositoryStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, @@ -1651,11 +1656,11 @@ func TestGetPackageRepositoryDetail(t *testing.T) { repo1 := newRepo(tc.repoName, tc.repoNamespace, repoSpec, repoStatus) repo = &repo1 } else { // failed - repoSpec := &sourcev1.HelmRepositorySpec{ + repoSpec := &sourcev1beta2.HelmRepositorySpec{ URL: "https://example.repo.com/charts", Interval: metav1.Duration{Duration: 1 * time.Minute}, } - repoStatus := &sourcev1.HelmRepositoryStatus{ + repoStatus := &sourcev1beta2.HelmRepositoryStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, @@ -1672,7 +1677,7 @@ func TestGetPackageRepositoryDetail(t *testing.T) { // the index.yaml will contain links to charts but for the purposes // of this test they do not matter - s, _, err := newServerWithRepos(t, []sourcev1.HelmRepository{*repo}, nil, secrets) + s, _, err := newServerWithRepos(t, []sourcev1beta2.HelmRepository{*repo}, nil, secrets) if err != nil { t.Fatalf("error instantiating the server: %v", err) } @@ -1730,7 +1735,7 @@ func TestGetOciPackageRepositoryDetail(t *testing.T) { t.Fatal(err) } - s, mock, err := newServerWithRepos(t, []sourcev1.HelmRepository{*repo}, nil, nil) + s, mock, err := newServerWithRepos(t, []sourcev1beta2.HelmRepository{*repo}, nil, nil) if err != nil { t.Fatalf("error instantiating the server: %v", err) } @@ -1772,7 +1777,7 @@ func TestGetPackageRepositorySummaries(t *testing.T) { testCases := []struct { name string request *corev1.GetPackageRepositorySummariesRequest - existingRepos []sourcev1.HelmRepository + existingRepos []sourcev1beta2.HelmRepository expectedErrorCode connect.Code expectedResponse *corev1.GetPackageRepositorySummariesResponse }{ @@ -1781,7 +1786,7 @@ func TestGetPackageRepositorySummaries(t *testing.T) { request: &corev1.GetPackageRepositorySummariesRequest{ Context: &corev1.Context{}, }, - existingRepos: []sourcev1.HelmRepository{ + existingRepos: []sourcev1beta2.HelmRepository{ get_summaries_repo_1, get_summaries_repo_2, get_summaries_repo_3, @@ -1801,7 +1806,7 @@ func TestGetPackageRepositorySummaries(t *testing.T) { request: &corev1.GetPackageRepositorySummariesRequest{ Context: &corev1.Context{Namespace: "foo"}, }, - existingRepos: []sourcev1.HelmRepository{ + existingRepos: []sourcev1beta2.HelmRepository{ get_summaries_repo_1, get_summaries_repo_2, get_summaries_repo_3, @@ -2110,7 +2115,7 @@ func TestUpdatePackageRepository(t *testing.T) { if tc.newRepoSecret != nil { secrets = append(secrets, tc.newRepoSecret) } - var repo *sourcev1.HelmRepository + var repo *sourcev1beta2.HelmRepository if !tc.pending { var ts *httptest.Server var err error @@ -2120,11 +2125,11 @@ func TestUpdatePackageRepository(t *testing.T) { } defer ts.Close() } else { - repoSpec := &sourcev1.HelmRepositorySpec{ + repoSpec := &sourcev1beta2.HelmRepositorySpec{ URL: "https://example.repo.com/charts", Interval: metav1.Duration{Duration: 1 * time.Minute}, } - repoStatus := &sourcev1.HelmRepositoryStatus{ + repoStatus := &sourcev1beta2.HelmRepositoryStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, @@ -2142,7 +2147,7 @@ func TestUpdatePackageRepository(t *testing.T) { // the index.yaml will contain links to charts but for the purposes // of this test they do not matter - s, _, err := newServerWithRepos(t, []sourcev1.HelmRepository{*repo}, nil, secrets) + s, _, err := newServerWithRepos(t, []sourcev1beta2.HelmRepository{*repo}, nil, secrets) if err != nil { t.Fatalf("error instantiating the server: %v", err) } @@ -2205,15 +2210,17 @@ func TestUpdatePackageRepository(t *testing.T) { // check the created/updated secret if tc.expectedCreatedSecret != nil { - var actualRepo sourcev1.HelmRepository + var actualRepo sourcev1beta2.HelmRepository if err = ctrlClient.Get(ctx, types.NamespacedName{Namespace: tc.repoNamespace, Name: tc.repoName}, &actualRepo); err != nil { t.Fatal(err) } + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 if actualRepo.Spec.SecretRef == nil { t.Fatalf("Expected repo to have a secret ref, none found") } opt2 := cmpopts.IgnoreFields(metav1.ObjectMeta{}, "Name", "GenerateName") + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 if secret, err := typedClient.CoreV1().Secrets(tc.repoNamespace).Get(ctx, actualRepo.Spec.SecretRef.Name, metav1.GetOptions{}); err != nil { t.Fatal(err) } else if got, want := secret, tc.expectedCreatedSecret; !cmp.Equal(want, got, opt2) { @@ -2269,7 +2276,7 @@ func TestDeletePackageRepository(t *testing.T) { if tc.newRepoSecret != nil { secrets = append(secrets, tc.newRepoSecret) } - var repo *sourcev1.HelmRepository + var repo *sourcev1beta2.HelmRepository if !tc.pending { var ts *httptest.Server var err error @@ -2279,11 +2286,11 @@ func TestDeletePackageRepository(t *testing.T) { } defer ts.Close() } else { - repoSpec := &sourcev1.HelmRepositorySpec{ + repoSpec := &sourcev1beta2.HelmRepositorySpec{ URL: "https://example.repo.com/charts", Interval: metav1.Duration{Duration: 1 * time.Minute}, } - repoStatus := &sourcev1.HelmRepositoryStatus{ + repoStatus := &sourcev1beta2.HelmRepositoryStatus{ Conditions: []metav1.Condition{ { LastTransitionTime: metav1.Time{Time: lastTransitionTime}, @@ -2301,7 +2308,7 @@ func TestDeletePackageRepository(t *testing.T) { // the index.yaml will contain links to charts but for the purposes // of this test they do not matter - s, _, err := newServerWithRepos(t, []sourcev1.HelmRepository{*repo}, nil, secrets) + s, _, err := newServerWithRepos(t, []sourcev1beta2.HelmRepository{*repo}, nil, secrets) if err != nil { t.Fatalf("error instantiating the server: %v", err) } @@ -2315,7 +2322,7 @@ func TestDeletePackageRepository(t *testing.T) { Namespace: tc.request.PackageRepoRef.Context.Namespace, Name: tc.request.PackageRepoRef.Identifier, } - var actualRepo sourcev1.HelmRepository + var actualRepo sourcev1beta2.HelmRepository if tc.expectedErrorCode == 0 { if err = ctrlClient.Get(ctx, nsname, &actualRepo); err != nil { t.Fatal(err) @@ -2398,7 +2405,7 @@ func TestGetOciAvailablePackageSummariesWithoutPagination(t *testing.T) { t.Run(tc.name, func(t *testing.T) { initOciFakeClientBuilder(t, *tc.seedData) - repos := []sourcev1.HelmRepository{} + repos := []sourcev1beta2.HelmRepository{} for _, rs := range tc.repos { repo, err := newOciRepo(rs.repoName, rs.repoNamespace, rs.repoUrl) @@ -2435,8 +2442,8 @@ func TestGetOciAvailablePackageSummariesWithoutPagination(t *testing.T) { } } -func newRepo(name string, namespace string, spec *sourcev1.HelmRepositorySpec, status *sourcev1.HelmRepositoryStatus) sourcev1.HelmRepository { - helmRepository := sourcev1.HelmRepository{ +func newRepo(name string, namespace string, spec *sourcev1beta2.HelmRepositorySpec, status *sourcev1beta2.HelmRepositoryStatus) sourcev1beta2.HelmRepository { + helmRepository := sourcev1beta2.HelmRepository{ ObjectMeta: metav1.ObjectMeta{ Name: name, Generation: 1, @@ -2473,7 +2480,7 @@ func newRepo(name string, namespace string, spec *sourcev1.HelmRepositorySpec, s // these functions should affect only unit test, not production code // does a series of mock.ExpectGet(...) -func (s *Server) redisMockExpectGetFromRepoCache(mock redismock.ClientMock, filterOptions *corev1.FilterOptions, repos ...sourcev1.HelmRepository) error { +func (s *Server) redisMockExpectGetFromRepoCache(mock redismock.ClientMock, filterOptions *corev1.FilterOptions, repos ...sourcev1beta2.HelmRepository) error { mapVals := make(map[string][]byte) ociRepoKeys := sets.Set[string]{} for _, r := range repos { @@ -2516,7 +2523,7 @@ func (s *Server) redisMockExpectGetFromRepoCache(mock redismock.ClientMock, filt return nil } -func (s *Server) redisMockSetValueForRepo(mock redismock.ClientMock, repo sourcev1.HelmRepository, oldValue []byte) (key string, bytes []byte, err error) { +func (s *Server) redisMockSetValueForRepo(mock redismock.ClientMock, repo sourcev1beta2.HelmRepository, oldValue []byte) (key string, bytes []byte, err error) { bg := &clientgetter.FixedClusterClientProvider{ClientsFunc: func(ctx context.Context) (*clientgetter.ClientGetter, error) { return s.clientGetter.GetClients(http.Header{}, s.kubeappsCluster) }} @@ -2524,7 +2531,7 @@ func (s *Server) redisMockSetValueForRepo(mock redismock.ClientMock, repo source return sinkNoCache.redisMockSetValueForRepo(mock, repo, oldValue) } -func (sink *repoEventSink) redisMockSetValueForRepo(mock redismock.ClientMock, repo sourcev1.HelmRepository, oldValue []byte) (key string, newValue []byte, err error) { +func (sink *repoEventSink) redisMockSetValueForRepo(mock redismock.ClientMock, repo sourcev1beta2.HelmRepository, oldValue []byte) (key string, newValue []byte, err error) { if key, newValue, err = sink.redisKeyValueForRepo(repo); err != nil { if oldValue == nil { mock.ExpectGet(key).RedisNil() @@ -2549,7 +2556,7 @@ func redisMockSetValueForRepo(mock redismock.ClientMock, key string, newValue, o mock.ExpectInfo("memory").SetVal("used_memory_rss_human:NA\r\nmaxmemory_human:NA") } -func (s *Server) redisKeyValueForRepo(r sourcev1.HelmRepository) (key string, byteArray []byte, err error) { +func (s *Server) redisKeyValueForRepo(r sourcev1beta2.HelmRepository) (key string, byteArray []byte, err error) { cg := &clientgetter.FixedClusterClientProvider{ClientsFunc: func(ctx context.Context) (*clientgetter.ClientGetter, error) { return s.clientGetter.GetClients(http.Header{}, s.kubeappsCluster) }} @@ -2557,7 +2564,7 @@ func (s *Server) redisKeyValueForRepo(r sourcev1.HelmRepository) (key string, by return sinkNoChartCache.redisKeyValueForRepo(r) } -func (sink *repoEventSink) redisKeyValueForRepo(r sourcev1.HelmRepository) (key string, byteArray []byte, err error) { +func (sink *repoEventSink) redisKeyValueForRepo(r sourcev1beta2.HelmRepository) (key string, byteArray []byte, err error) { if key, err = redisKeyForRepo(r); err != nil { return key, nil, err } else { @@ -2575,7 +2582,7 @@ func (sink *repoEventSink) redisKeyValueForRepo(r sourcev1.HelmRepository) (key } } -func redisKeyForRepo(r sourcev1.HelmRepository) (string, error) { +func redisKeyForRepo(r sourcev1beta2.HelmRepository) (string, error) { // redis convention on key format // https://redis.io/topics/data-types-intro // Try to stick with a schema. For instance "object-type:id" is a good idea, as in "user:1000". @@ -2596,7 +2603,7 @@ func redisKeyForRepoNamespacedName(name types.NamespacedName) (string, error) { return fmt.Sprintf("%s:%s:%s", fluxHelmRepositories, name.Namespace, name.Name), nil } -func newHttpRepoAndServeIndex(repoIndex, repoName, repoNamespace string, replaceUrls map[string]string, secretRef string) (*httptest.Server, *sourcev1.HelmRepository, error) { +func newHttpRepoAndServeIndex(repoIndex, repoName, repoNamespace string, replaceUrls map[string]string, secretRef string) (*httptest.Server, *sourcev1beta2.HelmRepository, error) { indexYAMLBytes, err := os.ReadFile(repoIndex) if err != nil { return nil, nil, err @@ -2615,22 +2622,23 @@ func newHttpRepoAndServeIndex(repoIndex, repoName, repoNamespace string, replace fmt.Fprintln(w, string(indexYAMLBytes)) })) - repoSpec := &sourcev1.HelmRepositorySpec{ + repoSpec := &sourcev1beta2.HelmRepositorySpec{ URL: "https://example.repo.com/charts", Interval: metav1.Duration{Duration: 1 * time.Minute}, } if secretRef != "" { + // TODO(agamez): flux upgrade - migrate to CertSecretRef, seehttps://github.com/fluxcd/flux2/releases/tag/v2.1.0 repoSpec.SecretRef = &fluxmeta.LocalObjectReference{Name: secretRef} } revision := "651f952130ea96823711d08345b85e82be011dc6" sz := int64(31989) - repoStatus := &sourcev1.HelmRepositoryStatus{ + repoStatus := &sourcev1beta2.HelmRepositoryStatus{ Artifact: &sourcev1.Artifact{ Path: fmt.Sprintf("helmrepository/%s/%s/index-%s.yaml", repoNamespace, repoName, revision), - Checksum: revision, + Digest: revision, LastUpdateTime: metav1.Time{Time: lastUpdateTime}, Revision: revision, Size: &sz, @@ -2652,16 +2660,16 @@ func newHttpRepoAndServeIndex(repoIndex, repoName, repoNamespace string, replace return ts, &repo, nil } -func newOciRepo(repoName, repoNamespace, repoUrl string) (*sourcev1.HelmRepository, error) { +func newOciRepo(repoName, repoNamespace, repoUrl string) (*sourcev1beta2.HelmRepository, error) { timeout := metav1.Duration{Duration: 60 * time.Second} - repoSpec := &sourcev1.HelmRepositorySpec{ + repoSpec := &sourcev1beta2.HelmRepositorySpec{ URL: repoUrl, Interval: metav1.Duration{Duration: 1 * time.Minute}, Timeout: &timeout, Type: "oci", } - repoStatus := &sourcev1.HelmRepositoryStatus{ + repoStatus := &sourcev1beta2.HelmRepositoryStatus{ Conditions: []metav1.Condition{ { Type: fluxmeta.ReadyCondition, diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/server.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/server.go index c8973e80ec9..f1de6b41bee 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/server.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/server.go @@ -13,8 +13,8 @@ import ( "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/pkg/helm" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + helmv2beta2 "github.com/fluxcd/helm-controller/api/v2beta2" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" authorizationv1 "k8s.io/api/authorization/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -89,11 +89,11 @@ func NewServer(configGetter core.KubernetesConfigGetter, kubeappsCluster string, // register the GitOps Toolkit schema definitions scheme := runtime.NewScheme() - err = sourcev1.AddToScheme(scheme) + err = sourcev1beta2.AddToScheme(scheme) if err != nil { log.Fatalf("%s", err) } - err = helmv2.AddToScheme(scheme) + err = helmv2beta2.AddToScheme(scheme) if err != nil { log.Fatalf("%s", err) } @@ -112,11 +112,11 @@ func NewServer(configGetter core.KubernetesConfigGetter, kubeappsCluster string, OnGetFunc: s.onGetRepo, OnDeleteFunc: s.onDeleteRepo, OnResyncFunc: s.onResync, - NewObjFunc: func() ctrlclient.Object { return &sourcev1.HelmRepository{} }, - NewListFunc: func() ctrlclient.ObjectList { return &sourcev1.HelmRepositoryList{} }, + NewObjFunc: func() ctrlclient.Object { return &sourcev1beta2.HelmRepository{} }, + NewListFunc: func() ctrlclient.ObjectList { return &sourcev1beta2.HelmRepositoryList{} }, ListItemsFunc: func(ol ctrlclient.ObjectList) []ctrlclient.Object { - if hl, ok := ol.(*sourcev1.HelmRepositoryList); !ok { - log.Errorf("Expected: *sourcev1.HelmRepositoryList, got: %T", ol) + if hl, ok := ol.(*sourcev1beta2.HelmRepositoryList); !ok { + log.Errorf("Expected: *sourcev1beta2.HelmRepositoryList, got: %T", ol) return nil } else { ret := make([]ctrlclient.Object, len(hl.Items)) @@ -619,7 +619,7 @@ func (s *Server) GetPackageRepositoryPermissions(ctx context.Context, request *c } resource := schema.GroupResource{ - Group: sourcev1.GroupVersion.Group, + Group: sourcev1beta2.GroupVersion.Group, Resource: fluxHelmRepositories, } diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/server_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/server_test.go index a48a5077bdb..73dc5e81cbb 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/server_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/server_test.go @@ -13,9 +13,9 @@ import ( "time" "github.com/bufbuild/connect-go" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" + helmv2beta2 "github.com/fluxcd/helm-controller/api/v2beta2" fluxmeta "github.com/fluxcd/pkg/apis/meta" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/go-redis/redis/v8" redismock "github.com/go-redis/redismock/v8" corev1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" @@ -46,13 +46,13 @@ import ( func TestGetAvailablePackagesStatus(t *testing.T) { testCases := []struct { name string - repo sourcev1.HelmRepository + repo sourcev1beta2.HelmRepository statusCode codes.Code }{ { name: "returns without error if response status does not contain conditions", repo: newRepo("test", "default", - &sourcev1.HelmRepositorySpec{ + &sourcev1beta2.HelmRepositorySpec{ URL: "http://example.com", Interval: metav1.Duration{Duration: 1 * time.Minute}, }, @@ -62,21 +62,21 @@ func TestGetAvailablePackagesStatus(t *testing.T) { { name: "returns without error if response status does not contain conditions (2)", repo: newRepo("test", "default", - &sourcev1.HelmRepositorySpec{ + &sourcev1beta2.HelmRepositorySpec{ URL: "http://example.com", Interval: metav1.Duration{Duration: 1 * time.Minute}, }, - &sourcev1.HelmRepositoryStatus{}), + &sourcev1beta2.HelmRepositoryStatus{}), statusCode: codes.OK, }, { name: "returns without error if response does not contain ready repos", repo: newRepo("test", "default", - &sourcev1.HelmRepositorySpec{ + &sourcev1beta2.HelmRepositorySpec{ URL: "http://example.com", Interval: metav1.Duration{Duration: 1 * time.Minute}, }, - &sourcev1.HelmRepositoryStatus{ + &sourcev1beta2.HelmRepositoryStatus{ Conditions: []metav1.Condition{ { Type: fluxmeta.ReadyCondition, @@ -91,7 +91,7 @@ func TestGetAvailablePackagesStatus(t *testing.T) { name: "returns without error if repo object does not contain namespace", repo: newRepo("test", "", nil, - &sourcev1.HelmRepositoryStatus{ + &sourcev1beta2.HelmRepositoryStatus{ Conditions: []metav1.Condition{ { Type: fluxmeta.ReadyCondition, @@ -106,7 +106,7 @@ func TestGetAvailablePackagesStatus(t *testing.T) { name: "returns without error if repo object contains default spec", repo: newRepo("test", "default", nil, - &sourcev1.HelmRepositoryStatus{ + &sourcev1beta2.HelmRepositoryStatus{ Conditions: []metav1.Condition{ { Type: fluxmeta.ReadyCondition, @@ -120,8 +120,8 @@ func TestGetAvailablePackagesStatus(t *testing.T) { { name: "returns without error if repo object does not contain spec url", repo: newRepo("test", "default", - &sourcev1.HelmRepositorySpec{}, - &sourcev1.HelmRepositoryStatus{ + &sourcev1beta2.HelmRepositorySpec{}, + &sourcev1beta2.HelmRepositoryStatus{ Conditions: []metav1.Condition{ { Type: fluxmeta.ReadyCondition, @@ -135,11 +135,11 @@ func TestGetAvailablePackagesStatus(t *testing.T) { { name: "returns without error if repo object does not contain status url", repo: newRepo("test", "default", - &sourcev1.HelmRepositorySpec{ + &sourcev1beta2.HelmRepositorySpec{ URL: "http://example.com", Interval: metav1.Duration{Duration: 1 * time.Minute}, }, - &sourcev1.HelmRepositoryStatus{ + &sourcev1beta2.HelmRepositoryStatus{ Conditions: []metav1.Condition{ { Type: fluxmeta.ReadyCondition, @@ -154,7 +154,7 @@ func TestGetAvailablePackagesStatus(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - s, mock, err := newSimpleServerWithRepos(t, []sourcev1.HelmRepository{tc.repo}) + s, mock, err := newSimpleServerWithRepos(t, []sourcev1beta2.HelmRepository{tc.repo}) if err != nil { t.Fatalf("error instantiating the server: %v", err) } @@ -204,11 +204,11 @@ type testSpecChartWithUrl struct { numRetries int } -func newSimpleServerWithRepos(t *testing.T, repos []sourcev1.HelmRepository) (*Server, redismock.ClientMock, error) { +func newSimpleServerWithRepos(t *testing.T, repos []sourcev1beta2.HelmRepository) (*Server, redismock.ClientMock, error) { return newServerWithRepos(t, repos, nil, nil) } -func newServerWithRepos(t *testing.T, repos []sourcev1.HelmRepository, charts []testSpecChartWithUrl, secrets []runtime.Object) (*Server, redismock.ClientMock, error) { +func newServerWithRepos(t *testing.T, repos []sourcev1beta2.HelmRepository, charts []testSpecChartWithUrl, secrets []runtime.Object) (*Server, redismock.ClientMock, error) { typedClient := typfake.NewSimpleClientset(secrets...) // ref https://stackoverflow.com/questions/68794562/kubernetes-fake-client-doesnt-handle-generatename-in-objectmeta/68794563#68794563 @@ -243,7 +243,7 @@ func newServerWithRepos(t *testing.T, repos []sourcev1.HelmRepository, charts [] return newServer(t, clientGetter, nil, repos, charts) } -func newServerWithChartsAndReleases(t *testing.T, actionConfig *action.Configuration, charts []sourcev1.HelmChart, releases []helmv2.HelmRelease) (*Server, redismock.ClientMock, error) { +func newServerWithChartsAndReleases(t *testing.T, actionConfig *action.Configuration, charts []sourcev1beta2.HelmChart, releases []helmv2beta2.HelmRelease) (*Server, redismock.ClientMock, error) { typedClient := typfake.NewSimpleClientset() // Creating an authorized clientGetter typedClient.PrependReactor("create", "selfsubjectaccessreviews", func(action k8stesting.Action) (handled bool, ret runtime.Object, err error) { @@ -316,7 +316,7 @@ func newHelmActionConfig(t *testing.T, namespace string, rels []helmReleaseStub) func newServer(t *testing.T, clientGetter clientgetter.ClientProviderInterface, actionConfig *action.Configuration, - repos []sourcev1.HelmRepository, + repos []sourcev1beta2.HelmRepository, charts []testSpecChartWithUrl) (*Server, redismock.ClientMock, error) { stopCh := make(chan struct{}) @@ -360,11 +360,11 @@ func newServer(t *testing.T, OnGetFunc: sink.onGetRepo, OnDeleteFunc: sink.onDeleteRepo, OnResyncFunc: sink.onResync, - NewObjFunc: func() ctrlclient.Object { return &sourcev1.HelmRepository{} }, - NewListFunc: func() ctrlclient.ObjectList { return &sourcev1.HelmRepositoryList{} }, + NewObjFunc: func() ctrlclient.Object { return &sourcev1beta2.HelmRepository{} }, + NewListFunc: func() ctrlclient.ObjectList { return &sourcev1beta2.HelmRepositoryList{} }, ListItemsFunc: func(ol ctrlclient.ObjectList) []ctrlclient.Object { - if hl, ok := ol.(*sourcev1.HelmRepositoryList); !ok { - t.Fatalf("Expected: *sourcev1.HelmRepositoryList, got: %T", ol) + if hl, ok := ol.(*sourcev1beta2.HelmRepositoryList); !ok { + t.Fatalf("Expected: *sourcev1beta2.HelmRepositoryList, got: %T", ol) return nil } else { ret := make([]ctrlclient.Object, len(hl.Items)) @@ -410,8 +410,8 @@ func newServer(t *testing.T, func seedRepoCacheWithRepos(t *testing.T, mock redismock.ClientMock, sink repoEventSink, - repos []sourcev1.HelmRepository) map[string]sourcev1.HelmRepository { - okRepos := make(map[string]sourcev1.HelmRepository) + repos []sourcev1beta2.HelmRepository) map[string]sourcev1beta2.HelmRepository { + okRepos := make(map[string]sourcev1beta2.HelmRepository) for _, r := range repos { key, err := redisKeyForRepo(r) if err != nil { @@ -441,7 +441,7 @@ func seedChartCacheWithCharts(t *testing.T, mock redismock.ClientMock, sink repoEventSink, stopCh <-chan struct{}, - repos map[string]sourcev1.HelmRepository, + repos map[string]sourcev1beta2.HelmRepository, charts []testSpecChartWithUrl) (*cache.ChartCache, func(), error) { t.Logf("+seedChartCacheWithCharts(%v)", charts) diff --git a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go index 08857323102..adc0dc8a4bb 100644 --- a/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go +++ b/cmd/kubeapps-apis/plugins/fluxv2/packages/v1alpha1/test_util_test.go @@ -19,8 +19,8 @@ import ( k8stesting "k8s.io/client-go/testing" - helmv2 "github.com/fluxcd/helm-controller/api/v2beta1" - sourcev1 "github.com/fluxcd/source-controller/api/v1beta2" + helmv2beta2 "github.com/fluxcd/helm-controller/api/v2beta2" + sourcev1beta2 "github.com/fluxcd/source-controller/api/v1beta2" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" corev1 "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/gen/core/packages/v1alpha1" @@ -51,6 +51,14 @@ type withWatchWrapper struct { watcher *watch.RaceFreeFakeWatcher } +func (w *withWatchWrapper) GroupVersionKindFor(obj runtime.Object) (schema.GroupVersionKind, error) { + return w.delegate.GroupVersionKindFor(obj) +} + +func (w *withWatchWrapper) IsObjectNamespaced(obj runtime.Object) (bool, error) { + return w.delegate.IsObjectNamespaced(obj) +} + var _ client.WithWatch = &withWatchWrapper{} func (w *withWatchWrapper) Create(ctx context.Context, obj client.Object, opts ...client.CreateOption) error { @@ -297,8 +305,8 @@ func setSecretOwnerRef(repoName string, secret *apiv1.Secret) *apiv1.Secret { tRue := true secret.OwnerReferences = []metav1.OwnerReference{ { - APIVersion: sourcev1.GroupVersion.String(), - Kind: sourcev1.HelmRepositoryKind, + APIVersion: sourcev1beta2.GroupVersion.String(), + Kind: sourcev1beta2.HelmRepositoryKind, Name: repoName, Controller: &tRue, BlockOwnerDeletion: &tRue, @@ -345,45 +353,45 @@ func repoRef(id, namespace string) *corev1.PackageRepositoryReference { } } -func newCtrlClient(repos []sourcev1.HelmRepository, charts []sourcev1.HelmChart, releases []helmv2.HelmRelease) withWatchWrapper { +func newCtrlClient(repos []sourcev1beta2.HelmRepository, charts []sourcev1beta2.HelmChart, releases []helmv2beta2.HelmRelease) withWatchWrapper { // register the flux GitOps Toolkit schema definitions scheme := runtime.NewScheme() - err := sourcev1.AddToScheme(scheme) + err := sourcev1beta2.AddToScheme(scheme) if err != nil { log.Fatal(err) } - err = helmv2.AddToScheme(scheme) + err = helmv2beta2.AddToScheme(scheme) if err != nil { log.Fatal(err) } - rm := apimeta.NewDefaultRESTMapper([]schema.GroupVersion{sourcev1.GroupVersion, helmv2.GroupVersion}) + rm := apimeta.NewDefaultRESTMapper([]schema.GroupVersion{sourcev1beta2.GroupVersion, helmv2beta2.GroupVersion}) rm.Add(schema.GroupVersionKind{ - Group: sourcev1.GroupVersion.Group, - Version: sourcev1.GroupVersion.Version, - Kind: sourcev1.HelmRepositoryKind}, + Group: sourcev1beta2.GroupVersion.Group, + Version: sourcev1beta2.GroupVersion.Version, + Kind: sourcev1beta2.HelmRepositoryKind}, apimeta.RESTScopeNamespace) rm.Add(schema.GroupVersionKind{ - Group: sourcev1.GroupVersion.Group, - Version: sourcev1.GroupVersion.Version, - Kind: sourcev1.HelmChartKind}, + Group: sourcev1beta2.GroupVersion.Group, + Version: sourcev1beta2.GroupVersion.Version, + Kind: sourcev1beta2.HelmChartKind}, apimeta.RESTScopeNamespace) rm.Add(schema.GroupVersionKind{ - Group: helmv2.GroupVersion.Group, - Version: helmv2.GroupVersion.Version, - Kind: helmv2.HelmReleaseKind}, + Group: helmv2beta2.GroupVersion.Group, + Version: helmv2beta2.GroupVersion.Version, + Kind: helmv2beta2.HelmReleaseKind}, apimeta.RESTScopeNamespace) ctrlClientBuilder := ctrlfake.NewClientBuilder().WithScheme(scheme).WithRESTMapper(rm) initLists := []client.ObjectList{} if len(repos) > 0 { - initLists = append(initLists, &sourcev1.HelmRepositoryList{Items: repos}) + initLists = append(initLists, &sourcev1beta2.HelmRepositoryList{Items: repos}) } if len(charts) > 0 { - initLists = append(initLists, &sourcev1.HelmChartList{Items: charts}) + initLists = append(initLists, &sourcev1beta2.HelmChartList{Items: charts}) } if len(releases) > 0 { - initLists = append(initLists, &helmv2.HelmReleaseList{Items: releases}) + initLists = append(initLists, &helmv2beta2.HelmReleaseList{Items: releases}) } if len(initLists) > 0 { ctrlClientBuilder = ctrlClientBuilder.WithLists(initLists...) diff --git a/cmd/kubeapps-apis/plugins/helm/packages/v1alpha1/update_test.go b/cmd/kubeapps-apis/plugins/helm/packages/v1alpha1/update_test.go index ee72ccd3d44..6e3abede00f 100644 --- a/cmd/kubeapps-apis/plugins/helm/packages/v1alpha1/update_test.go +++ b/cmd/kubeapps-apis/plugins/helm/packages/v1alpha1/update_test.go @@ -79,6 +79,7 @@ func TestUpdateInstalledPackage(t *testing.T) { Config: map[string]interface{}{"foo": "baz"}, Version: 1, Namespace: "default", + Labels: map[string]string{}, }, }, { @@ -131,6 +132,7 @@ func TestUpdateInstalledPackage(t *testing.T) { Config: map[string]interface{}{"foo": "baz"}, Version: 1, Namespace: "default", + Labels: map[string]string{}, }, }, { diff --git a/cmd/kubeapps-apis/plugins/kapp_controller/packages/v1alpha1/server.go b/cmd/kubeapps-apis/plugins/kapp_controller/packages/v1alpha1/server.go index 17d9e76cde5..133dc257fdf 100644 --- a/cmd/kubeapps-apis/plugins/kapp_controller/packages/v1alpha1/server.go +++ b/cmd/kubeapps-apis/plugins/kapp_controller/packages/v1alpha1/server.go @@ -151,13 +151,13 @@ func NewServer(configGetter core.KubernetesConfigGetter, clientQPS float32, clie failingAPIServicesPolicy := resourceTypesFlags.FailingAPIServicePolicy() // Getting namespaced clients (e.g., for fetching an App) - supportingNsObjs, err := kappcmdapp.FactoryClients(depsFactory, kappcmdcore.NamespaceFlags{Name: namespace}, resourceTypesFlags, logger.NewNoopLogger()) + supportingNsObjs, err := kappcmdapp.FactoryClients(depsFactory, kappcmdcore.NamespaceFlags{Name: namespace}, namespace, resourceTypesFlags, logger.NewNoopLogger()) if err != nil { return ctlapp.Apps{}, ctlres.IdentifiedResources{}, nil, ctlres.ResourceFilter{}, connect.NewError(connect.CodeFailedPrecondition, fmt.Errorf("Unable to get config due to: %w", err)) } // Getting non-namespaced clients (e.g., for fetching every k8s object in the cluster) - supportingObjs, err := kappcmdapp.FactoryClients(depsFactory, kappcmdcore.NamespaceFlags{Name: ""}, resourceTypesFlags, logger.NewNoopLogger()) + supportingObjs, err := kappcmdapp.FactoryClients(depsFactory, kappcmdcore.NamespaceFlags{Name: ""}, "", resourceTypesFlags, logger.NewNoopLogger()) if err != nil { return ctlapp.Apps{}, ctlres.IdentifiedResources{}, nil, ctlres.ResourceFilter{}, connect.NewError(connect.CodeFailedPrecondition, fmt.Errorf("Unable to get config due to: %w", err)) } diff --git a/cmd/kubeapps-apis/plugins/kapp_controller/packages/v1alpha1/server_test.go b/cmd/kubeapps-apis/plugins/kapp_controller/packages/v1alpha1/server_test.go index a59f7599cda..61c9e79978a 100644 --- a/cmd/kubeapps-apis/plugins/kapp_controller/packages/v1alpha1/server_test.go +++ b/cmd/kubeapps-apis/plugins/kapp_controller/packages/v1alpha1/server_test.go @@ -6464,11 +6464,11 @@ func TestGetInstalledPackageResourceRefs(t *testing.T) { ScopeToFallbackAllowedNamespaces: true, } failingAPIServicesPolicy := resourceTypesFlags.FailingAPIServicePolicy() - supportingNsObjs, err := kappcmdapp.FactoryClients(depsFactory, kappcmdcore.NamespaceFlags{Name: namespace}, resourceTypesFlags, logger.NewNoopLogger()) + supportingNsObjs, err := kappcmdapp.FactoryClients(depsFactory, kappcmdcore.NamespaceFlags{Name: namespace}, namespace, resourceTypesFlags, logger.NewNoopLogger()) if err != nil { return ctlapp.Apps{}, ctlres.IdentifiedResources{}, nil, ctlres.ResourceFilter{}, connect.NewError(connect.CodeFailedPrecondition, fmt.Errorf("unable to get config due to: %w", err)) } - supportingObjs, err := kappcmdapp.FactoryClients(depsFactory, kappcmdcore.NamespaceFlags{Name: ""}, resourceTypesFlags, logger.NewNoopLogger()) + supportingObjs, err := kappcmdapp.FactoryClients(depsFactory, kappcmdcore.NamespaceFlags{Name: ""}, "", resourceTypesFlags, logger.NewNoopLogger()) if err != nil { return ctlapp.Apps{}, ctlres.IdentifiedResources{}, nil, ctlres.ResourceFilter{}, connect.NewError(connect.CodeFailedPrecondition, fmt.Errorf("unable to get config due to: %w", err)) } diff --git a/cmd/kubeapps-apis/plugins/pkg/helm/agent/agent_test.go b/cmd/kubeapps-apis/plugins/pkg/helm/agent/agent_test.go index bb826de4f96..c13d22ba191 100644 --- a/cmd/kubeapps-apis/plugins/pkg/helm/agent/agent_test.go +++ b/cmd/kubeapps-apis/plugins/pkg/helm/agent/agent_test.go @@ -4,12 +4,13 @@ package agent import ( - chartFake "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/helm/packages/v1alpha1/utils/fake" + "errors" "io" "testing" "time" kubechart "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/helm/packages/v1alpha1/utils" + chartFake "github.com/vmware-tanzu/kubeapps/cmd/kubeapps-apis/plugins/helm/packages/v1alpha1/utils/fake" "helm.sh/helm/v3/pkg/action" "helm.sh/helm/v3/pkg/chart" "helm.sh/helm/v3/pkg/chartutil" @@ -225,7 +226,7 @@ func TestRollbackRelease(t *testing.T) { }, release: "airwatch", revision: targetRevision, - err: driver.ErrReleaseNotFound, + err: errors.New("release has no 1 version"), }, { name: "rolls back a release in non-default namespace", @@ -245,11 +246,13 @@ func TestRollbackRelease(t *testing.T) { makeReleases(t, cfg, tc.releases) newRelease, err := RollbackRelease(cfg, tc.release, tc.revision, 0) - if got, want := err, tc.err; got != want { - t.Errorf("got: %v, want: %v", got, want) - } if tc.err != nil { + if got, want := err.Error(), tc.err.Error(); got != want { + t.Errorf("got: %v, want: %v", got, want) + } return + } else if err != nil { + t.Fatalf("%+v", err) } // Previously deployed revision gets superseded diff --git a/cmd/kubeapps-apis/plugins/pkg/k8sutils/k8sutils.go b/cmd/kubeapps-apis/plugins/pkg/k8sutils/k8sutils.go index eb88a17c22c..31f87681985 100644 --- a/cmd/kubeapps-apis/plugins/pkg/k8sutils/k8sutils.go +++ b/cmd/kubeapps-apis/plugins/pkg/k8sutils/k8sutils.go @@ -20,7 +20,7 @@ const ( ) func WaitForResource(ctx context.Context, ri dynamic.ResourceInterface, name string, interval, timeout time.Duration) error { - err := wait.PollImmediateWithContext(ctx, interval, timeout, func(ctx context.Context) (bool, error) { + err := wait.PollUntilContextTimeout(ctx, interval, timeout, true, func(ctx context.Context) (bool, error) { _, err := ri.Get(ctx, name, metav1.GetOptions{}) if err != nil { if errors.IsNotFound(err) { diff --git a/cmd/kubeapps-apis/plugins/pkg/k8sutils/k8sutils_test.go b/cmd/kubeapps-apis/plugins/pkg/k8sutils/k8sutils_test.go index 35dc70e6d54..022716dff2d 100644 --- a/cmd/kubeapps-apis/plugins/pkg/k8sutils/k8sutils_test.go +++ b/cmd/kubeapps-apis/plugins/pkg/k8sutils/k8sutils_test.go @@ -60,7 +60,7 @@ func TestWaitForResource(t *testing.T) { }}, }, }}, - expectedErr: fmt.Errorf("timed out waiting for the condition"), + expectedErr: fmt.Errorf("context deadline exceeded"), }, } diff --git a/go.mod b/go.mod index 7e0bc09e10d..da70d4a35ef 100644 --- a/go.mod +++ b/go.mod @@ -17,11 +17,11 @@ require ( github.com/disintegration/imaging v1.6.2 github.com/distribution/reference v0.5.0 github.com/docker/cli v24.0.7+incompatible - github.com/fluxcd/helm-controller/api v0.32.2 - github.com/fluxcd/pkg/apis/meta v1.0.0 - github.com/fluxcd/pkg/oci v0.23.0 + github.com/fluxcd/helm-controller/api v0.37.2 + github.com/fluxcd/pkg/apis/meta v1.2.0 + github.com/fluxcd/pkg/oci v0.34.0 github.com/fluxcd/pkg/version v0.2.2 - github.com/fluxcd/source-controller/api v0.36.1 + github.com/fluxcd/source-controller/api v1.2.3 github.com/go-redis/redis/v8 v8.11.5 github.com/go-redis/redismock/v8 v8.11.5 github.com/google/go-cmp v0.6.0 @@ -40,9 +40,9 @@ require ( github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef github.com/stretchr/testify v1.8.4 - github.com/vmware-tanzu/carvel-kapp v0.56.0 - github.com/vmware-tanzu/carvel-kapp-controller v0.48.2 - github.com/vmware-tanzu/carvel-vendir v0.35.2 + github.com/vmware-tanzu/carvel-kapp v0.59.2 + github.com/vmware-tanzu/carvel-kapp-controller v0.49.0 + github.com/vmware-tanzu/carvel-vendir v0.36.1 golang.org/x/net v0.20.0 golang.org/x/sync v0.6.0 google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917 @@ -50,29 +50,29 @@ require ( google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 google.golang.org/protobuf v1.32.0 gopkg.in/yaml.v3 v3.0.1 - helm.sh/helm/v3 v3.11.3 - k8s.io/api v0.26.7 - k8s.io/apiextensions-apiserver v0.26.3 - k8s.io/apimachinery v0.26.7 - k8s.io/apiserver v0.26.7 - k8s.io/cli-runtime v0.26.7 - k8s.io/client-go v0.26.7 + helm.sh/helm/v3 v3.13.3 + k8s.io/api v0.28.5 + k8s.io/apiextensions-apiserver v0.28.5 + k8s.io/apimachinery v0.28.5 + k8s.io/apiserver v0.28.5 + k8s.io/cli-runtime v0.28.5 + k8s.io/client-go v0.28.5 k8s.io/klog/v2 v2.110.1 - k8s.io/kubectl v0.26.7 - k8s.io/utils v0.0.0-20230726121419-3b25d923346b + k8s.io/kubectl v0.28.5 + k8s.io/utils v0.0.0-20231127182322-b307cd553661 oras.land/oras-go v1.2.4 oras.land/oras-go/v2 v2.3.1 - sigs.k8s.io/controller-runtime v0.14.6 + sigs.k8s.io/controller-runtime v0.16.3 sigs.k8s.io/yaml v1.4.0 ) require ( github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect @@ -80,19 +80,20 @@ require ( github.com/Masterminds/squirrel v1.5.4 // indirect github.com/Microsoft/hcsshim v0.11.4 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aws/aws-sdk-go-v2 v1.19.0 // indirect - github.com/aws/aws-sdk-go-v2/config v1.18.29 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.13.28 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.5 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.35 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.29 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.36 // indirect - github.com/aws/aws-sdk-go-v2/service/ecr v1.18.14 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.29 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.12.13 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.13 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.20.0 // indirect - github.com/aws/smithy-go v1.13.5 // indirect + github.com/aws/aws-sdk-go-v2 v1.24.0 // indirect + github.com/aws/aws-sdk-go-v2/config v1.26.1 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.16.12 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 // indirect + github.com/aws/aws-sdk-go-v2/service/ecr v1.24.5 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.9 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.18.5 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.26.5 // indirect + github.com/aws/smithy-go v1.19.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/carvel-dev/semver/v4 v4.0.1-0.20230221220520-8090ce423695 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect @@ -110,18 +111,17 @@ require ( github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/go-units v0.5.0 // indirect - github.com/emicklei/go-restful/v3 v3.10.2 // indirect - github.com/evanphx/json-patch v5.6.0+incompatible // indirect - github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/evanphx/json-patch v5.7.0+incompatible // indirect + github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect github.com/fatih/camelcase v1.0.0 // indirect github.com/fatih/color v1.15.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/fluxcd/pkg/apis/acl v0.1.0 // indirect - github.com/fluxcd/pkg/apis/kustomize v1.0.0 // indirect + github.com/fluxcd/pkg/apis/kustomize v1.2.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fvbommel/sortorder v1.1.0 // indirect - github.com/ghodss/yaml v1.0.0 // indirect github.com/go-errors/errors v1.4.2 // indirect github.com/go-gorp/gorp/v3 v3.1.0 // indirect github.com/go-logr/logr v1.3.0 // indirect @@ -131,11 +131,11 @@ require ( github.com/go-openapi/swag v0.22.4 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang-jwt/jwt/v5 v5.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/gnostic v0.6.9 // indirect + github.com/google/gnostic-models v0.6.8 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.4.0 // indirect @@ -168,7 +168,7 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect @@ -187,10 +187,10 @@ require ( github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.16.0 // indirect - github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.44.0 // indirect - github.com/prometheus/procfs v0.11.1 // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/rubenv/sql-migrate v1.5.2 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect @@ -212,8 +212,7 @@ require ( go.opentelemetry.io/otel/metric v1.19.0 // indirect go.opentelemetry.io/otel/trace v1.19.0 // indirect go.starlark.net v0.0.0-20230726094710-7dadff395006 // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.9.0 // indirect + go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.18.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect golang.org/x/image v0.10.0 // indirect @@ -222,25 +221,17 @@ require ( golang.org/x/term v0.16.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect - gomodules.xyz/jsonpatch/v2 v2.3.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20231212172506-995d672761c0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - k8s.io/component-base v0.26.7 // indirect - k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f // indirect + k8s.io/component-base v0.28.5 // indirect + k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/kustomize/api v0.12.1 // indirect - sigs.k8s.io/kustomize/kyaml v0.13.9 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 // indirect + sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect ) - -// Until we can update to client-go 0.27 / k8s 1.27 (currently we cannot because -// it causes an error just like -// https://github.com/operator-framework/operator-sdk/issues/6396 as other upstream k8s libs -// are not yet switched, which leads to the cause explained at: -// https://github.com/operator-framework/operator-sdk/issues/6396#issuecomment-1521399563 -// Note that this also stops carvel-kapp from v0.56.0 -> v0.57.1 -exclude k8s.io/api v0.27.2 diff --git a/go.sum b/go.sum index 73e89f55ef2..0ad5654653c 100644 --- a/go.sum +++ b/go.sum @@ -48,16 +48,16 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 h1:8q4SaHjFsClSvuVne0ID/5Ka8u3fcIHyqkLjcFpNRHQ= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 h1:fb8kj/Dh4CSwgsOzHeZY4Xh68cFVbzXx+ONXGMY//4w= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0/go.mod h1:uReU2sSxZExRPBAg3qKzmAucSi51+SP1OhohieR821Q= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 h1:d81/ng9rET2YqdVkVwkb6EXeRrLJIwyGnJcAlAWKwhs= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY= -github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= +github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 h1:WpB/QDNLpMw72xHJc34BNNykqSOeEJDAWkhf0u12/Jk= +github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -101,32 +101,34 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/aws/aws-sdk-go-v2 v1.19.0 h1:klAT+y3pGFBU/qVf1uzwttpBbiuozJYWzNLHioyDJ+k= -github.com/aws/aws-sdk-go-v2 v1.19.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= -github.com/aws/aws-sdk-go-v2/config v1.18.29 h1:yA+bSSRGhBwWuprG9I4VgxfK//NBLZ/0BGOHiV3f9oM= -github.com/aws/aws-sdk-go-v2/config v1.18.29/go.mod h1:bJT6P8A+KU1qvNMp8aj+/NmaI06Z670dHNoWsrLOgMg= -github.com/aws/aws-sdk-go-v2/credentials v1.13.28 h1:WM9tEHgoOh5ThJZ042UKnSx7TXGSC/bz63X3fsrQL2o= -github.com/aws/aws-sdk-go-v2/credentials v1.13.28/go.mod h1:86BSbSeamnVVdr1hPfBZVN8SXM7KxSAZAvhNxVfi8fU= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.5 h1:kP3Me6Fy3vdi+9uHd7YLr6ewPxRL+PU6y15urfTaamU= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.5/go.mod h1:Gj7tm95r+QsDoN2Fhuz/3npQvcZbkEf5mL70n3Xfluc= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.35 h1:hMUCiE3Zi5AHrRNGf5j985u0WyqI6r2NULhUfo0N/No= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.35/go.mod h1:ipR5PvpSPqIqL5Mi82BxLnfMkHVbmco8kUwO2xrCi0M= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.29 h1:yOpYx+FTBdpk/g+sBU6Cb1H0U/TLEcYYp66mYqsPpcc= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.29/go.mod h1:M/eUABlDbw2uVrdAn+UsI6M727qp2fxkp8K0ejcBDUY= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.36 h1:8r5m1BoAWkn0TDC34lUculryf7nUF25EgIMdjvGCkgo= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.36/go.mod h1:Rmw2M1hMVTwiUhjwMoIBFWFJMhvJbct06sSidxInkhY= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.14 h1:dcbDHH0NqKqalrVVwuEcvMvKBBY4AHcI8+JTiytJKDw= -github.com/aws/aws-sdk-go-v2/service/ecr v1.18.14/go.mod h1:ALDmr/JM6zozlNH9a/SBdXIDFdwKfSl//1Eg5YE+jww= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.29 h1:IiDolu/eLmuB18DRZibj77n1hHQT7z12jnGO7Ze3pLc= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.29/go.mod h1:fDbkK4o7fpPXWn8YAPmTieAMuB9mk/VgvW64uaUqxd4= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.13 h1:sWDv7cMITPcZ21QdreULwxOOAmE05JjEsT6fCDtDA9k= -github.com/aws/aws-sdk-go-v2/service/sso v1.12.13/go.mod h1:DfX0sWuT46KpcqbMhJ9QWtxAIP1VozkDWf8VAkByjYY= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.13 h1:BFubHS/xN5bjl818QaroN6mQdjneYQ+AOx44KNXlyH4= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.13/go.mod h1:BzqsVVFduubEmzrVtUFQQIQdFqvUItF8XUq2EnS8Wog= -github.com/aws/aws-sdk-go-v2/service/sts v1.20.0 h1:jKmIOO+dFvCPuIhhM8u0Dy3dtd590n2kEDSYiGHoI98= -github.com/aws/aws-sdk-go-v2/service/sts v1.20.0/go.mod h1:yVGZA1CPkmUhBdA039jXNJJG7/6t+G+EBWmFq23xqnY= -github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= -github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/aws-sdk-go-v2 v1.24.0 h1:890+mqQ+hTpNuw0gGP6/4akolQkSToDJgHfQE7AwGuk= +github.com/aws/aws-sdk-go-v2 v1.24.0/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= +github.com/aws/aws-sdk-go-v2/config v1.26.1 h1:z6DqMxclFGL3Zfo+4Q0rLnAZ6yVkzCRxhRMsiRQnD1o= +github.com/aws/aws-sdk-go-v2/config v1.26.1/go.mod h1:ZB+CuKHRbb5v5F0oJtGdhFTelmrxd4iWO1lf0rQwSAg= +github.com/aws/aws-sdk-go-v2/credentials v1.16.12 h1:v/WgB8NxprNvr5inKIiVVrXPuuTegM+K8nncFkr1usU= +github.com/aws/aws-sdk-go-v2/credentials v1.16.12/go.mod h1:X21k0FjEJe+/pauud82HYiQbEr9jRKY3kXEIQ4hXeTQ= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10 h1:w98BT5w+ao1/r5sUuiH6JkVzjowOKeOJRHERyy1vh58= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.10/go.mod h1:K2WGI7vUvkIv1HoNbfBA1bvIZ+9kL3YVmWxeKuLQsiw= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9 h1:v+HbZaCGmOwnTTVS86Fleq0vPzOd7tnJGbFhP0stNLs= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9/go.mod h1:Xjqy+Nyj7VDLBtCMkQYOw1QYfAEZCVLrfI0ezve8wd4= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9 h1:N94sVhRACtXyVcjXxrwK1SKFIJrA9pOJ5yu2eSHnmls= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9/go.mod h1:hqamLz7g1/4EJP+GH5NBhcUMLjW+gKLQabgyz6/7WAU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2 h1:GrSw8s0Gs/5zZ0SX+gX4zQjRnRsMJDJ2sLur1gRBhEM= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.2/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= +github.com/aws/aws-sdk-go-v2/service/ecr v1.24.5 h1:wLPDAUFT50NEXGXpywRU3AA74pg35RJjWol/68ruvQQ= +github.com/aws/aws-sdk-go-v2/service/ecr v1.24.5/go.mod h1:AOHmGMoPtSY9Zm2zBuwUJQBisIvYAZeA1n7b6f4e880= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 h1:/b31bi3YVNlkzkBrm9LfpaKoaYZUxIAj4sHfOTmLfqw= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4/go.mod h1:2aGXHFmbInwgP9ZfpmdIfOELL79zhdNYNmReK8qDfdQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.9 h1:Nf2sHxjMJR8CSImIVCONRi4g0Su3J+TSTbS7G0pUeMU= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.9/go.mod h1:idky4TER38YIjr2cADF1/ugFMKvZV7p//pVeV5LZbF0= +github.com/aws/aws-sdk-go-v2/service/sso v1.18.5 h1:ldSFWz9tEHAwHNmjx2Cvy1MjP5/L9kNoR0skc6wyOOM= +github.com/aws/aws-sdk-go-v2/service/sso v1.18.5/go.mod h1:CaFfXLYL376jgbP7VKC96uFcU8Rlavak0UlAwk1Dlhc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5 h1:2k9KmFawS63euAkY4/ixVNsYYwrwnd5fIvgEKkfZFNM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.5/go.mod h1:W+nd4wWDVkSUIox9bacmkBP5NMFQeTJ/xqNabpzSR38= +github.com/aws/aws-sdk-go-v2/service/sts v1.26.5 h1:5UYvv8JUvllZsRnfrcMQ+hJ9jNICmcgKPAO1CER25Wg= +github.com/aws/aws-sdk-go-v2/service/sts v1.26.5/go.mod h1:XX5gh4CB7wAs4KhcF46G6C8a2i7eupU19dcAAE+EydU= +github.com/aws/smithy-go v1.19.0 h1:KWFKQV80DpP3vJrrA9sVAHQ5gc2z8i4EzrLhLlWXcBM= +github.com/aws/smithy-go v1.19.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -139,7 +141,6 @@ github.com/bufbuild/connect-go v1.10.0 h1:QAJ3G9A1OYQW2Jbk3DeoJbkCxuKArrvZgDt47m github.com/bufbuild/connect-go v1.10.0/go.mod h1:CAIePUgkDR5pAFaylSMtNK45ANQjp9JvpluG20rhpV8= github.com/bufbuild/connect-grpchealth-go v1.1.1 h1:ldceS3m7+Qvl3GI4yzB4oCg3uOdD+Y1bytc/5xuMpqo= github.com/bufbuild/connect-grpchealth-go v1.1.1/go.mod h1:9KbkogLoUIxOTPKyWDv5evkawr1IYXaHax4XoUHCgoQ= -github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng= github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= @@ -207,8 +208,8 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= -github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 h1:OtfRoaZ54jKZ7jl9WuxqekousLR9T63iJf0y2EdC2S4= -github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1/go.mod h1:r5XLH1cp+Wau2jxdptkYsFvvvzPPQTIe8eUuQ0vq30Q= +github.com/distribution/distribution/v3 v3.0.0-20230821124843-59dd684cc897 h1:RXk089SU5PMqorzuuFhr7w3Xk+01sbnOUEgJY4iFxfM= +github.com/distribution/distribution/v3 v3.0.0-20230821124843-59dd684cc897/go.mod h1:6icnq9cRyk6D46s6DLfsYnQBYIPmx0pM0QYIV4SAYoo= github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= @@ -231,11 +232,8 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4 github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful/v3 v3.10.2 h1:hIovbnmBTLjHXkqEBUz3HGpXZdM7ZrE9fJIZIqlJLqE= -github.com/emicklei/go-restful/v3 v3.10.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -247,10 +245,10 @@ github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go. github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= -github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= -github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= -github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= +github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= +github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4= github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc= github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= @@ -262,21 +260,22 @@ github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= -github.com/fluxcd/helm-controller/api v0.32.2 h1:ETkZmMEHY/qu6a9AjP6en35WrpN7NnVmhOe7IvOB7jE= -github.com/fluxcd/helm-controller/api v0.32.2/go.mod h1:xzQgNoaPOg77zFUqvnaX0Fn3lPA3iGDLoz8q4wiEyLA= +github.com/fluxcd/helm-controller/api v0.37.2 h1:tkLezpRdqPDz7HoKHFu92sV+ppOCVDxkjFTh8/lpff8= +github.com/fluxcd/helm-controller/api v0.37.2/go.mod h1:BuXZhAX9blQviil6yUN5zNM4RB753yhyBTJXxXff7Mo= github.com/fluxcd/pkg/apis/acl v0.1.0 h1:EoAl377hDQYL3WqanWCdifauXqXbMyFuK82NnX6pH4Q= github.com/fluxcd/pkg/apis/acl v0.1.0/go.mod h1:zfEZzz169Oap034EsDhmCAGgnWlcWmIObZjYMusoXS8= -github.com/fluxcd/pkg/apis/kustomize v1.0.0 h1:5T2b/mRZiGWtP7fvSU8gZOApIc06H6SdLX3MlsE6LRo= -github.com/fluxcd/pkg/apis/kustomize v1.0.0/go.mod h1:XaDYlKxrf9D2zZWcZ0BnSIqGtcm8mdNtJGzZWYjCnQo= -github.com/fluxcd/pkg/apis/meta v1.0.0 h1:i9IGHd/VNEZELX7mepkiYFbJxs2J5znaB4cN9z2nPm8= -github.com/fluxcd/pkg/apis/meta v1.0.0/go.mod h1:04ZdpZYm1x+aL93K4daNHW1UX6E8K7Gyf5za9OhrE+U= -github.com/fluxcd/pkg/oci v0.23.0 h1:wUIvnGimHLl0pUErq0X6oqXakw9h0fnt7EZrTwueyp0= -github.com/fluxcd/pkg/oci v0.23.0/go.mod h1:y0jUgMqb6ionfX+8AjhnoG8D6hSSx4elhtrQ7Uo0WzI= +github.com/fluxcd/pkg/apis/kustomize v1.2.0 h1:vkVs+OumxaWso0jNCqdgFFfMHdh+qtZhykTkjl7OgmA= +github.com/fluxcd/pkg/apis/kustomize v1.2.0/go.mod h1:VF7tR/WuVFeum+HaMTHwp+eCtsHiiQlY6ihgqtAnW/M= +github.com/fluxcd/pkg/apis/meta v1.2.0 h1:O766PzGAdMdQKybSflGL8oV0+GgCNIkdsxfalRyzeO8= +github.com/fluxcd/pkg/apis/meta v1.2.0/go.mod h1:fU/Az9AoVyIxC0oI4ihG0NVMNnvrcCzdEym3wxjIQsc= +github.com/fluxcd/pkg/oci v0.34.0 h1:QIDaAiegnXJ6hXo6VREvaP5c3zLRfjIIG58IZ98xQZ0= +github.com/fluxcd/pkg/oci v0.34.0/go.mod h1:6+vIgdqP6AkFitvlyGx2W9f4s8q5Oguw9SNeN494MCY= github.com/fluxcd/pkg/version v0.2.2 h1:ZpVXECeLA5hIQMft11iLp6gN3cKcz6UNuVTQPw/bRdI= github.com/fluxcd/pkg/version v0.2.2/go.mod h1:NGnh/no8S6PyfCDxRFrPY3T5BUnqP48MxfxNRU0z8C0= -github.com/fluxcd/source-controller/api v0.36.1 h1:/ul69kJNEwrFG1Cwk2P/GwgraIxOETCL+tP+zMtxTu8= -github.com/fluxcd/source-controller/api v0.36.1/go.mod h1:GktZmd5Dfxo84vPFBdLDl0bBtiJRODfd47uugK0romU= +github.com/fluxcd/source-controller/api v1.2.3 h1:71mXv3Qg9HEhcpqOq1ObmoE+P/HuZNaAvxfI7dqZMo8= +github.com/fluxcd/source-controller/api v1.2.3/go.mod h1:5gaIVVH7hgb8p3HKFp8P6hGmZEC8fKSt4EcrG3g5vZI= +github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= +github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -286,7 +285,6 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fvbommel/sortorder v1.1.0 h1:fUmoe+HLsBTctBDoaBwpQo5N+nrCp8g/BjKb/6ZQmYw= github.com/fvbommel/sortorder v1.1.0/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= @@ -306,8 +304,8 @@ github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= -github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= +github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= +github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= @@ -324,6 +322,8 @@ github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfC github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/gobuffalo/logger v1.0.6 h1:nnZNpxYo0zx+Aj9RfMPBm+x9zAU2OayFh/xrAWi34HU= github.com/gobuffalo/logger v1.0.6/go.mod h1:J31TBEHR1QLV2683OXTAItYIg8pv2JMHnF/quuAbMjs= github.com/gobuffalo/packd v1.0.1 h1:U2wXfRr4E9DH8IdsDLlRFwTZTK7hLfq9qT/QHXGVe/0= @@ -336,8 +336,8 @@ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= -github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= +github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -379,8 +379,8 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/gnostic v0.6.9 h1:ZK/5VhkoX835RikCHpSUJV9a+S3e1zLh59YnyWeBW+0= -github.com/google/gnostic v0.6.9/go.mod h1:Nm8234We1lq6iB9OmlgNv3nH91XLLVZHCDayfA3xq+E= +github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= +github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -393,7 +393,6 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -420,6 +419,7 @@ github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= @@ -476,6 +476,10 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/arc/v2 v2.0.5 h1:l2zaLDubNhW4XO3LnliVj0GXO3+/CGNJAg1dcN2Fpfw= +github.com/hashicorp/golang-lru/arc/v2 v2.0.5/go.mod h1:ny6zBSQZi2JxIeYcv7kt2sH2PXJtirBN7RDhRpxPkxU= +github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvHgwfx2Vm4= +github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= @@ -502,7 +506,6 @@ github.com/itchyny/gojq v0.12.14 h1:6k8vVtsrhQSYgSGg827AD+PVVaB1NLXEdX+dda2oZCc= github.com/itchyny/gojq v0.12.14/go.mod h1:y1G7oO7XkcR1LPZO59KyoCRy08T3j9vDYRV0GgYSS+s= github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm6GE= github.com/itchyny/timefmt-go v0.1.5/go.mod h1:nEP7L+2YmAbT2kZ2HfSs1d8Xtw9LY8D2stDBckWakZ8= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= @@ -596,10 +599,11 @@ github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= @@ -650,14 +654,14 @@ github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vv github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc= -github.com/onsi/ginkgo/v2 v2.6.0/go.mod h1:63DOGlLAH8+REH8jUGdL3YpCpu7JODesutUjdENfUAc= +github.com/onsi/ginkgo/v2 v2.13.1 h1:LNGfMbR2OVGBfXjvRZIZ2YCTQdGKtPLvuI1rMCCj3OU= +github.com/onsi/ginkgo/v2 v2.13.1/go.mod h1:XStQ8QcGwLyF4HdfcZB8SFOS/MWCgDuXMSBe6zrvLgM= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E= -github.com/onsi/gomega v1.27.4/go.mod h1:riYq/GJKh8hhoM01HN6Vmuy93AarCXCBGpvFDK3q3fQ= +github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= +github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI= @@ -690,32 +694,32 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= -github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= -github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= -github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rubenv/sql-migrate v1.5.2 h1:bMDqOnrJVV/6JQgQ/MxOpU+AdO8uzYYA/TxFUBzFtS0= github.com/rubenv/sql-migrate v1.5.2/go.mod h1:H38GW8Vqf8F0Su5XignRyaRcbXbJunSWxs+kmzlg0Is= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= @@ -765,7 +769,6 @@ github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c h1:km8GpoQut05eY3GiY github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c/go.mod h1:cNQ3dwVJtS5Hmnjxy6AgTPd0Inb3pW05ftPSX7NZO7Q= github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef h1:Ch6Q+AZUxDBCVqdkI8FSpFyZDtCVBc2VmejdNrm5rRQ= github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef/go.mod h1:nXTWP6+gD5+LUJ8krVhhoeHjvHTutPxMYl5SvkcnJNE= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -788,12 +791,12 @@ github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSW github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/vito/go-interact v1.0.1 h1:O8xi8c93bRUv2Tb/v6HdiuGc+WnWt+AQzF74MOOdlBs= github.com/vito/go-interact v1.0.1/go.mod h1:HrdHSJXD2yn1MhlTwSIMeFgQ5WftiIorszVGd3S/DAA= -github.com/vmware-tanzu/carvel-kapp v0.56.0 h1:NgQA3bjrcxWmR6Z1pOzGR2wkh5d8nRpXX55Ol4Jthws= -github.com/vmware-tanzu/carvel-kapp v0.56.0/go.mod h1:I/yQqj44zhi7oln9Hyh00RwvFU+SFviEwtTxUTniIsw= -github.com/vmware-tanzu/carvel-kapp-controller v0.48.2 h1:O/b3BYILlTXZmkIR3hskFm1/GTHFYNFn4o8k2eZSFGM= -github.com/vmware-tanzu/carvel-kapp-controller v0.48.2/go.mod h1:9U0VZoB6oQhvkUoY+/NJHHn2E5QPsgza95DlBel4KRs= -github.com/vmware-tanzu/carvel-vendir v0.35.2 h1:8np0Wjvz3R+9ehGKn+NHf6QhOBGDE2l0S9LF5pM2LsI= -github.com/vmware-tanzu/carvel-vendir v0.35.2/go.mod h1:66JYYPMEUc7NJXez2SpJzqnwN9BMXNSzp9su54AWUtc= +github.com/vmware-tanzu/carvel-kapp v0.59.2 h1:3S2wG05ZNa6dhnsEepDg7e6N8zl3sLHEse5wvL1YCQM= +github.com/vmware-tanzu/carvel-kapp v0.59.2/go.mod h1:HAeURGw65eT00APPvnOQ8uDx5yvdrro2vtH5VYF1Zz0= +github.com/vmware-tanzu/carvel-kapp-controller v0.49.0 h1:qsVvuvhQjoSbrzVTsSsuiXzd2X5oK4H2Il4zAHDMD50= +github.com/vmware-tanzu/carvel-kapp-controller v0.49.0/go.mod h1:3rpvp98IrVlqZ/Vli9YmFsmtf1Z1A9OrdYyx9Wtl9KM= +github.com/vmware-tanzu/carvel-vendir v0.36.1 h1:/x93p4cmSSsv7ZqZPxV15VwzsV2VWcDthPPGtLwKEwQ= +github.com/vmware-tanzu/carvel-vendir v0.36.1/go.mod h1:rPGI/zItMK4QgLRpLix2aykoYufavHyKqqLTONXb2uE= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -809,12 +812,6 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= @@ -839,18 +836,16 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe go.starlark.net v0.0.0-20230726094710-7dadff395006 h1:hGOLDtPfO4cy1P66VUXt++umv2lWLXtt+qgc2uxr1Ss= go.starlark.net v0.0.0-20230726094710-7dadff395006/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= -go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= +go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c= +go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -953,7 +948,6 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= @@ -1172,8 +1166,8 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.3.0 h1:8NFhfS6gzxNqjLIYnZxg319wZ5Qjnx4m/CcX+Klzazc= -gomodules.xyz/jsonpatch/v2 v2.3.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= +gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= +gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1280,7 +1274,6 @@ google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20231212172506-995d672761c0 h1:YJ5pD9rF8o9Qtta0Cmy9rdBwkSjrTCT6XTiUQVOtIos= google.golang.org/genproto v0.0.0-20231212172506-995d672761c0/go.mod h1:l/k7rMz0vFTBPy+tFSGvXEd3z+BcoG1k7EHbqm+YBsY= google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917 h1:rcS6EyEaoCO52hQDupoSfrxI3R6C2Tq741is7X8OvnM= @@ -1360,14 +1353,13 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= -helm.sh/helm/v3 v3.11.3 h1:n1X5yaQTP5DYywlBOZMl2gX398Gp6YwFp/IAVj6+5D4= -helm.sh/helm/v3 v3.11.3/go.mod h1:S+sOdQc3BLvt09a9rSlKKVs9x0N/yx+No0y3qFw+FQ8= +helm.sh/helm/v3 v3.13.3 h1:0zPEdGqHcubehJHP9emCtzRmu8oYsJFRrlVF3TFj8xY= +helm.sh/helm/v3 v3.13.3/go.mod h1:3OKO33yI3p4YEXtTITN2+4oScsHeQe71KuzhlZ+aPfg= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1375,28 +1367,28 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.26.7 h1:Lf4iEBEJb5OFNmawtBfSZV/UNi9riSJ0t1qdhyZqI40= -k8s.io/api v0.26.7/go.mod h1:Vk9bMadzA49UHPmHB//lX7VRCQSXGoVwfLd3Sc1SSXI= -k8s.io/apiextensions-apiserver v0.26.3 h1:5PGMm3oEzdB1W/FTMgGIDmm100vn7IaUP5er36dB+YE= -k8s.io/apiextensions-apiserver v0.26.3/go.mod h1:jdA5MdjNWGP+njw1EKMZc64xAT5fIhN6VJrElV3sfpQ= -k8s.io/apimachinery v0.26.7 h1:590jSBwaSHCAFCqltaEogY/zybFlhGsnLteLpuF2wig= -k8s.io/apimachinery v0.26.7/go.mod h1:qYzLkrQ9lhrZRh0jNKo2cfvf/R1/kQONnSiyB7NUJU0= -k8s.io/apiserver v0.26.7 h1:NX/zBZZn4R+Cq6shwyn8Pn8REd0yJJ16dbtv9WkEVEU= -k8s.io/apiserver v0.26.7/go.mod h1:r0wDRWHI7VL/KlQLTkJJBVGZ3KeNfv+VetlyRtr86xs= -k8s.io/cli-runtime v0.26.7 h1:ZhAV9RK9wzXUeMKVvtVVX8jnsJcxw6hcSAu4K3eQbEo= -k8s.io/cli-runtime v0.26.7/go.mod h1:THp0KBlPxRk4SdpeoBmsuxJwNrwfpTT4+oDaNqhpv0c= -k8s.io/client-go v0.26.7 h1:hyU9aKHlwVOykgyxzGYkrDSLCc4+mimZVyUJjPyUn1E= -k8s.io/client-go v0.26.7/go.mod h1:okYjy0jtq6sdeztALDvCh24tg4opOQS1XNvsJlERDAo= -k8s.io/component-base v0.26.7 h1:uqsOyZh0Zqoaup8tmHa491D/CvgFdGUs+X2H/inNUKM= -k8s.io/component-base v0.26.7/go.mod h1:CZe1HTmX/DQdeBrb9XYOXzs96jXth8ZbFvhLMsoJLUg= +k8s.io/api v0.28.5 h1:XIPNr3nBgTEaCdEiwZ+dXaO9SB4NeTOZ2pNDRrFgfb4= +k8s.io/api v0.28.5/go.mod h1:98zkTCc60iSnqqCIyCB1GI7PYDiRDYTSfL0PRIxpM4c= +k8s.io/apiextensions-apiserver v0.28.5 h1:YKW9O9T/0Gkyl6LTFDLIhCbouSRh+pHt2vMLB38Snfc= +k8s.io/apiextensions-apiserver v0.28.5/go.mod h1:7p7TQ0X9zCJLNFlOTi5dncAi2dkPsdsrcvu5ILa7PEk= +k8s.io/apimachinery v0.28.5 h1:EEj2q1qdTcv2p5wl88KavAn3VlFRjREgRu8Sm/EuMPY= +k8s.io/apimachinery v0.28.5/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg= +k8s.io/apiserver v0.28.5 h1:3hRmQvqkWPCQr6kYi9lrMQF84V8/ScNx/8VyjhbPTi4= +k8s.io/apiserver v0.28.5/go.mod h1:tLFNbfELieGsn/utLLdSarJ99MjguBe11jkKITe3z4w= +k8s.io/cli-runtime v0.28.5 h1:xTL2Zpx//2+mKysdDUogpY0qwYf5Qkuij3Ikmr6xh5Q= +k8s.io/cli-runtime v0.28.5/go.mod h1:FZZy7DAfum2co5rjGMM86sumPojroT3V06mP45erB/0= +k8s.io/client-go v0.28.5 h1:6UNmc33vuJhh3+SAOEKku3QnKa+DtPKGnhO2MR0IEbk= +k8s.io/client-go v0.28.5/go.mod h1:+pt086yx1i0HAlHzM9S+RZQDqdlzuXFl4hY01uhpcpA= +k8s.io/component-base v0.28.5 h1:uFCW7USa8Fpme8dVtn2ZrdVaUPBRDwYJ+kNrV9OO1Cc= +k8s.io/component-base v0.28.5/go.mod h1:gw2d8O28okS9RrsPuJnD2mFl2It0HH9neHiGi2xoXcY= k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= -k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg= -k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg= -k8s.io/kubectl v0.26.7 h1:s24r6MjKDMW4sMOsuBLaNYQHlweTZeDC0BPkMiom8s0= -k8s.io/kubectl v0.26.7/go.mod h1:4PGqS2bPQ5yGE0ZSQajzYdWKFUAi8HiuWBZQ2/iEFHg= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= +k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +k8s.io/kubectl v0.28.5 h1:jq8xtiCCZPR8Cl/Qe1D7bLU0h8KtcunwfROqIekCUeU= +k8s.io/kubectl v0.28.5/go.mod h1:9WiwzqeKs3vLiDtEQPbjhqqysX+BIVMLt7C7gN+T5w8= +k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6RxQGZDnzuLcrUTI= +k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= oras.land/oras-go v1.2.4 h1:djpBY2/2Cs1PV87GSJlxv4voajVOMZxqqtq9AB8YNvY= oras.land/oras-go v1.2.4/go.mod h1:DYcGfb3YF1nKjcezfX2SNlDAeQFKSXmf+qrFmrh4324= oras.land/oras-go/v2 v2.3.1 h1:lUC6q8RkeRReANEERLfH86iwGn55lbSWP20egdFHVec= @@ -1404,15 +1396,15 @@ oras.land/oras-go/v2 v2.3.1/go.mod h1:5AQXVEu1X/FKp1F9DMOb5ZItZBOa0y5dha0yCm4NR9 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/controller-runtime v0.14.6 h1:oxstGVvXGNnMvY7TAESYk+lzr6S3V5VFxQ6d92KcwQA= -sigs.k8s.io/controller-runtime v0.14.6/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= +sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= -sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s= -sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= -sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 h1:XX3Ajgzov2RKUdc5jW3t5jwY7Bo7dcRm+tFxT+NfgY0= +sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3/go.mod h1:9n16EZKMhXBNSiUC5kSdFQJkdH3zbxS/JoO619G1VAY= +sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM7vh3b7HvGNfXrJ/xL6BDMS0v1V/HHg5U= +sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/script/e2e-test.sh b/script/e2e-test.sh index 5f4a11cdcde..18cfdfff733 100755 --- a/script/e2e-test.sh +++ b/script/e2e-test.sh @@ -32,7 +32,7 @@ DEX_IP=${DEX_IP:-"172.18.0.2"} ADDITIONAL_CLUSTER_IP=${ADDITIONAL_CLUSTER_IP:-"172.18.0.3"} KAPP_CONTROLLER_VERSION=${KAPP_CONTROLLER_VERSION:-"v0.42.0"} CHARTMUSEUM_VERSION=${CHARTMUSEUM_VERSION:-"3.9.1"} -FLUX_VERSION=${FLUX_VERSION:-"v0.37.0"} +FLUX_VERSION=${FLUX_VERSION:-"v2.2.2"} GKE_VERSION=${GKE_VERSION:-} IMG_PREFIX=${IMG_PREFIX:-"kubeapps/"} TESTS_GROUP=${TESTS_GROUP:-"${ALL_TESTS}"}