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()
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)
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
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()
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())
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
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()
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())
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()
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())
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())
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())
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.')
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
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
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())
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())
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
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
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
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)
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())
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
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())
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
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()
def do(self): logger.DEBUG('hq default task do') return hqpy.HqError()
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