Exemplo n.º 1
0
def salt_accept_key(request):
    """
    accept salt minions key
    """
    if request.META.has_key('HTTP_X_FORWARDED_FOR'):
        ip = request.META['HTTP_X_FORWARDED_FOR']
    else:
        ip = request.META['REMOTE_ADDR']
    user = request.user
    node_name = request.GET.get('node_name')
    what = request.GET.get('what')
    sapi = SaltAPI(url=settings.SALT_API['url'],
                   username=settings.SALT_API['user'],
                   password=settings.SALT_API['password'])
    if what == "accept":
        ret = sapi.accept_key(node_name)
        HostList.objects.create(hostname=node_name)
    if what == "reject":
        ret = sapi.reject_key(node_name)
    Message.objects.create(type='salt-key',
                           action=what,
                           action_ip=ip,
                           username=user,
                           content='saltstack accept %s key' % (node_name))
    return HttpResponseRedirect(reverse('key_list'))
Exemplo n.º 2
0
def salt_accept_key(request):
    """
    accept salt minions key
    """

    node_name = request.GET.get('node_name')
    sapi = SaltAPI(url=settings.SALT_API['url'],username=settings.SALT_API['user'],password=settings.SALT_API['password'])  
    ret = sapi.accept_key(node_name)
    Message.objects.create(type='salt', action='key', action_ip=node_name, content='saltstack accept node key')
    return HttpResponseRedirect(reverse('key_list')) 
Exemplo n.º 3
0
def salt_accept_key(request):
    """
    accept salt minions key
    """

    node_name = request.GET.get('node_name')
    sapi = SaltAPI(url=settings.SALT_API['url'], username=settings.SALT_API['user'],
                   password=settings.SALT_API['password'])
    ret = sapi.accept_key(node_name)
    Message.objects.create(type='salt', action='key', action_ip=node_name, content='saltstack accept node key')
    return HttpResponseRedirect(reverse('key_list'))
Exemplo n.º 4
0
def deploy_init_status(request):  
    """
    List all waiting for the host operating system is installed
    """
    user = request.user
    if request.META.has_key('HTTP_X_FORWARDED_FOR'):
        userip =  request.META['HTTP_X_FORWARDED_FOR']  
    else:
        userip = request.META['REMOTE_ADDR'] 
    #获取待初始化的信息,从数据库中查询是否存在,未存在的插入到列表
    all_system_list = SystemInstall.objects.filter(status='99')
    sapi = SaltAPI(url=settings.SALT_API['url'],username=settings.SALT_API['user'],password=settings.SALT_API['password'])
    minions = sapi.list_all_key()
    for tgt in all_system_list:
        if tgt.hostname not in minions[0]:
            sapi.accept_key(tgt.hostname)
            Message.objects.create(type='salt', action='initkey', action_ip=userip, username=user, content='%s accept key' % (tgt.hostname))
            if tgt.hostname in sapi.list_all_key()[0]:
                ret = HostList.objects.filter(hostname=tgt.hostname)
                if ret:
                    print "already in database"
                    #SystemInstall.objects.filter(hostname=h).delete()
                    Message.objects.create(type='sql', action='init', action_ip=tgt.hostname, username=user, content='已经存在')
                else:
                    HostList.objects.create(hostname=tgt.hostname)
                    #SystemInstall.objects.filter(hostname=h).delete()               #安装后,装机列表此IP信息删除,转让到安装记录里供审计
                    #Message.objects.create(type='sql', action='add', action_ip=tgt.hostname, username=user, content='添加主机')
                    Message.objects.create(type='asstes', action='create', action_ip=userip, username=user, content='add %s in hostlist' % (tgt.hostname))
    paginator = Paginator(all_system_list,15)
    try:
        page = int(request.GET.get('page','1'))
    except ValueError:
        page = 1

    try:
        all_system_list = paginator.page(page)
    except :
        all_system_list = paginator.page(paginator.num_pages)

    return render_to_response('deploy_init_status.html', {'all_system_list': all_system_list, 'page': page, 'paginator':paginator,'request':request},context_instance=RequestContext(request))
Exemplo n.º 5
0
def salt_key_manage(request, hostname=None):
    '''
    接受或拒绝salt主机,同时更新数据库
    '''
    if request.user.is_superuser:
        if request.method == 'GET':
            sapi = SaltAPI(url=settings.SALT_API['url'],
                           username=settings.SALT_API['user'],
                           password=settings.SALT_API['password'])
            hostname = request.GET.get('hostname')
            salthost = SaltHost.objects.get(hostname=hostname)
            action = ''
            if request.GET.has_key('add'):
                ret = sapi.accept_key(hostname)
                if ret:
                    salthost.status = True
                    salthost.save()
                    action = u'添加主机'
            if request.GET.has_key('delete'):
                ret = sapi.delete_key(hostname)
                if ret:
                    salthost.status = False
                    salthost.save()
                    action = u'删除主机'
            if request.GET.has_key('flush'):
                ret = sapi.salt_alive(hostname)
                try:
                    alive = ret[hostname]
                    alive = True
                except:
                    alive = False
                salthost.alive = alive
                salthost.save()
                action = u'刷新主机'
            if action:
                Message.objects.create(type=u'部署管理',
                                       user=request.user,
                                       action=action,
                                       action_ip=UserIP(request),
                                       content=u'%s %s' %
                                       (action, salthost.hostname))
        return redirect('key_list')
    else:
        raise Http404
Exemplo n.º 6
0
def salt_accept_key(request):
    """
    accept salt minions key
    """
    if request.META.has_key('HTTP_X_FORWARDED_FOR'):
        ip =  request.META['HTTP_X_FORWARDED_FOR']  
    else:
        ip = request.META['REMOTE_ADDR'] 
    user = request.user
    node_name = request.GET.get('node_name')
    what = request.GET.get('what')
    sapi = SaltAPI(url=settings.SALT_API['url'],username=settings.SALT_API['user'],password=settings.SALT_API['password'])  
    if what == "accept":
        ret = sapi.accept_key(node_name)
        HostList.objects.create(hostname=node_name)
    if what == "reject":
        ret = sapi.reject_key(node_name)    
    Message.objects.create(type='salt-key', action=what, action_ip=ip, username=user,content='saltstack accept %s key'%(node_name))
    return HttpResponseRedirect(reverse('key_list')) 
Exemplo n.º 7
0
def module_deploy(request):
    ret = []
    ret_err = '' 
    jid = []
    if request.META.has_key('HTTP_X_FORWARDED_FOR'):
        ip =  request.META['HTTP_X_FORWARDED_FOR']  
    else:
        ip = request.META['REMOTE_ADDR'] 
    user = request.user
    hostlists = HostList.objects.all()
    if request.method == 'POST':
        action = request.get_full_path().split('=')[1]
        tgt = request.POST.getlist('tgt')
        if len(tgt) == 0:
           ret_err = "目标主机不能为空"
        else:
            ret_err =""
            if action == 'deploy':                          
                arg = request.POST.getlist('module')           
                #Message.objects.create(type='salt', action='deploy', action_ip=tgt, content='saltstack %s module depoy' % (arg))
                sapi = SaltAPI(url=settings.SALT_API['url'],username=settings.SALT_API['user'],password=settings.SALT_API['password'])  
                for host in tgt:
                    if 'sysinit' in arg:
                        obj = sapi.async_deploy(host,arg[-1])    #先执行初始化模块,其他任意
                        jid.append(obj)
                        joblist.objects.create(fun='sysinit',tgt=host,status='2',jid=obj)
                        Message.objects.create(type='salt-module', action='deploy', action_ip=ip, username=user, content='%s sysinit_jid %s' % (host,obj))
                        arg.remove('sysinit')
                        if arg:
                            for i in arg:
                                obj = sapi.async_deploy(host,i)     
                                jid.append(obj)
                                joblist.objects.create (fun=i,tgt=host,status='2',jid=obj)
                                Message.objects.create(type='salt-module', action='deploy', action_ip=ip, username=user, content='%s %s_jid %s' % (host,i,obj))
                        
                    else:
                        if arg:
                            for i in arg:
                                obj = sapi.async_deploy(host,i)
                                jid.append(obj)
                                joblist.objects.create (fun=i,tgt=host,status='2',jid=obj)
                                Message.objects.create(type='salt-module', action='deploy', action_ip=ip, username=user, content='%s %s_jid %s' % (host,i,obj))
                    #return HttpResponseRedirect(reverse('job_list'))
                
            elif action == 'sysinit':
                #tgt = request.POST.getlist('tgt')
                arg = 'sysinit'
                #tgtcheck = HostList.objects.filter(hostname=tgt)
                sapi = SaltAPI(url=settings.SALT_API['url'],username=settings.SALT_API['user'],password=settings.SALT_API['password'])
                for h in tgt:
                    #Message.objects.create(type='salt-module', action='os_init', action_ip=ip, username=user, content='%s %s_jid %s' % (host,i,obj))
                    sapi.accept_key(h)
                    #sapi.remote_noarg_execution(h,'test.ping')
                    install_ret = SystemInstall.objects.filter(hostname=h)
                    for each_ret in install_ret:
                        sroom_id = each_ret.sroom_id
                    if sroom_id:
                        arg = "sysinit_"+str(sroom_id)                    
                    obj = sapi.async_deploy(h,arg) 
                    SystemInstall.objects.filter(hostname=h).delete()               #安装后,装机列表此IP信息删除,转让到安装记录里供审计
                    Message.objects.create(type='installed', action='os_init', action_ip=ip, username=user, content='%s acceptkey_%s_del_sysinstall' % (h,arg))
                    #Message.objects.create(type='salt', action=arg, action_ip=h, content='已经初始化')
                    #time.sleep(5)
                    #obj = sapi.async_deploy(h,arg)    #先执行初始化模块,其他任意
                     #jid.append(obj)
                    joblist.objects.create (fun=arg,tgt=h,status='2',jid=obj)
                return HttpResponseRedirect(reverse('job_list'))

    return render_to_response('salt_module_deploy.html',{'ret': ret,'hostlists': hostlists,'ret_err':ret_err,'jid':jid,'request':request},context_instance=RequestContext(request)) 
