http-add-on/pkg/k8s/scaledobject.go

69 lines
1.7 KiB
Go

package k8s
import (
kedav1alpha1 "github.com/kedacore/keda/v2/apis/keda/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/utils/ptr"
"github.com/kedacore/http-add-on/operator/apis/http/v1alpha1"
)
const (
soPollingInterval = 15
soTriggerType = "external-push"
ScalerAddressKey = "scalerAddress"
HTTPScaledObjectKey = "httpScaledObject"
)
// NewScaledObject creates a new ScaledObject in memory
func NewScaledObject(
namespace string,
name string,
labels map[string]string,
annotations map[string]string,
workloadRef v1alpha1.ScaleTargetRef,
scalerAddress string,
minReplicas *int32,
maxReplicas *int32,
cooldownPeriod *int32,
initialCooldownPeriod *int32,
) *kedav1alpha1.ScaledObject {
return &kedav1alpha1.ScaledObject{
TypeMeta: metav1.TypeMeta{
APIVersion: kedav1alpha1.SchemeGroupVersion.Identifier(),
Kind: ObjectKind(&kedav1alpha1.ScaledObject{}),
},
ObjectMeta: metav1.ObjectMeta{
Namespace: namespace,
Name: name,
Labels: labels,
Annotations: annotations,
},
Spec: kedav1alpha1.ScaledObjectSpec{
ScaleTargetRef: &kedav1alpha1.ScaleTarget{
APIVersion: workloadRef.APIVersion,
Kind: workloadRef.Kind,
Name: workloadRef.Name,
},
PollingInterval: ptr.To[int32](soPollingInterval),
CooldownPeriod: cooldownPeriod,
MinReplicaCount: minReplicas,
MaxReplicaCount: maxReplicas,
Advanced: &kedav1alpha1.AdvancedConfig{
RestoreToOriginalReplicaCount: true,
},
Triggers: []kedav1alpha1.ScaleTriggers{
{
Type: soTriggerType,
Metadata: map[string]string{
ScalerAddressKey: scalerAddress,
HTTPScaledObjectKey: name,
},
},
},
InitialCooldownPeriod: initialCooldownPeriod,
},
}
}