Example #1
0
def user_perm_asset_num(user_id):
    user = get_object(User, id=user_id)
    if user:
        user_perm_info = get_group_user_perm(user)
        return len(user_perm_info.get('asset').keys())
    else:
        return 0
Example #2
0
def download(request):
    user = request.user
    assets = get_group_user_perm(user).get('asset').keys()
    asset_select = []
    if request.method == 'POST':
        remote_ip = request.META.get('REMOTE_ADDR')
        asset_ids = request.POST.getlist('asset_ids', '')
        file_path = request.POST.get('file_path')
        date_now = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
        upload_dir = get_tmp_dir()
        for asset_id in asset_ids:
            asset_select.append(get_object(Asset, id=asset_id))

        if not set(asset_select).issubset(set(assets)):
            illegal_asset = set(asset_select).issubset(set(assets))
            return HttpResponse(u'没有权限的服务器 %s' % ','.join([asset.hostname for asset in illegal_asset]))

        res = gen_resource({'user': user, 'asset': asset_select})
        runner = MyRunner(res)
        runner.run('fetch', module_args='src=%s dest=%s' % (file_path, upload_dir), pattern='*')
        FileLog(user=request.user.username, host=' '.join([asset.hostname for asset in asset_select]),
                filename=file_path, type='download', remote_ip=remote_ip, result=runner.results).save()
        logger.debug(runner.results)
        os.chdir('/tmp')
        tmp_dir_name = os.path.basename(upload_dir)
        tar_file = '%s.tar.gz' % upload_dir
        bash('tar czf %s %s' % (tar_file, tmp_dir_name))
        f = open(tar_file)
        data = f.read()
        f.close()
        response = HttpResponse(data, content_type='application/octet-stream')
        response['Content-Disposition'] = 'attachment; filename=%s' % os.path.basename(tar_file)
        return response

    return render_to_response('download.html', locals(), context_instance=RequestContext(request))
Example #3
0
def user_perm_asset_num(user_id):
    user = get_object(User, id=user_id)
    if user:
        user_perm_info = get_group_user_perm(user)
        return len(user_perm_info.get('asset').keys())
    else:
        return 0
Example #4
0
    def search(self, str_r=''):
        gid_pattern = re.compile(r'^g\d+$')
        # 获取用户授权的所有主机信息
        if not self.user_perm:
            self.user_perm = get_group_user_perm(self.user)
        user_asset_all = self.user_perm.get('asset').keys()
        # 搜索结果保存
        user_asset_search = []
        if str_r:
            # 资产组组id匹配
            if gid_pattern.match(str_r):
                gid = int(str_r.lstrip('g'))
                # 获取资产组包含的资产
                user_asset_search = get_object(AssetGroup, id=gid).asset_set.all()
            else:
                # 匹配 ip, hostname, 备注
                for asset in user_asset_all:
                    if str_r in asset.ip or str_r in str(asset.hostname) or str_r in str(asset.comment):
                        user_asset_search.append(asset)
        else:
            # 如果没有输入就展现所有
            user_asset_search = user_asset_all

        self.search_result = dict(zip(range(len(user_asset_search)), user_asset_search))
        color_print('[%-3s] %-12s %-15s  %-5s  %-10s  %s' % ('ID', u'主机名', 'IP', u'端口', u'系统用户', u'备注'), 'title')
        for index, asset in self.search_result.items():
            # 获取该资产信息
            asset_info = get_asset_info(asset)
            # 获取该资产包含的角色
            role = [str(role.name) for role in self.user_perm.get('asset').get(asset).get('role')]
            print '[%-3s] %-15s %-15s  %-5s  %-10s  %s' % (index, asset.hostname, asset.ip, asset_info.get('port'),
                                                            role, asset.comment)
        print
Example #5
0
 def print_asset_group(self):
     """
     打印用户授权的资产组
     """
     user_asset_group_all = get_group_user_perm(self.user).get('asset_group', [])
     color_print('[%-3s] %-20s %s' % ('ID', '组名', '备注'), 'title')
     for asset_group in user_asset_group_all:
         print '[%-3s] %-15s %s' % (asset_group.id, asset_group.name, asset_group.comment)
     print
Example #6
0
    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
Example #7
0
 def print_asset_group(self):
     """
     打印用户授权的资产组
     """
     user_asset_group_all = get_group_user_perm(self.user).get("asset_group", [])
     color_print("[%-3s] %-20s %s" % ("ID", "组名", "备注"), "title")
     for asset_group in user_asset_group_all:
         print "[%-3s] %-15s %s" % (asset_group.id, asset_group.name, asset_group.comment)
     print
Example #8
0
def rule_list(request):
    """
    rule list view
    """
    header_title, path1, path2 = u'查看规则', u'灰度管理', u'查看规则'
    username = request.user.username
    user_perm = request.session['role_id']
    rule_status = RULE_STATUS
    status = request.GET.get('status', '')
    keyword = request.GET.get('keyword', '')
    export = request.GET.get("export", False)
    rule_id_all = request.GET.getlist("id", '')
    rule_find = Rule.objects.all()

    if user_perm != 0:
        rule_find = Rule.objects.all()
    else:
        rule_id_all = []
        user = get_object(User, username=username)
        rule_perm = get_group_user_perm(user) if user else {'rule': ''}
        user_rule_perm = rule_perm['rule'].keys()
        for rule in user_rule_perm:
            rule_id_all.append(rule.id)
        rule_find = Rule.objects.filter(pk__in=rule_id_all)

    if status:
        rule_find = rule_find.filter(status__contains=status)

    if keyword:
        rule_find = rule_find.filter(
            Q(name__contains=keyword) |
            Q(shortname__contains=keyword) |
            Q(content__contains=keyword) |
            Q(comment__contains=keyword))

    if export:
        if rule_id_all:
            rule_find = []
            for rule_id in rule_id_all:
                rule = get_object(Rule, id=rule_id)
                if rule:
                    rule_find.append(rule)
        s = write_rule_excel(rule_find)
        if s[0]:
            file_name = s[1]
        smg = u'excel文件已生成,请点击下载!'
        return my_render('upgray/rule_excel_download.html', locals(), request)
    rules_list, p, rules, page_range, current_page, show_first, show_end = pages(rule_find, request)
    if user_perm != 0:
        return my_render('upgray/rule_list.html', locals(), request)
    else:
        return my_render('upgray/rule_cu_list.html', locals(), request)
