Пример #1
0
def make_func(pcfg):
    pname = pcfg["name"]
    ppath = pcfg["path"]

    logger.DEBUG(">>>>>>>> build %s", pname)
    srcdir = ppath
    binpath = os.path.join(var_bin_dir, pname)
    #print "make project: %s in path:%s" % (pname, srcdir)

    cmdstr = "go build -o %s %s" % (binpath, srcdir)
    hret = run_shell(cmdstr)
    if hret.iserr():
        return hqpy.HqError(13, "builder: target[%s] gobuild failed:%s" % (pname, hret.string()) )

    return hqpy.HqError()
Пример #2
0
def sshRun(sau, cmd, timeout=None, show_console=False):
    hret = hqpy.HqError()
    sshc = hqpy.SshClient(show_console=show_console)

    sret = None
    stdin = None
    stdout = None
    stderr = None

    if timeout is None:
        timeout = 180

    try:
        # sshc.load_system_host_keys()  
        # sshc._policy = paramiko.AutoAddPolicy()  
        sshc.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        sshc.connect(hostname=sau.host, 
            port=sau.port,
            username=sau.user, 
            password=sau.pwd,
            pkey=None,
            key_filename=None)
        status, stdout, stderr = sshc.call(cmd, timeout=timeout)
        hret.errno = status
        signal.alarm(0)
    except socket.timeout:
        hret.errno = hqpy.PYRET_TIMEOUT
        hret.msg = 'SSH Error: timeout'
    except Exception, e:
        hret.errno = hqpy.PYRET_SSH_RUNERR
        hret.msg = 'SSH Error:{0}'.format(e)
Пример #3
0
def zip(src, dst, pwd=None, tar=False, ziped=False):
    hret = hqpy.HqError()

    compress = zipfile.ZIP_STORED
    if ziped == True:
        compress = zipfile.ZIP_DEFLATED

    zipf = zipfile.ZipFile(dst, 'w', compress)

    if os.path.isfile(src):
        zipf.write(src)
    else:
        # ziph is zipfile handle
        for root, dirs, files in os.walk(src):
            for f in files:
                zipf.write(os.path.join(root, f))

    zipf.close()

    if pwd is not None:
        import pyminizip
        fenc = dst + ".tpwd"
        pyminizip.compress(dst, fenc, pwd, 0)
        os.remove(dst)
        shutil.move(fenc, dst)

    if tar == True:
        tar_name = dst + ".tgz"
        hret = tar_zip(dst, tar_name)
        if hret.iserr():
            return hret

        os.remove(dst)

    return hret
Пример #4
0
def run_set_target(options, args):
    global var_build_targets
    global var_targets
    global var_src_proj_dir

    var_targets = {}
    var_targets['servers'] = {}
    var_targets['clusters'] = {}
    for cname in list_dirs(var_src_proj_dir):
        var_targets['clusters'][cname] = {}
        for sname in list_dirs(os.path.join(var_src_proj_dir, cname)):
            svr = {}
            svr['name'] = sname
            svr['path'] = os.path.join('project', cname, sname)
            var_targets['servers'][sname] = svr
            var_targets['clusters'][cname][sname] = svr

    targets = args

    nlen = len(targets)
    if nlen == 0:
        ## 默认全部
        targets = ["all"]
        nlen = 1

    var_build_targets = {}    
    if nlen == 1:
        target = targets[0]

        if target == "all":
            var_build_targets = var_targets['servers']
        elif var_targets['clusters'].has_key(target) == True:
            var_build_targets = var_targets['clusters'][target]
        elif var_targets['servers'].has_key(target) == True:
            var_build_targets[target] = var_targets['servers'][target]
        else:
            print var_targets['servers'].keys()
            return hqpy.HqError(hqpy.PYRET_SVR_MAKER, "invalid build target:%s" % (target))
    else:
        for target in targets:
            if var_targets['servers'].has_key(target):
                var_build_targets[target] = var_targets['servers'][target]
            else:
                return hqpy.HqError(hqpy.PYRET_SVR_MAKER, "invalid build target:%s" % (tarname))

    return hqpy.HqError()
