lava: Use safe loads for YAML
[lttng-ci.git] / scripts / system-tests / lava2-submit.py
index 4ed8a26a719e867a64a0591edd1532681e7b1249..5a08abd683236caf2dca1f94f6787abdd8bb2e3c 100644 (file)
@@ -28,7 +28,8 @@ import yaml
 from jinja2 import Environment, FileSystemLoader
 
 USERNAME = 'lava-jenkins'
-HOSTNAME = 'lava-master-02.internal.efficios.com'
+HOSTNAME = os.environ.get('LAVA_HOST', 'lava-master-03.internal.efficios.com')
+PROTO = os.environ.get('LAVA_PROTO', 'https')
 OBJSTORE_URL = "https://obj.internal.efficios.com/lava/results/"
 
 def parse_stable_version(stable_version_string):
@@ -82,15 +83,15 @@ def check_job_all_test_cases_state_count(server, job):
     """
     print("Testcase result:")
     content = server.results.get_testjob_results_yaml(str(job))
-    testcases = yaml.unsafe_load(content)
+    testcases = yaml.load(content)
 
     passed_tests = 0
     failed_tests = 0
     for testcase in testcases:
         if testcase['result'] != 'pass':
             print(
-                "\tFAILED {}\n\t\t See http://{}{}".format(
-                    testcase['name'], HOSTNAME, testcase['url']
+                "\tFAILED {}\n\t\t See {}://{}{}".format(
+                    testcase['name'], PROTO, HOSTNAME, testcase['url']
                 )
             )
             failed_tests += 1
@@ -104,7 +105,7 @@ def print_test_output(server, job):
     Parse the attachment of the testcase to fetch the stdout of the test suite
     """
     job_finished, log = server.scheduler.jobs.logs(str(job))
-    logs = yaml.unsafe_load(log.data.decode('ascii'))
+    logs = yaml.load(log.data.decode('ascii'))
     print_line = False
     for line in logs:
         if line['lvl'] != 'target':
@@ -128,13 +129,28 @@ def get_vlttng_cmd(
     Return vlttng cmd to be used in the job template for setup.
     """
 
+    major_version, minor_version = parse_stable_version(lttng_version)
+
+    urcu_profile = ""
+    if lttng_version == 'master' or (major_version >= 2 and minor_version >= 11):
+        urcu_profile = "urcu-master"
+    else:
+        urcu_profile = "urcu-stable-0.12"
+
+    # Starting with 2.14, babeltrace2 is the reader for testing.
+    if lttng_version == 'master' or (major_version >= 2 and minor_version >= 14):
+        babeltrace_profile = " --profile babeltrace2-stable-2.0 --profile babeltrace2-python"
+        babeltrace_overrides = " --override projects.babeltrace2.build-env.PYTHON=python3 --override projects.babeltrace2.build-env.PYTHON_CONFIG=python3-config -o projects.babeltrace2.configure+=--disable-man-pages"
+    else:
+        babeltrace_profile = " --profile babeltrace-stable-1.5 --profile babeltrace-python"
+        babeltrace_overrides = " --override projects.babeltrace.build-env.PYTHON=python3 --override projects.babeltrace.build-env.PYTHON_CONFIG=python3-config"
+
+
     vlttng_cmd = (
-        'vlttng --jobs=$(nproc) --profile urcu-master'
-        ' --override projects.babeltrace.build-env.PYTHON=python3'
-        ' --override projects.babeltrace.build-env.PYTHON_CONFIG=python3-config'
-        ' --profile babeltrace-stable-1.4'
-        ' --profile babeltrace-python'
-        ' --profile lttng-tools-master'
+        'vlttng --jobs=$(nproc) --profile ' + urcu_profile
+        + babeltrace_profile
+        + babeltrace_overrides
+        + ' --profile lttng-tools-master'
         ' --override projects.lttng-tools.source='
         + lttng_tools_url
         + ' --override projects.lttng-tools.checkout='
@@ -152,7 +168,6 @@ def get_vlttng_cmd(
             + ' --profile lttng-ust-no-man-pages'
         )
 
-    major_version, minor_version = parse_stable_version(lttng_version)
 
     if lttng_version == 'master' or (major_version >= 2 and minor_version >= 11):
         vlttng_cmd += (
@@ -167,7 +182,7 @@ def get_vlttng_cmd(
 
 
 def main():
-    nfsrootfs = "https://obj.internal.efficios.com/lava/rootfs/rootfs_amd64_xenial_2018-12-05.tar.gz"
+    send_retry_limit = 10
     test_type = None
     parser = argparse.ArgumentParser(description='Launch baremetal test using Lava')
     parser.add_argument('-t', '--type', required=True)
@@ -181,6 +196,12 @@ def main():
     parser.add_argument('-uu', '--ust-url', required=False)
     parser.add_argument('-uc', '--ust-commit', required=False)
     parser.add_argument('-d', '--debug', required=False, action='store_true')
+    parser.add_argument(
+        '-r', '--rootfs-url', required=False,
+        default="https://obj.internal.efficios.com/lava/rootfs/rootfs_amd64_jammy_2023-05-18.tar.gz"
+    )
+    parser.add_argument('--ci-repo', required=False, default='https://github.com/lttng/lttng-ci.git')
+    parser.add_argument('--ci-branch', required=False, default='master')
     args = parser.parse_args()
 
     if args.type not in TestType.values:
@@ -221,7 +242,7 @@ def main():
     if args.lttng_version == "master":
         lttng_version_string = "master"
     elif args.lttng_version == "canary":
-        lttng_version_string = "2.10"
+        lttng_version_string = "2.13"
     else:
         major, minor = parse_stable_version(args.lttng_version)
         lttng_version_string = str(major) + "." + str(minor)
@@ -241,12 +262,15 @@ def main():
     context['lttng_version_string'] = lttng_version_string
 
     context['kernel_url'] = args.kernel
-    context['nfsrootfs_url'] = nfsrootfs
+    context['nfsrootfs_url'] = args.rootfs_url
     context['lttng_modules_url'] = args.lmodule
     context['jenkins_build_id'] = args.build_id
 
     context['kprobe_round_nb'] = 10
 
+    context['ci_repo'] = args.ci_repo
+    context['ci_branch'] = args.ci_branch
+
     render = jinja_template.render(context)
 
     print('Job to be submitted:')
@@ -257,10 +281,10 @@ def main():
         return 0
 
     server = xmlrpc.client.ServerProxy(
-        'http://%s:%s@%s/RPC2' % (USERNAME, lava_api_key, HOSTNAME)
+        '%s://%s:%s@%s/RPC2' % (PROTO, USERNAME, lava_api_key, HOSTNAME)
     )
 
-    for attempt in range(10):
+    for attempt in range(1, send_retry_limit + 1):
         try:
             jobid = server.scheduler.submit_job(render)
         except xmlrpc.client.ProtocolError as error:
@@ -273,11 +297,19 @@ def main():
             continue
         else:
             break
+    # Early exit when the maximum number of retry is reached.
+    if attempt == send_retry_limit:
+            print(
+                'Protocol error on submit, maximum number of retry reached ({})'.format(
+                    attempt
+                )
+            )
+            return -1
 
     print('Lava jobid:{}'.format(jobid))
     print(
-        'Lava job URL: http://lava-master-02.internal.efficios.com/scheduler/job/{}'.format(
-            jobid
+        'Lava job URL: {}://{}/scheduler/job/{}'.format(
+            PROTO, HOSTNAME, jobid
         )
     )
 
This page took 0.025854 seconds and 4 git commands to generate.