Skip to content

Commit 28ef54d

Browse files
author
Jeff McCormick
committed
revise cluster delete logic
1 parent 3401efc commit 28ef54d

File tree

8 files changed

+61
-39
lines changed

8 files changed

+61
-39
lines changed

client/cmd/backup.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func showBackup(args []string) {
6262
}
6363

6464
}
65-
func showItem(name string ) {
65+
func showItem(name string) {
6666
var pvcName string
6767
//print the pgbackups TPR
6868
result := tpr.PgBackup{}
@@ -78,15 +78,15 @@ func showItem(name string ) {
7878
} else {
7979
pvcName = result.Spec.PVC_NAME
8080
}
81-
fmt.Printf("\npgbackup %s\n", name+" was found PVC_NAME is " + pvcName)
81+
fmt.Printf("\npgbackup %s\n", name+" was found PVC_NAME is "+pvcName)
8282
} else if errors.IsNotFound(err) {
8383
configPVC := viper.GetString("DB.PVC_NAME")
8484
if configPVC == "" {
8585
pvcName = name + "-backup-pvc"
8686
} else {
8787
pvcName = configPVC
8888
}
89-
fmt.Printf("\npgbackup %s\n", name+" was not found assuming PVC_NAME is " + pvcName)
89+
fmt.Printf("\npgbackup %s\n", name+" was not found assuming PVC_NAME is "+pvcName)
9090
} else {
9191
log.Errorf("\npgbackup %s\n", name+" lookup error ")
9292
log.Error(err.Error())
@@ -109,7 +109,7 @@ func showItem(name string ) {
109109
lo = v1.ListOptions{LabelSelector: "name=" + name}
110110
log.Debug("label selector is " + lo.LabelSelector)
111111
dbpods, err := Clientset.Core().Pods(Namespace).List(lo)
112-
if err != nil || len(dbpods.Items) == 0{
112+
if err != nil || len(dbpods.Items) == 0 {
113113
fmt.Printf("\ndatabase pod %s\n", name+" is not found")
114114
fmt.Println(err.Error())
115115
} else {
@@ -337,7 +337,7 @@ func printLog(name string, pvcName string) {
337337
return
338338
}
339339
var resultPod *v1.Pod
340-
resultPod, err = Clientset.Core().Pods(v1.NamespaceDefault).Create(&newpod)
340+
resultPod, err = Clientset.Core().Pods(Namespace).Create(&newpod)
341341
if err != nil {
342342
log.Error("error creating lspvc Pod ")
343343
log.Error(err.Error())

client/cmd/pvc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ func printPVCListing(pvcName string) {
115115
return
116116
}
117117
var resultPod *v1.Pod
118-
resultPod, err = Clientset.Core().Pods(v1.NamespaceDefault).Create(&newpod)
118+
resultPod, err = Clientset.Core().Pods(Namespace).Create(&newpod)
119119
if err != nil {
120120
log.Error("error creating lspvc Pod " + err.Error())
121121
return

operator/backup/backup.go

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,11 @@ import (
2323
"text/template"
2424
"time"
2525

26-
"github.com/crunchydata/postgres-operator/tpr"
2726
"github.com/crunchydata/postgres-operator/operator/pvc"
27+
"github.com/crunchydata/postgres-operator/tpr"
2828

2929
"k8s.io/client-go/kubernetes"
3030

31-
"k8s.io/client-go/pkg/api"
3231
"k8s.io/client-go/pkg/api/v1"
3332
v1batch "k8s.io/client-go/pkg/apis/batch/v1"
3433

@@ -69,7 +68,7 @@ func Process(clientset *kubernetes.Clientset, client *rest.RESTClient, stopchan
6968

7069
eventchan := make(chan *tpr.PgBackup)
7170

72-
source := cache.NewListWatchFromClient(client, "pgbackups", api.NamespaceAll, fields.Everything())
71+
source := cache.NewListWatchFromClient(client, "pgbackups", namespace, fields.Everything())
7372

7473
createAddHandler := func(obj interface{}) {
7574
job := obj.(*tpr.PgBackup)
@@ -85,8 +84,6 @@ func Process(clientset *kubernetes.Clientset, client *rest.RESTClient, stopchan
8584
updateHandler := func(old interface{}, obj interface{}) {
8685
job := obj.(*tpr.PgBackup)
8786
eventchan <- job
88-
//log.Info("updating PgBackup object")
89-
//log.Info("updated with Name=" + job.Spec.Name)
9087
}
9188

9289
_, controller := cache.NewInformer(
@@ -121,12 +118,12 @@ func addBackup(clientset *kubernetes.Clientset, client *rest.RESTClient, job *tp
121118
//create the PVC if necessary
122119
if job.Spec.PVC_NAME == "" {
123120
job.Spec.PVC_NAME = job.Spec.Name + "-backup-pvc"
124-
err = pvc.Create(clientset, job.Spec.PVC_NAME, job.Spec.PVC_ACCESS_MODE, job.Spec.PVC_SIZE, namespace)
125-
if err != nil {
126-
log.Error(err.Error())
127-
return
128-
}
129-
log.Info("created backup PVC =" + job.Spec.PVC_NAME + " in namespace " + namespace)
121+
err = pvc.Create(clientset, job.Spec.PVC_NAME, job.Spec.PVC_ACCESS_MODE, job.Spec.PVC_SIZE, namespace)
122+
if err != nil {
123+
log.Error(err.Error())
124+
return
125+
}
126+
log.Info("created backup PVC =" + job.Spec.PVC_NAME + " in namespace " + namespace)
130127

131128
}
132129

@@ -150,15 +147,13 @@ func addBackup(clientset *kubernetes.Clientset, client *rest.RESTClient, job *tp
150147
jobDocString := doc2.String()
151148
log.Debug(jobDocString)
152149

153-
//newjob := v1beta1.Job{}
154150
newjob := v1batch.Job{}
155151
err = json.Unmarshal(doc2.Bytes(), &newjob)
156152
if err != nil {
157153
log.Error("error unmarshalling json into Job " + err.Error())
158154
return
159155
}
160156

161-
//resultJob, err := clientset.ExtensionsV1beta1Client.Jobs(v1.NamespaceDefault).Create(&newjob)
162157
resultJob, err := clientset.Batch().Jobs(namespace).Create(&newjob)
163158
if err != nil {
164159
log.Error("error creating Job " + err.Error())
@@ -173,7 +168,6 @@ func deleteBackup(clientset *kubernetes.Clientset, client *rest.RESTClient, job
173168
log.Debug("deleting Job with Name=" + jobName + " in namespace " + namespace)
174169

175170
//delete the job
176-
//err := clientset.ExtensionsV1beta1Client.Jobs(v1.NamespaceDefault).Delete(jobName,
177171
err := clientset.Batch().Jobs(namespace).Delete(jobName,
178172
&v1.DeleteOptions{})
179173
if err != nil {

operator/cluster/cluster.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
"github.com/crunchydata/postgres-operator/tpr"
2727

2828
"k8s.io/client-go/kubernetes"
29-
"k8s.io/client-go/pkg/api"
3029
"k8s.io/client-go/pkg/fields"
3130
"k8s.io/client-go/rest"
3231
"k8s.io/client-go/tools/cache"
@@ -79,7 +78,7 @@ func Process(clientset *kubernetes.Clientset, client *rest.RESTClient, stopchan
7978

8079
eventchan := make(chan *tpr.PgCluster)
8180

82-
source := cache.NewListWatchFromClient(client, "pgclusters", api.NamespaceAll, fields.Everything())
81+
source := cache.NewListWatchFromClient(client, "pgclusters", namespace, fields.Everything())
8382

8483
createAddHandler := func(obj interface{}) {
8584
cluster := obj.(*tpr.PgCluster)
@@ -95,8 +94,6 @@ func Process(clientset *kubernetes.Clientset, client *rest.RESTClient, stopchan
9594
updateHandler := func(old interface{}, obj interface{}) {
9695
cluster := obj.(*tpr.PgCluster)
9796
eventchan <- cluster
98-
//log.Info("updating PgCluster object")
99-
//log.Info("updated with Name=" + cluster.Spec.Name)
10097
}
10198

10299
_, controller := cache.NewInformer(

operator/cluster/upgrade_strategy_1.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -318,24 +318,34 @@ func shutdownCluster(clientset *kubernetes.Clientset, client *rest.RESTClient, c
318318

319319
var replicaName = cl.Spec.Name + REPLICA_SUFFIX
320320

321+
//drain the deployments
322+
err = util.DrainDeployment(clientset, replicaName, namespace)
323+
if err != nil {
324+
log.Error("error draining replica Deployment " + err.Error())
325+
}
326+
err = util.DrainDeployment(clientset, cl.Spec.Name, namespace)
327+
if err != nil {
328+
log.Error("error draining master Deployment " + err.Error())
329+
}
330+
331+
//sleep just a bit to give the drain time to work
332+
time.Sleep(2000 * time.Millisecond)
333+
321334
//delete the replica deployment
322-
err = clientset.Deployments(namespace).Delete(replicaName,
323-
&v1.DeleteOptions{})
335+
err = clientset.Deployments(namespace).Delete(replicaName, &v1.DeleteOptions{})
324336
if err != nil {
325337
log.Error("error deleting replica Deployment " + err.Error())
326338
}
327339

328-
log.Info("deleted replica Deployment " + replicaName + " in namespace " + namespace)
329-
330340
//wait for the replica deployment to delete
331341
err = util.WaitUntilDeploymentIsDeleted(clientset, replicaName, time.Minute, namespace)
332342
if err != nil {
333343
log.Error("error waiting for replica Deployment deletion " + err.Error())
334344
}
345+
log.Info("deleted replica Deployment " + replicaName + " in namespace " + namespace)
335346

336347
//delete the master deployment
337-
err = clientset.Deployments(namespace).Delete(cl.Spec.Name,
338-
&v1.DeleteOptions{})
348+
err = clientset.Deployments(namespace).Delete(cl.Spec.Name, &v1.DeleteOptions{})
339349
if err != nil {
340350
log.Error("error deleting master Deployment " + err.Error())
341351
}

operator/database/database.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424

2525
"k8s.io/client-go/kubernetes"
2626

27-
"k8s.io/client-go/pkg/api"
2827
"k8s.io/client-go/pkg/api/v1"
2928
"k8s.io/client-go/pkg/fields"
3029
"k8s.io/client-go/rest"
@@ -73,7 +72,7 @@ func Process(clientset *kubernetes.Clientset, client *rest.RESTClient, stopchan
7372

7473
eventchan := make(chan *tpr.PgDatabase)
7574

76-
source := cache.NewListWatchFromClient(client, "pgdatabases", api.NamespaceAll, fields.Everything())
75+
source := cache.NewListWatchFromClient(client, "pgdatabases", namespace, fields.Everything())
7776

7877
createAddHandler := func(obj interface{}) {
7978
db := obj.(*tpr.PgDatabase)
@@ -89,8 +88,6 @@ func Process(clientset *kubernetes.Clientset, client *rest.RESTClient, stopchan
8988
updateHandler := func(old interface{}, obj interface{}) {
9089
db := obj.(*tpr.PgDatabase)
9190
eventchan <- db
92-
//log.Info("updating PgDatabase object")
93-
//log.Info("updated with Name=" + db.Spec.Name)
9491
}
9592

9693
_, controller := cache.NewInformer(

operator/upgrade/upgrade.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727

2828
"k8s.io/client-go/kubernetes"
2929

30-
"k8s.io/client-go/pkg/api"
3130
"k8s.io/client-go/pkg/api/errors"
3231
"k8s.io/client-go/pkg/api/v1"
3332
v1batch "k8s.io/client-go/pkg/apis/batch/v1"
@@ -41,7 +40,7 @@ func Process(clientset *kubernetes.Clientset, client *rest.RESTClient, stopchan
4140

4241
eventchan := make(chan *tpr.PgUpgrade)
4342

44-
source := cache.NewListWatchFromClient(client, "pgupgrades", api.NamespaceAll, fields.Everything())
43+
source := cache.NewListWatchFromClient(client, "pgupgrades", namespace, fields.Everything())
4544

4645
createAddHandler := func(obj interface{}) {
4746
job := obj.(*tpr.PgUpgrade)
@@ -153,7 +152,6 @@ func deleteUpgrade(clientset *kubernetes.Clientset, tprclient *rest.RESTClient,
153152
log.Debug("deleting Job with Name=" + jobName + " in namespace " + namespace)
154153

155154
//delete the job
156-
//err := clientset.ExtensionsV1beta1Client.Jobs(v1.NamespaceDefault).Delete(jobName,
157155
err := clientset.Batch().Jobs(namespace).Delete(jobName,
158156
&v1.DeleteOptions{})
159157
if err != nil {

operator/util/util.go

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"io/ioutil"
2323
"text/template"
2424

25+
"k8s.io/client-go/kubernetes"
2526
"k8s.io/client-go/pkg/api"
2627
"k8s.io/client-go/rest"
2728
)
@@ -88,10 +89,10 @@ func Patch(tprclient *rest.RESTClient, path string, value string, resource strin
8889
if err4 != nil {
8990
log.Error("error in converting patch " + err4.Error())
9091
}
91-
log.Debug(string(patchBytes))
92+
log.Info(string(patchBytes))
9293

9394
_, err6 := tprclient.Patch(api.JSONPatchType).
94-
Namespace(api.NamespaceDefault).
95+
Namespace(namespace).
9596
Resource(resource).
9697
Name(name).
9798
Body(patchBytes).
@@ -101,3 +102,28 @@ func Patch(tprclient *rest.RESTClient, path string, value string, resource strin
101102
return err6
102103

103104
}
105+
106+
func DrainDeployment(clientset *kubernetes.Clientset, name string, namespace string) error {
107+
108+
var err error
109+
var patchBytes []byte
110+
111+
things := make([]ThingSpec, 1)
112+
things[0].Op = "replace"
113+
things[0].Path = "/spec/replicas"
114+
things[0].Value = "0"
115+
116+
patchBytes, err = json.Marshal(things)
117+
if err != nil {
118+
log.Error("error in converting patch " + err.Error())
119+
}
120+
log.Debug(string(patchBytes))
121+
122+
_, err = clientset.Deployments(namespace).Patch(name, api.JSONPatchType, patchBytes, "")
123+
if err != nil {
124+
log.Error(err.Error())
125+
}
126+
127+
return err
128+
129+
}

0 commit comments

Comments
 (0)