コード例 #1
0
ファイル: views.py プロジェクト: zouliuyun/CMDB_salt
def command_group_result(request):
    if request.method == 'GET':
	ret_api = saltstack()
        g_name = request.GET.get('g_name')
        command = request.GET.get('command')
        selectIps = []
	list_coun = []
        project_success = []
	project_fail = []
        GroupList = Group.objects.all()
        for groupname in GroupList:
            if groupname.name in g_name:
                print "slected group:",groupname.name
                for selected_ip in HostList.objects.filter(group__name = groupname.name): 
                    host = HostList.objects.filter(ip=selected_ip.ip) 		
                    for host in host:
                        key_id = host.hostname 
                        sapi = SaltAPI(url=ret_api["url"],username=ret_api["user"],password=ret_api["passwd"])
                        ret = sapi.remote_execution(key_id,'cmd.run',command)
		        list_coun.append(host)
		num = len(list_coun)	
	        wirte_track_mark(str(num))
		all_result = salt_return.objects.all()[0:num]
		for projects in all_result:
		    project=projects.success 
		    if project == '1':
			project_success.append(project) 
		    else:
			project_fail.append(project)
		success_num = len(project_success)
		fail_num = len(project_fail)
		result = {'success':success_num,'fail':fail_num}
                return HttpResponse(json.dumps(result))
コード例 #2
0
def command_result(request):
    if request.method == 'GET':
        ret_api = saltstack()
        key_id = request.GET.get('hostname')
        command = request.GET.get('command')
        print key_id, command
        #        host = HostList.objects.filter(ip=ip)
        sapi = SaltAPI(url=ret_api["url"],
                       username=ret_api["user"],
                       password=ret_api["passwd"])
        try:
            ret = sapi.remote_execution(key_id, 'cmd.run', command)
            for i in range(len(ret)):
                ret = ret[i][key_id]
                r_data = {'host': key_id, 'ret': ret}
            data = json.dumps(r_data)
            real_ip = get_clinet_ip(request)
            Cmd_Record = cmd_record(hostname=key_id,
                                    name=request.user,
                                    ip=real_ip,
                                    cmd=command)
            Cmd_Record.save()
            return HttpResponse(data)
        except:
            print '123'
            return HttpResponse('ok')
コード例 #3
0
def command_group_result(request):
    if request.method == 'GET':
        ret_api = saltstack()
        g_name = request.GET.get('g_name')
        command = request.GET.get('command')
        selectIps = []
        list_coun = []
        project_success = []
        project_fail = []
        GroupList = Group.objects.all()
        #        salt_return.objects.filter().delete()
        for groupname in GroupList:
            if groupname.name in g_name:
                print "slected group:", groupname.name
                for selected_ip in HostList.objects.filter(
                        group__name=groupname.name):
                    host = HostList.objects.filter(ip=selected_ip.ip)
                    for host in host:
                        key_id = host.hostname
                        sapi = SaltAPI(url=ret_api["url"],
                                       username=ret_api["user"],
                                       password=ret_api["passwd"])
                        try:
                            ret = sapi.remote_execution(
                                key_id, 'cmd.run', command)
                            list_coun.append(host)
                            ret = ret[0][key_id]
                            b = salt_return(jid=command,
                                            host=key_id,
                                            success='1',
                                            result=ret)
                            b.save()
                        except:
                            print "Connect %s failed" % key_id
                            b = salt_return(jid=command,
                                            host=key_id,
                                            success='0',
                                            result='failed')
                            b.save()
                num = len(list_coun)
                wirte_track_mark(str(num))
                all_result = salt_return.objects.all()[0:num]
                for projects in all_result:
                    project = projects.success
                    if project == '1':
                        project_success.append(project)
                    else:
                        project_fail.append(project)
                success_num = len(project_success)
                fail_num = len(project_fail)
                result = {'success': success_num, 'fail': fail_num}
        return HttpResponse(json.dumps(result))
コード例 #4
0
ファイル: views.py プロジェクト: 11m09d/lmanager
def command_result(request):
    if request.method == 'GET':
        ret_api = saltstack()
        ip = request.GET.get('ip')
        command = request.GET.get('command')
        host = HostList.objects.filter(ip=ip)
        for host in host:
            key_id = host.hostname
            sapi = SaltAPI(url=ret_api["url"],username=ret_api["user"],password=ret_api["passwd"])
            ret = sapi.remote_execution(key_id,'cmd.run',command) 
	    all_result = salt_return.objects.all().order_by("-id")[0:1]
	    for ret in all_result:
		key_id = ret.host
		ret = ret.result
		r_data = {'host':key_id,'ret':ret}
                data = json.dumps(r_data)
#                print data
                return HttpResponse(data)
コード例 #5
0
def command_result(request):
    if request.method == 'GET':
        ret_api = saltstack()
        ip = request.GET.get('ip')
        command = request.GET.get('command')
        host = HostList.objects.filter(ip=ip)
        for host in host:
            key_id = host.hostname
            sapi = SaltAPI(url=ret_api["url"],
                           username=ret_api["user"],
                           password=ret_api["passwd"])
            ret = sapi.remote_execution(key_id, 'cmd.run', command)
            all_result = salt_return.objects.all().order_by("-id")[0:1]
            for ret in all_result:
                key_id = ret.host
                ret = ret.result
                r_data = {'host': key_id, 'ret': ret}
                data = json.dumps(r_data)
                #                print data
                return HttpResponse(data)
コード例 #6
0
def approval_accept(request):
    requestid_list = request.GET.get("requestid_list")
    request_status = request.GET.get("request_status")
    request_user = request.GET.get("request_user")
    request_nick_name_list = []
    requestid_list = requestid_list.split(",")
    for key in range(0, len(requestid_list) - 1):
        host_request = HostRequest.objects.filter(id=requestid_list[key])
        request_nick_name_list.append(host_request[0].nick_name)
        if request_status == "1":
            hostname = host_request[0].hostname
            create_time = host_request[0].create_time

            c.execute("select auth_user.* from auth_user where username=%s",
                      [str(request_user)])
            filteruser = c.fetchone()
            if filteruser is not None:
                user = get_user_dict(filteruser)
                email = user["email"]
                ### 获取 user
                user = ""
                user_part = email.split('@')[0]
                for user_p in user_part.split('.'):
                    user = user + user_p

            #### user ssh-keygen
            user_cmd = "ssh-keygen -t dsa -P '' -f /home/" + user + "/.ssh/id_rsa"
            #### chmod u+w /etc/sudoers
            chw_cmd = "chmod u+w /etc/sudoers"
            #### 添加 sudo 权限
            sed_cmd = "sed -i '$a " + user + "    ALL=(ALL)       NOPASSWD:ALL ' /etc/sudoers"
            #### chmod u-w /etc/sudoers
            chw_cut_cmd = "chmod u-w /etc/sudoers"

            cf = ConfigParser.ConfigParser()
            cf.read("/web/CMDB/app/backend/config.ini")

            salt_url = cf.get("saltstack", "url")
            salt_user = cf.get("saltstack", "user")
            salt_pass = cf.get("saltstack", "pass")

            sapi = SaltAPI(url=salt_url,
                           username=salt_user,
                           password=salt_pass)
            #### 创建用户
            print sapi.remote_execution(hostname, 'user.add', {'arg1': user})
            aDay = timedelta(days=30)
            time_now = create_time + aDay
            print sapi.remote_execution(
                hostname, 'cmd.run',
                {'arg1': "usermod -e " + str(time_now) + " " + user})
            #### 生成 ssh-key
            print sapi.remote_execution(hostname, 'cmd.run', {
                'arg1': user_cmd,
                'arg2': 'runas=' + user
            })
            #### cp.get_file authrized_keys
            print sapi.remote_execution(
                hostname, 'cp.get_file', {
                    'arg1': "salt://" + user + "_cmdb_login_id_rsa_pub",
                    'arg2': "/home/" + user + "/.ssh/authorized_keys"
                })

            #### cp.get_file id_rsa
            print sapi.remote_execution(
                hostname, 'cp.get_file', {
                    'arg1': "salt://" + user + "_cmdb_login_id_rsa",
                    'arg2': "/home/" + user + "/.ssh/id_rsa"
                })

            #### cp.get_file id_rsa.pub
            print sapi.remote_execution(
                hostname, 'cp.get_file', {
                    'arg1': "salt://" + user + "_cmdb_login_id_rsa_pub",
                    'arg2': "/home/" + user + "/.ssh/id_rsa.pub"
                })

            #### chowd user:user .ssh
            print sapi.remote_execution(
                hostname, 'cmd.run', {
                    'arg1':
                    "chown -R " + user + ":" + user + " /home/" + user +
                    "/.ssh"
                })

            ### 修改 sudoers 添加 username sudo 权限
            print sapi.remote_execution(hostname, 'cmd.run', {
                'arg1': chw_cmd,
                'arg2': 'runas=root'
            })

            print sapi.remote_execution(hostname, 'cmd.run', {
                'arg1': sed_cmd,
                'arg2': 'runas=root'
            })

            print sapi.remote_execution(hostname, 'cmd.run', {
                'arg1': chw_cut_cmd,
                'arg2': 'runas=root'
            })
            # lease = Lease()
            # lease.hostname = hostname
            # lease.username = request_user
            # lease.save()
        host_request.update(status=request_status)

    #### send mail
    content = "您所申请的主机:" + str(request_nick_name_list) + "已经通过审核,可以通过跳板机登陆"
    send_mail("admin", request_user, "主机申请", content)

    return HttpResponseRedirect("/approval/get_approval_accept_page/")
コード例 #7
0
sys.setdefaultencoding('utf8')

# Create your views here.

config_list = dbconfig()
db = mysql.connect(host=config_list["host"],
                   user=config_list["user"],
                   passwd=config_list["pass"],
                   db=config_list["name"],
                   charset="utf8")
db.autocommit(True)
c = db.cursor()

config_list_sal = saltconfig()
sapi = SaltAPI(url=config_list_sal["salt_url"],
               username=config_list_sal["salt_user"],
               password=config_list_sal["salt_pass"])


#### approval ####
@login_required
def change_idc(request):
    idc_name = request.POST.get("idc_name")
    group_list = Group.objects.filter(idc_name=idc_name)
    group_list_dict = {}
    inum = 0
    for group in group_list:
        group_list_dict[str(inum)] = group.__unicode__()
        inum += 1

    group_name = ""