/
condition.go
85 lines (75 loc) · 3.07 KB
/
condition.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
package controller
import (
apiv1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
rapi "github.com/amadeusitgroup/redis-operator/pkg/api/redis/v1"
)
// newCondition return a new defaulted instance of a RedisClusterCondition
func newCondition(conditionType rapi.RedisClusterConditionType, status apiv1.ConditionStatus, now metav1.Time, reason, message string) rapi.RedisClusterCondition {
return rapi.RedisClusterCondition{
Type: conditionType,
Status: status,
LastProbeTime: now,
LastTransitionTime: now,
Reason: reason,
Message: message,
}
}
// updateCondition return an updated version of the RedisClusterCondition
func updateCondition(from rapi.RedisClusterCondition, status apiv1.ConditionStatus, now metav1.Time, reason, message string) rapi.RedisClusterCondition {
newCondition := from.DeepCopy()
newCondition.LastProbeTime = now
newCondition.Message = message
newCondition.Reason = reason
if status != newCondition.Status {
newCondition.Status = status
newCondition.LastTransitionTime = now
}
return *newCondition
}
func setCondition(clusterStatus *rapi.RedisClusterStatus, conditionType rapi.RedisClusterConditionType, status apiv1.ConditionStatus, now metav1.Time, reason, message string) bool {
updated := false
found := false
for i, c := range clusterStatus.Conditions {
if c.Type == conditionType {
found = true
if c.Status != status {
updated = true
clusterStatus.Conditions[i] = updateCondition(c, status, now, reason, message)
}
}
}
if !found {
updated = true
clusterStatus.Conditions = append(clusterStatus.Conditions, newCondition(conditionType, status, now, reason, message))
}
return updated
}
func setScalingCondition(clusterStatus *rapi.RedisClusterStatus, status bool) bool {
statusCondition := apiv1.ConditionFalse
if status {
statusCondition = apiv1.ConditionTrue
}
return setCondition(clusterStatus, rapi.RedisClusterScaling, statusCondition, metav1.Now(), "cluster needs more pods", "cluster needs more pods")
}
func setRebalancingCondition(clusterStatus *rapi.RedisClusterStatus, status bool) bool {
statusCondition := apiv1.ConditionFalse
if status {
statusCondition = apiv1.ConditionTrue
}
return setCondition(clusterStatus, rapi.RedisClusterRebalancing, statusCondition, metav1.Now(), "topology as changed", "reconfigure on-going after topology changed")
}
func setRollingUpdategCondition(clusterStatus *rapi.RedisClusterStatus, status bool) bool {
statusCondition := apiv1.ConditionFalse
if status {
statusCondition = apiv1.ConditionTrue
}
return setCondition(clusterStatus, rapi.RedisClusterRollingUpdate, statusCondition, metav1.Now(), "Rolling update ongoing", "a Rolling update is ongoing")
}
func setClusterStatusCondition(clusterStatus *rapi.RedisClusterStatus, status bool) bool {
statusCondition := apiv1.ConditionFalse
if status {
statusCondition = apiv1.ConditionTrue
}
return setCondition(clusterStatus, rapi.RedisClusterOK, statusCondition, metav1.Now(), "redis-cluster is correctly configure", "redis-cluster is correctly configure")
}