Example #9
0
    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
Example #10
0
def rule_list(request):
    """
    rule list view
    """
    header_title, path1, path2 = u'查看规则', u'灰度管理', u'查看规则'
    username = request.user.username
    user_perm = request.session['role_id']
    rule_status = RULE_STATUS
    status = request.GET.get('status', '')
    keyword = request.GET.get('keyword', '')
    export = request.GET.get("export", False)
    rule_id_all = request.GET.getlist("id", '')
    rule_find = Rule.objects.all()

    if user_perm != 0:
        rule_find = Rule.objects.all()
    else:
        rule_id_all = []
        user = get_object(User, username=username)
        rule_perm = get_group_user_perm(user) if user else {'rule': ''}
        user_rule_perm = rule_perm['rule'].keys()
        for rule in user_rule_perm:
            rule_id_all.append(rule.id)
        rule_find = Rule.objects.filter(pk__in=rule_id_all)

    if status:
        rule_find = rule_find.filter(status__contains=status)

    if keyword:
        rule_find = rule_find.filter(
            Q(name__contains=keyword) | Q(shortname__contains=keyword)
            | Q(content__contains=keyword) | Q(comment__contains=keyword))

    if export:
        if rule_id_all:
            rule_find = []
            for rule_id in rule_id_all:
                rule = get_object(Rule, id=rule_id)
                if rule:
                    rule_find.append(rule)
        s = write_rule_excel(rule_find)
        if s[0]:
            file_name = s[1]
        smg = u'excel文件已生成,请点击下载!'
        return my_render('upgray/rule_excel_download.html', locals(), request)
    rules_list, p, rules, page_range, current_page, show_first, show_end = pages(
        rule_find, request)
    if user_perm != 0:
        return my_render('upgray/rule_list.html', locals(), request)
    else:
        return my_render('upgray/rule_cu_list.html', locals(), request)
Example #11
0
def upload(request):
    user = request.user
    assets = get_group_user_perm(user).get('asset').keys()
    asset_select = []
    if request.method == 'POST':
        remote_ip = request.META.get('REMOTE_ADDR')
        asset_ids = request.POST.getlist('asset_ids', '')
        upload_files = request.FILES.getlist('file[]', None)
        date_now = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
        upload_dir = get_tmp_dir()
        # file_dict = {}
        for asset_id in asset_ids:
            asset_select.append(get_object(Asset, id=asset_id))

        if not set(asset_select).issubset(set(assets)):
            illegal_asset = set(asset_select).issubset(set(assets))
            return HttpResponse(
                '没有权限的服务器 %s' %
                ','.join([asset.hostname for asset in illegal_asset]))

        for upload_file in upload_files:
            file_path = '%s/%s' % (upload_dir, upload_file.name)
            with open(file_path, 'w') as f:
                for chunk in upload_file.chunks():
                    f.write(chunk)

        res = gen_resource({'user': user, 'asset': asset_select})
        runner = MyRunner(res)
        runner.run('copy',
                   module_args='src=%s dest=%s directory_mode' %
                   (upload_dir, upload_dir),
                   pattern='*')
        ret = runner.results
        logger.debug(ret)
        FileLog(user=request.user.username,
                host=' '.join([asset.hostname for asset in asset_select]),
                filename=' '.join([f.name for f in upload_files]),
                type='upload',
                remote_ip=remote_ip,
                result=ret).save()
        if ret.get('failed'):
            error = u'上传目录: %s <br> 上传失败: [ %s ] <br>上传成功 [ %s ]' % (
                upload_dir, ', '.join(ret.get('failed').keys()), ', '.join(
                    ret.get('ok').keys()))
            return HttpResponse(error, status=500)
        msg = u'上传目录: %s <br> 传送成功 [ %s ]' % (upload_dir, ', '.join(
            ret.get('ok').keys()))
        return HttpResponse(msg)
    return my_render('upload.html', locals(), request)
