Cleanup ssh and git functions
Change-Id: Ic6a3f5c484167275dbd449a5ff7246016053eadf
diff --git a/src/com/mirantis/mk/Ssh.groovy b/src/com/mirantis/mk/Ssh.groovy
new file mode 100644
index 0000000..4526d6d
--- /dev/null
+++ b/src/com/mirantis/mk/Ssh.groovy
@@ -0,0 +1,82 @@
+package com.mirantis.mk
+
+/**
+ *
+ * SSH functions
+ *
+ */
+
+/**
+ * Ensure entry in SSH known hosts
+ *
+ * @param url url of remote host
+ */
+def ensureKnownHosts(url) {
+ def hostArray = getKnownHost(url)
+ sh "test -f ~/.ssh/known_hosts && grep ${hostArray[0]} ~/.ssh/known_hosts || ssh-keyscan -p ${hostArray[1]} ${hostArray[0]} >> ~/.ssh/known_hosts"
+}
+
+@NonCPS
+def getKnownHost(url){
+ // test for git@github.com:organization/repository like URLs
+ def p = ~/.+@(.+\..+)\:{1}.*/
+ def result = p.matcher(url)
+ def host = ""
+ if (result.matches()) {
+ host = result.group(1)
+ port = 22
+ } else {
+ parsed = new URI(url)
+ host = parsed.host
+ port = parsed.port && parsed.port > 0 ? parsed.port: 22
+ }
+ return [host,port]
+}
+
+/**
+ * Execute command with ssh-agent
+ *
+ * @param cmd Command to execute
+ */
+def runSshAgentCommand(cmd) {
+ // if file exists, then we started ssh-agent
+ if (fileExists("$HOME/.ssh/ssh-agent.sh")) {
+ sh(". ~/.ssh/ssh-agent.sh && ${cmd}")
+ } else {
+ // we didn't start ssh-agent in prepareSshAgentKey() because some ssh-agent
+ // is running. Let's re-use already running agent and re-construct
+ // * SSH_AUTH_SOCK
+ // * SSH_AGENT_PID
+ sh """
+ export SSH_AUTH_SOCK=`find /tmp/ -type s -name agent.\\* 2> /dev/null | grep '/tmp/ssh-.*/agent.*' | head -n 1`
+ export SSH_AGENT_PID=`echo \${SSH_AUTH_SOCK} | cut -d. -f2`
+ ${cmd}
+ """
+ }
+}
+
+/**
+ * Execute command with ssh-agent (shortcut for runSshAgentCommand)
+ *
+ * @param cmd Command to execute
+ */
+def agentSh(cmd) {
+ runSshAgentCommand(cmd)
+}
+
+/**
+ * Setup ssh agent and add private key
+ *
+ * @param credentialsId Jenkins credentials name to lookup private key
+ */
+def prepareSshAgentKey(credentialsId) {
+ def common = new com.mirantis.mk.Common()
+ c = common.getSshCredentials(credentialsId)
+ // create ~/.ssh and delete file ssh-agent.sh which can be stale
+ sh('mkdir -p -m 700 ~/.ssh && rm -f ~/.ssh/ssh-agent.sh')
+ sh('pgrep -l -u $USER -f ssh-agent\$ >/dev/null || ssh-agent|grep -v "Agent pid" > ~/.ssh/ssh-agent.sh')
+ sh("set +x; echo '${c.getPrivateKey()}' > ~/.ssh/id_rsa_${credentialsId} && chmod 600 ~/.ssh/id_rsa_${credentialsId}; set -x")
+ runSshAgentCommand("ssh-add ~/.ssh/id_rsa_${credentialsId}")
+}
+
+return this;