Add support for ssh jenkins slaves

PROD-29680

Change-Id: I1e2154ba311f2c0f689a472227979e6946fb7e8b
diff --git a/kubernetes/control/services/drivetrain/init.yml b/kubernetes/control/services/drivetrain/init.yml
index 2702393..8039aba 100644
--- a/kubernetes/control/services/drivetrain/init.yml
+++ b/kubernetes/control/services/drivetrain/init.yml
@@ -2,7 +2,6 @@
 - system.kubernetes.control.services.drivetrain.gerrit
 - system.kubernetes.control.services.drivetrain.glusterfs_cluster
 - system.kubernetes.control.services.drivetrain.jenkins_master
-- system.kubernetes.control.services.drivetrain.jenkins_slave_multi
 parameters:
   _param:
     kdt_http_proxy: ""
diff --git a/kubernetes/control/services/drivetrain/jenkins_jnlp_slave_multi.yml b/kubernetes/control/services/drivetrain/jenkins_jnlp_slave_multi.yml
new file mode 100644
index 0000000..e46228c
--- /dev/null
+++ b/kubernetes/control/services/drivetrain/jenkins_jnlp_slave_multi.yml
@@ -0,0 +1,110 @@
+classes:
+- system.kubernetes.control.services.drivetrain.jenkins_jnlp_slave_single
+parameters:
+  kubernetes:
+    control:
+      service:
+        jenkins_slave02:
+          create: true
+          service: slave02
+          namespace: drivetrain
+          apiVersion: extensions/v1beta1
+          kind: Deployment
+          replicas: 1
+          container:
+            jenkins-slave:
+              image: ${_param:docker_image_jenkins_jnlp_slave}
+              image_pull_policy: IfNotPresent
+              variables:
+                - name: JENKINS_URL
+                  value: ${_param:jenkins_master_url}
+                - name: JENKINS_AGENT_NAME
+                  value: slave02
+                - name: JENKINS_UPDATE_SLAVE
+                  value: "'true'"
+                - name: JENKINS_LOGIN
+                  value: ${_param:jenkins_client_user}
+                - name: JENKINS_PASSWORD
+                  value: ${_param:jenkins_client_password}
+                - name: JAVA_OPTS
+                  value: "-Dhttp.proxyHost=${_param:kdt_http_proxy} -Dhttp.nonProxyHosts=|jenkins ${_param:jenkins_slave_extra_opts}"
+                - name: https_proxy
+                  value: ${_param:kdt_https_proxy}
+                - name: http_proxy
+                  value: ${_param:kdt_http_proxy}
+                - name: no_proxy
+                  value: ${_param:kdt_no_proxy}
+              volumes:
+                - name: jenkins-slave02
+                  mount: /srv/volumes/jenkins_slaves/slave02
+                  read_only: false
+                - name: docker-sock-volume02
+                  mount: /var/run/docker.sock
+                  read_only: false
+                - name: entropy-volume02
+                  mount: /dev/random
+                  read_only: true
+          volume:
+            jenkins-slave02:
+              type: glusterfs
+              endpoints: glusterfs
+              path: jenkins_slave02
+              read_only: false
+            docker-sock-volume02:
+              type: hostPath
+              path: /var/run/docker.sock
+            entropy-volume02:
+              type: hostPath
+              path: /dev/urandom
+        jenkins_slave03:
+          create: true
+          service: slave03
+          namespace: drivetrain
+          apiVersion: extensions/v1beta1
+          kind: Deployment
+          replicas: 1
+          container:
+            jenkins-slave:
+              image: ${_param:docker_image_jenkins_jnlp_slave}
+              image_pull_policy: IfNotPresent
+              variables:
+              - name: JENKINS_URL
+                value: ${_param:jenkins_master_url}
+              - name: JENKINS_AGENT_NAME
+                value: slave03
+              - name: JENKINS_UPDATE_SLAVE
+                value: "'true'"
+              - name: JENKINS_LOGIN
+                value: ${_param:jenkins_client_user}
+              - name: JENKINS_PASSWORD
+                value: ${_param:jenkins_client_password}
+              - name: JAVA_OPTS
+                value: "-Dhttp.proxyHost=${_param:kdt_http_proxy} -Dhttp.nonProxyHosts=|jenkins ${_param:jenkins_slave_extra_opts}"
+              - name: https_proxy
+                value: ${_param:kdt_https_proxy}
+              - name: http_proxy
+                value: ${_param:kdt_http_proxy}
+              - name: no_proxy
+                value: ${_param:kdt_no_proxy}
+              volumes:
+              - name: jenkins-slave03
+                mount: /srv/volumes/jenkins_slaves/slave03
+                read_only: false
+              - name: docker-sock-volume03
+                mount: /var/run/docker.sock
+                read_only: false
+              - name: entropy-volume03
+                mount: /dev/random
+                read_only: true
+          volume:
+            jenkins-slave03:
+              type: glusterfs
+              endpoints: glusterfs
+              path: jenkins_slave03
+              read_only: false
+            docker-sock-volume03:
+              type: hostPath
+              path: /var/run/docker.sock
+            entropy-volume03:
+              type: hostPath
+              path: /dev/urandom
diff --git a/kubernetes/control/services/drivetrain/jenkins_jnlp_slave_single.yml b/kubernetes/control/services/drivetrain/jenkins_jnlp_slave_single.yml
new file mode 100644
index 0000000..7f343f5
--- /dev/null
+++ b/kubernetes/control/services/drivetrain/jenkins_jnlp_slave_single.yml
@@ -0,0 +1,62 @@
+parameters:
+  _param:
+    jenkins_slave_extra_opts: ""
+    jenkins_master_url: http://jenkins:8080/jenkins
+  kubernetes:
+    pool:
+      images:
+      - ${_param:docker_image_jenkins_jnlp_slave}
+    control:
+      service:
+        jenkins_slave01:
+          create: true
+          service: slave01
+          namespace: drivetrain
+          apiVersion: extensions/v1beta1
+          kind: Deployment
+          replicas: 1
+          container:
+            jenkins-slave:
+              image: ${_param:docker_image_jenkins_jnlp_slave}
+              image_pull_policy: IfNotPresent
+              variables:
+                - name: JENKINS_URL
+                  value: ${_param:jenkins_master_url}
+                - name: JENKINS_AGENT_NAME
+                  value: slave01
+                - name: JENKINS_UPDATE_SLAVE
+                  value: "'true'"
+                - name: JENKINS_LOGIN
+                  value: ${_param:jenkins_client_user}
+                - name: JENKINS_PASSWORD
+                  value: ${_param:jenkins_client_password}
+                - name: JAVA_OPTS
+                  value: "-Dhttp.proxyHost=${_param:kdt_http_proxy} -Dhttp.nonProxyHosts=|jenkins ${_param:jenkins_slave_extra_opts}"
+                - name: https_proxy
+                  value: ${_param:kdt_https_proxy}
+                - name: http_proxy
+                  value: ${_param:kdt_http_proxy}
+                - name: no_proxy
+                  value: ${_param:kdt_no_proxy}
+              volumes:
+                - name: jenkins-slave01
+                  mount: /srv/volumes/jenkins_slaves/slave01
+                  read_only: false
+                - name: docker-sock-volume
+                  mount: /var/run/docker.sock
+                  read_only: false
+                - name: entropy-volume
+                  mount: /dev/random
+                  read_only: true
+          volume:
+            jenkins-slave01:
+              type: glusterfs
+              endpoints: glusterfs
+              path: jenkins_slave01
+              read_only: false
+            docker-sock-volume:
+              type: hostPath
+              path: /var/run/docker.sock
+            entropy-volume:
+              type: hostPath
+              path: /dev/urandom
diff --git a/kubernetes/control/services/drivetrain/jenkins_slave_multi.yml b/kubernetes/control/services/drivetrain/jenkins_slave_multi.yml
index f1617b4..9165ef6 100644
--- a/kubernetes/control/services/drivetrain/jenkins_slave_multi.yml
+++ b/kubernetes/control/services/drivetrain/jenkins_slave_multi.yml
@@ -1,110 +1,3 @@
+# Remove this file after CC update
 classes:
-- system.kubernetes.control.services.drivetrain.jenkins_slave_single
-parameters:
-  kubernetes:
-    control:
-      service:
-        jenkins_slave02:
-          create: true
-          service: slave02
-          namespace: drivetrain
-          apiVersion: extensions/v1beta1
-          kind: Deployment
-          replicas: 1
-          container:
-            jenkins-slave:
-              image: ${_param:docker_image_jenkins_slave}
-              image_pull_policy: IfNotPresent
-              variables:
-                - name: JENKINS_URL
-                  value: ${_param:jenkins_master_url}
-                - name: JENKINS_AGENT_NAME
-                  value: slave02
-                - name: JENKINS_UPDATE_SLAVE
-                  value: "'true'"
-                - name: JENKINS_LOGIN
-                  value: ${_param:jenkins_client_user}
-                - name: JENKINS_PASSWORD
-                  value: ${_param:jenkins_client_password}
-                - name: JAVA_OPTS
-                  value: "-Dhttp.proxyHost=${_param:kdt_http_proxy} -Dhttp.nonProxyHosts=|jenkins ${_param:jenkins_slave_extra_opts}"
-                - name: https_proxy
-                  value: ${_param:kdt_https_proxy}
-                - name: http_proxy
-                  value: ${_param:kdt_http_proxy}
-                - name: no_proxy
-                  value: ${_param:kdt_no_proxy}
-              volumes:
-                - name: jenkins-slave02
-                  mount: /srv/volumes/jenkins_slaves/slave02
-                  read_only: false
-                - name: docker-sock-volume02
-                  mount: /var/run/docker.sock
-                  read_only: false
-                - name: entropy-volume02
-                  mount: /dev/random
-                  read_only: true
-          volume:
-            jenkins-slave02:
-              type: glusterfs
-              endpoints: glusterfs
-              path: jenkins_slave02
-              read_only: false
-            docker-sock-volume02:
-              type: hostPath
-              path: /var/run/docker.sock
-            entropy-volume02:
-              type: hostPath
-              path: /dev/urandom
-        jenkins_slave03:
-          create: true
-          service: slave03
-          namespace: drivetrain
-          apiVersion: extensions/v1beta1
-          kind: Deployment
-          replicas: 1
-          container:
-            jenkins-slave:
-              image: ${_param:docker_image_jenkins_slave}
-              image_pull_policy: IfNotPresent
-              variables:
-              - name: JENKINS_URL
-                value: ${_param:jenkins_master_url}
-              - name: JENKINS_AGENT_NAME
-                value: slave03
-              - name: JENKINS_UPDATE_SLAVE
-                value: "'true'"
-              - name: JENKINS_LOGIN
-                value: ${_param:jenkins_client_user}
-              - name: JENKINS_PASSWORD
-                value: ${_param:jenkins_client_password}
-              - name: JAVA_OPTS
-                value: "-Dhttp.proxyHost=${_param:kdt_http_proxy} -Dhttp.nonProxyHosts=|jenkins ${_param:jenkins_slave_extra_opts}"
-              - name: https_proxy
-                value: ${_param:kdt_https_proxy}
-              - name: http_proxy
-                value: ${_param:kdt_http_proxy}
-              - name: no_proxy
-                value: ${_param:kdt_no_proxy}
-              volumes:
-              - name: jenkins-slave03
-                mount: /srv/volumes/jenkins_slaves/slave03
-                read_only: false
-              - name: docker-sock-volume03
-                mount: /var/run/docker.sock
-                read_only: false
-              - name: entropy-volume03
-                mount: /dev/random
-                read_only: true
-          volume:
-            jenkins-slave03:
-              type: glusterfs
-              endpoints: glusterfs
-              path: jenkins_slave03
-              read_only: false
-            docker-sock-volume03:
-              type: hostPath
-              path: /var/run/docker.sock
-            entropy-volume03:
-              type: hostPath
-              path: /dev/urandom
+- system.kubernetes.control.services.drivetrain.jenkins_jnlp_slave_multi
\ No newline at end of file
diff --git a/kubernetes/control/services/drivetrain/jenkins_slave_single.yml b/kubernetes/control/services/drivetrain/jenkins_slave_single.yml
index ee327dd..b4fdfe9 100644
--- a/kubernetes/control/services/drivetrain/jenkins_slave_single.yml
+++ b/kubernetes/control/services/drivetrain/jenkins_slave_single.yml
@@ -1,59 +1,3 @@
-parameters:
-  _param:
-    jenkins_slave_extra_opts: ""
-    jenkins_master_url: http://jenkins:8080/jenkins
-  kubernetes:
-    control:
-      service:
-        jenkins_slave01:
-          create: true
-          service: slave01
-          namespace: drivetrain
-          apiVersion: extensions/v1beta1
-          kind: Deployment
-          replicas: 1
-          container:
-            jenkins-slave:
-              image: ${_param:docker_image_jenkins_slave}
-              image_pull_policy: IfNotPresent
-              variables:
-                - name: JENKINS_URL
-                  value: ${_param:jenkins_master_url}
-                - name: JENKINS_AGENT_NAME
-                  value: slave01
-                - name: JENKINS_UPDATE_SLAVE
-                  value: "'true'"
-                - name: JENKINS_LOGIN
-                  value: ${_param:jenkins_client_user}
-                - name: JENKINS_PASSWORD
-                  value: ${_param:jenkins_client_password}
-                - name: JAVA_OPTS
-                  value: "-Dhttp.proxyHost=${_param:kdt_http_proxy} -Dhttp.nonProxyHosts=|jenkins ${_param:jenkins_slave_extra_opts}"
-                - name: https_proxy
-                  value: ${_param:kdt_https_proxy}
-                - name: http_proxy
-                  value: ${_param:kdt_http_proxy}
-                - name: no_proxy
-                  value: ${_param:kdt_no_proxy}
-              volumes:
-                - name: jenkins-slave01
-                  mount: /srv/volumes/jenkins_slaves/slave01
-                  read_only: false
-                - name: docker-sock-volume
-                  mount: /var/run/docker.sock
-                  read_only: false
-                - name: entropy-volume
-                  mount: /dev/random
-                  read_only: true
-          volume:
-            jenkins-slave01:
-              type: glusterfs
-              endpoints: glusterfs
-              path: jenkins_slave01
-              read_only: false
-            docker-sock-volume:
-              type: hostPath
-              path: /var/run/docker.sock
-            entropy-volume:
-              type: hostPath
-              path: /dev/urandom
+# Remove this file after CC update
+classes:
+- system.kubernetes.control.services.drivetrain.jenkins_jnlp_slave_single
\ No newline at end of file
diff --git a/kubernetes/control/services/drivetrain/jenkins_ssh_slave_multi.yml b/kubernetes/control/services/drivetrain/jenkins_ssh_slave_multi.yml
new file mode 100644
index 0000000..af7a579
--- /dev/null
+++ b/kubernetes/control/services/drivetrain/jenkins_ssh_slave_multi.yml
@@ -0,0 +1,125 @@
+classes:
+- system.kubernetes.control.services.drivetrain.jenkins_ssh_slave_single
+parameters:
+  kubernetes:
+    control:
+      service:
+        jenkins_slave02:
+          create: true
+          service: slave02
+          namespace: drivetrain
+          apiVersion: extensions/v1beta1
+          kind: Deployment
+          replicas: 1
+          container:
+            jenkins-slave:
+              image: ${_param:docker_image_jenkins_ssh_slave}
+              image_pull_policy: IfNotPresent
+              variables:
+                - name: JENKINS_URL
+                  value: ${_param:jenkins_master_url}
+                - name: JENKINS_AGENT_NAME
+                  value: slave02
+                - name: JENKINS_UPDATE_SLAVE
+                  value: "'true'"
+                - name: JENKINS_LOGIN
+                  value: ${_param:jenkins_client_user}
+                - name: JENKINS_PASSWORD
+                  value: ${_param:jenkins_client_password}
+                - name: JAVA_OPTS
+                  value: "-Dhttp.proxyHost=${_param:kdt_http_proxy} -Dhttp.nonProxyHosts=|jenkins ${_param:jenkins_slave_extra_opts}"
+                - name: https_proxy
+                  value: ${_param:kdt_https_proxy}
+                - name: http_proxy
+                  value: ${_param:kdt_http_proxy}
+                - name: no_proxy
+                  value: ${_param:kdt_no_proxy}
+              volumes:
+                - name: jenkins-slave02
+                  mount: /srv/volumes/jenkins_slaves/slave02
+                  read_only: false
+                - name: docker-sock-volume02
+                  mount: /var/run/docker.sock
+                  read_only: false
+                - name: entropy-volume02
+                  mount: /dev/random
+                  read_only: true
+          volume:
+            jenkins-slave02:
+              type: glusterfs
+              endpoints: glusterfs
+              path: jenkins_slave02
+              read_only: false
+            docker-sock-volume02:
+              type: hostPath
+              path: /var/run/docker.sock
+            entropy-volume02:
+              type: hostPath
+              path: /dev/urandom
+        jenkins_slave03:
+          create: true
+          service: slave03
+          namespace: drivetrain
+          apiVersion: extensions/v1beta1
+          kind: Deployment
+          replicas: 1
+          container:
+            jenkins-slave:
+              image: ${_param:docker_image_jenkins_jnlp_slave}
+              image_pull_policy: IfNotPresent
+              variables:
+              - name: JENKINS_URL
+                value: ${_param:jenkins_master_url}
+              - name: JENKINS_AGENT_NAME
+                value: slave03
+              - name: JENKINS_UPDATE_SLAVE
+                value: "'true'"
+              - name: JENKINS_LOGIN
+                value: ${_param:jenkins_client_user}
+              - name: JENKINS_PASSWORD
+                value: ${_param:jenkins_client_password}
+              - name: JAVA_OPTS
+                value: "-Dhttp.proxyHost=${_param:kdt_http_proxy} -Dhttp.nonProxyHosts=|jenkins ${_param:jenkins_slave_extra_opts}"
+              - name: https_proxy
+                value: ${_param:kdt_https_proxy}
+              - name: http_proxy
+                value: ${_param:kdt_http_proxy}
+              - name: no_proxy
+                value: ${_param:kdt_no_proxy}
+              volumes:
+              - name: jenkins-slave03
+                mount: /srv/volumes/jenkins_slaves/slave03
+                read_only: false
+              - name: docker-sock-volume03
+                mount: /var/run/docker.sock
+                read_only: false
+              - name: entropy-volume03
+                mount: /dev/random
+                read_only: true
+          volume:
+            jenkins-slave03:
+              type: glusterfs
+              endpoints: glusterfs
+              path: jenkins_slave03
+              read_only: false
+            docker-sock-volume03:
+              type: hostPath
+              path: /var/run/docker.sock
+            entropy-volume03:
+              type: hostPath
+              path: /dev/urandom
+  jenkins:
+    client:
+      node:
+        slave02:
+          launcher:
+            type: ssh
+            host: jenkins_slave02
+            port: 22
+            credentials: ssh_slave
+        slave03:
+          launcher:
+            type: ssh
+            host: jenkins_slave03
+            port: 22
+            credentials: ssh_slave
diff --git a/kubernetes/control/services/drivetrain/jenkins_ssh_slave_single.yml b/kubernetes/control/services/drivetrain/jenkins_ssh_slave_single.yml
new file mode 100644
index 0000000..f122b8c
--- /dev/null
+++ b/kubernetes/control/services/drivetrain/jenkins_ssh_slave_single.yml
@@ -0,0 +1,63 @@
+parameters:
+  _param:
+  kubernetes:
+    pool:
+      images:
+        - ${_param:docker_image_jenkins_ssh_slave}
+    control:
+      service:
+        jenkins_slave01:
+          create: true
+          service: slave01
+          namespace: drivetrain
+          apiVersion: extensions/v1beta1
+          kind: Deployment
+          replicas: 1
+          container:
+            jenkins-slave:
+              image: ${_param:docker_image_jenkins_ssh_slave}
+              image_pull_policy: IfNotPresent
+              variables:
+                - name: JENKINS_SLAVE_SSH_PUBKEY
+                  value: ${_param:jenkins_admin_public_key}
+                - name: https_proxy
+                  value: ${_param:kdt_https_proxy}
+                - name: http_proxy
+                  value: ${_param:kdt_http_proxy}
+                - name: no_proxy
+                  value: ${_param:kdt_no_proxy}
+              volumes:
+                - name: jenkins-slave01
+                  mount: /srv/volumes/jenkins_slaves/slave01
+                  read_only: false
+                - name: docker-sock-volume
+                  mount: /var/run/docker.sock
+                  read_only: false
+                - name: entropy-volume
+                  mount: /dev/random
+                  read_only: true
+          volume:
+            jenkins-slave01:
+              type: glusterfs
+              endpoints: glusterfs
+              path: jenkins_slave01
+              read_only: false
+            docker-sock-volume:
+              type: hostPath
+              path: /var/run/docker.sock
+            entropy-volume:
+              type: hostPath
+              path: /dev/urandom
+  jenkins:
+    client:
+      node:
+        slave01:
+          launcher:
+            type: ssh
+            host: jenkins_slave01
+            port: 22
+            credentials: ssh_slave
+      credential:
+        ssh_slave:
+          username: jenkins
+          key: ${_param:jenkins_admin_private_key}