Skip to content

Parsing Cray easyconfigs fails when using Hierarchical Module Naming Scheme (HMNS) #3265

@seb45tian

Description

@seb45tian

When processing Cray specific easyconfigs in combination with an Hierarchical Module Naming Scheme parsing of the easyconfig file fails. (I actually encountered this when using the "--list-installed-software" option which in turn is parsing all easyconfigs. Not trying this on a Cray machine.)

Steps to reproduce:

eb HPL-2.3-CrayCCE-19.06.eb -D --module-naming-scheme HiearchicalMN

Traceback Error Message:

  File "/usr/lib64/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/Applic.HPC/Easybuild/ivybridge/2019a/software/EasyBuild/4.1.2/lib/python2.7/site-packages/easybuild/main.py", line 502, in <module>
    main()
  File "/Applic.HPC/Easybuild/ivybridge/2019a/software/EasyBuild/4.1.2/lib/python2.7/site-packages/easybuild/main.py", line 350, in main
    easyconfigs, generated_ecs = parse_easyconfigs(paths, validate=not options.inject_checksums)
  File "/Applic.HPC/Easybuild/ivybridge/2019a/software/EasyBuild/4.1.2/lib/python2.7/site-packages/easybuild/framework/easyconfig/tools.py", line 413, in parse_easyconfigs
    easyconfigs.extend(process_easyconfig(ec_file, **kwargs))
  File "/Applic.HPC/Easybuild/ivybridge/2019a/software/EasyBuild/4.1.2/lib/python2.7/site-packages/easybuild/framework/easyconfig/easyconfig.py", line 1791, in process_easyconfig
    ec = EasyConfig(spec, build_specs=build_specs, validate=validate, hidden=hidden)
  File "/Applic.HPC/Easybuild/ivybridge/2019a/software/EasyBuild/4.1.2/lib/python2.7/site-packages/easybuild/framework/easyconfig/easyconfig.py", line 496, in __init__
    self.full_mod_name = mns.det_full_module_name(self)
  File "/Applic.HPC/Easybuild/ivybridge/2019a/software/EasyBuild/4.1.2/lib/python2.7/site-packages/easybuild/framework/easyconfig/easyconfig.py", line 2334, in det_full_module_name
    require_result=require_result)
  File "/Applic.HPC/Easybuild/ivybridge/2019a/software/EasyBuild/4.1.2/lib/python2.7/site-packages/easybuild/framework/easyconfig/easyconfig.py", line 2306, in _det_module_name_with
    mod_name = mns_method(ec)
  File "/Applic.HPC/Easybuild/ivybridge/2019a/software/EasyBuild/4.1.2/lib/python2.7/site-packages/easybuild/tools/module_naming_scheme/hierarchical_mns.py", line 87, in det_full_module_name
    return os.path.join(self.det_module_subdir(ec), self.det_short_module_name(ec))
  File "/Applic.HPC/Easybuild/ivybridge/2019a/software/EasyBuild/4.1.2/lib/python2.7/site-packages/easybuild/tools/module_naming_scheme/hierarchical_mns.py", line 139, in det_module_subdir
    tc_comp_name, tc_comp_ver = self.det_toolchain_compilers_name_version(tc_comps)
  File "/Applic.HPC/Easybuild/ivybridge/2019a/software/EasyBuild/4.1.2/lib/python2.7/site-packages/easybuild/tools/module_naming_scheme/hierarchical_mns.py", line 110, in det_toolchain_compilers_name_version
    res = (tc_comps[0]['name'], self.det_full_version(tc_comps[0]))
TypeError: 'NoneType' object has no attribute '__getitem__'

So far I could narrow it down to this:

  • det_toolchain_compilers() from tools/module_naming_scheme/toolchain.py is returning a list with a NoneType object --> [None] (instead of just None?)
  • The list with None comes from the call to det_toolchain_element_details(). I don't know if this is what's wong, but there is a mismatch between tc_ec[name] ("CrayCCE") and elem ("PrgEnv-cray") --> (l. 77 in toolchain.py) Should these be the same here?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions