Ejemplo n.º 1
0
def salt_pillar_del(request):
    try:
        _id = request.POST.get("id")
        orm = saltstack_pillar.objects.get(id=_id)
        for i in orm.center_server.split(","):
            master_dir = commands.getoutput(
                '''ssh %s "grep -A2 '^pillar_roots' /etc/salt/master |grep 'base:' -A1|grep '-'|cut -d'-' -f2"'''
                % CENTER_SERVER[i][0]
            )
            os.system('''ssh %s "rm -r %s/%s\.sls"''' % (CENTER_SERVER[i][0], master_dir, orm.name))
        orm.delete()
        for i in CENTER_SERVER.keys():
            master_dir = commands.getoutput(
                '''ssh %s "grep -A2 '^pillar_roots' /etc/salt/master |grep 'base:' -A1|grep '-'|cut -d'-' -f2"'''
                % CENTER_SERVER[i][0]
            )
            content_top = """base:\n  '*':\n"""
            for j in saltstack_pillar.objects.all():
                if i in j.center_server.split(","):
                    content_top += """    - %s\n""" % j.name
            content_top += "EOF"
            if len(re.findall(r"\n", content_top)) < 3:
                content_top = ""
            os.system('''ssh %s "cat > %s/top.sls << EOF\n%s"''' % (CENTER_SERVER[i][0], master_dir, content_top))
        return HttpResponse(json.dumps({"code": 0, "msg": u"删除成功"}), content_type="application/json")
    except Exception, e:
        logger.error(e)
        return HttpResponse(json.dumps({"code": 1, "msg": u"删除失败"}), content_type="application/json")
Ejemplo n.º 2
0
def search_server_list(request):
    try:
        for i in CENTER_SERVER.keys():
            recv_data = client_send_data("{'salt':1,'act':'test.ping','hosts':'*','argv':[]}",CENTER_SERVER[i][0],CENTER_SERVER[i][1])
            dict_data = eval(recv_data)
            for k,v in dict_data.items():
                uniq_test = server_list.objects.filter(server_name=k)
                if v == True and not uniq_test:
                    ip = client_send_data("{'salt':1,'act':'grains.item','hosts':'%s','argv':['ipv4']}" % k,CENTER_SERVER[i][0],CENTER_SERVER[i][1])
                    ip = eval(ip)
                    ip[k]['ipv4'].pop(0)
                    os = client_send_data("{'salt':1,'act':'grains.item','hosts':'%s','argv':['os']}" % k,CENTER_SERVER[i][0],CENTER_SERVER[i][1])
                    os = eval(os)
                    belong_to = i
                    server_list.objects.create(server_name=k,ip=ip[k]['ipv4'],os=os[k]['os'],belong_to=belong_to,status=1)
                elif uniq_test:
                    orm_server = server_list.objects.get(server_name=k)
                    orm_server.status = 1
                    orm_server.save()
            for i in server_list.objects.all():
                if not i.server_name in dict_data.keys():
                    i.status = 0
                    i.save()
        return HttpResponse(simplejson.dumps({'code':0,'msg':u'获取完成'}),content_type="application/json")
    except Exception,e:
        logger.error(e)
        return HttpResponse(simplejson.dumps({'code':1,'msg':u'获取失败'}),content_type="application/json")
Ejemplo n.º 3
0
def rsync_dest_dropdown(request):
    result = {}
    count = 0
    result['rsync_dest_dropdown_list'] = []
    for k in CENTER_SERVER.keys():
        result['rsync_dest_dropdown_list'].append({'text':k, 'id': count})
        count += 1
    return HttpResponse(json.dumps(result),content_type="application/json")
Ejemplo n.º 4
0
def salt_state_dropdown(request):
    center_server = request.POST.get("center_server")
    result = {}
    result["list"] = []
    result["edit"] = []
    if center_server:
        for i in center_server.split(","):
            result["edit"].append({"text": i, "id": CENTER_SERVER[i][3]})
    for i in CENTER_SERVER.keys():
        result["list"].append({"text": i, "id": CENTER_SERVER[i][3]})
    return HttpResponse(json.dumps(result), content_type="application/json")
Ejemplo n.º 5
0
def salt_state_dropdown(request):
    center_server = request.POST.get('center_server')
    result = {}
    result['list'] = []
    result['edit'] = []
    if center_server:
        for i in center_server.split(','):
            result['edit'].append({'text':i,'id':CENTER_SERVER[i][3]})
    for i in CENTER_SERVER.keys():
        result['list'].append({'text':i,'id':CENTER_SERVER[i][3]})
    return HttpResponse(json.dumps(result),content_type="application/json")
Ejemplo n.º 6
0
def search_server_list(request):
    for k,v in CENTER_SERVER.items():
        if not check_center_server_up(v[0],v[1]):
            return HttpResponse(json.dumps({'code':1,'msg':u'无法连接到%s' % k}),content_type="application/json")



    def gevent_run_all(CENTER_SERVER,client_send_data,server_list,p):
        for i in CENTER_SERVER.keys():
            recv_data = client_send_data(json.dumps({'salt':1,'act':'test.ping','hosts':'*','argv':[]}),CENTER_SERVER[i][0],CENTER_SERVER[i][1])
            dict_data = literal_eval(recv_data)
            for k,v in dict_data.items():
                p.spawn(gevent_run,client_send_data,server_list,i,k,v,dict_data)

    def gevent_run(client_send_data,server_list,i,k,v,dict_data):
        uniq_test = server_list.objects.filter(server_name=k)
        if v == True and not uniq_test:
            inner_ip = client_send_data(json.dumps({'salt':1,'act':'grains.item','hosts':k,'argv':['ipv4']}),CENTER_SERVER[i][0],CENTER_SERVER[i][1])
            inner_ip = literal_eval(inner_ip)
            inner_ip[k]['ipv4'].remove('127.0.0.1')
            # cmd = ["curl http://www.whereismyip.com/|grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'"]
            cmd = ['curl http://members.3322.org/dyndns/getip']
            external_ip = client_send_data(json.dumps({'salt':1,'act':'cmd.run','hosts':k,'argv':cmd}),CENTER_SERVER[i][0],CENTER_SERVER[i][1])
            external_ip = literal_eval(external_ip)
            external_ip = external_ip[k].split('\n')[-1]
            os = client_send_data(json.dumps({'salt':1,'act':'grains.item','hosts':k,'argv':['os']}),CENTER_SERVER[i][0],CENTER_SERVER[i][1])
            os = literal_eval(os)
            belong_to = i
            server_list.objects.create(server_name=k,inner_ip=','.join(inner_ip[k]['ipv4']),external_ip=external_ip,os=os[k]['os'],belong_to=belong_to,status=1)
        elif uniq_test:
            orm_server = server_list.objects.get(server_name=k)
            orm_server.status = 1
            orm_server.save()
        for i in server_list.objects.filter(belong_to=i):
            if not i.server_name in dict_data.keys():
                i.status = 0
                i.save()
    p = Pool()
    p.spawn(gevent_run_all,CENTER_SERVER,client_send_data,server_list,p)
    p.join()
    return HttpResponse(json.dumps({'code':0,'msg':u'获取完成'}),content_type="application/json")
Ejemplo n.º 7
0
def salt_top_dropdown(request):
    _id = request.POST.get('id')
    result = {}
    result['target'] = {}
    result['target']['list'] = []
    result['target']['edit'] = []
    result['state'] = {}
    result['state']['list'] = []
    result['state']['edit'] = []
    result['center_server'] = []
    count = 0
    if _id:
        orm = saltstack_top.objects.get(id=_id)
        for i in orm.target.split(','):
            orm_target = server_list.objects.get(server_name=i)
            result['target']['edit'].append({'text':i,'id':orm_target.id})
        for i in orm.state.split(','):
            orm_state = saltstack_state.objects.get(name=i)
            result['state']['edit'].append({'text':i,'id':orm_state.id})

    orm = perm.objects.get(username=request.user.username)
    servers = []
    for i in orm.server_groups.split(','):
        orm_server = server_group_list.objects.get(server_group_name=i)
        servers += orm_server.members_server.split(',')

    for i in CENTER_SERVER.keys():
        result['center_server'].append({'text':i,'id':count})
        count += 1
    for i in server_list.objects.all():
        if i.server_name in servers:
            result['target']['list'].append({'text':i.server_name,'id':i.id})
    for i in saltstack_state.objects.all():
        result['state']['list'].append({'text':i.name,'id':i.id})




    return HttpResponse(json.dumps(result),content_type="application/json")
Ejemplo n.º 8
0
def salt_top_dropdown(request):
    _id = request.POST.get("id")
    result = {}
    result["target"] = {}
    result["target"]["list"] = []
    result["target"]["edit"] = []
    result["state"] = {}
    result["state"]["list"] = []
    result["state"]["edit"] = []
    result["center_server"] = []
    count = 0
    if _id:
        orm = saltstack_top.objects.get(id=_id)
        for i in orm.target.split(","):
            orm_target = server_list.objects.get(server_name=i)
            result["target"]["edit"].append({"text": i, "id": orm_target.id})
        for i in orm.state.split(","):
            orm_state = saltstack_state.objects.get(name=i)
            result["state"]["edit"].append({"text": i, "id": orm_state.id})

    orm = perm.objects.get(username=request.user.username)
    servers = []
    for i in orm.server_groups.split(","):
        orm_server = server_group_list.objects.get(server_group_name=i)
        servers += orm_server.members_server.split(",")

    for i in CENTER_SERVER.keys():
        result["center_server"].append({"text": i, "id": count})
        count += 1
    for i in server_list.objects.all():
        if i.server_name in servers:
            result["target"]["list"].append({"text": i.server_name, "id": i.id})
    for i in saltstack_state.objects.all():
        result["state"]["list"].append({"text": i.name, "id": i.id})

    return HttpResponse(json.dumps(result), content_type="application/json")
Ejemplo n.º 9
0
 def gevent_run_all(CENTER_SERVER,client_send_data,server_list,p):
     for i in CENTER_SERVER.keys():
         recv_data = client_send_data(json.dumps({'salt':1,'act':'test.ping','hosts':'*','argv':[]}),CENTER_SERVER[i][0],CENTER_SERVER[i][1])
         dict_data = literal_eval(recv_data)
         for k,v in dict_data.items():
             p.spawn(gevent_run,client_send_data,server_list,i,k,v,dict_data)
Ejemplo n.º 10
0
def upload_upload(request):
    flag = request.POST.get('flag')
    file_name = request.POST.get('file_name')
    if int(flag) == 0:
        #开始传输
        # orm = upload_files.objects.get(file_name=file_name)
        rsync_dest = request.POST.get('rsync_dest')
        rsync_state = request.POST.get('rsync_state')
        for k,v in CENTER_SERVER.items():
            if not check_center_server_up(v[0],v[1]):
                return HttpResponse(json.dumps({'code':1,'msg':u'无法连接到%s' % k}),content_type="application/json")
        if rsync_dest:
            rsync_ip = CENTER_SERVER[rsync_dest][0]
            if rsync_state:
                master_dir = commands.getoutput('''ssh %s "grep -A2 '^file_roots' /etc/salt/master |grep 'base:' -A1|grep '-'|cut -d'-' -f2"''' % CENTER_SERVER[rsync_dest][0])
                rsync_dir = os.path.join(master_dir,rsync_state)
            else:
                rsync_dir = CENTER_SERVER[rsync_dest][2]
            cmdLine = []
            cmdLine.append('rsync')
            cmdLine.append('--progress')
            cmdLine.append(BASE_DIR + '/uploads/%s' % file_name)
            cmdLine.append('%s:%s' % (rsync_ip,rsync_dir))
            tmpFile = BASE_DIR + "/tmp/upload.tmp"  #临时生成一个文件
            fpWrite = open(tmpFile,'w')
            with open(BASE_DIR + '/tmp/rsync_status_file.tmp','w') as f:
                pass
            process = subprocess.Popen(cmdLine,stdout = fpWrite,stderr = subprocess.PIPE);
            while True:
                fpRead = open(tmpFile,'r')  #这里又重新创建了一个文件读取对象,不知为何,用上面的就是读不出来,改w+也不>行
                lines = fpRead.readlines()
                for line in lines:
                    a = re.search(r'\d+%',line)
                    if a:
                        with open(BASE_DIR + '/tmp/percent.tmp','a') as f:
                                f.write(a.group())
                if  process.poll() == 0:
                    break;
                elif process.poll() == None:
                    pass
                else:
                    break
                fpWrite.truncate()  #此处清空文件,等待记录下一次输出的进度
                fpRead.close()
                time.sleep(0.7)
            fpWrite.close()
            os.remove(BASE_DIR + '/tmp/rsync_status_file.tmp')
        #    error = process.stderr.read()
        #    if not error == None:
        #        print 'error info:%s' % error
            os.remove(tmpFile) #删除临时文件
            os.remove(BASE_DIR + '/tmp/percent.tmp')
            return HttpResponse(json.dumps({'code':0,'msg':u'文件传输成功'}),content_type="application/json")
    elif int(flag) == 1:
        #获取百分比
        if os.path.exists(BASE_DIR + '/tmp/rsync_status_file.tmp'):
            process = 1
        else:
            process = 0
        if os.path.exists(BASE_DIR + '/tmp/percent.tmp'):
            with open(BASE_DIR + '/tmp/percent.tmp') as f:
                data = f.readline()
                if data:
                    last_percent = re.search(r'\d{1,2}%$',data)
                    if last_percent:
                        return HttpResponse(json.dumps({'code':0,'percent':last_percent.group(),'process':process}),content_type="application/json")
        else:
            return HttpResponse(json.dumps({'code':0,'percent':0,'process':process}),content_type="application/json")

    else:
        pass
        return HttpResponse(json.dumps({'code':1,'msg':u'文件传输失败'}),content_type="application/json")