Merge "Add readYaml2 common func"
diff --git a/src/com/mirantis/mk/Ceph.groovy b/src/com/mirantis/mk/Ceph.groovy
index c959810..8660233 100644
--- a/src/com/mirantis/mk/Ceph.groovy
+++ b/src/com/mirantis/mk/Ceph.groovy
@@ -93,7 +93,7 @@
         }
     }
     if (lvm_enabled && type != 'lockbox') {
-        salt.cmdRun(master, target, "ceph-volume lvm zap ${partition_uuid} --destroy")
+        salt.cmdRun(master, target, "ceph-volume lvm zap /dev/disk/by-partuuid/${partition_uuid} --destroy")
     } else if (dev != '') {
         salt.cmdRun(master, target, "parted ${dev} rm ${part_id}")
     } else {
diff --git a/src/com/mirantis/mk/DockerImageScanner.groovy b/src/com/mirantis/mk/DockerImageScanner.groovy
index ff4a73e..94e0dea 100644
--- a/src/com/mirantis/mk/DockerImageScanner.groovy
+++ b/src/com/mirantis/mk/DockerImageScanner.groovy
@@ -185,6 +185,9 @@
     imageDict.each{
         image ->
             def image_key = image.key.replaceAll(/(^[a-z0-9-.]+.mirantis.(net|com)\/|:.*$)/, '')
+            // Temporary exclude kibana images, due to false positive in PRODX-5468
+            // Remove once RE-193 ticket is resolved
+            if (image_key.startsWith('stacklight/kibana')) { return }
             jira_summary = "[${image_key}] Found CVEs in Docker image"
             jira_description = "{noformat}${image.key}\\n"
             image.value.each{
diff --git a/src/com/mirantis/mk/Gerrit.groovy b/src/com/mirantis/mk/Gerrit.groovy
index c33dc5e..88da957 100644
--- a/src/com/mirantis/mk/Gerrit.groovy
+++ b/src/com/mirantis/mk/Gerrit.groovy
@@ -173,21 +173,22 @@
  * Return gerrit change object from gerrit API
  * @param gerritName gerrit user name (usually GERRIT_NAME property)
  * @param gerritHost gerrit host (usually GERRIT_HOST property)
+ * @param gerritPort gerrit port (usually GERRIT_PORT property, default 29418)
  * @param gerritChangeNumber gerrit change number (usually GERRIT_CHANGE_NUMBER property)
  * @param credentialsId jenkins credentials id for gerrit
  * @param includeCurrentPatchset do you want to include current (last) patchset
  * @return gerrit change object
  */
-def getGerritChange(gerritName, gerritHost, gerritChangeNumber, credentialsId, includeCurrentPatchset = false){
+def getGerritChange(gerritName, gerritHost, gerritChangeNumber, credentialsId, includeCurrentPatchset = false, gerritPort = '29418'){
     def common = new com.mirantis.mk.Common()
     def ssh = new com.mirantis.mk.Ssh()
     ssh.prepareSshAgentKey(credentialsId)
-    ssh.ensureKnownHosts(gerritHost)
+    ssh.ensureKnownHosts("${gerritHost}:${gerritPort}")
     def curPatchset = "";
     if(includeCurrentPatchset){
         curPatchset = "--current-patch-set"
     }
-    return common.parseJSON(ssh.agentSh(String.format("ssh -p 29418 %s@%s gerrit query ${curPatchset} --format=JSON change:%s", gerritName, gerritHost, gerritChangeNumber)))
+    return common.parseJSON(ssh.agentSh(String.format("ssh -p %s %s@%s gerrit query ${curPatchset} --format=JSON change:%s", gerritPort, gerritName, gerritHost, gerritChangeNumber)))
 }
 
 /**
diff --git a/src/com/mirantis/mk/Git.groovy b/src/com/mirantis/mk/Git.groovy
index f699b3e..d724b8f 100644
--- a/src/com/mirantis/mk/Git.groovy
+++ b/src/com/mirantis/mk/Git.groovy
@@ -129,6 +129,12 @@
     } else {
         gitOpts = ''
     }
+    def gitEnv = [
+        "GIT_AUTHOR_NAME=${gitName}",
+        "GIT_AUTHOR_EMAIL=${gitEmail}",
+        "GIT_COMMITTER_NAME=${gitName}",
+        "GIT_COMMITTER_EMAIL=${gitEmail}",
+    ]
     dir(path) {
         sh "git config ${global_arg} user.email '${gitEmail}'"
         sh "git config ${global_arg} user.name '${gitName}'"
@@ -137,10 +143,12 @@
             script: 'git add -A',
             returnStdout: true
         ).trim()
-        git_cmd = sh(
-            script: "git commit ${gitOpts} -m '${message}'",
-            returnStdout: true
-        ).trim()
+        withEnv(gitEnv) {
+            git_cmd = sh(
+                script: "git commit ${gitOpts} -m '${message}'",
+                returnStdout: true
+            ).trim()
+        }
     }
     return git_cmd
 }
diff --git a/src/com/mirantis/mk/KaasUtils.groovy b/src/com/mirantis/mk/KaasUtils.groovy
index e558131..2109dcd 100644
--- a/src/com/mirantis/mk/KaasUtils.groovy
+++ b/src/com/mirantis/mk/KaasUtils.groovy
@@ -113,11 +113,13 @@
 
     // Available triggers and its sane defaults
     def siTestsRefspec = env.SI_TESTS_REFSPEC ?: 'master'
+    def siTestsFeatureFlags = env.SI_TESTS_FEATURE_FLAGS ?: ''
     def siPipelinesRefspec = env.SI_PIPELINES_REFSPEC ?: 'master'
     def siTestsDockerImage = env.SI_TESTS_DOCKER_IMAGE ?: 'docker-dev-kaas-local.docker.mirantis.net/mirantis/kaas/si-test:master'
     def commitMsg = env.GERRIT_CHANGE_COMMIT_MESSAGE ? new String(env.GERRIT_CHANGE_COMMIT_MESSAGE.decodeBase64()) : ''
 
     def siTestMatches = (commitMsg =~ /(\[si-tests-ref\s*refs\/changes\/.*?\])/)
+    def siFeatureFlagsMatches = (commitMsg =~ /(\[si-feature-flags\s.*?\])/)
     def siPipelinesMatches = (commitMsg =~ /(\[si-pipelines-ref\s*refs\/changes\/.*?\])/)
 
     if (siTestMatches.size() > 0) {
@@ -125,6 +127,9 @@
         siTestsDockerImage = "docker-dev-local.docker.mirantis.net/review/" +
             "kaas-si-test-${siTestsRefspec.split('/')[-2]}:${siTestsRefspec.split('/')[-1]}"
     }
+    if (siFeatureFlagsMatches.size() > 0) {
+        siTestsFeatureFlags = siFeatureFlagsMatches[0][0].split('si-feature-flags')[1].replaceAll('[\\[\\]]', '').trim()
+    }
     if (siPipelinesMatches.size() > 0) {
         siPipelinesRefspec = siPipelinesMatches[0][0].split('si-pipelines-ref')[1].replaceAll('[\\[\\]]', '').trim()
     }
@@ -133,8 +138,9 @@
         kaas/si-pipelines will be fetched from: ${siPipelinesRefspec}
         kaas/si-tests will be fetched from: ${siTestsRefspec}
         kaas/si-tests as dockerImage will be fetched from: ${siTestsDockerImage}
+        kaas/si-tests additional feature flags applied: [${siTestsFeatureFlags}]
         Keywords: https://gerrit.mcp.mirantis.com/plugins/gitiles/kaas/core/+/refs/heads/master/.git-message-template#59""")
-    return [siTests: siTestsRefspec, siPipelines: siPipelinesRefspec, siTestsDockerImage: siTestsDockerImage]
+    return [siTests: siTestsRefspec, siFeatureFlags: siTestsFeatureFlags, siPipelines: siPipelinesRefspec, siTestsDockerImage: siTestsDockerImage]
 }
 
 /**
@@ -195,12 +201,11 @@
     def coreRefspec = checkCustomCoreRefspec()
 
     def jobs = [:]
-    // TODO manage SI_TESTS_FEATURE_FLAGS through checkCustomSIRefspec()
-    //string(name: "SI_TESTS_FEATURE_FLAGS", value: env.SI_TESTS_FEATURE_FLAGS),
     def parameters = [
         string(name: 'GERRIT_REFSPEC', value: coreRefspec.core),
         string(name: 'KAAS_PIPELINE_REFSPEC', value: coreRefspec.corePipelines),
         string(name: 'SI_TESTS_REFSPEC', value: siRefspec.siTests),
+        string(name: 'SI_TESTS_FEATURE_FLAGS', value: siRefspec.siFeatureFlags),
         string(name: 'SI_PIPELINES_REFSPEC', value: siRefspec.siPipelines),
         string(name: 'CUSTOM_RELEASE_PATCH_SPEC', value: patchSpec),
         booleanParam(name: 'UPGRADE_MGMT', value: triggers.upgradeMgmtEnabled),
@@ -216,30 +221,32 @@
     jobs["kaas-core-openstack-patched-${component}"] = {
         try {
             common.infoMsg('Deploy: patched KaaS demo with Openstack provider')
-            def job_info = build job: "kaas-testing-core-openstack-workflow-${component}", parameters: parameters, wait: true
-            def build_description = job_info.getDescription()
+            os_job_info = build job: "kaas-testing-core-openstack-workflow-${component}", parameters: parameters, wait: true
+            def build_description = os_job_info.getDescription()
+            def build_result = os_job_info.getResult()
+            jobResults.add(build_result)
+
             if (build_description) {
                 currentBuild.description += build_description
             }
         } finally {
-            def build_result = job_info.getResult()
-            common.infoMsg("Patched KaaS demo with Openstack provider finished with status: ${build_result}")
-            jobResults.add(build_result)
+            common.infoMsg('Patched KaaS demo with Openstack provider finished')
         }
     }
     if (triggers.awsOnDemandDemoEnabled) {
         jobs["kaas-core-aws-patched-${component}"] = {
             try {
                 common.infoMsg('Deploy: patched KaaS demo with AWS provider')
-                def job_info = build job: "kaas-testing-core-aws-workflow-${component}", parameters: parameters, wait: true
-                def build_description = job_info.getDescription()
+                aws_job_info = build job: "kaas-testing-core-aws-workflow-${component}", parameters: parameters, wait: true
+                def build_description = aws_job_info.getDescription()
+                def build_result = aws_job_info.getResult()
+                jobResults.add(build_result)
+
                 if (build_description) {
                     currentBuild.description += build_description
                 }
             } finally {
-                def build_result = job_info.getResult()
-                common.infoMsg("Patched KaaS demo with AWS provider finished with status: ${build_result}")
-                jobResults.add(build_result)
+                common.infoMsg('Patched KaaS demo with AWS provider finished')
             }
         }
     }
diff --git a/src/com/mirantis/mk/Ruby.groovy b/src/com/mirantis/mk/Ruby.groovy
index 8fac324..4681d07 100644
--- a/src/com/mirantis/mk/Ruby.groovy
+++ b/src/com/mirantis/mk/Ruby.groovy
@@ -11,7 +11,7 @@
 def ensureRubyEnv(rubyVersion="2.4.1"){
     if (!fileExists("/var/lib/jenkins/.rbenv/versions/${rubyVersion}/bin/ruby")){
         //XXX: patch ruby-build because debian package is quite old
-        sh "git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build || git -C ~/.rbenv/plugins/ruby-build pull"
+        sh "git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build || git -C ~/.rbenv/plugins/ruby-build pull origin master"
         sh "rbenv install ${rubyVersion} -sv";
     }
     sh "rbenv local ${rubyVersion};rbenv exec gem update --system"