Пример #5
0
def loadini(inifile):
    hret = hqpy.HqError()
    iniobj = ConfigParser.ConfigParser()
    try:
        iniobj.read(inifile)
    except Exception, ex:
        template = "An exception of type {0} occured. Arguments:{1!r}"
        message = template.format(type(ex).__name__, ex.args)

        hret.errno = hqpy.PYRET_TASK_LOAD_ERR
        hret.msg = 'FUNCS Error loadini:{0}'.format(message)
        logger.ERR(traceback.format_exc())
Пример #6
0
    def load(self, arg):
        ret = hqpy.HqError()

        self.jname = arg['jname']
        self.ptasks = arg['tasks']

        self.jargn = 0
        if arg.has_key('jargn'):
            self.jargn = arg['jargn']

        if len(self.jobp.get_args()) < self.jargn:
            ret.errno = hqpy.PYRET_TASK_CHECK_ERR
            ret.msg = '%s need %s args' % (self.jname, self.jargn)
            return ret

        idxs = 1
        for x in self.ptasks:
            x['idx'] = idxs
            name = x['name']
            ts = None
            if name == 'sget':
                ts = TaskSGet(x, self)
            elif name == 'sput':
                ts = TaskSPut(x, self)
            elif name == 'yum':
                ts = TaskYum(x, self)
            elif name == 'cmd':
                ts = TaskCmd(x, self)
            elif name == 'update':
                ts = TaskUpdate(x, self)
            elif name == 'prg':
                ts = TaskPRG(x, self)
            elif name == 'put':
                ts = TaskPut(x, self)
            elif name == 'get':
                ts = TaskGet(x, self)
            elif name == 'sshcmd':
                ts = TaskSshCmd(x, self)
            else:
                ts = TaskBase(x, self)

            bret, sres = ts.check()
            if bret == False:
                logger.DEBUG('%s check failed:%s', ts.info(), sres)
                ret.errno = hqpy.PYRET_TASK_CHECK_ERR
                ret.msg = sres
                return ret

            self.tlist.append(ts)
            idxs = idxs + 1
            logger.DEBUG('%s load sucesss', ts.info())

        return ret
Пример #7
0
def run_make_build():
    global var_build_targets
    global var_work_dir
    os.chdir(var_work_dir)

    for k,p in var_build_targets.items():
        hret = make_func(p)
        if hret.iserr():
            #logger.ERR('build %s failed:%s', k, hret.string())
            return hret

        # # todo thread mode
    return hqpy.HqError()
Пример #8
0
def loadjs(jsfile):
    hret = hqpy.HqError()
    jsobj = None
    try:
        fd = open(jsfile)
        jsobj = json.load(fd)
        fd.close()
    except Exception, ex:
        template = "An exception of type {0} occured. Arguments:{1!r}"
        message = template.format(type(ex).__name__, ex.args)

        hret.errno = hqpy.PYRET_TASK_LOAD_ERR
        hret.msg = 'FUNCS Error loadjs:{0}'.format(message)
        logger.ERR(traceback.format_exc())
Пример #9
0
def run_make_clean():
    global var_work_dir
    global var_build_targets

    os.chdir(var_work_dir)

    for k,p in var_build_targets.items():
        logger.DEBUG("<<<<<<<< clean %s", k)
        pname = p["name"]
        bindir = os.path.join(var_bin_dir, pname)
        if os.path.exists(bindir) == True:
            os.remove(bindir)

    return hqpy.HqError()
Пример #10
0
def writejs(jsfile, jsdata):
    hret = hqpy.HqError()
    try:
        fd = open(jsfile, 'w')
        #jsstr = json.dumps(jsdata, sort_keys=True,indent=4)
        json.dump(jsdata, fd, sort_keys=True, indent=4)
        fd.close()
    except Exception, ex:
        template = "An exception of type {0} occured. Arguments:{1!r}"
        message = template.format(type(ex).__name__, ex.args)

        hret.errno = hqpy.PYRET_TASK_LOAD_ERR
        hret.msg = 'FUNCS Error writejs:{0}'.format(message)
        logger.ERR(traceback.format_exc())
Пример #11
0
def run_shell(cmd, timeout=None, show_console=False):

    hret = hqpy.HqError()
    pipe = None
    ostd = None
    oerr = None

    if timeout == None:
        timeout = 180

    ## paramiko 内timeout不生效
    if platform.system() != "Windows":
        signal.signal(signal.SIGALRM, __signal_run_timeout)
        signal.alarm(timeout)

    try:
        pipe = subprocess.Popen(cmd,
                                stdout=subprocess.PIPE,
                                stderr=subprocess.PIPE,
                                shell=True,
                                universal_newlines=True)
        # st = pipe.wait()
        # oerr = pipe.stderr.read()
        # ostd = pipe.stdout.read()

        stdlines = []
        while True:
            line = pipe.stdout.readline()
            if not line:
                break
            stdlines.append(line)
            if show_console == True:
                logger.LOG("%s", line.rstrip())
        ostd = ''.join(stdlines)
        st = pipe.wait()
        oerr = pipe.stderr.read()
        strip_err = oerr.strip()
        if show_console == True and len(strip_err) > 0:
            logger.LOG("%s", oerr)

        hret.errno = st
        if platform.system() != "Windows":
            signal.alarm(0)
    except Exception, ex:
        template = "An exception of type {0} occured. Arguments:{1!r}"
        message = template.format(type(ex).__name__, ex.args)
        hret.errno = hqpy.PYRET_CMD_RUN_ERR
        hret.msg = 'FUNCS Error run_shell:{0}'.format(message)
        logger.ERR(traceback.format_exc())
Пример #12
0
def remove(fname):
    hret = hqpy.HqError()
    if os.path.exists(fname) == False:
        return hret

    try:
        if os.path.isfile(fname):
            os.remove(fname)
        else:
            shutil.rmtree(fname)
    except Exception, ex:
        template = "An exception of type {0} occured. Arguments:{1!r}"
        message = template.format(type(ex).__name__, ex.args)
        hret.errno = hqpy.PYRET_IO_LIB_ERR
        hret.msg = 'IO remove Error:{0}'.format(message)
        logger.ERR(traceback.format_exc())
Пример #13
0
def run_main(): 
    global var_build_projects
    global var_work_dir

    hret = hqpy.HqError()
    hqpy.init(module="smake")

    ## set GOPATH
    os.environ['GOPATH']=var_work_dir
    subprocess.call("echo GOPATH:$GOPATH", shell=True)

    # options
    from optparse import OptionParser
    parser = OptionParser(usage=var_usage) 
    parser.add_option("-t", "--total", dest="total", default=False, help="make clean; make build", action="store_true")
    parser.add_option("-c", "--clean", dest="clean", default=False, help="make clean", action="store_true") 
    parser.add_option("-b", "--build", dest="build", default=False,  help="make build", action="store_true")  
    (options, args) = parser.parse_args() 

    if options.total:
        options.clean = True
        options.build = True

    hret = run_set_target(options, args)
    hqpy.check_exit(hret, "set target")

    logger.DEBUG('hgame maker start.')

    print "options: ", options
    ## clean
    if options.clean:
        logger.DEBUG("make clean start")
        hret = run_make_clean()
        hqpy.check_exit(hret, "make clean")
        logger.DEBUG("make clean done")

    ## build
    if options.build:
        logger.DEBUG("make build start")
        hret = run_make_build()
        hqpy.check_exit(hret, "make build")
        logger.DEBUG("make build done")

    ## 
    logger.DEBUG('hgame maker done.')
Пример #14
0
    def do(self):
        hqret = hqpy.HqError()
        sau = self.jobp.get_auth()
        host_info = '[%s@%s:%s]' % (sau.user, sau.host, self.jobp.get_jobid())
        logger.INFO('>>>>>>>>>>>>>>>>>> %s do all tasks in [%s] ', host_info,
                    self.jname)
        for t in self.tlist:
            logger.INFO('%s start to do', t.info())
            hqret = t.do()
            if hqret.iserr():
                logger.ERR('%s do failed, err:%s', t.info(), hqret.string())
                return hqret
            else:
                logger.INFO('%s do sucesss', t.info())
        logger.INFO('<<<<<<<<<<<<<<<<< %s do all tasks in [%s] ok', host_info,
                    self.jname)

        return hqret
Пример #15
0
    def do(self):
        ret = hqpy.HqError()

        # ms = hqhosts.get_host_byid(msid)
        # if ms is None:
        #     ret.errno = hqpy.PYRET_ERR
        #     ret.ms = 'master svr not found'
        #     return ret

        # sau = ms.get()

        # local_file = os.path.join(hqenv.get_var('HQVAR_VAR_DIR'), x)
        # remote_file = os.path.join(filep, x)
        # logger.DEBUG('%s get file:%s from:%s to:%s' % (self.info(), x, s['host'], local_file))
        # ret = hqpy.sftpGet(sau, remote_file, local_file)
        # if ret.iserr():
        #     logger.DEBUG('%s get file failed:%s', self.info(), ret.string())
        #     return ret

        return ret
Пример #16
0
def load_job(job_file, param):
    fd = None
    hret = hqpy.HqError()
    je = None
    try:
        fd = open(job_file)
        jscfg = json.load(fd)

        je = JobEntry(param)
        hret = je.load(jscfg)
        if hret.iserr():
            je = None
            logger.ERR('load job failed:%s', hret.string())

    except Exception, ex:
        template = "An exception of type {0} occured. Arguments:{1!r}"
        message = template.format(type(ex).__name__, ex.args)
        hret.errno = hqpy.PYRET_TASK_LOAD_ERR
        hret.msg = 'TASK Error:{0}'.format(message)
        logger.ERR(traceback.format_exc())
Пример #17
0
def run_shell_std(cmd, timeout=None):

    if timeout == None:
        timeout = 180

    hret = hqpy.HqError()

    ## paramiko 内timeout不生效
    signal.signal(signal.SIGALRM, __signal_run_timeout)
    signal.alarm(timeout)

    try:
        hret.errno = subprocess.call(cmd, shell=True)
        signal.alarm(0)
    except Exception, ex:
        template = "An exception of type {0} occured. Arguments:{1!r}"
        message = template.format(type(ex).__name__, ex.args)
        hret.errno = hqpy.PYRET_CMD_RUN_ERR
        hret.msg = 'FUNCS Error run_shell:{0}'.format(message)
        logger.ERR(traceback.format_exc())
Пример #18
0
    def do(self):
        ret = hqpy.HqError()
        l_files = self.conf['files']
        sau = self.get_param().get_auth()
        jobid = self.get_param().get_jobid()

        tmo = None
        if self.conf.has_key('timeout'):
            tmo = self.conf['timeout']

        for x in self.conf['files']:
            local_file = os.path.join(hqenv.get_var('HQVAR_WORK_DIR'), x)
            bname = os.path.basename(x)
            remote_file = os.path.join(self.conf['path'], bname)
            ret = hqpy.sftpPut(sau, local_file, remote_file, tmo)
            if ret.iserr():
                logger.ERR('%s put file failed:%s', self.info(), x)
                return ret

        return ret
Пример #19
0
    def do(self):
        ret = hqpy.HqError()
        r_files = self.conf['files']
        sau = self.get_param().get_auth()
        jobid = self.get_param().get_jobid()

        tmo = None
        if self.conf.has_key('timeout'):
            tmo = self.conf['timeout']

        local_tmp = hqenv.get_var('HQVAR_VAR_DIR')
        for r in r_files:
            l_file = os.path.join(local_tmp, '%s_%s_%s' % (jobid, sau.host, r))
            ret = hqpy.sftpGet(sau, r, l_file, tmo)
            if ret.iserr():
                logger.ERR('TaskGet get file %s failed:%s', r, ret.string())
                return ret
            else:
                logger.INFO('TaskGet ok:%s', l_file)

        return ret
