Skip to content

Commit 139a875

Browse files
committed
feat: support excluded sync resources
Signed-off-by: KubeKyrie <[email protected]>
1 parent b4117dd commit 139a875

File tree

6 files changed

+48
-0
lines changed

6 files changed

+48
-0
lines changed

kustomize/crds/cluster.clusterpedia.io_clustersyncresources.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ spec:
3535
syncResources:
3636
items:
3737
properties:
38+
excludeResources:
39+
items:
40+
type: string
41+
type: array
3842
group:
3943
type: string
4044
resources:

kustomize/crds/cluster.clusterpedia.io_pediaclusters.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ spec:
7979
syncResources:
8080
items:
8181
properties:
82+
excludeResources:
83+
items:
84+
type: string
85+
type: array
8286
group:
8387
type: string
8488
resources:

pkg/generated/openapi/zz_generated.openapi.go

+14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/synchromanager/clustersynchro/resource_negotiator.go

+18
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ func (negotiator *ResourceNegotiator) SetSyncAllCustomResources(sync bool) {
4242
func (negotiator *ResourceNegotiator) NegotiateSyncResources(syncResources []clusterv1alpha2.ClusterGroupResources) (*GroupResourceStatus, map[schema.GroupVersionResource]syncConfig) {
4343
var syncAllResources bool
4444
var watchKubeVersion, watchAggregatorResourceTypes bool
45+
originSyncResources := syncResources
4546
for i, syncResource := range syncResources {
4647
if syncResource.Group == "*" {
4748
syncAllResources = true
@@ -62,6 +63,7 @@ func (negotiator *ResourceNegotiator) NegotiateSyncResources(syncResources []clu
6263
klog.InfoS("Skip resource sync", "cluster", negotiator.name, "group", syncResource.Group, "reason", "not match group")
6364
} else {
6465
syncResourcesByGroup.Versions = syncResource.Versions
66+
syncResourcesByGroup.ExcludeResources = syncResource.ExcludeResources
6567
syncResources[i] = *syncResourcesByGroup
6668
if groupType == discovery.KubeResource {
6769
watchKubeVersion = true
@@ -74,6 +76,18 @@ func (negotiator *ResourceNegotiator) NegotiateSyncResources(syncResources []clu
7476

7577
if syncAllResources {
7678
syncResources = negotiator.dynamicDiscovery.GetAllResourcesAsSyncResources()
79+
allExcludeResources := make([]string, 0)
80+
for _, gr := range originSyncResources {
81+
if len(gr.ExcludeResources) > 0 {
82+
allExcludeResources = append(allExcludeResources, gr.ExcludeResources...)
83+
}
84+
}
85+
allExcludeResourcesSet := sets.New(allExcludeResources...)
86+
for k, groupResources := range syncResources {
87+
if allExcludeResourcesSet.Has(groupResources.Resources[0]) {
88+
syncResources[k].ExcludeResources = groupResources.Resources
89+
}
90+
}
7791
} else if negotiator.syncAllCustomResources && clusterpediafeature.FeatureGate.Enabled(features.AllowSyncAllCustomResources) {
7892
syncResources = negotiator.dynamicDiscovery.AttachAllCustomResourcesToSyncResources(syncResources)
7993
}
@@ -85,7 +99,11 @@ func (negotiator *ResourceNegotiator) NegotiateSyncResources(syncResources []clu
8599
var groupResourceStatus = NewGroupResourceStatus()
86100
var storageResourceSyncConfigs = make(map[schema.GroupVersionResource]syncConfig)
87101
for _, groupResources := range syncResources {
102+
excludedResourcesSet := sets.New(groupResources.ExcludeResources...)
88103
for _, resource := range groupResources.Resources {
104+
if excludedResourcesSet.Has(resource) {
105+
continue
106+
}
89107
syncGR := schema.GroupResource{Group: groupResources.Group, Resource: resource}
90108

91109
if clusterpediafeature.FeatureGate.Enabled(features.IgnoreSyncLease) {

staging/src/github.com/clusterpedia-io/api/cluster/v1alpha2/types.go

+3
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ type ClusterGroupResources struct {
109109
// +kubebuilder:validation:Required
110110
// +kubebuilder:validation:MinItems=1
111111
Resources []string `json:"resources"`
112+
113+
// +optional
114+
ExcludeResources []string `json:"excludeResources"`
112115
}
113116

114117
type ClusterStatus struct {

staging/src/github.com/clusterpedia-io/api/cluster/v1alpha2/zz_generated.deepcopy.go

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)