diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index b00d4b6b7..ec5b61dd2 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -254,10 +254,17 @@ func (c *Cluster) Create() (err error) { ) defer func() { + var pgUpdatedStatus *acidv1.Postgresql if err == nil { - c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) //TODO: are you sure it's running? + pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) //TODO: are you sure it's running? } else { - c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusAddFailed) + pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusAddFailed) + } + if err != nil { + c.logger.Warningf("could not set cluster status: %v", err) + } + if pgUpdatedStatus != nil { + c.setSpec(pgUpdatedStatus) } }() @@ -790,6 +797,7 @@ func (c *Cluster) addFinalizer() error { // update the spec, maintaining the new resourceVersion c.setSpec(newSpec) + return nil } @@ -838,10 +846,20 @@ func (c *Cluster) Update(oldSpec, newSpec *acidv1.Postgresql) error { c.setSpec(newSpec) defer func() { + var ( + pgUpdatedStatus *acidv1.Postgresql + err error + ) if updateFailed { - c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusUpdateFailed) + pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusUpdateFailed) } else { - c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) + pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) + } + if err != nil { + c.logger.Warningf("could not set cluster status: %v", err) + } + if pgUpdatedStatus != nil { + c.setSpec(pgUpdatedStatus) } }() diff --git a/pkg/cluster/sync.go b/pkg/cluster/sync.go index 723f6a455..19aab1e51 100644 --- a/pkg/cluster/sync.go +++ b/pkg/cluster/sync.go @@ -41,11 +41,18 @@ func (c *Cluster) Sync(newSpec *acidv1.Postgresql) error { c.setSpec(newSpec) defer func() { + var pgUpdatedStatus *acidv1.Postgresql if err != nil { c.logger.Warningf("error while syncing cluster state: %v", err) - c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusSyncFailed) + pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusSyncFailed) } else if !c.Status.Running() { - c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) + pgUpdatedStatus, err = c.KubeClient.SetPostgresCRDStatus(c.clusterName(), acidv1.ClusterStatusRunning) + } + if err != nil { + c.logger.Warningf("could not set cluster status: %v", err) + } + if pgUpdatedStatus != nil { + c.setSpec(pgUpdatedStatus) } }() diff --git a/pkg/util/k8sutil/k8sutil.go b/pkg/util/k8sutil/k8sutil.go index 575766f76..44608856e 100644 --- a/pkg/util/k8sutil/k8sutil.go +++ b/pkg/util/k8sutil/k8sutil.go @@ -209,7 +209,6 @@ func (client *KubernetesClient) SetPostgresCRDStatus(clusterName spec.Namespaced return pg, fmt.Errorf("could not update status: %v", err) } - // update the spec, maintaining the new resourceVersion. return pg, nil } @@ -220,7 +219,7 @@ func (client *KubernetesClient) SetFinalizer(clusterName spec.NamespacedName, pg patch []byte err error ) - pg.ObjectMeta.SetFinalizers(finalizers) + pg.ObjectMeta.Finalizers = finalizers if len(finalizers) > 0 { patch, err = json.Marshal(struct {