Fix a failure to create new statefulset at sync.
Also do a fmt run.
This commit is contained in:
		
							parent
							
								
									6813bf5921
								
							
						
					
					
						commit
						c25e849fe4
					
				|  | @ -495,6 +495,7 @@ func (c *Cluster) Update(oldSpec, newSpec *spec.Postgresql) error { | ||||||
| 
 | 
 | ||||||
| 		if !reflect.DeepEqual(oldSs, newSs) { | 		if !reflect.DeepEqual(oldSs, newSs) { | ||||||
| 			c.logger.Debugf("syncing statefulsets") | 			c.logger.Debugf("syncing statefulsets") | ||||||
|  | 			// TODO: avoid generating the StatefulSet object twice by passing it to syncStatefulSet
 | ||||||
| 			if err := c.syncStatefulSet(); err != nil { | 			if err := c.syncStatefulSet(); err != nil { | ||||||
| 				c.logger.Errorf("could not sync statefulsets: %v", err) | 				c.logger.Errorf("could not sync statefulsets: %v", err) | ||||||
| 				updateFailed = true | 				updateFailed = true | ||||||
|  |  | ||||||
|  | @ -262,7 +262,7 @@ func (c *Cluster) tolerations(tolerationsSpec *[]v1.Toleration) []v1.Toleration | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	podToleration := c.Config.OpConfig.PodToleration | 	podToleration := c.Config.OpConfig.PodToleration | ||||||
| 	if (len(podToleration["key"]) > 0 || len(podToleration["operator"]) > 0 || len(podToleration["value"]) > 0 || len(podToleration["effect"]) > 0) { | 	if len(podToleration["key"]) > 0 || len(podToleration["operator"]) > 0 || len(podToleration["value"]) > 0 || len(podToleration["effect"]) > 0 { | ||||||
| 		return []v1.Toleration{ | 		return []v1.Toleration{ | ||||||
| 			{ | 			{ | ||||||
| 				Key:      podToleration["key"], | 				Key:      podToleration["key"], | ||||||
|  |  | ||||||
|  | @ -238,29 +238,20 @@ func (c *Cluster) syncPodDisruptionBudget(isUpdate bool) error { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (c *Cluster) syncStatefulSet() error { | func (c *Cluster) syncStatefulSet() error { | ||||||
| 	var ( |  | ||||||
| 		err        error |  | ||||||
| 		rollUpdate bool |  | ||||||
| 	) |  | ||||||
| 	c.Statefulset, err = c.KubeClient.StatefulSets(c.Namespace).Get(c.statefulSetName(), metav1.GetOptions{}) |  | ||||||
| 
 | 
 | ||||||
| 	if err != nil && !k8sutil.ResourceNotFound(err) { | 	sset, err := c.KubeClient.StatefulSets(c.Namespace).Get(c.statefulSetName(), metav1.GetOptions{}) | ||||||
| 		return fmt.Errorf("could not get statefulset: %v", err) | 	if err != nil { | ||||||
| 	} | 		if !k8sutil.ResourceNotFound(err) { | ||||||
| 
 | 			return fmt.Errorf("could not get statefulset: %v", err) | ||||||
| 	if err != nil && k8sutil.ResourceNotFound(err) { | 		} | ||||||
|  | 		// statefulset does not exist, try to re-create it
 | ||||||
| 		c.logger.Infof("could not find the cluster's statefulset") | 		c.logger.Infof("could not find the cluster's statefulset") | ||||||
| 		pods, err := c.listPods() | 		pods, err := c.listPods() | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return fmt.Errorf("could not list pods of the statefulset: %v", err) | 			return fmt.Errorf("could not list pods of the statefulset: %v", err) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if len(pods) > 0 { | 		sset, err = c.createStatefulSet() | ||||||
| 			c.logger.Infof("found pods without the statefulset: trigger rolling update") |  | ||||||
| 			rollUpdate = true |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		ss, err := c.createStatefulSet() |  | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return fmt.Errorf("could not create missing statefulset: %v", err) | 			return fmt.Errorf("could not create missing statefulset: %v", err) | ||||||
| 		} | 		} | ||||||
|  | @ -269,14 +260,16 @@ func (c *Cluster) syncStatefulSet() error { | ||||||
| 			return fmt.Errorf("cluster is not ready: %v", err) | 			return fmt.Errorf("cluster is not ready: %v", err) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		c.logger.Infof("created missing statefulset %q", util.NameFromMeta(ss.ObjectMeta)) | 		c.logger.Infof("created missing statefulset %q", util.NameFromMeta(sset.ObjectMeta)) | ||||||
| 		if !rollUpdate { | 		if len(pods) <= 0 { | ||||||
| 			return nil | 			return nil | ||||||
| 		} | 		} | ||||||
| 	} | 		c.logger.Infof("found pods without the statefulset: trigger rolling update") | ||||||
|  | 
 | ||||||
|  | 	} else { | ||||||
|  | 		// statefulset is alrady there, make sure we use its definition in order to compare with the spec.
 | ||||||
|  | 		c.Statefulset = sset | ||||||
| 
 | 
 | ||||||
| 	/* TODO: should check that we need to replace the statefulset */ |  | ||||||
| 	if !rollUpdate { |  | ||||||
| 		desiredSS, err := c.generateStatefulSet(&c.Spec) | 		desiredSS, err := c.generateStatefulSet(&c.Spec) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return fmt.Errorf("could not generate statefulset: %v", err) | 			return fmt.Errorf("could not generate statefulset: %v", err) | ||||||
|  | @ -303,6 +296,8 @@ func (c *Cluster) syncStatefulSet() error { | ||||||
| 			return nil | 			return nil | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	// if we get here we also need to re-create the pods (either leftovers from the old
 | ||||||
|  | 	// statefulset or those that got their configuration from the outdated statefulset)
 | ||||||
| 	c.logger.Debugln("performing rolling update") | 	c.logger.Debugln("performing rolling update") | ||||||
| 	if err := c.recreatePods(); err != nil { | 	if err := c.recreatePods(); err != nil { | ||||||
| 		return fmt.Errorf("could not recreate pods: %v", err) | 		return fmt.Errorf("could not recreate pods: %v", err) | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ type Resources struct { | ||||||
| 	ClusterLabels           map[string]string `name:"cluster_labels" default:"application:spilo"` | 	ClusterLabels           map[string]string `name:"cluster_labels" default:"application:spilo"` | ||||||
| 	ClusterNameLabel        string            `name:"cluster_name_label" default:"cluster-name"` | 	ClusterNameLabel        string            `name:"cluster_name_label" default:"cluster-name"` | ||||||
| 	PodRoleLabel            string            `name:"pod_role_label" default:"spilo-role"` | 	PodRoleLabel            string            `name:"pod_role_label" default:"spilo-role"` | ||||||
| 	PodToleration          	map[string]string `name:"toleration" default:""` | 	PodToleration           map[string]string `name:"toleration" default:""` | ||||||
| 	DefaultCPURequest       string            `name:"default_cpu_request" default:"100m"` | 	DefaultCPURequest       string            `name:"default_cpu_request" default:"100m"` | ||||||
| 	DefaultMemoryRequest    string            `name:"default_memory_request" default:"100Mi"` | 	DefaultMemoryRequest    string            `name:"default_memory_request" default:"100Mi"` | ||||||
| 	DefaultCPULimit         string            `name:"default_cpu_limit" default:"3"` | 	DefaultCPULimit         string            `name:"default_cpu_limit" default:"3"` | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue