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'))
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'))
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'))
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))
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
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'))
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))
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))
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))