Merge "Add new startFirstNode function"
diff --git a/src/com/mirantis/mcp/Validate.groovy b/src/com/mirantis/mcp/Validate.groovy
index 1947c76..4d74114 100644
--- a/src/com/mirantis/mcp/Validate.groovy
+++ b/src/com/mirantis/mcp/Validate.groovy
@@ -794,9 +794,9 @@
     def salt = new com.mirantis.mk.Salt()
     def xml_file = "${output_filename}.xml"
     def html_file = "${output_filename}.html"
-    salt.cmdRun(master, target, "docker exec ${container_name} rally task start ${scenarios_path}")
-    salt.cmdRun(master, target, "docker exec ${container_name} rally task report --out ${html_file}")
-    salt.cmdRun(master, target, "docker exec ${container_name} rally task report --junit --out ${xml_file}")
+    salt.cmdRun(master, target, "docker exec ${container_name} rally task start ${scenarios_path}", false)
+    salt.cmdRun(master, target, "docker exec ${container_name} rally task report --out /home/rally/${html_file}", false)
+    salt.cmdRun(master, target, "docker exec ${container_name} rally task report --junit --out /home/rally/${xml_file}", false)
     salt.cmdRun(master, target, "docker cp ${container_name}:/home/rally/${xml_file} ${output_dir}")
     salt.cmdRun(master, target, "docker cp ${container_name}:/home/rally/${html_file} ${output_dir}")
 }
diff --git a/src/com/mirantis/mk/Artifactory.groovy b/src/com/mirantis/mk/Artifactory.groovy
index 73ed80f..a840956 100644
--- a/src/com/mirantis/mk/Artifactory.groovy
+++ b/src/com/mirantis/mk/Artifactory.groovy
@@ -9,14 +9,15 @@
 /**
  * Make generic call using Artifactory REST API and return parsed JSON
  *
- * @param art   Artifactory connection object
- * @param uri   URI which will be appended to artifactory server base URL
+ * @param art       Artifactory connection object
+ * @param uri       URI which will be appended to artifactory server base URL
  * @param method    HTTP method to use (default GET)
  * @param data      JSON data to POST or PUT
  * @param headers   Map of additional request headers
+ * @param prefix    Default prefix "/api"
  */
-def restCall(art, uri, method = 'GET', data = null, headers = [:]) {
-    def connection = new URL("${art.url}/api${uri}").openConnection()
+def restCall(art, uri, method = 'GET', data = null, headers = [:], prefix = '/api') {
+    def connection = new URL("${art.url}${prefix}${uri}").openConnection()
     if (method != 'GET') {
         connection.setRequestMethod(method)
     }
@@ -84,6 +85,18 @@
 }
 
 /**
+ * Make PUT request using Artifactory REST API for helm charts
+ *
+ * @param art       Artifactory connection object
+ * @param uri       URI which will be appended to artifactory server base URL
+ * @param data      JSON Data to PUT
+ * @param prefix    Default prefix "/api" (empty values should be for this way)
+ */
+def restPut2(art, uri, prefix,  data = null) {
+    return restCall(art, uri, 'PUT', data, ['Accept': '*/*'], prefix)
+}
+
+/**
  * Make DELETE request using Artifactory REST API
  *
  * @param art   Artifactory connection object
@@ -107,9 +120,9 @@
 /**
  * Query artifacts by properties
  *
- * @param art   Artifactory connection object
+ * @param art           Artifactory connection object
  * @param properties    String or list of properties in key=value format
- * @param repo  Optional repository to search in
+ * @param repo          Optional repository to search in
  */
 def findArtifactByProperties(art, properties, repo) {
     query = parseProperties(properties)
@@ -444,7 +457,7 @@
  * @param chartName     Chart name
  */
 def publishArtifactoryHelmChart(art, repoName, chartName){
-    return restPut(art, "/repositories/${repoName}", "${chartName}")
+    return restPut2(art, "/${repoName}", "${chartName}")
 }
 
 /**