From 5f1219bc3256aed23f649380fde97197d1f3d60f Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 15 Nov 2024 09:46:43 +0100 Subject: [PATCH 01/14] CI GetContainerHealth(): speed up checks --- ci-scripts/cls_containerize.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 28f1abbfac..5b8f3b4180 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -159,12 +159,11 @@ def GetContainerHealth(ssh, containerName): return False if 'db_init' in containerName or 'db-init' in containerName: # exits with 0, there cannot be healthy return True - time.sleep(5) - for _ in range(3): + for _ in range(8): result = ssh.run(f'docker inspect --format="{{{{.State.Health.Status}}}}" {containerName}', silent=True) if result.stdout == 'healthy': return True - time.sleep(10) + time.sleep(5) return False def ExistEnvFilePrint(ssh, wd, prompt='env vars in existing'): From a80c17cc31c54b544121aea4264ca34ebbbf8308 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 15 Nov 2024 14:26:20 +0100 Subject: [PATCH 02/14] CI: Remove useless parameter --- ci-scripts/cls_cluster.py | 2 +- ci-scripts/main.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci-scripts/cls_cluster.py b/ci-scripts/cls_cluster.py index 503529d256..c117df1436 100644 --- a/ci-scripts/cls_cluster.py +++ b/ci-scripts/cls_cluster.py @@ -240,7 +240,7 @@ class Cluster: def _undeploy_pod(self, filename): self.cmd.run(f'oc delete -f {filename}') - def PullClusterImage(self, HTML, RAN): + def PullClusterImage(self, HTML): if self.testSvrId == None: self.testSvrId = self.eNBIPAddress if self.imageToPull == '': HELP.GenericHelp(CONST.Version) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 2e595aa834..b4426e7c86 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -410,7 +410,7 @@ def ExecuteActionWithParam(action): string_field = test.findtext('test_svr_id') if (string_field is not None): CLUSTER.testSvrId = string_field - success = CLUSTER.PullClusterImage(HTML, RAN) + success = CLUSTER.PullClusterImage(HTML) else: logging.warning(f"unknown action {action}, skip step") From cf870d7ae9c5d1105e8bec0247315c1321733b33 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 15 Nov 2024 09:48:43 +0100 Subject: [PATCH 03/14] CI: Make output for .env test less verbose --- ci-scripts/cls_containerize.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 5b8f3b4180..f8c525116c 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -167,7 +167,7 @@ def GetContainerHealth(ssh, containerName): return False def ExistEnvFilePrint(ssh, wd, prompt='env vars in existing'): - ret = ssh.run(f'cat {wd}/.env', silent=True) + ret = ssh.run(f'cat {wd}/.env', silent=True, reportNonZero=False) if ret.returncode != 0: return False env_vars = ret.stdout.strip().splitlines() @@ -175,7 +175,7 @@ def ExistEnvFilePrint(ssh, wd, prompt='env vars in existing'): return True def WriteEnvFile(ssh, services, wd, tag): - ret = ssh.run(f'cat {wd}/.env', silent=True) + ret = ssh.run(f'cat {wd}/.env', silent=True, reportNonZero=False) registry = "oai-ci" # pull_images() gives us this registry path envs = {"REGISTRY":registry, "TAG": tag} if ret.returncode == 0: # it exists, we have to update From d00a614d4ebb40c4ca003471fa211f885a77e8a9 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 15 Nov 2024 09:49:49 +0100 Subject: [PATCH 04/14] CI move log folder creation right away at deployment time Some commands might use that folder before Ping/Iperf, in which it has been created. --- ci-scripts/cls_containerize.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index f8c525116c..d5cd216be7 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -220,7 +220,6 @@ def CopyinContainerLog(ssh, lSourcePath, yaml, containerName, filename): remote_filename = f"{lSourcePath}/cmake_targets/log/{filename}" ssh.run(f'docker logs {containerName} &> {remote_filename}') local_dir = f"{os.getcwd()}/../cmake_targets/log/{yaml}" - os.system(f'mkdir -p {local_dir}') local_filename = f"{local_dir}/{filename}" return ssh.copyin(remote_filename, local_filename) @@ -844,6 +843,9 @@ class Containerize(): lIpAddr, lSourcePath = self.GetCredentials(svr) logging.debug('\u001B[1m Deploying OAI Object on server: ' + lIpAddr + '\u001B[0m') yaml = self.yamlPath[self.eNB_instance].strip('/') + # creating the log folder by default + local_dir = f"{os.getcwd()}/../cmake_targets/log/{yaml.split('/')[-1]}" + os.system(f'mkdir -p {local_dir}') wd = f'{lSourcePath}/{yaml}' with cls_cmd.getConnection(lIpAddr) as ssh: From 5730df9ffcb3479ff4e257e7ab4b6357439f0318 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 15 Nov 2024 09:51:12 +0100 Subject: [PATCH 05/14] CI: Avoid python warning about wrong escape sequence --- ci-scripts/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index b4426e7c86..63be1b836e 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -634,7 +634,7 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re #(6 digits or less than 6 digits followed by +) for test in exclusion_tests: if (not re.match('^[0-9]{6}$', test) and - not re.match('^[0-9]{1,5}\+$', test)): + not re.match('^[0-9]{1,5}\\+$', test)): logging.error('exclusion test is invalidly formatted: ' + test) sys.exit(1) else: @@ -645,7 +645,7 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re #be verbose for test in requested_tests: if (re.match('^[0-9]{6}$', test) or - re.match('^[0-9]{1,5}\+$', test)): + re.match('^[0-9]{1,5}\\+$', test)): logging.info('test group/case requested: ' + test) else: logging.error('requested test is invalidly formatted: ' + test) From df9aec167e05e75af28ea5f8417e227e6ceec272 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 15 Nov 2024 09:56:35 +0100 Subject: [PATCH 06/14] CI: Allow ranCommitID to be "develop" This will be used to pull images with the tag "develop" (i.e., without a commit ID). --- ci-scripts/Jenkinsfile-tmp-ran | 2 +- ci-scripts/cls_containerize.py | 2 ++ ci-scripts/cls_oai_html.py | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ci-scripts/Jenkinsfile-tmp-ran b/ci-scripts/Jenkinsfile-tmp-ran index e1593d52a4..50e963e68b 100644 --- a/ci-scripts/Jenkinsfile-tmp-ran +++ b/ci-scripts/Jenkinsfile-tmp-ran @@ -153,7 +153,7 @@ pipeline { if (eNB_AllowMergeRequestProcess) { sh "git fetch" sh "./ci-scripts/doGitLabMerge.sh --src-branch ${eNB_Branch} --src-commit ${eNB_CommitID} --target-branch ${eNB_TargetBranch} --target-commit latest" - } else { + } else if (eNB_CommitID != 'develop') { sh "git fetch" sh "git checkout -f ${eNB_CommitID}" } diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index d5cd216be7..29f78ad6b0 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -70,6 +70,8 @@ def CreateWorkspace(host, sourcePath, ranRepository, ranCommitID, ranTargetBranc return ret.returncode == 0 def CreateTag(ranCommitID, ranBranch, ranAllowMerge): + if ranCommitID == 'develop': + return 'develop' shortCommit = ranCommitID[0:8] if ranAllowMerge: # Allowing contributor to have a name/branchName format diff --git a/ci-scripts/cls_oai_html.py b/ci-scripts/cls_oai_html.py index b2efcc66b7..8e99b20de7 100644 --- a/ci-scripts/cls_oai_html.py +++ b/ci-scripts/cls_oai_html.py @@ -147,7 +147,7 @@ class HTMLManagement(): self.htmlFile.write(' Commit ID \n') self.htmlFile.write(' ' + self.ranCommitID + '\n') self.htmlFile.write(' \n') - if self.ranAllowMerge != '': + if self.ranAllowMerge != '' and self.ranCommitID != 'develop': commit_message = subprocess.check_output("git log -n1 --pretty=format:\"%s\" " + self.ranCommitID, shell=True, universal_newlines=True) commit_message = commit_message.strip() self.htmlFile.write(' \n') From 3e51fcdf3318a01bbe8f24048b79006b340ac252 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 15 Nov 2024 09:58:55 +0100 Subject: [PATCH 07/14] CI: Provide possibility to pass in flexricTag --- ci-scripts/Jenkinsfile-tmp-ran | 16 ++++++++++++---- ci-scripts/args_parse.py | 3 +++ ci-scripts/cls_containerize.py | 8 +++++--- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/ci-scripts/Jenkinsfile-tmp-ran b/ci-scripts/Jenkinsfile-tmp-ran index 50e963e68b..bc8c742bb5 100644 --- a/ci-scripts/Jenkinsfile-tmp-ran +++ b/ci-scripts/Jenkinsfile-tmp-ran @@ -58,6 +58,8 @@ def eNB_CommitID def eNB_AllowMergeRequestProcess = false def eNB_TargetBranch +def flexricOption = "" + pipeline { agent { label pythonExecutor @@ -148,6 +150,13 @@ pipeline { allParametersPresent = false } + if (params.Flexric_Tag != null) { + echo "This pipeline is configured to run with a FlexRIC deployment." + echo "Appending FlexRicTag option to the list of options" + flexricOption = "--FlexRicTag=${params.Flexric_Tag}" + echo "Using new Flexric option: ${flexricOption}" + } + if (allParametersPresent) { echo "All parameters are present" if (eNB_AllowMergeRequestProcess) { @@ -158,8 +167,7 @@ pipeline { sh "git checkout -f ${eNB_CommitID}" } } else { - echo "Some parameters are missing" - sh "./ci-scripts/fail.sh" + error "Some parameters are missing" } } } @@ -190,13 +198,13 @@ pipeline { [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.eNB_Credentials}", usernameVariable: 'eNB_Username', passwordVariable: 'eNB_Password'], [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.EPC_Credentials}", usernameVariable: 'EPC_Username', passwordVariable: 'EPC_Password'], ]) { - sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${mainPythonAllXmlFiles}" + sh "python3 main.py --mode=InitiateHtml --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${flexricOption} ${mainPythonAllXmlFiles}" String[] myXmlTestSuite = testXMLFile.split("\\r?\\n") for (xmlFile in myXmlTestSuite) { if (fileExists(xmlFile)) { try { timeout (time: 60, unit: 'MINUTES') { - sh "python3 main.py --mode=TesteNB --eNBIPAddress=${params.eNB_IPAddress} --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --XMLTestFile=${xmlFile}" + sh "python3 main.py --mode=TesteNB --ranRepository=${eNB_Repository} --ranBranch=${eNB_Branch} --ranCommitID=${eNB_CommitID} --ranAllowMerge=${eNB_AllowMergeRequestProcess} --ranTargetBranch=${eNB_TargetBranch} ${flexricOption} --eNBIPAddress=${params.eNB_IPAddress} --eNBUserName=${eNB_Username} --eNBPassword=${eNB_Password} --eNBSourceCodePath=${params.eNB_SourceCodePath} --EPCIPAddress=${params.EPC_IPAddress} --EPCType=${params.EPC_Type} --EPCUserName=${EPC_Username} --EPCPassword=${EPC_Password} --EPCSourceCodePath=${params.EPC_SourceCodePath} --XMLTestFile=${xmlFile}" } } catch (Exception e) { currentBuild.result = 'FAILURE' diff --git a/ci-scripts/args_parse.py b/ci-scripts/args_parse.py index 7d753d21c7..c1a13eb9bf 100644 --- a/ci-scripts/args_parse.py +++ b/ci-scripts/args_parse.py @@ -264,6 +264,9 @@ def ArgsParse(argvs,CiTestObj,RAN,HTML,EPC,CONTAINERS,HELP,SCA,PHYSIM,CLUSTER): elif re.match('^\-\-BuildId=(.+)$', myArgv, re.IGNORECASE): matchReg = re.match('^\-\-BuildId=(.+)$', myArgv, re.IGNORECASE) RAN.BuildId = matchReg.group(1) + elif re.match('^\-\-FlexRicTag=(.+)$', myArgv, re.IGNORECASE): + matchReg = re.match('^\-\-FlexRicTag=(.+)$', myArgv, re.IGNORECASE) + CONTAINERS.flexricTag = matchReg.group(1) else: HELP.GenericHelp(CONST.Version) sys.exit('Invalid Parameter: ' + myArgv) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 29f78ad6b0..287144be86 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -176,10 +176,10 @@ def ExistEnvFilePrint(ssh, wd, prompt='env vars in existing'): logging.info(f'{prompt} {wd}/.env: {env_vars}') return True -def WriteEnvFile(ssh, services, wd, tag): +def WriteEnvFile(ssh, services, wd, tag, flexric_tag): ret = ssh.run(f'cat {wd}/.env', silent=True, reportNonZero=False) registry = "oai-ci" # pull_images() gives us this registry path - envs = {"REGISTRY":registry, "TAG": tag} + envs = {"REGISTRY":registry, "TAG": tag, "FLEXRIC_TAG": flexric_tag} if ret.returncode == 0: # it exists, we have to update # transforms env file to dictionary old_envs = {} @@ -340,6 +340,8 @@ class Containerize(): #checkers from xml self.ran_checkers={} + self.flexricTag = '' + #----------------------------------------------------------- # Container management functions #----------------------------------------------------------- @@ -859,7 +861,7 @@ class Containerize(): return False ExistEnvFilePrint(ssh, wd) - WriteEnvFile(ssh, services, wd, self.deploymentTag) + WriteEnvFile(ssh, services, wd, self.deploymentTag, self.flexricTag) logging.info(f"will start services {services}") status = ssh.run(f'docker compose -f {wd}/docker-compose.y*ml up -d -- {services}') From a48728ba3581e9c3040d8bef873d954342c41eb7 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 15 Nov 2024 14:31:49 +0100 Subject: [PATCH 08/14] CI: Push_Image_to_Local_Registry(): harmonize code - pass parameter directly instead of indirectly via class - harmonize to svr_id to harmonize parameter with parameters in the next commit (and towards a future harmonization of directly taking node names instead of "IDs") --- ci-scripts/cls_containerize.py | 5 ++--- ci-scripts/main.py | 6 ++---- ci-scripts/xml_files/container_image_build.xml | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 287144be86..34be8fdb1d 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -334,7 +334,6 @@ class Containerize(): self.cliOptions = '' self.imageToCopy = '' - self.registrySvrId = '' self.testSvrId = '' self.imageToPull = [] #checkers from xml @@ -725,8 +724,8 @@ class Containerize(): HTML.CreateHtmlTabFooter(False) return False - def Push_Image_to_Local_Registry(self, HTML): - lIpAddr, lSourcePath = self.GetCredentials(self.registrySvrId) + def Push_Image_to_Local_Registry(self, HTML, svr_id): + lIpAddr, lSourcePath = self.GetCredentials(svr_id) logging.debug('Pushing images from server: ' + lIpAddr) ssh = cls_cmd.getConnection(lIpAddr) imagePrefix = 'porcepix.sboai.cs.eurecom.fr' diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 63be1b836e..7b6ee6fb25 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -370,10 +370,8 @@ def ExecuteActionWithParam(action): success = SCA.CppCheckAnalysis(HTML) elif action == 'Push_Local_Registry': - string_field = test.findtext('registry_svr_id') - if (string_field is not None): - CONTAINERS.registrySvrId = string_field - success = CONTAINERS.Push_Image_to_Local_Registry(HTML) + svr_id = test.findtext('svr_id') + success = CONTAINERS.Push_Image_to_Local_Registry(HTML, svr_id) elif action == 'Pull_Local_Registry': string_field = test.findtext('test_svr_id') diff --git a/ci-scripts/xml_files/container_image_build.xml b/ci-scripts/xml_files/container_image_build.xml index 58b3c00d5e..7db63e4281 100644 --- a/ci-scripts/xml_files/container_image_build.xml +++ b/ci-scripts/xml_files/container_image_build.xml @@ -49,7 +49,7 @@ Push_Local_Registry Push Images to Local Registry - 0 + 0 From dee9ce26dba93333d57ce1fe41e964a97006accd Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 15 Nov 2024 15:23:51 +0100 Subject: [PATCH 09/14] CI: Pull_Image_from_Registry(): harmonize code - pass parameter directly instead of indirectly via class - call it simply "images", to harmonize with clean-function later - harmonize to svr_id as in the previous commit - rewrite function to use with-statement with cls_cmd - optionally pass a tag to use (which will be used in a test, and can be used to pull flexric) - Introduce Pull_Image() which does the actual pulling, can pull from any registry, and will be reused in the case of pulling from cluster. --- ci-scripts/cls_containerize.py | 70 +++++++++---------- ci-scripts/main.py | 11 +-- .../xml_files/container_4g_l2sim_tdd.xml | 4 +- .../container_4g_rfsim_fdd_05MHz.xml | 4 +- .../container_4g_rfsim_fdd_05MHz_noS1.xml | 4 +- .../container_4g_rfsim_fdd_10MHz.xml | 4 +- .../container_4g_rfsim_fdd_20MHz.xml | 4 +- .../xml_files/container_4g_rfsim_fembms.xml | 4 +- .../xml_files/container_4g_rfsim_mbms.xml | 4 +- .../container_4g_rfsim_tdd_05MHz.xml | 4 +- .../xml_files/container_5g_e1_rfsim.xml | 4 +- .../xml_files/container_5g_f1_rfsim.xml | 4 +- .../xml_files/container_5g_fdd_rfsim.xml | 4 +- ci-scripts/xml_files/container_5g_rfsim.xml | 4 +- .../xml_files/container_5g_rfsim_24prb.xml | 4 +- .../xml_files/container_5g_rfsim_2x2.xml | 4 +- .../container_5g_rfsim_fdd_phytest.xml | 4 +- .../container_5g_rfsim_fr2_32prb.xml | 4 +- .../xml_files/container_5g_rfsim_ntn_geo.xml | 4 +- .../xml_files/container_5g_rfsim_sidelink.xml | 4 +- .../xml_files/container_5g_rfsim_tdd_dora.xml | 4 +- .../xml_files/container_5g_rfsim_u0_25prb.xml | 4 +- .../container_lte_b200_fdd_05Mhz_tm1.xml | 4 +- ...container_lte_b200_fdd_05Mhz_tm1_if4_5.xml | 4 +- ...lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml | 4 +- .../container_lte_b200_fdd_10Mhz_tm1.xml | 4 +- .../container_lte_b200_fdd_10Mhz_tm1_cdrx.xml | 4 +- ...container_lte_b200_fdd_10Mhz_tm1_oaiue.xml | 8 +-- .../container_lte_b200_fdd_20Mhz_tm1.xml | 4 +- .../container_lte_b200_tdd_05Mhz_tm1.xml | 4 +- ...container_lte_b200_tdd_05Mhz_tm1_if4_5.xml | 4 +- .../container_lte_b200_tdd_05Mhz_tm2.xml | 4 +- .../container_lte_b200_tdd_10Mhz_tm1.xml | 4 +- .../container_lte_b200_tdd_20Mhz_tm1.xml | 4 +- ...e_b200_tdd_20Mhz_tm1_default_scheduler.xml | 4 +- .../container_lte_n3xx_tdd_2x2_tm1.xml | 4 +- .../container_lte_n3xx_tdd_2x2_tm2.xml | 4 +- .../xml_files/container_nsa_b200_quectel.xml | 8 +-- .../xml_files/container_sa_aerial_quectel.xml | 4 +- .../xml_files/container_sa_b200_quectel.xml | 4 +- .../container_sa_e1_b200_quectel.xml | 4 +- .../container_sa_f1_b200_quectel.xml | 4 +- .../container_sa_sc_b200_quectel.xml | 4 +- 43 files changed, 123 insertions(+), 130 deletions(-) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 34be8fdb1d..26c56c3d61 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -335,7 +335,6 @@ class Containerize(): self.imageToCopy = '' self.testSvrId = '' - self.imageToPull = [] #checkers from xml self.ran_checkers={} @@ -772,45 +771,44 @@ class Containerize(): HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK) return True - def Pull_Image_from_Local_Registry(self, HTML): - lIpAddr, lSourcePath = self.GetCredentials(self.testSvrId) - logging.debug('\u001B[1m Pulling image(s) on server: ' + lIpAddr + '\u001B[0m') - myCmd = cls_cmd.getConnection(lIpAddr) - imagePrefix = 'porcepix.sboai.cs.eurecom.fr' - response = myCmd.run(f'docker login -u oaicicd -p oaicicd {imagePrefix}') - if response.returncode != 0: - msg = 'Could not log into local registry' - logging.error(msg) - myCmd.close() - HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK) - return False - pulled_images = [] - for image in self.imageToPull: - tagToUse = CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge) - imageTag = f"{image}:{tagToUse}" - cmd = f'docker pull {imagePrefix}/{imageTag}' - response = myCmd.run(cmd, timeout=120) + def Pull_Image(cmd, images, tag, registry, username, password): + if username is not None and password is not None: + logging.info(f"logging into registry {username}@{registry}") + response = cmd.run(f'docker login -u {username} -p {password} {registry}', silent=True, reportNonZero=False) if response.returncode != 0: - logging.debug(response) - msg = f'Could not pull {image} from local registry : {imageTag}' + msg = f'Could not log into registry {username}@{registry}' logging.error(msg) - myCmd.close() - HTML.CreateHtmlTestRow('msg', 'KO', CONST.ALL_PROCESSES_OK) - return False - myCmd.run(f'docker tag {imagePrefix}/{imageTag} oai-ci/{imageTag}') - myCmd.run(f'docker rmi {imagePrefix}/{imageTag}') + return False, msg + pulled_images = [] + for image in images: + imageTag = f"{image}:{tag}" + response = cmd.run(f'docker pull {registry}/{imageTag}') + if response.returncode != 0: + msg = f'Could not pull {image} from local registry: {imageTag}' + logging.error(msg) + return False, msg + cmd.run(f'docker tag {registry}/{imageTag} oai-ci/{imageTag}') + cmd.run(f'docker rmi {registry}/{imageTag}') pulled_images += [f"oai-ci/{imageTag}"] - response = myCmd.run(f'docker logout {imagePrefix}') - if response.returncode != 0: - msg = 'Could not log off from local registry' - logging.error(msg) - myCmd.close() - HTML.CreateHtmlTestRow(msg, 'KO', CONST.ALL_PROCESSES_OK) - return False - myCmd.close() + if username is not None and password is not None: + response = cmd.run(f'docker logout {registry}') + # we have the images, if logout fails it's no problem msg = "Pulled Images:\n" + '\n'.join(pulled_images) - HTML.CreateHtmlTestRowQueue('N/A', 'OK', [msg]) - return True + return True, msg + + def Pull_Image_from_Registry(self, HTML, svr_id, images, tag=None, registry="porcepix.sboai.cs.eurecom.fr", username="oaicicd", password="oaicicd"): + lIpAddr, lSourcePath = self.GetCredentials(svr_id) + logging.debug('\u001B[1m Pulling image(s) on server: ' + lIpAddr + '\u001B[0m') + if not tag: + tag = CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge) + with cls_cmd.getConnection(lIpAddr) as cmd: + success, msg = Containerize.Pull_Image(cmd, images, tag, registry, username, password) + param = f"on node {lIpAddr}" + if success: + HTML.CreateHtmlTestRowQueue(param, 'OK', [msg]) + else: + HTML.CreateHtmlTestRowQueue(param, 'KO', [msg]) + return success def Clean_Test_Server_Images(self, HTML): lIpAddr, lSourcePath = self.GetCredentials(self.testSvrId) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 7b6ee6fb25..cb845592b7 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -374,14 +374,9 @@ def ExecuteActionWithParam(action): success = CONTAINERS.Push_Image_to_Local_Registry(HTML, svr_id) elif action == 'Pull_Local_Registry': - string_field = test.findtext('test_svr_id') - if (string_field is not None): - CONTAINERS.testSvrId = string_field - CONTAINERS.imageToPull.clear() - string_field = test.findtext('images_to_pull') - if (string_field is not None): - CONTAINERS.imageToPull = string_field.split() - success = CONTAINERS.Pull_Image_from_Local_Registry(HTML) + svr_id = test.findtext('svr_id') + images = test.findtext('images').split() + success = CONTAINERS.Pull_Image_from_Registry(HTML, svr_id, images) elif action == 'Clean_Test_Server_Images': string_field = test.findtext('test_svr_id') diff --git a/ci-scripts/xml_files/container_4g_l2sim_tdd.xml b/ci-scripts/xml_files/container_4g_l2sim_tdd.xml index 97a0610efa..b1a60f71f6 100644 --- a/ci-scripts/xml_files/container_4g_l2sim_tdd.xml +++ b/ci-scripts/xml_files/container_4g_l2sim_tdd.xml @@ -44,8 +44,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb oai-lte-ue + 0 + oai-enb oai-lte-ue Create_Workspace diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml index 9e8bb1e704..671ea43b02 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml @@ -52,8 +52,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb-asan oai-lte-ue-asan + 0 + oai-enb-asan oai-lte-ue-asan diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml index 0081f8eab9..1bf28038e2 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml @@ -43,8 +43,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb-asan oai-lte-ue-asan + 0 + oai-enb-asan oai-lte-ue-asan Create_Workspace diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml index 310f886497..54c7d88179 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml @@ -47,8 +47,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb-asan oai-lte-ue-asan + 0 + oai-enb-asan oai-lte-ue-asan Create_Workspace diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml index 357db604a6..6e362e9af8 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml @@ -47,8 +47,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb-asan oai-lte-ue-asan + 0 + oai-enb-asan oai-lte-ue-asan Create_Workspace diff --git a/ci-scripts/xml_files/container_4g_rfsim_fembms.xml b/ci-scripts/xml_files/container_4g_rfsim_fembms.xml index e1484004e2..7b09f255eb 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fembms.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fembms.xml @@ -40,8 +40,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb-asan oai-lte-ue-asan + 0 + oai-enb-asan oai-lte-ue-asan Create_Workspace diff --git a/ci-scripts/xml_files/container_4g_rfsim_mbms.xml b/ci-scripts/xml_files/container_4g_rfsim_mbms.xml index cf154b4476..e11dd8dd2e 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_mbms.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_mbms.xml @@ -40,8 +40,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb-asan oai-lte-ue-asan + 0 + oai-enb-asan oai-lte-ue-asan Create_Workspace diff --git a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml index 77d9f19ee9..0b2b048944 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml @@ -47,8 +47,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb oai-lte-ue + 0 + oai-enb oai-lte-ue Create_Workspace diff --git a/ci-scripts/xml_files/container_5g_e1_rfsim.xml b/ci-scripts/xml_files/container_5g_e1_rfsim.xml index bf4cf6ec04..37761a6f50 100644 --- a/ci-scripts/xml_files/container_5g_e1_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_e1_rfsim.xml @@ -40,8 +40,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb oai-nr-cuup oai-nr-ue + 0 + oai-gnb oai-nr-cuup oai-nr-ue Create_Workspace diff --git a/ci-scripts/xml_files/container_5g_f1_rfsim.xml b/ci-scripts/xml_files/container_5g_f1_rfsim.xml index 8c925cbc5f..c1876b0d84 100644 --- a/ci-scripts/xml_files/container_5g_f1_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_f1_rfsim.xml @@ -47,8 +47,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan + 0 + oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan Create_Workspace diff --git a/ci-scripts/xml_files/container_5g_fdd_rfsim.xml b/ci-scripts/xml_files/container_5g_fdd_rfsim.xml index d3640da596..286c18dfa8 100644 --- a/ci-scripts/xml_files/container_5g_fdd_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_fdd_rfsim.xml @@ -42,8 +42,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb-asan oai-nr-ue-asan + 0 + oai-gnb-asan oai-nr-ue-asan Create_Workspace diff --git a/ci-scripts/xml_files/container_5g_rfsim.xml b/ci-scripts/xml_files/container_5g_rfsim.xml index 16eacb02c5..f6d9fe6de1 100644 --- a/ci-scripts/xml_files/container_5g_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_rfsim.xml @@ -57,8 +57,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb-asan oai-nr-ue + 0 + oai-gnb-asan oai-nr-ue Create_Workspace diff --git a/ci-scripts/xml_files/container_5g_rfsim_24prb.xml b/ci-scripts/xml_files/container_5g_rfsim_24prb.xml index 2e3bbf1d3a..8a8372abe0 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_24prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_24prb.xml @@ -42,8 +42,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb-asan oai-nr-ue-asan + 0 + oai-gnb-asan oai-nr-ue-asan Create_Workspace diff --git a/ci-scripts/xml_files/container_5g_rfsim_2x2.xml b/ci-scripts/xml_files/container_5g_rfsim_2x2.xml index a18928cc80..cc8083d0a2 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_2x2.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_2x2.xml @@ -42,8 +42,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb-asan oai-nr-ue-asan + 0 + oai-gnb-asan oai-nr-ue-asan Create_Workspace diff --git a/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml b/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml index 10081b9606..8e3b3ef97e 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml @@ -42,8 +42,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb-asan oai-nr-ue-asan + 0 + oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml b/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml index b29be08d21..94ece9b2a7 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml @@ -39,8 +39,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb-asan oai-nr-ue-asan + 0 + oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml b/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml index 04bf430f03..2f5085a651 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml @@ -41,8 +41,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb-asan oai-nr-ue-asan + 0 + oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml b/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml index d42f8851bb..76049a9782 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml @@ -39,8 +39,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-nr-ue-asan + 0 + oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml b/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml index 35834493cc..0379099692 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml @@ -41,8 +41,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb-asan oai-nr-ue-asan + 0 + oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml b/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml index 38d88b7e5e..60e00982b1 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml @@ -42,8 +42,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb-asan oai-nr-ue-asan + 0 + oai-gnb-asan oai-nr-ue-asan Create_Workspace diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml index 00516269a6..19b8bb26cb 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml @@ -43,8 +43,8 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml index 4ede8e072b..f7d3d26482 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml @@ -42,8 +42,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml index b9bc7f7a42..c30ff2df52 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml @@ -42,8 +42,8 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb Custom_Command diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml index 958e0a895a..0de23d17a5 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml @@ -44,8 +44,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb Custom_Command diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml index 60a9bd0c16..3975991486 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml @@ -43,8 +43,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb Custom_Command diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml index 10cd2e89c1..6e3cfde69c 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml @@ -49,14 +49,14 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb Pull_Local_Registry Pull Images from Local Registry - 1 - oai-lte-ue + 1 + oai-lte-ue Custom_Command diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml index 510d0d3f2e..dfcbc71373 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml @@ -43,8 +43,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb Custom_Command diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml index c8bcde980f..061297649d 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml @@ -43,8 +43,8 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml index 22a86d1f57..7d278677b8 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml @@ -41,8 +41,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm2.xml b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm2.xml index 068d4521b2..1a3bfa6692 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm2.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm2.xml @@ -41,8 +41,8 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm2.xml Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb Custom_Command diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml index 570fffef71..abd0ccfe88 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml @@ -42,8 +42,8 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb Custom_Command diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml index 49826d782c..f1dfb09103 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml @@ -42,8 +42,8 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1.xml Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb Custom_Command diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml index 8e47a61a48..55298d2e5d 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml @@ -42,8 +42,8 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml index d144448301..20cd8db24a 100644 --- a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml +++ b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml @@ -48,8 +48,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm2.xml b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm2.xml index 50494d7778..0314d118e0 100644 --- a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm2.xml +++ b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm2.xml @@ -48,8 +48,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_nsa_b200_quectel.xml b/ci-scripts/xml_files/container_nsa_b200_quectel.xml index c745cb90aa..baaa523e48 100644 --- a/ci-scripts/xml_files/container_nsa_b200_quectel.xml +++ b/ci-scripts/xml_files/container_nsa_b200_quectel.xml @@ -57,15 +57,15 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-enb + 0 + oai-enb Pull_Local_Registry Pull Images from Local Registry - 1 - oai-gnb + 1 + oai-gnb diff --git a/ci-scripts/xml_files/container_sa_aerial_quectel.xml b/ci-scripts/xml_files/container_sa_aerial_quectel.xml index 63f22af51d..f786f5b17b 100644 --- a/ci-scripts/xml_files/container_sa_aerial_quectel.xml +++ b/ci-scripts/xml_files/container_sa_aerial_quectel.xml @@ -43,8 +43,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb-aerial + 0 + oai-gnb-aerial diff --git a/ci-scripts/xml_files/container_sa_b200_quectel.xml b/ci-scripts/xml_files/container_sa_b200_quectel.xml index 4a4c8309a5..214f284e2d 100644 --- a/ci-scripts/xml_files/container_sa_b200_quectel.xml +++ b/ci-scripts/xml_files/container_sa_b200_quectel.xml @@ -59,8 +59,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb + 0 + oai-gnb diff --git a/ci-scripts/xml_files/container_sa_e1_b200_quectel.xml b/ci-scripts/xml_files/container_sa_e1_b200_quectel.xml index 563167a2dd..05a9f92ae8 100644 --- a/ci-scripts/xml_files/container_sa_e1_b200_quectel.xml +++ b/ci-scripts/xml_files/container_sa_e1_b200_quectel.xml @@ -56,8 +56,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb oai-nr-cuup + 0 + oai-gnb oai-nr-cuup diff --git a/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml b/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml index e03180e236..de88240c39 100644 --- a/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml +++ b/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml @@ -64,8 +64,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb + 0 + oai-gnb diff --git a/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml b/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml index d2bfaa02d4..28f767fda7 100644 --- a/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml +++ b/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml @@ -53,8 +53,8 @@ Pull_Local_Registry Pull Images from Local Registry - 0 - oai-gnb + 0 + oai-gnb From 74317e805d1a2f144c29002504827c9be304a3fe Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 15 Nov 2024 16:38:11 +0100 Subject: [PATCH 10/14] CI: PullClusterImage(): harmonize code - reuse cls_containerize.Containerize.PullImage() - pass parameter directly instead of indirectly via class - always read node name and use this instead of "sometimes" looking it up from a class member. With "sometimes" I mean that if no node name is given, it will take it from self.eNBIPAddress, which is confusing at best if we can give the node name directly - consistently put the node name in the xml file --- ci-scripts/cls_cluster.py | 60 +++++++------------ ci-scripts/main.py | 10 +--- .../xml_files/container_sa_aw2s_asue.xml | 3 +- .../xml_files/container_sa_aw2s_asue_2x2.xml | 3 +- .../xml_files/container_sa_fhi72_vvdn_up2.xml | 3 +- .../container_sa_n310_2X2_100MHz_quectel.xml | 4 +- .../container_sa_n310_2X2_60MHz_quectel.xml | 4 +- .../container_sa_n310_4X4_60MHz_quectel.xml | 4 +- .../xml_files/container_sa_n310_nrue.xml | 8 +-- 9 files changed, 41 insertions(+), 58 deletions(-) diff --git a/ci-scripts/cls_cluster.py b/ci-scripts/cls_cluster.py index c117df1436..570ea52dfc 100644 --- a/ci-scripts/cls_cluster.py +++ b/ci-scripts/cls_cluster.py @@ -126,8 +126,6 @@ class Cluster: self.ranAllowMerge = False self.ranTargetBranch = "" self.cmd = None - self.imageToPull = '' - self.testSvrId = None def _recreate_entitlements(self): # recreating entitlements, don't care if deletion fails @@ -240,44 +238,30 @@ class Cluster: def _undeploy_pod(self, filename): self.cmd.run(f'oc delete -f {filename}') - def PullClusterImage(self, HTML): - if self.testSvrId == None: self.testSvrId = self.eNBIPAddress - if self.imageToPull == '': - HELP.GenericHelp(CONST.Version) - raise ValueError('Insufficient Parameter') - logging.debug(f'Pull OC image {self.imageToPull} to server {self.testSvrId}') + def PullClusterImage(self, HTML, node, images): + logging.debug(f'Pull OC image {images} to server {node}') self.testCase_id = HTML.testCase_id - cmd = cls_cmd.getConnection(self.testSvrId) - logging.info(cmd.run('docker --version')) - succeeded = OC_login(cmd, self.OCUserName, self.OCPassword, CI_OC_RAN_NAMESPACE) - if not succeeded: - logging.error('\u001B[1m OC Cluster Login Failed\u001B[0m') - HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL) - return False - ret = cmd.run(f'oc whoami -t | docker login -u oaicicd --password-stdin {self.OCRegistry}') - if ret.returncode != 0: - logging.error(f'\u001B[1m Unable to access OC project {CI_OC_RAN_NAMESPACE}\u001B[0m') - OC_logout(cmd) - cmd.close() - HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL) - return False - for image in self.imageToPull: - imagePrefix = f'{self.OCRegistry}/{CI_OC_RAN_NAMESPACE}' - tag = cls_containerize.CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge) - imageTag = f"{image}:{tag}" - ret = cmd.run(f'docker pull {imagePrefix}/{imageTag}') - if ret.returncode != 0: - logging.error(f'Could not pull {image} from local registry : {self.OCRegistry}') - OC_logout(cmd) - cmd.close() - HTML.CreateHtmlTestRow('msg', 'KO', CONST.ALL_PROCESSES_OK) + with cls_cmd.getConnection(node) as cmd: + succeeded = OC_login(cmd, self.OCUserName, self.OCPassword, CI_OC_RAN_NAMESPACE) + if not succeeded: + HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL) return False - cmd.run(f'docker tag {imagePrefix}/{imageTag} oai-ci/{imageTag}') - cmd.run(f'docker rmi {imagePrefix}/{imageTag}') - OC_logout(cmd) - cmd.close() - HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK) - return True + ret = cmd.run(f'oc whoami -t | docker login -u oaicicd --password-stdin {self.OCRegistry}') + if ret.returncode != 0: + logging.error(f'cannot authenticate at registry') + OC_logout(cmd) + HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL) + return False + tag = cls_containerize.CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge) + registry = f'{self.OCRegistry}/{CI_OC_RAN_NAMESPACE}' + success, msg = cls_containerize.Containerize.Pull_Image(cmd, images, tag, registry, None, None) + OC_logout(cmd) + param = f"on node {node}" + if success: + HTML.CreateHtmlTestRowQueue(param, 'OK', [msg]) + else: + HTML.CreateHtmlTestRowQueue(param, 'KO', [msg]) + return success def BuildClusterImage(self, HTML): if self.ranRepository == '' or self.ranBranch == '' or self.ranCommitID == '': diff --git a/ci-scripts/main.py b/ci-scripts/main.py index cb845592b7..195dac0f9c 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -397,13 +397,9 @@ def ExecuteActionWithParam(action): success = cls_oaicitest.Custom_Script(HTML, node, script, command_fail) elif action == 'Pull_Cluster_Image': - string_field = test.findtext('images_to_pull') - if (string_field is not None): - CLUSTER.imageToPull = string_field.split() - string_field = test.findtext('test_svr_id') - if (string_field is not None): - CLUSTER.testSvrId = string_field - success = CLUSTER.PullClusterImage(HTML) + images = test.findtext('images').split() + node = test.findtext('node') + success = CLUSTER.PullClusterImage(HTML, node, images) else: logging.warning(f"unknown action {action}, skip step") diff --git a/ci-scripts/xml_files/container_sa_aw2s_asue.xml b/ci-scripts/xml_files/container_sa_aw2s_asue.xml index f023da8402..0617962731 100644 --- a/ci-scripts/xml_files/container_sa_aw2s_asue.xml +++ b/ci-scripts/xml_files/container_sa_aw2s_asue.xml @@ -65,7 +65,8 @@ Pull_Cluster_Image Pull Images from Cluster oaicicd-ran - oai-gnb-aw2s + oai-gnb-aw2s + avra diff --git a/ci-scripts/xml_files/container_sa_aw2s_asue_2x2.xml b/ci-scripts/xml_files/container_sa_aw2s_asue_2x2.xml index 514672df66..2a37d2bfe4 100644 --- a/ci-scripts/xml_files/container_sa_aw2s_asue_2x2.xml +++ b/ci-scripts/xml_files/container_sa_aw2s_asue_2x2.xml @@ -64,7 +64,8 @@ Pull_Cluster_Image Pull Images from Cluster oaicicd-ran - oai-gnb-aw2s + oai-gnb-aw2s + avra Create_Workspace diff --git a/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml b/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml index 215fe3ea26..367a2c5cb3 100644 --- a/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml +++ b/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml @@ -56,7 +56,8 @@ Pull_Cluster_Image Pull Images from Cluster oaicicd-ran - oai-gnb-fhi72 + oai-gnb-fhi72 + cacofonix Create_Workspace diff --git a/ci-scripts/xml_files/container_sa_n310_2X2_100MHz_quectel.xml b/ci-scripts/xml_files/container_sa_n310_2X2_100MHz_quectel.xml index 214991e117..72c8bd06bc 100644 --- a/ci-scripts/xml_files/container_sa_n310_2X2_100MHz_quectel.xml +++ b/ci-scripts/xml_files/container_sa_n310_2X2_100MHz_quectel.xml @@ -46,8 +46,8 @@ Pull_Cluster_Image Pull Images from Cluster - oai-gnb - matix + oai-gnb + matix diff --git a/ci-scripts/xml_files/container_sa_n310_2X2_60MHz_quectel.xml b/ci-scripts/xml_files/container_sa_n310_2X2_60MHz_quectel.xml index c94c30a7b2..7fb07e577a 100644 --- a/ci-scripts/xml_files/container_sa_n310_2X2_60MHz_quectel.xml +++ b/ci-scripts/xml_files/container_sa_n310_2X2_60MHz_quectel.xml @@ -46,8 +46,8 @@ Pull_Cluster_Image Pull Images from Cluster - oai-gnb - matix + oai-gnb + matix diff --git a/ci-scripts/xml_files/container_sa_n310_4X4_60MHz_quectel.xml b/ci-scripts/xml_files/container_sa_n310_4X4_60MHz_quectel.xml index 0ffe3044b6..e03c4533dd 100644 --- a/ci-scripts/xml_files/container_sa_n310_4X4_60MHz_quectel.xml +++ b/ci-scripts/xml_files/container_sa_n310_4X4_60MHz_quectel.xml @@ -46,8 +46,8 @@ Pull_Cluster_Image Pull Images from Cluster - oai-gnb - matix + oai-gnb + matix diff --git a/ci-scripts/xml_files/container_sa_n310_nrue.xml b/ci-scripts/xml_files/container_sa_n310_nrue.xml index a358bbf5f8..1758372e1d 100644 --- a/ci-scripts/xml_files/container_sa_n310_nrue.xml +++ b/ci-scripts/xml_files/container_sa_n310_nrue.xml @@ -44,15 +44,15 @@ Pull_Cluster_Image Pull Images from Cluster - oai-gnb - avra + oai-gnb + avra Pull_Cluster_Image Pull Images from Cluster - oai-nr-ue - caracal + oai-nr-ue + caracal From 644990a2253876f561c605a0cef3f17637321bf0 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 15 Nov 2024 14:48:31 +0100 Subject: [PATCH 11/14] CI: Clean_Test_Server_Images(): harmonize code - pass parameter directly instead of indirectly via class - harmonize to svr_id to read through common code in the next commits - pass images to express which images will be deleted - refactor function to use "with" for cls_cmd, and return success (or not) --- ci-scripts/cls_containerize.py | 36 ++++++++++--------- ci-scripts/main.py | 7 ++-- .../xml_files/container_4g_l2sim_tdd.xml | 3 +- .../container_4g_rfsim_fdd_05MHz.xml | 3 +- .../container_4g_rfsim_fdd_05MHz_noS1.xml | 3 +- .../container_4g_rfsim_fdd_10MHz.xml | 3 +- .../container_4g_rfsim_fdd_20MHz.xml | 3 +- .../xml_files/container_4g_rfsim_fembms.xml | 3 +- .../xml_files/container_4g_rfsim_mbms.xml | 3 +- .../container_4g_rfsim_tdd_05MHz.xml | 3 +- .../xml_files/container_5g_e1_rfsim.xml | 3 +- .../xml_files/container_5g_f1_rfsim.xml | 3 +- .../xml_files/container_5g_fdd_rfsim.xml | 3 +- ci-scripts/xml_files/container_5g_rfsim.xml | 3 +- .../xml_files/container_5g_rfsim_24prb.xml | 3 +- .../xml_files/container_5g_rfsim_2x2.xml | 3 +- .../container_5g_rfsim_fdd_phytest.xml | 3 +- .../container_5g_rfsim_fr2_32prb.xml | 3 +- .../xml_files/container_5g_rfsim_ntn_geo.xml | 3 +- .../xml_files/container_5g_rfsim_sidelink.xml | 3 +- .../xml_files/container_5g_rfsim_tdd_dora.xml | 3 +- .../xml_files/container_5g_rfsim_u0_25prb.xml | 3 +- .../container_lte_b200_fdd_05Mhz_tm1.xml | 3 +- ...container_lte_b200_fdd_05Mhz_tm1_if4_5.xml | 3 +- ...lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml | 3 +- .../container_lte_b200_fdd_10Mhz_tm1.xml | 3 +- .../container_lte_b200_fdd_10Mhz_tm1_cdrx.xml | 3 +- ...container_lte_b200_fdd_10Mhz_tm1_oaiue.xml | 6 ++-- .../container_lte_b200_fdd_20Mhz_tm1.xml | 3 +- .../container_lte_b200_tdd_05Mhz_tm1.xml | 3 +- ...container_lte_b200_tdd_05Mhz_tm1_if4_5.xml | 3 +- .../container_lte_b200_tdd_10Mhz_tm1.xml | 3 +- .../container_lte_b200_tdd_20Mhz_tm1.xml | 3 +- ...e_b200_tdd_20Mhz_tm1_default_scheduler.xml | 3 +- .../container_lte_n3xx_tdd_2x2_tm1.xml | 3 +- .../container_lte_n3xx_tdd_2x2_tm2.xml | 3 +- .../xml_files/container_nsa_b200_quectel.xml | 6 ++-- .../xml_files/container_sa_aerial_quectel.xml | 3 +- .../xml_files/container_sa_aw2s_asue.xml | 3 +- .../xml_files/container_sa_aw2s_asue_2x2.xml | 3 +- .../xml_files/container_sa_b200_quectel.xml | 3 +- .../container_sa_e1_b200_quectel.xml | 3 +- .../container_sa_f1_b200_quectel.xml | 3 +- .../xml_files/container_sa_fhi72_vvdn_up2.xml | 3 +- .../container_sa_n310_2X2_100MHz_quectel.xml | 3 +- .../container_sa_n310_2X2_60MHz_quectel.xml | 3 +- .../container_sa_n310_4X4_60MHz_quectel.xml | 3 +- .../xml_files/container_sa_n310_nrue.xml | 6 ++-- .../container_sa_sc_b200_quectel.xml | 3 +- 49 files changed, 122 insertions(+), 71 deletions(-) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 26c56c3d61..a9c4b5be08 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -334,7 +334,6 @@ class Containerize(): self.cliOptions = '' self.imageToCopy = '' - self.testSvrId = '' #checkers from xml self.ran_checkers={} @@ -810,24 +809,27 @@ class Containerize(): HTML.CreateHtmlTestRowQueue(param, 'KO', [msg]) return success - def Clean_Test_Server_Images(self, HTML): - lIpAddr, lSourcePath = self.GetCredentials(self.testSvrId) - if lIpAddr != 'none': - logging.debug('Removing test images from server: ' + lIpAddr) - myCmd = cls_cmd.RemoteCmd(lIpAddr) - else: - logging.debug('Removing test images locally') - myCmd = cls_cmd.LocalCmd() - - for image in IMAGES: + def Clean_Test_Server_Images(self, HTML, svr_id, images, tag=None): + lIpAddr, lSourcePath = self.GetCredentials(svr_id) + logging.debug(f'\u001B[1m Cleaning image(s) from server: {lIpAddr}\u001B[0m') + if not tag: tag = CreateTag(self.ranCommitID, self.ranBranch, self.ranAllowMerge) - imageTag = f"{image}:{tag}" - cmd = f'docker rmi oai-ci/{imageTag}' - myCmd.run(cmd, reportNonZero=False) - myCmd.close() - HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK) - return True + status = True + with cls_cmd.getConnection(lIpAddr) as myCmd: + removed_images = [] + for image in images: + fullImage = f"oai-ci/{image}:{tag}" + cmd = f'docker rmi {fullImage}' + if myCmd.run(cmd).returncode != 0: + status = False + removed_images += [fullImage] + + msg = "Removed Images:\n" + '\n'.join(removed_images) + s = 'OK' if status else 'KO' + param = f"on node {lIpAddr}" + HTML.CreateHtmlTestRowQueue(param, s, [msg]) + return status def Create_Workspace(self,HTML): svr = self.eNB_serverId[self.eNB_instance] diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 195dac0f9c..2c0413d343 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -379,10 +379,9 @@ def ExecuteActionWithParam(action): success = CONTAINERS.Pull_Image_from_Registry(HTML, svr_id, images) elif action == 'Clean_Test_Server_Images': - string_field = test.findtext('test_svr_id') - if (string_field is not None): - CONTAINERS.testSvrId = string_field - success = CONTAINERS.Clean_Test_Server_Images(HTML) + svr_id = test.findtext('svr_id') + images = test.findtext('images').split() + success = CONTAINERS.Clean_Test_Server_Images(HTML, svr_id, images) elif action == 'Custom_Command': node = test.findtext('node') diff --git a/ci-scripts/xml_files/container_4g_l2sim_tdd.xml b/ci-scripts/xml_files/container_4g_l2sim_tdd.xml index b1a60f71f6..6a0e5ae00f 100644 --- a/ci-scripts/xml_files/container_4g_l2sim_tdd.xml +++ b/ci-scripts/xml_files/container_4g_l2sim_tdd.xml @@ -149,7 +149,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb oai-lte-ue diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml index 671ea43b02..12f8f13a5b 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz.xml @@ -166,7 +166,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb-asan oai-lte-ue-asan diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml index 1bf28038e2..031a308a5c 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_05MHz_noS1.xml @@ -137,7 +137,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb-asan oai-lte-ue-asan diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml index 54c7d88179..d56aeb231e 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_10MHz.xml @@ -166,7 +166,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb-asan oai-lte-ue-asan diff --git a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml index 6e362e9af8..e957417f1c 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fdd_20MHz.xml @@ -166,7 +166,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb-asan oai-lte-ue-asan diff --git a/ci-scripts/xml_files/container_4g_rfsim_fembms.xml b/ci-scripts/xml_files/container_4g_rfsim_fembms.xml index 7b09f255eb..c030fbb4a4 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_fembms.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_fembms.xml @@ -104,7 +104,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb-asan oai-lte-ue-asan diff --git a/ci-scripts/xml_files/container_4g_rfsim_mbms.xml b/ci-scripts/xml_files/container_4g_rfsim_mbms.xml index e11dd8dd2e..34c2fc6c89 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_mbms.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_mbms.xml @@ -104,7 +104,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb-asan oai-lte-ue-asan diff --git a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml index 0b2b048944..e292958576 100644 --- a/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml +++ b/ci-scripts/xml_files/container_4g_rfsim_tdd_05MHz.xml @@ -159,7 +159,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb oai-lte-ue diff --git a/ci-scripts/xml_files/container_5g_e1_rfsim.xml b/ci-scripts/xml_files/container_5g_e1_rfsim.xml index 37761a6f50..8128fca08c 100644 --- a/ci-scripts/xml_files/container_5g_e1_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_e1_rfsim.xml @@ -107,7 +107,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb oai-nr-cuup oai-nr-ue diff --git a/ci-scripts/xml_files/container_5g_f1_rfsim.xml b/ci-scripts/xml_files/container_5g_f1_rfsim.xml index c1876b0d84..54d2b221b2 100644 --- a/ci-scripts/xml_files/container_5g_f1_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_f1_rfsim.xml @@ -194,7 +194,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-asan oai-nr-cuup-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_fdd_rfsim.xml b/ci-scripts/xml_files/container_5g_fdd_rfsim.xml index 286c18dfa8..276bb5b9a3 100644 --- a/ci-scripts/xml_files/container_5g_fdd_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_fdd_rfsim.xml @@ -133,7 +133,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim.xml b/ci-scripts/xml_files/container_5g_rfsim.xml index f6d9fe6de1..6388a3fe3e 100644 --- a/ci-scripts/xml_files/container_5g_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_rfsim.xml @@ -259,7 +259,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-asan oai-nr-ue diff --git a/ci-scripts/xml_files/container_5g_rfsim_24prb.xml b/ci-scripts/xml_files/container_5g_rfsim_24prb.xml index 8a8372abe0..5c2a069122 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_24prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_24prb.xml @@ -133,7 +133,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_2x2.xml b/ci-scripts/xml_files/container_5g_rfsim_2x2.xml index cc8083d0a2..3b7a1d738e 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_2x2.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_2x2.xml @@ -133,7 +133,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml b/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml index 8e3b3ef97e..100465614d 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_fdd_phytest.xml @@ -133,7 +133,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml b/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml index 94ece9b2a7..d700862689 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_fr2_32prb.xml @@ -101,7 +101,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml b/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml index 2f5085a651..5e3c4bedb5 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_ntn_geo.xml @@ -107,7 +107,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml b/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml index 76049a9782..133d960c3a 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_sidelink.xml @@ -97,7 +97,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml b/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml index 0379099692..861158c08f 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_tdd_dora.xml @@ -116,7 +116,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml b/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml index 60e00982b1..7014c54a2a 100644 --- a/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml +++ b/ci-scripts/xml_files/container_5g_rfsim_u0_25prb.xml @@ -133,7 +133,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-asan oai-nr-ue-asan diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml index 19b8bb26cb..01e1cfc4ed 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1.xml @@ -211,7 +211,8 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml index f7d3d26482..c13952094f 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_if4_5.xml @@ -194,7 +194,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml index c30ff2df52..4bfcb02258 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_05Mhz_tm1_no_rrc_activity.xml @@ -176,7 +176,8 @@ Replaces xml_files/enb_usrp210_band7_test_05mhz_tm1_rrc_inactivity_no_flexran.xm Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml index 0de23d17a5..6b1afaf079 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1.xml @@ -206,7 +206,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml index 3975991486..1469918617 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_cdrx.xml @@ -138,7 +138,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml index 6e3cfde69c..f978d14cf9 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_10Mhz_tm1_oaiue.xml @@ -190,14 +190,16 @@ Clean_Test_Server_Images true Clean Test Images on eNB Test Server - 0 + 0 + oai-enb Clean_Test_Server_Images true Clean Test Images on LTE-UE Test Server - 1 + 1 + oai-lte-ue diff --git a/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml index dfcbc71373..a830803f9f 100644 --- a/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_fdd_20Mhz_tm1.xml @@ -206,7 +206,8 @@ Replaces xml_files/enb_usrp210_band7_test_10mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml index 061297649d..dc85ee5813 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1.xml @@ -223,7 +223,8 @@ Replaces xml_files/enb_usrp210_band40_test_05mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml index 7d278677b8..f5467c2623 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_05Mhz_tm1_if4_5.xml @@ -209,7 +209,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml index abd0ccfe88..4d34ff1434 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_10Mhz_tm1.xml @@ -214,7 +214,8 @@ Replaces xml_files/enb_usrp210_band40_test_10mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml index f1dfb09103..2620296bde 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1.xml @@ -212,7 +212,8 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml index 55298d2e5d..5dc0ab9585 100644 --- a/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml +++ b/ci-scripts/xml_files/container_lte_b200_tdd_20Mhz_tm1_default_scheduler.xml @@ -217,7 +217,8 @@ Replaces xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml index 20cd8db24a..5234e2d35c 100644 --- a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml +++ b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm1.xml @@ -153,7 +153,8 @@ Clean_Test_Server_Images true Clean Test Images - 0 + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm2.xml b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm2.xml index 0314d118e0..a02d0c48ef 100644 --- a/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm2.xml +++ b/ci-scripts/xml_files/container_lte_n3xx_tdd_2x2_tm2.xml @@ -153,7 +153,8 @@ Clean_Test_Server_Images true Clean Test Images - 0 + 0 + oai-enb diff --git a/ci-scripts/xml_files/container_nsa_b200_quectel.xml b/ci-scripts/xml_files/container_nsa_b200_quectel.xml index baaa523e48..7b43dc609b 100644 --- a/ci-scripts/xml_files/container_nsa_b200_quectel.xml +++ b/ci-scripts/xml_files/container_nsa_b200_quectel.xml @@ -252,14 +252,16 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-enb Clean_Test_Server_Images true Clean Test Images on Test Server - 1 + 1 + oai-gnb diff --git a/ci-scripts/xml_files/container_sa_aerial_quectel.xml b/ci-scripts/xml_files/container_sa_aerial_quectel.xml index f786f5b17b..643009641d 100644 --- a/ci-scripts/xml_files/container_sa_aerial_quectel.xml +++ b/ci-scripts/xml_files/container_sa_aerial_quectel.xml @@ -128,7 +128,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-aerial diff --git a/ci-scripts/xml_files/container_sa_aw2s_asue.xml b/ci-scripts/xml_files/container_sa_aw2s_asue.xml index 0617962731..701d4c23d5 100644 --- a/ci-scripts/xml_files/container_sa_aw2s_asue.xml +++ b/ci-scripts/xml_files/container_sa_aw2s_asue.xml @@ -278,7 +278,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-aw2s diff --git a/ci-scripts/xml_files/container_sa_aw2s_asue_2x2.xml b/ci-scripts/xml_files/container_sa_aw2s_asue_2x2.xml index 2a37d2bfe4..9f6a373eca 100644 --- a/ci-scripts/xml_files/container_sa_aw2s_asue_2x2.xml +++ b/ci-scripts/xml_files/container_sa_aw2s_asue_2x2.xml @@ -275,7 +275,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-aw2s diff --git a/ci-scripts/xml_files/container_sa_b200_quectel.xml b/ci-scripts/xml_files/container_sa_b200_quectel.xml index 214f284e2d..51d9c314b4 100644 --- a/ci-scripts/xml_files/container_sa_b200_quectel.xml +++ b/ci-scripts/xml_files/container_sa_b200_quectel.xml @@ -220,7 +220,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb diff --git a/ci-scripts/xml_files/container_sa_e1_b200_quectel.xml b/ci-scripts/xml_files/container_sa_e1_b200_quectel.xml index 05a9f92ae8..f93da0e890 100644 --- a/ci-scripts/xml_files/container_sa_e1_b200_quectel.xml +++ b/ci-scripts/xml_files/container_sa_e1_b200_quectel.xml @@ -218,7 +218,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb oai-nr-cuup diff --git a/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml b/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml index de88240c39..82f3cc84e5 100644 --- a/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml +++ b/ci-scripts/xml_files/container_sa_f1_b200_quectel.xml @@ -251,7 +251,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb diff --git a/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml b/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml index 367a2c5cb3..927fe1a3e7 100644 --- a/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml +++ b/ci-scripts/xml_files/container_sa_fhi72_vvdn_up2.xml @@ -154,7 +154,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb-fhi72 diff --git a/ci-scripts/xml_files/container_sa_n310_2X2_100MHz_quectel.xml b/ci-scripts/xml_files/container_sa_n310_2X2_100MHz_quectel.xml index 72c8bd06bc..3fd9c83522 100644 --- a/ci-scripts/xml_files/container_sa_n310_2X2_100MHz_quectel.xml +++ b/ci-scripts/xml_files/container_sa_n310_2X2_100MHz_quectel.xml @@ -156,7 +156,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb diff --git a/ci-scripts/xml_files/container_sa_n310_2X2_60MHz_quectel.xml b/ci-scripts/xml_files/container_sa_n310_2X2_60MHz_quectel.xml index 7fb07e577a..d4d7568ec4 100644 --- a/ci-scripts/xml_files/container_sa_n310_2X2_60MHz_quectel.xml +++ b/ci-scripts/xml_files/container_sa_n310_2X2_60MHz_quectel.xml @@ -156,7 +156,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb diff --git a/ci-scripts/xml_files/container_sa_n310_4X4_60MHz_quectel.xml b/ci-scripts/xml_files/container_sa_n310_4X4_60MHz_quectel.xml index e03c4533dd..b89891f496 100644 --- a/ci-scripts/xml_files/container_sa_n310_4X4_60MHz_quectel.xml +++ b/ci-scripts/xml_files/container_sa_n310_4X4_60MHz_quectel.xml @@ -156,7 +156,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb diff --git a/ci-scripts/xml_files/container_sa_n310_nrue.xml b/ci-scripts/xml_files/container_sa_n310_nrue.xml index 1758372e1d..e1e79ccec9 100644 --- a/ci-scripts/xml_files/container_sa_n310_nrue.xml +++ b/ci-scripts/xml_files/container_sa_n310_nrue.xml @@ -163,14 +163,16 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb Clean_Test_Server_Images true Clean Test Images on Test Server - 1 + 1 + oai-nr-ue diff --git a/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml b/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml index 28f767fda7..a8515f3ec0 100644 --- a/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml +++ b/ci-scripts/xml_files/container_sa_sc_b200_quectel.xml @@ -214,7 +214,8 @@ Clean_Test_Server_Images true Clean Test Images on Test Server - 0 + 0 + oai-gnb From 010a23863cde55ce5282e0073fe19b6cdbdf3692 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 15 Nov 2024 17:15:10 +0100 Subject: [PATCH 12/14] CI: Add a testcase for testing pull/clean functionality The testcase will only be executed when the registry at porcepix.sboai.cs.eurecom.fr is actually reachable. --- ci-scripts/tests/pull-clean-int-registry.py | 53 +++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 ci-scripts/tests/pull-clean-int-registry.py diff --git a/ci-scripts/tests/pull-clean-int-registry.py b/ci-scripts/tests/pull-clean-int-registry.py new file mode 100644 index 0000000000..d4d5b4fc0a --- /dev/null +++ b/ci-scripts/tests/pull-clean-int-registry.py @@ -0,0 +1,53 @@ +import sys +import logging +logging.basicConfig( + level=logging.DEBUG, + stream=sys.stdout, + format="[%(asctime)s] %(levelname)8s: %(message)s" +) +import os +os.system(f'rm -rf cmake_targets') +os.system(f'mkdir -p cmake_targets/log') +import unittest + +sys.path.append('./') # to find OAI imports below +import cls_oai_html +import cls_cmd +import cls_containerize + +class TestDeploymentMethods(unittest.TestCase): + def setUp(self): + self.html = cls_oai_html.HTMLManagement() + self.html.testCaseId = "000000" + self.cont = cls_containerize.Containerize() + self.cont.eNBIPAddress = 'localhost' + self.cont.eNBSourceCodePath = os.getcwd() + + def test_pull_clean_local_reg(self): + # the pull function has the authentication at the internal cluster hardcoded + # this is a refactoring opportunity: we should do it in a separate step + # and allow to have pull work with any registry + registry = "porcepix.sboai.cs.eurecom.fr" + with cls_cmd.getConnection("localhost") as cmd: + ret = cmd.run(f"ping -c1 -w1 {registry}") + if ret.returncode != 0: # could not ping once -> skip test + self.skipTest(f"test_pull_clean_local_reg: could not reach {registry} (run inside sboai)") + svr_id = '0' + images = ["oai-gnb"] + tag = "develop" + pull = self.cont.Pull_Image_from_Registry(self.html, svr_id, images, tag=tag) + clean = self.cont.Clean_Test_Server_Images(self.html, svr_id, images, tag=tag) + self.assertTrue(pull) + self.assertTrue(clean) + + def test_pull_clean_docker_hub(self): + svr_id = '0' + r = "docker.io" + images = ["hello-world"] + tag = "latest" + pull = self.cont.Pull_Image_from_Registry(self.html, svr_id, images, tag=tag, registry=r, username=None, password=None) + clean = self.cont.Clean_Test_Server_Images(self.html, svr_id, images, tag=tag) + self.assertTrue(pull) + self.assertTrue(clean) + +if __name__ == '__main__':unittest.main() From 7bf706bc9a51dadad19ac9242bb820ed33761e52 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 15 Nov 2024 17:54:56 +0100 Subject: [PATCH 13/14] CI: harmonize pull/clean with flexric hack If we are pulling FlexRIC, overwrite the tag to use with what has been provided on the command line. This is because we hardcode the tag schema "branchname-commitId[0:8]" everywhere else, but this does not apply for FlexRIC, and we have to overwrite this here. --- ci-scripts/main.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 2c0413d343..9bf196338c 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -373,15 +373,17 @@ def ExecuteActionWithParam(action): svr_id = test.findtext('svr_id') success = CONTAINERS.Push_Image_to_Local_Registry(HTML, svr_id) - elif action == 'Pull_Local_Registry': + elif action == 'Pull_Local_Registry' or action == 'Clean_Test_Server_Images': svr_id = test.findtext('svr_id') images = test.findtext('images').split() - success = CONTAINERS.Pull_Image_from_Registry(HTML, svr_id, images) - - elif action == 'Clean_Test_Server_Images': - svr_id = test.findtext('svr_id') - images = test.findtext('images').split() - success = CONTAINERS.Clean_Test_Server_Images(HTML, svr_id, images) + # hack: for FlexRIC, we need to overwrite the tag to use + tag = None + if len(images) == 1 and images[0] == "oai-flexric": + tag = CONTAINERS.flexricTag + if action == "Pull_Local_Registry": + success = CONTAINERS.Pull_Image_from_Registry(HTML, svr_id, images, tag=tag) + if action == "Clean_Test_Server_Images": + success = CONTAINERS.Clean_Test_Server_Images(HTML, svr_id, images, tag=tag) elif action == 'Custom_Command': node = test.findtext('node') From 14c0d6b347fc6256c926391913c61cdfa0ed898b Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 15 Nov 2024 09:53:10 +0100 Subject: [PATCH 14/14] CI: Add FlexRIC test --- ci-scripts/Jenkinsfile-GitLab-Container | 23 ++ .../gnb.sa.band78.106prb.rfsim.flexric.conf | 239 ++++++++++++++++++ .../xml_files/container_5g_flexric_rfsim.xml | 213 ++++++++++++++++ .../5g_rfsimulator_flexric/conf/flexric.conf | 5 + .../5g_rfsimulator_flexric/docker-compose.yml | 81 ++++++ doc/TESTBenches.md | 3 + 6 files changed, 564 insertions(+) create mode 100644 ci-scripts/conf_files/gnb.sa.band78.106prb.rfsim.flexric.conf create mode 100644 ci-scripts/xml_files/container_5g_flexric_rfsim.xml create mode 100644 ci-scripts/yaml_files/5g_rfsimulator_flexric/conf/flexric.conf create mode 100644 ci-scripts/yaml_files/5g_rfsimulator_flexric/docker-compose.yml diff --git a/ci-scripts/Jenkinsfile-GitLab-Container b/ci-scripts/Jenkinsfile-GitLab-Container index 5a4e27ed19..cd8a50ed91 100644 --- a/ci-scripts/Jenkinsfile-GitLab-Container +++ b/ci-scripts/Jenkinsfile-GitLab-Container @@ -285,6 +285,29 @@ pipeline { } } } + stage ("OAI-FLEXRIC-RAN-Integration-Test") { + when { expression {do5Gtest} } + steps { + script { + triggerSlaveJob ('OAI-FLEXRIC-RAN-Integration-Test', 'OAI-FLEXRIC-RAN-Integration-Test') + } + } + post { + always { + script { + // Using a unique variable name for each test stage to avoid overwriting on a global variable + // due to parallel-time concurrency + flexricRAN5GStatus = finalizeSlaveJob('OAI-FLEXRIC-RAN-Integration-Test') + } + } + failure { + script { + currentBuild.result = 'FAILURE' + failingStages += flexricRAN5GStatus + } + } + } + } stage ("L2-Sim-Test-4G") { when { expression {do4Gtest} } steps { diff --git a/ci-scripts/conf_files/gnb.sa.band78.106prb.rfsim.flexric.conf b/ci-scripts/conf_files/gnb.sa.band78.106prb.rfsim.flexric.conf new file mode 100644 index 0000000000..8e7f52a931 --- /dev/null +++ b/ci-scripts/conf_files/gnb.sa.band78.106prb.rfsim.flexric.conf @@ -0,0 +1,239 @@ +Active_gNBs = ( "gnb-rfsim"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +gNBs = +( + { + ////////// Identification parameters: + gNB_ID = 0xe00; + + gNB_name = "gnb-rfsim"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = 1; + + plmn_list = ({ mcc = 001; mnc = 01; mnc_length = 2; snssaiList = ({ sst = 1; }) }); + + nr_cellid = 12345678L + + ////////// Physical parameters: + + min_rxtxtime = 6; + + servingCellConfigCommon = ( + { +#spCellConfigCommon + + physCellId = 0; + +# downlinkConfigCommon + #frequencyInfoDL + # this is 3300.60 MHz + 53*12*30e-3 MHz = 3319.68 + absoluteFrequencySSB = 621312; + # this is 3300.60 MHz + dl_absoluteFrequencyPointA = 620040; + #scs-SpecificCarrierList + dl_offstToCarrier = 0; + # subcarrierSpacing + # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + dl_subcarrierSpacing = 1; + dl_carrierBandwidth = 106; + #initialDownlinkBWP + #genericParameters + # this is RBstart=0,L=106 (275*(L-1))+RBstart + initialDLBWPlocationAndBandwidth = 28875; + # subcarrierSpacing + # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialDLBWPsubcarrierSpacing = 1; + #pdcch-ConfigCommon + initialDLBWPcontrolResourceSetZero = 11; + initialDLBWPsearchSpaceZero = 0; + +# uplinkConfigCommon + #frequencyInfoUL + ul_frequencyBand = 78; + #scs-SpecificCarrierList + ul_offstToCarrier = 0; + # subcarrierSpacing + # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + ul_subcarrierSpacing = 1; + ul_carrierBandwidth = 106; + pMax = 20; + #initialUplinkBWP + #genericParameters + initialULBWPlocationAndBandwidth = 28875; + # subcarrierSpacing + # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialULBWPsubcarrierSpacing = 1; + #rach-ConfigCommon + #rach-ConfigGeneric + prach_ConfigurationIndex = 98; + #prach_msg1_FDM + #0 = one, 1=two, 2=four, 3=eight + prach_msg1_FDM = 0; + prach_msg1_FrequencyStart = 0; + zeroCorrelationZoneConfig = 12; + preambleReceivedTargetPower = -104; + #preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200) + preambleTransMax = 6; + #powerRampingStep + # 0=dB0,1=dB2,2=dB4,3=dB6 + powerRampingStep = 1; + #ra_ReponseWindow + #1,2,4,8,10,20,40,80 + ra_ResponseWindow = 4; + #ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR + #1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen + ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR = 3; + #oneHalf (0..15) 4,8,12,16,...60,64 + ssb_perRACH_OccasionAndCB_PreamblesPerSSB = 15; + #ra_ContentionResolutionTimer + #(0..7) 8,16,24,32,40,48,56,64 + ra_ContentionResolutionTimer = 7; + rsrp_ThresholdSSB = 19; + #prach-RootSequenceIndex_PR + #1 = 839, 2 = 139 + prach_RootSequenceIndex_PR = 2; + prach_RootSequenceIndex = 1; + # SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex + # + msg1_SubcarrierSpacing = 1, + # restrictedSetConfig + # 0=unrestricted, 1=restricted type A, 2=restricted type B + restrictedSetConfig = 0, + + msg3_DeltaPreamble = 1; + p0_NominalWithGrant = -90; + + # pucch-ConfigCommon setup : + # pucchGroupHopping + # 0 = neither, 1= group hopping, 2=sequence hopping + pucchGroupHopping = 0; + hoppingId = 40; + p0_nominal = -90; + + ssb_PositionsInBurst_Bitmap = 1; + + # ssb_periodicityServingCell + # 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1 + ssb_periodicityServingCell = 2; + + # dmrs_TypeA_position + # 0 = pos2, 1 = pos3 + dmrs_TypeA_Position = 0; + + # subcarrierSpacing + # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + subcarrierSpacing = 1; + + #tdd-UL-DL-ConfigurationCommon + # subcarrierSpacing + # 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + referenceSubcarrierSpacing = 1; + # pattern1 + # dl_UL_TransmissionPeriodicity + # 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10 + dl_UL_TransmissionPeriodicity = 6; + nrofDownlinkSlots = 7; + nrofDownlinkSymbols = 6; + nrofUplinkSlots = 2; + nrofUplinkSymbols = 4; + + ssPBCH_BlockPower = -25; + }); + + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + ////////// AMF parameters: + amf_ip_address = ({ ipv4 = "192.168.70.132"; }); + + NETWORK_INTERFACES : + { + GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.70.151"; + GNB_IPV4_ADDRESS_FOR_NGU = "192.168.70.151"; + GNB_PORT_FOR_S1U = 2152; # Spec 2152 + }; + + } +); + +MACRLCs = ( + { + num_cc = 1; + tr_s_preference = "local_L1"; + tr_n_preference = "local_RRC"; + pusch_TargetSNRx10 = 200; + pucch_TargetSNRx10 = 200; + } +); + +L1s = ( +{ + num_cc = 1; + tr_n_preference = "local_mac"; + prach_dtx_threshold = 200; +# pucch0_dtx_threshold = 150; +} +); + +RUs = ( + { + local_rf = "yes"; + nb_tx = 1; + nb_rx = 1; + att_tx = 0; + att_rx = 0; + bands = [78]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 75; + eNB_instances = [0]; + sf_extension = 0; + sdr_addrs = "serial=XXXXXXX"; + } +); + +rfsimulator: { + serveraddr = "server"; +}; + +security = { + # preferred ciphering algorithms + # the first one of the list that an UE supports in chosen + # valid values: nea0, nea1, nea2, nea3 + ciphering_algorithms = ( "nea0" ); + + # preferred integrity algorithms + # the first one of the list that an UE supports in chosen + # valid values: nia0, nia1, nia2, nia3 + integrity_algorithms = ( "nia2", "nia0" ); + + # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter + # what 'ciphering_algorithms' configures; same thing for 'drb_integrity' + drb_ciphering = "yes"; + drb_integrity = "no"; +}; + +log_config : { + global_log_level ="info"; + hw_log_level ="info"; + phy_log_level ="info"; + mac_log_level ="info"; + rlc_log_level ="info"; + pdcp_log_level ="info"; + rrc_log_level ="info"; + f1ap_log_level ="info"; +}; + +e2_agent = { + near_ric_ip_addr = "192.168.70.150"; + #sm_dir = "/path/where/the/SMs/are/located/" + sm_dir = "/usr/local/lib/flexric/" +}; diff --git a/ci-scripts/xml_files/container_5g_flexric_rfsim.xml b/ci-scripts/xml_files/container_5g_flexric_rfsim.xml new file mode 100644 index 0000000000..cc791980f0 --- /dev/null +++ b/ci-scripts/xml_files/container_5g_flexric_rfsim.xml @@ -0,0 +1,213 @@ + + + rfsim-5gnr-flexric + Monolithic SA TDD gNB and FlexRic Integration + wrench + 1 + + 111110 + 111111 + 111112 + 000001 + 000002 + 000003 + 002001 + 010000 + 000004 + 333333 + 010001 + 010002 + 010003 + 020005 + 010013 + 002006 + 444444 + 100002 + 100001 + 222221 + 222222 + + + + + IdleSleep + Sleep + 10 + + + + Pull_Local_Registry + Pull Images from Local Registry + 0 + oai-gnb oai-nr-ue + + + + Pull_Local_Registry + Pull Images from Local Registry + 0 + oai-flexric + + + + Clean_Test_Server_Images + Clean Test Images on Test Server + 0 + oai-gnb oai-nr-ue + true + + + + Clean_Test_Server_Images + Clean Test Images on Test Server + 0 + oai-flexric + true + + + + Custom_Command + Updating CN5G images + localhost + docker compose -f ../doc/tutorial_resources/oai-cn5g/docker-compose.yaml pull + + + + Deploy_Object + Deploy OAI 5G CoreNetwork + doc/tutorial_resources/oai-cn5g + mysql oai-nrf oai-udr oai-udm oai-ausf oai-amf oai-smf oai-upf oai-ext-dn + 0 + 0 + + + + Deploy_Object + Deploy OAI FlexRIC + ci-scripts/yaml_files/5g_rfsimulator_flexric + oai-flexric + 0 + 0 + + + + Deploy_Object + Deploy OAI 5G gNB in RF sim SA + ci-scripts/yaml_files/5g_rfsimulator_flexric + oai-gnb + 0 + 0 + + + + Deploy_Object + Deploy 2 OAI 5G NR-UEs in RF sim SA + ci-scripts/yaml_files/5g_rfsimulator_flexric + oai-nr-ue oai-nr-ue2 + 0 + 0 + + + + Ping + Ping ext-dn from both UEs + rfsim5g_ue rfsim5g_ue2 + selfix selfix + -c 20 192.168.70.135 + 5 + + + + Attach_UE + Attach OAI UE 1 and 2 + rfsim5g_ue rfsim5g_ue2 + selfix selfix + + + + Detach_UE + Detach OAI UE 1 and 2 + rfsim5g_ue rfsim5g_ue2 + selfix selfix + + + + Undeploy_Object + Undeploy Core Network + doc/tutorial_resources/oai-cn5g + 0 + 0 + true + + + + Undeploy_Object + Undeploy RAN and Flexric + ci-scripts/yaml_files/5g_rfsimulator_flexric + 0 + 0 + true + + + + Custom_Command + RC monitoring + localhost + yes + docker exec oai-flexric bash -c "stdbuf -o0 /usr/local/flexric/xApp/c/monitor/xapp_rc_moni" > ../cmake_targets/log/5g_rfsimulator_flexric/rc-moni-010000.log + + + + Custom_Command + KPM monitoring + localhost + yes + docker exec oai-flexric bash -c "stdbuf -o0 /usr/local/flexric/xApp/c/monitor/xapp_kpm_moni" > ../cmake_targets/log/5g_rfsimulator_flexric/kpm-moni-010001.log + + + + Custom_Command + KPM monitoring and RC control + localhost + yes + docker exec oai-flexric bash -c "stdbuf -o0 /usr/local/flexric/xApp/c/kpm_rc/xapp_kpm_rc" > ../cmake_targets/log/5g_rfsimulator_flexric/kpm_rc-010002.log + + + + Custom_Command + Custom SMs monitoring + localhost + yes + docker exec oai-flexric bash -c "stdbuf -o0 /usr/local/flexric/xApp/c/monitor/xapp_gtp_mac_rlc_pdcp_moni" > ../cmake_targets/log/5g_rfsimulator_flexric/sms-moni-010003.log + + + + Custom_Command + Custom SMs monitoring + localhost + yes + docker exec oai-flexric bash -c "stdbuf -o0 /usr/local/flexric/xApp/c/monitor/xapp_gtp_mac_rlc_pdcp_moni" > ../cmake_targets/log/5g_rfsimulator_flexric/sms-moni-010013.log + + + diff --git a/ci-scripts/yaml_files/5g_rfsimulator_flexric/conf/flexric.conf b/ci-scripts/yaml_files/5g_rfsimulator_flexric/conf/flexric.conf new file mode 100644 index 0000000000..5ffbf3d47f --- /dev/null +++ b/ci-scripts/yaml_files/5g_rfsimulator_flexric/conf/flexric.conf @@ -0,0 +1,5 @@ +[NEAR-RIC] +NEAR_RIC_IP = 192.168.70.150 +[XAPP] +DB_PATH = /flexric/db/ +DB_NAME = xapp_rnis_db diff --git a/ci-scripts/yaml_files/5g_rfsimulator_flexric/docker-compose.yml b/ci-scripts/yaml_files/5g_rfsimulator_flexric/docker-compose.yml new file mode 100644 index 0000000000..9afdd02b60 --- /dev/null +++ b/ci-scripts/yaml_files/5g_rfsimulator_flexric/docker-compose.yml @@ -0,0 +1,81 @@ +services: + oai-flexric: + image: ${REGISTRY:-oaisoftwarealliance}/oai-flexric:${FLEXRIC_TAG:-develop} + container_name: oai-flexric + networks: + public_net: + ipv4_address: 192.168.70.150 + volumes: + - ./conf/flexric.conf:/usr/local/etc/flexric/flexric.conf + - sharedXappLibs:/usr/local/lib/flexric/ + healthcheck: + test: /bin/bash -c "pgrep nearRT-RIC" + interval: 10s + timeout: 5s + + oai-gnb: + image: ${REGISTRY:-oaisoftwarealliance}/${GNB_IMG:-oai-gnb}:${TAG:-develop} + privileged: true + container_name: rfsim5g-oai-gnb + environment: + USE_ADDITIONAL_OPTIONS: -E --rfsim --log_config.global_log_options level,nocolor,time + ASAN_OPTIONS: detect_leaks=0 + depends_on: + - oai-flexric + networks: + public_net: + ipv4_address: 192.168.70.151 + volumes: + - ../../conf_files/gnb.sa.band78.106prb.rfsim.flexric.conf:/opt/oai-gnb/etc/gnb.conf + - sharedXappLibs:/usr/local/lib/flexric/ + healthcheck: + test: /bin/bash -c "pgrep nr-softmodem" + interval: 10s + timeout: 5s + retries: 5 + + oai-nr-ue: + image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop} + privileged: true + container_name: rfsim5g-oai-nr-ue + environment: + USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 -C 3619200000 --uicc0.imsi 001010000000003 --rfsimulator.serveraddr 192.168.70.151 --log_config.global_log_options level,nocolor,time + depends_on: + - oai-gnb + networks: + public_net: + ipv4_address: 192.168.70.152 + volumes: + - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf + healthcheck: + test: /bin/bash -c "pgrep nr-uesoftmodem" + interval: 10s + timeout: 5s + retries: 5 + + oai-nr-ue2: + image: ${REGISTRY:-oaisoftwarealliance}/${NRUE_IMG:-oai-nr-ue}:${TAG:-develop} + privileged: true + container_name: rfsim5g-oai-nr-ue2 + environment: + USE_ADDITIONAL_OPTIONS: -E --rfsim -r 106 --numerology 1 -C 3619200000 --uicc0.imsi 001010000000004 --rfsimulator.serveraddr 192.168.70.151 --log_config.global_log_options level,nocolor,time + depends_on: + - oai-gnb + networks: + public_net: + ipv4_address: 192.168.70.153 + volumes: + - ../../conf_files/nrue.uicc.conf:/opt/oai-nr-ue/etc/nr-ue.conf + healthcheck: + test: /bin/bash -c "pgrep nr-uesoftmodem" + interval: 10s + timeout: 5s + retries: 5 + +volumes: + sharedXappLibs: + +networks: + public_net: + name: oai-cn5g-public-net + external: true diff --git a/doc/TESTBenches.md b/doc/TESTBenches.md index c41657538f..57606548e7 100644 --- a/doc/TESTBenches.md +++ b/doc/TESTBenches.md @@ -128,6 +128,9 @@ information on how the images are built. - [OAI-CN5G-COTS-UE-Test](https://jenkins-oai.eurecom.fr/job/OAI-CN5G-COTS-UE-Test/) ~5G-NR - using 5GC bench (resources `CI-Cetautomatix-OC-oaicicd-session`, `CI-Dogmatix-CN5G-gNB`): Attach/Detach of UE with multiple PDU sessions +- [OAI-FLEXRIC-RAN-Integration-Test](https://jenkins-oai.eurecom.fr/job/OAI-FLEXRIC-RAN-Integration-Test/) ~5G-NR + - selfix (gNB, nrUE, OAI 5GC, FlexRIC) + - uses RFsimulator, tests FlexRIC/E2 interface and xApps - [RAN-gNB-N300-Timing-Phytest-LDPC](https://jenkins-oai.eurecom.fr/view/RAN/job/RAN-gNB-N300-Timing-Phytest-LDPC/) ~5G-NR - caracal + N310