#!/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. javascript原生调用摄像头

    HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...

  2. binary-tree-maximum-path-sum——二叉树任意一条路径上的最大值

    Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. ...

  3. 【每日Scrum】第一天(4.11) TD学生助手Sprint1计划会议成果

    [每日Scrum]第一天  TD学生助手Sprint1计划会议成果 ——小组成员:刘铸辉 刘静 何晓楠 谢凤娇 胡宝月 王洪叶 初次尝试敏捷开发Scrum计划流程开发项目,有什么不对的地方还希望各位大 ...

  4. HDMI

    HDMI,全称为(High Definition Multimedia Interface)高清多媒体接口,主要用于传输高清音视频信号. 现在是HDMI2.0.新一代的HDMI2.0较上一代最大的提升 ...

  5. 使用kubernetes 官网工具kubeadm部署kubernetes(使用阿里云镜像)

    系列目录 kubernetes简介 Kubernetes节点架构图: kubernetes组件架构图: 准备基础环境 我们将使用kubeadm部署3个节点的 Kubernetes Cluster,整体 ...

  6. python中的and和or(转载)

    python中的and和or 4.6. and 和 or 的特殊性质在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值:而是,返回它们实际进行比较的值之一 ...

  7. jquery动态加载脚本

    如果你使用的是jQuery,它里面有一个内置的方法可以用来加载单个JS文件.当你需要延迟加载一些js插件或其它类型的文件时,可以使用这个方法. 一.jQuery getScript()方法加载java ...

  8. secureCRT与vim配置

    折腾了一天,给服务器新装了centos系统,用crt连接,vim用着很不习惯. 修改配色,快捷键啥的都不怎么起效. 后来发现.crt里的会话选项-终端-仿真 里配成xtream,使用颜色方案就可以了.

  9. Python3做采集

    出于某些目的,需要在网上爬一些数据.考虑到Python有各种各样的库,以前想试试Pycharm这个IDE,就决定用它了.首先翻完<深入Python3>这本书,了解了它的语法之类的.下面就开 ...

  10. 当半导体的工艺制程走到7nm后

    https://mp.weixin.qq.com/s/LjFTtEKFX2o8kLjn3y6GbQ 深度学习的异构加速技术1:效率因通用而怠,构架为AI而生 一方面,当半导体的工艺制程走到7nm后,已 ...