Skip to content

Commit 5007ae7

Browse files
Jonathan S. Katzjkatz
authored andcommitted
Ensure managed schedules are deleted
The pgo-rmdata job was not set up to delete the ConfigMap objects that are managed by the scheduler for scheduled tasks. This corrects that issue and ensures any scheduled task for a cluster being deleted is also removed. Issue: [ch6500]
1 parent 9a4e261 commit 5007ae7

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

kubeapi/configmap.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,25 @@ func DeleteConfigMap(clientset *kubernetes.Clientset, name, namespace string) er
8484
return err
8585

8686
}
87+
88+
// DeleteConfigMaps deletes a ConfigMap by a selector
89+
func DeleteConfigMaps(clientset *kubernetes.Clientset, selector, namespace string) error {
90+
log.Debugf("deleting configmaps with selector '%s'", selector)
91+
92+
deleteOptions := meta_v1.DeleteOptions{}
93+
listOptions := meta_v1.ListOptions{
94+
LabelSelector: selector,
95+
}
96+
97+
err := clientset.CoreV1().ConfigMaps(namespace).DeleteCollection(
98+
&deleteOptions, listOptions)
99+
100+
if err != nil {
101+
log.Error("error deleting ConfigMap " + err.Error())
102+
return err
103+
}
104+
105+
log.Debugf("deleted configmaps with selector '%s'", selector)
106+
107+
return nil
108+
}

pgo-rmdata/rmdata/process.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ func Delete(request Request) {
8383
}
8484

8585
log.Info("rmdata.Process cluster use case")
86+
87+
// first, clear out any of the scheduled jobs that may occur, as this would be
88+
// executing asynchronously against any stale data
89+
removeSchedules(request)
90+
8691
//the user had done something like:
8792
//pgo delete cluster mycluster --delete-data
8893
if request.RemoveData {
@@ -589,3 +594,22 @@ func removeReplicaServices(request Request) {
589594
}
590595

591596
}
597+
598+
// removeSchedules removes any of the ConfigMap objects that were created to
599+
// execute schedule tasks, such as backups
600+
// As these are consistently labeled, we can leverage Kuernetes selectors to
601+
// delete all of them
602+
func removeSchedules(request Request) {
603+
log.Debugf("removing schedules for '%s'", request.ClusterName)
604+
605+
// a ConfigMap used for the schedule uses the following label selector:
606+
// crunchy-scheduler=true,<config.LABEL_PG_CLUSTER>=<request.ClusterName>
607+
selector := fmt.Sprintf("crunchy-scheduler=true,%s=%s",
608+
config.LABEL_PG_CLUSTER, request.ClusterName)
609+
610+
// run the query the deletes all of the scheduled configmaps
611+
// if there is an error, log it, but continue on without making a big stink
612+
if err := kubeapi.DeleteConfigMaps(request.Clientset, selector, request.Namespace); err != nil {
613+
log.Error(err)
614+
}
615+
}

0 commit comments

Comments
 (0)