Separate pods for Ubuntu Rally due to dependency mess

  Related-PROD: PROD-36128

Change-Id: I5020af4ba036cab9a59403610a4a2ce40678abc9
diff --git a/k8s/rally-files/gen_kubespec.sh b/k8s/rally-files/gen_kubespec.sh
new file mode 100644
index 0000000..49b8082
--- /dev/null
+++ b/k8s/rally-files/gen_kubespec.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+# files
+ca_crt=$(pwd)/ca.crt
+client_crt=$(pwd)/client.crt
+client_key=$(pwd)/client.key
+
+function show_help() {
+   printf "\ngen_kubespec.sh <kubeconfig.yaml>\n"
+   exit 1
+}
+
+# Check for a config file
+if [[ -z ${1+x} ]]; then
+   show_help
+   printf "\nERROR: No kubeconfig.yaml specified\n"
+   exit 1
+fi
+
+# Check if file exists
+if [[ ! -f $1 ]]; then
+   show_help
+   printf "\nERROR: Supplied kubeconfig file not exists at '$1'\n"
+   exit 1
+fi
+
+# extract data as variables
+declare $(sed -e 's/:[^:\/\/,:443,:6443]/=/g;s/ *=/=/g;s/-/_/g' $1 | grep 'certificate\|key\|server' | tr -d ' ')
+echo "# Declared variable: server=$server"
+
+### Uncomment if separate files needed
+printf "# Creating 'ca.crt', 'client.crt' and 'client.key'\n"
+echo "# '${ca_crt}'"
+echo $certificate_authority_data | base64 -d >${ca_crt}
+echo "# '${client_crt}'"
+echo $client_certificate_data | base64 -d >${client_crt}
+echo "# '${client_key}'"
+echo $client_key_data | base64 -d >${client_key}
+
+printf "Generating 'kubespec.yaml'\n"
+cat << EOF >kubespec_generated.yaml
+---
+existing@kubernetes:
+    server: $server
+    certificate-authority: ${ca_crt}
+    client-certificate: ${client_crt}
+    client-key: ${client_key}
+    tls_insecure: True
+EOF
diff --git a/k8s/rally-files/init-rally.sh b/k8s/rally-files/init-rally.sh
new file mode 100644
index 0000000..797cf0b
--- /dev/null
+++ b/k8s/rally-files/init-rally.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+cd /artifacts
+# Installing prerequisites
+#apt -y update
+#apt -y install python3-pip vim git iperf3 mtr htop iputils-ping traceroute tcpdump wget iproute2 curl
+#pip3 install rally-openstack python-neutronclient pyghmi
+
+# Prepare Rally
+rally db create
+
+# Create openstack env
+rally env create --from-sysenv --name openstack
+rally env check
+
+# Prepare rally for kubernetes
+bash res-files/k8s/gen_kubespec.sh ./mos-kubeconf.yaml
+git clone https://github.com/Mirantis/rally-plugins.git
+cd rally-plugins/
+pip3 install .
+rally plugin list | grep kubernetes
+
+# Configure kubernetes
+rally env create --name kubernetes --spec /artifacts/kubespec_generated.yaml
+rally env check
+cd /artifacts
diff --git a/k8s/rally-files/k8s-mos-scn-i1.yaml b/k8s/rally-files/k8s-mos-scn-i1.yaml
new file mode 100644
index 0000000..c14c94a
--- /dev/null
+++ b/k8s/rally-files/k8s-mos-scn-i1.yaml
@@ -0,0 +1,94 @@
+{% set image_box = "busybox" %}
+{% set image_pause = "mirantis.azurecr.io/general/external/pause:3.1" %}
+{% set image_cirros = "virtlet/download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img" %}
+{% set concurrency = 1 %}
+{% set times = 1 %}
+{% set replicas = 1 %}
+{% set replicas_scaled = 2 %}
+{% set namespaces = 1 %}
+{% set serviceacc_delay = 60 %}
+
+
+---
+version: 2
+title: MOS Kubenetes performance checks
+subtasks:
+- title: Run a single workload with listing existing kubernetes namespaces
+  scenario:
+    Kubernetes.list_namespaces: {}
+  runner:
+    constant:
+      concurrency: {{concurrency}}
+      times: {{times}}
+- title: Run a single workload with create/read/delete namespace
+  scenario:
+    Kubernetes.create_and_delete_namespace: {}
+  runner:
+    constant:
+      concurrency: {{concurrency}}
+      times: {{times}}
+- title: Run a single workload with create/read/delete job
+  scenario:
+    Kubernetes.create_and_delete_job:
+      image: {{image_box}}
+      command:
+      - echo
+      - "SUCCESS"
+  runner:
+    constant:
+      concurrency: {{concurrency}}
+      times: {{times}}
+  contexts:
+    namespaces:
+      count: {{namespaces}}
+      with_serviceaccount: true
+      serviceaccount_delay: {{serviceacc_delay}}
+- title: Run a single workload with create/read/delete pod with configMap volume
+  scenario:
+    Kubernetes.create_and_delete_pod_with_configmap_volume:
+      image: {{image_box}}
+      mount_path: /var/log/check.txt
+      subpath: check.txt
+      configmap_data:
+        check.txt: |
+          test
+  runner:
+    constant:
+      concurrency: {{concurrency}}
+      times: {{times}}
+  contexts:
+    namespaces:
+      count: {{namespaces}}
+      with_serviceaccount: true
+      serviceaccount_delay: {{serviceacc_delay}}
+- title: Run a single workload with create/delete NodePort service
+  scenario:
+    Kubernetes.create_and_delete_pod_with_node_port_service:
+      image: {{image_box}}
+      port: 80
+      protocol: TCP
+  runner:
+    constant:
+      concurrency: {{concurrency}}
+      times: {{times}}
+  contexts:
+    namespaces:
+      count: {{namespaces}}
+      with_serviceaccount: true
+      serviceaccount_delay: {{serviceacc_delay}}
+    kubernetes.cfg:
+      prepoll_delay: 1
+- title: Run a single workload with create/read/delete pod
+  scenario:
+    Kubernetes.create_and_delete_pod:
+      image: {{image_box}}
+  runner:
+    constant:
+      concurrency: {{concurrency}}
+      times: {{times}}
+  contexts:
+    namespaces:
+      count: {{namespaces}}
+      with_serviceaccount: true
+      serviceaccount_delay: {{serviceacc_delay}}
+
diff --git a/k8s/rally-files/k8s-mos-scn-i100c5.yaml b/k8s/rally-files/k8s-mos-scn-i100c5.yaml
new file mode 100644
index 0000000..da897ef
--- /dev/null
+++ b/k8s/rally-files/k8s-mos-scn-i100c5.yaml
@@ -0,0 +1,94 @@
+{% set image_box = "busybox" %}
+{% set image_pause = "mirantis.azurecr.io/general/external/pause:3.1" %}
+{% set image_cirros = "virtlet/download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img" %}
+{% set concurrency = 5 %}
+{% set times = 100 %}
+{% set replicas = 1 %}
+{% set replicas_scaled = 2 %}
+{% set namespaces = 2 %}
+{% set serviceacc_delay = 60 %}
+
+
+---
+version: 2
+title: MOS Kubenetes performance checks
+subtasks:
+- title: Run a single workload with listing existing kubernetes namespaces
+  scenario:
+    Kubernetes.list_namespaces: {}
+  runner:
+    constant:
+      concurrency: {{concurrency}}
+      times: {{times}}
+- title: Run a single workload with create/read/delete namespace
+  scenario:
+    Kubernetes.create_and_delete_namespace: {}
+  runner:
+    constant:
+      concurrency: {{concurrency}}
+      times: {{times}}
+- title: Run a single workload with create/read/delete job
+  scenario:
+    Kubernetes.create_and_delete_job:
+      image: {{image_box}}
+      command:
+      - echo
+      - "SUCCESS"
+  runner:
+    constant:
+      concurrency: {{concurrency}}
+      times: {{times}}
+  contexts:
+    namespaces:
+      count: {{namespaces}}
+      with_serviceaccount: true
+      serviceaccount_delay: {{serviceacc_delay}}
+- title: Run a single workload with create/read/delete pod with configMap volume
+  scenario:
+    Kubernetes.create_and_delete_pod_with_configmap_volume:
+      image: {{image_box}}
+      mount_path: /var/log/check.txt
+      subpath: check.txt
+      configmap_data:
+        check.txt: |
+          test
+  runner:
+    constant:
+      concurrency: {{concurrency}}
+      times: {{times}}
+  contexts:
+    namespaces:
+      count: {{namespaces}}
+      with_serviceaccount: true
+      serviceaccount_delay: {{serviceacc_delay}}
+- title: Run a single workload with create/delete NodePort service
+  scenario:
+    Kubernetes.create_and_delete_pod_with_node_port_service:
+      image: {{image_box}}
+      port: 80
+      protocol: TCP
+  runner:
+    constant:
+      concurrency: {{concurrency}}
+      times: {{times}}
+  contexts:
+    namespaces:
+      count: {{namespaces}}
+      with_serviceaccount: true
+      serviceaccount_delay: {{serviceacc_delay}}
+    kubernetes.cfg:
+      prepoll_delay: 1
+- title: Run a single workload with create/read/delete pod
+  scenario:
+    Kubernetes.create_and_delete_pod:
+      image: {{image_box}}
+  runner:
+    constant:
+      concurrency: {{concurrency}}
+      times: {{times}}
+  contexts:
+    namespaces:
+      count: {{namespaces}}
+      with_serviceaccount: true
+      serviceaccount_delay: {{serviceacc_delay}}
+
diff --git a/k8s/rally-files/openstack-mos-scn-i1.json b/k8s/rally-files/openstack-mos-scn-i1.json
new file mode 100644
index 0000000..cac67f4
--- /dev/null
+++ b/k8s/rally-files/openstack-mos-scn-i1.json
@@ -0,0 +1,454 @@
+{% set flavor_name = flavor_name or "cvp.tiny" %}
+{% set image_name = image_name or "cvp.cirros.35" %}
+{% set availability_zone = "nova" %}
+{% set concurrency = 1 %}
+{% set volume_size = 1 %}
+{% set times = 1 %}
+{% set users = 1 %}
+{% set tenants = 1 %}
+{% set rbd_image = "http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img" %}
+{% set heat_template = "/artifacts/res-files/rally/default.yaml.template" %}
+{% set fixed_net = "id" %}
+
+{
+  "KeystoneBasic.authenticate_user_and_validate_token": [
+  {
+    "args": {},
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "KeystoneBasic.create_tenant_with_users": [
+  {
+    "args": { "users_per_tenant": 10 },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "Authenticate.validate_cinder": [
+  {
+    "args": { "repetitions": 2 },
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "context": {
+      "users": {
+        "users_per_tenant": {{users}},
+        "tenants": {{tenants}}
+      },
+      "api_versions@openstack": { "cinder": {"service_type": "volumev3"} }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "Authenticate.validate_glance": [
+  {
+    "args": { "repetitions": 2 },
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "context": {
+      "users": {
+        "users_per_tenant": {{users}},
+        "tenants": {{tenants}}
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "Authenticate.validate_heat": [
+  {
+    "args": { "repetitions": 2 },
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "context": {
+      "users": {
+        "users_per_tenant": {{users}},
+        "tenants": {{tenants}}
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "Authenticate.validate_nova": [
+  {
+    "args": { "repetitions": 2 },
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "context": {
+      "users": {
+        "users_per_tenant": {{users}},
+        "tenants": {{tenants}}
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "Authenticate.validate_neutron": [
+  {
+    "args": { "repetitions": 2 },
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "context": {
+      "users": {
+        "users_per_tenant": {{users}},
+        "tenants": {{tenants}}
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "NovaServers.boot_and_migrate_server": [
+  {
+    "args": {
+      "flavor": {
+        "name": "{{flavor_name}}"
+      },
+      "image": {
+        "name": "{{image_name}}"
+      },
+      "nics": [
+        {"net-id": "{{fixed_net}}"}
+      ]
+    },
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "context": {
+      "users": {
+        "users_per_tenant": {{users}},
+        "tenants": {{tenants}}
+      },
+      "quotas": {
+        "nova": {
+          "instances": -1,
+          "cores": -1,
+          "ram": -1,
+          "key_pairs": -1,
+          "security_groups": -1,
+          "security_group_rules": -1
+        }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "NovaServers.boot_and_delete_server": [
+  {
+    "args": {
+      "flavor": {
+        "name": "{{flavor_name}}"
+      },
+      "image": {
+        "name": "{{image_name}}"
+      },
+      "nics": [
+        {"net-id": "{{fixed_net}}"}
+      ],
+      "detailed": true,
+      "availability_zone": "{{availability_zone}}"
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "quotas": {
+        "nova": {
+          "instances": -1,
+          "cores": -1,
+          "ram": -1,
+          "key_pairs": -1,
+          "security_groups": -1,
+          "security_group_rules": -1
+        }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "NovaServers.boot_server_from_volume_and_delete": [
+  {
+    "args": {
+      "flavor": {
+        "name": "{{flavor_name}}"
+      },
+      "image": {
+        "name": "{{image_name}}"
+      },
+      "nics": [
+        {"net-id": "{{fixed_net}}"}
+      ],
+      "volume_size": {{volume_size}},
+      "force_delete": false,
+      "availability_zone": "{{availability_zone}}"
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "api_versions@openstack": { "cinder": {"service_type": "volumev3"} },
+      "quotas": {
+        "nova": {
+          "instances": -1,
+          "cores": -1,
+          "ram": -1,
+          "key_pairs": -1,
+          "security_groups": -1,
+          "security_group_rules": -1
+        },
+        "cinder": { "volumes": -1 }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "NeutronNetworks.create_and_delete_networks": [
+  {
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "quotas": {
+        "neutron": { "network": -1 }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "NeutronNetworks.create_and_delete_ports": [
+  {
+    "args": {
+      "network_create_args": {},
+      "port_create_args": {},
+      "ports_per_network": 10
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "quotas": {
+        "neutron": {
+          "network": -1,
+          "port": -1
+        }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "NeutronNetworks.create_and_delete_routers": [
+  {
+    "args": {
+      "network_create_args": {},
+      "subnet_create_args": {},
+      "subnet_cidr_start": "1.1.0.0/30",
+      "subnets_per_network": 2,
+      "router_create_args": {}
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "quotas": {
+        "neutron": {
+          "network": -1,
+          "subnet": -1,
+          "router": -1
+        }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "CinderVolumes.create_and_attach_volume": [
+  {
+    "args": {
+      "size": {{volume_size}},
+      "image": {
+        "name": "{{image_name}}"
+      },
+      "flavor": {
+        "name": "{{flavor_name}}"
+      },
+      "nics": [
+        {"net-id": "{{fixed_net}}"}
+      ],
+      "create_volume_params": {},
+      "availability_zone": "{{availability_zone}}"
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "api_versions@openstack": { "cinder": {"service_type": "volumev3"} },
+      "quotas": {
+        "nova": {
+          "instances": -1,
+          "cores": -1,
+          "ram": -1,
+          "key_pairs": -1,
+          "security_groups": -1,
+          "security_group_rules": -1
+        },
+        "cinder": { "volumes": -1 }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "CinderVolumes.create_and_delete_snapshot": [
+  {
+    "args": { "force": false },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "volumes": { "size": {{volume_size}} },
+      "quotas": {
+        "cinder": {
+          "snapshots": -1,
+          "volumes": -1
+        }
+      },
+      "api_versions@openstack": { "cinder": {"service_type": "volumev3"} }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "CinderVolumes.create_and_upload_volume_to_image": [
+  {
+    "args": {
+      "size": {{volume_size}},
+      "force": false,
+      "container_format": "bare",
+      "disk_format": "raw",
+      "do_delete": true,
+      "image": {
+        "name": "{{image_name}}"
+      }
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "quotas": {
+        "cinder": {
+          "snapshots": -1,
+          "volumes": -1
+        }
+      },
+      "api_versions@openstack": { "cinder": {"service_type": "volumev3"} }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "GlanceImages.create_and_delete_image": [
+  {
+    "args": {
+      "image_location": "{{rbd_image}}",
+      "container_format": "bare",
+      "disk_format": "qcow2"
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "HeatStacks.create_and_delete_stack": [
+  {
+    "args": { "template_path": "{{heat_template}}" },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ]
+}
diff --git a/k8s/rally-files/openstack-mos-scn-i100.json b/k8s/rally-files/openstack-mos-scn-i100.json
new file mode 100644
index 0000000..58eb219
--- /dev/null
+++ b/k8s/rally-files/openstack-mos-scn-i100.json
@@ -0,0 +1,455 @@
+{% set concurrency = 10 %}
+{% set volume_size = 1 %}
+{% set times = 100 %}
+{% set users = 3 %}
+{% set tenants = 3 %}
+
+{% set flavor_name = flavor_name or "cvp.tiny" %}
+{% set image_name = image_name or "cvp.cirros.35" %}
+{% set availability_zone = "nova" %}
+{% set rbd_image = "http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img" %}
+{% set heat_template = "/artifacts/res-files/rally/default.yaml.template" %}
+{% set fixed_net = "id" %}
+
+{
+  "KeystoneBasic.authenticate_user_and_validate_token": [
+  {
+    "args": {},
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "KeystoneBasic.create_tenant_with_users": [
+  {
+    "args": { "users_per_tenant": 10 },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "Authenticate.validate_cinder": [
+  {
+    "args": { "repetitions": 2 },
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "context": {
+      "users": {
+        "users_per_tenant": {{users}},
+        "tenants": {{tenants}}
+      },
+      "api_versions@openstack": { "cinder": {"service_type": "volumev3"} }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "Authenticate.validate_glance": [
+  {
+    "args": { "repetitions": 2 },
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "context": {
+      "users": {
+        "users_per_tenant": {{users}},
+        "tenants": {{tenants}}
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "Authenticate.validate_heat": [
+  {
+    "args": { "repetitions": 2 },
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "context": {
+      "users": {
+        "users_per_tenant": {{users}},
+        "tenants": {{tenants}}
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "Authenticate.validate_nova": [
+  {
+    "args": { "repetitions": 2 },
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "context": {
+      "users": {
+        "users_per_tenant": {{users}},
+        "tenants": {{tenants}}
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "Authenticate.validate_neutron": [
+  {
+    "args": { "repetitions": 2 },
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "context": {
+      "users": {
+        "users_per_tenant": {{users}},
+        "tenants": {{tenants}}
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "NovaServers.boot_and_migrate_server": [
+  {
+    "args": {
+      "flavor": {
+        "name": "{{flavor_name}}"
+      },
+      "image": {
+        "name": "{{image_name}}"
+      },
+      "nics": [
+        {"net-id": "{{fixed_net}}"}
+      ]
+    },
+    "runner": {
+      "type": "constant",
+      "times": {{times}},
+      "concurrency": {{concurrency}}
+    },
+    "context": {
+      "users": {
+        "users_per_tenant": {{users}},
+        "tenants": {{tenants}}
+      },
+      "quotas": {
+        "nova": {
+          "instances": -1,
+          "cores": -1,
+          "ram": -1,
+          "key_pairs": -1,
+          "security_groups": -1,
+          "security_group_rules": -1
+        }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "NovaServers.boot_and_delete_server": [
+  {
+    "args": {
+      "flavor": {
+        "name": "{{flavor_name}}"
+      },
+      "image": {
+        "name": "{{image_name}}"
+      },
+      "nics": [
+        {"net-id": "{{fixed_net}}"}
+      ],
+      "detailed": true,
+      "availability_zone": "{{availability_zone}}"
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "quotas": {
+        "nova": {
+          "instances": -1,
+          "cores": -1,
+          "ram": -1,
+          "key_pairs": -1,
+          "security_groups": -1,
+          "security_group_rules": -1
+        }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "NovaServers.boot_server_from_volume_and_delete": [
+  {
+    "args": {
+      "flavor": {
+        "name": "{{flavor_name}}"
+      },
+      "image": {
+        "name": "{{image_name}}"
+      },
+      "nics": [
+        {"net-id": "{{fixed_net}}"}
+      ],
+      "volume_size": {{volume_size}},
+      "force_delete": false,
+      "availability_zone": "{{availability_zone}}"
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "api_versions@openstack": { "cinder": {"service_type": "volumev3"} },
+      "quotas": {
+        "nova": {
+          "instances": -1,
+          "cores": -1,
+          "ram": -1,
+          "key_pairs": -1,
+          "security_groups": -1,
+          "security_group_rules": -1
+        },
+        "cinder": { "volumes": -1 }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "NeutronNetworks.create_and_delete_networks": [
+  {
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "quotas": {
+        "neutron": { "network": -1 }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "NeutronNetworks.create_and_delete_ports": [
+  {
+    "args": {
+      "network_create_args": {},
+      "port_create_args": {},
+      "ports_per_network": 10
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "quotas": {
+        "neutron": {
+          "network": -1,
+          "port": -1
+        }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "NeutronNetworks.create_and_delete_routers": [
+  {
+    "args": {
+      "network_create_args": {},
+      "subnet_create_args": {},
+      "subnet_cidr_start": "1.1.0.0/30",
+      "subnets_per_network": 2,
+      "router_create_args": {}
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "quotas": {
+        "neutron": {
+          "network": -1,
+          "subnet": -1,
+          "router": -1
+        }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "CinderVolumes.create_and_attach_volume": [
+  {
+    "args": {
+      "size": {{volume_size}},
+      "image": {
+        "name": "{{image_name}}"
+      },
+      "flavor": {
+        "name": "{{flavor_name}}"
+      },
+      "nics": [
+        {"net-id": "{{fixed_net}}"}
+      ],
+      "create_volume_params": {},
+      "availability_zone": "{{availability_zone}}"
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "api_versions@openstack": { "cinder": {"service_type": "volumev3"} },
+      "quotas": {
+        "nova": {
+          "instances": -1,
+          "cores": -1,
+          "ram": -1,
+          "key_pairs": -1,
+          "security_groups": -1,
+          "security_group_rules": -1
+        },
+        "cinder": { "volumes": -1 }
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "CinderVolumes.create_and_delete_snapshot": [
+  {
+    "args": { "force": false },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "volumes": { "size": {{volume_size}} },
+      "quotas": {
+        "cinder": {
+          "snapshots": -1,
+          "volumes": -1
+        }
+      },
+      "api_versions@openstack": { "cinder": {"service_type": "volumev3"} }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "CinderVolumes.create_and_upload_volume_to_image": [
+  {
+    "args": {
+      "size": {{volume_size}},
+      "force": false,
+      "container_format": "bare",
+      "disk_format": "raw",
+      "do_delete": true,
+      "image": {
+        "name": "{{image_name}}"
+      }
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      },
+      "quotas": {
+        "cinder": {
+          "snapshots": -1,
+          "volumes": -1
+        }
+      },
+      "api_versions@openstack": { "cinder": {"service_type": "volumev3"} }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "GlanceImages.create_and_delete_image": [
+  {
+    "args": {
+      "image_location": "{{rbd_image}}",
+      "container_format": "bare",
+      "disk_format": "qcow2"
+    },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ],
+  "HeatStacks.create_and_delete_stack": [
+  {
+    "args": { "template_path": "{{heat_template}}" },
+    "runner": {
+      "type": "constant",
+      "concurrency": {{concurrency}},
+      "times": {{times}}
+    },
+    "context": {
+      "users": {
+        "tenants": {{users}},
+        "users_per_tenant": {{tenants}}
+      }
+    },
+    "sla": { "failure_rate": { "max": 0 } }
+  }
+  ]
+}