Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
mpsd-software-manager
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
MPSD Computational Science
mpsd-software-manager
Commits
ee769409
Commit
ee769409
authored
1 year ago
by
Ashwin Kumar Karnad
Browse files
Options
Downloads
Plain Diff
Merge branch 'try-status-command' into 'main'
Status command See merge request mpsd-cs/mpsd-software-environments!41
parents
9be3627e
14b53124
No related branches found
No related tags found
1 merge request
!41
Status command
Pipeline
#370534
failed
1 year ago
Stage: test
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
mpsd-software-environment.py
+81
-0
81 additions, 0 deletions
mpsd-software-environment.py
tests.py
+26
-0
26 additions, 0 deletions
tests.py
with
107 additions
and
0 deletions
mpsd-software-environment.py
+
81
−
0
View file @
ee769409
...
...
@@ -918,6 +918,84 @@ def start_new_environment(release, from_release, target_dir):
raise
NotImplementedError
(
msg
)
def
environment_status
(
mpsd_release
:
str
,
root_dir
:
Union
[
str
,
Path
])
->
dict
:
"""
Show status of release in installation.
Parameters
----------
mpsd_release : str
A string representing the MPSD release version.
root_dir : pathlib.Path
A Path object pointing to the root directory of the installation.
Expect a subfolder root/mpsd_release in which we search for the
toolchains.
Returns
-------
toolchain_map : dict
A dictionary containing available microarchitectures as keys and
a list of available toolchains as values for each microarchitecture.
"""
msg
=
f
"
Showing status of release
{
mpsd_release
}
in
{
root_dir
}
"
logging
.
info
(
msg
)
plog
=
logging
.
getLogger
(
"
print
"
)
release_base_dir
=
root_dir
/
mpsd_release
microarch
=
get_native_microarchitecture
()
toolchain_dir
=
release_base_dir
/
microarch
spack_dir
=
toolchain_dir
/
"
spack
"
# if the mpsd_release does not exist:
if
not
release_base_dir
.
exists
():
logging
.
debug
(
f
"
Directory
{
str
(
release_base_dir
)
}
does not exist.
"
)
logging
.
error
(
f
"
MPSD release
'
{
mpsd_release
}
'
is not installed.
"
)
return
None
# if the mpds_release directory exists but the spack repository is not fully
# cloned - indicates some kind of incomplete installation:
if
not
spack_dir
.
exists
():
logging
.
debug
(
f
"
Looking for files in
{
spack_dir
}
"
)
logging
.
error
(
f
"
MPSD release
'
{
mpsd_release
}
'
has not been completely installed.
"
)
return
None
# find all folders for all microarch in the release directory
# except for the blacklisted files
black_listed_files
=
[
config_vars
[
"
cmd_log_file
"
],
"
spack-environments
"
,
"
logs
"
,
"
mpsd-spack-cache
"
,
]
list_of_microarchs_candidates
=
os
.
listdir
(
release_base_dir
)
list_of_microarchs
=
[
x
for
x
in
list_of_microarchs_candidates
if
x
not
in
black_listed_files
]
logging
.
debug
(
f
"
{
list_of_microarchs
=
}
"
)
toolchain_map
=
{}
for
microarch
in
list_of_microarchs
:
# get a list of all the toolchains in the microarch
possible_toolchains
=
(
release_base_dir
/
microarch
).
glob
(
"
lmod/Core/toolchains/*.lua
"
)
# append toolchain which is the name of the file without the .lua extension
toolchain_map
[
microarch
]
=
[
toolchain
.
stem
for
toolchain
in
possible_toolchains
]
logging
.
debug
(
f
"
{
toolchain_map
=
}
"
)
# pretty print the toolchain map key as the heading
# and the value as the list of toolchains
plog
.
info
(
f
"
Toolchains installed in the
{
mpsd_release
=
}
for each Microarchitecture:
"
)
for
microarch
,
toolchains
in
toolchain_map
.
items
():
plog
.
info
(
f
"
-
{
microarch
}
:
\n
\t
{
toolchains
}
"
)
return
toolchain_map
def
main
():
"""
Execute main entry point.
"""
parser
=
argparse
.
ArgumentParser
(
description
=
about_tool
)
...
...
@@ -942,6 +1020,7 @@ def main():
(
"
reinstall
"
,
"
Reinstall a software environment
"
),
(
"
remove
"
,
"
Remove a software environment or toolchains from an environment
"
),
(
"
start-new
"
,
"
Start a new software environment version
"
),
(
"
status
"
,
"
Show the status of the software environment
"
),
]
for
cmd
,
help_text
in
list_of_cmds
:
subp
=
subparsers
.
add_parser
(
cmd
,
help
=
help_text
)
...
...
@@ -1017,6 +1096,8 @@ def main():
install_environment
(
args
.
release
,
args
.
toolchains
,
root_dir
,
False
,
args
.
enable_build_cache
)
elif
args
.
action
==
"
status
"
:
_
=
environment_status
(
args
.
release
,
script_dir
)
elif
args
.
action
==
"
prepare
"
:
prepare_environment
(
args
.
release
,
root_dir
)
elif
args
.
action
==
"
available
"
:
...
...
This diff is collapsed.
Click to expand it.
tests.py
+
26
−
0
View file @
ee769409
...
...
@@ -443,6 +443,32 @@ def test_create_log_file_names():
assert
build_log_file_name
is
None
def
test_environment_status
(
tmp_path
):
"""
Test that the environment status is correct.
"""
toolchain_map
=
mod
.
environment_status
(
"
fake-release
"
,
tmp_path
)
assert
toolchain_map
is
None
# create a fake environment
mpsd_release
=
"
dev-23a
"
test_microarch
=
mod
.
get_native_microarchitecture
()
expected_toolchain_map
=
{
test_microarch
:
[
"
foss2021a
"
,
"
intel2021a
"
]}
for
microarch
in
expected_toolchain_map
.
keys
():
toolchain_lmod_folder
=
(
tmp_path
/
mpsd_release
/
microarch
/
"
lmod
"
/
"
Core
"
/
"
toolchains
"
)
toolchain_lmod_folder
.
mkdir
(
parents
=
True
)
spack_folder
=
tmp_path
/
mpsd_release
/
microarch
/
"
spack
"
spack_folder
.
mkdir
(
parents
=
True
)
for
toolchain
in
expected_toolchain_map
[
microarch
]:
toolchain_file
=
toolchain_lmod_folder
/
f
"
{
toolchain
}
.lua
"
toolchain_file
.
touch
()
# check that the environment status is correct
toolchain_map
=
mod
.
environment_status
(
mpsd_release
,
tmp_path
)
# convert each list to a set to ensure that the order doesn't matter
for
microarch
in
expected_toolchain_map
.
keys
():
assert
set
(
toolchain_map
[
microarch
])
==
set
(
expected_toolchain_map
[
microarch
])
def
test_interface
(
tmp_path
):
"""
Test other things (not implemented yet).
"""
pass
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment