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

195 lines
5.7 KiB
Go

package configmanager
import (
configv1alpha1 "github.com/karmada-io/karmada/pkg/apis/config/v1alpha1"
)
// CustomConfiguration provides base information about custom interpreter configuration
type CustomConfiguration interface {
Merge(rules configv1alpha1.CustomizationRules)
}
// 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
GetDependencyInterpretationLuaScripts() []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
dependencyInterpretations []*configv1alpha1.DependencyInterpretation
}
// NewResourceCustomAccessor creates an accessor for resource interpreter customization.
func NewResourceCustomAccessor() CustomAccessor {
return &resourceCustomAccessor{}
}
// Merge merges the given CustomizationRules with the current rules, ignore if duplicates occur.
func (a *resourceCustomAccessor) Merge(rules configv1alpha1.CustomizationRules) {
if rules.Retention != nil {
a.setRetain(rules.Retention)
}
if rules.ReplicaResource != nil {
a.setReplicaResource(rules.ReplicaResource)
}
if rules.ReplicaRevision != nil {
a.setReplicaRevision(rules.ReplicaRevision)
}
if rules.StatusReflection != nil {
a.setStatusReflection(rules.StatusReflection)
}
if rules.StatusAggregation != nil {
a.setStatusAggregation(rules.StatusAggregation)
}
if rules.HealthInterpretation != nil {
a.setHealthInterpretation(rules.HealthInterpretation)
}
if rules.DependencyInterpretation != nil {
a.appendDependencyInterpretation(rules.DependencyInterpretation)
}
}
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) GetDependencyInterpretationLuaScripts() []string {
if a.dependencyInterpretations == nil {
return nil
}
var scripts []string
for _, interpretation := range a.dependencyInterpretations {
if interpretation.LuaScript != "" {
scripts = append(scripts, interpretation.LuaScript)
}
}
return scripts
}
func (a *resourceCustomAccessor) setRetain(retention *configv1alpha1.LocalValueRetention) {
if a.retention == nil {
a.retention = retention
return
}
if retention.LuaScript != "" && a.retention.LuaScript == "" {
a.retention.LuaScript = retention.LuaScript
}
}
func (a *resourceCustomAccessor) setReplicaResource(replicaResource *configv1alpha1.ReplicaResourceRequirement) {
if a.replicaResource == nil {
a.replicaResource = replicaResource
return
}
if replicaResource.LuaScript != "" && a.replicaResource.LuaScript == "" {
a.replicaResource.LuaScript = replicaResource.LuaScript
}
}
func (a *resourceCustomAccessor) setReplicaRevision(replicaRevision *configv1alpha1.ReplicaRevision) {
if a.replicaRevision == nil {
a.replicaRevision = replicaRevision
return
}
if replicaRevision.LuaScript != "" && a.replicaRevision.LuaScript == "" {
a.replicaRevision.LuaScript = replicaRevision.LuaScript
}
}
func (a *resourceCustomAccessor) setStatusReflection(statusReflection *configv1alpha1.StatusReflection) {
if a.statusReflection == nil {
a.statusReflection = statusReflection
return
}
if statusReflection.LuaScript != "" && a.statusReflection.LuaScript == "" {
a.statusReflection.LuaScript = statusReflection.LuaScript
}
}
func (a *resourceCustomAccessor) setStatusAggregation(statusAggregation *configv1alpha1.StatusAggregation) {
if a.statusAggregation == nil {
a.statusAggregation = statusAggregation
return
}
if statusAggregation.LuaScript != "" && a.statusAggregation.LuaScript == "" {
a.statusAggregation.LuaScript = statusAggregation.LuaScript
}
}
func (a *resourceCustomAccessor) setHealthInterpretation(healthInterpretation *configv1alpha1.HealthInterpretation) {
if a.healthInterpretation == nil {
a.healthInterpretation = healthInterpretation
return
}
if healthInterpretation.LuaScript != "" && a.healthInterpretation.LuaScript == "" {
a.healthInterpretation.LuaScript = healthInterpretation.LuaScript
}
}
func (a *resourceCustomAccessor) appendDependencyInterpretation(dependencyInterpretation *configv1alpha1.DependencyInterpretation) {
a.dependencyInterpretations = append(a.dependencyInterpretations, dependencyInterpretation)
}