From 881ede370e40c1a7eb85d0ecfbef7db818e2fca2 Mon Sep 17 00:00:00 2001 From: Yetkin Timocin Date: Thu, 5 Mar 2026 16:26:27 -0800 Subject: [PATCH 01/11] chore: add gomod dependency updates to dependabot Signed-off-by: Yetkin Timocin --- .github/dependabot.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 600a98c2a..3e30a3ebe 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,3 +6,33 @@ updates: interval: "weekly" commit-message: prefix: "chore" + + - package-ecosystem: "gomod" + directory: "/" + schedule: + interval: "weekly" + commit-message: + prefix: "chore" + labels: + - "dependencies" + open-pull-requests-limit: 10 + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-major"] + groups: + kubernetes: + patterns: + - "k8s.io/*" + - "sigs.k8s.io/*" + azure-sdk: + patterns: + - "github.com/Azure/*" + - "github.com/AzureAD/*" + all-others: + patterns: + - "*" + exclude-patterns: + - "k8s.io/*" + - "sigs.k8s.io/*" + - "github.com/Azure/*" + - "github.com/AzureAD/*" From 2d6f9e5c1d527f3fe3fcd937202b71fc13937bb6 Mon Sep 17 00:00:00 2001 From: Wei Weng Date: Fri, 6 Mar 2026 15:03:24 -0500 Subject: [PATCH 02/11] feat: simplify selection count check in NamespaceWithResourceSelectors selection scope (#488) --- .../controller/resource_selector_resolver.go | 51 +++++----- .../resource_selector_resolver_test.go | 99 ++++--------------- 2 files changed, 44 insertions(+), 106 deletions(-) diff --git a/pkg/utils/controller/resource_selector_resolver.go b/pkg/utils/controller/resource_selector_resolver.go index 8fb3db6a7..154ec53a6 100644 --- a/pkg/utils/controller/resource_selector_resolver.go +++ b/pkg/utils/controller/resource_selector_resolver.go @@ -248,22 +248,18 @@ func (rs *ResourceSelectorResolver) gatherSelectedResource(placementKey types.Na Kind: selector.Kind, } if gvk == utils.NamespaceGVK && placementKey.Namespace == "" && selector.SelectionScope == placementv1beta1.NamespaceWithResourceSelectors { - namespaces, err := rs.fetchSelectedNamespaces(selector, placementKey.Name) + namespace, found, err := rs.fetchSelectedNamespace(selector, placementKey.Name) if err != nil { return nil, err } // NamespaceWithResourceSelectors mode requires exactly one namespace - if len(namespaces) == 0 { + if !found { err := fmt.Errorf("invalid clusterResourcePlacement %s: NamespaceWithResourceSelectors mode requires exactly one namespace, but no namespaces were selected", placementKey.Name) klog.ErrorS(err, "No namespaces selected with NamespaceWithResourceSelectors mode", "placement", placementKey.Name) return nil, NewUserError(err) } - if len(namespaces) > 1 { - err := fmt.Errorf("invalid clusterResourcePlacement %s: NamespaceWithResourceSelectors mode requires exactly one namespace, but %d namespaces were selected", placementKey.Name, len(namespaces)) - klog.ErrorS(err, "Multiple namespaces selected with NamespaceWithResourceSelectors mode", "placement", placementKey.Name, "namespaceCount", len(namespaces)) - return nil, NewUserError(err) - } - selectedNamespace = namespaces[0] + // Note: CEL validation ensures that at most one namespace can be selected. + selectedNamespace = namespace break } } @@ -591,32 +587,37 @@ func (rs *ResourceSelectorResolver) fetchResources(selector placementv1beta1.Res return selectedObjs, nil } -// fetchSelectedNamespaces retrieves the namespace names based on the namespace selector. -func (rs *ResourceSelectorResolver) fetchSelectedNamespaces(selector placementv1beta1.ResourceSelectorTerm, placementName string) ([]string, error) { - klog.V(2).InfoS("start to fetch selected namespaces", "selector", selector, "placement", placementName) +// fetchSelectedNamespace retrieves the namespace name based on the namespace selector. +// This function assumes the selector is a name-based selector (not label-based) as guaranteed by CEL validation. +// Returns the namespace name if found and not skipped, or empty string if not found/skipped. +func (rs *ResourceSelectorResolver) fetchSelectedNamespace(selector placementv1beta1.ResourceSelectorTerm, placementName string) (string, bool, error) { + klog.V(2).InfoS("start to fetch selected namespace", "selector", selector, "placement", placementName) // Use fetchResources to get namespace objects (handles label selector, name selector, deletion timestamps) placementKey := types.NamespacedName{Name: placementName} objs, err := rs.fetchResources(selector, placementKey) if err != nil { - return nil, err + return "", false, err } - // Filter by skipped namespaces and extract names - namespaceNames := make([]string, 0, len(objs)) - for _, obj := range objs { - ns, err := meta.Accessor(obj) - if err != nil { - return nil, NewUnexpectedBehaviorError(fmt.Errorf("failed to access the namespace object: %w", err)) - } - if !utils.ShouldPropagateNamespace(ns.GetName(), rs.SkippedNamespaces) { - klog.V(2).InfoS("skip namespace that is not allowed to propagate", "namespace", ns.GetName(), "placement", placementName) - continue - } - namespaceNames = append(namespaceNames, ns.GetName()) + // Since CEL validation ensures name-based selection only, we expect at most 1 namespace object + if len(objs) == 0 { + return "", false, nil + } + + // We should have exactly 1 namespace object due to CEL validation constraints + ns, err := meta.Accessor(objs[0]) + if err != nil { + return "", false, NewUnexpectedBehaviorError(fmt.Errorf("failed to access the namespace object: %w", err)) + } + + // Check if this namespace should be propagated + if !utils.ShouldPropagateNamespace(ns.GetName(), rs.SkippedNamespaces) { + klog.V(2).InfoS("skip namespace that is not allowed to propagate", "namespace", ns.GetName(), "placement", placementName) + return "", false, nil } - return namespaceNames, nil + return ns.GetName(), true, nil } func (rs *ResourceSelectorResolver) ShouldPropagateObj(namespace, placementName string, obj runtime.Object) (bool, error) { diff --git a/pkg/utils/controller/resource_selector_resolver_test.go b/pkg/utils/controller/resource_selector_resolver_test.go index 0167c7871..f74422dee 100644 --- a/pkg/utils/controller/resource_selector_resolver_test.go +++ b/pkg/utils/controller/resource_selector_resolver_test.go @@ -1493,56 +1493,6 @@ func TestGatherSelectedResource(t *testing.T) { // Should select only the namespace, not its child resources want: []*unstructured.Unstructured{testNamespace}, }, - { - name: "should error when selecting multiple namespaces with NamespaceWithResourceSelectors mode using label selector", - placementName: types.NamespacedName{Name: "test-placement"}, - selectors: []fleetv1beta1.ResourceSelectorTerm{ - { - Group: "", - Version: "v1", - Kind: "Namespace", - LabelSelector: &metav1.LabelSelector{ - MatchLabels: map[string]string{ - "environment": "test", - }, - }, - SelectionScope: fleetv1beta1.NamespaceWithResourceSelectors, - }, - { - Group: "apps", - Version: "v1", - Kind: "Deployment", - Name: "test-deployment", - }, - }, - resourceConfig: utils.NewResourceConfig(false), // default deny list - informerManager: func() *testinformer.FakeManager { - // Create a second test namespace with the same label - testNamespace2 := &unstructured.Unstructured{ - Object: map[string]interface{}{ - "apiVersion": "v1", - "kind": "Namespace", - "metadata": map[string]interface{}{ - "name": "test-ns-2", - "labels": map[string]interface{}{ - "environment": "test", - }, - }, - }, - } - testNamespace2.SetGroupVersionKind(utils.NamespaceGVK) - - return &testinformer.FakeManager{ - Listers: map[schema.GroupVersionResource]*testinformer.FakeLister{ - utils.NamespaceGVR: {Objects: []runtime.Object{testNamespace, testNamespace2}}, - utils.DeploymentGVR: {Objects: []runtime.Object{testDeployment}}, - }, - NamespaceScopedResources: []schema.GroupVersionResource{utils.DeploymentGVR}, - } - }(), - // Should error because multiple namespaces match the label selector - wantError: ErrUserError, - }, { name: "should error when selecting zero namespaces with NamespaceWithResourceSelectors mode", placementName: types.NamespacedName{Name: "test-placement"}, @@ -2201,7 +2151,7 @@ func TestSortResources(t *testing.T) { } } -func TestFetchSelectedNamespaces(t *testing.T) { +func TestFetchSelectedNamespace(t *testing.T) { testNs1 := &unstructured.Unstructured{ Object: map[string]interface{}{ "apiVersion": "v1", @@ -2246,7 +2196,8 @@ func TestFetchSelectedNamespaces(t *testing.T) { selector fleetv1beta1.ResourceSelectorTerm skippedNamespaces map[string]bool informerManager *testinformer.FakeManager - want []string + want string + wantFound bool wantErr bool }{ { @@ -2263,25 +2214,8 @@ func TestFetchSelectedNamespaces(t *testing.T) { utils.NamespaceGVR: {Objects: []runtime.Object{testNs1, testNs2}}, }, }, - want: []string{"test-ns-1"}, - }, - { - name: "select namespaces by label selector", - selector: fleetv1beta1.ResourceSelectorTerm{ - Group: "", - Version: "v1", - Kind: "Namespace", - LabelSelector: &metav1.LabelSelector{ - MatchLabels: map[string]string{"env": "prod"}, - }, - }, - skippedNamespaces: nil, - informerManager: &testinformer.FakeManager{ - Listers: map[schema.GroupVersionResource]*testinformer.FakeLister{ - utils.NamespaceGVR: {Objects: []runtime.Object{testNs1, testNs2}}, - }, - }, - want: []string{"test-ns-1"}, + want: "test-ns-1", + wantFound: true, }, { name: "filter out skipped namespaces", @@ -2289,17 +2223,16 @@ func TestFetchSelectedNamespaces(t *testing.T) { Group: "", Version: "v1", Kind: "Namespace", - LabelSelector: &metav1.LabelSelector{ - MatchLabels: map[string]string{}, - }, + Name: "kube-system", // Use name-based selection instead of label selector }, skippedNamespaces: map[string]bool{"kube-system": true}, informerManager: &testinformer.FakeManager{ Listers: map[schema.GroupVersionResource]*testinformer.FakeLister{ - utils.NamespaceGVR: {Objects: []runtime.Object{testNs1, skippedNs}}, + utils.NamespaceGVR: {Objects: []runtime.Object{testNs1, testNs2, skippedNs}}, }, }, - want: []string{"test-ns-1"}, + want: "", // Empty because kube-system is skipped + wantFound: false, }, { name: "no namespaces match selector", @@ -2315,7 +2248,8 @@ func TestFetchSelectedNamespaces(t *testing.T) { utils.NamespaceGVR: {Objects: []runtime.Object{testNs1, testNs2}}, }, }, - want: []string{}, + want: "", + wantFound: false, }, } @@ -2328,13 +2262,16 @@ func TestFetchSelectedNamespaces(t *testing.T) { RestMapper: newFakeRESTMapper(), } - got, err := rsr.fetchSelectedNamespaces(tt.selector, "test-placement") + gotNamespace, gotFound, err := rsr.fetchSelectedNamespace(tt.selector, "test-placement") if (err != nil) != tt.wantErr { - t.Errorf("fetchSelectedNamespaces() error = %v, wantErr %v", err, tt.wantErr) + t.Errorf("fetchSelectedNamespace() error = %v, wantErr %v", err, tt.wantErr) return } - if diff := cmp.Diff(tt.want, got); diff != "" { - t.Errorf("fetchSelectedNamespaces() mismatch (-want +got):\n%s", diff) + if gotNamespace != tt.want { + t.Errorf("fetchSelectedNamespace() namespace = %v, want %v", gotNamespace, tt.want) + } + if gotFound != tt.wantFound { + t.Errorf("fetchSelectedNamespace() found = %v, wantFound %v", gotFound, tt.wantFound) } }) } From d46701ef1f73689f52c927ed025be5cd4d0e6445 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 13:48:42 +1100 Subject: [PATCH 03/11] chore: bump actions/upload-artifact from 6 to 7 (#470) --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bde484de2..fb156fc39 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -167,7 +167,7 @@ jobs: - name: Upload logs if: always() - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: e2e-logs-${{ matrix.customized-settings }} path: test/e2e/logs-${{ matrix.customized-settings }}/ From 6c46f12bfc6eda0b5cae0a054aa7f29d683ff17c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Mar 2026 13:49:36 +1100 Subject: [PATCH 04/11] chore: bump step-security/harden-runner from 2.15.0 to 2.15.1 (#497) --- .github/workflows/codespell.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml index 7ebd6f413..ee9d7ae79 100644 --- a/.github/workflows/codespell.yml +++ b/.github/workflows/codespell.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 + uses: step-security/harden-runner@58077d3c7e43986b6b15fba718e8ea69e387dfcc # v2.15.1 with: egress-policy: audit From 4ef34d84113a817071647dab496db11ef630acc8 Mon Sep 17 00:00:00 2001 From: Wei Weng Date: Mon, 16 Mar 2026 19:05:06 -0400 Subject: [PATCH 05/11] fix: use fixed version go import (#515) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c3cfb251c..c7e9495d8 100644 --- a/Makefile +++ b/Makefile @@ -57,7 +57,7 @@ STATICCHECK_VER := v0.6.1 STATICCHECK_BIN := staticcheck STATICCHECK := $(abspath $(TOOLS_BIN_DIR)/$(STATICCHECK_BIN)-$(STATICCHECK_VER)) -GOIMPORTS_VER := latest +GOIMPORTS_VER := v0.42.0 GOIMPORTS_BIN := goimports GOIMPORTS := $(abspath $(TOOLS_BIN_DIR)/$(GOIMPORTS_BIN)-$(GOIMPORTS_VER)) From 885ff96dc9def13886d370813ca9e6abf2bc8aa3 Mon Sep 17 00:00:00 2001 From: Wei Weng Date: Mon, 16 Mar 2026 19:34:15 -0400 Subject: [PATCH 06/11] chore: remove v1beta1 flag from chart (#502) --- charts/hub-agent/README.md | 1 - .../cluster.kubernetes-fleet.io_internalmemberclusters.yaml | 1 + .../crds/cluster.kubernetes-fleet.io_memberclusters.yaml | 1 + charts/hub-agent/templates/crds/crps.yaml | 4 ---- charts/hub-agent/templates/crds/internalmemberclusters.yaml | 4 ---- charts/hub-agent/templates/crds/memberclusters.yaml | 4 ---- ...acement.kubernetes-fleet.io_clusterresourceplacements.yaml | 1 + .../templates/crds/placement.kubernetes-fleet.io_works.yaml | 1 + charts/hub-agent/templates/crds/works.yaml | 4 ---- charts/hub-agent/templates/deployment.yaml | 1 - charts/hub-agent/values.yaml | 1 - charts/member-agent/templates/crds/appliedworks.yaml | 4 ---- .../crds/placement.kubernetes-fleet.io_appliedworks.yaml | 1 + charts/member-agent/templates/deployment.yaml | 1 - charts/member-agent/values.yaml | 2 -- hack/Azure/property-based-scheduling.md | 2 -- hack/Azure/setup/createHubCluster.sh | 1 - hack/Azure/setup/joinMC.sh | 3 +-- hack/membership/join.sh | 3 +-- hack/membership/joinMC.sh | 3 +-- test/e2e/setup.sh | 2 -- test/upgrade/setup.sh | 3 +-- test/upgrade/upgrade.sh | 3 +-- 23 files changed, 10 insertions(+), 41 deletions(-) create mode 120000 charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_internalmemberclusters.yaml create mode 120000 charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_memberclusters.yaml delete mode 100644 charts/hub-agent/templates/crds/crps.yaml delete mode 100644 charts/hub-agent/templates/crds/internalmemberclusters.yaml delete mode 100644 charts/hub-agent/templates/crds/memberclusters.yaml create mode 120000 charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_clusterresourceplacements.yaml create mode 120000 charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_works.yaml delete mode 100644 charts/hub-agent/templates/crds/works.yaml delete mode 100644 charts/member-agent/templates/crds/appliedworks.yaml create mode 120000 charts/member-agent/templates/crds/placement.kubernetes-fleet.io_appliedworks.yaml diff --git a/charts/hub-agent/README.md b/charts/hub-agent/README.md index 84dd27c20..12663dffb 100644 --- a/charts/hub-agent/README.md +++ b/charts/hub-agent/README.md @@ -103,7 +103,6 @@ _See [helm install](https://helm.sh/docs/helm/helm_install/) for command documen | `webhookClientConnectionType` | Connection type for webhook client (service or url) | `service` | | `useCertManager` | Use cert-manager for webhook certificate management (requires `enableWorkload=true`) | `false` | | `webhookCertSecretName` | Name of the Secret where cert-manager stores the certificate (required when enabled) | `unset` | -| `enableV1Beta1APIs` | Watch for v1beta1 APIs | `true` | | `enableClusterInventoryAPI` | Enable cluster inventory APIs | `true` | | `enableStagedUpdateRunAPIs` | Enable staged update run APIs | `true` | | `enableEvictionAPIs` | Enable eviction APIs | `true` | diff --git a/charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_internalmemberclusters.yaml b/charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_internalmemberclusters.yaml new file mode 120000 index 000000000..11680c7c6 --- /dev/null +++ b/charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_internalmemberclusters.yaml @@ -0,0 +1 @@ +../../../../config/crd/bases/cluster.kubernetes-fleet.io_internalmemberclusters.yaml \ No newline at end of file diff --git a/charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_memberclusters.yaml b/charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_memberclusters.yaml new file mode 120000 index 000000000..95bcf85f3 --- /dev/null +++ b/charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_memberclusters.yaml @@ -0,0 +1 @@ +../../../../config/crd/bases/cluster.kubernetes-fleet.io_memberclusters.yaml \ No newline at end of file diff --git a/charts/hub-agent/templates/crds/crps.yaml b/charts/hub-agent/templates/crds/crps.yaml deleted file mode 100644 index 8e92ec2c5..000000000 --- a/charts/hub-agent/templates/crds/crps.yaml +++ /dev/null @@ -1,4 +0,0 @@ -{{- $files := .Files }} -{{- if .Values.enableV1Beta1APIs }} -{{ $files.Get "crdbases/placement.kubernetes-fleet.io_clusterresourceplacements.yaml" }} -{{- end }} diff --git a/charts/hub-agent/templates/crds/internalmemberclusters.yaml b/charts/hub-agent/templates/crds/internalmemberclusters.yaml deleted file mode 100644 index f036fa06f..000000000 --- a/charts/hub-agent/templates/crds/internalmemberclusters.yaml +++ /dev/null @@ -1,4 +0,0 @@ -{{- $files := .Files }} -{{- if .Values.enableV1Beta1APIs }} -{{ $files.Get "crdbases/cluster.kubernetes-fleet.io_internalmemberclusters.yaml" }} -{{- end }} diff --git a/charts/hub-agent/templates/crds/memberclusters.yaml b/charts/hub-agent/templates/crds/memberclusters.yaml deleted file mode 100644 index a77392097..000000000 --- a/charts/hub-agent/templates/crds/memberclusters.yaml +++ /dev/null @@ -1,4 +0,0 @@ -{{- $files := .Files }} -{{- if .Values.enableV1Beta1APIs }} -{{ $files.Get "crdbases/cluster.kubernetes-fleet.io_memberclusters.yaml" }} -{{- end }} diff --git a/charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_clusterresourceplacements.yaml b/charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_clusterresourceplacements.yaml new file mode 120000 index 000000000..b956d5da3 --- /dev/null +++ b/charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_clusterresourceplacements.yaml @@ -0,0 +1 @@ +../../../../config/crd/bases/placement.kubernetes-fleet.io_clusterresourceplacements.yaml \ No newline at end of file diff --git a/charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_works.yaml b/charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_works.yaml new file mode 120000 index 000000000..ffafd487a --- /dev/null +++ b/charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_works.yaml @@ -0,0 +1 @@ +../../../../config/crd/bases/placement.kubernetes-fleet.io_works.yaml \ No newline at end of file diff --git a/charts/hub-agent/templates/crds/works.yaml b/charts/hub-agent/templates/crds/works.yaml deleted file mode 100644 index ad3fa6924..000000000 --- a/charts/hub-agent/templates/crds/works.yaml +++ /dev/null @@ -1,4 +0,0 @@ -{{- $files := .Files }} -{{- if .Values.enableV1Beta1APIs }} -{{ $files.Get "crdbases/placement.kubernetes-fleet.io_works.yaml" }} -{{- end }} diff --git a/charts/hub-agent/templates/deployment.yaml b/charts/hub-agent/templates/deployment.yaml index 5ce8dadbb..c1acd945c 100644 --- a/charts/hub-agent/templates/deployment.yaml +++ b/charts/hub-agent/templates/deployment.yaml @@ -34,7 +34,6 @@ spec: - --webhook-client-connection-type={{.Values.webhookClientConnectionType}} - --v={{ .Values.logVerbosity }} - -add_dir_header - - --enable-v1beta1-apis={{ .Values.enableV1Beta1APIs }} - --enable-cluster-inventory-apis={{ .Values.enableClusterInventoryAPI }} - --enable-staged-update-run-apis={{ .Values.enableStagedUpdateRunAPIs }} - --enable-eviction-apis={{ .Values.enableEvictionAPIs}} diff --git a/charts/hub-agent/values.yaml b/charts/hub-agent/values.yaml index a462ff512..e87061b58 100644 --- a/charts/hub-agent/values.yaml +++ b/charts/hub-agent/values.yaml @@ -44,7 +44,6 @@ tolerations: [] affinity: {} -enableV1Beta1APIs: true enableClusterInventoryAPI: true enableStagedUpdateRunAPIs: true enableEvictionAPIs: true diff --git a/charts/member-agent/templates/crds/appliedworks.yaml b/charts/member-agent/templates/crds/appliedworks.yaml deleted file mode 100644 index 90c84adb0..000000000 --- a/charts/member-agent/templates/crds/appliedworks.yaml +++ /dev/null @@ -1,4 +0,0 @@ -{{- $files := .Files }} -{{- if .Values.enableV1Beta1APIs }} -{{ $files.Get "crdbases/placement.kubernetes-fleet.io_appliedworks.yaml" }} -{{- end }} diff --git a/charts/member-agent/templates/crds/placement.kubernetes-fleet.io_appliedworks.yaml b/charts/member-agent/templates/crds/placement.kubernetes-fleet.io_appliedworks.yaml new file mode 120000 index 000000000..bf036b9b8 --- /dev/null +++ b/charts/member-agent/templates/crds/placement.kubernetes-fleet.io_appliedworks.yaml @@ -0,0 +1 @@ +../../../../config/crd/bases/placement.kubernetes-fleet.io_appliedworks.yaml \ No newline at end of file diff --git a/charts/member-agent/templates/deployment.yaml b/charts/member-agent/templates/deployment.yaml index 142061ade..30bf4076b 100644 --- a/charts/member-agent/templates/deployment.yaml +++ b/charts/member-agent/templates/deployment.yaml @@ -32,7 +32,6 @@ spec: {{- end }} - --v={{ .Values.logVerbosity }} - -add_dir_header - - --enable-v1beta1-apis={{ .Values.enableV1Beta1APIs }} - --enable-pprof={{ .Values.enablePprof }} - --pprof-port={{ .Values.pprofPort }} - --hub-pprof-port={{ .Values.hubPprofPort }} diff --git a/charts/member-agent/values.yaml b/charts/member-agent/values.yaml index 7c5beadf7..8777af2ac 100644 --- a/charts/member-agent/values.yaml +++ b/charts/member-agent/values.yaml @@ -59,8 +59,6 @@ azure: tlsClientInsecure: true #TODO should be false in the production useCAAuth: false -enableV1Beta1APIs: true - enablePprof: true pprofPort: 6065 hubPprofPort: 6066 diff --git a/hack/Azure/property-based-scheduling.md b/hack/Azure/property-based-scheduling.md index c8f271362..bedb04d42 100644 --- a/hack/Azure/property-based-scheduling.md +++ b/hack/Azure/property-based-scheduling.md @@ -123,7 +123,6 @@ helm install hub-agent charts/hub-agent/ \ --set namespace=fleet-system \ --set enableWebhook=true \ --set webhookClientConnectionType=service \ - --set enableV1Beta1APIs=true ``` It will take a few moments to complete the installation. After the command returns, verify that the Fleet hub agent is up and running with this command: @@ -185,7 +184,6 @@ do --set config.memberClusterName="${MEMBER_CLUSTERS[$i]}" \ --set logVerbosity=5 \ --set namespace=fleet-system \ - --set enableV1Beta1APIs=true \ --set propertyProvider=$PROPERTY_PROVIDER done ``` diff --git a/hack/Azure/setup/createHubCluster.sh b/hack/Azure/setup/createHubCluster.sh index 388bd806c..9d37a1bc8 100755 --- a/hack/Azure/setup/createHubCluster.sh +++ b/hack/Azure/setup/createHubCluster.sh @@ -30,7 +30,6 @@ helm install hub-agent charts/hub-agent/ \ --set namespace=fleet-system \ --set enableWebhook=false \ --set webhookClientConnectionType=service \ - --set enableV1Beta1APIs=true \ --set clusterUnhealthyThreshold="3m0s" \ --set forceDeleteWaitTime="1m0s" \ --set resources.limits.cpu=4 \ diff --git a/hack/Azure/setup/joinMC.sh b/hack/Azure/setup/joinMC.sh index 899c54819..f45b83559 100755 --- a/hack/Azure/setup/joinMC.sh +++ b/hack/Azure/setup/joinMC.sh @@ -88,8 +88,7 @@ helm install member-agent charts/member-agent/ \ --set refreshtoken.pullPolicy=Always \ --set config.memberClusterName=$MEMBER_CLUSTER \ --set logVerbosity=5 \ - --set namespace=fleet-system \ - --set enableV1Beta1APIs=true + --set namespace=fleet-system kubectl get pods -A kubectl config use-context $HUB_CLUSTER_CONTEXT diff --git a/hack/membership/join.sh b/hack/membership/join.sh index 695950bb9..f84765d51 100755 --- a/hack/membership/join.sh +++ b/hack/membership/join.sh @@ -126,5 +126,4 @@ helm install member-agent charts/member-agent/ \ --set refreshtoken.pullPolicy=Never \ --set config.memberClusterName="$MEMBER_CLUSTER" \ --set logVerbosity=6 \ - --set namespace=fleet-system \ - --set enableV1Beta1APIs=true + --set namespace=fleet-system diff --git a/hack/membership/joinMC.sh b/hack/membership/joinMC.sh index 7a4ac4224..38c524fda 100755 --- a/hack/membership/joinMC.sh +++ b/hack/membership/joinMC.sh @@ -122,8 +122,7 @@ helm upgrade --install member-agent charts/member-agent/ \ --set refreshtoken.pullPolicy=Always \ --set config.memberClusterName=$MEMBER_CLUSTER \ --set logVerbosity=5 \ - --set namespace=fleet-system \ - --set enableV1Beta1APIs=true + --set namespace=fleet-system kubectl get pods -A kubectl config use-context $HUB_CLUSTER_CONTEXT diff --git a/test/e2e/setup.sh b/test/e2e/setup.sh index 72f108cdf..a1ecad710 100755 --- a/test/e2e/setup.sh +++ b/test/e2e/setup.sh @@ -211,7 +211,6 @@ do --set config.memberClusterName="kind-${MEMBER_CLUSTERS[$i]}" \ --set logVerbosity=5 \ --set namespace=fleet-system \ - --set enableV1Beta1APIs=true \ --set priorityQueue.enabled=true \ --set workApplierRequeueRateLimiterMaxSlowBackoffDelaySeconds=5 \ --set workApplierRequeueRateLimiterMaxFastBackoffDelaySeconds=5 \ @@ -230,7 +229,6 @@ do --set config.memberClusterName="kind-${MEMBER_CLUSTERS[$i]}" \ --set logVerbosity=5 \ --set namespace=fleet-system \ - --set enableV1Beta1APIs=true \ --set priorityQueue.enabled=true \ --set workApplierRequeueRateLimiterMaxSlowBackoffDelaySeconds=5 \ --set workApplierRequeueRateLimiterMaxFastBackoffDelaySeconds=5 \ diff --git a/test/upgrade/setup.sh b/test/upgrade/setup.sh index 339bab0ee..ca1ec1bb4 100755 --- a/test/upgrade/setup.sh +++ b/test/upgrade/setup.sh @@ -123,8 +123,7 @@ do --set refreshtoken.pullPolicy=Never \ --set config.memberClusterName="kind-${MEMBER_CLUSTERS[$i]}" \ --set logVerbosity=5 \ - --set namespace=fleet-system \ - --set enableV1Beta1APIs=true + --set namespace=fleet-system done echo "Setup for the before upgrade environment has been completed." diff --git a/test/upgrade/upgrade.sh b/test/upgrade/upgrade.sh index 6f1caa366..b51062213 100755 --- a/test/upgrade/upgrade.sh +++ b/test/upgrade/upgrade.sh @@ -85,7 +85,6 @@ if [ -n "$UPGRADE_MEMBER_SIDE" ]; then --set refreshtoken.pullPolicy=Never \ --set config.memberClusterName="kind-${MEMBER_CLUSTERS[$i]}" \ --set logVerbosity=5 \ - --set namespace=fleet-system \ - --set enableV1Beta1APIs=true + --set namespace=fleet-system done fi From 2bee163a9427a66379d85f20e2d644c20e6a9f5f Mon Sep 17 00:00:00 2001 From: Ryan Zhang Date: Tue, 17 Mar 2026 07:15:44 -0700 Subject: [PATCH 07/11] fix: fix the appVersion default value that doesn't start with v (#483) --- .github/workflows/chart.yml | 13 +++++++------ Makefile | 8 ++++---- charts/hub-agent/Chart.yaml | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.github/workflows/chart.yml b/.github/workflows/chart.yml index 17b71aca6..e01ef19ec 100644 --- a/.github/workflows/chart.yml +++ b/.github/workflows/chart.yml @@ -57,18 +57,19 @@ jobs: run: | set -euo pipefail - RELEASE_VERSION="${{ needs.export-registry.outputs.version }}" - + RELEASE_TAG="${{ needs.export-registry.outputs.tag }}" + CHART_VERSION="${{ needs.export-registry.outputs.version }}" OCI_REGISTRY="${{ needs.export-registry.outputs.registry }}/charts" - make helm-push REGISTRY="${OCI_REGISTRY}" TAG="${RELEASE_VERSION}" + + make helm-push REGISTRY="${OCI_REGISTRY}" TAG="${RELEASE_TAG}" CHART_VERSION="${CHART_VERSION}" - name: Verify chart appVersion matches release tag run: | set -euo pipefail - RELEASE_VERSION="${{ needs.export-registry.outputs.version }}" - CHART_VERSION="${RELEASE_VERSION}" - EXPECTED_APP_VERSION="${RELEASE_VERSION}" + RELEASE_TAG="${{ needs.export-registry.outputs.tag }}" + CHART_VERSION="${{ needs.export-registry.outputs.version }}" + EXPECTED_APP_VERSION="${RELEASE_TAG}" rm -rf .helm-verify mkdir -p .helm-verify diff --git a/Makefile b/Makefile index c7e9495d8..16cfb16af 100644 --- a/Makefile +++ b/Makefile @@ -235,10 +235,10 @@ push: ## Build and push all Docker images .PHONY: helm-push helm-push: ## Package and push Helm charts to OCI registry - helm package charts/hub-agent --version $(TAG) --app-version $(TAG) --destination .helm-packages - helm package charts/member-agent --version $(TAG) --app-version $(TAG) --destination .helm-packages - helm push .helm-packages/hub-agent-$(TAG).tgz oci://$(REGISTRY) - helm push .helm-packages/member-agent-$(TAG).tgz oci://$(REGISTRY) + helm package charts/hub-agent --version $(CHART_VERSION) --app-version $(TAG) --destination .helm-packages + helm package charts/member-agent --version $(CHART_VERSION) --app-version $(TAG) --destination .helm-packages + helm push .helm-packages/hub-agent-$(CHART_VERSION).tgz oci://$(REGISTRY) + helm push .helm-packages/member-agent-$(CHART_VERSION).tgz oci://$(REGISTRY) rm -rf .helm-packages # By default, docker buildx create will pull image moby/buildkit:buildx-stable-1 and hit the too many requests error diff --git a/charts/hub-agent/Chart.yaml b/charts/hub-agent/Chart.yaml index c5f4e7768..efa8648a8 100644 --- a/charts/hub-agent/Chart.yaml +++ b/charts/hub-agent/Chart.yaml @@ -21,4 +21,4 @@ version: 0.1.0 # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.1.0" +appVersion: "v0.1.0" From e40778497b8a91d43c314c6c32f13998f6895280 Mon Sep 17 00:00:00 2001 From: michaelawyu Date: Thu, 19 Mar 2026 01:21:30 +1100 Subject: [PATCH 08/11] fix: address a misconfigured default value in hub agent flag setup (#523) --- cmd/hubagent/options/options_test.go | 117 +++++++++++++++++++++++++++ cmd/hubagent/options/webhooks.go | 41 ++++++---- 2 files changed, 144 insertions(+), 14 deletions(-) diff --git a/cmd/hubagent/options/options_test.go b/cmd/hubagent/options/options_test.go index c638f2d12..79205d5df 100644 --- a/cmd/hubagent/options/options_test.go +++ b/cmd/hubagent/options/options_test.go @@ -706,6 +706,123 @@ func TestPlacementManagementOptions(t *testing.T) { } } +// TestWebhookOptions tests the parsing and validation logic of the webhook options defined in WebhookOptions. +func TestWebhookOptions(t *testing.T) { + testCases := []struct { + name string + flagSetName string + args []string + wantWebhookOpts WebhookOptions + wantErred bool + wantErrMsgSubStr string + }{ + { + name: "all default", + flagSetName: "allDefault", + args: []string{}, + wantWebhookOpts: WebhookOptions{ + EnableWebhooks: true, + ClientConnectionType: "url", + ServiceName: "fleetwebhook", + EnableGuardRail: false, + GuardRailWhitelistedUsers: "", + GuardRailDenyModifyMemberClusterLabels: false, + EnableWorkload: false, + UseCertManager: false, + }, + }, + { + name: "all specified", + flagSetName: "allSpecified", + args: []string{ + "--enable-webhook=false", + "--webhook-client-connection-type=service", + "--webhook-service-name=customwebhook", + "--enable-guard-rail=true", + "--whitelisted-users=user1,user2", + "--deny-modify-member-cluster-labels=true", + "--enable-workload=true", + "--use-cert-manager=true", + }, + wantWebhookOpts: WebhookOptions{ + EnableWebhooks: false, + ClientConnectionType: "service", + ServiceName: "customwebhook", + EnableGuardRail: true, + GuardRailWhitelistedUsers: "user1,user2", + GuardRailDenyModifyMemberClusterLabels: true, + EnableWorkload: true, + UseCertManager: true, + }, + }, + { + name: "webhook client connection type URL (case-insensitive)", + flagSetName: "webhookClientConnTypeURL", + args: []string{"--webhook-client-connection-type=URL"}, + wantWebhookOpts: WebhookOptions{ + EnableWebhooks: true, + ClientConnectionType: "url", + ServiceName: "fleetwebhook", + EnableGuardRail: false, + GuardRailWhitelistedUsers: "", + GuardRailDenyModifyMemberClusterLabels: false, + EnableWorkload: false, + UseCertManager: false, + }, + }, + { + name: "webhook client connection type service (case-insensitive)", + flagSetName: "webhookClientConnTypeService", + args: []string{"--webhook-client-connection-type=Service"}, + wantWebhookOpts: WebhookOptions{ + EnableWebhooks: true, + ClientConnectionType: "service", + ServiceName: "fleetwebhook", + EnableGuardRail: false, + GuardRailWhitelistedUsers: "", + GuardRailDenyModifyMemberClusterLabels: false, + EnableWorkload: false, + UseCertManager: false, + }, + }, + { + name: "invalid webhook client connection type", + flagSetName: "webhookClientConnTypeInvalid", + args: []string{"--webhook-client-connection-type=ftp"}, + wantErred: true, + wantErrMsgSubStr: "invalid webhook client connection type", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + flags := flag.NewFlagSet(tc.flagSetName, flag.ContinueOnError) + webhookOpts := WebhookOptions{} + webhookOpts.AddFlags(flags) + + err := flags.Parse(tc.args) + if tc.wantErred { + if err == nil { + t.Fatalf("flag Parse() = nil, want erred") + } + + if !strings.Contains(err.Error(), tc.wantErrMsgSubStr) { + t.Fatalf("flag Parse() error = %v, want error msg with sub-string %s", err, tc.wantErrMsgSubStr) + } + return + } + + if err != nil { + t.Fatalf("flag Parse() = %v, want nil", err) + } + + if diff := cmp.Diff(webhookOpts, tc.wantWebhookOpts); diff != "" { + t.Errorf("webhook options diff (-got, +want):\n%s", diff) + } + }) + } +} + // TestRateLimitOptions tests the parsing and validation logic of the rate limit options defined in RateLimitOptions. func TestRateLimitOptions(t *testing.T) { testCases := []struct { diff --git a/cmd/hubagent/options/webhooks.go b/cmd/hubagent/options/webhooks.go index efa23aa6c..f34bd7423 100644 --- a/cmd/hubagent/options/webhooks.go +++ b/cmd/hubagent/options/webhooks.go @@ -71,22 +71,10 @@ func (o *WebhookOptions) AddFlags(flags *flag.FlagSet) { "Enable the KubeFleet webhooks or not.", ) - flags.Func( + flags.Var( + newWebhookClientConnTypeValueWithValidation(string(URL), &o.ClientConnectionType), "webhook-client-connection-type", "The connection type used by the webhook client. Valid values are `url` and `service`. Defaults to `url`. This option only applies if webhooks are enabled.", - func(s string) error { - if len(s) == 0 { - o.ClientConnectionType = "url" - return nil - } - - parsedStr, err := parseWebhookClientConnectionString(s) - if err != nil { - return fmt.Errorf("invalid webhook client connection type: %w", err) - } - o.ClientConnectionType = string(parsedStr) - return nil - }, ) flags.StringVar( @@ -131,3 +119,28 @@ func (o *WebhookOptions) AddFlags(flags *flag.FlagSet) { "Use the cert-manager project for managing KubeFleet webhook server certificates or not. If set to false, the system will use self-signed certificates. If set to true, the EnableWorkload option must be set to true as well. This option only applies if webhooks are enabled.", ) } + +type WebhookClientConnTypeValueWithValidation string + +func (v *WebhookClientConnTypeValueWithValidation) String() string { + return string(*v) +} + +func (v *WebhookClientConnTypeValueWithValidation) Set(s string) error { + if len(s) == 0 { + *v = "url" + return nil + } + + parsedStr, err := parseWebhookClientConnectionString(s) + if err != nil { + return fmt.Errorf("invalid webhook client connection type: %w", err) + } + *v = WebhookClientConnTypeValueWithValidation(parsedStr) + return nil +} + +func newWebhookClientConnTypeValueWithValidation(defaultVal string, p *string) *WebhookClientConnTypeValueWithValidation { + *p = defaultVal + return (*WebhookClientConnTypeValueWithValidation)(p) +} From 41b8e2bd40dd7004acf231be9d7124d684720d89 Mon Sep 17 00:00:00 2001 From: Wei Weng Date: Wed, 18 Mar 2026 17:51:46 +0000 Subject: [PATCH 09/11] remove enableV1Beta1APIs gate for CRD installer Signed-off-by: Wei Weng --- charts/hub-agent/templates/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/hub-agent/templates/deployment.yaml b/charts/hub-agent/templates/deployment.yaml index 5590397f4..23fd4197e 100644 --- a/charts/hub-agent/templates/deployment.yaml +++ b/charts/hub-agent/templates/deployment.yaml @@ -20,7 +20,7 @@ spec: spec: serviceAccountName: {{ include "hub-agent.fullname" . }}-sa initContainers: - {{- if and .Values.crdInstaller.enabled .Values.enableV1Beta1APIs }} + {{- if .Values.crdInstaller.enabled }} - name: crd-installer image: "{{ .Values.crdInstaller.image.repository }}:{{ .Values.crdInstaller.image.tag }}" imagePullPolicy: {{ .Values.crdInstaller.image.pullPolicy }} From da243801a2dba75eda553cee407dbc7749b6802c Mon Sep 17 00:00:00 2001 From: Wei Weng Date: Wed, 18 Mar 2026 19:04:11 +0000 Subject: [PATCH 10/11] revert crd symlinks to template wrapper Signed-off-by: Wei Weng --- .../cluster.kubernetes-fleet.io_internalmemberclusters.yaml | 1 - .../crds/cluster.kubernetes-fleet.io_memberclusters.yaml | 1 - charts/hub-agent/templates/crds/crps.yaml | 2 ++ charts/hub-agent/templates/crds/internalmemberclusters.yaml | 2 ++ charts/hub-agent/templates/crds/memberclusters.yaml | 2 ++ ...placement.kubernetes-fleet.io_clusterresourceplacements.yaml | 1 - .../templates/crds/placement.kubernetes-fleet.io_works.yaml | 1 - charts/hub-agent/templates/crds/works.yaml | 2 ++ .../crds/placement.kubernetes-fleet.io_appliedworks.yaml | 1 - 9 files changed, 8 insertions(+), 5 deletions(-) delete mode 120000 charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_internalmemberclusters.yaml delete mode 120000 charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_memberclusters.yaml create mode 100644 charts/hub-agent/templates/crds/crps.yaml create mode 100644 charts/hub-agent/templates/crds/internalmemberclusters.yaml create mode 100644 charts/hub-agent/templates/crds/memberclusters.yaml delete mode 120000 charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_clusterresourceplacements.yaml delete mode 120000 charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_works.yaml create mode 100644 charts/hub-agent/templates/crds/works.yaml delete mode 120000 charts/member-agent/templates/crds/placement.kubernetes-fleet.io_appliedworks.yaml diff --git a/charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_internalmemberclusters.yaml b/charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_internalmemberclusters.yaml deleted file mode 120000 index 11680c7c6..000000000 --- a/charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_internalmemberclusters.yaml +++ /dev/null @@ -1 +0,0 @@ -../../../../config/crd/bases/cluster.kubernetes-fleet.io_internalmemberclusters.yaml \ No newline at end of file diff --git a/charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_memberclusters.yaml b/charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_memberclusters.yaml deleted file mode 120000 index 95bcf85f3..000000000 --- a/charts/hub-agent/templates/crds/cluster.kubernetes-fleet.io_memberclusters.yaml +++ /dev/null @@ -1 +0,0 @@ -../../../../config/crd/bases/cluster.kubernetes-fleet.io_memberclusters.yaml \ No newline at end of file diff --git a/charts/hub-agent/templates/crds/crps.yaml b/charts/hub-agent/templates/crds/crps.yaml new file mode 100644 index 000000000..5701e114a --- /dev/null +++ b/charts/hub-agent/templates/crds/crps.yaml @@ -0,0 +1,2 @@ +{{- $files := .Files }} +{{ $files.Get "crdbases/placement.kubernetes-fleet.io_clusterresourceplacements.yaml" }} diff --git a/charts/hub-agent/templates/crds/internalmemberclusters.yaml b/charts/hub-agent/templates/crds/internalmemberclusters.yaml new file mode 100644 index 000000000..321ae5430 --- /dev/null +++ b/charts/hub-agent/templates/crds/internalmemberclusters.yaml @@ -0,0 +1,2 @@ +{{- $files := .Files }} +{{ $files.Get "crdbases/cluster.kubernetes-fleet.io_internalmemberclusters.yaml" }} diff --git a/charts/hub-agent/templates/crds/memberclusters.yaml b/charts/hub-agent/templates/crds/memberclusters.yaml new file mode 100644 index 000000000..79e4692ff --- /dev/null +++ b/charts/hub-agent/templates/crds/memberclusters.yaml @@ -0,0 +1,2 @@ +{{- $files := .Files }} +{{ $files.Get "crdbases/cluster.kubernetes-fleet.io_memberclusters.yaml" }} diff --git a/charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_clusterresourceplacements.yaml b/charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_clusterresourceplacements.yaml deleted file mode 120000 index b956d5da3..000000000 --- a/charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_clusterresourceplacements.yaml +++ /dev/null @@ -1 +0,0 @@ -../../../../config/crd/bases/placement.kubernetes-fleet.io_clusterresourceplacements.yaml \ No newline at end of file diff --git a/charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_works.yaml b/charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_works.yaml deleted file mode 120000 index ffafd487a..000000000 --- a/charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_works.yaml +++ /dev/null @@ -1 +0,0 @@ -../../../../config/crd/bases/placement.kubernetes-fleet.io_works.yaml \ No newline at end of file diff --git a/charts/hub-agent/templates/crds/works.yaml b/charts/hub-agent/templates/crds/works.yaml new file mode 100644 index 000000000..5ed5889f1 --- /dev/null +++ b/charts/hub-agent/templates/crds/works.yaml @@ -0,0 +1,2 @@ +{{- $files := .Files }} +{{ $files.Get "crdbases/placement.kubernetes-fleet.io_works.yaml" }} diff --git a/charts/member-agent/templates/crds/placement.kubernetes-fleet.io_appliedworks.yaml b/charts/member-agent/templates/crds/placement.kubernetes-fleet.io_appliedworks.yaml deleted file mode 120000 index bf036b9b8..000000000 --- a/charts/member-agent/templates/crds/placement.kubernetes-fleet.io_appliedworks.yaml +++ /dev/null @@ -1 +0,0 @@ -../../../../config/crd/bases/placement.kubernetes-fleet.io_appliedworks.yaml \ No newline at end of file From 4661bb885a4eaf745627abde4788f064db13e599 Mon Sep 17 00:00:00 2001 From: Wei Weng Date: Wed, 18 Mar 2026 19:52:21 +0000 Subject: [PATCH 11/11] remove member agent chart enableV1Beta1APIs usage Signed-off-by: Wei Weng --- charts/member-agent/templates/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/member-agent/templates/deployment.yaml b/charts/member-agent/templates/deployment.yaml index 38e5893a4..6aad28fdd 100644 --- a/charts/member-agent/templates/deployment.yaml +++ b/charts/member-agent/templates/deployment.yaml @@ -17,7 +17,7 @@ spec: restartPolicy: Always serviceAccountName: {{ include "member-agent.fullname" . }}-sa initContainers: - {{- if and .Values.crdInstaller.enabled .Values.enableV1Beta1APIs }} + {{- if .Values.crdInstaller.enabled }} - name: crd-installer image: "{{ .Values.crdInstaller.image.repository }}:{{ .Values.crdInstaller.image.tag }}" imagePullPolicy: {{ .Values.crdInstaller.image.pullPolicy }}