def VpsClone(self, oldId, newId, ip, hostname): para = {"ipv4": ip, "name": hostname} oldVps = Vps(oldId) oldVps.stop() newVps = copy.copy(oldVps) newVps._id = newId os.mkdir("/vz/root/" + str(newVps._id)) os.mkdir("/vz/private/" + str(newVps._id)) shutil.copyfile("/etc/vz/conf/" + str(oldVps._id) + ".conf", "/etc/vz/conf/" + str(newVps._id) + ".conf") subprocess.call( "pushd /vz/private/" + str(oldVps._id) + "; tar c --numeric-owner * | tar x --numeric-owner -C /vz/private/" + str(newVps._id) + "; popd", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, ) newVps.modConf(para) oldVps.start() newVps.start()
def VpsNew(self, newId, os, hostname): vps = Vps(newId) subprocess.call('vzctl create ' + str(vps._id) + ' --ostemplate ' + os + ' --hostname ' + hostname, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
def vpsExec(self, id, command): vps = Vps(id) p = subprocess.Popen('vzctl exec '+vps._id+' '+command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) text = '' for line in p.stdout.readlines(): text += line return text
def VpsClone(self, oldId, newId, ip, hostname): para = {"ipv4": ip, "name": hostname} oldVps = Vps(oldId) oldVps.stop() newVps = copy.copy(oldVps) newVps._id = newId os.mkdir('/vz/root/'+str(newVps._id)) os.mkdir('/vz/private/'+str(newVps._id)) shutil.copyfile('/etc/vz/conf/'+str(oldVps._id)+'.conf', '/etc/vz/conf/'+str(newVps._id)+'.conf') subprocess.call('pushd /vz/private/'+str(oldVps._id)+'; tar c --numeric-owner * | tar x --numeric-owner -C /vz/private/'+str(newVps._id)+'; popd', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) newVps.modConf(para) oldVps.start() newVps.start()
def VpsDelete(self, newId): vps = Vps(newId) vps.stop() vps.destroy()
def VpsList(self): VpsList = list() p = subprocess.Popen( "vzlist -H -ao ctid,numproc,status,ip,hostname,laverage,diskspace,physpages", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, ) for line in p.stdout.readlines(): vps = re.sub("\s+", " ", line.decode()).strip() vpsInfo = vps.split() vpsCurrent = Vps(vpsInfo[0]) if vpsInfo[1] == "-": vpsCurrent.nproc = 0 else: vpsCurrent.nproc = vpsInfo[1] vpsCurrent.ip = vpsInfo[3] vpsCurrent.hostname = vpsInfo[4] vpsCurrent.loadavg = vpsInfo[5] vpsCurrent.diskspace_current = vpsInfo[6] if vpsInfo[7] == "-": vpsCurrent.ram_current = 0 else: vpsCurrent.ram_current = int(vpsInfo[7]) * 4 vpsCurrent.loadConf() VpsList.append(vpsCurrent) return json.dumps(VpsList, default=encodeVps)
def vcaAction(action, serverDest, para): global localserver # Server And VPS if action == 'VpsList': return localserver.VpsList() elif action == 'create': if serverDest != 0: localserver.VpsNew(serverDest, para['os'], para['name']) vps = Vps(serverDest) vps.modConf(para) elif action == 'modConf': if int(serverDest) != 0: vps = Vps(serverDest) vps.modConf(para) elif action == 'start': if int(serverDest) != 0: vps = Vps(serverDest) vps.start() elif action == 'stop': if int(serverDest) != 0: vps = Vps(serverDest) vps.stop() elif action == 'restart': if int(serverDest) == 0: localserver.restart() else: vps = Vps(serverDest) vps.restart() elif action == 'delete': if int(serverDest) > 0: localserver.VpsDelete(serverDest) elif action == 'clone': if int(serverDest) > 0 and int(para['dest']) > 0: localserver.VpsClone(serverDest, para['dest'], para['ip'], para['hostname']) elif action == 'password': if int(serverDest) > 0: vps = Vps(serverDest) vps.password(para) elif action == 'cmd': if int(serverDest) > 0: vps = Vps(serverDest) return vps.cmd(para) return '' #Templates elif action == 'reinstall': if int(serverDest) > 0: vps = Vps(serverDest) vps.reinstall(para) elif action == 'move': if int(serverDest) > 0: vps = Vps(serverDest) vps.move(para) elif action == 'templateList': if int(serverDest) == 0: return localserver.templateList() elif action == 'templateRename': if int(serverDest) == 0: localserver.templateRename(para['old'], para['new']) elif action == 'templateAdd': if int(serverDest) == 0: localserver.templateAdd(para) elif action == 'templateDelete': if int(serverDest) == 0 and para != '': localserver.templateDelete(para) elif action == 'backupAdd': if int(serverDest) > 0: vps = Vps(serverDest) vps.backupAdd() elif action == 'backupDelete': if int(serverDest) > 0 and int(para) > 0: vps = Vps(serverDest) vps.backupDelete(para) elif action == 'backupList': if int(serverDest) > 0: vps = Vps(serverDest) return vps.backupList() else: return localserver.backupList() elif action == 'backupRestore': if int(serverDest) > 0 and int(para) > 0: pid = str( subprocess.call('vzlist -H -ao numproc ' + serverDest, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) pid = pid.strip() vps = Vps(serverDest) if pid != '-': vps.stop() vps.backupRestore(para) if pid != '-': vps.start() elif action == 'backupDropbox': if int(serverDest) > 0: vps = Vps(serverDest) vps.backupDropbox(para['token'], para['pass']) elif action == "avScan": return localserver.avScan() else: return 'Nothing : ' + action return 'Nothing to return'
def vcaAction(action, serverDest, para): global localserver # Server And VPS if action == 'VpsList': return localserver.VpsList() elif action == 'create': if serverDest != 0: localserver.VpsNew(serverDest, para['os'], para['name']) vps = Vps(serverDest) vps.modConf(para) elif action == 'modConf': if int(serverDest) != 0: vps = Vps(serverDest) vps.modConf(para) elif action == 'start': if int(serverDest) != 0: vps = Vps(serverDest) vps.start() elif action == 'stop': if int(serverDest) != 0: vps = Vps(serverDest) vps.stop() elif action == 'restart': if int(serverDest) == 0: localserver.restart() else: vps = Vps(serverDest) vps.restart() elif action == 'delete': if int(serverDest) > 0: localserver.VpsDelete(serverDest) elif action == 'clone': if int(serverDest) > 0 and int(para['dest']) > 0 : localserver.VpsClone(serverDest, para['dest'], para['ip'], para['hostname']) elif action == 'password': if int(serverDest) > 0 : vps = Vps(serverDest) vps.password(para) elif action == 'cmd': if int(serverDest) > 0 : vps = Vps(serverDest) return vps.cmd(para) return '' #Templates elif action == 'reinstall': if int(serverDest) > 0 : vps = Vps(serverDest) vps.reinstall(para) elif action == 'move': if int(serverDest) > 0 : vps = Vps(serverDest) vps.move(para) elif action == 'templateList': if int(serverDest) == 0: return localserver.templateList() elif action == 'templateRename': if int(serverDest) == 0: localserver.templateRename(para['old'], para['new']) elif action == 'templateAdd': if int(serverDest) == 0: localserver.templateAdd(para) elif action == 'templateDelete': if int(serverDest) == 0 and para != '': localserver.templateDelete(para) elif action == 'backupAdd': if int(serverDest) > 0 : vps = Vps(serverDest) vps.backupAdd() elif action == 'backupDelete': if int(serverDest) > 0 and int(para) > 0: vps = Vps(serverDest) vps.backupDelete(para) elif action == 'backupList': if int(serverDest) > 0 : vps = Vps(serverDest) return vps.backupList() else: return localserver.backupList() elif action == 'backupRestore': if int(serverDest) > 0 and int(para) > 0: pid = str(subprocess.call('vzlist -H -ao numproc '+serverDest, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)) pid = pid.strip() vps = Vps(serverDest) if pid != '-': vps.stop() vps.backupRestore(para) if pid != '-': vps.start() elif action == 'backupDropbox': if int(serverDest) > 0 : vps = Vps(serverDest) vps.backupDropbox(para['token'], para['pass']) elif action == "avScan": return localserver.avScan() else: return 'Nothing : '+action return 'Nothing to return'
def templateDownload(self): vps = Vps(newId)
def VpsList(self): VpsList = list() p = subprocess.Popen('vzlist -H -ao ctid,numproc,status,ip,hostname,laverage,diskspace,physpages', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in p.stdout.readlines(): vps = re.sub( '\s+', ' ', line.decode()).strip() vpsInfo = vps.split() vpsCurrent = Vps(vpsInfo[0]) if vpsInfo[1] == '-': vpsCurrent.nproc = 0 else: vpsCurrent.nproc = vpsInfo[1] vpsCurrent.ip = vpsInfo[3] vpsCurrent.hostname = vpsInfo[4] vpsCurrent.loadavg = vpsInfo[5] vpsCurrent.diskspace_current = vpsInfo[6] if vpsInfo[7] == '-': vpsCurrent.ram_current = 0 else: vpsCurrent.ram_current = int(vpsInfo[7])*4 vpsCurrent.loadConf() VpsList.append(vpsCurrent) return json.dumps(VpsList, default=encodeVps)