Merge "Small fix for apt_mk_version => mcp_version"
diff --git a/src/com/mirantis/mcp/Validate.groovy b/src/com/mirantis/mcp/Validate.groovy
index a1641b9..48f73a7 100644
--- a/src/com/mirantis/mcp/Validate.groovy
+++ b/src/com/mirantis/mcp/Validate.groovy
@@ -371,7 +371,7 @@
  * @param skip_scenarios    Comma-delimited list of scenarios names to skip
  * @param bundle_file       Bundle name to create
 */
-def bundle_up_scenarios(scenarios_path, skip_scenarios, bundle_file) {
+def bundle_up_scenarios(scenarios_path, skip_scenarios, bundle_file = '' ) {
       def skip_names = ''
       def skip_dirs = ''
       def result = ''
@@ -385,12 +385,17 @@
           }
         }
       }
-      result = "if [ -f ${scenarios_path} ]; then cp ${scenarios_path} ${bundle_file}; " +
+      if (bundle_file != '') {
+        result = "if [ -f ${scenarios_path} ]; then cp ${scenarios_path} ${bundle_file}; " +
           "else " +
           "find -L ${scenarios_path} " + skip_dirs +
           " -name '*.yaml' " + skip_names +
           "-exec cat {} >> ${bundle_file} \\; ; " +
           "sed -i '/---/d' ${bundle_file}; fi; "
+      } else {
+        result = "find -L ${scenarios_path} " + skip_dirs +
+            " -name '*.yaml' " + skip_names
+      }
 
       return result
 }
@@ -430,14 +435,15 @@
     salt.runSaltProcessStep(master, target, 'file.remove', ["${results}"])
     salt.runSaltProcessStep(master, target, 'file.mkdir', ["${results}", "mode=777"])
     if (platform['type'] == 'openstack') {
-      def _pillar = salt.getPillar(master, 'I@keystone:server', 'keystone:server')
+      def _pillar = salt.getPillar(master, 'I@keystone:server', 'keystone')
       def keystone = _pillar['return'][0].values()[0]
       env_vars = ( ['tempest_version=15.0.0',
-          "OS_USERNAME=${keystone.admin_name}",
-          "OS_PASSWORD=${keystone.admin_password}",
-          "OS_TENANT_NAME=${keystone.admin_tenant}",
-          "OS_AUTH_URL=http://${keystone.bind.private_address}:${keystone.bind.private_port}/v2.0",
-          "OS_REGION_NAME=${keystone.region}",
+          "OS_USERNAME=${keystone.server.admin_name}",
+          "OS_PASSWORD=${keystone.server.admin_password}",
+          "OS_TENANT_NAME=${keystone.server.admin_tenant}",
+          "OS_AUTH_URL=http://${keystone.server.bind.private_address}:${keystone.server.bind.private_port}" +
+          "/v${keystone.client.os_client_config.cfgs.root.content.clouds.admin_identity.identity_api_version}",
+          "OS_REGION_NAME=${keystone.server.region}",
           'OS_ENDPOINT_TYPE=admin'] + ext_variables ).join(' -e ')
       cmd_rally_init = 'rally db create; ' +
           'rally deployment create --fromenv --name=existing; ' +
@@ -483,20 +489,26 @@
     } else {
       throw new Exception("Platform ${platform} is not supported yet")
     }
