loadBalancerSourceRanges update
This commit is contained in:
		
							parent
							
								
									fc127069ab
								
							
						
					
					
						commit
						1c6e7ac2e7
					
				|  | @ -23,6 +23,7 @@ import ( | |||
| 	"github.bus.zalan.do/acid/postgres-operator/pkg/util" | ||||
| 	"github.bus.zalan.do/acid/postgres-operator/pkg/util/constants" | ||||
| 	"github.bus.zalan.do/acid/postgres-operator/pkg/util/k8sutil" | ||||
| 	"github.bus.zalan.do/acid/postgres-operator/pkg/util/resources" | ||||
| 	"github.bus.zalan.do/acid/postgres-operator/pkg/util/teams" | ||||
| ) | ||||
| 
 | ||||
|  | @ -93,7 +94,7 @@ func (c *Cluster) Run(stopCh <-chan struct{}) { | |||
| 	<-stopCh | ||||
| } | ||||
| 
 | ||||
| func (c *Cluster) NeedsRollingUpdate(otherSpec *spec.Postgresql) bool { | ||||
| func (c *Cluster) needsRollingUpdate(otherSpec *spec.Postgresql) bool { | ||||
| 	//TODO: add more checks
 | ||||
| 	if c.Spec.Version != otherSpec.Spec.Version { | ||||
| 		return true | ||||
|  | @ -124,7 +125,7 @@ func (c *Cluster) MustSetStatus(status spec.PostgresStatus) { | |||
| 	} | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		c.logger.Fatalf("Can't set status for cluster '%s': %s", c.ClusterName(), err) | ||||
| 		c.logger.Warningf("Can't set status for cluster '%s': %s", c.ClusterName(), err) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | @ -132,13 +133,13 @@ func (c *Cluster) Create() error { | |||
| 	//TODO: service will create endpoint implicitly
 | ||||
| 	ep, err := c.createEndpoint() | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("Can't create endpoint: %s", err) | ||||
| 		return fmt.Errorf("Can't create Endpoint: %s", err) | ||||
| 	} | ||||
| 	c.logger.Infof("Endpoint '%s' has been successfully created", util.NameFromMeta(ep.ObjectMeta)) | ||||
| 
 | ||||
| 	service, err := c.createService() | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("Can't create service: %s", err) | ||||
| 		return fmt.Errorf("Can't create Service: %s", err) | ||||
| 	} else { | ||||
| 		c.logger.Infof("Service '%s' has been successfully created", util.NameFromMeta(service.ObjectMeta)) | ||||
| 	} | ||||
|  | @ -187,22 +188,40 @@ func (c *Cluster) Create() error { | |||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c *Cluster) Update(newSpec *spec.Postgresql, rollingUpdate bool) error { | ||||
| func (c *Cluster) Update(newSpec *spec.Postgresql) error { | ||||
| 	c.logger.Infof("Cluster update from version %s to %s", | ||||
| 		c.Metadata.ResourceVersion, newSpec.Metadata.ResourceVersion) | ||||
| 
 | ||||
| 	rollingUpdate := c.needsRollingUpdate(newSpec) | ||||
| 	if rollingUpdate { | ||||
| 		c.logger.Infof("Pods need to be recreated") | ||||
| 	} | ||||
| 
 | ||||
| 	newStatefulSet := getStatefulSet(c.ClusterName(), newSpec.Spec, c.etcdHost, c.dockerImage) | ||||
| 
 | ||||
| 	newService := resources.Service(c.ClusterName(), newSpec.Spec.AllowedSourceRanges) | ||||
| 	if !servicesEqual(newService, c.Service) { | ||||
| 		c.logger.Infof("Service needs to be upated") | ||||
| 		if err := c.updateService(newService); err != nil { | ||||
| 			return fmt.Errorf("Can't update Service: %s", err) | ||||
| 		} else { | ||||
| 			c.logger.Infof("Service has been updated") | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if !reflect.DeepEqual(newSpec.Spec.Volume, c.Spec.Volume) { | ||||
| 		//TODO: update PVC
 | ||||
| 	} | ||||
| 
 | ||||
| 	//TODO: mind the case of updating allowedSourceRanges
 | ||||
| 	if err := c.updateStatefulSet(newStatefulSet); err != nil { | ||||
| 		return fmt.Errorf("Can't upate cluster: %s", err) | ||||
| 		return fmt.Errorf("Can't upate StatefulSet: %s", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if rollingUpdate { | ||||
| 		// TODO: wait for actual streaming to the replica
 | ||||
| 		if err := c.recreatePods(); err != nil { | ||||
| 			return fmt.Errorf("Can't recreate pods: %s", err) | ||||
| 			return fmt.Errorf("Can't recreate Pods: %s", err) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
|  | @ -211,13 +230,13 @@ func (c *Cluster) Update(newSpec *spec.Postgresql, rollingUpdate bool) error { | |||
| 
 | ||||
| func (c *Cluster) Delete() error { | ||||
| 	if err := c.deleteEndpoint(); err != nil { | ||||
| 		c.logger.Errorf("Can't delete endpoint: %s", err) | ||||
| 		c.logger.Errorf("Can't delete Endpoint: %s", err) | ||||
| 	} else { | ||||
| 		c.logger.Infof("Endpoint '%s' has been deleted", util.NameFromMeta(c.Endpoint.ObjectMeta)) | ||||
| 	} | ||||
| 
 | ||||
| 	if err := c.deleteService(); err != nil { | ||||
| 		c.logger.Errorf("Can't delete service: %s", err) | ||||
| 		c.logger.Errorf("Can't delete Service: %s", err) | ||||
| 	} else { | ||||
| 		c.logger.Infof("Service '%s' has been deleted", util.NameFromMeta(c.Service.ObjectMeta)) | ||||
| 	} | ||||
|  | @ -230,14 +249,14 @@ func (c *Cluster) Delete() error { | |||
| 
 | ||||
| 	for _, obj := range c.Secrets { | ||||
| 		if err := c.deleteSecret(obj); err != nil { | ||||
| 			c.logger.Errorf("Can't delete secret: %s", err) | ||||
| 			c.logger.Errorf("Can't delete Secret: %s", err) | ||||
| 		} else { | ||||
| 			c.logger.Infof("Secret '%s' has been deleted", util.NameFromMeta(obj.ObjectMeta)) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if err := c.deletePods(); err != nil { | ||||
| 		c.logger.Errorf("Can't delete pods: %s", err) | ||||
| 		c.logger.Errorf("Can't delete Pods: %s", err) | ||||
| 	} else { | ||||
| 		c.logger.Infof("Pods have been deleted") | ||||
| 	} | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ package cluster | |||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 	"reflect" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| 
 | ||||
|  | @ -184,3 +185,12 @@ func (c *Cluster) deleteEtcdKey() error { | |||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func servicesEqual(svc1, svc2 *v1.Service) bool { | ||||
| 	//TODO: improve me
 | ||||
| 	if reflect.DeepEqual(svc1.Spec.LoadBalancerSourceRanges, svc2.Spec.LoadBalancerSourceRanges) { | ||||
| 		return true | ||||
| 	} | ||||
| 
 | ||||
| 	return false | ||||
| } | ||||
|  |  | |||
|  | @ -132,28 +132,19 @@ func (c *Controller) postgresqlUpdate(prev, cur interface{}) { | |||
| 		return | ||||
| 	} | ||||
| 	pgCluster := c.clusters[clusterName] // current
 | ||||
| 
 | ||||
| 	if reflect.DeepEqual(pgPrev.Spec, pgNew.Spec) { | ||||
| 		c.logger.Infof("Skipping update with no spec change") | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	c.logger.Infof("Cluster update: %s(version: %s) -> %s(version: %s)", | ||||
| 		util.NameFromMeta(pgPrev.Metadata), pgPrev.Metadata.ResourceVersion, | ||||
| 		util.NameFromMeta(pgNew.Metadata), pgNew.Metadata.ResourceVersion) | ||||
| 
 | ||||
| 	rollingUpdate := pgCluster.NeedsRollingUpdate(pgNew) | ||||
| 	if rollingUpdate { | ||||
| 		c.logger.Infof("Pods need to be recreated") | ||||
| 	} | ||||
| 
 | ||||
| 	pgCluster.MustSetStatus(spec.ClusterStatusUpdating) | ||||
| 	if err := pgCluster.Update(pgNew, rollingUpdate); err != nil { | ||||
| 	if err := pgCluster.Update(pgNew); err != nil { | ||||
| 		pgCluster.MustSetStatus(spec.ClusterStatusUpdateFailed) | ||||
| 		c.logger.Errorf("Can't update cluster: %s", err) | ||||
| 	} else { | ||||
| 		c.logger.Infof("Cluster has been updated") | ||||
| 	} | ||||
| 	pgCluster.MustSetStatus(spec.ClusterStatusRunning) | ||||
| } | ||||
| 
 | ||||
| func (c *Controller) postgresqlDelete(obj interface{}) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue