api/v1/pdbwatcher_types.go (33 lines of code) (raw):
package v1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// EvictionLog defines a log entry for pod evictions
type Eviction struct {
PodName string `json:"podName,omitempty"`
EvictionTime metav1.Time `json:"evictionTime,omitempty"`
}
// EvictionAutoScalerSpec defines the desired state of EvictionAutoScaler
type EvictionAutoScalerSpec struct {
//todo make this mirror horizontalpodautoscaler's target reference
TargetName string `json:"targetName"`
TargetKind string `json:"targetKind"` //deployment or statefulset (anything with an update statedgy)
LastEviction Eviction `json:"lastEviction,omitempty"`
}
// EvictionAutoScalerStatus defines the observed state of EvictionAutoScaler
type EvictionAutoScalerStatus struct {
LastEviction Eviction `json:"lastEviction,omitempty"` //this is the last one the controller has processed.
MinReplicas int32 `json:"minReplicas"` // Minimum number of replicas to maintain
TargetGeneration int64 `json:"deploymentGeneration"` // generation (spec hash) of deployment or statefulse
Conditions []metav1.Condition `json:"conditions,omitempty"`
}
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// EvictionAutoScaler is the Schema for the EvictionAutoScalers API
type EvictionAutoScaler struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec EvictionAutoScalerSpec `json:"spec,omitempty"`
Status EvictionAutoScalerStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// EvictionAutoScalerList contains a list of EvictionAutoScaler
type EvictionAutoScalerList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []EvictionAutoScaler `json:"items"`
}
func init() {
SchemeBuilder.Register(&EvictionAutoScaler{}, &EvictionAutoScalerList{})
}