-
Notifications
You must be signed in to change notification settings - Fork 260
/
services.go
112 lines (101 loc) · 3.38 KB
/
services.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
Copyright The CloudNativePG Contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package specs
import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
apiv1 "github.com/cloudnative-pg/cloudnative-pg/api/v1"
"github.com/cloudnative-pg/cloudnative-pg/pkg/postgres"
"github.com/cloudnative-pg/cloudnative-pg/pkg/utils"
)
func buildInstanceServicePorts() []corev1.ServicePort {
return []corev1.ServicePort{
{
Name: PostgresContainerName,
Protocol: corev1.ProtocolTCP,
TargetPort: intstr.FromInt(postgres.ServerPort),
Port: postgres.ServerPort,
},
}
}
// CreateClusterAnyService create a service insisting on all the pods
func CreateClusterAnyService(cluster apiv1.Cluster) *corev1.Service {
return &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: cluster.GetServiceAnyName(),
Namespace: cluster.Namespace,
},
Spec: corev1.ServiceSpec{
Type: corev1.ServiceTypeClusterIP,
PublishNotReadyAddresses: true,
Ports: buildInstanceServicePorts(),
Selector: map[string]string{
utils.ClusterLabelName: cluster.Name,
utils.PodRoleLabelName: string(utils.PodRoleInstance),
},
},
}
}
// CreateClusterReadService create a service insisting on all the ready pods
func CreateClusterReadService(cluster apiv1.Cluster) *corev1.Service {
return &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: cluster.GetServiceReadName(),
Namespace: cluster.Namespace,
},
Spec: corev1.ServiceSpec{
Type: corev1.ServiceTypeClusterIP,
Ports: buildInstanceServicePorts(),
Selector: map[string]string{
utils.ClusterLabelName: cluster.Name,
utils.PodRoleLabelName: string(utils.PodRoleInstance),
},
},
}
}
// CreateClusterReadOnlyService create a service insisting on all the ready pods
func CreateClusterReadOnlyService(cluster apiv1.Cluster) *corev1.Service {
return &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: cluster.GetServiceReadOnlyName(),
Namespace: cluster.Namespace,
},
Spec: corev1.ServiceSpec{
Type: corev1.ServiceTypeClusterIP,
Ports: buildInstanceServicePorts(),
Selector: map[string]string{
utils.ClusterLabelName: cluster.Name,
// TODO: eventually migrate to the new label
utils.ClusterRoleLabelName: ClusterRoleLabelReplica,
},
},
}
}
// CreateClusterReadWriteService create a service insisting on the primary pod
func CreateClusterReadWriteService(cluster apiv1.Cluster) *corev1.Service {
return &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: cluster.GetServiceReadWriteName(),
Namespace: cluster.Namespace,
},
Spec: corev1.ServiceSpec{
Type: corev1.ServiceTypeClusterIP,
Ports: buildInstanceServicePorts(),
Selector: map[string]string{
utils.ClusterLabelName: cluster.Name,
utils.ClusterRoleLabelName: ClusterRoleLabelPrimary,
},
},
}
}