-    cmd_rally_checkout += bundle_up_scenarios(scenarios, skip_list, "scenarios_${platform.type}.yaml")
-    cmd_rally_start = "rally $rally_extra_args task start scenarios_${platform.type}.yaml "
-    if (config_repo != '' ) {
-      switch(tasks_args_file) {
-        case 'none':
-          cmd_rally_task_args = '; '
-          break
-        case '':
-          cmd_rally_task_args = '--task-args-file test_config/job-params-light.yaml; '
-          break
-        default:
-          cmd_rally_task_args = "--task-args-file ${tasks_args_file}; "
+    switch(tasks_args_file) {
+      case 'none':
+        cmd_rally_task_args = '; '
         break
-      }
+      case '':
+        cmd_rally_task_args = '--task-args-file test_config/job-params-light.yaml; '
+        break
+      default:
+        cmd_rally_task_args = "--task-args-file ${tasks_args_file}; "
+      break
+    }
+    if (platform['type'] == 'k8s') {
+      cmd_rally_start = "for task in \\\$(" + bundle_up_scenarios(scenarios, skip_list) +
+          "); do " +
+          "rally $rally_extra_args task start \\\$task ${cmd_rally_task_args}" +
+          "done; "
+    } else {
+      cmd_rally_checkout += bundle_up_scenarios(scenarios, skip_list, "scenarios_${platform.type}.yaml")
+      cmd_rally_start = "rally $rally_extra_args task start " +
+          "scenarios_${platform.type}.yaml ${cmd_rally_task_args}"
     }
     cmd_rally_report= "rally task export --uuid \\\$(rally task list --uuids-only --status finished) " +
         "--type junit-xml --to ${dest_folder}/report-rally.xml; " +
@@ -506,7 +518,7 @@
     full_cmd = 'set -xe; ' + cmd_rally_plugins +
         cmd_rally_init + cmd_rally_checkout +
         'set +e; ' + cmd_rally_start +
-        cmd_rally_task_args + cmd_rally_stacklight +
+        cmd_rally_stacklight +
         cmd_rally_report
     salt.runSaltProcessStep(master, target, 'file.touch', ["${results}/rally.db"])
     salt.cmdRun(master, target, "chmod 666 ${results}/rally.db")
diff --git a/src/com/mirantis/mk/Orchestrate.groovy b/src/com/mirantis/mk/Orchestrate.groovy
index 0450e81..806be8a 100644
--- a/src/com/mirantis/mk/Orchestrate.groovy
+++ b/src/com/mirantis/mk/Orchestrate.groovy
@@ -351,7 +351,7 @@
     salt.enforceStateWithTest(master, "I@neutron:server:role:primary ${extra_tgt}", 'neutron.server', "I@neutron:server ${extra_tgt}")
     salt.enforceStateWithTest(master, "I@neutron:server ${extra_tgt}", 'neutron.server')
     if (salt.testTarget(master, "I@keystone:server and I@neutron:server ${extra_tgt}")) {
-        common.retry(3,5){
+        common.retry(10,5){
             salt.cmdRun(master, "I@keystone:server ${extra_tgt}",'. /root/keystonercv3; neutron agent-list')
         }
     }
@@ -509,10 +509,9 @@
         def salt_ca_compound = "I@salt:minion:ca:salt_master_ca ${extra_tgt}"
         // Enforce highstate asynchronous only on compute nodes which are not glusterfs and not salt ca servers
         def hightstateTarget = "${compute_compound} and not ${gluster_compound} and not ${salt_ca_compound}"
-        def excludedStates = "fluentd"
         if (salt.testTarget(master, hightstateTarget)) {
             retry(2) {
-                salt.enforceHighstateWithExclude(master, hightstateTarget, excludedStates)
+                salt.enforceHighstate(master, hightstateTarget)
             }
         } else {
             common.infoMsg("No minions matching highstate target found for target ${hightstateTarget}")
@@ -525,7 +524,7 @@
                 if ( target == cmp_target ) {
                     // Enforce highstate one by one on salt ca servers which are compute nodes
                     retry(2) {
-                        salt.enforceHighstateWithExclude(master, target, excludedStates)
+                        salt.enforceHighstate(master, target)
                     }
                 }
             }
@@ -538,7 +537,7 @@
                 if ( target == cmp_target ) {
                     // Enforce highstate one by one on glusterfs servers which are compute nodes
                     retry(2) {
-                        salt.enforceHighstateWithExclude(master, target, excludedStates)
+                        salt.enforceHighstate(master, target)
                     }
                 }
             }
@@ -1131,6 +1130,11 @@
         salt.enforceState(master, "( I@ceph:mon:keyring:mon or I@ceph:common:keyring:admin ) ${extra_tgt}", 'ceph.mon')
         salt.runSaltProcessStep(master, "I@ceph:mon ${extra_tgt}", 'saltutil.sync_grains')
         salt.runSaltProcessStep(master, "( I@ceph:mon:keyring:mon or I@ceph:common:keyring:admin ) ${extra_tgt}", 'mine.update')
+
+        // on target nodes mine is used to get pillar from 'ceph:common:keyring:admin' via grain.items
+        // we need to refresh all pillar/grains to make data sharing work correctly
+        salt.fullRefresh(master, "( I@ceph:mon:keyring:mon or I@ceph:common:keyring:admin ) ${extra_tgt}")
+
         sleep(5)
     }
     // install Ceph Mons