Fix CNL version detection (#12207)
This commit is contained in:
parent
36558dc262
commit
98605bba0d
2 changed files with 76 additions and 6 deletions
|
@ -3,22 +3,27 @@
|
|||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
import os
|
||||
import re
|
||||
|
||||
import llnl.util.tty as tty
|
||||
|
||||
import spack.error
|
||||
import spack.version
|
||||
from spack.architecture import OperatingSystem
|
||||
from spack.util.module_cmd import module
|
||||
|
||||
#: Location of the Cray CLE release file, which we look at to get the CNL
|
||||
#: OS version.
|
||||
#: Possible locations of the Cray CLE release file,
|
||||
#: which we look at to get the CNL OS version.
|
||||
_cle_release_file = '/etc/opt/cray/release/cle-release'
|
||||
_clerelease_file = '/etc/opt/cray/release/clerelease'
|
||||
|
||||
|
||||
def read_cle_release_file():
|
||||
"""Read the CLE release file and return a dict with its attributes.
|
||||
|
||||
This file is present on newer versions of Cray.
|
||||
|
||||
The release file looks something like this::
|
||||
|
||||
RELEASE=6.0.UP07
|
||||
|
@ -33,6 +38,8 @@ def read_cle_release_file():
|
|||
...
|
||||
}
|
||||
|
||||
Returns:
|
||||
dict: dictionary of release attributes
|
||||
"""
|
||||
with open(_cle_release_file) as release_file:
|
||||
result = {}
|
||||
|
@ -44,6 +51,23 @@ def read_cle_release_file():
|
|||
return result
|
||||
|
||||
|
||||
def read_clerelease_file():
|
||||
"""Read the CLE release file and return the Cray OS version.
|
||||
|
||||
This file is present on older versions of Cray.
|
||||
|
||||
The release file looks something like this::
|
||||
|
||||
5.2.UP04
|
||||
|
||||
Returns:
|
||||
str: the Cray OS version
|
||||
"""
|
||||
with open(_clerelease_file) as release_file:
|
||||
for line in release_file:
|
||||
return line.strip()
|
||||
|
||||
|
||||
class Cnl(OperatingSystem):
|
||||
"""Compute Node Linux (CNL) is the operating system used for the Cray XC
|
||||
series super computers. It is a very stripped down version of GNU/Linux.
|
||||
|
@ -63,9 +87,16 @@ def __str__(self):
|
|||
|
||||
@classmethod
|
||||
def _detect_crayos_version(cls):
|
||||
if os.path.isfile(_cle_release_file):
|
||||
release_attrs = read_cle_release_file()
|
||||
v = spack.version.Version(release_attrs['RELEASE'])
|
||||
return v[0]
|
||||
elif os.path.isfile(_clerelease_file):
|
||||
v = read_clerelease_file()
|
||||
return spack.version.Version(v)[0]
|
||||
else:
|
||||
raise spack.error.UnsupportedPlatformError(
|
||||
'Unable to detect Cray OS version')
|
||||
|
||||
def arguments_to_detect_version_fn(self, paths):
|
||||
import spack.compilers
|
||||
|
|
|
@ -32,3 +32,42 @@ def test_read_cle_release_file(tmpdir, monkeypatch):
|
|||
assert attrs['DUMMY'] == 'foo=bar'
|
||||
|
||||
assert cnl.Cnl._detect_crayos_version() == 6
|
||||
|
||||
|
||||
def test_read_clerelease_file(tmpdir, monkeypatch):
|
||||
"""test reading the Cray clerelease file"""
|
||||
clerelease_path = tmpdir.join('clerelease')
|
||||
with clerelease_path.open('w') as f:
|
||||
f.write('5.2.UP04\n')
|
||||
|
||||
monkeypatch.setattr(cnl, '_clerelease_file', str(clerelease_path))
|
||||
v = cnl.read_clerelease_file()
|
||||
|
||||
assert v == '5.2.UP04'
|
||||
|
||||
assert cnl.Cnl._detect_crayos_version() == 5
|
||||
|
||||
|
||||
def test_cle_release_precedence(tmpdir, monkeypatch):
|
||||
"""test that cle-release file takes precedence over clerelease file."""
|
||||
cle_release_path = tmpdir.join('cle-release')
|
||||
clerelease_path = tmpdir.join('clerelease')
|
||||
|
||||
with cle_release_path.open('w') as f:
|
||||
f.write("""\
|
||||
RELEASE=6.0.UP07
|
||||
BUILD=6.0.7424
|
||||
DATE=20190611
|
||||
ARCH=noarch
|
||||
NETWORK=ari
|
||||
PATCHSET=35-201906112304
|
||||
DUMMY=foo=bar
|
||||
""")
|
||||
|
||||
with clerelease_path.open('w') as f:
|
||||
f.write('5.2.UP04\n')
|
||||
|
||||
monkeypatch.setattr(cnl, '_clerelease_file', str(clerelease_path))
|
||||
monkeypatch.setattr(cnl, '_cle_release_file', str(cle_release_path))
|
||||
|
||||
assert cnl.Cnl._detect_crayos_version() == 6
|
||||
|
|
Loading…
Reference in a new issue