def download(self): while True: if not self.user_perm: self.user_perm = get_group_user_perm(self.user) try: print "进入批量下载模式" print "请输入主机名或ansile支持的pattern, 多个主机:分隔,q退出" pattern = raw_input("\033[1;32mPattern>:\033[0m ").strip() if pattern == 'q': break else: assets = self.user_perm.get('asset').keys() res = gen_resource({'user': self.user, 'asset': assets}, perm=self.user_perm) runner = MyRunner(res) asset_name_str = '' print "匹配用户:\n" for inv in runner.inventory.get_hosts(pattern=pattern): asset_name_str += '%s ' % inv.name print ' %s' % inv.name if not asset_name_str: color_print('没有匹配主机') continue print while True: tmp_dir = get_tmp_dir() logger.debug('Download tmp dir: %s' % tmp_dir) print "请输入文件路径(不支持目录)" file_path = raw_input("\033[1;32mPath>:\033[0m ").strip() if file_path == 'q': break if not file_path: color_print("文件路径为空") continue runner.run('fetch', module_args='src=%s dest=%s' % (file_path, tmp_dir), pattern=pattern) ret = runner.results FileLog(user=self.user.name, host=asset_name_str, filename=file_path, type='download', remote_ip=remote_ip, result=ret).save() logger.debug('Download file result: %s' % ret) os.chdir('/tmp') tmp_dir_name = os.path.basename(tmp_dir) if not os.listdir(tmp_dir): color_print('下载全部失败') continue bash('tar czf %s.tar.gz %s && sz %s.tar.gz' % (tmp_dir, tmp_dir_name, tmp_dir)) if ret.get('failed'): error = '文件名称: %s \n下载失败: [ %s ] \n下载成功 [ %s ]' % \ ('%s.tar.gz' % tmp_dir_name, ', '.join(ret.get('failed').keys()), ', '.join(ret.get('ok').keys())) color_print(error) else: msg = '文件名称: %s \n下载成功 [ %s ]' % ('%s.tar.gz' % tmp_dir_name, ', '.join(ret.get('ok').keys())) color_print(msg, 'green') print except IndexError: pass
def upload(self): while True: if not self.user_perm: self.user_perm = get_group_user_perm(self.user) try: print "进入批量上传模式" print "请输入主机名或ansile支持的pattern, 多个主机:分隔 q退出" pattern = raw_input("\033[1;32mPattern>:\033[0m ").strip() if pattern == 'q': break else: assets = self.user_perm.get('asset').keys() res = gen_resource({'user': self.user, 'asset': assets}, perm=self.user_perm) runner = MyRunner(res) asset_name_str = '' print "匹配主机:" for inv in runner.inventory.get_hosts(pattern=pattern): print inv.name asset_name_str += '%s ' % inv.name if not asset_name_str: color_print('没有匹配主机') continue tmp_dir = get_tmp_dir() logger.debug('Upload tmp dir: %s' % tmp_dir) os.chdir(tmp_dir) bash('rz') filename_str = ' '.join(os.listdir(tmp_dir)) if not filename_str: color_print("上传文件为空") continue logger.debug('上传文件: %s' % filename_str) runner = MyRunner(res) runner.run('copy', module_args='src=%s dest=%s directory_mode' % (tmp_dir, tmp_dir), pattern=pattern) ret = runner.results FileLog(user=self.user.name, host=asset_name_str, filename=filename_str, remote_ip=remote_ip, type='upload', result=ret).save() logger.debug('Upload file: %s' % ret) if ret.get('failed'): error = '上传目录: %s \n上传失败: [ %s ] \n上传成功 [ %s ]' % (tmp_dir, ', '.join(ret.get('failed').keys()), ', '.join(ret.get('ok').keys())) color_print(error) else: msg = '上传目录: %s \n传送成功 [ %s ]' % (tmp_dir, ', '.join(ret.get('ok').keys())) color_print(msg, 'green') print except IndexError: pass
def download(self): while True: if not self.user_perm: self.user_perm = get_group_user_perm(self.user) try: print "进入批量下载模式" print "请输入主机名或ansile支持的pattern, 多个主机:分隔,q退出" pattern = raw_input("\033[1;32mPattern>:\033[0m ").strip() if pattern == "q": break else: assets = self.user_perm.get("asset").keys() res = gen_resource({"user": self.user, "asset": assets}, perm=self.user_perm) runner = MyRunner(res) asset_name_str = "" print "匹配用户:\n" for inv in runner.inventory.get_hosts(pattern=pattern): asset_name_str += "%s " % inv.name print " %s" % inv.name if not asset_name_str: color_print("没有匹配主机") continue print while True: tmp_dir = get_tmp_dir() logger.debug("Download tmp dir: %s" % tmp_dir) print "请输入文件路径(不支持目录)" file_path = raw_input("\033[1;32mPath>:\033[0m ").strip() if file_path == "q": break if not file_path: color_print("文件路径为空") continue runner.run("fetch", module_args="src=%s dest=%s" % (file_path, tmp_dir), pattern=pattern) ret = runner.results FileLog( user=self.user.name, host=asset_name_str, filename=file_path, type="download", remote_ip=remote_ip, result=ret, ).save() logger.debug("Download file result: %s" % ret) os.chdir("/tmp") tmp_dir_name = os.path.basename(tmp_dir) if not os.listdir(tmp_dir): color_print("下载全部失败") continue bash("tar czf %s.tar.gz %s && sz %s.tar.gz" % (tmp_dir, tmp_dir_name, tmp_dir)) if ret.get("failed"): error = "文件名称: %s \n下载失败: [ %s ] \n下载成功 [ %s ]" % ( "%s.tar.gz" % tmp_dir_name, ", ".join(ret.get("failed").keys()), ", ".join(ret.get("ok").keys()), ) color_print(error) else: msg = "文件名称: %s \n下载成功 [ %s ]" % ( "%s.tar.gz" % tmp_dir_name, ", ".join(ret.get("ok").keys()), ) color_print(msg, "green") print except IndexError: pass
def upload(self): while True: if not self.user_perm: self.user_perm = get_group_user_perm(self.user) try: print "进入批量上传模式" print "请输入主机名或ansile支持的pattern, 多个主机:分隔 q退出" pattern = raw_input("\033[1;32mPattern>:\033[0m ").strip() if pattern == "q": break else: assets = self.user_perm.get("asset").keys() res = gen_resource({"user": self.user, "asset": assets}, perm=self.user_perm) runner = MyRunner(res) asset_name_str = "" print "匹配主机:" for inv in runner.inventory.get_hosts(pattern=pattern): print inv.name asset_name_str += "%s " % inv.name if not asset_name_str: color_print("没有匹配主机") continue tmp_dir = get_tmp_dir() logger.debug("Upload tmp dir: %s" % tmp_dir) os.chdir(tmp_dir) bash("rz") filename_str = " ".join(os.listdir(tmp_dir)) if not filename_str: color_print("上传文件为空") continue logger.debug("上传文件: %s" % filename_str) runner = MyRunner(res) runner.run( "copy", module_args="src=%s dest=%s directory_mode" % (tmp_dir, tmp_dir), pattern=pattern ) ret = runner.results FileLog( user=self.user.name, host=asset_name_str, filename=filename_str, remote_ip=remote_ip, type="upload", result=ret, ).save() logger.debug("Upload file: %s" % ret) if ret.get("failed"): error = "上传目录: %s \n上传失败: [ %s ] \n上传成功 [ %s ]" % ( tmp_dir, ", ".join(ret.get("failed").keys()), ", ".join(ret.get("ok").keys()), ) color_print(error) else: msg = "上传目录: %s \n传送成功 [ %s ]" % (tmp_dir, ", ".join(ret.get("ok").keys())) color_print(msg, "green") print except IndexError: pass