Exemplo n.º 1
0
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
Exemplo n.º 2
0
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)