Fix CNL version detection (#12207)
This commit is contained in:
		 Adam J. Stewart
					Adam J. Stewart
				
			
				
					committed by
					
						 Todd Gamblin
						Todd Gamblin
					
				
			
			
				
	
			
			
			 Todd Gamblin
						Todd Gamblin
					
				
			
						parent
						
							36558dc262
						
					
				
				
					commit
					98605bba0d
				
			| @@ -3,22 +3,27 @@ | |||||||
| # | # | ||||||
| # SPDX-License-Identifier: (Apache-2.0 OR MIT) | # SPDX-License-Identifier: (Apache-2.0 OR MIT) | ||||||
|  |  | ||||||
|  | import os | ||||||
| import re | import re | ||||||
|  |  | ||||||
| import llnl.util.tty as tty | import llnl.util.tty as tty | ||||||
|  |  | ||||||
|  | import spack.error | ||||||
| import spack.version | import spack.version | ||||||
| from spack.architecture import OperatingSystem | from spack.architecture import OperatingSystem | ||||||
| from spack.util.module_cmd import module | from spack.util.module_cmd import module | ||||||
|  |  | ||||||
| #: Location of the Cray CLE release file, which we look at to get the CNL | #: Possible locations of the Cray CLE release file, | ||||||
| #: OS version. | #: which we look at to get the CNL OS version. | ||||||
| _cle_release_file = '/etc/opt/cray/release/cle-release' | _cle_release_file = '/etc/opt/cray/release/cle-release' | ||||||
|  | _clerelease_file  = '/etc/opt/cray/release/clerelease' | ||||||
|  |  | ||||||
|  |  | ||||||
| def read_cle_release_file(): | def read_cle_release_file(): | ||||||
|     """Read the CLE release file and return a dict with its attributes. |     """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:: |     The release file looks something like this:: | ||||||
|  |  | ||||||
|         RELEASE=6.0.UP07 |         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: |     with open(_cle_release_file) as release_file: | ||||||
|         result = {} |         result = {} | ||||||
| @@ -44,8 +51,25 @@ def read_cle_release_file(): | |||||||
|         return result |         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): | class Cnl(OperatingSystem): | ||||||
|     """ Compute Node Linux (CNL) is the operating system used for the Cray XC |     """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. |     series super computers. It is a very stripped down version of GNU/Linux. | ||||||
|     Any compilers found through this operating system will be used with |     Any compilers found through this operating system will be used with | ||||||
|     modules. If updated, user must make sure that version and name are |     modules. If updated, user must make sure that version and name are | ||||||
| @@ -63,9 +87,16 @@ def __str__(self): | |||||||
|  |  | ||||||
|     @classmethod |     @classmethod | ||||||
|     def _detect_crayos_version(cls): |     def _detect_crayos_version(cls): | ||||||
|  |         if os.path.isfile(_cle_release_file): | ||||||
|             release_attrs = read_cle_release_file() |             release_attrs = read_cle_release_file() | ||||||
|             v = spack.version.Version(release_attrs['RELEASE']) |             v = spack.version.Version(release_attrs['RELEASE']) | ||||||
|             return v[0] |             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): |     def arguments_to_detect_version_fn(self, paths): | ||||||
|         import spack.compilers |         import spack.compilers | ||||||
|   | |||||||
| @@ -32,3 +32,42 @@ def test_read_cle_release_file(tmpdir, monkeypatch): | |||||||
|     assert attrs['DUMMY'] == 'foo=bar' |     assert attrs['DUMMY'] == 'foo=bar' | ||||||
|  |  | ||||||
|     assert cnl.Cnl._detect_crayos_version() == 6 |     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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user