mirror of
https://github.com/zalando/postgres-operator.git
synced 2026-09-30 09:51:47 +02:00
Skip deleting Pods and PVCs if failed to delete StatefulSet
This commit is contained in:
+15
-55
@@ -317,10 +317,6 @@ func (c *Cluster) Update(newSpec *spec.Postgresql) error {
|
||||
//TODO: rewrite pg version in tpr spec
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(c.Spec.Resources, newSpec.Spec.Resources) { // Kubernetes resources: cpu, mem
|
||||
rollingUpdate = true
|
||||
}
|
||||
|
||||
if rollingUpdate {
|
||||
c.logger.Infof("Rolling update is needed")
|
||||
// TODO: wait for actual streaming to the replica
|
||||
@@ -334,60 +330,24 @@ func (c *Cluster) Update(newSpec *spec.Postgresql) error {
|
||||
}
|
||||
|
||||
func (c *Cluster) Delete() error {
|
||||
if c.Endpoint != nil {
|
||||
c.logger.Debugln("Deleting Endpoints")
|
||||
epName := util.NameFromMeta(c.Endpoint.ObjectMeta)
|
||||
if err := c.deleteEndpoint(); err != nil {
|
||||
c.logger.Errorf("Can't delete Endpoint: %s", err)
|
||||
} else {
|
||||
c.logger.Infof("Endpoint '%s' has been deleted", epName)
|
||||
if err := c.deleteEndpoint(); err != nil {
|
||||
c.logger.Errorf("Can't delete Endpoint: %s", err)
|
||||
}
|
||||
|
||||
if err := c.deleteService(); err != nil {
|
||||
c.logger.Errorf("Can't delete Service: %s", err)
|
||||
}
|
||||
|
||||
if err := c.deleteStatefulSet(); err != nil {
|
||||
c.logger.Errorf("Can't delete StatefulSet: %s", err)
|
||||
}
|
||||
|
||||
for _, obj := range c.Secrets {
|
||||
if err := c.deleteSecret(obj); err != nil {
|
||||
c.logger.Errorf("Can't delete Secret: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
if c.Service != nil {
|
||||
c.logger.Debugln("Deleting Service")
|
||||
svcName := util.NameFromMeta(c.Service.ObjectMeta)
|
||||
if err := c.deleteService(); err != nil {
|
||||
c.logger.Errorf("Can't delete Service: %s", err)
|
||||
} else {
|
||||
c.logger.Infof("Service '%s' has been deleted", svcName)
|
||||
}
|
||||
}
|
||||
|
||||
if c.Statefulset != nil {
|
||||
c.logger.Debugln("Deleting StatefulSet")
|
||||
ssName := util.NameFromMeta(c.Statefulset.ObjectMeta)
|
||||
if err := c.deleteStatefulSet(); err != nil {
|
||||
c.logger.Errorf("Can't delete StatefulSet: %s", err)
|
||||
} else {
|
||||
c.logger.Infof("StatefulSet '%s' has been deleted", ssName)
|
||||
}
|
||||
}
|
||||
|
||||
if c.Secrets != nil {
|
||||
c.logger.Debugln("Deleting Secrets")
|
||||
for _, obj := range c.Secrets {
|
||||
c.logger.Debugf("Deleting Secret '%s'", util.NameFromMeta(obj.ObjectMeta))
|
||||
if err := c.deleteSecret(obj); err != nil {
|
||||
c.logger.Errorf("Can't delete Secret: %s", err)
|
||||
} else {
|
||||
c.logger.Infof("Secret '%s' has been deleted", util.NameFromMeta(obj.ObjectMeta))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
c.logger.Debugln("Deleting Pods")
|
||||
if err := c.deletePods(); err != nil {
|
||||
c.logger.Errorf("Can't delete Pods: %s", err)
|
||||
} else {
|
||||
c.logger.Infof("Pods have been deleted")
|
||||
}
|
||||
|
||||
c.logger.Debugln("Deleting PVCs")
|
||||
if err := c.deletePersistenVolumeClaims(); err != nil {
|
||||
return fmt.Errorf("Can't delete PersistentVolumeClaims: %s", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ func (c *Cluster) listPersistentVolumeClaims() ([]v1.PersistentVolumeClaim, erro
|
||||
}
|
||||
|
||||
func (c *Cluster) deletePods() error {
|
||||
c.logger.Debugln("Deleting Pods")
|
||||
pods, err := c.listPods()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -51,11 +52,17 @@ func (c *Cluster) deletePods() error {
|
||||
c.logger.Infof("Pod '%s' has been deleted", util.NameFromMeta(obj.ObjectMeta))
|
||||
}
|
||||
}
|
||||
if len(pods) > 0 {
|
||||
c.logger.Debugln("Pods have been deleted")
|
||||
} else {
|
||||
c.logger.Debugln("No Pods to delete")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Cluster) deletePersistenVolumeClaims() error {
|
||||
c.logger.Debugln("Deleting PVCs")
|
||||
ns := c.Metadata.Namespace
|
||||
pvcs, err := c.listPersistentVolumeClaims()
|
||||
if err != nil {
|
||||
@@ -67,6 +74,12 @@ func (c *Cluster) deletePersistenVolumeClaims() error {
|
||||
c.logger.Warningf("Can't delete PersistentVolumeClaim: %s", err)
|
||||
}
|
||||
}
|
||||
if len(pvcs) > 0 {
|
||||
c.logger.Debugln("PVCs have been deleted")
|
||||
} else {
|
||||
c.logger.Debugln("No PVCs to delete")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -137,6 +137,7 @@ func (c *Cluster) updateStatefulSet(newStatefulSet *v1beta1.StatefulSet) error {
|
||||
}
|
||||
|
||||
func (c *Cluster) deleteStatefulSet() error {
|
||||
c.logger.Debugln("Deleting StatefulSet")
|
||||
if c.Statefulset == nil {
|
||||
return fmt.Errorf("There is no StatefulSet in the cluster")
|
||||
}
|
||||
@@ -145,8 +146,17 @@ func (c *Cluster) deleteStatefulSet() error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.logger.Infof("StatefulSet '%s' has been deleted", util.NameFromMeta(c.Statefulset.ObjectMeta))
|
||||
c.Statefulset = nil
|
||||
|
||||
if err := c.deletePods(); err != nil {
|
||||
return fmt.Errorf("Can't delete Pods: %s", err)
|
||||
}
|
||||
|
||||
if err := c.deletePersistenVolumeClaims(); err != nil {
|
||||
return fmt.Errorf("Can't delete PersistentVolumeClaims: %s", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -185,6 +195,8 @@ func (c *Cluster) updateService(newService *v1.Service) error {
|
||||
}
|
||||
|
||||
func (c *Cluster) deleteService() error {
|
||||
c.logger.Debugln("Deleting Service")
|
||||
|
||||
if c.Service == nil {
|
||||
return fmt.Errorf("There is no Service in the cluster")
|
||||
}
|
||||
@@ -192,6 +204,7 @@ func (c *Cluster) deleteService() error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.logger.Infof("Service '%s' has been deleted", util.NameFromMeta(c.Service.ObjectMeta))
|
||||
c.Service = nil
|
||||
|
||||
return nil
|
||||
@@ -222,6 +235,7 @@ func (c *Cluster) updateEndpoint(newEndpoint *v1.Endpoints) error {
|
||||
}
|
||||
|
||||
func (c *Cluster) deleteEndpoint() error {
|
||||
c.logger.Debugln("Deleting Endpoint")
|
||||
if c.Endpoint == nil {
|
||||
return fmt.Errorf("There is no Endpoint in the cluster")
|
||||
}
|
||||
@@ -229,6 +243,7 @@ func (c *Cluster) deleteEndpoint() error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.logger.Infof("Endpoint '%s' has been deleted", util.NameFromMeta(c.Endpoint.ObjectMeta))
|
||||
c.Endpoint = nil
|
||||
|
||||
return nil
|
||||
@@ -267,10 +282,12 @@ func (c *Cluster) applySecrets() error {
|
||||
}
|
||||
|
||||
func (c *Cluster) deleteSecret(secret *v1.Secret) error {
|
||||
c.logger.Debugf("Deleting Secret '%s'", util.NameFromMeta(secret.ObjectMeta))
|
||||
err := c.KubeClient.Secrets(secret.Namespace).Delete(secret.Name, deleteOptions)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.logger.Infof("Secret '%s' has been deleted", util.NameFromMeta(secret.ObjectMeta))
|
||||
delete(c.Secrets, secret.UID)
|
||||
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user