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. 常见的几种实现认证的方法 首先要明白,认证和鉴权是不同的.认 ...
随机推荐
- vscode 插件安装以及首选项配置
1.插件 Auto Close Tag Path Intellisense Prettier Vetur vscode-icons Bracket Pair Colorizer 2.vscode 首选 ...
- Odoo10尝鲜: 采购协议
Odoo10 对 call for bid 进行了 改进, 作为 '采购协议' 进入 采购, 选择 'Purchase agreement' 在 agreement 列表 建立新的 协议 选择 协议类 ...
- Android系统开发(6)——Linux底层输入输出
一.操作系统的体系结构 计算机是由一堆硬件组成的,操作系统是为了有效的控制这些硬件资源的软件.操作系统除了有效地控制这些硬件资源的分配.并提供计算机执行所须要的功能之外,为了提供程序猿更easy开发软 ...
- jquery easyui 全部图标
所有的图标在 jquery-easyui-1.2.6\themes\icons 目录下, 在icon.css定义的如何引用 jquery-easyui-1.2.6/themes/icon.css .i ...
- python(3)- 循环语句:从最内层跳出多层循环
跳出多层循环:三层循环,最里层直接跳出3层 方法一: 在Python中,函数运行到return这一句就会停止,因此可以利用这一特性,将功能写成函数,终止多重循环 def work(): #定义函数 f ...
- Logistic Regression 笔记与理解
Logistic Regression 笔记与理解 Logistic Regression Hypothesis 记为 H(theta) H(theta)=g(z) 当中g(z),是一个叫做Logis ...
- angularJS 常用插件指令
长时间没有登入博客园了,今天突然想了想,当初开这个的目的,其实就是为了记录你当下的一个状态和累计一些问题,所以记录这些还是很有意义,毕竟不是什么牛,靠脸又吃不饱的这个年代,需要留下一些东西给自己看也好 ...
- iOS移动开发周报-第20期
iOS移动开发周报-第20期iOS移动开发周报-第20期 [摘要]:本期iOS移动开发周报带来如下内容:iOS 通知中心扩展制作入门,iOS APP可执行文件的组成,objc非主流代码技巧等. 教程 ...
- TCP/IP笔记之OSI和TCP/IP
- Javascript高级程序设计笔记(很重要尤其是对象的设计模式与继承)
var obj = {'a':'a'}; var fun = function (){} console.log(typeof obj);//object console.log(typeof fun ...