Skip to content

Commit

Permalink
set status of the cluster on sync fail/success
Browse files Browse the repository at this point in the history
  • Loading branch information
mkabilov committed Oct 12, 2017
1 parent 8d5faaa commit 7d55f9e
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 18 deletions.
52 changes: 34 additions & 18 deletions pkg/cluster/sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,43 @@ import (

// Sync syncs the cluster, making sure the actual Kubernetes objects correspond to what is defined in the manifest.
// Unlike the update, sync does not error out if some objects do not exist and takes care of creating them.
func (c *Cluster) Sync() error {
func (c *Cluster) Sync() (err error) {
c.mu.Lock()
defer c.mu.Unlock()

err := c.loadResources()
err = c.loadResources()
if err != nil {
c.logger.Errorf("could not load resources: %v", err)
}

defer func() {
if err != nil {
c.setStatus(spec.ClusterStatusSyncFailed)
} else if c.Status != spec.ClusterStatusRunning {
c.setStatus(spec.ClusterStatusRunning)
}
}()

if err = c.initUsers(); err != nil {
return err
err = fmt.Errorf("could not init users: %v", err)
return
}

c.logger.Debugf("syncing secrets")

//TODO: mind the secrets of the deleted/new users
if err := c.applySecrets(); err != nil {
if err = c.applySecrets(); err != nil {
if !k8sutil.ResourceAlreadyExists(err) {
return fmt.Errorf("could not sync secrets: %v", err)
err = fmt.Errorf("could not sync secrets: %v", err)
return
}
}

c.logger.Debugf("syncing endpoints")
if err := c.syncEndpoint(); err != nil {
if err = c.syncEndpoint(); err != nil {
if !k8sutil.ResourceAlreadyExists(err) {
return fmt.Errorf("could not sync endpoints: %v", err)
err = fmt.Errorf("could not sync endpoints: %v", err)
return
}
}

Expand All @@ -45,39 +56,44 @@ func (c *Cluster) Sync() error {
if role == Replica && !c.Spec.ReplicaLoadBalancer {
if c.Services[role] != nil {
// delete the left over replica service
if err := c.deleteService(role); err != nil {
return fmt.Errorf("could not delete obsolete %s service: %v", role, err)
if err = c.deleteService(role); err != nil {
err = fmt.Errorf("could not delete obsolete %s service: %v", role, err)
return
}
}
continue
}
if err := c.syncService(role); err != nil {
if err = c.syncService(role); err != nil {
if !k8sutil.ResourceAlreadyExists(err) {
return fmt.Errorf("coud not sync %s service: %v", role, err)
err = fmt.Errorf("coud not sync %s service: %v", role, err)
return
}
}
}

c.logger.Debugf("syncing statefulsets")
if err := c.syncStatefulSet(); err != nil {
if err = c.syncStatefulSet(); err != nil {
if !k8sutil.ResourceAlreadyExists(err) {
return fmt.Errorf("could not sync statefulsets: %v", err)
err = fmt.Errorf("could not sync statefulsets: %v", err)
return
}
}

if !c.databaseAccessDisabled() {
c.logger.Debugf("syncing roles")
if err := c.syncRoles(true); err != nil {
return fmt.Errorf("could not sync roles: %v", err)
if err = c.syncRoles(true); err != nil {
err = fmt.Errorf("could not sync roles: %v", err)
return
}
}

c.logger.Debugf("syncing persistent volumes")
if err := c.syncVolumes(); err != nil {
return fmt.Errorf("could not sync persistent volumes: %v", err)
if err = c.syncVolumes(); err != nil {
err = fmt.Errorf("could not sync persistent volumes: %v", err)
return
}

return nil
return
}

func (c *Cluster) syncService(role PostgresRole) error {
Expand Down
1 change: 1 addition & 0 deletions pkg/spec/postgresql.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ const (
ClusterStatusCreating PostgresStatus = "Creating"
ClusterStatusUpdating PostgresStatus = "Updating"
ClusterStatusUpdateFailed PostgresStatus = "UpdateFailed"
ClusterStatusSyncFailed PostgresStatus = "SyncFailed"
ClusterStatusAddFailed PostgresStatus = "CreateFailed"
ClusterStatusRunning PostgresStatus = "Running"
ClusterStatusInvalid PostgresStatus = "Invalid"
Expand Down

0 comments on commit 7d55f9e

Please sign in to comment.