Merge changes Ib99cb819,Iae54ba77,I79e772d5
* changes:
Update Gerrit to 3.3.1
Fix issue when restarting with incompletely created index
Wrap too long lines in test code
diff --git a/container-images/gerrit-init/tools/gerrit-initializer/initializer/config/init_config.py b/container-images/gerrit-init/tools/gerrit-initializer/initializer/config/init_config.py
index 13e7ef4..ab39275 100644
--- a/container-images/gerrit-init/tools/gerrit-initializer/initializer/config/init_config.py
+++ b/container-images/gerrit-init/tools/gerrit-initializer/initializer/config/init_config.py
@@ -22,6 +22,7 @@
self.downloaded_plugins = list()
self.plugin_cache_enabled = False
self.packaged_plugins = set()
+ self.install_as_library = set()
self.plugin_cache_dir = None
self.ca_cert_path = True
@@ -40,6 +41,8 @@
self.downloaded_plugins = config["downloadedPlugins"]
if "packagedPlugins" in config:
self.packaged_plugins = set(config["packagedPlugins"])
+ if "installAsLibrary" in config:
+ self.install_as_library = set(config["installAsLibrary"])
if "pluginCache" in config:
self.plugin_cache_enabled = config["pluginCache"]
if "pluginCacheDir" in config and config["pluginCacheDir"]:
diff --git a/container-images/gerrit-init/tools/gerrit-initializer/initializer/tasks/download_plugins.py b/container-images/gerrit-init/tools/gerrit-initializer/initializer/tasks/download_plugins.py
index d2c8e16..2bc2110 100755
--- a/container-images/gerrit-init/tools/gerrit-initializer/initializer/tasks/download_plugins.py
+++ b/container-images/gerrit-init/tools/gerrit-initializer/initializer/tasks/download_plugins.py
@@ -42,6 +42,7 @@
self.required_plugins = self._get_required_plugins()
self.plugin_dir = os.path.join(site, "plugins")
+ self.lib_dir = os.path.join(site, "lib")
self.plugins_changed = False
def _create_plugins_dir(self):
@@ -102,6 +103,18 @@
os.remove(os.path.join(self.plugin_dir, plugin))
LOG.info("Removed plugin %s", plugin)
+ def _symlink_plugins_to_lib(self):
+ if not os.path.exists(self.lib_dir):
+ os.makedirs(self.lib_dir)
+ for lib in self.config.install_as_library:
+ plugin_path = os.path.join(self.plugin_dir, "%s.jar" % lib)
+ if os.path.exists(plugin_path):
+ os.symlink(plugin_path, os.path.join(self.lib_dir, "%s.jar" % lib))
+ else:
+ raise FileNotFoundError(
+ "Could not find plugin %s to symlink to lib-directory." % lib
+ )
+
def execute(self):
self._create_plugins_dir()
self._remove_unwanted_plugins()
@@ -110,6 +123,8 @@
for plugin in self.config.downloaded_plugins:
self._install_plugin(plugin)
+ self._symlink_plugins_to_lib()
+
def _download_plugin(self, plugin, target):
LOG.info("Downloading %s plugin to %s", plugin["name"], target)
try:
diff --git a/helm-charts/gerrit-replica/templates/gerrit-replica.configmap.yaml b/helm-charts/gerrit-replica/templates/gerrit-replica.configmap.yaml
index 9ba9e1b..12d591e 100644
--- a/helm-charts/gerrit-replica/templates/gerrit-replica.configmap.yaml
+++ b/helm-charts/gerrit-replica/templates/gerrit-replica.configmap.yaml
@@ -34,7 +34,7 @@
data:
gerrit-init.yaml: |-
{{ if .Values.caCert -}}
- caCertPath: /var/mnt/etc/ca.crt
+ caCertPath: /var/config/ca.crt
{{- end }}
pluginCache: {{ .Values.gerritReplica.plugins.cache.enabled }}
pluginCacheDir: /var/mnt/plugins
@@ -46,3 +46,7 @@
downloadedPlugins:
{{ toYaml .Values.gerritReplica.plugins.downloaded | indent 6 }}
{{- end }}
+ {{- if .Values.gerritReplica.plugins.installAsLibrary }}
+ installAsLibrary:
+{{ toYaml .Values.gerritReplica.plugins.installAsLibrary | indent 6 }}
+ {{- end }}
diff --git a/helm-charts/gerrit-replica/values.yaml b/helm-charts/gerrit-replica/values.yaml
index 58fafd0..aa97ffd 100644
--- a/helm-charts/gerrit-replica/values.yaml
+++ b/helm-charts/gerrit-replica/values.yaml
@@ -283,7 +283,7 @@
# - name: delete-project
# url: https://example.com/gerrit-plugins/delete-project.jar
# sha1:
-
+ installAsLibrary: []
# Only downloaded plugins will be cached. This will be ignored, if no plugins
# are downloaded.
cache:
diff --git a/helm-charts/gerrit/templates/gerrit.configmap.yaml b/helm-charts/gerrit/templates/gerrit.configmap.yaml
index 1e6b744..b4ec036 100644
--- a/helm-charts/gerrit/templates/gerrit.configmap.yaml
+++ b/helm-charts/gerrit/templates/gerrit.configmap.yaml
@@ -46,3 +46,7 @@
downloadedPlugins:
{{ toYaml .Values.gerrit.plugins.downloaded | indent 6 }}
{{- end }}
+ {{- if .Values.gerrit.plugins.installAsLibrary }}
+ installAsLibrary:
+{{ toYaml .Values.gerrit.plugins.installAsLibrary | indent 6 }}
+ {{- end }}
diff --git a/helm-charts/gerrit/templates/gerrit.stateful-set.yaml b/helm-charts/gerrit/templates/gerrit.stateful-set.yaml
index e22c71b..4334e60 100644
--- a/helm-charts/gerrit/templates/gerrit.stateful-set.yaml
+++ b/helm-charts/gerrit/templates/gerrit.stateful-set.yaml
@@ -121,7 +121,7 @@
{{ if .Values.caCert -}}
- name: tls-ca
subPath: ca.crt
- mountPath: "/var/mnt/etc/ca.crt"
+ mountPath: "/var/config/ca.crt"
{{- end }}
containers:
- name: gerrit
diff --git a/helm-charts/gerrit/values.yaml b/helm-charts/gerrit/values.yaml
index a61b777..cc43bcf 100644
--- a/helm-charts/gerrit/values.yaml
+++ b/helm-charts/gerrit/values.yaml
@@ -185,7 +185,7 @@
# - name: delete-project
# url: https://example.com/gerrit-plugins/delete-project.jar
# sha1:
-
+ installAsLibrary: []
# Only downloaded plugins will be cached. This will be ignored, if no plugins
# are downloaded.
cache:
diff --git a/tests/container-images/gerrit-init/test_container_integration_gerrit_init.py b/tests/container-images/gerrit-init/test_container_integration_gerrit_init.py
index 566f8f7..3a4c369 100644
--- a/tests/container-images/gerrit-init/test_container_integration_gerrit_init.py
+++ b/tests/container-images/gerrit-init/test_container_integration_gerrit_init.py
@@ -158,3 +158,49 @@
assert os.path.exists(
os.path.join(tmp_site_dir, "plugins", "%s.jar" % plugin)
)
+
+ def test_libraries_are_symlinked(
+ self, container_run_endless, init_config_dir, tmp_site_dir
+ ):
+ with open(os.path.join(init_config_dir, "init.yaml"), "w") as f:
+ yaml.dump(
+ {"packagedPlugins": ["hooks"], "installAsLibrary": ["hooks"]},
+ f,
+ default_flow_style=False,
+ )
+
+ exit_code, _ = container_run_endless.exec_run(
+ "python3 /var/tools/gerrit-initializer -s /var/gerrit -c /var/config/init.yaml init"
+ )
+ assert exit_code == 0
+
+ assert os.path.exists(os.path.join(tmp_site_dir, "plugins", "%s.jar" % "hooks"))
+ assert os.path.islink(os.path.join(tmp_site_dir, "lib", "%s.jar" % "hooks"))
+
+ exit_code, output = container_run_endless.exec_run(
+ "readlink -f /var/gerrit/lib/hooks.jar"
+ )
+ assert exit_code == 0
+ assert output.decode("utf-8").strip() == "/var/gerrit/plugins/hooks.jar"
+
+ def test_library_symlink_fails_without_plugin(
+ self, container_run_endless, init_config_dir
+ ):
+ with open(os.path.join(init_config_dir, "init.yaml"), "w") as f:
+ yaml.dump(
+ {"packagedPlugins": ["hooks"], "installAsLibrary": ["saml"]},
+ f,
+ default_flow_style=False,
+ )
+
+ exit_code, output = container_run_endless.exec_run(
+ "python3 /var/tools/gerrit-initializer -s /var/gerrit -c /var/config/init.yaml init"
+ )
+ assert exit_code == 1
+ assert (
+ output.decode("utf-8")
+ .strip()
+ .endswith(
+ "FileNotFoundError: Could not find plugin saml to symlink to lib-directory."
+ )
+ )