Use healthcheck plugin endpoint in target groups

Currently the healthcheck of primary and replica instances of gerrit
uses simple TCP or HTTP healthcheck protocol types, which cannot really
show whether gerrit is healthy.

The only way to really understand about gerrit healthiness is to ask the
healthcheck endpoint, which has insights on application level
information such as jgit, auth, changes etc.

Enhance primary and replica healthchecks to always assess target group
health by polling the healthcheck endpoint.

Bug: Issue 15119
Change-Id: I853a3a9e5497c9d24079286c2b2a2ab26e7e29e7
diff --git a/dual-primary/cf-service-primary.yml b/dual-primary/cf-service-primary.yml
index 8d51992..7aa35c6 100644
--- a/dual-primary/cf-service-primary.yml
+++ b/dual-primary/cf-service-primary.yml
@@ -423,6 +423,10 @@
                   !Join [':', [!Ref 'ClusterStackName', 'VPCId']]
             Port: !Ref HTTPHostPort
             Protocol: TCP
+            HealthCheckPort: !Ref HTTPHostPort
+            HealthCheckProtocol: HTTP
+            HealthCheckPath: '/config/server/healthcheck~status'
+            Name: !Sub 'gerrit-${GerritInstanceNumber}-primary-http'
 
     HTTPListener:
         Type: AWS::ElasticLoadBalancingV2::Listener
@@ -444,6 +448,10 @@
                   !Join [':', [!Ref 'ClusterStackName', 'VPCId']]
             Port: !Ref SSHHostPort
             Protocol: TCP
+            HealthCheckPort: !Ref HTTPHostPort
+            HealthCheckProtocol: HTTP
+            HealthCheckPath: '/config/server/healthcheck~status'
+            Name: !Sub 'gerrit-${GerritInstanceNumber}-primary-ssh'
 
     SSHListener:
         Type: AWS::ElasticLoadBalancingV2::Listener
diff --git a/dual-primary/cf-service-replica.yml b/dual-primary/cf-service-replica.yml
index aad3eee..37c534b 100644
--- a/dual-primary/cf-service-replica.yml
+++ b/dual-primary/cf-service-replica.yml
@@ -455,6 +455,9 @@
             Port: !Ref HTTPHostPort
             Protocol: TCP
             HealthCheckPort: !Ref HTTPHostPort
+            HealthCheckProtocol: HTTP
+            HealthCheckPath: '/config/server/healthcheck~status'
+            Name: 'gerrit-replica-http'
 
     HTTPListener:
         Type: AWS::ElasticLoadBalancingV2::Listener
@@ -478,7 +481,10 @@
                   !Join [':', [!Ref 'ClusterStackName', 'VPCId']]
             Port: !Ref SSHHostPort
             Protocol: TCP
-            HealthCheckPort: !Ref SSHHostPort
+            HealthCheckPort: !Ref HTTPHostPort
+            HealthCheckProtocol: HTTP
+            HealthCheckPath: '/config/server/healthcheck~status'
+            Name: 'gerrit-replica-ssh'
 
     SSHListener:
         Type: AWS::ElasticLoadBalancingV2::Listener
diff --git a/primary-replica/cf-service-primary.yml b/primary-replica/cf-service-primary.yml
index 981d85a..7c10836 100644
--- a/primary-replica/cf-service-primary.yml
+++ b/primary-replica/cf-service-primary.yml
@@ -364,6 +364,10 @@
                   !Join [':', [!Ref 'ClusterStackName', 'VPCId']]
             Port: !Ref HTTPPort
             Protocol: TCP
+            HealthCheckProtocol: HTTP
+            HealthCheckPort: !Ref HTTPPort
+            HealthCheckPath: '/config/server/healthcheck~status'
+            Name: 'gerrit-primary-http'
 
     HTTPListener:
         Type: AWS::ElasticLoadBalancingV2::Listener
@@ -387,6 +391,10 @@
                   !Join [':', [!Ref 'ClusterStackName', 'VPCId']]
             Port: !Ref SSHPort
             Protocol: TCP
+            HealthCheckProtocol: HTTP
+            HealthCheckPort: !Ref HTTPPort
+            HealthCheckPath: '/config/server/healthcheck~status'
+            Name: 'gerrit-primary-ssh'
 
     SSHListener:
         Type: AWS::ElasticLoadBalancingV2::Listener
diff --git a/primary-replica/cf-service-replica.yml b/primary-replica/cf-service-replica.yml
index 11f5351..d02b033 100644
--- a/primary-replica/cf-service-replica.yml
+++ b/primary-replica/cf-service-replica.yml
@@ -455,6 +455,9 @@
             Port: !Ref HTTPHostPort
             Protocol: TCP
             HealthCheckPort: !Ref HTTPHostPort
+            HealthCheckProtocol: HTTP
+            HealthCheckPath: '/config/server/healthcheck~status'
+            Name: 'gerrit-replica-http'
 
     HTTPListener:
         Type: AWS::ElasticLoadBalancingV2::Listener
@@ -478,7 +481,10 @@
                   !Join [':', [!Ref 'ClusterStackName', 'VPCId']]
             Port: !Ref SSHHostPort
             Protocol: TCP
-            HealthCheckPort: !Ref SSHHostPort
+            HealthCheckPort: !Ref HTTPHostPort
+            HealthCheckProtocol: HTTP
+            HealthCheckPath: '/config/server/healthcheck~status'
+            Name: 'gerrit-replica-ssh'
 
     SSHListener:
         Type: AWS::ElasticLoadBalancingV2::Listener
diff --git a/single-primary/cf-service.yml b/single-primary/cf-service.yml
index eb12568..1bebd2f 100644
--- a/single-primary/cf-service.yml
+++ b/single-primary/cf-service.yml
@@ -338,6 +338,10 @@
                   !Join [':', [!Ref 'ClusterStackName', 'VPCId']]
             Port: !Ref HTTPPort
             Protocol: TCP
+            HealthCheckProtocol: HTTP
+            HealthCheckPort: !Ref HTTPPort
+            HealthCheckPath: '/config/server/healthcheck~status'
+            Name: 'gerrit-primary-http'
 
     HTTPListener:
         Type: AWS::ElasticLoadBalancingV2::Listener
@@ -361,6 +365,10 @@
                   !Join [':', [!Ref 'ClusterStackName', 'VPCId']]
             Port: !Ref SSHPort
             Protocol: TCP
+            HealthCheckProtocol: HTTP
+            HealthCheckPort: !Ref HTTPPort
+            HealthCheckPath: '/config/server/healthcheck~status'
+            Name: 'gerrit-primary-ssh'
 
     SSHListener:
         Type: AWS::ElasticLoadBalancingV2::Listener