Files
Reloader/test/e2e/utils/accessors.go
faizanahmad055 b5c8705395 Refactor code
Signed-off-by: faizanahmad055 <faizan.ahmad55@outlook.com>
2026-05-11 16:18:53 +02:00

177 lines
6.4 KiB
Go

package utils
import (
"strings"
appsv1 "k8s.io/api/apps/v1"
batchv1 "k8s.io/api/batch/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/types"
csiv1 "sigs.k8s.io/secrets-store-csi-driver/apis/v1"
rolloutsv1alpha1 "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
openshiftappsv1 "github.com/openshift/api/apps/v1"
)
// Deployment accessors
var (
DeploymentPodTemplate PodTemplateAccessor[*appsv1.Deployment] = func(d *appsv1.Deployment) *corev1.PodTemplateSpec {
return &d.Spec.Template
}
DeploymentAnnotations AnnotationAccessor[*appsv1.Deployment] = func(d *appsv1.Deployment) map[string]string {
return d.Annotations
}
DeploymentContainers ContainerAccessor[*appsv1.Deployment] = func(d *appsv1.Deployment) []corev1.Container {
return d.Spec.Template.Spec.Containers
}
DeploymentIsReady StatusAccessor[*appsv1.Deployment] = func(d *appsv1.Deployment) bool {
if d.Spec.Replicas == nil {
return false
}
return d.Status.ObservedGeneration >= d.Generation &&
d.Status.ReadyReplicas == *d.Spec.Replicas &&
d.Status.UpdatedReplicas == *d.Spec.Replicas &&
d.Status.AvailableReplicas == *d.Spec.Replicas
}
)
// DaemonSet accessors
var (
DaemonSetPodTemplate PodTemplateAccessor[*appsv1.DaemonSet] = func(d *appsv1.DaemonSet) *corev1.PodTemplateSpec {
return &d.Spec.Template
}
DaemonSetAnnotations AnnotationAccessor[*appsv1.DaemonSet] = func(d *appsv1.DaemonSet) map[string]string {
return d.Annotations
}
DaemonSetContainers ContainerAccessor[*appsv1.DaemonSet] = func(d *appsv1.DaemonSet) []corev1.Container {
return d.Spec.Template.Spec.Containers
}
DaemonSetIsReady StatusAccessor[*appsv1.DaemonSet] = func(d *appsv1.DaemonSet) bool {
return d.Status.ObservedGeneration >= d.Generation &&
d.Status.DesiredNumberScheduled > 0 &&
d.Status.NumberReady == d.Status.DesiredNumberScheduled &&
d.Status.UpdatedNumberScheduled == d.Status.DesiredNumberScheduled
}
)
// StatefulSet accessors
var (
StatefulSetPodTemplate PodTemplateAccessor[*appsv1.StatefulSet] = func(s *appsv1.StatefulSet) *corev1.PodTemplateSpec {
return &s.Spec.Template
}
StatefulSetAnnotations AnnotationAccessor[*appsv1.StatefulSet] = func(s *appsv1.StatefulSet) map[string]string {
return s.Annotations
}
StatefulSetContainers ContainerAccessor[*appsv1.StatefulSet] = func(s *appsv1.StatefulSet) []corev1.Container {
return s.Spec.Template.Spec.Containers
}
StatefulSetIsReady StatusAccessor[*appsv1.StatefulSet] = func(s *appsv1.StatefulSet) bool {
if s.Spec.Replicas == nil {
return false
}
return s.Status.ObservedGeneration >= s.Generation &&
s.Status.ReadyReplicas == *s.Spec.Replicas &&
s.Status.UpdatedReplicas == *s.Spec.Replicas
}
)
// Job accessors
var (
JobPodTemplate PodTemplateAccessor[*batchv1.Job] = func(j *batchv1.Job) *corev1.PodTemplateSpec {
return &j.Spec.Template
}
JobAnnotations AnnotationAccessor[*batchv1.Job] = func(j *batchv1.Job) map[string]string {
return j.Annotations
}
JobContainers ContainerAccessor[*batchv1.Job] = func(j *batchv1.Job) []corev1.Container {
return j.Spec.Template.Spec.Containers
}
JobIsReady StatusAccessor[*batchv1.Job] = func(j *batchv1.Job) bool {
return j.Status.Active > 0 || j.Status.Succeeded > 0
}
JobUID UIDAccessor[*batchv1.Job] = func(j *batchv1.Job) types.UID {
return j.UID
}
)
// CronJob accessors
var (
CronJobPodTemplate PodTemplateAccessor[*batchv1.CronJob] = func(c *batchv1.CronJob) *corev1.PodTemplateSpec {
return &c.Spec.JobTemplate.Spec.Template
}
CronJobAnnotations AnnotationAccessor[*batchv1.CronJob] = func(c *batchv1.CronJob) map[string]string {
return c.Annotations
}
CronJobContainers ContainerAccessor[*batchv1.CronJob] = func(c *batchv1.CronJob) []corev1.Container {
return c.Spec.JobTemplate.Spec.Template.Spec.Containers
}
CronJobExists StatusAccessor[*batchv1.CronJob] = func(c *batchv1.CronJob) bool {
return true
}
)
// Argo Rollout accessors
var (
RolloutPodTemplate PodTemplateAccessor[*rolloutsv1alpha1.Rollout] = func(r *rolloutsv1alpha1.Rollout) *corev1.PodTemplateSpec {
return &r.Spec.Template
}
RolloutAnnotations AnnotationAccessor[*rolloutsv1alpha1.Rollout] = func(r *rolloutsv1alpha1.Rollout) map[string]string {
return r.Annotations
}
RolloutContainers ContainerAccessor[*rolloutsv1alpha1.Rollout] = func(r *rolloutsv1alpha1.Rollout) []corev1.Container {
return r.Spec.Template.Spec.Containers
}
RolloutIsReady StatusAccessor[*rolloutsv1alpha1.Rollout] = func(r *rolloutsv1alpha1.Rollout) bool {
if r.Spec.Replicas == nil {
return false
}
return r.Status.ReadyReplicas == *r.Spec.Replicas
}
RolloutHasRestartAt StatusAccessor[*rolloutsv1alpha1.Rollout] = func(r *rolloutsv1alpha1.Rollout) bool {
return r.Spec.RestartAt != nil
}
)
// OpenShift DeploymentConfig accessors
var (
DeploymentConfigPodTemplate PodTemplateAccessor[*openshiftappsv1.DeploymentConfig] = func(d *openshiftappsv1.DeploymentConfig) *corev1.PodTemplateSpec {
return d.Spec.Template
}
DeploymentConfigAnnotations AnnotationAccessor[*openshiftappsv1.DeploymentConfig] = func(d *openshiftappsv1.DeploymentConfig) map[string]string {
return d.Annotations
}
DeploymentConfigContainers ContainerAccessor[*openshiftappsv1.DeploymentConfig] = func(d *openshiftappsv1.DeploymentConfig) []corev1.Container {
if d.Spec.Template == nil {
return nil
}
return d.Spec.Template.Spec.Containers
}
DeploymentConfigIsReady StatusAccessor[*openshiftappsv1.DeploymentConfig] = func(d *openshiftappsv1.DeploymentConfig) bool {
return d.Status.ReadyReplicas == d.Spec.Replicas
}
)
// SecretProviderClassPodStatus accessors
var (
SPCPSIsMounted StatusAccessor[*csiv1.SecretProviderClassPodStatus] = func(s *csiv1.SecretProviderClassPodStatus) bool {
return s.Status.Mounted
}
SPCPSClassName ValueAccessor[*csiv1.SecretProviderClassPodStatus, string] = func(s *csiv1.SecretProviderClassPodStatus) string {
return s.Status.SecretProviderClassName
}
SPCPSPodName ValueAccessor[*csiv1.SecretProviderClassPodStatus, string] = func(s *csiv1.SecretProviderClassPodStatus) string {
return s.Status.PodName
}
// SPCPSVersions returns concatenated versions of all objects for change detection.
SPCPSVersions ValueAccessor[*csiv1.SecretProviderClassPodStatus, string] = func(s *csiv1.SecretProviderClassPodStatus) string {
if len(s.Status.Objects) == 0 {
return ""
}
var versions []string
for _, obj := range s.Status.Objects {
versions = append(versions, obj.Version)
}
return strings.Join(versions, ",")
}
)