Skip to content
Merged
2 changes: 1 addition & 1 deletion api/v1alpha1/perconaservermysql_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -502,7 +502,7 @@ type ServiceExpose struct {
ExternalTrafficPolicy corev1.ServiceExternalTrafficPolicyType `json:"externalTrafficPolicy,omitempty"`
}

// Determines if both annotations and labels of the service expose are empty.
// SaveOldMeta determines if both annotations and labels of the service expose are empty.
func (e *ServiceExpose) SaveOldMeta() bool {
return len(e.Annotations) == 0 && len(e.Labels) == 0
}
Expand Down
6 changes: 0 additions & 6 deletions e2e-tests/tests/async-ignore-annotations/04-assert.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,6 @@ spec:
app.kubernetes.io/name: mysql
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22
rack-test: rack-test-22
sessionAffinity: None
type: ClusterIP
---
Expand Down Expand Up @@ -113,8 +111,6 @@ spec:
app.kubernetes.io/name: haproxy
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22
rack-test: rack-test-22
sessionAffinity: None
type: ClusterIP
---
Expand Down Expand Up @@ -163,7 +159,5 @@ spec:
app.kubernetes.io/name: orchestrator
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22
rack-test: rack-test-22
sessionAffinity: None
type: ClusterIP
3 changes: 0 additions & 3 deletions e2e-tests/tests/async-ignore-annotations/05-assert.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ spec:
app.kubernetes.io/name: mysql
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22
sessionAffinity: None
type: ClusterIP
---
Expand Down Expand Up @@ -108,7 +107,6 @@ spec:
app.kubernetes.io/name: haproxy
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22
sessionAffinity: None
type: ClusterIP
---
Expand Down Expand Up @@ -155,6 +153,5 @@ spec:
app.kubernetes.io/name: orchestrator
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22
sessionAffinity: None
type: ClusterIP
3 changes: 0 additions & 3 deletions e2e-tests/tests/async-ignore-annotations/06-assert.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ spec:
app.kubernetes.io/managed-by: percona-server-mysql-operator
app.kubernetes.io/name: mysql
app.kubernetes.io/part-of: percona-server
rack: rack-22-test
sessionAffinity: None
type: ClusterIP
---
Expand Down Expand Up @@ -107,7 +106,6 @@ spec:
app.kubernetes.io/name: haproxy
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22-test
sessionAffinity: None
type: ClusterIP
---
Expand Down Expand Up @@ -154,6 +152,5 @@ spec:
app.kubernetes.io/name: orchestrator
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22-test
sessionAffinity: None
type: ClusterIP
3 changes: 0 additions & 3 deletions e2e-tests/tests/async-ignore-annotations/07-assert.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ spec:
app.kubernetes.io/name: mysql
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22-test
sessionAffinity: None
type: ClusterIP
---
Expand Down Expand Up @@ -104,7 +103,6 @@ spec:
app.kubernetes.io/name: haproxy
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22-test
sessionAffinity: None
type: ClusterIP
---
Expand Down Expand Up @@ -149,7 +147,6 @@ spec:
app.kubernetes.io/name: orchestrator
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22-test
sessionAffinity: None
type: ClusterIP

4 changes: 0 additions & 4 deletions e2e-tests/tests/gr-ignore-annotations/04-assert.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,6 @@ spec:
app.kubernetes.io/name: mysql
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack-test: rack-test-22
rack: rack-22
sessionAffinity: None
type: LoadBalancer
---
Expand Down Expand Up @@ -126,7 +124,5 @@ spec:
app.kubernetes.io/name: router
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack-test: rack-test-22
rack: rack-22
sessionAffinity: None
type: LoadBalancer
2 changes: 0 additions & 2 deletions e2e-tests/tests/gr-ignore-annotations/05-assert.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ spec:
app.kubernetes.io/name: mysql
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22
sessionAffinity: None
type: LoadBalancer
---
Expand Down Expand Up @@ -121,6 +120,5 @@ spec:
app.kubernetes.io/name: router
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22
sessionAffinity: None
type: LoadBalancer
2 changes: 0 additions & 2 deletions e2e-tests/tests/gr-ignore-annotations/06-assert.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ spec:
app.kubernetes.io/name: mysql
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22-test
sessionAffinity: None
type: LoadBalancer
---
Expand Down Expand Up @@ -121,6 +120,5 @@ spec:
app.kubernetes.io/name: router
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22-test
sessionAffinity: None
type: LoadBalancer
2 changes: 0 additions & 2 deletions e2e-tests/tests/gr-ignore-annotations/07-assert.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ spec:
app.kubernetes.io/name: mysql
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22-test
sessionAffinity: None
type: LoadBalancer
---
Expand Down Expand Up @@ -117,6 +116,5 @@ spec:
app.kubernetes.io/name: router
app.kubernetes.io/part-of: percona-server
app.kubernetes.io/version: v0.12.0
rack: rack-22-test
sessionAffinity: None
type: LoadBalancer
4 changes: 3 additions & 1 deletion pkg/haproxy/haproxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ func Service(cr *apiv1alpha1.PerconaServerMySQL, secret *corev1.Secret) *corev1.
labels := MatchLabels(cr)
labels = util.SSMapMerge(expose.Labels, labels)

selector := MatchLabels(cr)

serviceType := cr.Spec.Proxy.HAProxy.Expose.Type

var loadBalancerSourceRanges []string
Expand Down Expand Up @@ -117,7 +119,7 @@ func Service(cr *apiv1alpha1.PerconaServerMySQL, secret *corev1.Secret) *corev1.
Spec: corev1.ServiceSpec{
Type: serviceType,
Ports: ports,
Selector: labels,
Selector: selector,
LoadBalancerSourceRanges: loadBalancerSourceRanges,
InternalTrafficPolicy: expose.InternalTrafficPolicy,
ExternalTrafficPolicy: externalTrafficPolicy,
Expand Down
88 changes: 88 additions & 0 deletions pkg/haproxy/haproxy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package haproxy
import (
"testing"

apiv1alpha1 "github.com/percona/percona-server-mysql-operator/api/v1alpha1"
"github.com/stretchr/testify/assert"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -233,3 +234,90 @@ func TestStatefulset(t *testing.T) {
assert.Equal(t, expectedLivenessProbe, *hContainer.LivenessProbe)
})
}

func TestService(t *testing.T) {
podName := "test-cluster-haproxy"

cr := &apiv1alpha1.PerconaServerMySQL{
ObjectMeta: metav1.ObjectMeta{
Name: "test-cluster",
Namespace: "test-namespace",
},
Spec: apiv1alpha1.PerconaServerMySQLSpec{
Proxy: apiv1alpha1.ProxySpec{
HAProxy: &apiv1alpha1.HAProxySpec{
Expose: apiv1alpha1.ServiceExpose{
Type: corev1.ServiceTypeLoadBalancer,
Labels: map[string]string{
"custom-label": "custom-value",
},
Annotations: map[string]string{
"custom-annotation": "custom-annotation-value",
},
LoadBalancerSourceRanges: []string{"10.0.0.0/8"},
},
},
},
},
}

tests := map[string]struct {
serviceType corev1.ServiceType
expectLoadBalancer bool
expectExternalTrafficPolicy bool
}{
"LoadBalancer service": {
serviceType: corev1.ServiceTypeLoadBalancer,
expectLoadBalancer: true,
expectExternalTrafficPolicy: true,
},
"NodePort service": {
serviceType: corev1.ServiceTypeNodePort,
expectLoadBalancer: false,
expectExternalTrafficPolicy: true,
},
"ClusterIP service": {
serviceType: corev1.ServiceTypeClusterIP,
expectLoadBalancer: false,
expectExternalTrafficPolicy: false,
},
}

for name, tt := range tests {
t.Run(name, func(t *testing.T) {
cr.Spec.Proxy.HAProxy.Expose.Type = tt.serviceType

service := Service(cr, nil)

assert.Equal(t, "v1", service.APIVersion)
assert.Equal(t, "Service", service.Kind)
assert.Equal(t, podName, service.Name)
assert.Equal(t, "test-namespace", service.Namespace)

assert.Equal(t, tt.serviceType, service.Spec.Type)

expectedLabels := MatchLabels(cr)
expectedLabels["custom-label"] = "custom-value"
assert.Equal(t, expectedLabels, service.Labels)

expectedSelector := MatchLabels(cr)
assert.Equal(t, expectedSelector, service.Spec.Selector)

assert.Equal(t, cr.Spec.Proxy.HAProxy.Expose.Annotations, service.Annotations)

if tt.expectLoadBalancer {
assert.Equal(t, cr.Spec.Proxy.HAProxy.Expose.LoadBalancerSourceRanges, service.Spec.LoadBalancerSourceRanges)
} else {
assert.Empty(t, service.Spec.LoadBalancerSourceRanges)
}

if tt.expectExternalTrafficPolicy {
assert.Equal(t, cr.Spec.Proxy.HAProxy.Expose.ExternalTrafficPolicy, service.Spec.ExternalTrafficPolicy)
} else {
assert.Empty(t, service.Spec.ExternalTrafficPolicy)
}

assert.Equal(t, cr.Spec.Proxy.HAProxy.Expose.InternalTrafficPolicy, service.Spec.InternalTrafficPolicy)
})
}
}
Loading