-
Notifications
You must be signed in to change notification settings - Fork 112
/
status.go
193 lines (178 loc) · 7.14 KB
/
status.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/*
Copyright 2023.
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 status contains different conditions, phases and progresses,
// being used by DataScienceCluster and DSCInitialization's controller
package status
import (
conditionsv1 "github.com/openshift/custom-resource-status/conditions/v1"
corev1 "k8s.io/api/core/v1"
)
// These constants represent the overall Phase as used by .Status.Phase.
const (
// PhaseIgnored is used when a resource is ignored
// is an example of a constant that is not used anywhere in the code.
PhaseIgnored = "Ignored"
// PhaseNotReady is used when waiting for system to be ready after reconcile is successful
// is an example of a constant that is not used anywhere in the code.
PhaseNotReady = "Not Ready"
// PhaseClusterExpanding is used when cluster is expanding capacity
// is an example of a constant that is not used anywhere in the code.
PhaseClusterExpanding = "Expanding Capacity"
// PhaseDeleting is used when cluster is deleting
// is an example of a constant that is not used anywhere in the code.
PhaseDeleting = "Deleting"
// PhaseConnecting is used when cluster is connecting to external cluster
// is an example of a constant that is not used anywhere in the code.
PhaseConnecting = "Connecting"
// PhaseOnboarding is used when consumer is Onboarding
// is an example of a constant that is not used anywhere in the code.
PhaseOnboarding = "Onboarding"
// PhaseProgressing is used when SetProgressingCondition() is called.
PhaseProgressing = "Progressing"
// PhaseError is used when SetErrorCondition() is called.
PhaseError = "Error"
// PhaseReady is used when SetCompleteCondition is called.
PhaseReady = "Ready"
)
// List of constants to show different reconciliation messages and statuses.
const (
// ReconcileFailed is used when multiple DSCI instance exists or DSC reconcile failed/removal failed.
ReconcileFailed = "ReconcileFailed"
ReconcileInit = "ReconcileInit"
ReconcileCompleted = "ReconcileCompleted"
ReconcileCompletedWithComponentErrors = "ReconcileCompletedWithComponentErrors"
ReconcileCompletedMessage = "Reconcile completed successfully"
// ConditionReconcileComplete represents extra Condition Type, used by .Condition.Type.
ConditionReconcileComplete conditionsv1.ConditionType = "ReconcileComplete"
)
const (
ReadySuffix = "Ready"
)
// SetProgressingCondition sets the ProgressingCondition to True and other conditions to false or
// Unknown. Used when we are just starting to reconcile, and there are no existing conditions.
func SetProgressingCondition(conditions *[]conditionsv1.Condition, reason string, message string) {
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: ConditionReconcileComplete,
Status: corev1.ConditionUnknown,
Reason: reason,
Message: message,
})
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: conditionsv1.ConditionAvailable,
Status: corev1.ConditionFalse,
Reason: reason,
Message: message,
})
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: conditionsv1.ConditionProgressing,
Status: corev1.ConditionTrue,
Reason: reason,
Message: message,
})
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: conditionsv1.ConditionDegraded,
Status: corev1.ConditionFalse,
Reason: reason,
Message: message,
})
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: conditionsv1.ConditionUpgradeable,
Status: corev1.ConditionUnknown,
Reason: reason,
Message: message,
})
}
// SetErrorCondition sets the ConditionReconcileComplete to False in case of any errors
// during the reconciliation process.
func SetErrorCondition(conditions *[]conditionsv1.Condition, reason string, message string) {
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: ConditionReconcileComplete,
Status: corev1.ConditionFalse,
Reason: reason,
Message: message,
})
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: conditionsv1.ConditionAvailable,
Status: corev1.ConditionFalse,
Reason: reason,
Message: message,
})
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: conditionsv1.ConditionProgressing,
Status: corev1.ConditionFalse,
Reason: reason,
Message: message,
})
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: conditionsv1.ConditionDegraded,
Status: corev1.ConditionTrue,
Reason: reason,
Message: message,
})
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: conditionsv1.ConditionUpgradeable,
Status: corev1.ConditionUnknown,
Reason: reason,
Message: message,
})
}
// SetCompleteCondition sets the ConditionReconcileComplete to True and other Conditions
// to indicate that the reconciliation process has completed successfully.
func SetCompleteCondition(conditions *[]conditionsv1.Condition, reason string, message string) {
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: ConditionReconcileComplete,
Status: corev1.ConditionTrue,
Reason: reason,
Message: message,
})
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: conditionsv1.ConditionAvailable,
Status: corev1.ConditionTrue,
Reason: reason,
Message: message,
})
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: conditionsv1.ConditionProgressing,
Status: corev1.ConditionFalse,
Reason: reason,
Message: message,
})
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: conditionsv1.ConditionDegraded,
Status: corev1.ConditionFalse,
Reason: reason,
Message: message,
})
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: conditionsv1.ConditionUpgradeable,
Status: corev1.ConditionTrue,
Reason: reason,
Message: message,
})
}
// SetComponentCondition appends Condition Type with const ReadySuffix for given component
// when component finished reconcile.
func SetComponentCondition(conditions *[]conditionsv1.Condition, component string, reason string, message string, status corev1.ConditionStatus) {
condtype := component + ReadySuffix
conditionsv1.SetStatusCondition(conditions, conditionsv1.Condition{
Type: conditionsv1.ConditionType(condtype),
Status: status,
Reason: reason,
Message: message,
})
}
// RemoveComponentCondition remove Condition of giving component.
func RemoveComponentCondition(conditions *[]conditionsv1.Condition, component string) {
condType := component + ReadySuffix
conditionsv1.RemoveStatusCondition(conditions, conditionsv1.ConditionType(condType))
}