diff --git a/tcp_tests/managers/runtestmanager.py b/tcp_tests/managers/runtestmanager.py
index 7325e2e..c6f3c5e 100644
--- a/tcp_tests/managers/runtestmanager.py
+++ b/tcp_tests/managers/runtestmanager.py
@@ -50,6 +50,8 @@
         self.run_cmd = run_cmd or self.run_cmd
         self.master_name = self.underlay.get_target_node_names(
             self.master_host)[0]
+        self.master_minion = self.underlay.get_target_minion_ids(
+            self.master_host)[0]
         self.__target_name = None
 
     @property
@@ -60,7 +62,7 @@
     def target_name(self):
         if not self.__target_name:
             target_host = self.__salt_api.get_single_pillar(
-                tgt=self.master_name,
+                tgt=self.master_minion,
                 pillar="runtest:tempest:test_target")
             if target_host[-1] == "*":
                 target_host = target_host[:-1]
diff --git a/tcp_tests/managers/underlay_ssh_manager.py b/tcp_tests/managers/underlay_ssh_manager.py
index cf1fb2b..6b5bebb 100644
--- a/tcp_tests/managers/underlay_ssh_manager.py
+++ b/tcp_tests/managers/underlay_ssh_manager.py
@@ -571,3 +571,9 @@
         return [node_name for node_name
                 in self.node_names()
                 if node_name.startswith(target)]
+
+    def get_target_minion_ids(self, target='gtw01.'):
+        """Get all minion ids which names starts with <target>"""
+        return [minion_id for minion_id
+                in self.minion_ids()
+                if minion_id.startswith(target)]
diff --git a/tcp_tests/tests/system/test_cvp_pipelines.py b/tcp_tests/tests/system/test_cvp_pipelines.py
index 5d2e060..80154a1 100644
--- a/tcp_tests/tests/system/test_cvp_pipelines.py
+++ b/tcp_tests/tests/system/test_cvp_pipelines.py
@@ -120,6 +120,7 @@
         job_name = 'cvp-sanity'
         job_parameters = {
             'TEST_SET': '/var/lib/cvp-sanity/cvp_checks/tests/',
+            'TESTS_SETTINGS': 'drivetrain_version=proposed',
         }
 
         show_step(2)
@@ -147,3 +148,67 @@
 
         assert cvp_func_sanity_result == 'SUCCESS', "{0}\n{1}".format(
             description, '\n'.join(stages))
+
+    @pytest.mark.grab_versions
+    @pytest.mark.parametrize("_", [settings.ENV_NAME])
+    @pytest.mark.run_cvp_ha_smoke
+    def test_run_cvp_ha_smoke(self, underlay_actions, salt_actions,
+                              show_step, _):
+        """Runner for Pipeline CVP - HA tests
+
+        Scenario:
+            1. Get CICD Jenkins access credentials from salt
+            2. Run job cvp-ha with tempest set=smoke
+            3. Get passed stages from cvp-ha
+        """
+        salt = salt_actions
+        show_step(1)
+
+        tgt = 'I@docker:client:stack:jenkins and cid01*'
+        jenkins_host = salt.get_single_pillar(
+            tgt=tgt, pillar="jenkins:client:master:host")
+        jenkins_port = salt.get_single_pillar(
+            tgt=tgt, pillar="jenkins:client:master:port")
+        jenkins_url = 'http://{0}:{1}'.format(jenkins_host, jenkins_port)
+        jenkins_user = salt.get_single_pillar(
+            tgt=tgt, pillar="jenkins:client:master:username")
+        jenkins_pass = salt.get_single_pillar(
+            tgt=tgt, pillar="jenkins:client:master:password")
+        jenkins_start_timeout = 60
+        jenkins_build_timeout = 1800
+
+        tempest_target_node = salt.get_single_pillar(
+            tgt='cfg01*',
+            pillar="runtest:tempest:test_target")
+
+        job_name = 'cvp-ha'
+        job_parameters = {
+            'TEMPEST_TARGET_NODE': tempest_target_node,
+            'TEMPEST_TEST_PATTERN': 'set=smoke',
+        }
+
+        show_step(2)
+        cvp_ha_smoke_result = run_jenkins_job.run_job(
+            host=jenkins_url,
+            username=jenkins_user,
+            password=jenkins_pass,
+            start_timeout=jenkins_start_timeout,
+            build_timeout=jenkins_build_timeout,
+            verbose=True,
+            job_name=job_name,
+            job_parameters=job_parameters,
+            job_output_prefix='[ cvp-ha/{build_number} {time} ] ')
+
+        show_step(3)
+        (description, stages) = get_jenkins_job_stages.get_deployment_result(
+            host=jenkins_url,
+            username=jenkins_user,
+            password=jenkins_pass,
+            job_name=job_name,
+            build_number='lastBuild')
+
+        LOG.info(description)
+        LOG.info('\n'.join(stages))
+
+        assert cvp_ha_smoke_result == 'SUCCESS', "{0}\n{1}".format(
+            description, '\n'.join(stages))
