diff --git a/test_set/cvp-sanity/fixtures/base.py b/test_set/cvp-sanity/fixtures/base.py
index 60b8f28..0b83260 100644
--- a/test_set/cvp-sanity/fixtures/base.py
+++ b/test_set/cvp-sanity/fixtures/base.py
@@ -16,6 +16,50 @@
 
 
 @pytest.fixture(scope='session')
+def ctl_nodes_pillar(local_salt_client):
+    '''Return controller node pillars (OS or k8s ctls).
+       This will help to identify nodes to use for UI curl tests.
+       If no platform is installed (no OS or k8s) we need to skip
+       the test (product team use case).
+    '''
+    salt_output = local_salt_client.cmd(
+        'keystone:server',
+        'test.ping',
+        expr_form='pillar')
+    if salt_output:
+        return "keystone:server"
+    else:
+        salt_output = local_salt_client.cmd(
+            'etcd:server',
+            'test.ping',
+            expr_form='pillar')
+        return "etcd:server" if salt_output else pytest.skip("Neither \
+            Openstack nor k8s is found. Skipping test")
+
+
+@pytest.fixture(scope='session')
+def check_openstack(local_salt_client):
+    salt_output = local_salt_client.cmd(
+        'keystone:server',
+        'test.ping',
+        expr_form='pillar')
+    if not salt_output:
+        pytest.skip("Openstack not found or keystone:server pillar \
+          are not found on this environment.")
+
+
+@pytest.fixture(scope='session')
+def check_drivetrain(local_salt_client):
+    salt_output = local_salt_client.cmd(
+        'I@jenkins:client and not I@salt:master',
+        'test.ping',
+        expr_form='compound')
+    if not salt_output:
+        pytest.skip("Drivetrain service or jenkins:client pillar \
+          are not found on this environment.")
+
+
+@pytest.fixture(scope='session')
 def check_prometheus(local_salt_client):
     salt_output = local_salt_client.cmd(
         'prometheus:server',
diff --git a/test_set/cvp-sanity/global_config.yaml b/test_set/cvp-sanity/global_config.yaml
index 4146147..ab593d7 100644
--- a/test_set/cvp-sanity/global_config.yaml
+++ b/test_set/cvp-sanity/global_config.yaml
@@ -90,6 +90,4 @@
 
 # ntp test setting
 # this test may skip specific node (use fqdn)
-test_ntp_sync:
-  { #"skipped_nodes": [""],
-    "time_deviation": 1}
+ntp_skipped_nodes: [""]
diff --git a/test_set/cvp-sanity/tests/test_contrail.py b/test_set/cvp-sanity/tests/test_contrail.py
index 5e7e108..e5722bd 100644
--- a/test_set/cvp-sanity/tests/test_contrail.py
+++ b/test_set/cvp-sanity/tests/test_contrail.py
@@ -1,5 +1,6 @@
 import pytest
 import json
+import utils
 
 pytestmark = pytest.mark.usefixtures("contrail")
 
@@ -85,3 +86,18 @@
         'The length of vRouters {} differs' \
         ' from the length of compute nodes {}'.format(actual_vrouter_count,
                                                       len(cs.keys()))
+
+
+def test_public_ui_contrail(local_salt_client, ctl_nodes_pillar):
+    IP = utils.get_monitoring_ip('cluster_public_host')
+    protocol = 'https'
+    port = '8143'
+    url = "{}://{}:{}".format(protocol, IP, port)
+    result = local_salt_client.cmd(
+        ctl_nodes_pillar,
+        'cmd.run',
+        ['curl -k {}/ 2>&1 | \
+         grep Contrail'.format(url)],
+        expr_form='pillar')
+    assert len(result[result.keys()[0]]) != 0, \
+        'Public Contrail UI is not reachable on {} from ctl nodes'.format(url)
diff --git a/test_set/cvp-sanity/tests/test_mtu.py b/test_set/cvp-sanity/tests/test_mtu.py
index 9930fea..417bc1a 100644
--- a/test_set/cvp-sanity/tests/test_mtu.py
+++ b/test_set/cvp-sanity/tests/test_mtu.py
@@ -56,7 +56,9 @@
                 diff.append(total[node][interf])
                 row.append("{}: {}".format(node, total[node][interf]))
             else:
-                row.append("{}: No interface".format(node))
+                # skip node with no virbr0 or virbr0-nic interfaces
+                if interf not in ['virbr0', 'virbr0-nic']:
+                    row.append("{}: No interface".format(node))
         if diff.count(diff[0]) < len(nodes):
             row.sort()
             row.insert(0, interf)
diff --git a/test_set/cvp-sanity/tests/test_ntp_sync.py b/test_set/cvp-sanity/tests/test_ntp_sync.py
index 23a98a3..3636f14 100644
--- a/test_set/cvp-sanity/tests/test_ntp_sync.py
+++ b/test_set/cvp-sanity/tests/test_ntp_sync.py
@@ -1,39 +1,34 @@
 import json
-import os
-
 import utils
 
 
 def test_ntp_sync(local_salt_client):
-    testname = os.path.basename(__file__).split('.')[0]
-    active_nodes = utils.get_active_nodes(os.path.basename(__file__))
+    """Test checks that system time is the same across all nodes"""
+
+    active_nodes = utils.get_active_nodes()
     config = utils.get_configuration()
-    fail = {}
-    saltmaster_time = int(local_salt_client.cmd(
-        'salt:master',
-        'cmd.run',
-        ['date +%s'],
-        expr_form='pillar').values()[0])
     nodes_time = local_salt_client.cmd(
         utils.list_to_target_string(active_nodes, 'or'),
         'cmd.run',
         ['date +%s'],
         expr_form='compound')
-    diff = config.get(testname)["time_deviation"] or 30
+    result = {}
     for node, time in nodes_time.iteritems():
-        if (int(time) - saltmaster_time) > diff or \
-                (int(time) - saltmaster_time) < -diff:
-            fail[node] = time
-
-    assert not fail, 'SaltMaster time: {}\n' \
-                     'Nodes with time mismatch:\n {}'.format(saltmaster_time,
-                                                             fail)
+        if node in config.get("ntp_skipped_nodes"):
+            continue
+        if time in result:
+            result[time].append(node)
+            result[time].sort()
+        else:
+            result[time] = [node]
+    assert len(result) <= 1, 'Not all nodes have the same time:\n {}'.format(
+                             json.dumps(result, indent=4))
 
 
 def test_ntp_peers_state(local_salt_client):
-    """Test gets ntpq peers state and check the system peer is declared"""
+    """Test gets ntpq peers state and checks the system peer is declared"""
 
-    active_nodes = utils.get_active_nodes(os.path.basename(__file__))
+    active_nodes = utils.get_active_nodes()
     state = local_salt_client.cmd(
         utils.list_to_target_string(active_nodes, 'or'),
         'cmd.run',
diff --git a/test_set/cvp-sanity/tests/test_stacklight.py b/test_set/cvp-sanity/tests/test_stacklight.py
index bd6401d..c91a5f6 100644
--- a/test_set/cvp-sanity/tests/test_stacklight.py
+++ b/test_set/cvp-sanity/tests/test_stacklight.py
@@ -121,13 +121,13 @@
 
 
 @pytest.mark.usefixtures('check_prometheus')
-def test_prometheus_alert_count(local_salt_client):
+def test_prometheus_alert_count(local_salt_client, ctl_nodes_pillar):
     IP = utils.get_monitoring_ip('cluster_public_host')
     # keystone:server can return 3 nodes instead of 1
     # this will be fixed later
     # TODO
     nodes_info = local_salt_client.cmd(
-        'keystone:server',
+        ctl_nodes_pillar,
         'cmd.run',
         ['curl -s http://{}:15010/alerts | grep icon-chevron-down | '
          'grep -v "0 active"'.format(IP)],
diff --git a/test_set/cvp-sanity/tests/test_ui_addresses.py b/test_set/cvp-sanity/tests/test_ui_addresses.py
index 1bb67ec..a2f0f2d 100644
--- a/test_set/cvp-sanity/tests/test_ui_addresses.py
+++ b/test_set/cvp-sanity/tests/test_ui_addresses.py
@@ -2,7 +2,8 @@
 import pytest
 
 
-def test_ui_horizon(local_salt_client):
+@pytest.mark.usefixtures('check_openstack')
+def test_ui_horizon(local_salt_client, ctl_nodes_pillar):
     salt_output = local_salt_client.cmd(
         'horizon:server',
         'pillar.get',
@@ -13,7 +14,7 @@
     IP = [salt_output[node] for node in salt_output
           if salt_output[node]]
     result = local_salt_client.cmd(
-        'keystone:server',
+        ctl_nodes_pillar,
         'cmd.run',
         ['curl --insecure https://{}/auth/login/ 2>&1 | \
          grep Login'.format(IP[0])],
@@ -23,14 +24,30 @@
         IP[0])
 
 
+@pytest.mark.usefixtures('check_openstack')
+def test_public_openstack(local_salt_client, ctl_nodes_pillar):
+    IP = utils.get_monitoring_ip('cluster_public_host')
+    protocol = 'https'
+    port = '5000'
+    url = "{}://{}:{}/v3".format(protocol, IP, port)
+    result = local_salt_client.cmd(
+        ctl_nodes_pillar,
+        'cmd.run',
+        ['curl -k {}/ 2>&1 | \
+         grep stable'.format(url)],
+        expr_form='pillar')
+    assert len(result[result.keys()[0]]) != 0, \
+        'Public Openstack url is not reachable on {} from ctl nodes'.format(url)
+
+
 @pytest.mark.usefixtures('check_kibana')
-def test_internal_ui_kibana(local_salt_client):
+def test_internal_ui_kibana(local_salt_client, ctl_nodes_pillar):
     IP = utils.get_monitoring_ip('stacklight_log_address')
     protocol = 'http'
     port = '5601'
     url = "{}://{}:{}".format(protocol, IP, port)
     result = local_salt_client.cmd(
-        'keystone:server',
+        ctl_nodes_pillar,
         'cmd.run',
         ['curl {}/app/kibana 2>&1 | \
          grep loading'.format(url)],
@@ -41,13 +58,13 @@
 
 
 @pytest.mark.usefixtures('check_kibana')
-def test_public_ui_kibana(local_salt_client):
-    IP = utils.get_monitoring_ip('openstack_proxy_address')
+def test_public_ui_kibana(local_salt_client, ctl_nodes_pillar):
+    IP = utils.get_monitoring_ip('cluster_public_host')
     protocol = 'https'
     port = '5601'
     url = "{}://{}:{}".format(protocol, IP, port)
     result = local_salt_client.cmd(
-        'keystone:server',
+        ctl_nodes_pillar,
         'cmd.run',
         ['curl {}/app/kibana 2>&1 | \
          grep loading'.format(url)],
@@ -58,13 +75,13 @@
 
 
 @pytest.mark.usefixtures('check_prometheus')
-def test_internal_ui_prometheus(local_salt_client):
+def test_internal_ui_prometheus(local_salt_client, ctl_nodes_pillar):
     IP = utils.get_monitoring_ip('stacklight_monitor_address')
     protocol = 'http'
     port = '15010'
     url = "{}://{}:{}".format(protocol, IP, port)
     result = local_salt_client.cmd(
-        'keystone:server',
+        ctl_nodes_pillar,
         'cmd.run',
         ['curl {}/graph 2>&1 | \
          grep Prometheus'.format(url)],
@@ -75,13 +92,13 @@
 
 
 @pytest.mark.usefixtures('check_prometheus')
-def test_public_ui_prometheus(local_salt_client):
-    IP = utils.get_monitoring_ip('openstack_proxy_address')
+def test_public_ui_prometheus(local_salt_client, ctl_nodes_pillar):
+    IP = utils.get_monitoring_ip('cluster_public_host')
     protocol = 'https'
     port = '15010'
     url = "{}://{}:{}".format(protocol, IP, port)
     result = local_salt_client.cmd(
-        'keystone:server',
+        ctl_nodes_pillar,
         'cmd.run',
         ['curl {}/graph 2>&1 | \
          grep Prometheus'.format(url)],
@@ -92,13 +109,13 @@
 
 
 @pytest.mark.usefixtures('check_prometheus')
-def test_internal_ui_alert_manager(local_salt_client):
+def test_internal_ui_alert_manager(local_salt_client, ctl_nodes_pillar):
     IP = utils.get_monitoring_ip('stacklight_monitor_address')
     protocol = 'http'
     port = '15011'
     url = "{}://{}:{}".format(protocol, IP, port)
     result = local_salt_client.cmd(
-        'keystone:server',
+        ctl_nodes_pillar,
         'cmd.run',
         ['curl -s {}/ | grep Alertmanager'.format(url)],
         expr_form='pillar')
@@ -108,13 +125,13 @@
 
 
 @pytest.mark.usefixtures('check_prometheus')
-def test_public_ui_alert_manager(local_salt_client):
-    IP = utils.get_monitoring_ip('openstack_proxy_address')
+def test_public_ui_alert_manager(local_salt_client, ctl_nodes_pillar):
+    IP = utils.get_monitoring_ip('cluster_public_host')
     protocol = 'https'
     port = '15011'
     url = "{}://{}:{}".format(protocol, IP, port)
     result = local_salt_client.cmd(
-        'keystone:server',
+        ctl_nodes_pillar,
         'cmd.run',
         ['curl -s {}/ | grep Alertmanager'.format(url)],
         expr_form='pillar')
@@ -124,13 +141,13 @@
 
 
 @pytest.mark.usefixtures('check_grafana')
-def test_internal_ui_grafana(local_salt_client):
+def test_internal_ui_grafana(local_salt_client, ctl_nodes_pillar):
     IP = utils.get_monitoring_ip('stacklight_monitor_address')
     protocol = 'http'
     port = '15013'
     url = "{}://{}:{}".format(protocol, IP, port)
     result = local_salt_client.cmd(
-        'keystone:server',
+        ctl_nodes_pillar,
         'cmd.run',
         ['curl {}/login 2>&1 | grep Grafana'.format(url)],
         expr_form='pillar')
@@ -140,13 +157,13 @@
 
 
 @pytest.mark.usefixtures('check_grafana')
-def test_public_ui_grafana(local_salt_client):
-    IP = utils.get_monitoring_ip('openstack_proxy_address')
+def test_public_ui_grafana(local_salt_client, ctl_nodes_pillar):
+    IP = utils.get_monitoring_ip('cluster_public_host')
     protocol = 'https'
     port = '8084'
     url = "{}://{}:{}".format(protocol, IP, port)
     result = local_salt_client.cmd(
-        'keystone:server',
+        ctl_nodes_pillar,
         'cmd.run',
         ['curl {}/login 2>&1 | grep Grafana'.format(url)],
         expr_form='pillar')
@@ -155,13 +172,13 @@
 
 
 @pytest.mark.usefixtures('check_alerta')
-def test_internal_ui_alerta(local_salt_client):
+def test_internal_ui_alerta(local_salt_client, ctl_nodes_pillar):
     IP = utils.get_monitoring_ip('stacklight_monitor_address')
     protocol = 'http'
     port = '15017'
     url = "{}://{}:{}".format(protocol, IP, port)
     result = local_salt_client.cmd(
-        'keystone:server',
+        ctl_nodes_pillar,
         'cmd.run',
         ['curl {}/ 2>&1 | \
          grep Alerta'.format(url)],
@@ -171,16 +188,48 @@
 
 
 @pytest.mark.usefixtures('check_alerta')
-def test_public_ui_alerta(local_salt_client):
-    IP = utils.get_monitoring_ip('openstack_proxy_address')
+def test_public_ui_alerta(local_salt_client, ctl_nodes_pillar):
+    IP = utils.get_monitoring_ip('cluster_public_host')
     protocol = 'https'
     port = '15017'
     url = "{}://{}:{}".format(protocol, IP, port)
     result = local_salt_client.cmd(
-        'keystone:server',
+        ctl_nodes_pillar,
         'cmd.run',
         ['curl {}/ 2>&1 | \
          grep Alerta'.format(url)],
         expr_form='pillar')
     assert len(result[result.keys()[0]]) != 0, \
         'Public Alerta page is not reachable on {} from ctl nodes'.format(url)
+
+
+@pytest.mark.usefixtures('check_drivetrain')
+def test_public_ui_jenkins(local_salt_client, ctl_nodes_pillar):
+    IP = utils.get_monitoring_ip('cluster_public_host')
+    protocol = 'https'
+    port = '8081'
+    url = "{}://{}:{}".format(protocol, IP, port)
+    result = local_salt_client.cmd(
+        ctl_nodes_pillar,
+        'cmd.run',
+        ['curl -k {}/ 2>&1 | \
+         grep Authentication'.format(url)],
+        expr_form='pillar')
+    assert len(result[result.keys()[0]]) != 0, \
+        'Public Jenkins page is not reachable on {} from ctl nodes'.format(url)
+
+
+@pytest.mark.usefixtures('check_drivetrain')
+def test_public_ui_gerrit(local_salt_client, ctl_nodes_pillar):
+    IP = utils.get_monitoring_ip('cluster_public_host')
+    protocol = 'https'
+    port = '8070'
+    url = "{}://{}:{}".format(protocol, IP, port)
+    result = local_salt_client.cmd(
+        ctl_nodes_pillar,
+        'cmd.run',
+        ['curl -k {}/ 2>&1 | \
+         grep "Gerrit Code Review"'.format(url)],
+        expr_form='pillar')
+    assert len(result[result.keys()[0]]) != 0, \
+        'Public Gerrit page is not reachable on {} from ctl nodes'.format(url)
