@@ -50,7 +50,8 @@ func CreateSyncMasterClientServiceName(deploymentName string) string {
5050// DNS name for all pods.
5151// If the service already exists, nil is returned.
5252// If another error occurs, that error is returned.
53- func CreateHeadlessService (kubecli kubernetes.Interface , deployment metav1.Object , owner metav1.OwnerReference ) (string , error ) {
53+ // The returned bool is true if the service is created, or false when the service already existed.
54+ func CreateHeadlessService (kubecli kubernetes.Interface , deployment metav1.Object , owner metav1.OwnerReference ) (string , bool , error ) {
5455 deploymentName := deployment .GetName ()
5556 svcName := CreateHeadlessServiceName (deploymentName )
5657 ports := []v1.ServicePort {
@@ -62,16 +63,18 @@ func CreateHeadlessService(kubecli kubernetes.Interface, deployment metav1.Objec
6263 }
6364 publishNotReadyAddresses := false
6465 sessionAffinity := v1 .ServiceAffinityNone
65- if err := createService (kubecli , svcName , deploymentName , deployment .GetNamespace (), ClusterIPNone , "" , ports , publishNotReadyAddresses , sessionAffinity , owner ); err != nil {
66- return "" , maskAny (err )
66+ newlyCreated , err := createService (kubecli , svcName , deploymentName , deployment .GetNamespace (), ClusterIPNone , "" , ports , publishNotReadyAddresses , sessionAffinity , owner )
67+ if err != nil {
68+ return "" , false , maskAny (err )
6769 }
68- return svcName , nil
70+ return svcName , newlyCreated , nil
6971}
7072
7173// CreateDatabaseClientService prepares and creates a service in k8s, used by database clients within the k8s cluster.
7274// If the service already exists, nil is returned.
7375// If another error occurs, that error is returned.
74- func CreateDatabaseClientService (kubecli kubernetes.Interface , deployment metav1.Object , single bool , owner metav1.OwnerReference ) (string , error ) {
76+ // The returned bool is true if the service is created, or false when the service already existed.
77+ func CreateDatabaseClientService (kubecli kubernetes.Interface , deployment metav1.Object , single bool , owner metav1.OwnerReference ) (string , bool , error ) {
7578 deploymentName := deployment .GetName ()
7679 svcName := CreateDatabaseClientServiceName (deploymentName )
7780 ports := []v1.ServicePort {
@@ -89,16 +92,18 @@ func CreateDatabaseClientService(kubecli kubernetes.Interface, deployment metav1
8992 }
9093 publishNotReadyAddresses := true
9194 sessionAffinity := v1 .ServiceAffinityClientIP
92- if err := createService (kubecli , svcName , deploymentName , deployment .GetNamespace (), "" , role , ports , publishNotReadyAddresses , sessionAffinity , owner ); err != nil {
93- return "" , maskAny (err )
95+ newlyCreated , err := createService (kubecli , svcName , deploymentName , deployment .GetNamespace (), "" , role , ports , publishNotReadyAddresses , sessionAffinity , owner )
96+ if err != nil {
97+ return "" , false , maskAny (err )
9498 }
95- return svcName , nil
99+ return svcName , newlyCreated , nil
96100}
97101
98102// CreateSyncMasterClientService prepares and creates a service in k8s, used by syncmaster clients within the k8s cluster.
99103// If the service already exists, nil is returned.
100104// If another error occurs, that error is returned.
101- func CreateSyncMasterClientService (kubecli kubernetes.Interface , deployment metav1.Object , owner metav1.OwnerReference ) (string , error ) {
105+ // The returned bool is true if the service is created, or false when the service already existed.
106+ func CreateSyncMasterClientService (kubecli kubernetes.Interface , deployment metav1.Object , owner metav1.OwnerReference ) (string , bool , error ) {
102107 deploymentName := deployment .GetName ()
103108 svcName := CreateSyncMasterClientServiceName (deploymentName )
104109 ports := []v1.ServicePort {
@@ -110,17 +115,19 @@ func CreateSyncMasterClientService(kubecli kubernetes.Interface, deployment meta
110115 }
111116 publishNotReadyAddresses := true
112117 sessionAffinity := v1 .ServiceAffinityNone
113- if err := createService (kubecli , svcName , deploymentName , deployment .GetNamespace (), "" , "syncmaster" , ports , publishNotReadyAddresses , sessionAffinity , owner ); err != nil {
114- return "" , maskAny (err )
118+ newlyCreated , err := createService (kubecli , svcName , deploymentName , deployment .GetNamespace (), "" , "syncmaster" , ports , publishNotReadyAddresses , sessionAffinity , owner )
119+ if err != nil {
120+ return "" , false , maskAny (err )
115121 }
116- return svcName , nil
122+ return svcName , newlyCreated , nil
117123}
118124
119125// createService prepares and creates a service in k8s.
120126// If the service already exists, nil is returned.
121127// If another error occurs, that error is returned.
128+ // The returned bool is true if the service is created, or false when the service already existed.
122129func createService (kubecli kubernetes.Interface , svcName , deploymentName , ns , clusterIP , role string ,
123- ports []v1.ServicePort , publishNotReadyAddresses bool , sessionAffinity v1.ServiceAffinity , owner metav1.OwnerReference ) error {
130+ ports []v1.ServicePort , publishNotReadyAddresses bool , sessionAffinity v1.ServiceAffinity , owner metav1.OwnerReference ) ( bool , error ) {
124131 labels := LabelsForDeployment (deploymentName , role )
125132 svc := & v1.Service {
126133 ObjectMeta : metav1.ObjectMeta {
@@ -142,8 +149,10 @@ func createService(kubecli kubernetes.Interface, svcName, deploymentName, ns, cl
142149 },
143150 }
144151 addOwnerRefToObject (svc .GetObjectMeta (), & owner )
145- if _ , err := kubecli .CoreV1 ().Services (ns ).Create (svc ); err != nil && ! IsAlreadyExists (err ) {
146- return maskAny (err )
152+ if _ , err := kubecli .CoreV1 ().Services (ns ).Create (svc ); IsAlreadyExists (err ) {
153+ return false , nil
154+ } else if err != nil {
155+ return false , maskAny (err )
147156 }
148- return nil
157+ return true , nil
149158}
0 commit comments