def main(): host_arch = os.uname()[4] parser = build_parser(host_arch, 'kslinstall') config_tuple = util.get_file_config(host_arch, 'kslinstall') config_strings = ['--'+arg+'='+value for arg,value in config_tuple] file_options = parser.parse_args(config_strings) options = parser.parse_args(namespace=file_options) setup_installer_log(options) if options.version: print("kslinstall: "+ksl.process.__version__) sys.exit(0) if options.interactive: options.verbose = True if options.install_file is '': print ("It appears you forgot to specify an install file!") parser.print_usage() return installer_variants = parse_install_file(options) for variant in installer_variants: try: variant_logs = [] if variant.build_host != os.uname()[4]: log = logging.getLogger('ksl.installer') log.info('skipping build %s because it requires build arch %s [host arch: %s]' % (variant.target_arch+variant.tag, variant.build_host, os.uname()[4])) continue variant_logs = setup_package_logs(variant) setup_target_dir(variant, options) variant.virtual_install = False # assume real install by default if options.do_install: clobber_dir(variant, variant.target_dir, options) variant.install(options) if options.do_module: setup_module_dir(variant, options) variant.install_module() close_logs(variant_logs) except Exception as err: log = logging.getLogger('ksl.installer') log.error('error during install of variant %s: %s' % (variant.target_arch+variant.tag, err)) close_logs(variant_logs) if options.errors_fatal: raise
def main(): # mode depends on if we are running on neser or shaheen host_arch = os.uname()[4] parser = build_parser(host_arch, 'kslrun') config_tuple = util.get_file_config(host_arch, 'kslrun') config_strings = ['--'+arg+'='+value for arg,value in config_tuple] file_options = parser.parse_args(config_strings) options = parser.parse_args(namespace=file_options) util.setup_logging(options) if options.version: print("kslrun: "+ksl.process.__version__) return if options.configure: configure(host_arch, options) return logger = logging.getLogger('kslrun') logger.debug("options") logger.debug(options) tempdir = tempfile.mkdtemp() if options.interactive or options.generate_only: options.no_std_redirect = True elif options.command is '': print("Missing command argument to mpirun, e.g. kslrun ./a.out") parser.print_usage() return try: llqid = None if not options.no_std_redirect: job_out_name = os.path.join(tempdir, "job_out") job_err_name = os.path.join(tempdir, "job_err") time.sleep(1) job_done_name = os.path.join(tempdir, "job_done") done_command = 'touch ' + job_done_name else: job_out_name = options.prefix+'.out' job_err_name = options.prefix+'.err' done_command = '' logger.info("setting up LoadLeveler submission script") ll_dict = dict(inspect.getmembers(options)) ll_dict['command'] = ''.join(options.command) ll_dict['job_out_name'] = job_out_name ll_dict['job_err_name'] = job_err_name ll_dict['done_command'] = done_command if options.no_notify: ll_dict['notification'] = 'never' else: ll_dict['notification'] = 'always' llfilename = setup_ll_file(options, host_arch, ll_dict, tempdir) if options.generate_only: logger.info("Generate only -- returning") return logger.info("submitting to LoadLeveler") if options.dry_run: util.call_command("llsubmit " + llfilename, options) logger.info("Dry run -- returning") return (llout, llerr) = util.call_command("llsubmit " + llfilename, options) logger.info('llout: ' + str(llout)) logger.info('llerr: ' + str(llerr)) if len(llout) == 0: llerr = llerr.decode('utf-8') logger.info("error from LoadLeveler") sys.stderr.write(llerr) if llerr.startswith('invalid account'): sys.stderr.write("********************************************************************************\n") sys.stderr.write("try configuring (kslrun -c) or setting a valid account with kslrun -a account_no\n") sys.stderr.write("********************************************************************************\n") return # silent ignore currently # logger.error(llerr) longllqid = str(llout).split(' ')[1] assert ('shaheen.kaust.edu.sa') in longllqid, "Unable to determine llq job id from output, %s" % llout llqid = longllqid.replace("shaheen.kaust.edu.sa.","") + ".0" logger.info('identified job as ' + llqid) if not options.no_std_redirect: logger.info("watching for job_done file") watch_hangup(job_done_name, llqid) handle_output(job_out_name, job_err_name) else: logger.info("job submitted") print(llqid + " submitted to LoadLeveler") except: cleanup(llqid, options, logger, tempdir) raise cleanup(None, options, logger, tempdir)