Esempio n. 1
0
def salttest():
    '''
    @note: 运行salt命令
    '''

    api_info = ApiMg.query.filter_by(app_name='testfdsa').first()
    client = SaltApi('saltstack')
    cmd_params = {
        'client': 'local',
        'fun': 'cmd.run',
        'tgt': '*',
        'arg': 'date && hostname'
    }
    result_data = dict(
        dict(json.loads(client.saltCmd(cmd_params)))['return'][0]).values()[0]
    json_data = client.all_key()
    print "未认证的key: ", json_data['minions_denied']
    print "已认证key: ", json_data['minions']
    print "已拒绝key: ", json_data['minions_rejected']
    print "未认证key: ", json_data['minions_pre']

    host_info = client.get_minions('salt-api')
    print host_info
    #result_key = dict(dict(json.loads(client.all_key())))
    #print result_data
    return render_template('saltkey_list.html', data=json_data['minions'])
Esempio n. 2
0
def salt_minion_test():
    """saltstack minion connection test"""
    if request.method == 'POST':
        key_name = json.loads(request.form.get('data'))['key_name']
        client = SaltApi()
        testping = json.loads(
            client.saltCmd(params={
                'client': 'local',
                'fun': 'test.ping',
                'tgt': key_name
            }))['return'][0].values()
        if testping[0]:
            return jsonify({
                "result": True,
                "message": " Minion【%s】连接正常" % key_name
            })
    return jsonify({"result": False, "message": "Minion连接异常"})
Esempio n. 3
0
def run_saltcmd():
    """ 命令执行(单个主机) """
    if request.method == "POST":
        cmd = json.loads(request.form.get('data'))['cmd']
        hostname = json.loads(request.form.get('data'))['hostname']

        t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        # 读取命令黑名单
        with open(
                os.path.split(os.path.realpath(__file__))[0] + "/" +
                "block_cmd.txt", 'r') as f:
            for each_cmd in f.readlines():
                if cmd in each_cmd:
                    return jsonify({
                        "result": False,
                        "message": u'禁止在此平台运行该命令'
                    })
                try:
                    client = SaltApi()
                    run_cmd = json.loads(
                        client.saltCmd(
                            params={
                                'client': 'local',
                                'fun': 'cmd.run',
                                'tgt': '%s' % hostname,
                                'arg': '%s' % cmd
                            }))['return'][0].values()
                    print run_cmd
                    run_cmd_log = RuncmdLog(runcmd_target=hostname,
                                            runcmd_cmd=cmd,
                                            runcmd_user=current_user.name,
                                            runcmd_result=run_cmd)
                    db.session.add(run_cmd_log)
                    db.session.commit()
                    return jsonify({
                        "result": True,
                        "data": run_cmd,
                        "run_time": t,
                        "message": u'执行成功'
                    })
                except Exception, e:
                    return jsonify({
                        "result": False,
                        "message": u'执行失败,请检查API连接是否正常'
                    })
Esempio n. 4
0
def saltkeylist():
    """运行salt命令"""
    if request.method == "POST":
        if not ApiMg.query.filter_by(app_name='saltstackapi').first():
            return jsonify({"result": False, "message": u'请确保API信息已录入!'})
    try:
        client = SaltApi()
        data = client.all_key()
        print "未认证的key: ", data['minions_denied']
        print "已认证key: ", data['minions']
        print "已拒绝key: ", data['minions_rejected']
        print "未认证key: ", data['minions_pre']
        print data
        return render_template('saltstack/saltkey_list.html',
                               data=data['minions'])
    except Exception, e:
        print e
        flash("未能正常连接saltapi,请检查api配置", 'danger')
        return render_template('saltstack/saltkey_list.html', data='')
Esempio n. 5
0
def run_salt_cmd():
    """批量命令执行(单个/多个主机)"""
    if request.method == "POST":
        t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        cmd = json.loads(request.form.get('data'))['command_arr']
        hostname = json.loads(request.form.get('data'))['host_arr'].split(',')
        host_list = []
        [
            host_list.append(each_host) for each_host in json.loads(
                request.form.get('data'))['host_arr'].split(',')
        ]
        try:
            client = SaltApi()
            run_cmd = client.saltCmd(
                params={
                    'client': 'local',
                    'fun': 'cmd.run',
                    'tgt': hostname,
                    'expr_form': 'list',
                    'arg': cmd
                })
            if run_cmd is None:
                return jsonify({
                    "result": False,
                    "data": run_cmd,
                    "run_time": t,
                    "message": u'执行失败,请检查API连接是否正常'
                })
            else:
                return jsonify({
                    "result": True,
                    "data": run_cmd,
                    "run_time": t,
                    "message": u'执行成功'
                })
        except Exception, e:
            return jsonify({"result": False, "message": u'执行失败,请检查API连接是否正常'})
Esempio n. 6
0
#!/usr/bin/python
#
from saltapi import SaltApi
import re

salt_obj = SaltApi()
disabled = [
    u"t-slq-test-2", u"t-slq-msyql-3", u"t-slq-lb-2", u"t-slq-test-1",
    u"t-slq-spark-5", u"t-slq-uat-test-1", u"t-slq-detalase-1",
    u"t-slq-uat-db-1", u"t-slq-oms-1", u"t-slq-jenkins-2", u"t-slq-mysql-2",
    u"t-slq-cache1", u"t-slq-k8s-21", u"t-slq-gtw-3", u"t-slq-nat-1",
    u"t-slq-k8s-22", u"t-slq-win2012-1", u"t-slq-node-1"
]
keys = salt_obj.list_all_keys()[0]
for key in disabled:
    keys.remove(key)


def handle_data():
    os_info = {
        'client':
        'local',
        'fun':
        'grains.item',
        'tgt':
        '*',
        'arg': ('os', 'fqdn', 'host', 'ipv4', 'osfinger', 'mem_total',
                'num_cpus', 'osrelease'),
        'kwargs': {},
        'expr_form':
        'glob',