def POST(self): x = web.input(id='0', m_ip='', mp_user='', mp_pass='', ethname='') util = CommonUtil(x.m_ip, x.mp_user, x.mp_pass) result = util.create_ssh_masterToAgent(ethname=x.ethname) phymachine = objects.PhysicalMachineInfoObject.get_by_uid(x.id) additional_info = dict( phymachine.additional_info) if phymachine.additional_info else {} res = {} if result: res["result"] = "success" additional_info["init_status"] = "wait" PhysicalMachineInfo.update(phymachine, {'additional_info': additional_info}) db().commit() #必须在启动子线程之前把数据库session更新到database #否则会和子线程中对数据的修改造成冲突 t = threading.Thread(target=self.threadupdatestatus, args=( x.id, util, )) t.start() else: additional_info["init_status"] = False PhysicalMachineInfo.update(phymachine, {'additional_info': additional_info}) db().commit() return json.dumps(res)
def POST(self): x=web.input(id='0',mp_ip='',mp_user='',mp_pass='') poweroffcmd="ipmitool -I lanplus -H %s -U %s -P %s chassis power off" %(x.mp_ip,x.mp_user,x.mp_pass) powerstatuscmd="ipmitool -I lanplus -H %s-U %s -P %s chassis power status" %(x.mp_ip,x.mp_user,x.mp_pass) cmd=os.popen(poweroffcmd) time.sleep(2) phymachine=objects.PhysicalMachineInfoObject.get_by_uid(x.id) PhysicalMachineInfo.update(phymachine,{'power_status':0}) return json.dumps({'result':"sucess"})
def POST(self): x=web.input(id='0',mp_ip='',mp_user='',mp_pass='') poweroncmd="ipmitool -I lanplus -H %s -U %s -P %s chassis power on" %(x.mp_ip,x.mp_user,x.mp_pass) powerstatuscmd="ipmitool -I lanplus -H %s -U %s -P %s chassis power status" %(x.mp_ip,x.mp_user,x.mp_pass) cmd=os.popen(poweroncmd) cmd=os.popen(powerstatuscmd).read() if cmd: phymachine=objects.PhysicalMachineInfoObject.get_by_uid(x.id) PhysicalMachineInfo.update(phymachine,{'power_status':1}) return json.dumps({'result':cmd})
def POST(self): x=web.input(ids='') idlist = x.ids.split(",") #logger.info(idlist) for pid in idlist: p=objects.PhysicalMachineInfoObject.get_by_uid(int(pid)) poweroffcmd="ipmitool -I lanplus -H %s -U %s -P %s chassis power off" %(p.mp_ip,p.mp_username,p.mp_passwd) #powerstatuscmd="ipmitool -I lanplus -H %s-U %s -P %s chassis power status" %(p.mp_ip,p.mp_username,p.mp_passwd) cmd=os.popen(poweroffcmd) time.sleep(2) PhysicalMachineInfo.update(p,{'power_status':0}) return json.dumps({'result':"sucess"})
def POST(self): x = web.input(ids='') idlist = x.ids.split(",") for pid in idlist: p=objects.PhysicalMachineInfoObject.get_by_uid(int(pid)) poweroncmd="ipmitool -I lanplus -H %s -U %s -P %s chassis power on" %(p.mp_ip,p.mp_username,p.mp_passwd) powerstatuscmd="ipmitool -I lanplus -H %s -U %s -P %s chassis power status" %(p.mp_ip,p.mp_username,p.mp_passwd) cmd=os.popen(poweroncmd) time.sleep(5) cmd=os.popen(powerstatuscmd).read() if cmd: PhysicalMachineInfo.update(p,{'power_status':1}) return json.dumps({'result':cmd})
def POST(self): x = web.input(ids='') idlist = x.ids.split(",") for pid in idlist: p = objects.PhysicalMachineInfoObject.get_by_uid(int(pid)) additional_info = dict( p.additional_info) if p.additional_info else {} additional_info["init_status"] = "wait" PhysicalMachineInfo.update(p, {'additional_info': additional_info}) db().commit() t = threading.Thread(target=self.thread_excutemethd, args=(idlist, )) t.start() logger.info(u"PhymachineInitAgentIdsHandler主线程执行完毕") return json.dumps({'result': "success"})
def POST(self): x=web.input(ids='') idlist = x.ids.split(",") for pid in idlist: p=objects.PhysicalMachineInfoObject.get_by_uid(int(pid)) powerstatuscmd="ipmitool -I lanplus -H %s -U %s -P %s chassis power status" %(p.mp_ip,p.mp_username,p.mp_passwd) cmd=os.popen(powerstatuscmd).read() logger.info("the node %s is %s" % (p.ip,cmd)) #Chassis Power is on Chassis Power is off if "on" in cmd: PhysicalMachineInfo.update(p,{'power_status':1}) else: PhysicalMachineInfo.update(p,{'power_status':0}) return json.dumps({'result':"sucess"})
class PhymachineInitAgentHandler(BaseHandler): def POST(self): x = web.input(id='0', m_ip='', mp_user='', mp_pass='', ethname='') util = CommonUtil(x.m_ip, x.mp_user, x.mp_pass) result = util.create_ssh_masterToAgent(ethname=x.ethname) phymachine = objects.PhysicalMachineInfoObject.get_by_uid(x.id) additional_info = dict( phymachine.additional_info) if phymachine.additional_info else {} res = {} if result: res["result"] = "success" additional_info["init_status"] = "wait" PhysicalMachineInfo.update(phymachine, {'additional_info': additional_info}) db().commit() #必须在启动子线程之前把数据库session更新到database #否则会和子线程中对数据的修改造成冲突 t = threading.Thread(target=self.threadupdatestatus, args=( x.id, util, )) t.start() else: additional_info["init_status"] = False PhysicalMachineInfo.update(phymachine, {'additional_info': additional_info}) db().commit() return json.dumps(res) def threadupdatestatus(self, pid, util): #excute_initnodeshell 是个阻塞函数,一直会等到init_node.sh在 #每个节点上执行完毕才会执行后面的代码 util.excute_initnodeshell() phymachine = objects.PhysicalMachineInfoObject.get_by_uid(pid) additional_info = dict( phymachine.additional_info) if phymachine.additional_info else {} additional_info["init_status"] = False try: util.getshellresulst() util.copynailgunagent() logger.info(phymachine.ip + u":读到initnode_res文件,子线程设置init_status为true") additional_info["init_status"] = True except Exception, e: logger.info(phymachine.ip + u"读取initnode_res文件异常") PhysicalMachineInfo.update(phymachine, {'additional_info': additional_info}) db().commit() logger.info(phymachine.ip + u":初始化完毕")
if res: try: util.excute_initnodeshell() time.sleep(1) util.getshellresulst() util.copynailgunagent() additional_info["init_status"] = True except Exception, e: logger.info(p.ip + u"读取initnode_res文件异常") additional_info["init_status"] = False else: additional_info["init_status"] = False except Exception, e: additional_info["init_status"] = False logger.info(e) PhysicalMachineInfo.update(p, {'additional_info': additional_info}) db().commit() def thread_excutemethd(self, idlist): pool = threadpool.ThreadPool(5) requests = threadpool.makeRequests(self.handlerMachine, idlist) [pool.putRequest(req) for req in requests] pool.wait() logger.info(u"节点批量初始化结束%s" % (str(idlist))) class PhymachineInitAgentStatusHandler(BaseHandler): def POST(self): x = web.input(ids='') idlist = x.ids.split(",") phymachines = db().query(PhysicalMachineInfo).filter(