/
throttling_rule.go
97 lines (74 loc) · 3.34 KB
/
throttling_rule.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
Copyright 2022.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package v1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
//+kubebuilder:object:root=true
// ThrottlingRuleList contains a list of ThrottlingRule
type ThrottlingRuleList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []ThrottlingRule `json:"items"`
}
//+kubebuilder:object:root=true
//+kubebuilder:resource:shortName=thr
//+kubebuilder:subresource:status
//+kubebuilder:printcolumn:name="Enabled",type="boolean",JSONPath=".spec.enabled",description="Whether the ThrottlingRule is enforced or not"
//+kubebuilder:printcolumn:name="Dry-run",type="boolean",JSONPath=".spec.dryRun",description="Whether the DeletionRule runs in dry-run mode (i.e. only logging affected resources)"
//+kubebuilder:printcolumn:name="Schedules",type="string",priority=1,JSONPath=".spec.schedules[*]",description="The active schedules"
//+kubebuilder:printcolumn:name="Last run",type="string",format="date",JSONPath=".status.lastRun.timestamp",description="Last run date"
//+kubebuilder:printcolumn:name="Run count",type="integer",JSONPath=".status.runCount",description="Total runs of the rule"
//+kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp"
// ThrottlingRule is the Schema for the throttlingrules API
type ThrottlingRule struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec ThrottlingRuleSpec `json:"spec,omitempty"`
Status ThrottlingRuleStatus `json:"status,omitempty"`
}
// ThrottlingRuleSpec defines the desired state of ThrottlingRule
type ThrottlingRuleSpec struct {
//+kubebuilder:default:=true
Enabled bool `json:"enabled,omitempty"`
//+kubebuilder:default:= false
DryRun bool `json:"dryRun,omitempty"`
//+kubebuilder:default:={matchKinds:{Deployment,StatefulSet}}
Selector Selector `json:"selector"`
//+kubebuilder:validation:MinItems:=1
Schedules []ThrottlingSchedule `json:"schedules"`
}
type ThrottlingSchedule struct {
ReentrantSchedule `json:",inline"`
//+kubebuilder:validation:Minimum:=0
DesiredReplicas int `json:"desiredReplicas"`
}
// ThrottlingRuleStatus defines the observed state of ThrottlingRule
type ThrottlingRuleStatus struct {
NextRun metav1.Time `json:"nextRun,omitempty"`
//+kubebuilder:default:=0
RunCount int `json:"runCount"`
//+kubebuilder:validation:Optional
LastRun *LastRunInfo `json:"lastRun,omitempty"`
//+kubebuilder:validation:Optional
ActiveReentrantThrottle *ActiveReentrantThrottle `json:"activeReentrantThrottle,omitempty"`
}
type ActiveReentrantThrottle struct {
//+kubebuilder:validation:Type:=array
AffectedResources []AffectedResource `json:"affectedResources,omitempty"`
//+kubebuilder:validation:Optional
ReentrantOn metav1.Time `json:"reentrantOn,omitempty"`
}
func init() {
SchemeBuilder.Register(&ThrottlingRule{}, &ThrottlingRuleList{})
}