@@ -11,32 +11,45 @@ import (
1111
1212// Sync syncs the cluster, making sure the actual Kubernetes objects correspond to what is defined in the manifest.
1313// Unlike the update, sync does not error out if some objects do not exist and takes care of creating them.
14- func (c * Cluster ) Sync () error {
14+ func (c * Cluster ) Sync (newSpec * spec. Postgresql ) ( err error ) {
1515 c .mu .Lock ()
1616 defer c .mu .Unlock ()
1717
18- err := c .loadResources ()
18+ c .Postgresql = * newSpec
19+
20+ err = c .loadResources ()
1921 if err != nil {
2022 c .logger .Errorf ("could not load resources: %v" , err )
2123 }
2224
25+ defer func () {
26+ if err != nil {
27+ c .setStatus (spec .ClusterStatusSyncFailed )
28+ } else if c .Status != spec .ClusterStatusRunning {
29+ c .setStatus (spec .ClusterStatusRunning )
30+ }
31+ }()
32+
2333 if err = c .initUsers (); err != nil {
24- return err
34+ err = fmt .Errorf ("could not init users: %v" , err )
35+ return
2536 }
2637
2738 c .logger .Debugf ("syncing secrets" )
2839
2940 //TODO: mind the secrets of the deleted/new users
30- if err : = c .applySecrets (); err != nil {
41+ if err = c .applySecrets (); err != nil {
3142 if ! k8sutil .ResourceAlreadyExists (err ) {
32- return fmt .Errorf ("could not sync secrets: %v" , err )
43+ err = fmt .Errorf ("could not sync secrets: %v" , err )
44+ return
3345 }
3446 }
3547
3648 c .logger .Debugf ("syncing endpoints" )
37- if err : = c .syncEndpoint (); err != nil {
49+ if err = c .syncEndpoint (); err != nil {
3850 if ! k8sutil .ResourceAlreadyExists (err ) {
39- return fmt .Errorf ("could not sync endpoints: %v" , err )
51+ err = fmt .Errorf ("could not sync endpoints: %v" , err )
52+ return
4053 }
4154 }
4255
@@ -45,39 +58,44 @@ func (c *Cluster) Sync() error {
4558 if role == Replica && ! c .Spec .ReplicaLoadBalancer {
4659 if c .Services [role ] != nil {
4760 // delete the left over replica service
48- if err := c .deleteService (role ); err != nil {
49- return fmt .Errorf ("could not delete obsolete %s service: %v" , role , err )
61+ if err = c .deleteService (role ); err != nil {
62+ err = fmt .Errorf ("could not delete obsolete %s service: %v" , role , err )
63+ return
5064 }
5165 }
5266 continue
5367 }
54- if err : = c .syncService (role ); err != nil {
68+ if err = c .syncService (role ); err != nil {
5569 if ! k8sutil .ResourceAlreadyExists (err ) {
56- return fmt .Errorf ("coud not sync %s service: %v" , role , err )
70+ err = fmt .Errorf ("coud not sync %s service: %v" , role , err )
71+ return
5772 }
5873 }
5974 }
6075
6176 c .logger .Debugf ("syncing statefulsets" )
62- if err : = c .syncStatefulSet (); err != nil {
77+ if err = c .syncStatefulSet (); err != nil {
6378 if ! k8sutil .ResourceAlreadyExists (err ) {
64- return fmt .Errorf ("could not sync statefulsets: %v" , err )
79+ err = fmt .Errorf ("could not sync statefulsets: %v" , err )
80+ return
6581 }
6682 }
6783
6884 if ! c .databaseAccessDisabled () {
6985 c .logger .Debugf ("syncing roles" )
70- if err := c .syncRoles (true ); err != nil {
71- return fmt .Errorf ("could not sync roles: %v" , err )
86+ if err = c .syncRoles (true ); err != nil {
87+ err = fmt .Errorf ("could not sync roles: %v" , err )
88+ return
7289 }
7390 }
7491
7592 c .logger .Debugf ("syncing persistent volumes" )
76- if err := c .syncVolumes (); err != nil {
77- return fmt .Errorf ("could not sync persistent volumes: %v" , err )
93+ if err = c .syncVolumes (); err != nil {
94+ err = fmt .Errorf ("could not sync persistent volumes: %v" , err )
95+ return
7896 }
7997
80- return nil
98+ return
8199}
82100
83101func (c * Cluster ) syncService (role PostgresRole ) error {
0 commit comments