Add jgroups port to the Primary Gerrit service

This was inconsistent to the ServiceEntries. Since jgroups
usually uses the Pod IP that was not an issue yet, but in
some setups this broke the communication between primary
Gerrits.

Change-Id: I74aec8c221bce6f0937f30dcf50933efdd91a779
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritAbstractService.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritAbstractService.java
index f09a97e..76663c4 100644
--- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritAbstractService.java
+++ b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritAbstractService.java
@@ -15,6 +15,7 @@
 package com.google.gerrit.k8s.operator.gerrit.dependent;
 
 import static com.google.gerrit.k8s.operator.gerrit.dependent.GerritStatefulSet.HTTP_PORT;
+import static com.google.gerrit.k8s.operator.gerrit.dependent.GerritStatefulSet.JGROUPS_PORT;
 import static com.google.gerrit.k8s.operator.gerrit.dependent.GerritStatefulSet.SSH_PORT;
 
 import com.google.gerrit.k8s.operator.api.model.gerrit.Gerrit;
@@ -38,6 +39,7 @@
 
   public static final String HTTP_PORT_NAME = "http";
   public static final String SSH_PORT_NAME = "ssh";
+  public static final String JGROUPS_PORT_NAME = "jgroups";
 
   abstract ServiceSpec getSpec(Gerrit gerrit);
 
@@ -104,6 +106,14 @@
               .withNewTargetPort(SSH_PORT)
               .build());
     }
+    if (gerrit.getSpec().isHighlyAvailablePrimary()) {
+      ports.add(
+          new ServicePortBuilder()
+              .withName(JGROUPS_PORT_NAME)
+              .withPort(JGROUPS_PORT)
+              .withNewTargetPort(JGROUPS_PORT)
+              .build());
+    }
     return ports;
   }
 }
diff --git a/operator/src/test/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritTest.java b/operator/src/test/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritTest.java
index 037e097..86179a7 100644
--- a/operator/src/test/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritTest.java
+++ b/operator/src/test/java/com/google/gerrit/k8s/operator/gerrit/dependent/GerritTest.java
@@ -126,14 +126,14 @@
             "gerrit_configmap_ha_primary.yaml",
             "gerrit-init_configmap_ha_primary.yaml",
             "statefulset_ha_primary.yaml",
-            "service.yaml",
-            "headless_service.yaml"),
+            "service_ha_primary.yaml",
+            "headless_service_ha_primary.yaml"),
         Arguments.of(
             "../gerrit_es_primary.yaml",
             "gerrit_configmap_es_primary.yaml",
             "gerrit-init_configmap_ha_primary.yaml",
             "statefulset_es_primary.yaml",
-            "service.yaml",
-            "headless_service.yaml"));
+            "service_ha_primary.yaml",
+            "headless_service_ha_primary.yaml"));
   }
 }
diff --git a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/headless_service_ha_primary.yaml b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/headless_service_ha_primary.yaml
new file mode 100644
index 0000000..8c5570e
--- /dev/null
+++ b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/headless_service_ha_primary.yaml
@@ -0,0 +1,31 @@
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    app.kubernetes.io/component: gerrit
+    app.kubernetes.io/created-by: GerritReconciler
+    app.kubernetes.io/instance: gerrit
+    app.kubernetes.io/managed-by: gerrit-operator
+    app.kubernetes.io/name: gerrit
+    app.kubernetes.io/part-of: gerrit
+    app.kubernetes.io/version: unknown
+  name: gerrit
+  namespace: gerrit
+spec:
+  clusterIP: None
+  ports:
+  - name: http
+    port: 80
+    targetPort: 8080
+  - name: ssh
+    port: 29418
+    targetPort: 29418
+  - name: jgroups
+    port: 7800
+    targetPort: 7800
+  selector:
+    app.kubernetes.io/component: gerrit-statefulset-gerrit
+    app.kubernetes.io/instance: gerrit
+    app.kubernetes.io/managed-by: gerrit-operator
+    app.kubernetes.io/name: gerrit
+    app.kubernetes.io/part-of: gerrit
diff --git a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/service_ha_primary.yaml b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/service_ha_primary.yaml
new file mode 100644
index 0000000..c4ebf86
--- /dev/null
+++ b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/service_ha_primary.yaml
@@ -0,0 +1,31 @@
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    app.kubernetes.io/component: gerrit-service
+    app.kubernetes.io/created-by: GerritReconciler
+    app.kubernetes.io/instance: gerrit
+    app.kubernetes.io/managed-by: gerrit-operator
+    app.kubernetes.io/name: gerrit
+    app.kubernetes.io/part-of: gerrit
+    app.kubernetes.io/version: unknown
+  name: gerrit-service
+  namespace: gerrit
+spec:
+  ports:
+  - name: http
+    port: 80
+    targetPort: 8080
+  - name: ssh
+    port: 29418
+    targetPort: 29418
+  - name: jgroups
+    port: 7800
+    targetPort: 7800
+  selector:
+    app.kubernetes.io/component: gerrit-statefulset-gerrit
+    app.kubernetes.io/instance: gerrit
+    app.kubernetes.io/managed-by: gerrit-operator
+    app.kubernetes.io/name: gerrit
+    app.kubernetes.io/part-of: gerrit
+  type: NodePort