Exemplo n.º 8
0
def deploy_init_status(request):
    """
    List all waiting for the host operating system is installed
    """
    user = request.user
    if request.META.has_key('HTTP_X_FORWARDED_FOR'):
        userip = request.META['HTTP_X_FORWARDED_FOR']
    else:
        userip = request.META['REMOTE_ADDR']
    #获取待初始化的信息,从数据库中查询是否存在,未存在的插入到列表
    all_system_list = SystemInstall.objects.filter(status='99')
    sapi = SaltAPI(url=settings.SALT_API['url'],
                   username=settings.SALT_API['user'],
                   password=settings.SALT_API['password'])
    minions = sapi.list_all_key()
    for tgt in all_system_list:
        if tgt.hostname not in minions[0]:
            sapi.accept_key(tgt.hostname)
            Message.objects.create(type='salt',
                                   action='initkey',
                                   action_ip=userip,
                                   username=user,
                                   content='%s accept key' % (tgt.hostname))
            if tgt.hostname in sapi.list_all_key()[0]:
                ret = HostList.objects.filter(hostname=tgt.hostname)
                if ret:
                    print "already in database"
                    #SystemInstall.objects.filter(hostname=h).delete()
                    Message.objects.create(type='sql',
                                           action='init',
                                           action_ip=tgt.hostname,
                                           username=user,
                                           content='已经存在')
                else:
                    HostList.objects.create(hostname=tgt.hostname)
                    #SystemInstall.objects.filter(hostname=h).delete()               #安装后,装机列表此IP信息删除,转让到安装记录里供审计
                    #Message.objects.create(type='sql', action='add', action_ip=tgt.hostname, username=user, content='添加主机')
                    Message.objects.create(type='asstes',
                                           action='create',
                                           action_ip=userip,
                                           username=user,
                                           content='add %s in hostlist' %
                                           (tgt.hostname))
    paginator = Paginator(all_system_list, 15)
    try:
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1

    try:
        all_system_list = paginator.page(page)
    except:
        all_system_list = paginator.page(paginator.num_pages)

    return render_to_response('deploy_init_status.html', {
        'all_system_list': all_system_list,
        'page': page,
        'paginator': paginator,
        'request': request
    },
                              context_instance=RequestContext(request))
Exemplo n.º 9
0
def module_deploy(request):
    ret = []
    ret_err = ''
    jid = []
    if request.META.has_key('HTTP_X_FORWARDED_FOR'):
        ip = request.META['HTTP_X_FORWARDED_FOR']
    else:
        ip = request.META['REMOTE_ADDR']
    user = request.user
    hostlists = HostList.objects.all()
    if request.method == 'POST':
        action = request.get_full_path().split('=')[1]
        tgt = request.POST.getlist('tgt')
        if len(tgt) == 0:
            ret_err = "目标主机不能为空"
        else:
            ret_err = ""
            if action == 'deploy':
                arg = request.POST.getlist('module')
                #Message.objects.create(type='salt', action='deploy', action_ip=tgt, content='saltstack %s module depoy' % (arg))
                sapi = SaltAPI(url=settings.SALT_API['url'],
                               username=settings.SALT_API['user'],
                               password=settings.SALT_API['password'])
                for host in tgt:
                    if 'sysinit' in arg:
                        obj = sapi.async_deploy(host, arg[-1])  #先执行初始化模块,其他任意
                        jid.append(obj)
                        joblist.objects.create(fun='sysinit',
                                               tgt=host,
                                               status='2',
                                               jid=obj)
                        Message.objects.create(type='salt-module',
                                               action='deploy',
                                               action_ip=ip,
                                               username=user,
                                               content='%s sysinit_jid %s' %
                                               (host, obj))
                        arg.remove('sysinit')
                        if arg:
                            for i in arg:
                                obj = sapi.async_deploy(host, i)
                                jid.append(obj)
                                joblist.objects.create(fun=i,
                                                       tgt=host,
                                                       status='2',
                                                       jid=obj)
                                Message.objects.create(type='salt-module',
                                                       action='deploy',
                                                       action_ip=ip,
                                                       username=user,
                                                       content='%s %s_jid %s' %
                                                       (host, i, obj))

                    else:
                        if arg:
                            for i in arg:
                                obj = sapi.async_deploy(host, i)
                                jid.append(obj)
                                joblist.objects.create(fun=i,
                                                       tgt=host,
                                                       status='2',
                                                       jid=obj)
                                Message.objects.create(type='salt-module',
                                                       action='deploy',
                                                       action_ip=ip,
                                                       username=user,
                                                       content='%s %s_jid %s' %
                                                       (host, i, obj))
                    #return HttpResponseRedirect(reverse('job_list'))

            elif action == 'sysinit':
                #tgt = request.POST.getlist('tgt')
                arg = 'sysinit'
                #tgtcheck = HostList.objects.filter(hostname=tgt)
                sapi = SaltAPI(url=settings.SALT_API['url'],
                               username=settings.SALT_API['user'],
                               password=settings.SALT_API['password'])
                for h in tgt:
                    #Message.objects.create(type='salt-module', action='os_init', action_ip=ip, username=user, content='%s %s_jid %s' % (host,i,obj))
                    sapi.accept_key(h)
                    #sapi.remote_noarg_execution(h,'test.ping')
                    install_ret = SystemInstall.objects.filter(hostname=h)
                    for each_ret in install_ret:
                        sroom_id = each_ret.sroom_id
                    if sroom_id:
                        arg = "sysinit_" + str(sroom_id)
                    obj = sapi.async_deploy(h, arg)
                    SystemInstall.objects.filter(
                        hostname=h).delete()  #安装后,装机列表此IP信息删除,转让到安装记录里供审计
                    Message.objects.create(
                        type='installed',
                        action='os_init',
                        action_ip=ip,
                        username=user,
                        content='%s acceptkey_%s_del_sysinstall' % (h, arg))
                    #Message.objects.create(type='salt', action=arg, action_ip=h, content='已经初始化')
                    #time.sleep(5)
                    #obj = sapi.async_deploy(h,arg)    #先执行初始化模块,其他任意
                    #jid.append(obj)
                    joblist.objects.create(fun=arg, tgt=h, status='2', jid=obj)
                return HttpResponseRedirect(reverse('job_list'))

    return render_to_response('salt_module_deploy.html', {
        'ret': ret,
        'hostlists': hostlists,
        'ret_err': ret_err,
        'jid': jid,
        'request': request
    },
                              context_instance=RequestContext(request))