/
datasource.go
97 lines (85 loc) · 2.76 KB
/
datasource.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 2023 KubeAGI.
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 v1alpha1
import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func (datasource Datasource) TypedObjectReference() *TypedObjectReference {
return &TypedObjectReference{
APIGroup: &GroupVersion.Group,
Kind: "Datasource",
Name: datasource.Name,
Namespace: &datasource.Namespace,
}
}
const (
LabelDatasourceType = Group + "/datasource-type"
)
type DatasourceType string
const (
DatasourceTypeOSS DatasourceType = "oss"
DatasourceTypeRDMA DatasourceType = "RDMA"
DatasourceTypePostgreSQL DatasourceType = "postgresql"
DatasourceTypeWeb DatasourceType = "web"
DatasourceTypeUnknown DatasourceType = "unknown"
)
func (ds DatasourceSpec) Type() DatasourceType {
switch {
case ds.OSS != nil:
return DatasourceTypeOSS
case ds.RDMA != nil:
return DatasourceTypeRDMA
case ds.PostgreSQL != nil:
return DatasourceTypePostgreSQL
case ds.Web != nil:
return DatasourceTypeWeb
default:
return DatasourceTypeUnknown
}
}
func (datasource Datasource) ReadyCondition() Condition {
currCon := datasource.Status.GetCondition(TypeReady)
// return current condition if condition not changed
if currCon.Status == corev1.ConditionTrue && currCon.Reason == ReasonAvailable {
return currCon
}
return Condition{
Type: TypeReady,
Status: corev1.ConditionTrue,
Reason: ReasonAvailable,
Message: "Check Success",
LastTransitionTime: metav1.Now(),
LastSuccessfulTime: metav1.Now(),
}
}
func (datasource Datasource) ErrorCondition(msg string) Condition {
currCon := datasource.Status.GetCondition(TypeReady)
// return current condition if condition not changed
if currCon.Status == corev1.ConditionFalse && currCon.Reason == ReasonUnavailable && currCon.Message == msg {
return currCon
}
// keep original LastSuccessfulTime if have
lastSuccessfulTime := metav1.Now()
if currCon.LastSuccessfulTime.IsZero() {
lastSuccessfulTime = currCon.LastSuccessfulTime
}
return Condition{
Type: TypeReady,
Status: corev1.ConditionFalse,
Reason: ReasonUnavailable,
Message: msg,
LastSuccessfulTime: lastSuccessfulTime,
LastTransitionTime: metav1.Now(),
}
}