mirror of
https://github.com/stakater/Reloader.git
synced 2026-08-20 12:36:26 +00:00
81 lines
2.1 KiB
Go
81 lines
2.1 KiB
Go
package workload
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
argorolloutv1alpha1 "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
|
|
appsv1 "k8s.io/api/apps/v1"
|
|
batchv1 "k8s.io/api/batch/v1"
|
|
"sigs.k8s.io/controller-runtime/pkg/client"
|
|
)
|
|
|
|
// Registry provides factory methods for creating Workload instances.
|
|
type Registry struct {
|
|
argoRolloutsEnabled bool
|
|
}
|
|
|
|
// NewRegistry creates a new workload registry.
|
|
func NewRegistry(argoRolloutsEnabled bool) *Registry {
|
|
return &Registry{
|
|
argoRolloutsEnabled: argoRolloutsEnabled,
|
|
}
|
|
}
|
|
|
|
// SupportedKinds returns all supported workload kinds.
|
|
func (r *Registry) SupportedKinds() []Kind {
|
|
kinds := []Kind{
|
|
KindDeployment,
|
|
KindDaemonSet,
|
|
KindStatefulSet,
|
|
KindJob,
|
|
KindCronJob,
|
|
}
|
|
if r.argoRolloutsEnabled {
|
|
kinds = append(kinds, KindArgoRollout)
|
|
}
|
|
return kinds
|
|
}
|
|
|
|
// FromObject creates a WorkloadAccessor from a Kubernetes object.
|
|
func (r *Registry) FromObject(obj client.Object) (WorkloadAccessor, error) {
|
|
switch o := obj.(type) {
|
|
case *appsv1.Deployment:
|
|
return NewDeploymentWorkload(o), nil
|
|
case *appsv1.DaemonSet:
|
|
return NewDaemonSetWorkload(o), nil
|
|
case *appsv1.StatefulSet:
|
|
return NewStatefulSetWorkload(o), nil
|
|
case *batchv1.Job:
|
|
return NewJobWorkload(o), nil
|
|
case *batchv1.CronJob:
|
|
return NewCronJobWorkload(o), nil
|
|
case *argorolloutv1alpha1.Rollout:
|
|
if !r.argoRolloutsEnabled {
|
|
return nil, fmt.Errorf("Argo Rollouts support is not enabled")
|
|
}
|
|
return NewRolloutWorkload(o), nil
|
|
default:
|
|
return nil, fmt.Errorf("unsupported object type: %T", obj)
|
|
}
|
|
}
|
|
|
|
// KindFromString converts a string to a Kind.
|
|
func KindFromString(s string) (Kind, error) {
|
|
switch s {
|
|
case "Deployment", "deployment", "deployments":
|
|
return KindDeployment, nil
|
|
case "DaemonSet", "daemonset", "daemonsets":
|
|
return KindDaemonSet, nil
|
|
case "StatefulSet", "statefulset", "statefulsets":
|
|
return KindStatefulSet, nil
|
|
case "Rollout", "rollout", "rollouts":
|
|
return KindArgoRollout, nil
|
|
case "Job", "job", "jobs":
|
|
return KindJob, nil
|
|
case "CronJob", "cronjob", "cronjobs":
|
|
return KindCronJob, nil
|
|
default:
|
|
return "", fmt.Errorf("unknown workload kind: %s", s)
|
|
}
|
|
}
|