Configure gerrit trigger
PROD-16423
Change-Id: Id99189525bc02e08c5c9eafa4110aa0f356d48e8
diff --git a/README.rst b/README.rst
index d721873..588d72b 100644
--- a/README.rst
+++ b/README.rst
@@ -798,6 +798,32 @@
visible_for_project: ''
timestamps: false
timestamp_format: ''
+=======
+Gerrit trigger plugin configuration
+
+.. code-block:: yaml
+
+ jenkins:
+ client:
+ gerrit:
+ server1:
+ host: "gerrit.domain.local"
+ port: 29418
+ username: "jenkins"
+ email: "jenkins@domain.local"
+ auth_key_file: "/var/jenkins_home/.ssh/id_rsa"
+ frontendURL: "https://gerrit.domain.local"
+ authkey: |
+ SOMESSHKEY
+ server2:
+ host: "gerrit2.domain.local"
+ port: 29418
+ username: "jenkins"
+ email: "jenkins@domain.local"
+ auth_key_file: "/var/jenkins_home/.ssh/id_rsa"
+ frontendURL: "https://gerrit2.domain.local"
+ authkey: |
+ SOMESSHKEY
Usage
=====
diff --git a/_states/jenkins_gerrit.py b/_states/jenkins_gerrit.py
new file mode 100644
index 0000000..26b1259
--- /dev/null
+++ b/_states/jenkins_gerrit.py
@@ -0,0 +1,51 @@
+import logging
+
+logger = logging.getLogger(__name__)
+
+def __virtual__():
+ '''
+ Only load if jenkins_common module exist.
+ '''
+ if 'jenkins_common.call_groovy_script' not in __salt__:
+ return (
+ False,
+ 'The jenkins_gerrit state module cannot be loaded: '
+ 'jenkins_common not found')
+ return True
+
+
+def present(name, hostname, username, frontendurl, auth_key_file, authkey,
+ port="29418", auth_key_file_password=None, email="", proxy=""):
+ """
+ Jenkins gerrit-trigger state method
+
+ :param name: server name
+ :param host: server hostname
+ :param username: username
+ :param email: trigger email (optional)
+ :param port: server ssh port
+ :param proxy: proxy url (optional)
+ :param frontendurl: server frontend URL
+ :param auth_key_file: path to key file
+ :param authkey: ssh key
+ :param auth_key_file_password: password for keyfile (optional)
+ :returns: salt-specified state dict
+ """
+ template = __salt__['jenkins_common.load_template'](
+ 'salt://jenkins/files/groovy/gerrit.template',
+ __env__)
+ return __salt__['jenkins_common.api_call'](name, template,
+ ["CREATED", "EXISTS"],
+ {
+ "name": name,
+ "hostname": hostname,
+ "port": port if port else "29418",
+ "proxy": proxy if proxy else "",
+ "username": username,
+ "email": email if email else "",
+ "frontendurl": frontendurl,
+ "auth_key_file": auth_key_file,
+ "authkey": authkey,
+ "auth_key_file_password": auth_key_file_password if auth_key_file_password else None
+ },
+ "Gerrit server")
diff --git a/jenkins/client/gerrit.sls b/jenkins/client/gerrit.sls
new file mode 100644
index 0000000..c540b20
--- /dev/null
+++ b/jenkins/client/gerrit.sls
@@ -0,0 +1,20 @@
+{% from "jenkins/map.jinja" import client with context %}
+{%- if client.gerrit is defined %}
+{% for name, gerrit in client.get('gerrit',{}).iteritems() %}
+jenkins_gerrit_trigger_{{ name }}:
+ jenkins_gerrit.present:
+ - name: {{ name }}
+ - hostname: {{ gerrit.get('host', '') }}
+ - port: {{ gerrit.get('port', '29418') }}
+ - proxy: {{ gerrit.get('proxy', '') }}
+ - username: {{ gerrit.get('username', '') }}
+ - email: {{ gerrit.get('email', '') }}
+ - auth_key_file: {{ gerrit.get('auth_key_file', '') }}
+ - frontendurl: {{ gerrit.get('frontendURL','') }}
+ {%- if gerrit.authkey is defined %}
+ - authkey: |
+ {{ gerrit.get('authkey','')|indent(6) }}
+ {%- endif %}
+ - auth_key_file_password: {{ gerrit.get('auth_key_file_password', '') }}
+{% endfor %}
+{%- endif %}
diff --git a/jenkins/client/init.sls b/jenkins/client/init.sls
index 46fb104..f68d83d 100644
--- a/jenkins/client/init.sls
+++ b/jenkins/client/init.sls
@@ -59,6 +59,10 @@
- jenkins.client.job_template
{%- endif %}
+{%- if client.gerrit is defined %}
+ - jenkins.client.gerrit
+{%- endif %}
+
jenkins_client_install:
pkg.installed:
diff --git a/jenkins/files/groovy/gerrit.template b/jenkins/files/groovy/gerrit.template
new file mode 100644
index 0000000..1895494
--- /dev/null
+++ b/jenkins/files/groovy/gerrit.template
@@ -0,0 +1,56 @@
+#!groovy
+import jenkins.model.*;
+import net.sf.json.*;
+import com.sonyericsson.hudson.plugins.gerrit.trigger.*;
+
+if ( Jenkins.instance.pluginManager.activePlugins.find { it.shortName == "gerrit-trigger" } != null ) {
+ def gerritPlugin = Jenkins.instance.getPlugin(com.sonyericsson.hudson.plugins.gerrit.trigger.PluginImpl.class)
+ gerritPlugin.getPluginConfig().setNumberOfReceivingWorkerThreads(3)
+ gerritPlugin.getPluginConfig().setNumberOfSendingWorkerThreads(1)
+
+ def authkey = """${authkey}
+ """
+
+ def serverName = "${name}"
+ def gerritServer = new GerritServer(serverName)
+
+ def gerritTriggerPlugin = PluginImpl.getInstance()
+ def gerritServers = gerritTriggerPlugin.getServerNames()
+ def gerritServerExists = false
+ gerritServers.each {
+ serverName = (String) it
+ if ( serverName == gerritServer.getName() ) {
+ gerritServerExists = true
+ }
+ }
+ if (!gerritServerExists){
+
+ def triggerConfig = new config.Config()
+
+ triggerConfig.setGerritHostName("${hostname}")
+ triggerConfig.setGerritUserName("${username}")
+ triggerConfig.setGerritFrontEndURL("${frontendurl}")
+ triggerConfig.setGerritSshPort(${port})
+ triggerConfig.setGerritProxy("${proxy}")
+ triggerConfig.setGerritEMail("${email}")
+
+ def gerritAuthKeyFile = new File("${auth_key_file}")
+ gerritAuthKeyFile.write(authkey)
+ if ( gerritAuthKeyFile.exists() ) {
+ triggerConfig.setGerritAuthKeyFile(gerritAuthKeyFile)
+ }
+
+ triggerConfig.setGerritAuthKeyFilePassword("${auth_key_file_password}")
+
+ gerritServer.setConfig(triggerConfig)
+
+ gerritPlugin.addServer(gerritServer)
+ gerritServer.start()
+ gerritServer.startConnection()
+ Jenkins.instance.save()
+ print("CREATED")
+ }
+ else {
+ print("EXISTS")
+ }
+}