Merge "Regenerate index.yaml in binary repository during a promotion"
diff --git a/src/com/mirantis/mcp/MCPArtifactory.groovy b/src/com/mirantis/mcp/MCPArtifactory.groovy
index cc30f8c..6f3780a 100644
--- a/src/com/mirantis/mcp/MCPArtifactory.groovy
+++ b/src/com/mirantis/mcp/MCPArtifactory.groovy
@@ -190,6 +190,31 @@
 }
 
 /**
+ * Get checksums of artifact
+ *
+ * @param artifactoryUrl   String, an URL ofArtifactory repo
+ * @param repoName         Artifact repository name
+ * @param artifactName     Artifactory object name
+ * @param checksumType     Type of checksum (default md5)
+ */
+
+def getArtifactChecksum(artifactoryUrl, repoName, artifactName, checksumType = 'md5'){
+    def url = "${artifactoryUrl}/api/storage/${repoName}/${artifactName}"
+    withCredentials([
+            [$class          : 'UsernamePasswordMultiBinding',
+             credentialsId   : 'artifactory',
+             passwordVariable: 'ARTIFACTORY_PASSWORD',
+             usernameVariable: 'ARTIFACTORY_LOGIN']
+    ]) {
+        def result = sh(script: "bash -c \"curl -X GET -u ${ARTIFACTORY_LOGIN}:${ARTIFACTORY_PASSWORD} \'${url}\'\"",
+                returnStdout: true).trim()
+    }
+
+    def properties = new groovy.json.JsonSlurperClassic().parseText(result)
+    return properties['checksums'][checksumType]
+}
+
+/**
  * Check if image with tag exist by provided path
  * Returns true or false
  *
@@ -199,7 +224,7 @@
  * @param artifactoryCreds String, artifactory creds to use. Optional, default is 'artifactory'
  */
 def imageExists(String artifactoryURL, String imageRepo, String tag, String artifactoryCreds = 'artifactory') {
-    def url = artifactoryURL + '/v2/' + imageRepo + '/manifest/' + tag
+    def url = artifactoryURL + '/v2/' + imageRepo + '/manifests/' + tag
     def result
     withCredentials([
             [$class          : 'UsernamePasswordMultiBinding',
diff --git a/src/com/mirantis/mk/Artifactory.groovy b/src/com/mirantis/mk/Artifactory.groovy
index 84eb143..824ba4f 100644
--- a/src/com/mirantis/mk/Artifactory.groovy
+++ b/src/com/mirantis/mk/Artifactory.groovy
@@ -429,6 +429,22 @@
 }
 
 /**
+ * Get checksums of artifact
+ *
+ * @param art           Artifactory connection object
+ * @param artifactName  Artifactory object name
+ * @param checksum      Type of checksum (default md5)
+ * @param repoName      Artifact repository name
+ */
+
+def getArtifactChecksum(art, repoName, artifactName, checksum = 'md5'){
+    def artifactory = new com.mirantis.mk.Artifactory()
+    def uri = "/storage/${repoName}/${artifactName}"
+    def output = artifactory.restGet(art, uri)
+    return output['checksums']["${checksum}"]
+}
+
+/**
  * Create Helm repo for Artifactory
  *
  * @param art           Artifactory connection object
diff --git a/src/com/mirantis/mk/Workflow.groovy b/src/com/mirantis/mk/Workflow.groovy
index 3a58bd3..596320b 100644
--- a/src/com/mirantis/mk/Workflow.groovy
+++ b/src/com/mirantis/mk/Workflow.groovy
@@ -54,9 +54,13 @@
             if (!global_variables[param.value.get_variable_from_url]) {
                 global_variables[param.value.get_variable_from_url] = env[param.value.get_variable_from_url] ?: ''
             }
-            variable_content = http.restGet(base, global_variables[param.value.get_variable_from_url])
-            parameters.add([$class: "${param.value.type}", name: "${param.key}", value: variable_content])
-            println "${param.key}: <${param.value.type}> ${variable_content}"
+            if (global_variables[param.value.get_variable_from_url]) {
+                variable_content = http.restGet(base, global_variables[param.value.get_variable_from_url])
+                parameters.add([$class: "${param.value.type}", name: "${param.key}", value: variable_content])
+                println "${param.key}: <${param.value.type}> ${variable_content}"
+            } else {
+                println "${param.key} is empty, skipping get_variable_from_url"
+            }
         } else if (param.value.containsKey('use_template')) {
             template = engine.createTemplate(param.value.use_template).make(global_variables)
             parameters.add([$class: "${param.value.type}", name: "${param.key}", value: template.toString()])
@@ -102,6 +106,7 @@
         } else {
             // Warning: no artifact with expected name
             println "Artifact ${artifact.value} for ${artifact.key} not found in the build results ${build_url}, found the following artifacts:\n${job_artifacts}"
+            global_variables[artifact.key] = ''
         }
     }
 }