Merge "[CVP,master] Replace hardcode in runCVPrally method"
diff --git a/src/com/mirantis/mcp/Common.groovy b/src/com/mirantis/mcp/Common.groovy
index df3ef30..b83a714 100644
--- a/src/com/mirantis/mcp/Common.groovy
+++ b/src/com/mirantis/mcp/Common.groovy
@@ -1,10 +1,12 @@
 package com.mirantis.mcp
 
+import static org.yaml.snakeyaml.DumperOptions.FlowStyle.BLOCK
 import java.util.zip.GZIPInputStream
 import java.util.zip.GZIPOutputStream
 
 @Grab(group='org.yaml', module='snakeyaml', version='1.17')
 import org.yaml.snakeyaml.Yaml
+import org.yaml.snakeyaml.DumperOptions
 
 /**
  * https://issues.jenkins-ci.org/browse/JENKINS-26481
@@ -53,7 +55,10 @@
  */
 @NonCPS
 def dumpYAML(Map map) {
-  def yaml = new Yaml()
+  DumperOptions options = new DumperOptions()
+  options.setPrettyFlow(true)
+  options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK)
+  def yaml = new Yaml(options)
   return yaml.dump(map)
 }
 
diff --git a/src/com/mirantis/mcp/Validate.groovy b/src/com/mirantis/mcp/Validate.groovy
index a1079ca..d67cd96 100644
--- a/src/com/mirantis/mcp/Validate.groovy
+++ b/src/com/mirantis/mcp/Validate.groovy
@@ -475,10 +475,9 @@
  *
  */
 def runRallyTests(
-        platform, scenarios = '',
-        sl_scenarios = '', tasks_args_file = '',
-        db_connection_str = '', tags = [],
-        trends = false, skip_list = ''
+        platform, scenarios = '', sl_scenarios = '',
+        tasks_args_file = '', db_connection_str = '', tags = [],
+        trends = false, skip_list = '', generateReport = true
     ) {
 
     def dest_folder = '/home/rally'
@@ -509,20 +508,25 @@
     def cmd_rally_start
     def cmd_rally_stacklight
     def cmd_rally_task_args = tasks_args_file ?: 'job-params-light.yaml'
-    def cmd_rally_report = 'rally task export ' +
-        '--uuid $(rally task list --uuids-only --status finished) ' +
-        "--type junit-xml --to ${resultsDir}/report-rally.xml; " +
-        'rally task report --uuid $(rally task list --uuids-only --status finished) ' +
-        "--out ${resultsDir}/report-rally.html"
+    def cmd_rally_report = ''
     def cmd_filter_tags = ''
     def trends_limit = 20
 
+    // generate html report if required
+    if (generateReport) {
+        cmd_rally_report = 'rally task export ' +
+            '--uuid $(rally task list --uuids-only --status finished) ' +
+            "--type junit-xml --to ${resultsDir}/report-rally.xml; " +
+            'rally task report --uuid $(rally task list --uuids-only --status finished) ' +
+            "--out ${resultsDir}/report-rally.html; "
+    }
+
     // build rally trends if required
     if (trends && db_connection_str) {
         if (tags) {
             cmd_filter_tags = "--tag " + tags.join(' ')
         }
-        cmd_rally_report += '; rally task trends --tasks ' +
+        cmd_rally_report += 'rally task trends --tasks ' +
             '$(rally task list ' + cmd_filter_tags +
             ' --all-deployments --uuids-only --status finished ' +
             "| head -${trends_limit} ) " +
@@ -611,7 +615,7 @@
         '002_init_rally': cmd_rally_init,
         '003_start_rally': cmd_rally_start ?: "echo no tasks to run",
         '004_start_rally_stacklight': cmd_rally_stacklight ?: "echo no tasks to run",
-        '005_rally_report': cmd_rally_report,
+        '005_rally_report': cmd_rally_report ?: "echo no tasks to run",
     ]
 
     return full_cmd
diff --git a/src/com/mirantis/mk/Debian.groovy b/src/com/mirantis/mk/Debian.groovy
index d6c82db..6bb1f50 100644
--- a/src/com/mirantis/mk/Debian.groovy
+++ b/src/com/mirantis/mk/Debian.groovy
@@ -265,8 +265,8 @@
   common.infoMsg("Running upgrade on ${target}")
 
   salt.runSaltProcessStep(env, target, 'pkg.refresh_db', [], null, true)
-  def cmd = 'export DEBIAN_FRONTEND=noninteractive; apt-get -y -q --allow-downgrades -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\" upgrade;'
-  salt.runSaltProcessStep(env, target, 'cmd.run', [cmd])
+  def cmd = 'export DEBIAN_FRONTEND=noninteractive; apt-get -y -q --allow-downgrades -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\" upgrade'
+  salt.cmdRun(env, target, cmd)
 }
 
 /**
@@ -281,8 +281,8 @@
 
   common.infoMsg("Running dist-upgrade on ${target}")
   salt.runSaltProcessStep(env, target, 'pkg.refresh_db', [], null, true)
-  def cmd = 'export DEBIAN_FRONTEND=noninteractive; apt-get -y -q --allow-downgrades -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\" dist-upgrade;'
-  salt.runSaltProcessStep(env, target, 'cmd.run', [cmd])
+  def cmd = 'export DEBIAN_FRONTEND=noninteractive; apt-get -y -q --allow-downgrades -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\" dist-upgrade'
+  salt.cmdRun(env, target, cmd)
 }
 
 /**
diff --git a/src/com/mirantis/mk/Orchestrate.groovy b/src/com/mirantis/mk/Orchestrate.groovy
index 15de301..2795248 100644
--- a/src/com/mirantis/mk/Orchestrate.groovy
+++ b/src/com/mirantis/mk/Orchestrate.groovy
@@ -876,26 +876,29 @@
     salt.enforceStateWithTest([saltId: master, target: "I@kibana:server:enabled:true ${extra_tgt}", state: 'kibana.server'])
 
     // Check ES health cluster status
-    def pillar = salt.getPillar(master, "I@elasticsearch:client ${extra_tgt}", 'elasticsearch:client:server:host')
+    def pillar = salt.getReturnValues(salt.getPillar(master, "I@elasticsearch:client ${extra_tgt}", 'elasticsearch:client:server:host'))
     def elasticsearch_vip
-    if(!pillar['return'].isEmpty()) {
-        elasticsearch_vip = pillar['return'][0].values()[0]
+    if(pillar) {
+        elasticsearch_vip = pillar
     } else {
         common.errorMsg('[ERROR] Elasticsearch VIP address could not be retrieved')
     }
-    pillar = salt.getPillar(master, "I@elasticsearch:client ${extra_tgt}", 'elasticsearch:client:server:port')
+
+    pillar = salt.getReturnValues(salt.getPillar(master, "I@elasticsearch:client ${extra_tgt}", 'elasticsearch:client:server:port'))
     def elasticsearch_port
-    if(!pillar['return'].isEmpty()) {
-        elasticsearch_port = pillar['return'][0].values()[0]
+    if(pillar) {
+        elasticsearch_port = pillar
     } else {
         common.errorMsg('[ERROR] Elasticsearch VIP port could not be retrieved')
     }
-    pillar = salt.getPillar(master, "I@elasticsearch:client ${extra_tgt}", 'elasticsearch:client:server:scheme')
+
+    pillar = salt.getReturnValues(salt.getPillar(master, "I@elasticsearch:client ${extra_tgt}", 'elasticsearch:client:server:scheme'))
     def elasticsearch_scheme
-    if(!pillar['return'].isEmpty()) {
-        elasticsearch_scheme = pillar['return'][0].values()[0]
+    if(pillar) {
+        elasticsearch_scheme = pillar
+        common.infoMsg("[INFO] Using elasticsearch scheme: ${elasticsearch_scheme}")
     } else {
-        common.infoMsg('No pillar with Elasticsearch server scheme, using http')
+        common.infoMsg('[INFO] No pillar with Elasticsearch server scheme, using scheme: http')
         elasticsearch_scheme = "http"
     }
 
@@ -948,7 +951,7 @@
     salt.enforceState([saltId: master, target: "I@docker:swarm and I@prometheus:server ${extra_tgt}", state: 'prometheus'])
 
     //Configure Remote Collector in Docker Swarm for Openstack deployments
-    if (!common.checkContains('STACK_INSTALL', 'k8s')) {
+    if (salt.testTarget(master, "I@heka:remote_collector ${extra_tgt}")) {
         salt.enforceState([saltId: master, target: "I@docker:swarm and I@prometheus:server ${extra_tgt}", state: 'heka.remote_collector', failOnError: false])
     }
 
diff --git a/src/com/mirantis/mk/Test.groovy b/src/com/mirantis/mk/Test.groovy
index aadeb8a..404c6f8 100644
--- a/src/com/mirantis/mk/Test.groovy
+++ b/src/com/mirantis/mk/Test.groovy
@@ -133,6 +133,7 @@
     def target = config.get('target', 'I@kubernetes:master and ctl01*')
     def status = config.get('status')
     def ctl_target = config.get('ctl_target', 'I@kubernetes:master')
+    def k8s_pool_target = config.get('k8s_pool_target', 'I@kubernetes:pool')
     def results_dir = config.get('results_dir', '/tmp/conformance')
     def artifacts_dir = config.get('artifacts_dir', '_artifacts/')
     def output_file = config.get('output_file', 'conformance.tar')
@@ -142,7 +143,7 @@
     def short_node = locateConformancePod(master, target)
     print("Pod located on $short_node")
 
-    minions = salt.getMinionsSorted(master, ctl_target)
+    minions = salt.getMinionsSorted(master, k8s_pool_target)
     conformance_target = minions.find {it =~ short_node}
 
     if (status == 'NOTEXECUTED') {
@@ -183,12 +184,13 @@
     // Listing defaults
     def master = config.get('master', 'pepperVenv')
     def target = config.get('target', 'I@kubernetes:master and ctl01*')
+    def ctl_target = config.get('ctl_target', 'I@kubernetes:master and ctl01*')
     def pod_path = config.get('pod_path', '/srv/kubernetes/conformance.yml')
     def results_dir = config.get('results_dir', '/tmp/conformance')
     def output_file = config.get('output_file', )
     // End listing defaults
 
-    salt.cmdRun(master, target, "kubectl delete -f ${pod_path}")
+    salt.cmdRun(master, ctl_target, "kubectl delete -f ${pod_path}")
     salt.cmdRun(master, target, "rm -rf ${results_dir}", false)
     salt.cmdRun(master, target, "rm -f ${output_file}", false)
 }