Пример #20
0
def copy_from_to(src_dir, fname, dst_dir):
    hret = hqpy.HqError()
    if type(fname) == str:
        fname = [fname]

    for f in fname:
        fsrc = os.path.join(src_dir, f)
        if os.path.exists(fsrc) == False:
            hret.errno = hqpy.PYRET_IO_LIB_ERR
            hret.msg = 'IO copyft Error:{0} not exist'.format(fsrc)
            return hret

        if os.path.isfile(fsrc):
            dst = os.path.join(dst_dir, f)
            ndir = os.path.dirname(dst)
            if os.path.exists(ndir) == False:
                mkdirs(ndir)
            shutil.copyfile(fsrc, dst)
        else:
            dst = os.path.join(dst_dir, f)
            shutil.copytree(fsrc, dst)

    return hret
Пример #21
0
def sftpPut(sau, flocal, fremote, timeout = None):
    hret = hqpy.HqError()
    #ts = None
    sftp = None

    if timeout is None:
        timeout = 120

    ## paramiko 内timeout不生效
    if platform.system() != "Windows":
        signal.signal(signal.SIGALRM, signal_put_timeout)
        signal.alarm(timeout) 

    try:
        # ts=paramiko.Transport((sau.host, sau.port))
        # ts.connect(username=sau.user, password=sau.pwd, timeout=timeout)
        # sftp=paramiko.SFTPClient.from_transport(ts)

        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(hostname = sau.host, 
                    port = sau.port,
                    username=sau.user, 
                    password=sau.pwd,
                    timeout=timeout)
        sftp = ssh.open_sftp()
        #sftp.get_channel().settimeout(timeout)

        sftp.put(flocal, fremote)
        if platform.system() != "Windows":
            signal.alarm(0)
    except socket.timeout:
        hret.errno = hqpy.PYRET_TIMEOUT
        hret.msg = 'SFTP Put Error: timeout'
    except Exception, e:
        hret.errno = hqpy.PYRET_SSH_PUTERR
        hret.msg = 'SFTP Put Error:{0}'.format(e)
Пример #22
0
def sftpGet(sau, fremote, flocal, timeout = None):
    hret = hqpy.HqError()
    #ts = None
    sftp = None

    if timeout is None:
        timeout = 120

    ## paramiko 内timeout不生效
    signal.signal(signal.SIGALRM, signal_get_timeout)
    signal.alarm(timeout) 

    try:
        # ts=paramiko.Transport((sau.host, sau.port))
        # ts.connect(username=sau.user, password=sau.pwd, timeout=timeout)
        # sftp=paramiko.SFTPClient.from_transport(ts)

        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(hostname = sau.host, 
                    port = sau.port,
                    username=sau.user, 
                    password=sau.pwd, 
                    timeout=timeout)
        sftp = ssh.open_sftp()

        sftp.get(fremote, flocal)
        signal.alarm(0)
    except socket.timeout:
        hret.errno = hqpy.PYRET_TIMEOUT
        hret.msg = 'SFTP Get Error: timeout'
    except Exception,ex: 
        template = "An exception of type {0} occured. Arguments:{1!r}"
        message = template.format(type(ex).__name__, ex.args)
        hret.errno = hqpy.PYRET_SSH_GETERR
        hret.msg = 'SFTP Get Error:{0}'.format(ex)
        logger.ERR(traceback.format_exc())
Пример #23
0
    def do(self):
        ret = hqpy.HqError()
        tmo = None
        if self.conf.has_key('timeout'):
            tmo = self.conf['timeout']

        sau = self.get_param().get_auth()
        jobid = self.get_param().get_jobid()

        if self.conf.has_key('cmd') == True:
            shcmd = self.conf['cmd']
            logger.DEBUG('%s run ssh cmd: %s', self.info(), shcmd)
            ret, ostd, oerr = hqpy.sshRun(sau, shcmd, tmo)
            logger.INFO('%s ssh cmd result: %s', self.info(), ret.string())
            if ret.iserr():
                logger.INFO(
                    '========================================================std:\n%s',
                    ostd)
                logger.ERR(
                    '========================================================err:\n%s',
                    oerr)
                return ret
            else:
                logger.INFO(
                    '========================================================std:\n%s',
                    ostd)
                logger.INFO(
                    '========================================================err:\n%s',
                    oerr)

        if self.conf.has_key('script') == True:
            script_file = self.conf['script']
            if os.path.isabs(script_file) == False:
                bhas, val_path = self.get_arg('path')
                if bhas:
                    script_file = os.path.join(val_path, script_file)
                else:
                    script_file = os.path.join(
                        hqenv.get_var('HQVAR_SCRIPT_DIR'), script_file)

            fname = string.split(script_file)[0]
            bname = os.path.basename(fname)
            shbin = "sh"
            if bname.endswith('.py'):
                shbin = 'python'
            elif bname.endswith('.lua'):
                shbin = 'lua'

            shcmd = '%s %s' % (shbin, script_file)

            ret, ostd, oerr = hqpy.sshRun(sau, shcmd, tmo)
            if ret.iserr():
                logger.ERR('%s run ssh script error: %s', self.info(),
                           ret.code())
                logger.INFO(
                    '========================================================std:\n%s',
                    ostd)
                logger.ERR(
                    '========================================================err:\n%s',
                    oerr)
                return ret
            else:
                logger.INFO('%s run ssh script ok: %s', self.info(),
                            ret.code())
                logger.INFO(
                    '========================================================std:\n%s',
                    ostd)
                logger.INFO(
                    '========================================================err:\n%s',
                    oerr)

        return ret
Пример #24
0
def init_hosts():
    #logger.DEBUG('host cfg load start.')
    fd = None
    hret = hqpy.HqError()
    try:
        cfg_file = os.path.join(hqenv.get_var('HQVAR_CONF_DIR'), 'hosts.json')

        fd = open(cfg_file)
        jscfg = json.load(fd)

        def_auth = jscfg['default']
        default_user = def_auth['user']
        default_passwd = def_auth['pwd']
        default_root_user = def_auth['root_user']
        default_root_passwd = def_auth['root_pwd']

        hosts = jscfg['hosts']
        for h in hosts:
            hid = h['id']
            ip = h['ip']
            kind = h['kind']
            port = 22
            if h.has_key('port'):
                port = h['port']
            user = default_user
            pwd = default_passwd
            if h.has_key('user'):
                user = h['user']
            if h.has_key('pwd'):
                pwd = h['pwd']
            ruser = default_root_user
            rpwd = default_root_passwd
            if h.has_key('ruser'):
                ruser = h['ruser']
            if h.has_key('rpwd'):
                ruser = h['rpwd'] 
                
            hauth = HostAuthObj()
            user_auth = hqpy.SshAuth(ip, user, pwd, port)
            root_auth = hqpy.SshAuth(ip, ruser, rpwd, port)
            hauth.user = user_auth
            hauth.root = root_auth

            hauth.id = hid
            hauth.ip = ip
            hauth.port = port
            hauth.kind = kind

            if __hosts_by_id.has_key(hid):
                return hqpy.Err("load host, exist hid:%s" % (hid))

            __hosts_by_id[hid] = hauth
            for g in kind:
                if __hosts_by_group.has_key(g) == False:
                    __hosts_by_group[g] = []
                    __deploy_by_kind[g] = []
                __hosts_by_group[g].append(hauth)
                __deploy_by_kind[g].append(hid)

            __deploy_by_id[hid] = {}
            if h.has_key('zone'):
                v = h['zone']
                for x in v:
                    rid = x[0]
                    rseq = x[1]
                    rname = 'zone' + str(rid)
                    if __deploy_by_role.has_key(rname):
                        hret = hqpy.Err("load host, exist zone name:%s" % (rname) )
                        return hret
                    __deploy_by_role[rname] = {'sau':hauth, 'info':h, 'role':'zone', 'roles':[[rid, rseq]] }
                __deploy_by_id[hid]['zone'] = {'sau':hauth, 'info':h, 'role':'zone', 'roles':h['zone'] }

            if h.has_key('group'):
                v = h['group']
                for x in v:
                    rid = x[0]
                    rseq = x[1]
                    rname = 'group' + str(rid)
                    if __deploy_by_role.has_key(rname):
                        hret = hqpy.Err("load host, exist group name:%s" % (rname))
                        return hret
                    __deploy_by_role[rname] = {'sau':hauth, 'info':h, 'role':'group', 'roles':[[rid, rseq]] }
                __deploy_by_id[hid]['group'] = {'sau':hauth, 'info':h, 'role':'group', 'roles':h['group'] } 

            if h.has_key('global'):
                v = h['global']
                for x in v:
                    rid = x[0]
                    rseq = x[1]
                    rname = 'global' + str(rid)
                    if __deploy_by_role.has_key(rname):
                        hret = hqpy.Err("load host, exist global name:%s" % (rname) )
                        return hret

                    __deploy_by_role[rname] = {'sau':hauth, 'info':h, 'role':'global', 'roles':[[rid, rseq]] }
                __deploy_by_id[hid]['global'] = {'sau':hauth, 'info':h, 'role':'global', 'roles':h['global'] }  

            if __deploy_by_id.has_key('hid'):
                hret = hqpy.Err("load host, exist hostid :%s" % (hid))
                return hret
            
        #print __hosts_by_id
        #print __hosts_by_group
        #print __deploy_by_id
        #print __deploy_by_role
        #logger.DEBUG('host cfg load done.')

    except Exception,ex: 
        template = "An exception of type {0} occured. Arguments:{1!r}"
        message = template.format(type(ex).__name__, ex.args)
        hret.errno = hqpy.PYRET_TASK_LOAD_ERR
        hret.msg = 'TASK Error:{0}'.format(message)
        logger.ERR(traceback.format_exc())
