/
autoscaling_types.go
104 lines (81 loc) · 3.21 KB
/
autoscaling_types.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
98
99
100
101
102
103
104
/*
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 v1beta1
import (
condition "github.com/openstack-k8s-operators/lib-common/modules/common/condition"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// Prometheus defines which prometheus to use for Autoscaling
type Prometheus struct {
// Enables the deployment of autoscaling prometheus
// +kubebuilder:default=false
DeployPrometheus bool `json:"deployPrometheus,omitempty"`
// Host of user deployed prometheus if deployPrometheus is set to false
Host string `json:"host,omitempty"`
// Port of user deployed prometheus if deployPrometheus is set to false
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=65535
Port int32 `json:"port,omitempty"`
}
// AutoscalingSpec defines the desired state of Autoscaling
type AutoscalingSpec struct {
// Specification of which prometheus to use for autoscaling
Prometheus Prometheus `json:"prometheus,omitempty"`
// Allows enabling and disabling the autoscaling feature
// +kubebuilder:default=false
Enabled bool `json:"enabled,omitempty"`
}
// AutoscalingStatus defines the observed state of Autoscaling
type AutoscalingStatus struct {
// ReadyCount of autoscaling instances
ReadyCount int32 `json:"readyCount,omitempty"`
// Map of hashes to track e.g. job status
Hash map[string]string `json:"hash,omitempty"`
// Conditions
Conditions condition.Conditions `json:"conditions,omitempty" optional:"true"`
}
//+kubebuilder:object:root=true
//+kubebuilder:subresource:status
// Autoscaling is the Schema for the autoscalings API
type Autoscaling struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec AutoscalingSpec `json:"spec,omitempty"`
Status AutoscalingStatus `json:"status,omitempty"`
}
//+kubebuilder:object:root=true
// AutoscalingList contains a list of Autoscaling
type AutoscalingList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []Autoscaling `json:"items"`
}
// IsReady - returns true if Autescaling is reconciled successfully
func (instance Autoscaling) IsReady() bool {
return instance.Status.Conditions.IsTrue(condition.ReadyCondition)
}
func init() {
SchemeBuilder.Register(&Autoscaling{}, &AutoscalingList{})
}
// RbacConditionsSet - set the conditions for the rbac object
func (instance Autoscaling) RbacConditionsSet(c *condition.Condition) {
instance.Status.Conditions.Set(c)
}
// RbacNamespace - return the namespace
func (instance Autoscaling) RbacNamespace() string {
return instance.Namespace
}
// RbacResourceName - return the name to be used for rbac objects (serviceaccount, role, rolebinding)
func (instance Autoscaling) RbacResourceName() string {
return "telemetry-" + instance.Name
}