def param_check(): usage = "usage: %prog [options] arg" parser = OptionParser(usage) parser.add_option("-c", "--conf", dest="config", help="the server conf file") parser.add_option("-s", "--server-name", dest="name", help="the server name set in conf file. eg: tw06177") parser.add_option("-u", "--user", dest="user", help="email user name, eg:[email protected]") parser.add_option("-p", "--password", dest="password", help="email password") parser.add_option("-H", "--host", dest="pop3", help="pop3 server host name, eg:pop3.xunlei.com") (option, args) = parser.parse_args() if option.config is None or option.name is None: parser.error( "\nIncorrect number of arguments. \nUse option \'--help\'.") config = option.config if not os.path.exists(config) or not os.path.isfile(config): utility.pexit("File \"" + config + "\" is not a file or not exist.") serverlist.load_config(config) return option
def login_server(server): child = pexpect.spawn("ssh -l " + server.user + " " + server.host) index = child.expect(["password:"******"[#$]") return child else: utility.pexit("login " + server.host + " failed!")
def ensure_remote_usable(remote, session, user, password, host): client = autoLogin.login4public(remote.name, user, host, password) if utility.is_risk_path(remote.tmpPath): utility.pexit("risk path: " + remote.tmpPath + " found when try to remove it.") path = os.path.join(remote.tmpPath, session) client.sendline("mkdir -p " + path) client.expect("[$#]") time.sleep(1) client.close()
def get_server_version_info(server): conn = httplib.HTTPConnection(host=server.host, port=server.port) conn.request("GET", server.versionPath) resp = conn.getresponse() if resp.status is not 200: utility.pexit(server.host + " failed, status: " + str(resp.status)) data = resp.read() conn.close() return data
def jump_login(child, server): print("begin login " + server.name) child.sendline("ssh -l " + server.user + " " + server.host) index = child.expect("assword") if index == 0: child.sendline(server.password) index = child.expect("[#$]") if index == 0: print("login success!") child.sendline("") return child utility.pexit("login " + server.host + " failed!")
def login_essh(essh): child = pexpect.spawn("ssh -l " + essh.user + " " + essh.host) index = child.expect(["password:"******"passcode", "[#$]"]) if index == 0: print("please enter passcode:") return child elif index == 1: child.sendline("") return child else: utility.pexit("login essh failed!")
def local_upload(file_name, dest, session): print("local computer begin transfer " + file_name) path = os.path.join(dest.tmpPath, session) path = os.path.join(path, file_name) child = pexpect.spawn("scp " + file_name + " " + dest.user + "@" + dest.host + ":" + path) child.logfile = sys.stdout index = child.expect(["password:"******"local transfer complete") else: utility.pexit("file transfer to " + dest.host + " failed.")
def rscp(child, file_name, remote, session): path = os.path.join(remote.tmpPath, session) path = os.path.join(path, file_name) command = "scp " + file_name + " " + remote.user + "@" + remote.host + ":" + path child.sendline(command) index = -1 while index != 0: index = child.expect(["password", "yes"]) if index == 0: child.sendline(remote.password) index = child.expect("[#$]", timeout=SCP_TIMEOUT_INTERVAL) print(file_name + " has transfer to " + remote.host) if index != 0: utility.pexit("file remote transfer to " + remote.host + " failed.") elif index == 1: child.sendline("yes")
def param_check(): usage = "usage: %prog [options] arg" parser = OptionParser(usage) parser.add_option("-c", "--conf", dest="config", help="the server conf file") parser.add_option("-s", "--server-name", dest="name", help="the server name set in conf file. eg: tw06177") parser.add_option("-u", "--user", dest="user", help="email user name, eg:[email protected]") parser.add_option("-p", "--password", dest="password", help="email password") parser.add_option("-H", "--host", dest="pop3", help="pop3 server host name, eg:pop3.xunlei.com") (option, args) = parser.parse_args() if option.config is None or option.name is None: parser.error("\nIncorrect number of arguments. \nUse option '--help'.") config = option.config if not os.path.exists(config) or not os.path.isfile(config): utility.pexit('File "' + config + '" is not a file or not exist.') serverlist.load_config(config) return option
def login(name): if name == "essh": jump = serverlist.get_jump_server() child = auto_login_essh(jump) return child else: server = serverlist.get_lan_server(name) if server is not None: child = login_server(server) return child server = serverlist.get_product_server(name) if server is not None: jump = serverlist.get_jump_server() child = auto_login_essh(jump) child = jump_login(child, server) return child utility.pexit("server \"" + name + "\" not exists.")
def login(name): if name == "essh": jump = serverlist.get_jump_server() child = auto_login_essh(jump) return child else: server = serverlist.get_lan_server(name) if server is not None: child = login_server(server) return child server = serverlist.get_product_server(name) if server is not None: jump = serverlist.get_jump_server() child = auto_login_essh(jump) child = jump_login(child, server) return child utility.pexit('server "' + name + '" not exists.')
def auto_login_essh(essh): print("begin login essh") child = pexpect.spawn("ssh -l " + essh.user + " " + essh.host) # child.logfile = sys.stdout index = child.expect(["password:"******"passcode", "[#$]"]) if index == 0: print("waiting passcode...") time.sleep(5) global email code = passcode.get_passcode_from_email(email.host, email.user, email.password) print("passcode is " + code) child.sendline(code) index = child.expect("[#$]") if index == 0: print("login essh success") return child else: utility.pexit("login " + essh.host + " failed!") elif index == 1: return child else: utility.pexit("login " + essh.host + " failed!") else: utility.pexit("login " + essh.host + " failed!")
def remote_upload(file_name, remote, dest, session): ensure_remote_usable(remote, session) tmp_path = os.path.join(remote.tmpPath, session) file_full_path = os.path.join(tmp_path, file_name) print(file_full_path) client = pexpect.spawn( "scp " + file_name + " " + remote.user + "@" + remote.host + ":" + file_full_path) index = client.expect(["password:"******"file transfer to " + remote.host + " failed.") print("Copy " + file_name + " from local to " + remote.host + " complete") client = pexpect.spawn("ssh -l " + remote.user + " " + remote.host) index = client.expect(["password:"******"cd " + tmp_path) rscp(client, file_name, dest, session)
def remote_upload(file_name, remote, dest, session): ensure_remote_usable(remote, session) tmp_path = os.path.join(remote.tmpPath, session) file_full_path = os.path.join(tmp_path, file_name) print(file_full_path) client = pexpect.spawn("scp " + file_name + " " + remote.user + "@" + remote.host + ":" + file_full_path) index = client.expect(["password:"******"file transfer to " + remote.host + " failed.") print("Copy " + file_name + " from local to " + remote.host + " complete") client = pexpect.spawn("ssh -l " + remote.user + " " + remote.host) index = client.expect(["password:"******"cd " + tmp_path) rscp(client, file_name, dest, session)
def param_check(argv): usage = "usage: %prog [options] arg" parser = OptionParser(usage) parser.add_option("-f", "--file", dest="filename", help="transfer the file to remote server") parser.add_option("-c", "--conf", dest="config", help="the server conf file") parser.add_option("-l", "--lan-servers", dest="lan_servers", help="use lan servers to speed scp, eg:server1,server2[,server_n]") parser.add_option("-d", "--destination-servers", dest="dest_servers", help="destination that file would be upload. eg:server1[,server_n]") parser.add_option("-u", "--user", dest="user", help="email user name, eg:[email protected]") parser.add_option("-p", "--password", dest="password", help="email password") parser.add_option("-H", "--host", dest="pop3", help="pop3 server host name, eg:pop3.xunlei.com") (option, args) = parser.parse_args(argv) if option.filename is None or option.config is None or option.dest_servers is None \ or option.user is None or option.password is None or option.pop3 is None: parser.error("\nIncorrect number of arguments. \nUse option \'--help\'.") filename = option.filename if not os.path.exists(filename) or not os.path.isfile(filename): utility.pexit("File \"" + filename + "\" is not a file or not exist.") config = option.config if not os.path.exists(config) or not os.path.isfile(config): utility.pexit("File \"" + config + "\" is not a file or not exist.") serverlist.load_config(config) lan_servers = [] if option.lan_servers is not None: lan_servers = option.lan_servers.split(',') for name in lan_servers: info = serverlist.get_lan_server(name) if info is None: utility.pexit("server \"" + name + "\" is not exist") product_servers = option.dest_servers.split(',') for server_name in product_servers: info = serverlist.get_product_server(server_name) if info is None: utility.pexit("server \"" + server_name + "\" is not exist") return filename, lan_servers, product_servers, option.user, option.password, option.pop3
def remote_server_dispatch(child, file_name, servers): for server in servers: server_info = serverlist.get_product_server(server) if server_info is None: utility.pexit("there isn't server named " + server) child.sendline( "scp " + file_name + " " + server_info.user + "@" + server_info.host + ":" + server_info.tmpPath + "/" + file_name) index = child.expect("assword") if index == 0: child.sendline(server_info.password) index = child.expect("[$#]") print(file_name + " has dispatch to " + server_info.host) if index != 0: utility.pexit("error occur when dispatch file to " + server_info.host) else: utility.pexit("error occur when dispatch file to " + server_info.host)
def remote_server_dispatch(child, file_name, servers): for server in servers: server_info = serverlist.get_product_server(server) if server_info is None: utility.pexit("there isn't server named " + server) child.sendline("scp " + file_name + " " + server_info.user + "@" + server_info.host + ":" + server_info.tmpPath + "/" + file_name) index = child.expect("assword") if index == 0: child.sendline(server_info.password) index = child.expect("[$#]") print(file_name + " has dispatch to " + server_info.host) if index != 0: utility.pexit("error occur when dispatch file to " + server_info.host) else: utility.pexit("error occur when dispatch file to " + server_info.host)
conn.close() return data def get_config(path): v = json.load(file(path), object_hook=lambda d: namedtuple('server', d.keys()) (*d.values())) apps = dict() for item in v: apps[item.name] = item return apps if __name__ == '__main__': v = get_config("/Users/lvfei/Code/ToolKit/conf/apps.local.json") app = "recsys-servering" app = v.get(app) version = None for server in app.servers: tmp = get_server_version_info(server) if version is None: version = tmp else: if tmp != version: utility.pexit(server.name + " resp value is not equal prev's") print(version)
data = resp.read() conn.close() return data def get_config(path): v = json.load(file(path), object_hook=lambda d: namedtuple('server', d.keys())(*d.values())) apps = dict() for item in v: apps[item.name] = item return apps if __name__ == '__main__': v = get_config("/Users/lvfei/Code/ToolKit/conf/apps.local.json") app = "recsys-servering" app = v.get(app) version = None for server in app.servers: tmp = get_server_version_info(server) if version is None: version = tmp else: if tmp != version: utility.pexit(server.name + " resp value is not equal prev's") print(version)
def merge_file(client, files, file_name, sha1sum): command = "cat " for f in files: command += f command += " " command += " > " command += file_name client.sendline(command) index = client.expect(["[#$]"]) if index != 0: utility.pexit("operate remote failed!") # For unknown reason, it needs print sha1sum twice. client.sendline("sha1sum " + file_name + " > sha1sum.txt") index = client.expect(["[#$]"]) if index != 0: utility.pexit("operate remote failed!") client.sendline("cat sha1sum.txt") index = client.expect(["[#$]"]) if index != 0: utility.pexit("operate remote failed!") client.sendline("cat sha1sum.txt") index = client.expect(["[#$]"]) if index != 0: utility.pexit("operate remote failed!") if index != 0: utility.pexit("file transfer failed for sha1sum not equal") else: log = client.before.replace('\r', ' ').replace('\n', ' ').split(' ') if len(filter(lambda x: x == sha1sum, log)) == 0: utility.pexit("file transfer failed for sha1sum not equal")
def param_check(argv): usage = "usage: %prog [options] arg" parser = OptionParser(usage) parser.add_option("-f", "--file", dest="filename", help="transfer the file to remote server") parser.add_option("-c", "--conf", dest="config", help="the server conf file") parser.add_option( "-l", "--lan-servers", dest="lan_servers", help="use lan servers to speed scp, eg:server1,server2[,server_n]") parser.add_option( "-d", "--destination-servers", dest="dest_servers", help="destination that file would be upload. eg:server1[,server_n]") parser.add_option("-u", "--user", dest="user", help="email user name, eg:[email protected]") parser.add_option("-p", "--password", dest="password", help="email password") parser.add_option("-H", "--host", dest="pop3", help="pop3 server host name, eg:pop3.xunlei.com") (option, args) = parser.parse_args(argv) if option.filename is None or option.config is None or option.dest_servers is None \ or option.user is None or option.password is None or option.pop3 is None: parser.error( "\nIncorrect number of arguments. \nUse option \'--help\'.") filename = option.filename if not os.path.exists(filename) or not os.path.isfile(filename): utility.pexit("File \"" + filename + "\" is not a file or not exist.") config = option.config if not os.path.exists(config) or not os.path.isfile(config): utility.pexit("File \"" + config + "\" is not a file or not exist.") serverlist.load_config(config) lan_servers = [] if option.lan_servers is not None: lan_servers = option.lan_servers.split(',') for name in lan_servers: info = serverlist.get_lan_server(name) if info is None: utility.pexit("server \"" + name + "\" is not exist") product_servers = option.dest_servers.split(',') for server_name in product_servers: info = serverlist.get_product_server(server_name) if info is None: utility.pexit("server \"" + server_name + "\" is not exist") return filename, lan_servers, product_servers, option.user, option.password, option.pop3