Skip to content

Commit 51ceeb3

Browse files
authored
feat: add data resources availability (#1027)
1 parent 14cc734 commit 51ceeb3

File tree

3 files changed

+173
-0
lines changed

3 files changed

+173
-0
lines changed

pkg/controllers/workapplier/availability_tracker.go

+22
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,28 @@ func isDataResource(gvr schema.GroupVersionResource) bool {
265265
return true
266266
case utils.ClusterRoleBindingGVR:
267267
return true
268+
case utils.ServiceAccountGVR:
269+
return true
270+
case utils.NetworkPolicyGVR:
271+
return true
272+
case utils.CSIDriverGVR:
273+
return true
274+
case utils.CSINodeGVR:
275+
return true
276+
case utils.StorageClassGVR:
277+
return true
278+
case utils.CSIStorageCapacityGVR:
279+
return true
280+
case utils.ControllerRevisionGVR:
281+
return true
282+
case utils.IngressClassGVR:
283+
return true
284+
case utils.LimitRangeGVR:
285+
return true
286+
case utils.ResourceQuotaGVR:
287+
return true
288+
case utils.PriorityClassGVR:
289+
return true
268290
}
269291
return false
270292
}

pkg/controllers/workapplier/availability_tracker_test.go

+69
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ import (
1414
appsv1 "k8s.io/api/apps/v1"
1515
batchv1 "k8s.io/api/batch/v1"
1616
corev1 "k8s.io/api/core/v1"
17+
networkingv1 "k8s.io/api/networking/v1"
1718
policyv1 "k8s.io/api/policy/v1"
19+
schedulingv1 "k8s.io/api/scheduling/v1"
20+
storagev1 "k8s.io/api/storage/v1"
1821
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
1922
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2023
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -899,6 +902,72 @@ func TestTrackInMemberClusterObjAvailabilityByGVR(t *testing.T) {
899902
inMemberClusterObj: toUnstructured(t, untrackableJob),
900903
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeNotTrackable,
901904
},
905+
{
906+
name: "available service account",
907+
gvr: utils.ServiceAccountGVR,
908+
inMemberClusterObj: toUnstructured(t, &corev1.ServiceAccount{}),
909+
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
910+
},
911+
{
912+
name: "available network policy",
913+
gvr: utils.NetworkPolicyGVR,
914+
inMemberClusterObj: toUnstructured(t, &networkingv1.NetworkPolicy{}),
915+
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
916+
},
917+
{
918+
name: "available csi driver",
919+
gvr: utils.CSIDriverGVR,
920+
inMemberClusterObj: toUnstructured(t, &storagev1.CSIDriver{}),
921+
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
922+
},
923+
{
924+
name: "available csi node",
925+
gvr: utils.CSINodeGVR,
926+
inMemberClusterObj: toUnstructured(t, &storagev1.CSINode{}),
927+
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
928+
},
929+
{
930+
name: "available storage class",
931+
gvr: utils.StorageClassGVR,
932+
inMemberClusterObj: toUnstructured(t, &storagev1.StorageClass{}),
933+
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
934+
},
935+
{
936+
name: "available csi storage capacity",
937+
gvr: utils.CSIStorageCapacityGVR,
938+
inMemberClusterObj: toUnstructured(t, &storagev1.CSIStorageCapacity{}),
939+
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
940+
},
941+
{
942+
name: "available controller revision",
943+
gvr: utils.ControllerRevisionGVR,
944+
inMemberClusterObj: toUnstructured(t, &appsv1.ControllerRevision{}),
945+
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
946+
},
947+
{
948+
name: "available ingress class",
949+
gvr: utils.IngressClassGVR,
950+
inMemberClusterObj: toUnstructured(t, &networkingv1.IngressClass{}),
951+
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
952+
},
953+
{
954+
name: "available limit range",
955+
gvr: utils.LimitRangeGVR,
956+
inMemberClusterObj: toUnstructured(t, &corev1.LimitRange{}),
957+
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
958+
},
959+
{
960+
name: "available resource quota",
961+
gvr: utils.ResourceQuotaGVR,
962+
inMemberClusterObj: toUnstructured(t, &corev1.ResourceQuota{}),
963+
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
964+
},
965+
{
966+
name: "available priority class",
967+
gvr: utils.PriorityClassGVR,
968+
inMemberClusterObj: toUnstructured(t, &schedulingv1.PriorityClass{}),
969+
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
970+
},
902971
}
903972

904973
for _, tc := range testCases {

pkg/utils/common.go

+82
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,16 @@ import (
1313
"strings"
1414
"time"
1515

16+
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
1617
appv1 "k8s.io/api/apps/v1"
1718
batchv1 "k8s.io/api/batch/v1"
1819
corev1 "k8s.io/api/core/v1"
1920
discoveryv1 "k8s.io/api/discovery/v1"
21+
networkingv1 "k8s.io/api/networking/v1"
2022
policyv1 "k8s.io/api/policy/v1"
2123
rbacv1 "k8s.io/api/rbac/v1"
24+
schedulingv1 "k8s.io/api/scheduling/v1"
25+
storagev1 "k8s.io/api/storage/v1"
2226
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2327
"k8s.io/apimachinery/pkg/api/equality"
2428
apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -162,12 +166,36 @@ var (
162166
Kind: ConfigMapKind,
163167
}
164168

169+
ControllerRevisionGVR = schema.GroupVersionResource{
170+
Group: appv1.SchemeGroupVersion.Group,
171+
Version: appv1.SchemeGroupVersion.Version,
172+
Resource: "controllerrevisions",
173+
}
174+
165175
CRDMetaGVK = metav1.GroupVersionKind{
166176
Group: apiextensionsv1.SchemeGroupVersion.Group,
167177
Version: apiextensionsv1.SchemeGroupVersion.Version,
168178
Kind: "CustomResourceDefinition",
169179
}
170180

181+
CSIDriverGVR = schema.GroupVersionResource{
182+
Group: storagev1.SchemeGroupVersion.Group,
183+
Version: storagev1.SchemeGroupVersion.Version,
184+
Resource: "csidrivers",
185+
}
186+
187+
CSINodeGVR = schema.GroupVersionResource{
188+
Group: storagev1.SchemeGroupVersion.Group,
189+
Version: storagev1.SchemeGroupVersion.Version,
190+
Resource: "csinodes",
191+
}
192+
193+
CSIStorageCapacityGVR = schema.GroupVersionResource{
194+
Group: storagev1.SchemeGroupVersion.Group,
195+
Version: storagev1.SchemeGroupVersion.Version,
196+
Resource: "csistoragecapacities",
197+
}
198+
171199
CustomResourceDefinitionGVR = schema.GroupVersionResource{
172200
Group: apiextensionsv1.SchemeGroupVersion.Group,
173201
Version: apiextensionsv1.SchemeGroupVersion.Version,
@@ -198,6 +226,12 @@ var (
198226
Kind: "InternalMemberCluster",
199227
}
200228

229+
IngressClassGVR = schema.GroupVersionResource{
230+
Group: networkingv1.SchemeGroupVersion.Group,
231+
Version: networkingv1.SchemeGroupVersion.Version,
232+
Resource: "ingressclasses",
233+
}
234+
201235
InternalServiceExportMetaGVK = metav1.GroupVersionKind{
202236
Group: fleetnetworkingv1alpha1.GroupVersion.Group,
203237
Version: fleetnetworkingv1alpha1.GroupVersion.Version,
@@ -216,6 +250,12 @@ var (
216250
Kind: "InternalMemberCluster",
217251
}
218252

253+
LimitRangeGVR = schema.GroupVersionResource{
254+
Group: corev1.SchemeGroupVersion.Group,
255+
Version: corev1.SchemeGroupVersion.Version,
256+
Resource: "limitranges",
257+
}
258+
219259
MCV1Alpha1MetaGVK = metav1.GroupVersionKind{
220260
Group: fleetv1alpha1.GroupVersion.Group,
221261
Version: fleetv1alpha1.GroupVersion.Version,
@@ -240,6 +280,12 @@ var (
240280
Kind: "MemberCluster",
241281
}
242282

283+
MutatingWebhookConfigurationGVR = schema.GroupVersionResource{
284+
Group: admissionregistrationv1.SchemeGroupVersion.Group,
285+
Version: admissionregistrationv1.SchemeGroupVersion.Version,
286+
Resource: "mutatingwebhookconfigurations",
287+
}
288+
243289
NamespaceMetaGVK = metav1.GroupVersionKind{
244290
Group: corev1.GroupName,
245291
Version: corev1.SchemeGroupVersion.Version,
@@ -258,6 +304,12 @@ var (
258304
Resource: "namespaces",
259305
}
260306

307+
NetworkPolicyGVR = schema.GroupVersionResource{
308+
Group: networkingv1.SchemeGroupVersion.Group,
309+
Version: networkingv1.SchemeGroupVersion.Version,
310+
Resource: "networkpolicies",
311+
}
312+
261313
PodMetaGVK = metav1.GroupVersionKind{
262314
Group: corev1.SchemeGroupVersion.Group,
263315
Version: corev1.SchemeGroupVersion.Version,
@@ -270,6 +322,18 @@ var (
270322
Resource: "poddisruptionbudgets",
271323
}
272324

325+
PriorityClassGVR = schema.GroupVersionResource{
326+
Group: schedulingv1.SchemeGroupVersion.Group,
327+
Version: schedulingv1.SchemeGroupVersion.Version,
328+
Resource: "priorityclasses",
329+
}
330+
331+
ResourceQuotaGVR = schema.GroupVersionResource{
332+
Group: corev1.SchemeGroupVersion.Group,
333+
Version: corev1.SchemeGroupVersion.Version,
334+
Resource: "resourcequotas",
335+
}
336+
273337
RoleMetaGVK = metav1.GroupVersionKind{
274338
Group: rbacv1.SchemeGroupVersion.Group,
275339
Version: rbacv1.SchemeGroupVersion.Version,
@@ -288,6 +352,18 @@ var (
288352
Resource: "services",
289353
}
290354

355+
ServiceAccountGVR = schema.GroupVersionResource{
356+
Group: corev1.SchemeGroupVersion.Group,
357+
Version: corev1.SchemeGroupVersion.Version,
358+
Resource: "serviceaccounts",
359+
}
360+
361+
StorageClassGVR = schema.GroupVersionResource{
362+
Group: storagev1.SchemeGroupVersion.Group,
363+
Version: storagev1.SchemeGroupVersion.Version,
364+
Resource: "storageclasses",
365+
}
366+
291367
WorkV1Alpha1MetaGVK = metav1.GroupVersionKind{
292368
Group: workv1alpha1.GroupVersion.Group,
293369
Version: workv1alpha1.GroupVersion.Version,
@@ -312,6 +388,12 @@ var (
312388
Kind: "Work",
313389
}
314390

391+
ValidatingWebhookConfigurationGVR = schema.GroupVersionResource{
392+
Group: admissionregistrationv1.SchemeGroupVersion.Group,
393+
Version: admissionregistrationv1.SchemeGroupVersion.Version,
394+
Resource: "validatingwebhookconfigurations",
395+
}
396+
315397
ClusterResourceOverrideSnapshotKind = schema.GroupVersionKind{
316398
Group: placementv1alpha1.GroupVersion.Group,
317399
Version: placementv1alpha1.GroupVersion.Version,

0 commit comments

Comments
 (0)