@@ -25,7 +25,6 @@ import (
2525 "github.com/crunchydata/postgres-operator/kubeapi"
2626 clusteroperator "github.com/crunchydata/postgres-operator/operator/cluster"
2727 "github.com/crunchydata/postgres-operator/util"
28- "k8s.io/api/core/v1"
2928 "k8s.io/api/extensions/v1beta1"
3029 kerrors "k8s.io/apimachinery/pkg/api/errors"
3130 meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -346,36 +345,60 @@ func ScaleDown(deleteData bool, clusterName, replicaName string) msgs.ScaleDownR
346345 response .Status .Msg = "pod not found for scale down replica and delete-data"
347346 return response
348347 }
349- createDeleteTask (& pods .Items [0 ], replicaName , replica .Spec .ReplicaStorage )
348+
349+ err = createDeleteDataTasksForReplica (replicaName , replica .Spec .ReplicaStorage )
350+ if err != nil {
351+ response .Status .Code = msgs .Error
352+ response .Status .Msg = err .Error ()
353+ return response
354+ }
355+
350356 }
351357 }
352358 response .Results = append (response .Results , "deleted Pgreplica " + replicaName )
353359 return response
354360}
355361
356- func createDeleteTask (pod * v1.Pod , replicaName string , storageSpec crv1.PgStorageSpec ) {
357- //create pgtask CRD
358- spec := crv1.PgtaskSpec {}
359- spec .Name = replicaName
360- spec .TaskType = crv1 .PgtaskDeleteData
361- spec .StorageSpec = storageSpec
362- spec .Parameters = apiserver .GetPVCName (pod )
363-
364- newInstance := & crv1.Pgtask {
365- ObjectMeta : meta_v1.ObjectMeta {
366- Name : replicaName ,
367- },
368- Spec : spec ,
369- }
362+ // removes data and or backup volumes for all pods in a cluster replica
363+ func createDeleteDataTasksForReplica (replicaName string , storageSpec crv1.PgStorageSpec ) error {
364+
365+ var err error
370366
371- newInstance .ObjectMeta .Labels = make (map [string ]string )
372- newInstance .ObjectMeta .Labels [util .LABEL_PG_CLUSTER ] = replicaName
373- newInstance .ObjectMeta .Labels [util .LABEL_RMDATA ] = "true"
367+ log .Info ("inside createDeleteDataTasksForReplica" )
374368
375- err := kubeapi .Createpgtask (apiserver .RESTClient ,
376- newInstance , apiserver .Namespace )
369+ selector := util .LABEL_REPLICA_NAME + "=" + replicaName
370+ log .Debugf ("selector for delete is %s" , selector )
371+ pods , err := kubeapi .GetPods (apiserver .Clientset , selector , apiserver .Namespace )
377372 if err != nil {
378- return
373+ log .Error (err )
374+ return err
375+ }
376+ log .Debugf ("got %d cluster pods for %s\n " , len (pods .Items ), replicaName )
377+
378+ for _ , pod := range pods .Items {
379+ deploymentName := pod .ObjectMeta .Labels [util .LABEL_REPLICA_NAME ]
380+
381+ //get the volumes for this pod
382+ for _ , v := range pod .Spec .Volumes {
383+
384+ log .Debugf ("volume name in delete logic is %s" , v .Name )
385+ dataRoots := make ([]string , 0 )
386+ if v .Name == "pgdata" {
387+ dataRoots = append (dataRoots , deploymentName )
388+ } else if v .Name == "backrestrepo-volume" {
389+ dataRoots = append (dataRoots , deploymentName + "{-backups,-spool}" )
390+ } else if v .Name == "backup" {
391+ dataRoots = append (dataRoots , deploymentName + "-backups" )
392+ } else if v .Name == "pgwal-volume" {
393+ dataRoots = append (dataRoots , deploymentName + "-wal" )
394+ }
395+
396+ if v .VolumeSource .PersistentVolumeClaim != nil {
397+ log .Debugf ("volume [%s] pvc [%s] dataroots [%v]\n " , v .Name , v .VolumeSource .PersistentVolumeClaim .ClaimName , dataRoots )
398+ createTask (storageSpec , replicaName , v .VolumeSource .PersistentVolumeClaim .ClaimName , dataRoots )
399+ }
400+ }
379401 }
380402
403+ return err
381404}
0 commit comments