上次和大家聊到salt-api,今天把平台完善一下,支持正则*,+。
仍然是用上次的模块,增加了HOST,GROUP的models,修改了views,增加了正则的处理模块。
直接上代码:

正则处理模块 utils.py:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from models import Host
import re

def get_all_minion(tgt):
    target_list = tgt.split(',')
    minion_list = []
    all_minion_ip_list = []
    if '*' in target_list:
        all_host = Host.objects.all().values()
        for i in all_host:
            minion_list.append(i["ip"])
        minion_list_set = set(minion_list)
    else:
        all_host = Host.objects.all()
        for minion in all_host:
            all_minion_ip_list.append(minion.ip)
        for target in target_list:
            if '*' or '+' in target:
                target_replace_point = target.replace('.','\.')
                if '*':
                    target_replace_star = target_replace_point.replace('*','.*')
                if '+':
                    target_replace_star = target_replace_point.replace('+','.+')
                target_string = r'%s' % target_replace_star
                pattern = re.compile(target_string)
                for minion_ip in all_minion_ip_list:
                    match_ip = pattern.match(minion_ip)
                    if match_ip:
                        match_minion_ip_data = Host.objects.get(ip=minion_ip)
                    minion_list.append(match_minion_ip_data.ip)
            else:
                target_replace_none = target.replace('.','')
                if target_replace_none.isdigit():
                    try:
                        match_minion_ip_data = Host.objects.get(ip=target)
                        minion_list.append(match_minion_ip_data.ip)
                    except Host.DoesNotExist:
                        print 'Without this IP on host list. IP:{0}'.format(target)
                else:
                    try:
                        mtach_minion_id_data = Host.objects.get(ip=target)
                        minion_list.append(target)
                    except Host.DoesNotExist:
                        print("MinionID don't exsit. Minion id:{0}".format(target))

    minion_list_set = set(minion_list)
    return minion_list_set

models.py增加了主机组和主机:

class Group(models.Model):
    name = models.CharField(u"组",max_length=100)
    class Meta:
        verbose_name = u"组"
        verbose_name_plural = verbose_name
    def __unicode__(self):
        return u'%s' % (self.name)

class Host(models.Model):
    ip = models.CharField(u"ip地址",max_length=15)
    group = models.ForeignKey(Group)
    class Meta:
        verbose_name = u"服务器"
        verbose_name_plural = verbose_name
    def __unicode__(self):
        return u'%s' % (self.ip)

views.py:

from django.shortcuts import render,HttpResponse,HttpResponseRedirect,render_to_response
from models import *
from saltapi import salt_api
from django.http import JsonResponse
import json
import xadmin
from util import get_all_minion
from forms import *

def index(request):
    result_minion = []
    Register_form = accect_cmdForm()
    all_group = Group.objects.all()
    accect = []
    context = accect_cmd.objects.values()
    for i in context:
        accect.append(i["command"])
    if request.method == "POST":
        key = request.POST.get('key')
        if not key:
            data = {key: "请输入主机"}
            return JsonResponse(data,safe=False)
        cmd = request.POST.get('cmd')
        if not cmd:
            data = {key: "请输入命令"}
            return JsonResponse(data,safe=False)
        all_host_set = get_all_minion(key)
        if len(all_host_set) > 0 and cmd.split()[0] in accect:
            tgt_list_to_str = ','.join(list(all_host_set))
            spi = salt_api.SaltAPI('https://ip:8000','username','password')
            result = spi.masterToMinionContent(tgt_list_to_str,'cmd.run',cmd)
            for i in result:
                result_minion.append(i)
            result_not_minion = all_host_set - set(result_minion)
            for x in result_not_minion:
                result[x]="该主机未返回结果!!!"
            return JsonResponse(result,safe=False)
        if len(all_host_set) > 0 and not cmd.split()[0] in accect:
            data = {key:"请检查命令是否正确或命令超权限,请联系管理员!"}
            return JsonResponse(data,safe=False)
        else:
            data = {key:"数据库未查到该主机"}
            return JsonResponse(data,safe=False)
    else:
        return render(request,'index.html',{'Register_form': Register_form,'all_group':all_group})

效果

salt平台完善正则匹配的更多相关文章

  1. Html5 滚动穿透的方法

    这篇文章主要介绍了Html5 滚动穿透的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. canvas中普通动效与粒子动效的实现代码示例

    canvas用于在网页上绘制图像、动画,可以将其理解为画布,在这个画布上构建想要的效果。本文详细的介绍了粒子特效,和普通动效进行对比,非常具有实用价值,需要的朋友可以参考下

  3. H5混合开发app如何升级的方法

    本篇文章主要介绍了H5混合开发app如何升级的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. canvas学习和滤镜实现代码

    这篇文章主要介绍了canvas学习和滤镜实现代码,利用 canvas,前端人员可以很轻松地、进行图像处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. localStorage的过期时间设置的方法详解

    这篇文章主要介绍了localStorage的过期时间设置的方法详解的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. 详解HTML5 data-* 自定义属性

    这篇文章主要介绍了详解HTML5 data-* 自定义属性的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. HTML5的postMessage的使用手册

    HTML5提出了一个新的用来跨域传值的方法,即postMessage,这篇文章主要介绍了HTML5的postMessage的使用手册的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. 教你使用Canvas处理图片的方法

    本篇文章主要介绍了教你使用Canvas处理图片的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  9. HTML5 拖放(Drag 和 Drop)详解与实例代码

    本篇文章主要介绍了HTML5 拖放(Drag 和 Drop)详解与实例代码,具有一定的参考价值,有兴趣的可以了解一下

  10. 跨域修改iframe页面内容详解

    这篇文章主要介绍了跨域修改iframe页面内容详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

随机推荐

  1. 法国电话号码的正则表达式

    我正在尝试实施一个正则表达式,允许我检查一个号码是否是一个有效的法国电话号码.一定是这样的:要么:这是我实施的但是错了……

  2. 正则表达式 – perl分裂奇怪的行为

    PSperl是5.18.0问题是量词*允许零空间,你必须使用,这意味着1或更多.请注意,F和O之间的空间正好为零.

  3. 正则表达式 – 正则表达式大于和小于

    我想匹配以下任何一个字符:或=或=.这个似乎不起作用:[/]试试这个:它匹配可选地后跟=,或者只是=自身.

  4. 如何使用正则表达式用空格替换字符之间的短划线

    我想用正则表达式替换出现在带空格的字母之间的短划线.例如,用abcd替换ab-cd以下匹配字符–字符序列,但也替换字符[即ab-cd导致d,而不是abcd,因为我希望]我如何适应以上只能取代–部分?

  5. 正则表达式 – /bb | [^ b] {2} /它是如何工作的?

    有人可以解释一下吗?我在t-shirt上看到了这个:它似乎在说:“成为或不成为”怎么样?我好像没找到’e’?

  6. 正则表达式 – 在Scala中验证电子邮件一行

    在我的代码中添加简单的电子邮件验证,我创建了以下函数:这将传递像bob@testmymail.com这样的电子邮件和bobtestmymail.com之类的失败邮件,但是带有空格字符的邮件会漏掉,就像bob@testmymail也会返回true.我可能在这里很傻……当我测试你的正则表达式并且它正在捕捉简单的电子邮件时,我检查了你的代码并看到你正在使用findFirstIn.我相信这是你的问题.findFirstIn将跳转所有空格,直到它匹配字符串中任何位置的某个序列.我相信在你的情况下,最好使用unapp

  7. 正则表达式对小字符串的暴力

    在测试小字符串时,使用正则表达式会带来性能上的好处,还是会强制它们更快?不会通过检查给定字符串的字符是否在指定范围内比使用正则表达式更快来强制它们吗?

  8. 正则表达式 – 为什么`stoutest`不是有效的正则表达式?

    isthedelimiter,thenthematch-only-onceruleof?PATTERN?

  9. 正则表达式 – 替换..与.在R

    我怎样才能替换..我尝试过类似的东西:但它并不像我希望的那样有效.尝试添加fixed=T.

  10. 正则表达式 – 如何在字符串中的特定位置添加字符?

    我正在使用记事本,并希望使用正则表达式替换在字符串中的特定位置插入一个字符.例如,在每行的第6位插入一个逗号是什么意思?如果要在第六个字符后添加字符,请使用搜索和更换从技术上讲,这将用MatchGroup1替换每行的前6个字符,后跟逗号.

返回
顶部