Skip to content

Commit

Permalink
feat: add data resources availability (Azure#1027)
Browse files Browse the repository at this point in the history
  • Loading branch information
britaniar authored Jan 31, 2025
1 parent 14cc734 commit 51ceeb3
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 0 deletions.
22 changes: 22 additions & 0 deletions pkg/controllers/workapplier/availability_tracker.go
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,28 @@ func isDataResource(gvr schema.GroupVersionResource) bool {
return true
case utils.ClusterRoleBindingGVR:
return true
case utils.ServiceAccountGVR:
return true
case utils.NetworkPolicyGVR:
return true
case utils.CSIDriverGVR:
return true
case utils.CSINodeGVR:
return true
case utils.StorageClassGVR:
return true
case utils.CSIStorageCapacityGVR:
return true
case utils.ControllerRevisionGVR:
return true
case utils.IngressClassGVR:
return true
case utils.LimitRangeGVR:
return true
case utils.ResourceQuotaGVR:
return true
case utils.PriorityClassGVR:
return true
}
return false
}
69 changes: 69 additions & 0 deletions pkg/controllers/workapplier/availability_tracker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ import (
appsv1 "k8s.io/api/apps/v1"
batchv1 "k8s.io/api/batch/v1"
corev1 "k8s.io/api/core/v1"
networkingv1 "k8s.io/api/networking/v1"
policyv1 "k8s.io/api/policy/v1"
schedulingv1 "k8s.io/api/scheduling/v1"
storagev1 "k8s.io/api/storage/v1"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
Expand Down Expand Up @@ -899,6 +902,72 @@ func TestTrackInMemberClusterObjAvailabilityByGVR(t *testing.T) {
inMemberClusterObj: toUnstructured(t, untrackableJob),
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeNotTrackable,
},
{
name: "available service account",
gvr: utils.ServiceAccountGVR,
inMemberClusterObj: toUnstructured(t, &corev1.ServiceAccount{}),
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
},
{
name: "available network policy",
gvr: utils.NetworkPolicyGVR,
inMemberClusterObj: toUnstructured(t, &networkingv1.NetworkPolicy{}),
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
},
{
name: "available csi driver",
gvr: utils.CSIDriverGVR,
inMemberClusterObj: toUnstructured(t, &storagev1.CSIDriver{}),
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
},
{
name: "available csi node",
gvr: utils.CSINodeGVR,
inMemberClusterObj: toUnstructured(t, &storagev1.CSINode{}),
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
},
{
name: "available storage class",
gvr: utils.StorageClassGVR,
inMemberClusterObj: toUnstructured(t, &storagev1.StorageClass{}),
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
},
{
name: "available csi storage capacity",
gvr: utils.CSIStorageCapacityGVR,
inMemberClusterObj: toUnstructured(t, &storagev1.CSIStorageCapacity{}),
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
},
{
name: "available controller revision",
gvr: utils.ControllerRevisionGVR,
inMemberClusterObj: toUnstructured(t, &appsv1.ControllerRevision{}),
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
},
{
name: "available ingress class",
gvr: utils.IngressClassGVR,
inMemberClusterObj: toUnstructured(t, &networkingv1.IngressClass{}),
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
},
{
name: "available limit range",
gvr: utils.LimitRangeGVR,
inMemberClusterObj: toUnstructured(t, &corev1.LimitRange{}),
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
},
{
name: "available resource quota",
gvr: utils.ResourceQuotaGVR,
inMemberClusterObj: toUnstructured(t, &corev1.ResourceQuota{}),
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
},
{
name: "available priority class",
gvr: utils.PriorityClassGVR,
inMemberClusterObj: toUnstructured(t, &schedulingv1.PriorityClass{}),
wantManifestProcessingAvailabilityResultType: ManifestProcessingAvailabilityResultTypeAvailable,
},
}