Example #12
0
def download(request):
    user = request.user
    assets = get_group_user_perm(user).get('asset').keys()
    asset_select = []
    if request.method == 'POST':
        remote_ip = request.META.get('REMOTE_ADDR')
        asset_ids = request.POST.getlist('asset_ids', '')
        file_path = request.POST.get('file_path')
        date_now = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
        upload_dir = get_tmp_dir()
        for asset_id in asset_ids:
            asset_select.append(get_object(Asset, id=asset_id))

        if not set(asset_select).issubset(set(assets)):
            illegal_asset = set(asset_select).issubset(set(assets))
            return HttpResponse(
                u'没有权限的服务器 %s' %
                ','.join([asset.hostname for asset in illegal_asset]))

        res = gen_resource({'user': user, 'asset': asset_select})
        runner = MyRunner(res)
        runner.run('fetch',
                   module_args='src=%s dest=%s' % (file_path, upload_dir),
                   pattern='*')
        FileLog(user=request.user.username,
                host=' '.join([asset.hostname for asset in asset_select]),
                filename=file_path,
                type='download',
                remote_ip=remote_ip,
                result=runner.results).save()
        logger.debug(runner.results)
        os.chdir('/tmp')
        tmp_dir_name = os.path.basename(upload_dir)
        tar_file = '%s.tar.gz' % upload_dir
        bash('tar czf %s %s' % (tar_file, tmp_dir_name))
        f = open(tar_file)
        data = f.read()
        f.close()
        response = HttpResponse(data, content_type='application/octet-stream')
        response[
            'Content-Disposition'] = 'attachment; filename=%s' % os.path.basename(
                tar_file)
        return response

    return render_to_response('download.html',
                              locals(),
                              context_instance=RequestContext(request))
Example #13
0
def user_detail(request):
    header_title, path1, path2 = '用户详情', '用户管理', '用户详情'
    if request.session.get('role_id') == 0:
        user_id = request.user.id
    else:
        user_id = request.GET.get('id', '')

    user = get_object(User, id=user_id)
    if not user:
        return HttpResponseRedirect(reverse('user_list'))

    user_perm_info = get_group_user_perm(user)
    role_assets = user_perm_info.get('role')
    user_log_ten = Log.objects.filter(user=user.username).order_by('id')[0:10]
    user_log_last = Log.objects.filter(user=user.username).order_by('id')[0:50]
    user_log_last_num = len(user_log_last)

    return my_render('upuser/user_detail.html', locals(), request)
Example #14
0
def upload(request):
    user = request.user
    assets = get_group_user_perm(user).get('asset').keys()
    asset_select = []
    if request.method == 'POST':
        remote_ip = request.META.get('REMOTE_ADDR')
        asset_ids = request.POST.getlist('asset_ids', '')
        upload_files = request.FILES.getlist('file[]', None)
        date_now = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
        upload_dir = get_tmp_dir()
        # file_dict = {}
        for asset_id in asset_ids:
            asset_select.append(get_object(Asset, id=asset_id))

        if not set(asset_select).issubset(set(assets)):
            illegal_asset = set(asset_select).issubset(set(assets))
            return HttpResponse('没有权限的服务器 %s' % ','.join([asset.hostname for asset in illegal_asset]))

        for upload_file in upload_files:
            file_path = '%s/%s' % (upload_dir, upload_file.name)
            with open(file_path, 'w') as f:
                for chunk in upload_file.chunks():
                    f.write(chunk)

        res = gen_resource({'user': user, 'asset': asset_select})
        runner = MyRunner(res)
        runner.run('copy', module_args='src=%s dest=%s directory_mode'
                                        % (upload_dir, upload_dir), pattern='*')
        ret = runner.results
        logger.debug(ret)
        FileLog(user=request.user.username, host=' '.join([asset.hostname for asset in asset_select]),
                filename=' '.join([f.name for f in upload_files]), type='upload', remote_ip=remote_ip,
                result=ret).save()
        if ret.get('failed'):
            error = u'上传目录: %s <br> 上传失败: [ %s ] <br>上传成功 [ %s ]' % (upload_dir,
                                                                             ', '.join(ret.get('failed').keys()),
                                                                             ', '.join(ret.get('ok').keys()))
            return HttpResponse(error, status=500)
        msg = u'上传目录: %s <br> 传送成功 [ %s ]' % (upload_dir, ', '.join(ret.get('ok').keys()))
        return HttpResponse(msg)
    return my_render('upload.html', locals(), request)
Example #15
0
    def search(self, str_r=""):
        gid_pattern = re.compile(r"^g\d+$")
        # 获取用户授权的所有主机信息
        if not self.user_perm:
            self.user_perm = get_group_user_perm(self.user)
        user_asset_all = self.user_perm.get("asset").keys()
        # 搜索结果保存
        user_asset_search = []
        if str_r:
            # 资产组组id匹配
            if gid_pattern.match(str_r):
                gid = int(str_r.lstrip("g"))
                # 获取资产组包含的资产
                user_asset_search = get_object(AssetGroup, id=gid).asset_set.all()
            else:
                # 匹配 ip, hostname, 备注
                for asset in user_asset_all:
                    if str_r in asset.ip or str_r in str(asset.hostname) or str_r in str(asset.comment):
                        user_asset_search.append(asset)
        else:
            # 如果没有输入就展现所有
            user_asset_search = user_asset_all

        self.search_result = dict(zip(range(len(user_asset_search)), user_asset_search))
        color_print("[%-3s] %-12s %-15s  %-5s  %-10s  %s" % ("ID", u"主机名", "IP", u"端口", u"系统用户", u"备注"), "title")
        for index, asset in self.search_result.items():
            # 获取该资产信息
            asset_info = get_asset_info(asset)
            # 获取该资产包含的角色
            role = [str(role.name) for role in self.user_perm.get("asset").get(asset).get("role")]
            print "[%-3s] %-15s %-15s  %-5s  %-10s  %s" % (
                index,
                asset.hostname,
                asset.ip,
                asset_info.get("port"),
                role,
                asset.comment,
            )
        print
Example #16
0
    def exec_cmd(self):
        """
        批量执行命令
        """
        while True:
            if not self.user_perm:
                self.user_perm = get_group_user_perm(self.user)

            roles = self.user_perm.get("role").keys()
            if len(roles) > 1:  # 授权角色数大于1
                color_print("[%-2s] %-15s" % ("ID", "系统用户"), "info")
                role_check = dict(zip(range(len(roles)), roles))

                for i, r in role_check.items():
                    print "[%-2s] %-15s" % (i, r.name)
                print
                print "请输入运行命令所关联系统用户的ID, q退出"

                try:
                    role_id = raw_input("\033[1;32mRole>:\033[0m ").strip()
                    if role_id == "q":
                        break
                except (IndexError, ValueError):
                    color_print("错误输入")
                else:
                    role = role_check[int(role_id)]
            elif len(roles) == 1:  # 授权角色数为1
                role = roles[0]
            assets = list(self.user_perm.get("role", {}).get(role).get("asset"))  # 获取该用户,角色授权主机
            print "授权包含该系统用户的所有主机"
            for asset in assets:
                print " %s" % asset.hostname
            print
            print "请输入主机名或ansile支持的pattern, 多个主机:分隔, q退出"
            pattern = raw_input("\033[1;32mPattern>:\033[0m ").strip()
            if pattern == "q":
                break
            else:
                res = gen_resource({"user": self.user, "asset": assets, "role": role}, perm=self.user_perm)
                runner = MyRunner(res)
                asset_name_str = ""
                print "匹配主机:"
                for inv in runner.inventory.get_hosts(pattern=pattern):
                    print " %s" % inv.name
                    asset_name_str += "%s " % inv.name
                print

                while True:
                    print "请输入执行的命令, 按q退出"
                    command = raw_input("\033[1;32mCmds>:\033[0m ").strip()
                    if command == "q":
                        break
                    runner.run("shell", command, pattern=pattern)
                    ExecLog(
                        host=asset_name_str,
                        user=self.user.username,
                        cmd=command,
                        remote_ip=remote_ip,
                        result=runner.results,
                    ).save()
                    for k, v in runner.results.items():
                        if k == "ok":
                            for host, output in v.items():
                                color_print("%s => %s" % (host, "Ok"), "green")
                                print output
                                print
                        else:
                            for host, output in v.items():
                                color_print("%s => %s" % (host, k), "red")
                                color_print(output, "red")
                                print
                    print "~o~ Task finished ~o~"
                    print
Example #17
0
def dns_list(request):
    """
    dns list view
    """
    header_title, path1, path2 = u'查看域名', u'应用管理', u'查看域名'
    username = request.user.username
    user_perm = request.session['role_id']
    app_group_all = AppGroup.objects.all()
    app_types = APP_TYPE
    app_envs = ENV_ENVS
    app_status = APP_STATUS
    group_name = request.GET.get('group', '')
    app_type = request.GET.get('app_type', '')
    app_env = request.GET.get('app_env', '')
    status = request.GET.get('status', '')
    keyword = request.GET.get('keyword', '')
    export = request.GET.get("export", False)
    group_id = request.GET.get("group_id", '')
    app_id_all = request.GET.getlist("id", '')

    if group_id:
        group = get_object(AppGroup, id=group_id)
        if group:
            app_find = App.objects.filter(group=group)
    else:
        if user_perm != 0:
            app_find = App.objects.all()
        else:
            app_id_all = []
            user = get_object(User, username=username)
            app_perm = get_group_user_perm(user) if user else {'app': ''}
            user_app_perm = app_perm['app'].keys()
            for app in user_app_perm:
                app_id_all.append(app.id)
            app_find = App.objects.filter(pk__in=app_id_all)
            app_group_all = list(app_perm['app_group'])

    if app_env:
        app_find = app_find.filter(app_env__contains=app_env)

    if group_name:
        app_find = app_find.filter(group__name__contains=group_name)

    if app_type:
        app_find = app_find.filter(app_type__contains=app_type)

    if status:
        app_find = app_find.filter(status__contains=status)

    if keyword:
        app_find = app_find.filter(
            Q(name__contains=keyword) |
            Q(pre_value__contains=keyword) |
            Q(value__contains=keyword) |
            Q(comment__contains=keyword) |
            Q(group__name__contains=keyword))

    if export:
        if app_id_all:
            app_find = []
            for app_id in app_id_all:
                app = get_object(App, id=app_id)
                if app:
                    app_find.append(app)
        s = write_excel(app_find)
        if s[0]:
            file_name = s[1]
        smg = u'excel文件已生成,请点击下载!'
        return my_render('upapp/web_excel_download.html', locals(), request)
    apps_list, p, apps, page_range, current_page, show_first, show_end = pages(app_find, request)
    if user_perm != 0:
        return my_render('upapp/dns_list.html', locals(), request)
    else:
        return my_render('upapp/dns_cu_list.html', locals(), request)
Example #18
0
def map_list(request):
    """
    map list view
    """
    header_title, path1, path2 = u'查看映射', u'应用管理', u'查看映射'
    username = request.user.username
    user_perm = request.session['role_id']
    map_envs = ENV_ENVS
    map_env = request.GET.get('app_env', '')
    node_ip = request.GET.get('node_ip', '')
    node = request.GET.get('node', '')
    path = request.GET.get('path', '')
    contextroot = request.GET.get('contextroot', '')
    keyword = request.GET.get('keyword', '')
    export = request.GET.get("export", False)
    map_id_all = request.GET.getlist("id", '')

    if user_perm != 0:
        map_find = Map.objects.all()
    else:
        map_id_all = []
        user = get_object(User, username=username)
        map_perm = get_group_user_perm(user) if user else {'map': ''}
        user_map_perm = map_perm['map'].keys()
        for map in user_map_perm:
            map_id_all.append(map.id)
        map_find = Map.objects.filter(pk__in=map_id_all)
        map_group_all = list(map_perm['map_group'])

    if map_env:
        map_find = map_find.filter(map_env__contains=map_env)

    if node_ip:
        map_find = map_find.filter(node_ip__contains=node_ip)

    if node:
        map_find = map_find.filter(node__contains=node)

    if path:
        map_find = map_find.filter(path__contains=path)

    if contextroot:
        map_find = map_find.filter(contextroot__contains=contextroot)

    if keyword:
        map_find = map_find.filter(
            Q(name__contains=keyword) |
            Q(comment__contains=keyword) |
            Q(group__name__contains=keyword))

    if export:
        if map_id_all:
            map_find = []
            for map_id in map_id_all:
                map = get_object(Map, id=map_id)
                if map:
                    map_find.append(map)
        s = write_excel(map_find)
        if s[0]:
            file_name = s[1]
        smg = u'excel文件已生成,请点击下载!'
        return my_render('upapp/app_excel_download.html', locals(), request)
    maps_list, p, maps, page_range, current_page, show_first, show_end = pages(map_find, request)
    if user_perm != 0:
        return my_render('upapp/map_list.html', locals(), request)
    else:
        return my_render('upapp/map_cu_list.html', locals(), request)
Example #19
0
def system_list(request):
    """
    system list view
    """
    header_title, path1, path2 = u'查看系统', u'灰度管理', u'查看系统'
    username = request.user.username
    user_perm = request.session['role_id']
    system_rule_all = Rule.objects.all()
    system_status = RULE_STATUS
    status = request.GET.get('status', '')
    rule_name = request.GET.get('rule_name', '')
    old_version = request.GET.get('old_version', '')
    new_version = request.GET.get('new_version', '')
    keyword = request.GET.get('keyword', '')
    export = request.GET.get("export", False)
    rule_id = request.GET.get("rule_id", '')
    system_id_all = request.GET.getlist("id", '')

    if rule_id:
        rule_name = get_object(Rule, id=rule_id)
        if rule_name:
            system_find = System.objects.filter(rule_name=rule_name)
    else:
        if user_perm != 0:
            system_find = System.objects.all()
        else:
            system_id_all = []
            user = get_object(User, username=username)
            system_perm = get_group_user_perm(user) if user else {'system': ''}
            user_system_perm = system_perm['system'].keys()
            for system in user_system_perm:
                system_id_all.append(system.id)
            system_find = System.objects.filter(pk__in=system_id_all)
            system_rule_all = list(system_perm['system_rule'])

    if rule_name:
        system_find = system_find.filter(rule_name__name__contains=rule_name)

    if status:
        system_find = system_find.filter(status__contains=status)

    if keyword:
        system_find = system_find.filter(
            Q(name__contains=keyword) |
            Q(rule_name__name__contains=keyword) |
            Q(old_version__contains=keyword) |
            Q(new_version__contains=keyword) |
            Q(comment__contains=keyword))

    if export:
        if system_id_all:
            system_find = []
            for system_id in system_id_all:
                system = get_object(System, id=system_id)
                if system:
                    system_find.append(system)
        s = write_system_excel(system_find)
        if s[0]:
            file_name = s[1]
        smg = u'excel文件已生成,请点击下载!'
        return my_render('upgray/system_excel_download.html', locals(), request)
    systems_list, p, systems, page_range, current_page, show_first, show_end = pages(system_find, request)
    if user_perm != 0:
        return my_render('upgray/system_list.html', locals(), request)
    else:
        return my_render('upgray/system_cu_list.html', locals(), request)
Example #20
0
def etcd_list(request):
    """
    etcd list view
    """
    header_title, path1, path2 = u'查看参数', u'参数管理', u'查看参数'
    username = request.user.username
    user_perm = request.session['role_id']
    etcd_group_all = EtcdGroup.objects.all()
    etcd_types = ETCD_TYPE
    etcd_envs = ENV_ENVS
    etcd_status = ETCD_STATUS
    group_name = request.GET.get('group', '')
    etcd_type = request.GET.get('etcd_type', '')
    etcd_env = request.GET.get('etcd_env', '')
    status = request.GET.get('status', '')
    keyword = request.GET.get('keyword', '')
    export = request.GET.get("export", False)
    group_id = request.GET.get("group_id", '')
    etcd_id_all = request.GET.getlist("id", '')

    if group_id:
        group = get_object(EtcdGroup, id=group_id)
        if group:
            etcd_find = Etcd.objects.filter(group=group)
    else:
        if user_perm != 0:
            etcd_find = Etcd.objects.all()
        else:
            etcd_id_all = []
            user = get_object(User, username=username)
            etcd_perm = get_group_user_perm(user) if user else {'etcd': ''}
            user_etcd_perm = etcd_perm['etcd'].keys()
            for etcd in user_etcd_perm:
                etcd_id_all.append(etcd.id)
            etcd_find = Etcd.objects.filter(pk__in=etcd_id_all)
            etcd_group_all = list(etcd_perm['etcd_group'])

    if etcd_env:
        etcd_find = etcd_find.filter(etcd_env__contains=etcd_env)

    if group_name:
        etcd_find = etcd_find.filter(group__name__contains=group_name)

    if etcd_type:
        etcd_find = etcd_find.filter(etcd_type__contains=etcd_type)

    if status:
        etcd_find = etcd_find.filter(status__contains=status)

    if keyword:
        etcd_find = etcd_find.filter(
            Q(name__contains=keyword) |
            Q(pre_value__contains=keyword) |
            Q(value__contains=keyword) |
            Q(comment__contains=keyword) |
            Q(group__name__contains=keyword))

    if export:
        if etcd_id_all:
            etcd_find = []
            for etcd_id in etcd_id_all:
                etcd = get_object(Etcd, id=etcd_id)
                if etcd:
                    etcd_find.append(etcd)
        s = write_excel(etcd_find)
        if s[0]:
            file_name = s[1]
        smg = u'excel文件已生成,请点击下载!'
        return my_render('upetcd/etcd_excel_download.html', locals(), request)
    etcds_list, p, etcds, page_range, current_page, show_first, show_end = pages(etcd_find, request)
    if user_perm != 0:
        return my_render('upetcd/etcd_list.html', locals(), request)
    else:
        return my_render('upetcd/etcd_cu_list.html', locals(), request)
Example #21
0
    def exec_cmd(self):
        """
        批量执行命令
        """
        while True:
            if not self.user_perm:
                self.user_perm = get_group_user_perm(self.user)

            roles = self.user_perm.get('role').keys()
            if len(roles) > 1:  # 授权角色数大于1
                color_print('[%-2s] %-15s' % ('ID', '系统用户'),  'info')
                role_check = dict(zip(range(len(roles)), roles))

                for i, r in role_check.items():
                    print '[%-2s] %-15s' % (i, r.name)
                print
                print "请输入运行命令所关联系统用户的ID, q退出"

                try:
                    role_id = raw_input("\033[1;32mRole>:\033[0m ").strip()
                    if role_id == 'q':
                        break
                except (IndexError, ValueError):
                    color_print('错误输入')
                else:
                    role = role_check[int(role_id)]
            elif len(roles) == 1:  # 授权角色数为1
                role = roles[0]
            assets = list(self.user_perm.get('role', {}).get(role).get('asset'))  # 获取该用户,角色授权主机
            print "授权包含该系统用户的所有主机"
            for asset in assets:
                print ' %s' % asset.hostname
            print
            print "请输入主机名或ansile支持的pattern, 多个主机:分隔, q退出"
            pattern = raw_input("\033[1;32mPattern>:\033[0m ").strip()
            if pattern == 'q':
                break
            else:
                res = gen_resource({'user': self.user, 'asset': assets, 'role': role}, perm=self.user_perm)
                runner = MyRunner(res)
                asset_name_str = ''
                print "匹配主机:"
                for inv in runner.inventory.get_hosts(pattern=pattern):
                    print ' %s' % inv.name
                    asset_name_str += '%s ' % inv.name
                print

                while True:
                    print "请输入执行的命令, 按q退出"
                    command = raw_input("\033[1;32mCmds>:\033[0m ").strip()
                    if command == 'q':
                        break
                    runner.run('shell', command, pattern=pattern)
                    ExecLog(host=asset_name_str, user=self.user.username, cmd=command, remote_ip=remote_ip,
                            result=runner.results).save()
                    for k, v in runner.results.items():
                        if k == 'ok':
                            for host, output in v.items():
                                color_print("%s => %s" % (host, 'Ok'), 'green')
                                print output
                                print
                        else:
                            for host, output in v.items():
                                color_print("%s => %s" % (host, k), 'red')
                                color_print(output, 'red')
                                print
                    print "~o~ Task finished ~o~"
                    print
Example #22
0
def asset_list(request):
    """
    asset list view
    """
    header_title, path1, path2 = u'查看资产', u'资产管理', u'查看资产'
    username = request.user.username
    user_perm = request.session['role_id']
    idc_all = IDC.objects.filter()
    asset_group_all = AssetGroup.objects.all()
    asset_types = ASSET_TYPE
    asset_status = ASSET_STATUS
    idc_name = request.GET.get('idc', '')
    group_name = request.GET.get('group', '')
    asset_type = request.GET.get('asset_type', '')
    status = request.GET.get('status', '')
    keyword = request.GET.get('keyword', '')
    export = request.GET.get("export", False)
    group_id = request.GET.get("group_id", '')
    idc_id = request.GET.get("idc_id", '')
    asset_id_all = request.GET.getlist("id", '')

    if group_id:
        group = get_object(AssetGroup, id=group_id)
        if group:
            asset_find = Asset.objects.filter(group=group)
    elif idc_id:
        idc = get_object(IDC, id=idc_id)
        if idc:
            asset_find = Asset.objects.filter(idc=idc)
    else:
        if user_perm != 0:
            asset_find = Asset.objects.all()
        else:
            asset_id_all = []
            user = get_object(User, username=username)
            asset_perm = get_group_user_perm(user) if user else {'asset': ''}
            user_asset_perm = asset_perm['asset'].keys()
            for asset in user_asset_perm:
                asset_id_all.append(asset.id)
            asset_find = Asset.objects.filter(pk__in=asset_id_all)
            asset_group_all = list(asset_perm['asset_group'])

    if idc_name:
        asset_find = asset_find.filter(idc__name__contains=idc_name)

    if group_name:
        asset_find = asset_find.filter(group__name__contains=group_name)

    if asset_type:
        asset_find = asset_find.filter(asset_type__contains=asset_type)

    if status:
        asset_find = asset_find.filter(status__contains=status)

    if keyword:
        asset_find = asset_find.filter(
            Q(hostname__contains=keyword) |
            Q(other_ip__contains=keyword) |
            Q(ip__contains=keyword) |
            Q(remote_ip__contains=keyword) |
            Q(comment__contains=keyword) |
            Q(username__contains=keyword) |
            Q(group__name__contains=keyword) |
            Q(cpu__contains=keyword) |
            Q(memory__contains=keyword) |
            Q(disk__contains=keyword) |
            Q(brand__contains=keyword) |
            Q(cabinet__contains=keyword) |
            Q(sn__contains=keyword) |
            Q(system_type__contains=keyword) |
            Q(system_version__contains=keyword))

    if export:
        if asset_id_all:
            asset_find = []
            for asset_id in asset_id_all:
                asset = get_object(Asset, id=asset_id)
                if asset:
                    asset_find.append(asset)
        s = write_excel(asset_find)
        if s[0]:
            file_name = s[1]
        smg = u'excel文件已生成,请点击下载!'
        return my_render('upasset/asset_excel_download.html', locals(), request)
    assets_list, p, assets, page_range, current_page, show_first, show_end = pages(asset_find, request)
    if user_perm != 0:
        return my_render('upasset/asset_list.html', locals(), request)
    else:
        return my_render('upasset/asset_cu_list.html', locals(), request)
Example #23
0
def system_list(request):
    """
    system list view
    """
    header_title, path1, path2 = u'查看系统', u'灰度管理', u'查看系统'
    username = request.user.username
    user_perm = request.session['role_id']
    system_rule_all = Rule.objects.all()
    system_status = RULE_STATUS
    status = request.GET.get('status', '')
    rule_name = request.GET.get('rule_name', '')
    old_version = request.GET.get('old_version', '')
    new_version = request.GET.get('new_version', '')
    keyword = request.GET.get('keyword', '')
    export = request.GET.get("export", False)
    rule_id = request.GET.get("rule_id", '')
    system_id_all = request.GET.getlist("id", '')

    if rule_id:
        rule_name = get_object(Rule, id=rule_id)
        if rule_name:
            system_find = System.objects.filter(rule_name=rule_name)
    else:
        if user_perm != 0:
            system_find = System.objects.all()
        else:
            system_id_all = []
            user = get_object(User, username=username)
            system_perm = get_group_user_perm(user) if user else {'system': ''}
            user_system_perm = system_perm['system'].keys()
            for system in user_system_perm:
                system_id_all.append(system.id)
            system_find = System.objects.filter(pk__in=system_id_all)
            system_rule_all = list(system_perm['system_rule'])

    if rule_name:
        system_find = system_find.filter(rule_name__name__contains=rule_name)

    if status:
        system_find = system_find.filter(status__contains=status)

    if keyword:
        system_find = system_find.filter(
            Q(name__contains=keyword) | Q(rule_name__name__contains=keyword)
            | Q(old_version__contains=keyword)
            | Q(new_version__contains=keyword) | Q(comment__contains=keyword))

    if export:
        if system_id_all:
            system_find = []
            for system_id in system_id_all:
                system = get_object(System, id=system_id)
                if system:
                    system_find.append(system)
        s = write_system_excel(system_find)
        if s[0]:
            file_name = s[1]
        smg = u'excel文件已生成,请点击下载!'
        return my_render('upgray/system_excel_download.html', locals(),
                         request)
    systems_list, p, systems, page_range, current_page, show_first, show_end = pages(
        system_find, request)
    if user_perm != 0:
        return my_render('upgray/system_list.html', locals(), request)
    else:
        return my_render('upgray/system_cu_list.html', locals(), request)
Example #24
0
def etcd_list(request):
    """
    etcd list view
    """
    header_title, path1, path2 = u'查看参数', u'参数管理', u'查看参数'
    username = request.user.username
    user_perm = request.session['role_id']
    etcd_group_all = EtcdGroup.objects.all()
    etcd_types = ETCD_TYPE
    etcd_envs = ENV_ENVS
    etcd_status = ETCD_STATUS
    group_name = request.GET.get('group', '')
    etcd_type = request.GET.get('etcd_type', '')
    etcd_env = request.GET.get('etcd_env', '')
    status = request.GET.get('status', '')
    keyword = request.GET.get('keyword', '')
    export = request.GET.get("export", False)
    group_id = request.GET.get("group_id", '')
    etcd_id_all = request.GET.getlist("id", '')

    if group_id:
        group = get_object(EtcdGroup, id=group_id)
        if group:
            etcd_find = Etcd.objects.filter(group=group)
    else:
        if user_perm != 0:
            etcd_find = Etcd.objects.all()
        else:
            etcd_id_all = []
            user = get_object(User, username=username)
            etcd_perm = get_group_user_perm(user) if user else {'etcd': ''}
            user_etcd_perm = etcd_perm['etcd'].keys()
            for etcd in user_etcd_perm:
                etcd_id_all.append(etcd.id)
            etcd_find = Etcd.objects.filter(pk__in=etcd_id_all)
            etcd_group_all = list(etcd_perm['etcd_group'])

    if etcd_env:
        etcd_find = etcd_find.filter(etcd_env__contains=etcd_env)

    if group_name:
        etcd_find = etcd_find.filter(group__name__contains=group_name)

    if etcd_type:
        etcd_find = etcd_find.filter(etcd_type__contains=etcd_type)

    if status:
        etcd_find = etcd_find.filter(status__contains=status)

    if keyword:
        etcd_find = etcd_find.filter(
            Q(name__contains=keyword) | Q(pre_value__contains=keyword)
            | Q(value__contains=keyword) | Q(comment__contains=keyword)
            | Q(group__name__contains=keyword))

    if export:
        if etcd_id_all:
            etcd_find = []
            for etcd_id in etcd_id_all:
                etcd = get_object(Etcd, id=etcd_id)
                if etcd:
                    etcd_find.append(etcd)
        s = write_excel(etcd_find)
        if s[0]:
            file_name = s[1]
        smg = u'excel文件已生成,请点击下载!'
        return my_render('upetcd/etcd_excel_download.html', locals(), request)
    etcds_list, p, etcds, page_range, current_page, show_first, show_end = pages(
        etcd_find, request)
    if user_perm != 0:
        return my_render('upetcd/etcd_list.html', locals(), request)
    else:
        return my_render('upetcd/etcd_cu_list.html', locals(), request)
Example #25
0
    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
Example #26
0
def map_list(request):
    """
    map list view
    """
    header_title, path1, path2 = u'查看映射', u'应用管理', u'查看映射'
    username = request.user.username
    user_perm = request.session['role_id']
    map_envs = ENV_ENVS
    map_env = request.GET.get('app_env', '')
    node_ip = request.GET.get('node_ip', '')
    node = request.GET.get('node', '')
    path = request.GET.get('path', '')
    contextroot = request.GET.get('contextroot', '')
    keyword = request.GET.get('keyword', '')
    export = request.GET.get("export", False)
    map_id_all = request.GET.getlist("id", '')

    if user_perm != 0:
        map_find = Map.objects.all()
    else:
        map_id_all = []
        user = get_object(User, username=username)
        map_perm = get_group_user_perm(user) if user else {'map': ''}
        user_map_perm = map_perm['map'].keys()
        for map in user_map_perm:
            map_id_all.append(map.id)
        map_find = Map.objects.filter(pk__in=map_id_all)
        map_group_all = list(map_perm['map_group'])

    if map_env:
        map_find = map_find.filter(map_env__contains=map_env)

    if node_ip:
        map_find = map_find.filter(node_ip__contains=node_ip)

    if node:
        map_find = map_find.filter(node__contains=node)

    if path:
        map_find = map_find.filter(path__contains=path)

    if contextroot:
        map_find = map_find.filter(contextroot__contains=contextroot)

    if keyword:
        map_find = map_find.filter(
            Q(name__contains=keyword) | Q(comment__contains=keyword)
            | Q(group__name__contains=keyword))

    if export:
        if map_id_all:
            map_find = []
            for map_id in map_id_all:
                map = get_object(Map, id=map_id)
                if map:
                    map_find.append(map)
        s = write_excel(map_find)
        if s[0]:
            file_name = s[1]
        smg = u'excel文件已生成,请点击下载!'
        return my_render('upapp/app_excel_download.html', locals(), request)
    maps_list, p, maps, page_range, current_page, show_first, show_end = pages(
        map_find, request)
    if user_perm != 0:
        return my_render('upapp/map_list.html', locals(), request)
    else:
        return my_render('upapp/map_cu_list.html', locals(), request)
Example #27
0
def dns_list(request):
    """
    dns list view
    """
    header_title, path1, path2 = u'查看域名', u'应用管理', u'查看域名'
    username = request.user.username
    user_perm = request.session['role_id']
    app_group_all = AppGroup.objects.all()
    app_types = APP_TYPE
    app_envs = ENV_ENVS
    app_status = APP_STATUS
    group_name = request.GET.get('group', '')
    app_type = request.GET.get('app_type', '')
    app_env = request.GET.get('app_env', '')
    status = request.GET.get('status', '')
    keyword = request.GET.get('keyword', '')
    export = request.GET.get("export", False)
    group_id = request.GET.get("group_id", '')
    app_id_all = request.GET.getlist("id", '')

    if group_id:
        group = get_object(AppGroup, id=group_id)
        if group:
            app_find = App.objects.filter(group=group)
    else:
        if user_perm != 0:
            app_find = App.objects.all()
        else:
            app_id_all = []
            user = get_object(User, username=username)
            app_perm = get_group_user_perm(user) if user else {'app': ''}
            user_app_perm = app_perm['app'].keys()
            for app in user_app_perm:
                app_id_all.append(app.id)
            app_find = App.objects.filter(pk__in=app_id_all)
            app_group_all = list(app_perm['app_group'])

    if app_env:
        app_find = app_find.filter(app_env__contains=app_env)

    if group_name:
        app_find = app_find.filter(group__name__contains=group_name)

    if app_type:
        app_find = app_find.filter(app_type__contains=app_type)

    if status:
        app_find = app_find.filter(status__contains=status)

    if keyword:
        app_find = app_find.filter(
            Q(name__contains=keyword) | Q(pre_value__contains=keyword)
            | Q(value__contains=keyword) | Q(comment__contains=keyword)
            | Q(group__name__contains=keyword))

    if export:
        if app_id_all:
            app_find = []
            for app_id in app_id_all:
                app = get_object(App, id=app_id)
                if app:
                    app_find.append(app)
        s = write_excel(app_find)
        if s[0]:
            file_name = s[1]
        smg = u'excel文件已生成,请点击下载!'
        return my_render('upapp/web_excel_download.html', locals(), request)
    apps_list, p, apps, page_range, current_page, show_first, show_end = pages(
        app_find, request)
    if user_perm != 0:
        return my_render('upapp/dns_list.html', locals(), request)
    else:
        return my_render('upapp/dns_cu_list.html', locals(), request)
Example #28
0
    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