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) | ||||
|  | ||||
| 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,8 +51,25 @@ 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 | ||||
|     """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. | ||||
|     Any compilers found through this operating system will be used with | ||||
|     modules. If updated, user must make sure that version and name are | ||||
| @@ -63,9 +87,16 @@ def __str__(self): | ||||
|  | ||||
|     @classmethod | ||||
|     def _detect_crayos_version(cls): | ||||
|         release_attrs = read_cle_release_file() | ||||
|         v = spack.version.Version(release_attrs['RELEASE']) | ||||
|         return v[0] | ||||
|         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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user