for _, tc := range testCases {
Expand Down
82 changes: 82 additions & 0 deletions pkg/utils/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,16 @@ import (
"strings"
"time"

admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
appv1 "k8s.io/api/apps/v1"
batchv1 "k8s.io/api/batch/v1"
corev1 "k8s.io/api/core/v1"
discoveryv1 "k8s.io/api/discovery/v1"
networkingv1 "k8s.io/api/networking/v1"
policyv1 "k8s.io/api/policy/v1"
rbacv1 "k8s.io/api/rbac/v1"
schedulingv1 "k8s.io/api/scheduling/v1"
storagev1 "k8s.io/api/storage/v1"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apimachinery/pkg/api/equality"
apierrors "k8s.io/apimachinery/pkg/api/errors"
Expand Down Expand Up @@ -162,12 +166,36 @@ var (
Kind: ConfigMapKind,
}

ControllerRevisionGVR = schema.GroupVersionResource{
Group: appv1.SchemeGroupVersion.Group,
Version: appv1.SchemeGroupVersion.Version,
Resource: "controllerrevisions",
}

CRDMetaGVK = metav1.GroupVersionKind{
Group: apiextensionsv1.SchemeGroupVersion.Group,
Version: apiextensionsv1.SchemeGroupVersion.Version,
Kind: "CustomResourceDefinition",
}

CSIDriverGVR = schema.GroupVersionResource{
Group: storagev1.SchemeGroupVersion.Group,
Version: storagev1.SchemeGroupVersion.Version,
Resource: "csidrivers",
}

CSINodeGVR = schema.GroupVersionResource{
Group: storagev1.SchemeGroupVersion.Group,
Version: storagev1.SchemeGroupVersion.Version,
Resource: "csinodes",
}

CSIStorageCapacityGVR = schema.GroupVersionResource{
Group: storagev1.SchemeGroupVersion.Group,
Version: storagev1.SchemeGroupVersion.Version,
Resource: "csistoragecapacities",
}

CustomResourceDefinitionGVR = schema.GroupVersionResource{
Group: apiextensionsv1.SchemeGroupVersion.Group,
Version: apiextensionsv1.SchemeGroupVersion.Version,
Expand Down Expand Up @@ -198,6 +226,12 @@ var (
Kind: "InternalMemberCluster",
}

IngressClassGVR = schema.GroupVersionResource{
Group: networkingv1.SchemeGroupVersion.Group,
Version: networkingv1.SchemeGroupVersion.Version,
Resource: "ingressclasses",
}

InternalServiceExportMetaGVK = metav1.GroupVersionKind{
Group: fleetnetworkingv1alpha1.GroupVersion.Group,
Version: fleetnetworkingv1alpha1.GroupVersion.Version,
Expand All @@ -216,6 +250,12 @@ var (
Kind: "InternalMemberCluster",
}

LimitRangeGVR = schema.GroupVersionResource{
Group: corev1.SchemeGroupVersion.Group,
Version: corev1.SchemeGroupVersion.Version,
Resource: "limitranges",
}

MCV1Alpha1MetaGVK = metav1.GroupVersionKind{
Group: fleetv1alpha1.GroupVersion.Group,
Version: fleetv1alpha1.GroupVersion.Version,
Expand All @@ -240,6 +280,12 @@ var (
Kind: "MemberCluster",
}

MutatingWebhookConfigurationGVR = schema.GroupVersionResource{
Group: admissionregistrationv1.SchemeGroupVersion.Group,
Version: admissionregistrationv1.SchemeGroupVersion.Version,
Resource: "mutatingwebhookconfigurations",
}

NamespaceMetaGVK = metav1.GroupVersionKind{
Group: corev1.GroupName,
Version: corev1.SchemeGroupVersion.Version,
Expand All @@ -258,6 +304,12 @@ var (
Resource: "namespaces",
}

NetworkPolicyGVR = schema.GroupVersionResource{
Group: networkingv1.SchemeGroupVersion.Group,
Version: networkingv1.SchemeGroupVersion.Version,
Resource: "networkpolicies",
}

PodMetaGVK = metav1.GroupVersionKind{
Group: corev1.SchemeGroupVersion.Group,
Version: corev1.SchemeGroupVersion.Version,
Expand All @@ -270,6 +322,18 @@ var (
Resource: "poddisruptionbudgets",
}

PriorityClassGVR = schema.GroupVersionResource{
Group: schedulingv1.SchemeGroupVersion.Group,
Version: schedulingv1.SchemeGroupVersion.Version,
Resource: "priorityclasses",
}

ResourceQuotaGVR = schema.GroupVersionResource{
Group: corev1.SchemeGroupVersion.Group,
Version: corev1.SchemeGroupVersion.Version,
Resource: "resourcequotas",
}

RoleMetaGVK = metav1.GroupVersionKind{
Group: rbacv1.SchemeGroupVersion.Group,
Version: rbacv1.SchemeGroupVersion.Version,
Expand All @@ -288,6 +352,18 @@ var (
Resource: "services",
}

ServiceAccountGVR = schema.GroupVersionResource{
Group: corev1.SchemeGroupVersion.Group,
Version: corev1.SchemeGroupVersion.Version,
Resource: "serviceaccounts",
}

StorageClassGVR = schema.GroupVersionResource{
Group: storagev1.SchemeGroupVersion.Group,
Version: storagev1.SchemeGroupVersion.Version,
Resource: "storageclasses",
}

WorkV1Alpha1MetaGVK = metav1.GroupVersionKind{
Group: workv1alpha1.GroupVersion.Group,
Version: workv1alpha1.GroupVersion.Version,
Expand All @@ -312,6 +388,12 @@ var (
Kind: "Work",
}

ValidatingWebhookConfigurationGVR = schema.GroupVersionResource{
Group: admissionregistrationv1.SchemeGroupVersion.Group,
Version: admissionregistrationv1.SchemeGroupVersion.Version,
Resource: "validatingwebhookconfigurations",
}

ClusterResourceOverrideSnapshotKind = schema.GroupVersionKind{
Group: placementv1alpha1.GroupVersion.Group,
Version: placementv1alpha1.GroupVersion.Version,
Expand Down

0 comments on commit 51ceeb3

Please sign in to comment.