salt api
#!/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的更多相关文章
- CentOS 安装及配置Salt api
安装 # yum -y install salt-api 更改配置 vim /etc/salt/master 把默认的注释掉 我们这边默认配置文件目录是/srv/salt default_inclu ...
- 死磕salt系列-salt API 使用
启用salt-api 服务 这里简单的说明下,SaltStack官方支持三种REST API,分别是rest_cherry; rest_tonado和rest_wsgi, 本文选择使用rest_che ...
- Salt 与Salt API配置
1.安装 [root@localhost yum.repos.d]# cat /etc/yum.repos.d/salt.repo [saltstack-repo] name=SaltStack re ...
- 从零开始搭建Salt Web之初探salt-api
Salt-API入门 在Google搜索栏输入salt-api,会有一些讲述如何使用Salt-API的文章,确实有效,不过都是建立 在将Salt安装在默认目录下的情况下,即通过apt-get inst ...
- 死磕salt系列-salt文章目录汇总
死磕salt系列-salt入门 死磕salt系列-salt配置文件 死磕salt系列-salt grains pillar 配置 死磕salt系列-salt 常用modules 死磕salt系列-sa ...
- 死磕salt系列-salt入门
saltstack简介 SaltStack是一种新型的基础设施管理软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位.SaltStack提供了一个动态基础 ...
- 运维自动化之salt笔记
1:saltstack的基本介绍 2:salt的安装 1:服务端1:安装2:配置文件3:运行4:注意事项2:客户端1:安装2:配置文件3:运行4:注意事项 3:salt的使用: 1:基础知识1:tar ...
- 搭建基于Jenkins salt-api的运维工具
1. 安装salt-master和salt-minion 安装过程不再赘述,请参考http://docs.saltstack.com/en/latest/topics/installation/ind ...
- 使用python实现后台系统的JWT认证(转)
今天的文章介绍一种适用于restful+json的API认证方法,这个方法是基于jwt,并且加入了一些从oauth2.0借鉴的改良. 1. 常见的几种实现认证的方法 首先要明白,认证和鉴权是不同的.认 ...
随机推荐
- OpenGL之路(七)为立方体加入丰富色彩
在立方体的六个面贴上不同的颜色,假设想达到混合颜色的效果,能够參照立方体的前面代码在每一行前都加上颜色 代码例如以下 #include <gl/glut.h> #pragma commen ...
- CCNP路由实验之十二 MPLS
个.第3个数据包„„同样的操作.包含查询路由表.重写MAC地址,CRC校验等. 系列路由器.或者12000系列路由器. Netflow switching 通过一种标准的交换机制,处理了流的第一 ...
- hdu 1548
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- 广告制胜无它,顺应人性尔——leo鉴书63
近期看了几本怎样写文案的书.对广告有了些兴趣.查了下相关销量排行,位置比較高的是本叫<科学的广告+我的广告生涯>的书,是同一作者(Claude C. Hopkins)两本书的合集.前者是他 ...
- android实例讲解----Tomcat部署Web应用方法总结
参考文档:http://blog.csdn.net/yangxueyong/article/details/6130065 Tomcat部署Web应用方法总结 一.架构介 ...
- Spring MVC访问静态资源
http://www.cnblogs.com/yank/p/4477204.html SpringMVC访问静态资源 在SpringMVC中常用的就是Controller与View.但是我们常常会需要 ...
- Python web 框架:web.py
web.py 是一个Python 的web 框架,它简单而且功能强大.web.py 是公开的,无论用于什么用途都是没有限 制的. web.py 安装: pip install web.py 下面开始我 ...
- mysql查询结果自动生成序列号
- 使用Apache Commons Chain(转载)
原博客出处:http://phil-xzh.iteye.com/blog/321536 使用Commons Chain 作为程序开发人员,我们经常需要对一个实际上程序性的系统应用面向对象的方法.商业分 ...
- TCP 同步传输:客户端发送,服务器段接收
1.服务器端程序 可以在TcpClient上调用GetStream()方法来获的链接到远程计算机的网络流NetworkStream.当在客户端调用时,他获的链接服务器端的流:当在服务器端调用时,他获得 ...