Пример #25
0
    def do(self):
        tmo = None
        if self.conf.has_key('timeout'):
            tmo = self.conf['timeout']

        ret = hqpy.HqError()
        if self.conf.has_key('cmd') == True:
            shcmd = self.conf['cmd']
            logger.DEBUG('%s run cmd: %s', self.info(), shcmd)
            ret, ostd, oerr = hqpy.run_shell(shcmd, tmo)
            if ret.iserr():
                logger.ERR('%s run shell error: %s', self.info(), ret.code())
                logger.INFO(
                    '========================================================std:\n%s',
                    ostd)
                logger.ERR(
                    '========================================================err:\n%s',
                    oerr)
                return ret
            else:
                logger.INFO('%s run shell ok: %s', self.info(), ret.code())
                logger.INFO(
                    '========================================================std:\n%s',
                    ostd)
                logger.ERR(
                    '========================================================err:\n%s',
                    oerr)

        if self.conf.has_key('script') == True:
            script_file = self.conf['script']
            if os.path.isabs(script_file) == False:
                bhas, val_path = self.get_arg('path')
                if bhas:
                    script_file = os.path.join(val_path, script_file)
                else:
                    script_file = os.path.join(
                        hqenv.get_var('HQVAR_SCRIPT_DIR'), script_file)

            bname = os.path.basename(script_file)
            shbin = "sh"
            if bname.endswith('.py'):
                shbin = 'python'
            elif bname.endswith('.lua'):
                shbin = 'lua'

            shcmd = '%s %s' % (shbin, script_file)
            ret, ostd, oerr = hqpy.run_shell(shcmd, tmo)
            if ret.iserr():
                logger.ERR('%s run script error: %s', self.info(), ret.code())
                logger.INFO(
                    '========================================================std:\n%s',
                    ostd)
                logger.ERR(
                    '========================================================err:\n%s',
                    oerr)
                return ret
            else:
                logger.INFO('%s run script ok: %s', self.info(), ret.code())
                logger.INFO(
                    '========================================================std:\n%s',
                    ostd)
                logger.ERR(
                    '========================================================err:\n%s',
                    oerr)

        return ret
