This repository has been archived by the owner on Nov 18, 2019. It is now read-only.
/
util.go
158 lines (136 loc) · 5.64 KB
/
util.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
package kubedb
import (
api "github.com/kubedb/apimachinery/apis/kubedb/v1alpha1"
cs "github.com/kubedb/apimachinery/client/clientset/versioned/typed/kubedb/v1alpha1"
"github.com/kubedb/apimachinery/client/clientset/versioned/typed/kubedb/v1alpha1/util"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/wait"
kutil "kmodules.xyz/client-go"
)
var (
WaitForMySQLBeReady = waitForMySQLBeReady
WaitForPostgreSQLBeReady = waitForPostgreSQLBeReady
WaitForElasticsearchBeReady = waitForElasticsearchBeReady
WaitForMongoDbBeReady = waitForMongoDbBeReady
WaitForRedisBeReady = waitForRedisBeReady
WaitForMemcachedBeReady = waitForMemcachedBeReady
)
func waitForMemcachedBeReady(extClient cs.KubedbV1alpha1Interface, name, namespace string) error {
return wait.PollImmediate(kutil.RetryInterval, kutil.ReadinessTimeout, func() (bool, error) {
mc, err := extClient.Memcacheds(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return false, nil
}
return mc.Status.Phase == api.DatabasePhaseRunning, nil
})
}
func waitForRedisBeReady(extClient cs.KubedbV1alpha1Interface, name, namespace string) error {
return wait.PollImmediate(kutil.RetryInterval, kutil.ReadinessTimeout, func() (bool, error) {
rd, err := extClient.Redises(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return false, nil
}
return rd.Status.Phase == api.DatabasePhaseRunning, nil
})
}
func waitForMongoDbBeReady(extClient cs.KubedbV1alpha1Interface, name, namespace string) error {
return wait.PollImmediate(kutil.RetryInterval, kutil.ReadinessTimeout, func() (bool, error) {
mg, err := extClient.MongoDBs(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return false, nil
}
return mg.Status.Phase == api.DatabasePhaseRunning, nil
})
}
func waitForElasticsearchBeReady(extClient cs.KubedbV1alpha1Interface, name, namespace string) error {
return wait.PollImmediate(kutil.RetryInterval, kutil.ReadinessTimeout, func() (bool, error) {
es, err := extClient.Elasticsearches(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return false, nil
}
return es.Status.Phase == api.DatabasePhaseRunning, nil
})
}
func waitForPostgreSQLBeReady(extClient cs.KubedbV1alpha1Interface, name, namespace string) error {
return wait.PollImmediate(kutil.RetryInterval, kutil.ReadinessTimeout, func() (bool, error) {
pgsql, err := extClient.Postgreses(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return false, nil
}
return pgsql.Status.Phase == api.DatabasePhaseRunning, nil
})
}
func waitForMySQLBeReady(extClient cs.KubedbV1alpha1Interface, name, namespace string) error {
return wait.PollImmediate(kutil.RetryInterval, kutil.ReadinessTimeout, func() (bool, error) {
mysql, err := extClient.MySQLs(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return false, nil
}
return mysql.Status.Phase == api.DatabasePhaseRunning, nil
})
}
func patchRedis(extClient cs.KubedbV1alpha1Interface, rd *api.Redis, transform func(*api.Redis) *api.Redis) error {
return wait.PollImmediate(kutil.RetryInterval, kutil.ReadinessTimeout, func() (bool, error) {
if _, _, err := util.PatchRedis(extClient, rd, transform); err != nil {
return false, nil
}
return true, nil
})
}
func patchMemcached(extClient cs.KubedbV1alpha1Interface, mc *api.Memcached, transform func(*api.Memcached) *api.Memcached) error {
return wait.PollImmediate(kutil.RetryInterval, kutil.ReadinessTimeout, func() (bool, error) {
if _, _, err := util.PatchMemcached(extClient, mc, transform); err != nil {
return false, nil
}
return true, nil
})
}
func patchMongoDb(extClient cs.KubedbV1alpha1Interface, mg *api.MongoDB, transform func(*api.MongoDB) *api.MongoDB) error {
return wait.PollImmediate(kutil.RetryInterval, kutil.ReadinessTimeout, func() (bool, error) {
if _, _, err := util.PatchMongoDB(extClient, mg, transform); err != nil {
return false, nil
}
return true, nil
})
}
func patchElasticsearch(extClient cs.KubedbV1alpha1Interface, es *api.Elasticsearch, transform func(*api.Elasticsearch) *api.Elasticsearch) error {
return wait.PollImmediate(kutil.RetryInterval, kutil.ReadinessTimeout, func() (bool, error) {
if _, _, err := util.PatchElasticsearch(extClient, es, transform); err != nil {
return false, nil
}
return true, nil
})
}
func patchPostgreSQL(extClient cs.KubedbV1alpha1Interface, pgsql *api.Postgres, transform func(*api.Postgres) *api.Postgres) error {
return wait.PollImmediate(kutil.RetryInterval, kutil.ReadinessTimeout, func() (bool, error) {
if _, _, err := util.PatchPostgres(extClient, pgsql, transform); err != nil {
return false, nil
}
return true, nil
})
}
func patchMySQL(extClient cs.KubedbV1alpha1Interface, mysql *api.MySQL, transform func(*api.MySQL) *api.MySQL) error {
return wait.PollImmediate(kutil.RetryInterval, kutil.ReadinessTimeout, func() (bool, error) {
if _, _, err := util.PatchMySQL(extClient, mysql, transform); err != nil {
return false, nil
}
return true, nil
})
}
func deleteInBackground() *metav1.DeleteOptions {
policy := metav1.DeletePropagationBackground
return &metav1.DeleteOptions{PropagationPolicy: &policy}
}
func patchDormantDatabase(extClient cs.KubedbV1alpha1Interface, name, namespace string) error {
return wait.PollImmediate(kutil.RetryInterval, kutil.ReadinessTimeout, func() (bool, error) {
dormantDatabase, err := extClient.DormantDatabases(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return false, nil
}
_, _, err = util.PatchDormantDatabase(extClient, dormantDatabase, func(in *api.DormantDatabase) *api.DormantDatabase {
in.Spec.WipeOut = true
return in
})
return true, nil
})
}