Configure which plugins are mandatory for the chosen Gerrit setup Change-Id: I9a9c56d0acdb70c810c38023ff4321709df876ef
diff --git a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/config/GerritConfigBuilder.java b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/config/GerritConfigBuilder.java index 83dc274..304a894 100644 --- a/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/config/GerritConfigBuilder.java +++ b/operator/src/main/java/com/google/gerrit/k8s/operator/gerrit/config/GerritConfigBuilder.java
@@ -63,6 +63,7 @@ requiredOptions.addAll(gerritSection(gerrit)); requiredOptions.addAll(httpdSection(gerrit)); requiredOptions.addAll(indexSection(gerrit)); + requiredOptions.addAll(pluginsSection(gerrit)); requiredOptions.addAll(sshdSection(gerrit)); requiredOptions.addAll(eventsBrokerSection(gerrit)); requiredOptions.addAll(webSessionBrokerSection(gerrit)); @@ -202,6 +203,41 @@ return requiredOptions; } + private static List<RequiredOption<?>> pluginsSection(Gerrit gerrit) { + List<RequiredOption<?>> requiredOptions = new ArrayList<>(); + Set<String> mandatoryPlugins = new HashSet<>(); + mandatoryPlugins.add("healthcheck"); + if (gerrit.getSpec().isHighlyAvailablePrimary()) { + mandatoryPlugins.add("high-availability"); + } + if (gerrit.getSpec().getIndex().getType() == IndexType.ELASTICSEARCH) { + mandatoryPlugins.add("index-elasticsearch"); + } + RefDatabase refDb = gerrit.getSpec().getRefdb().getDatabase(); + switch (refDb) { + case NONE: + break; + case ZOOKEEPER: + mandatoryPlugins.add("zookeeper-refdb"); + break; + case SPANNER: + mandatoryPlugins.add("spanner-refdb"); + break; + default: + throw new IllegalStateException("Unknown refdb database type: " + refDb); + } + if (gerrit.getSpec().getEventsBroker().getBrokerType() == EventsBrokerConfig.BrokerType.KAFKA) { + mandatoryPlugins.add("events-kafka"); + } + if (OperatorContext.getClusterMode() == Constants.ClusterMode.MULTISITE) { + mandatoryPlugins.add("multi-site"); + mandatoryPlugins.add("pull-replication"); + mandatoryPlugins.add("websession-broker"); + } + requiredOptions.add(new RequiredOption<Set<String>>("plugins", "mandatory", mandatoryPlugins)); + return requiredOptions; + } + private static List<RequiredOption<?>> sshdSection(Gerrit gerrit) { List<RequiredOption<?>> requiredOptions = new ArrayList<>(); requiredOptions.add(sshListenAddress(gerrit));
diff --git a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/gerrit_configmap_es_primary.yaml b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/gerrit_configmap_es_primary.yaml index 8701209..840c770 100644 --- a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/gerrit_configmap_es_primary.yaml +++ b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/gerrit_configmap_es_primary.yaml
@@ -27,6 +27,11 @@ canonicalWebUrl = https://example.com/ [httpd] listenUrl = proxy-https://*:8080/ + [plugins] + mandatory = healthcheck + mandatory = high-availability + mandatory = index-elasticsearch + mandatory = zookeeper-refdb [sshd] listenAddress = *:29418 advertisedAddress = example.com:29418
diff --git a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/gerrit_configmap_ha_primary.yaml b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/gerrit_configmap_ha_primary.yaml index 1e7b3b3..8067da1 100644 --- a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/gerrit_configmap_ha_primary.yaml +++ b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/gerrit_configmap_ha_primary.yaml
@@ -23,6 +23,10 @@ canonicalWebUrl = https://example.com/ [httpd] listenUrl = proxy-https://*:8080/ + [plugins] + mandatory = healthcheck + mandatory = high-availability + mandatory = zookeeper-refdb [sshd] listenAddress = *:29418 advertisedAddress = example.com:29418
diff --git a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/gerrit_configmap_single_primary.yaml b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/gerrit_configmap_single_primary.yaml index 86f8361..574810e 100644 --- a/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/gerrit_configmap_single_primary.yaml +++ b/operator/src/test/resources/com/google/gerrit/k8s/operator/gerrit/dependent/gerrit_configmap_single_primary.yaml
@@ -20,6 +20,8 @@ canonicalWebUrl = https://example.com/ [httpd] listenUrl = proxy-https://*:8080/ + [plugins] + mandatory = healthcheck [sshd] listenAddress = *:29418 advertisedAddress = example.com:29418
diff --git a/operator/src/test/resources/com/google/gerrit/k8s/operator/indexer/dependent/indexer.configmap.yaml b/operator/src/test/resources/com/google/gerrit/k8s/operator/indexer/dependent/indexer.configmap.yaml index c953951..0b2133d 100644 --- a/operator/src/test/resources/com/google/gerrit/k8s/operator/indexer/dependent/indexer.configmap.yaml +++ b/operator/src/test/resources/com/google/gerrit/k8s/operator/indexer/dependent/indexer.configmap.yaml
@@ -30,5 +30,8 @@ serverId = gerrit/gerrit installModule = com.gerritforge.gerrit.globalrefdb.validation.LibModule installDbModule = com.ericsson.gerrit.plugins.highavailability.ValidationModule + [plugins] + mandatory = healthcheck + mandatory = high-availability [sshd] listenAddress = *:29418
diff --git a/operator/src/test/resources/com/google/gerrit/k8s/operator/indexer/dependent/indexer_es.configmap.yaml b/operator/src/test/resources/com/google/gerrit/k8s/operator/indexer/dependent/indexer_es.configmap.yaml index afac617..454316e 100644 --- a/operator/src/test/resources/com/google/gerrit/k8s/operator/indexer/dependent/indexer_es.configmap.yaml +++ b/operator/src/test/resources/com/google/gerrit/k8s/operator/indexer/dependent/indexer_es.configmap.yaml
@@ -34,5 +34,9 @@ installModule = com.gerritforge.gerrit.globalrefdb.validation.LibModule installDbModule = com.ericsson.gerrit.plugins.highavailability.ValidationModule installIndexModule=com.google.gerrit.elasticsearch.ElasticIndexModule + [plugins] + mandatory = healthcheck + mandatory = high-availability + mandatory = index-elasticsearch [sshd] listenAddress = *:29418