karmada/pkg/resourceinterpreter/configurableinterpreter/configmanager/accessor.go

116 lines
3.7 KiB
Go

package configmanager
import (
"k8s.io/apimachinery/pkg/runtime/schema"
configv1alpha1 "github.com/karmada-io/karmada/pkg/apis/config/v1alpha1"
)
// CustomConfiguration provides base information about custom interpreter configuration
type CustomConfiguration interface {
Name() string
TargetResource() schema.GroupVersionKind
}
// LuaScriptAccessor provides a common interface to get custom interpreter lua script
type LuaScriptAccessor interface {
CustomConfiguration
GetRetentionLuaScript() string
GetReplicaResourceLuaScript() string
GetReplicaRevisionLuaScript() string
GetStatusReflectionLuaScript() string
GetStatusAggregationLuaScript() string
GetHealthInterpretationLuaScript() string
GetDependencyInterpretationLuaScript() string
}
// CustomAccessor provides a common interface to get custom interpreter configuration.
type CustomAccessor interface {
LuaScriptAccessor
}
type resourceCustomAccessor struct {
retention *configv1alpha1.LocalValueRetention
replicaResource *configv1alpha1.ReplicaResourceRequirement
replicaRevision *configv1alpha1.ReplicaRevision
statusReflection *configv1alpha1.StatusReflection
statusAggregation *configv1alpha1.StatusAggregation
healthInterpretation *configv1alpha1.HealthInterpretation
dependencyInterpretation *configv1alpha1.DependencyInterpretation
configurationName string
configurationTargetGVK schema.GroupVersionKind
}
// NewResourceCustomAccessorAccessor creates an accessor for resource interpreter customization
func NewResourceCustomAccessorAccessor(customization *configv1alpha1.ResourceInterpreterCustomization) CustomAccessor {
return &resourceCustomAccessor{
retention: customization.Spec.Customizations.Retention,
replicaResource: customization.Spec.Customizations.ReplicaResource,
replicaRevision: customization.Spec.Customizations.ReplicaRevision,
statusReflection: customization.Spec.Customizations.StatusReflection,
statusAggregation: customization.Spec.Customizations.StatusAggregation,
healthInterpretation: customization.Spec.Customizations.HealthInterpretation,
dependencyInterpretation: customization.Spec.Customizations.DependencyInterpretation,
configurationName: customization.Name,
configurationTargetGVK: schema.FromAPIVersionAndKind(customization.Spec.Target.APIVersion, customization.Spec.Target.Kind),
}
}
func (a *resourceCustomAccessor) GetRetentionLuaScript() string {
if a.retention == nil {
return ""
}
return a.retention.LuaScript
}
func (a *resourceCustomAccessor) GetReplicaResourceLuaScript() string {
if a.replicaResource == nil {
return ""
}
return a.replicaResource.LuaScript
}
func (a *resourceCustomAccessor) GetReplicaRevisionLuaScript() string {
if a.replicaRevision == nil {
return ""
}
return a.replicaRevision.LuaScript
}
func (a *resourceCustomAccessor) GetStatusReflectionLuaScript() string {
if a.statusReflection == nil {
return ""
}
return a.statusReflection.LuaScript
}
func (a *resourceCustomAccessor) GetStatusAggregationLuaScript() string {
if a.statusAggregation == nil {
return ""
}
return a.statusAggregation.LuaScript
}
func (a *resourceCustomAccessor) GetHealthInterpretationLuaScript() string {
if a.healthInterpretation == nil {
return ""
}
return a.healthInterpretation.LuaScript
}
func (a *resourceCustomAccessor) GetDependencyInterpretationLuaScript() string {
if a.dependencyInterpretation == nil {
return ""
}
return a.dependencyInterpretation.LuaScript
}
func (a *resourceCustomAccessor) Name() string {
return a.configurationName
}
func (a *resourceCustomAccessor) TargetResource() schema.GroupVersionKind {
return a.configurationTargetGVK
}