Add SALT API client
diff --git a/tcp_tests/templates/common-services/virtual-mcp10-ovs-common-services.yaml b/tcp_tests/templates/common-services/virtual-mcp10-ovs-common-services.yaml
index 1d228ff..a322b67 100644
--- a/tcp_tests/templates/common-services/virtual-mcp10-ovs-common-services.yaml
+++ b/tcp_tests/templates/common-services/virtual-mcp10-ovs-common-services.yaml
@@ -1,104 +1,147 @@
 {% from 'virtual-mcp10-ovs.jinja' import HOSTNAME_CFG01 with context %}
 
-# Install support services
+################### Install OpenStack infra ##########################
 
+# salt.enforceState(saltMaster, 'I@glusterfs:server', 'glusterfs.server.service', true)
+- description: Install and run GlusterFS
+  do: enforceState
+  target: I@glusterfs:server
+  state: glusterfs.server.service
+
+#     // Install keepaliveds
+#     //runSaltProcessStep(master, 'I@keepalived:cluster', 'state.sls', ['keepalived'], 1)
+#     salt.enforceState(saltMaster, 'I@keepalived:cluster and *01*', 'keepalived', true)
+#     salt.enforceState(saltMaster, 'I@keepalived:cluster', 'keepalived', true)
 - description: Install keepalived
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@keepalived:cluster' state.sls keepalived -b 1
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 10}
-  skip_fail: true
+  do: enforceState
+  target: I@keepalived:cluster and *01*
+  state: keepalived
 
-- description: Check the VIP
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@keepalived:cluster' cmd.run 'ip a | grep 172.16.10.2' | grep -B1 172.16.10.2
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 5}
-  skip_fail: false
+- description: Re run installation of keepalived
+  do: enforceState
+  target: I@keepalived:cluster
+  state: keepalived
+
+#  // Check the keepalived VIPs
+#  salt.runSaltProcessStep(saltMaster, 'I@keepalived:cluster', 'cmd.run', ['ip a | grep 172.16.10.2'])
+#  salt.enforceState(saltMaster, 'I@glusterfs:server and *01*', 'glusterfs.server.setup', true)
+#  salt.runSaltProcessStep(saltMaster, 'I@glusterfs:server', 'cmd.run', ['gluster peer status'], null, true)
+#  salt.runSaltProcessStep(saltMaster, 'I@glusterfs:server', 'cmd.run', ['gluster volume status'], null, true)
+
+- description: Show VIPs
+  do: runState
+  target: I@keepalived:cluster
+  state: cmd.run
+  args: ['ip a | grep 172.16.10.2']
+
+- description: Re run Gluster sertver setup
+  do: enforceState
+  target: I@glusterfs:server and *01*
+  state: glusterfs.server.setup
+
+- description: Show Gluster peer status
+  do: runState
+  target: I@glusterfs:server
+  state: cmd.run
+  args: ['gluster peer status']
+
+- description: Show Gluster volumes status
+  do: runState
+  target: I@glusterfs:server
+  state: cmd.run
+  args: ['gluster volume status']
 
 
-- description: Install glusterfs
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@glusterfs:server' state.sls glusterfs.server.service
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 5}
-  skip_fail: false
+  #     // Install rabbitmq
+  #     withEnv(['ASK_ON_ERROR=false']){
+  #         retry(2) {
+  #             salt.enforceState(saltMaster, 'I@rabbitmq:server', 'rabbitmq', true)
+  #         }
+  #     }
+  #     // Check the rabbitmq status
+  #     salt.runSaltProcessStep(saltMaster, 'I@rabbitmq:server', 'cmd.run', ['rabbitmqctl cluster_status'])
 
-- description: Setup glusterfs on primary controller
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@glusterfs:server' state.sls glusterfs.server.setup -b 1
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 5}
-  skip_fail: false
+- description: Install rabbitmq
+  do: enforceState
+  target: I@rabbitmq:server
+  state: rabbitmq
+  retry: {count: 2, delay: 5}
 
-- description: Check the gluster status
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@glusterfs:server' cmd.run 'gluster peer status; gluster volume status' -b 1
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 5}
-  skip_fail: false
+- description: Show rabbitmq status
+  do: runState
+  target: I@glusterfs:server
+  state: cmd.run
+  args: ['rabbitmqctl cluster_status']
+
+  #     // Install galera
+  #     withEnv(['ASK_ON_ERROR=false']){
+  #         retry(2) {
+  #             salt.enforceState(saltMaster, 'I@galera:master', 'galera', true)
+  #         }
+  #     }
+  #     salt.enforceState(saltMaster, 'I@galera:slave', 'galera', true)
+
+  #     // Check galera status
+  #     salt.runSaltProcessStep(saltMaster, 'I@galera:master', 'mysql.status')
+  #     salt.runSaltProcessStep(saltMaster, 'I@galera:slave', 'mysql.status')
+
+  #     // // Setup mysql client
+  #     // salt.enforceState(saltMaster, 'I@mysql:client', 'mysql.client', true)
 
 
-- description: Install RabbitMQ
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@rabbitmq:server' state.sls rabbitmq
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 5}
-  skip_fail: false
+- description: Install Galera (master)
+  do: enforceState
+  target: I@galera:master
+  state: galera
+  retry: {count: 2, delay: 5}
 
-- description: Check the rabbitmq status
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@rabbitmq:server' cmd.run 'rabbitmqctl cluster_status'
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 5}
-  skip_fail: false
+- description: Install Galera (slaves)
+  do: enforceState
+  target: I@galera:slave
+  state: galera
 
-- description: Install Galera on first server
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@galera:master' state.sls galera
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 5}
-  skip_fail: false
+- description: Show master galera status
+  do: runState
+  target: I@galera:master
+  state: mysql.status
 
-- description: Install Galera on other servers
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@galera:slave' state.sls galera
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 5}
-  skip_fail: false
+- description: Show master galera status
+  do: runState
+  target: I@galera:master
+  state: mysql.status
 
-- description: Check mysql status
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@galera:*' mysql.status | grep -A1 -e "wsrep_incoming_addresses\|wsrep_cluster_size"
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 5}
-  skip_fail: true
+# - description: Install mysql client
+#   do: enforceState
+#   target: I@mysql:client
+#   state: mysql.client
 
 
-- description: Install haproxy
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@haproxy:proxy' state.sls haproxy
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 5}
-  skip_fail: false
+# // Install haproxy
+# salt.enforceState(saltMaster, 'I@haproxy:proxy', 'haproxy', true)
+# salt.runSaltProcessStep(saltMaster, 'I@haproxy:proxy', 'service.status', ['haproxy'])
+# salt.runSaltProcessStep(saltMaster, 'I@haproxy:proxy', 'service.restart', ['rsyslog'])
 
-- description: Check haproxy status
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@haproxy:proxy' service.status haproxy
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 5}
-  skip_fail: false
 
-- description: Restart rsyslog
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@haproxy:proxy' service.restart rsyslog
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 5}
-  skip_fail: false
+- description: Install HAProxy
+  do: enforceState
+  target: I@haproxy:proxy
+  state: haproxy
 
-- description: Install memcached on all controllers
-  cmd: salt --hard-crash --state-output=mixed --state-verbose=False
-    -C 'I@memcached:server' state.sls memcached
-  node_name: {{ HOSTNAME_CFG01 }}
-  retry: {count: 1, delay: 5}
-  skip_fail: false
+- description: Show HAProxy service status
+  do: runState
+  target: I@haproxy:proxy
+  state: service.status
+  args: ['haproxy']
+
+- description: Restart HAProxy service
+  do: runState
+  target: I@haproxy:proxy
+  state: service.restart
+  args: ['haproxy']
+
+# // Install memcached
+# salt.enforceState(saltMaster, 'I@memcached:server', 'memcached', true)
+- description: Install Memcached
+  do: enforceState
+  target: I@memcached:server
+  state: memcached