Avoid modifying pooler deployment selector labels
This commit is contained in:
		
							parent
							
								
									ddfa26e6bd
								
							
						
					
					
						commit
						e30b6a5670
					
				| 
						 | 
				
			
			@ -152,8 +152,8 @@ class EndToEndTestCase(unittest.TestCase):
 | 
			
		|||
            print('Operator log: {}'.format(k8s.get_operator_log()))
 | 
			
		||||
            raise
 | 
			
		||||
 | 
			
		||||
    def test_a_overwrite_pooler_deployment(self):
 | 
			
		||||
        result = self.k8s.create_with_kubectl("manifests/minimal-fake-pooler-deployment.yaml")
 | 
			
		||||
    def test_overwrite_pooler_deployment(self):
 | 
			
		||||
        self.k8s.create_with_kubectl("manifests/minimal-fake-pooler-deployment.yaml")
 | 
			
		||||
        self.eventuallyEqual(lambda: self.k8s.get_operator_state(), {"0": "idle"}, "Operator does not get in sync")
 | 
			
		||||
 | 
			
		||||
        self.k8s.api.custom_objects_api.patch_namespaced_custom_object(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -78,16 +78,25 @@ func needReplicaConnectionPoolerWorker(spec *acidv1.PostgresSpec) bool {
 | 
			
		|||
// have e.g. different `application` label, so that recreatePod operation will
 | 
			
		||||
// not interfere with it (it lists all the pods via labels, and if there would
 | 
			
		||||
// be no difference, it will recreate also pooler pods).
 | 
			
		||||
func (c *Cluster) connectionPoolerLabelsSelector(role PostgresRole) *metav1.LabelSelector {
 | 
			
		||||
func (c *Cluster) connectionPoolerLabelsSelector(role PostgresRole, moreLabels bool) *metav1.LabelSelector {
 | 
			
		||||
	connectionPoolerLabels := labels.Set(map[string]string{})
 | 
			
		||||
 | 
			
		||||
	extraLabels := labels.Set(map[string]string{
 | 
			
		||||
		"connection-pooler": c.connectionPoolerName(role),
 | 
			
		||||
		"application":       "db-connection-pooler",
 | 
			
		||||
		"spilo-role":        string(role),
 | 
			
		||||
		"cluster-name":      c.Name,
 | 
			
		||||
		"Namespace":         c.Namespace,
 | 
			
		||||
	})
 | 
			
		||||
	var extraLabels map[string]string
 | 
			
		||||
 | 
			
		||||
	if moreLabels {
 | 
			
		||||
		extraLabels = labels.Set(map[string]string{
 | 
			
		||||
			"connection-pooler": c.connectionPoolerName(role),
 | 
			
		||||
			"application":       "db-connection-pooler",
 | 
			
		||||
			"spilo-role":        string(role),
 | 
			
		||||
			"cluster-name":      c.Name,
 | 
			
		||||
			"Namespace":         c.Namespace,
 | 
			
		||||
		})
 | 
			
		||||
	} else {
 | 
			
		||||
		extraLabels = labels.Set(map[string]string{
 | 
			
		||||
			"connection-pooler": c.connectionPoolerName(role),
 | 
			
		||||
			"application":       "db-connection-pooler",
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	connectionPoolerLabels = labels.Merge(connectionPoolerLabels, c.labelsSet(false))
 | 
			
		||||
	connectionPoolerLabels = labels.Merge(connectionPoolerLabels, extraLabels)
 | 
			
		||||
| 
						 | 
				
			
			@ -284,7 +293,7 @@ func (c *Cluster) generateConnectionPoolerPodTemplate(role PostgresRole) (
 | 
			
		|||
 | 
			
		||||
	podTemplate := &v1.PodTemplateSpec{
 | 
			
		||||
		ObjectMeta: metav1.ObjectMeta{
 | 
			
		||||
			Labels:      c.connectionPoolerLabelsSelector(role).MatchLabels,
 | 
			
		||||
			Labels:      c.connectionPoolerLabelsSelector(role, true).MatchLabels,
 | 
			
		||||
			Namespace:   c.Namespace,
 | 
			
		||||
			Annotations: c.generatePodAnnotations(spec),
 | 
			
		||||
		},
 | 
			
		||||
| 
						 | 
				
			
			@ -338,7 +347,7 @@ func (c *Cluster) generateConnectionPoolerDeployment(connectionPooler *Connectio
 | 
			
		|||
		ObjectMeta: metav1.ObjectMeta{
 | 
			
		||||
			Name:        connectionPooler.Name,
 | 
			
		||||
			Namespace:   connectionPooler.Namespace,
 | 
			
		||||
			Labels:      c.connectionPoolerLabelsSelector(connectionPooler.Role).MatchLabels,
 | 
			
		||||
			Labels:      c.connectionPoolerLabelsSelector(connectionPooler.Role, true).MatchLabels,
 | 
			
		||||
			Annotations: map[string]string{},
 | 
			
		||||
			// make StatefulSet object its owner to represent the dependency.
 | 
			
		||||
			// By itself StatefulSet is being deleted with "Orphaned"
 | 
			
		||||
| 
						 | 
				
			
			@ -350,7 +359,7 @@ func (c *Cluster) generateConnectionPoolerDeployment(connectionPooler *Connectio
 | 
			
		|||
		},
 | 
			
		||||
		Spec: appsv1.DeploymentSpec{
 | 
			
		||||
			Replicas: numberOfInstances,
 | 
			
		||||
			Selector: c.connectionPoolerLabelsSelector(connectionPooler.Role),
 | 
			
		||||
			Selector: c.connectionPoolerLabelsSelector(connectionPooler.Role, false),
 | 
			
		||||
			Template: *podTemplate,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -389,7 +398,7 @@ func (c *Cluster) generateConnectionPoolerService(connectionPooler *ConnectionPo
 | 
			
		|||
		ObjectMeta: metav1.ObjectMeta{
 | 
			
		||||
			Name:        connectionPooler.Name,
 | 
			
		||||
			Namespace:   connectionPooler.Namespace,
 | 
			
		||||
			Labels:      c.connectionPoolerLabelsSelector(connectionPooler.Role).MatchLabels,
 | 
			
		||||
			Labels:      c.connectionPoolerLabelsSelector(connectionPooler.Role, true).MatchLabels,
 | 
			
		||||
			Annotations: map[string]string{},
 | 
			
		||||
			// make StatefulSet object its owner to represent the dependency.
 | 
			
		||||
			// By itself StatefulSet is being deleted with "Orphaned"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -838,9 +838,9 @@ func testResources(cluster *Cluster, podSpec *v1.PodTemplateSpec, role PostgresR
 | 
			
		|||
func testLabels(cluster *Cluster, podSpec *v1.PodTemplateSpec, role PostgresRole) error {
 | 
			
		||||
	poolerLabels := podSpec.ObjectMeta.Labels["connection-pooler"]
 | 
			
		||||
 | 
			
		||||
	if poolerLabels != cluster.connectionPoolerLabelsSelector(role).MatchLabels["connection-pooler"] {
 | 
			
		||||
	if poolerLabels != cluster.connectionPoolerLabelsSelector(role, true).MatchLabels["connection-pooler"] {
 | 
			
		||||
		return fmt.Errorf("Pod labels do not match, got %+v, expected %+v",
 | 
			
		||||
			podSpec.ObjectMeta.Labels, cluster.connectionPoolerLabelsSelector(role).MatchLabels)
 | 
			
		||||
			podSpec.ObjectMeta.Labels, cluster.connectionPoolerLabelsSelector(role, true).MatchLabels)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
| 
						 | 
				
			
			@ -848,7 +848,7 @@ func testLabels(cluster *Cluster, podSpec *v1.PodTemplateSpec, role PostgresRole
 | 
			
		|||
 | 
			
		||||
func testSelector(cluster *Cluster, deployment *appsv1.Deployment) error {
 | 
			
		||||
	labels := deployment.Spec.Selector.MatchLabels
 | 
			
		||||
	expected := cluster.connectionPoolerLabelsSelector(Master).MatchLabels
 | 
			
		||||
	expected := cluster.connectionPoolerLabelsSelector(Master, true).MatchLabels
 | 
			
		||||
 | 
			
		||||
	if labels["connection-pooler"] != expected["connection-pooler"] {
 | 
			
		||||
		return fmt.Errorf("Labels are incorrect, got %+v, expected %+v",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue