diff --git a/xos/test/monitoring_e2e_test.yaml b/xos/test/monitoring_e2e_test.yaml
deleted file mode 100644
index 0cdb4d1..0000000
--- a/xos/test/monitoring_e2e_test.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-- hosts: localhost
-
-  vars:
-    auth:
-      user: padmin@vicci.org
-      pass: letmein
-
-  roles:
-    - {role: common}
-    - {role: test-initial, when: "{{test}}==1"}
-    - {role: test-inframonitoring, when: "{{test}}==2"}
-    - {role: test-vsgmonitoring, when: "{{test}}==3"}
diff --git a/xos/test/monitoring_test_inframetrics.yaml b/xos/test/monitoring_test_inframetrics.yaml
new file mode 100644
index 0000000..e142c8d
--- /dev/null
+++ b/xos/test/monitoring_test_inframetrics.yaml
@@ -0,0 +1,9 @@
+---
+- hosts: localhost
+
+  vars_files:
+    - vars/defaults.yml
+
+  roles:
+    - common
+    - test-inframonitoring
diff --git a/xos/test/monitoring_test_initial.yaml b/xos/test/monitoring_test_initial.yaml
new file mode 100644
index 0000000..fa73d5d
--- /dev/null
+++ b/xos/test/monitoring_test_initial.yaml
@@ -0,0 +1,9 @@
+---
+- hosts: localhost
+
+  vars_files:
+    - vars/defaults.yml
+
+  roles:
+    - common
+    - test-initial
diff --git a/xos/test/monitoring_test_vsgmetrics.yaml b/xos/test/monitoring_test_vsgmetrics.yaml
new file mode 100644
index 0000000..2b7ee9e
--- /dev/null
+++ b/xos/test/monitoring_test_vsgmetrics.yaml
@@ -0,0 +1,9 @@
+---
+- hosts: localhost
+
+  vars_files:
+    - vars/defaults.yml
+
+  roles:
+    - common
+    - test-vsgmonitoring
diff --git a/xos/test/monitoringservice_test.py b/xos/test/monitoringservice_test.py
deleted file mode 100644
index 73e33c0..0000000
--- a/xos/test/monitoringservice_test.py
+++ /dev/null
@@ -1,196 +0,0 @@
-import urllib2
-import requests
-import time
-import json
-import sys
-import getopt
-
-monitoring_channel = None
-
-def acquire_xos_monitoring_channel():
-   admin_auth=("padmin@vicci.org", "letmein")  
-   monitoring_channel = None
-   ceilometer_service = None
-   start_time = time.time()
-   ceilometerservice_wait_start_time=start_time
-   monitoringchannel_wait_start_time=start_time
-   cur_attempts = 1
-   print "Attempt %s" % cur_attempts
-   while True:
-      try:
-         if (not ceilometer_service):
-             url = "http://localhost:8888/api/core/services/"
-             services = requests.get(url, auth=admin_auth).json()
-             if not services:
-                 print 'No services are found....weird....exiting'
-                 return None
-             else:
-                 for service in services:
-                     if 'ceilometer' in service['name']:
-                         ceilometer_service = service
-                         break
-                 if (not ceilometer_service):
-                     print 'Waiting for ceilometer_service object to be created, elapsed-time=%s' % (time.time()-ceilometerservice_wait_start_time)
-                 else:
-                     if ("OK" not in ceilometer_service['backend_status']):
-                         cur_status = "other"
-                         if "Unreachable" in ceilometer_service['backend_status']:
-                             cur_status = "Unreachable"
-                         elif "defer" in ceilometer_service['backend_status']:
-                             cur_status = "Deferred"
-                         print 'Waiting for ceilometer_service object to be ready, current_status:%s elapsed-time:%s' % (cur_status, time.time()-ceilometerservice_wait_start_time)
-                         ceilometer_service = None
-                     else:
-                         print 'ceilometer_service is ready, elapsed-time:%s' % (time.time()-ceilometerservice_wait_start_time)
-         else:
-             print 'ceilometer_service is ready'
-      except Exception, e:
-         print 'Waiting for ceilometer_service object to be created, elapsed-time=%s' % (time.time()-ceilometerservice_wait_start_time)
-
-      try:
-         if (not monitoring_channel):
-             url = "http://localhost:8888/api/tenant/monitoring/monitoringchannel/"
-             monitoring_channels = requests.get(url, auth=admin_auth).json()
-             if not monitoring_channels:
-                 print 'Waiting for monitoring_channel object to be created, elapsed-time=%s' % (time.time()-monitoringchannel_wait_start_time)
-             else:
-                 monitoring_channel = monitoring_channels[0]
-                 url = "http://localhost:8888/api/core/tenants/"+str(monitoring_channel['id'])
-                 monitoring_channel = None
-                 monitoring_channel = requests.get(url, auth=admin_auth).json()
-                 if (not monitoring_channel) or ("OK" not in monitoring_channel['backend_status']):
-                     cur_status = "other"
-                     if "Unreachable" in monitoring_channel['backend_status']:
-                         cur_status = "Unreachable"
-                     elif "defer" in monitoring_channel['backend_status']:
-                         cur_status = "Deferred"
-                     print 'Waiting for Monitoring_channel to be ready, current_status:%s, elapsed-time=%s' % (cur_status, time.time()-monitoringchannel_wait_start_time)
-                     monitoring_channel = None
-                 else:
-                     print 'Monitoring_channel is ready, elapsed-time:%s' % (time.time()-monitoringchannel_wait_start_time)
-         else:
-             print 'Monitoring_channel is ready'
-      except Exception, e:
-         print 'Exception....Waiting for monitoring_channel object to be created, elapsed-time=%s' % (time.time()-monitoringchannel_wait_start_time)
-
-      if (not ceilometer_service) or (not monitoring_channel):
-         #print "Sleeping for 60 seconds...."
-         cur_attempts += 1
-         if cur_attempts > 15:
-             print "Maximum number of retrys reached....Exiting"
-             return None
-         time.sleep(60)
-         print "Attempt %s" % cur_attempts
-      else:
-         print "Both ceilometer_service and monitoring_channel are ready"
-         break
-
-   #Wait until URL is completely UP
-   while True:
-       try:
-           url = "http://localhost:8888/api/tenant/monitoring/monitoringchannel/"
-           monitoring_channel = requests.get(url, auth=admin_auth).json()[0]
-           if not monitoring_channel['ceilometer_url']:
-               print 'Waiting for monitoring channel URL to be available, elapsed-time=%s' % (e.reason,time.time()-start_time)
-               time.sleep(5)
-               pass
-           else:
-               response = urllib2.urlopen(monitoring_channel['ceilometer_url'],timeout=5)
-               break
-       except urllib2.HTTPError, e:
-           print 'HTTP error %s ...Means monitoring channel URL is reachable, elapsed-time=%s' % (e.reason,time.time()-start_time)
-           return monitoring_channel
-       except urllib2.URLError, e:
-           print 'URL error...Waiting for monitoring channle URL %s is reachable, elapsed-time=%s' % (monitoring_channel['ceilometer_url'],time.time()-start_time)
-           time.sleep(5)
-           pass
-
-#Test to verify the onboarding of monitoring service and monitoring channel
-#Test to verify there is no telemetry data available in the monitoring service initially 
-def test_1():
-   global monitoring_channel
-   monitoring_channel = acquire_xos_monitoring_channel()
-   assert monitoring_channel != None
-   try:
-      url = monitoring_channel['ceilometer_url']+"v2/meters"
-      response = urllib2.urlopen(url)
-      data = json.load(response)
-      assert len(data) == 0, "Meters list is non empty for the first time"
-      print 'CURL on ceilometer URL succeeded %s' % data
-   except Exception, e:
-      print 'CURL on ceilometer URL failed %s' % e
-         
-#Test to verify telemetry data from openstack and onos services is available in the monitoring service 
-def test_2():
-   global monitoring_channel
-   if not monitoring_channel:
-       monitoring_channel = acquire_xos_monitoring_channel()
-       assert monitoring_channel != None
-   cur_attempts = 1
-   while True:
-      try:
-         url = monitoring_channel['ceilometer_url']+"v2/meters"
-         response = urllib2.urlopen(url,timeout=20)
-         data = json.load(response)
-         if (len(data) == 0):
-            assert (cur_attempts < 5), "Meters list can not be empty after infra monitoring is enabled....Max retries reached"
-            print 'Waiting for monitoring channle URL %s to return metrics' % (url)
-            time.sleep(10)
-            cur_attempts += 1
-            continue
-         assert any(d['name'] == 'disk.write.requests' for d in data), "Metrics does not contains disk related statistics"
-         assert any(d['name'] == 'cpu' for d in data), "Metrics does not contains cpu related statistics"
-         assert any(d['name'] == 'memory' for d in data), "Metrics does not contains memory related statistics"
-         print 'CURL on ceilometer URL succeeded Number of meters: %s' % (str(len(data)))
-         break
-      except Exception, e:
-         print 'CURL on ceilometer URL failed...%s' % e
-         break
-
-#Test to verify telemetry data from vSG services is available in the monitoring service 
-def test_3():
-   global monitoring_channel
-   if not monitoring_channel:
-       monitoring_channel = acquire_xos_monitoring_channel()
-       assert monitoring_channel != None
-   cur_attempts = 1
-   while True:
-      try:
-         url = monitoring_channel['ceilometer_url']+"v2/meters"
-         response = urllib2.urlopen(url,timeout=20)
-         data = json.load(response)
-         if (len(data) == 0):
-            assert (cur_attempts < 5), "Meters list can not be empty after infra monitoring is enabled....Max retries reached"
-            print 'Waiting for monitoring channle URL %s to return metrics' % (url)
-            time.sleep(10)
-            cur_attempts += 1
-            continue
-         assert any(d['name'] == 'vsg.dns.cache.size' for d in data), "Metrics does not contains vsg.dns.cache.size related statistics"
-         assert any(d['name'] == 'vsg.dns.replaced_unexpired_entries' for d in data), "Metrics does not contains vsg.dns.replaced_unexpired_entries related statistics"
-         assert any(d['name'] == 'vsg.dns.queries_answered_locally' for d in data), "Metrics does not contains vsg.dns.queries_answered_locally related statistics"
-         print 'CURL on ceilometer URL succeeded Number of meters: %s' % (str(len(data)))
-         break
-      except Exception, e:
-         print 'CURL on ceilometer URL failed...%s' % e
-         break
-
-def usage():
-    print 'monitoringservice_test.py --test=<num>'
-
-def main(argv):
-   try:
-      opts, args = getopt.getopt(argv,"ht:",["help","test="])
-   except getopt.GetoptError:
-      usage()
-      sys.exit(2)
-
-   for opt, arg in opts:
-      if opt in ("-h", "--help"):
-          usage()
-          sys.exit()
-      elif opt in ("-t", "--test"):
-          fq = "test_"+str(arg)
-          globals()[fq]()
-
-if __name__ == "__main__":
-   main(sys.argv[1:])
diff --git a/xos/test/vars/defaults.yml b/xos/test/vars/defaults.yml
new file mode 100644
index 0000000..c04bd65
--- /dev/null
+++ b/xos/test/vars/defaults.yml
@@ -0,0 +1,4 @@
+---
+auth:
+  user: padmin@vicci.org
+  pass: letmein
