Add tests to run cvp-func and cvp-sanity jobs

New pytest marks:
- run_cvp_func_smoke
- run_cvp_func_sanity

New SaltManager method:
- get_single_pillar() , to get a single value from
  a single minion

Minor changes to get_jenkins_job_stages.py and
run_jenkins_job.py, to call them with required
parameters.

Change-Id: Ia2dd039cc1a04ac6fb4cb2020f09df473f9c5104
Closes-Bug: PROD-21659
diff --git a/tcp_tests/utils/run_jenkins_job.py b/tcp_tests/utils/run_jenkins_job.py
index acc2e9f..86a3703 100755
--- a/tcp_tests/utils/run_jenkins_job.py
+++ b/tcp_tests/utils/run_jenkins_job.py
@@ -97,10 +97,10 @@
     return parser
 
 
-def print_build_header(build, job_params, opts):
+def print_build_header(build, job_params, build_timeout):
     print('\n#############################################################')
     print('##### Building job [{0}] #{1} (timeout={2}) with the following '
-          'parameters:'.format(build[0], build[1], opts.build_timeout))
+          'parameters:'.format(build[0], build[1], build_timeout))
     print('##### ' + '\n##### '.join(
         [str(key) + ": " + str(val) for key, val in job_params.iteritems()]
     ))
@@ -114,41 +114,44 @@
     print('#############################################################\n')
 
 
-def run_job(opts):
+def run_job(host, username, password,
+            job_name, job_parameters=None, job_output_prefix='',
+            start_timeout=1800, build_timeout=3600 * 4, verbose=False):
 
     jenkins = JenkinsClient(
-        host=opts.host,
-        username=opts.username,
-        password=opts.password)
+        host=host,
+        username=username,
+        password=password)
 
-    job_params = jenkins.make_defults_params(opts.job_name)
-    job_params.update(opts.job_parameters)
+    job_params = jenkins.make_defults_params(job_name)
+    if job_parameters is not None:  # job_parameters = {}
+        job_params.update(job_parameters)
 
-    build = jenkins.run_build(opts.job_name,
+    build = jenkins.run_build(job_name,
                               job_params,
-                              verbose=opts.verbose,
-                              timeout=opts.start_timeout)
-    if opts.verbose:
-        print_build_header(build, job_params, opts)
+                              verbose=verbose,
+                              timeout=start_timeout)
+    if verbose:
+        print_build_header(build, job_params, build_timeout)
 
     try:
         jenkins.wait_end_of_build(
             name=build[0],
             build_id=build[1],
-            timeout=opts.build_timeout,
+            timeout=build_timeout,
             interval=1,
-            verbose=opts.verbose,
-            job_output_prefix=opts.job_output_prefix)
+            verbose=verbose,
+            job_output_prefix=job_output_prefix)
     except Exception as e:
         print(str(e))
         raise
 
     result = jenkins.build_info(name=build[0],
                                 build_id=build[1])['result']
-    if opts.verbose:
-        print_build_footer(build, result, opts.host)
+    if verbose:
+        print_build_footer(build, result, host)
 
-    return EXIT_CODES.get(result, 2)
+    return result
 
 
 def main(args=None):
@@ -160,8 +163,8 @@
         parser.print_help()
         return 10
     else:
-        exit_code = run_job(opts)
-        return exit_code
+        result = run_job(opts)
+        return EXIT_CODES.get(result, 2)
 
 
 if __name__ == "__main__":