Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenXG
OpenXG-RAN
Commits
2b4e0e52
Commit
2b4e0e52
authored
Aug 05, 2025
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use archiveArtifact() for CN undeploy
parent
dcbb3369
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
26 additions
and
25 deletions
+26
-25
ci-scripts/cls_corenetwork.py
ci-scripts/cls_corenetwork.py
+8
-9
ci-scripts/cls_oaicitest.py
ci-scripts/cls_oaicitest.py
+4
-10
ci-scripts/main.py
ci-scripts/main.py
+1
-1
ci-scripts/tests/corenetwork.py
ci-scripts/tests/corenetwork.py
+13
-5
No files found.
ci-scripts/cls_corenetwork.py
View file @
2b4e0e52
...
...
@@ -29,6 +29,7 @@ import yaml
import
re
import
cls_cmd
from
cls_ci_helper
import
archiveArtifact
def
listify
(
s
):
if
s
is
None
:
...
...
@@ -114,8 +115,7 @@ class CoreNetwork:
logging
.
info
(
f'deployed core network
{
self
}
, pingable IP address
{
ip
}
'
)
return
True
,
output
def
_collect_logs
(
self
,
log_dir
):
logging
.
info
(
f'collecting logs into (local)
{
log_dir
}
'
)
def
_collect_logs
(
self
,
ctx
):
remote_dir
=
"/tmp/cn-undeploy-logs"
with
cls_cmd
.
getConnection
(
self
.
_host
)
as
c
:
# create a directory for log collection
...
...
@@ -134,18 +134,17 @@ class CoreNetwork:
logging
.
error
(
"cannot enumerate log files"
)
return
[]
log_files
=
[]
# copy them to the executor one by one
, and store in log_dir
# copy them to the executor one by one
for
f
in
ret
.
stdout
.
split
(
"
\n
"
):
l
=
f
.
replace
(
remote_dir
,
log_dir
)
c
.
copyin
(
f
,
l
)
log_files
.
append
(
l
)
name
=
archiveArtifact
(
c
,
ctx
,
f
)
log_files
.
append
(
name
)
c
.
run
(
f'rm -rf
{
remote_dir
}
'
)
return
log_files
def
undeploy
(
self
,
log_dir
=
None
):
def
undeploy
(
self
,
ctx
=
None
):
log_files
=
[]
if
log_dir
is
not
None
:
log_files
=
self
.
_collect_logs
(
log_dir
)
if
ctx
is
not
None
:
log_files
=
self
.
_collect_logs
(
ctx
)
else
:
logging
.
warning
(
"no directory for log collection specified, cannot retrieve core network logs"
)
logging
.
info
(
f'undeploy core network
{
self
}
'
)
...
...
ci-scripts/cls_oaicitest.py
View file @
2b4e0e52
...
...
@@ -844,7 +844,7 @@ class OaiCiTest():
HTML
.
CreateHtmlTestRowQueue
(
f'N/A'
,
'OK'
,
messages
)
return
True
def
DeployCoreNetwork
(
cn_id
,
HTML
):
def
DeployCoreNetwork
(
cn_id
,
ctx
,
HTML
):
core_name
=
cn_id
.
strip
()
cn
=
cls_corenetwork
.
CoreNetwork
(
core_name
)
success
,
output
=
cn
.
deploy
()
...
...
@@ -858,18 +858,12 @@ class OaiCiTest():
HTML
.
CreateHtmlTestRowQueue
(
core_name
,
'KO'
,
[
msg
])
return
success
def
UndeployCoreNetwork
(
cn_id
,
HTML
):
# Ping, Iperf, DeployObject put logs into a path based on YAML. We
# can't do this here (because there is no yaml), so hardcode a path for
# "cn_logs" for the moment
logPath
=
f'
{
os
.
getcwd
()
}
/../cmake_targets/log/cn_logs'
with
cls_cmd
.
getConnection
(
'localhost'
)
as
local
:
local
.
run
(
f'mkdir -p
{
logPath
}
'
,
silent
=
True
)
def
UndeployCoreNetwork
(
cn_id
,
ctx
,
HTML
):
core_name
=
cn_id
.
strip
()
cn
=
cls_corenetwork
.
CoreNetwork
(
core_name
)
logs
,
output
=
cn
.
undeploy
(
log_dir
=
logPath
)
logs
,
output
=
cn
.
undeploy
(
ctx
=
ctx
)
logging
.
info
(
f"undeployed core network
{
core_name
}
, logs
{
logs
}
, output:
\n
{
output
}
"
)
message
=
"Log files:
"
+
",
"
.
join
([
os
.
path
.
basename
(
l
)
for
l
in
logs
])
message
=
"Log files:
\n
"
+
"
\n
"
.
join
([
os
.
path
.
basename
(
l
)
for
l
in
logs
])
HTML
.
CreateHtmlTestRowQueue
(
core_name
,
'OK'
,
[
message
])
return
True
...
...
ci-scripts/main.py
View file @
2b4e0e52
...
...
@@ -302,7 +302,7 @@ def ExecuteActionWithParam(action, ctx):
elif
action
==
'DeployCoreNetwork'
or
action
==
'UndeployCoreNetwork'
:
cn_id
=
test
.
findtext
(
'cn_id'
)
core_op
=
getattr
(
cls_oaicitest
.
OaiCiTest
,
action
)
success
=
core_op
(
cn_id
,
HTML
)
success
=
core_op
(
cn_id
,
ctx
,
HTML
)
elif
action
==
'Deploy_Object'
or
action
==
'Undeploy_Object'
or
action
==
"Create_Workspace"
:
eNB_instance
=
test
.
findtext
(
'eNB_instance'
)
...
...
ci-scripts/tests/corenetwork.py
View file @
2b4e0e52
...
...
@@ -6,14 +6,22 @@ logging.basicConfig(
format
=
"[%(asctime)s] %(levelname)8s: %(message)s"
)
import
os
import
tempfile
import
unittest
sys
.
path
.
append
(
'./'
)
# to find OAI imports below
import
cls_corenetwork
from
cls_ci_helper
import
TestCaseCtx
import
cls_cmd
class
TestCoreNetwork
(
unittest
.
TestCase
):
def
setUp
(
self
):
self
.
ctx
=
TestCaseCtx
.
Default
(
tempfile
.
mkdtemp
())
def
tearDown
(
self
):
with
cls_cmd
.
LocalCmd
()
as
c
:
c
.
run
(
f'rm -rf
{
self
.
ctx
.
logPath
}
'
)
def
test_simple_core
(
self
):
c
=
cls_corenetwork
.
CoreNetwork
(
"test"
,
filename
=
"tests/config/test_core_infra.yaml"
)
success
,
output
=
c
.
deploy
()
...
...
@@ -22,14 +30,14 @@ class TestCoreNetwork(unittest.TestCase):
# should not have it set in config
self
.
assertTrue
(
c
.
runIperf3Server
())
self
.
assertEqual
(
c
.
getIP
(),
"127.0.0.1"
)
log_files
,
output
=
c
.
undeploy
(
log_dir
=
"/tmp"
)
log_files
,
output
=
c
.
undeploy
(
self
.
ctx
)
self
.
assertEqual
(
output
,
"undeploy"
)
with
cls_cmd
.
LocalCmd
()
as
cmd
:
# there must be one log file for this (test) core
self
.
assertEqual
(
len
(
log_files
),
1
)
#
test core writes to %%log_dir%%/logs, which expands to /tmp/
logs
#
undeploy uses archiveArtifact(), which writes to {prefix}-
logs
l
=
log_files
[
0
]
self
.
assertEqual
(
l
,
"/tmp/
logs"
)
self
.
assertEqual
(
l
,
f"
{
self
.
ctx
.
baseFilename
()
}
-
logs"
)
ret
=
cmd
.
run
(
f"cat
{
l
}
"
)
self
.
assertEqual
(
ret
.
returncode
,
0
)
# command must succeed
self
.
assertEqual
(
ret
.
stdout
,
"logs"
)
# output should be "logs"
...
...
@@ -39,14 +47,14 @@ class TestCoreNetwork(unittest.TestCase):
success
,
_
=
c
.
deploy
()
self
.
assertTrue
(
success
)
self
.
assertFalse
(
c
.
runIperf3Server
())
c
.
undeploy
(
log_dir
=
"/tmp"
)
c
.
undeploy
(
None
)
def
test_core_fail
(
self
):
c
=
cls_corenetwork
.
CoreNetwork
(
"test_fail"
,
filename
=
"tests/config/test_core_infra.yaml"
)
success
,
_
=
c
.
deploy
()
self
.
assertFalse
(
success
)
# undeployment should still work
c
.
undeploy
(
log_dir
=
"/tmp"
)
c
.
undeploy
(
None
)
def
test_core_script
(
self
):
c
=
cls_corenetwork
.
CoreNetwork
(
"test_script"
,
filename
=
"tests/config/test_core_infra.yaml"
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment