#!/usr/bin/env python
# -*- coding:utf8 -*-
# __author__ = '北方姆Q' import requests
import json
from django.conf import settings
from requests.packages.urllib3.exceptions import InsecureRequestWarning
from plugins.duia.singleton import Singleton requests.packages.urllib3.disable_warnings(InsecureRequestWarning) class SaltFactory(Singleton):
def __init__(self, url=settings.SALT_URL, username=settings.SALT_USER, password=settings.SALT_USER_PASSWORD):
""" :param url: 默认api url
:param username: api 用户
:param password: api 用户密码
"""
self.url = url
self.username = username
self.password = password
self.header = {"Content-type": "application/json"}
self.login_url = url + "login" if url.endswith('/') else url + "/login"
self.login_data = {'username': self.username, 'password': self.password, 'eauth': 'pam'}
self.token = self.worker(self.login_url, self.login_data)['token'] # 获取该用户的token,便于操作
self.header['X-Auth-Token'] = self.token
self.minions_url = self.url + "minions" if self.url.endswith('/') else self.url + "/minions" def worker(self, url, data):
"""
所有命令真实执行者,更细节的命令可以通过这个执行
:param url: api下各url
:param data: 需要传入的参数
:return: 命令执行结果,dict
"""
data = json.dumps(data)
response = requests.post(url, headers=self.header, data=data, verify=False)
return response.json()['return'][0] def get_data_by_jid(self, jid, display=False):
"""
获取某个任务id的执行结果
:param jid: 任务id,str
:param display: 结果展示长度,默认精简展示
:return: 命令执行结果,如果任务不存在或者未运行结束为空字典,dict
"""
assert isinstance(jid, str)
data = {
'client': 'runner',
'fun': 'jobs.lookup_jid',
'jid': jid
}
ret = self.worker(self.url, data) if display is False:
for node_value in ret.values():
for job_key, job_value in node_value.items():
node_value[job_key] = job_value['result']
return ret def get_data(self, client='local_batch', tgt='*', fun='test.ping', arg=None, tgt_type='glob', batch='100%'):
"""
运行一条命令并等待结果
:param client: 连接方式 * ``local`` - 普通执行
* ``local_batch`` - 分批执行 - Default
* ``local_async`` - 异步执行 :param tgt: 受控目标
:param fun: 执行模块
:param arg: 运行参数(pillar也写在里面),list ['pwd', 'test=True']
['sleep 5 && touch /root/file || touch /root/test']
['keepalived.keepalived.', 'test=True', 'saltenv=prod'] :param tgt_type: 受控目标类型 * ``glob`` - Bash glob completion - Default
* ``pcre`` - Perl style regular expression
* ``list`` - Python list of hosts
* ``grain`` - Match based on a grain comparison
* ``grain_pcre`` - Grain comparison with a regex
* ``pillar`` - Pillar data comparison
* ``pillar_pcre`` - Pillar data comparison with a regex
* ``nodegroup`` - Match on nodegroup
* ``range`` - Use a Range server for matching
* ``compound`` - Pass a compound match string
* ``ipcidr`` - Match based on Subnet (CIDR notation) or IPv4 address. :param batch: 一批的数量,数字或者百分比,str
:return: 命令执行结果,dict
"""
data = {
'client': client,
'tgt': tgt,
'fun': fun,
'tgt_type': tgt_type,
'batch': batch
}
if arg:
data['arg'] = arg
ret = self.worker(self.url, data)
return ret def get_minions(self):
"""
获取所有minions名
:return: 全minions名的generator
"""
response = requests.get(self.minions_url, headers=self.header, verify=False)
minions_list = [minion for minion in response.json()['return'][0].keys()]
return minions_list

前端json解析

         function syntaxHighlight(json) {
if (typeof json != 'string') {
json = JSON.stringify(json, undefined, 2);
}
json = json.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function(match) {
var cls = 'number';
if (/^"/.test(match)) {
if (/:$/.test(match)) {
cls = 'key';
} else {
cls = 'string';
}
} else if (/true|false/.test(match)) {
cls = 'boolean';
} else if (/null/.test(match)) {
cls = 'null';
}
return '<span class="' + cls + '">' + match + '</span>';
});
}

salt api的更多相关文章

  1. CentOS 安装及配置Salt api

    安装 # yum -y install salt-api 更改配置 vim /etc/salt/master 把默认的注释掉  我们这边默认配置文件目录是/srv/salt default_inclu ...

  2. 死磕salt系列-salt API 使用

    启用salt-api 服务 这里简单的说明下,SaltStack官方支持三种REST API,分别是rest_cherry; rest_tonado和rest_wsgi, 本文选择使用rest_che ...

  3. Salt 与Salt API配置

    1.安装 [root@localhost yum.repos.d]# cat /etc/yum.repos.d/salt.repo [saltstack-repo] name=SaltStack re ...

  4. 从零开始搭建Salt Web之初探salt-api

    Salt-API入门 在Google搜索栏输入salt-api,会有一些讲述如何使用Salt-API的文章,确实有效,不过都是建立 在将Salt安装在默认目录下的情况下,即通过apt-get inst ...

  5. 死磕salt系列-salt文章目录汇总

    死磕salt系列-salt入门 死磕salt系列-salt配置文件 死磕salt系列-salt grains pillar 配置 死磕salt系列-salt 常用modules 死磕salt系列-sa ...

  6. 死磕salt系列-salt入门

    saltstack简介 SaltStack是一种新型的基础设施管理软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltStack提供了一个动态基础 ...

  7. 运维自动化之salt笔记

    1:saltstack的基本介绍 2:salt的安装 1:服务端1:安装2:配置文件3:运行4:注意事项2:客户端1:安装2:配置文件3:运行4:注意事项 3:salt的使用: 1:基础知识1:tar ...

  8. 搭建基于Jenkins salt-api的运维工具

    1. 安装salt-master和salt-minion 安装过程不再赘述,请参考http://docs.saltstack.com/en/latest/topics/installation/ind ...

  9. 使用python实现后台系统的JWT认证(转)

    今天的文章介绍一种适用于restful+json的API认证方法,这个方法是基于jwt,并且加入了一些从oauth2.0借鉴的改良. 1. 常见的几种实现认证的方法 首先要明白,认证和鉴权是不同的.认 ...

随机推荐

  1. OpenGL之路(七)为立方体加入丰富色彩

    在立方体的六个面贴上不同的颜色,假设想达到混合颜色的效果,能够參照立方体的前面代码在每一行前都加上颜色 代码例如以下 #include <gl/glut.h> #pragma commen ...

  2. CCNP路由实验之十二 MPLS

     个.第3个数据包„„同样的操作.包含查询路由表.重写MAC地址,CRC校验等. 系列路由器.或者12000系列路由器. Netflow switching 通过一种标准的交换机制,处理了流的第一 ...

  3. hdu 1548

    A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  4. 广告制胜无它,顺应人性尔——leo鉴书63

    近期看了几本怎样写文案的书.对广告有了些兴趣.查了下相关销量排行,位置比較高的是本叫<科学的广告+我的广告生涯>的书,是同一作者(Claude C. Hopkins)两本书的合集.前者是他 ...

  5. android实例讲解----Tomcat部署Web应用方法总结

      参考文档:http://blog.csdn.net/yangxueyong/article/details/6130065  Tomcat部署Web应用方法总结             一.架构介 ...

  6. Spring MVC访问静态资源

    http://www.cnblogs.com/yank/p/4477204.html SpringMVC访问静态资源 在SpringMVC中常用的就是Controller与View.但是我们常常会需要 ...

  7. Python web 框架:web.py

    web.py 是一个Python 的web 框架,它简单而且功能强大.web.py 是公开的,无论用于什么用途都是没有限 制的. web.py 安装: pip install web.py 下面开始我 ...

  8. mysql查询结果自动生成序列号

  9. 使用Apache Commons Chain(转载)

    原博客出处:http://phil-xzh.iteye.com/blog/321536 使用Commons Chain 作为程序开发人员,我们经常需要对一个实际上程序性的系统应用面向对象的方法.商业分 ...

  10. TCP 同步传输:客户端发送,服务器段接收

    1.服务器端程序 可以在TcpClient上调用GetStream()方法来获的链接到远程计算机的网络流NetworkStream.当在客户端调用时,他获的链接服务器端的流:当在服务器端调用时,他获得 ...