Пример #26
0
    def do(self):
        ret = hqpy.HqError()
        ms = hqhosts.get_host_byid('master')
        if ms is None:
            ret.errno = hqpy.PYRET_ERR
            ret.ms = 'master svr not found'
            return ret

        sau = ms.get()

        bhas, hat_path = self.get_arg('path')
        if bhas == False:
            ret.errno = hqpy.PYRET_ERR
            ret.ms = 'path arg not found'
            return ret

        bhas, dst_set = self.get_arg('set')
        if bhas == False:
            ret.errno = hqpy.PYRET_ERR
            ret.ms = 'set arg not found'
            return ret

        bhas, pkg_version = self.get_arg('version')
        if bhas == False:
            ret.errno = hqpy.PYRET_ERR
            ret.ms = 'version arg not found'
            return ret

        pkg_name = "hgame.svr.%s.tgz" % (pkg_version)
        local_file = os.path.join(hqenv.get_var('HQVAR_VAR_DIR'), pkg_name)
        remote_file = os.path.join("/hgame/hat/files/pkg_server", pkg_name)
        print remote_file
        logger.DEBUG('%s get file:%s from:%s to:%s' %
                     (self.info(), pkg_name, sau.host, local_file))
        ret = hqpy.sftpGet(sau, remote_file, local_file)
        if ret.iserr():
            #logger.ERR('%s get file failed:%s', self.info(), ret.string())
            return ret

        ## TODO
        dst_dir = os.path.join(hat_path, dst_set)
        hqio.mkdirs(dst_dir)

        tf = tarfile.open(local_file)
        logger.DEBUG('%s update all files to %s', self.info(), dst_dir)
        tf.extractall(path=dst_dir)

        # file list
        # else:
        #     names = tf.getnames()
        #     paths = []
        #     fnames = []
        #     for f in flist:
        #         if f.endswith("*") == True:
        #             paths.append(f[:(len(f)-1)])

        #     for name in names:
        #         if name in flist:
        #             fnames.append(name)
        #         else:
        #             for p in paths:
        #                 if name.startswith(p) == True:
        #                     fnames.append(name)
        #     logger.DEBUG('%s update files to %s:\n%s', self.info(), dpath, fnames)
        #     for f in fnames:
        #         tf.extract(f, path=dpath)

        return hqpy.HqError()
Пример #27
0
 def do(self):
     logger.DEBUG('hq default task do')
     return hqpy.HqError()
Пример #28
0
    def do(self):
        ret = hqpy.HqError()
        script_name = self.conf['script']
        bname = os.path.basename(script_name)
        # script_name 相对于hat/script 路径名
        local_file = os.path.join(hqenv.get_var('HQVAR_SCRIPT_DIR'),
                                  script_name)
        # 远端置于 /tmp/hatjobs/
        remote_path = '/tmp/hat'
        sau = self.get_param().get_auth()
        jobid = self.get_param().get_jobid()

        remote_file = os.path.join(remote_path, '%s_%s' % (jobid, bname))

        shbin = "sh"
        if bname.endswith('.py'):
            shbin = 'python'
        elif bname.endswith('.lua'):
            shbin = 'lua'

        tmo = None
        if self.conf.has_key('timeout'):
            tmo = self.conf['timeout']

        #先确保远端目录建立
        ret, ostd, oerr = hqpy.sshRun(sau, 'mkdir -p %s' % (remote_path), 15)
        if ret.iserr():
            logger.ERR('TaskPRG dir prepare failed:%s, std:%s, err:%s',
                       ret.string(), ostd, oerr)
            return ret

        # 推脚本
        ret = hqpy.sftpPut(sau, local_file, remote_file, 30)
        if ret.iserr():
            logger.ERR('TaskPRG put script failed:%s, std:%s, err:%s',
                       ret.string(), ostd, oerr)
            return ret

        # 运行脚本
        ret, ostd, oerr = hqpy.sshRun(sau, '%s %s' % (shbin, remote_file), tmo)
        if ret.iserr():
            logger.ERR('TaskPRG dir prepare failed:%s, std:%s, err:%s',
                       ret.string(), ostd, oerr)
            return ret

        # 获取结果
        if self.conf.has_key('results'):
            ress = self.conf['results']
            local_tmp = hqenv.get_var('HQVAR_VAR_DIR')
            for r in ress:
                r_file = os.path.join(remote_path, r)
                l_file = os.path.join(local_tmp,
                                      '%s_%s_%s' % (jobid, sau.host, r))
                ret = hqpy.sftpGet(sau, r_file, l_file)
                if ret.iserr():
                    logger.ERR('TaskPRG get result %s failed:%s', r,
                               ret.string())
                    return ret
                else:
                    logger.INFO('TaskPRG result get ok:%s', l_file)

        ## 任务结束
        return ret