Python操作Saltstack
1.代码
# -*- coding:utf-8 -*-
import urllib.request
import urllib.parse
import json class saltAPI(): def __init__(self):
self.url = 'http://192.168.174.128:8000'
self.data = {'username' : 'saltapi',
'password' : 'saltapi',
'eauth' : 'pam'}
self.headers = {'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
self.token = self.get_token()
self.headers['X-Auth-Token'] = self.token #发送post
def post_request(self,prefix='/',postdata=None):
request = urllib.request.Request(self.url+ prefix,postdata,headers=self.headers)
reponse = urllib.request.urlopen(request).read()
content = json.loads(reponse.decode('utf8'))
return content #获取token
def get_token(self):
postdata = urllib.parse.urlencode(self.data).encode('utf8')
content = self.post_request('/login',postdata)
try:
token = content['return'][0]['token']
return token
except KeyError:
raise KeyError #获取grains
def get_grains(self,minion=''):
if minion and minion!='*':
prefix = '/minions/'+minion
else:
prefix = '/minions'
content = self.post_request(prefix)
return content #执行命令->get_jid
def SaltCmd(self,tgt,fun,client='local_async',expr_form='glob',arg=None,**kwargs):
params = {'client':client, 'fun':fun, 'tgt':tgt, 'expr_form':expr_form}
if arg:
a=arg.split(',') #参数按逗号分隔
for i in a:
b=i.split('=') #每个参数再按=号分隔
if len(b)>1:
params[b[0]]='='.join(b[1:]) #带=号的参数作为字典传入
else:
params['arg%s'%(a.index(i)+100)]=i
if kwargs:
params=dict(list(params.items())+list(kwargs.items()))
obj = urllib.parse.urlencode(params).encode('UTF8')
ret = self.post_request(prefix='/',postdata=obj)
jid = ret['return'][0]['jid']
prefix = '/jobs/'+jid
content = self.post_request(prefix)
return content['info'][0]['Result'] def test(self):
print(self.headers) if __name__ == '__main__':
tester = saltAPI()
token = tester.SaltCmd('*','test.ping')
print(token)
Python操作Saltstack的更多相关文章
- python 操作 saltstack Api(二) 示例
获取token #!/usr/bin/env python #-*-coding:utf--*- import urllib import urllib.parse import urllib.req ...
- python操作RabbitMQ(不错)
一.rabbitmq RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列 ...
- Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy
本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...
- Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- 练习:python 操作Mysql 实现登录验证 用户权限管理
python 操作Mysql 实现登录验证 用户权限管理
- Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- Python操作Mysql之基本操作
pymysql python操作mysql依赖pymysql这个模块 下载安装 pip3 install pymysql 操作mysql python操作mysql的时候,是通过”游标”来进行操作的. ...
- Python操作RabbitMQ
RabbitMQ介绍 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从“生产者”接收消息并传递消 ...
- python操作日期和时间的方法
不管何时何地,只要我们编程时遇到了跟时间有关的问题,都要想到 datetime 和 time 标准库模块,今天我们就用它内部的方法,详解python操作日期和时间的方法.1.将字符串的时间转换为时间戳 ...
随机推荐
- 【代码笔记】iOS-动画的跳转
一,工程图. 二,代码. //点击任何处跳转到页面 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { CATransi ...
- 转:PHPStorm+XDebug进行调试图文教程
原文:PHPStorm+XDebug进行调试图文教程 一.XDebug安装配置 (1)下载XDebug下载地址:http://www.xdebug.org/必须下载跟机器上安装的php匹配的版本才行. ...
- SD从零开始31-32
SD从零开始31 包装(Packing) 装运材料Shipping Materials Shipping materials是用来包装或者运输货物的材料: 为了在系统中为outbound delive ...
- java发起HTTP请求的共用类
一定要注意编码,请求时,content-type里的编码,仅仅是流的编码,而结果的编码类型,则是流转化为字符串是需要设定的. 以下是3种使用get/post的方式: import java.io.Bu ...
- MySql UNIX_TIMESTAMP和FROM_UNIXTIME函数讲解
MySql UNIX_TIMESTAMP和FROM_UNIXTIME函数讲解 by:授客 QQ:1033553122 1. unix_timestamp(date)将时间转换为时间戳,如果参数为空,则 ...
- 表id关联数据获取至页面,制作下拉框多选进行数据多项获取(字段处理)
这周完成了一张表单,重点碰到以下问题: 1.freemaker获取年份的type值取year,类型直接为Long,传至后台和获取数据不需要转换: 2.freemaker获取日期type值为date, ...
- 常用的第三方模块 chardet url
chardet 字符串编码一直是令人非常头疼的问题,尤其是我们在处理一些不规范的第三方网页的时候.虽然Python提供了Unicode表示的str和bytes两种数据类型,并且可以通过encode() ...
- LeetCode题解之N-ary Tree Postorder Traversal
1.题目描述 2.问题分析 递归. 3.代码 vector<int> postorder(Node* root) { vector<int> v; postNorder(roo ...
- c# 二分查找法
1.仅 当 列表 是 有序 的 时候, 二分 查找 才 管用. 2.一般而言, 对于 包含 n 个 元素 的 列表, 用 二分 查找 最多 需要 log2n 步, 而 简单 查找 最多 需要 n 步. ...
- 【转】Python学习---Socket通信原理以及三次握手和四次挥手详解
[原文]https://www.toutiao.com/i6566024355082404365/ 什么是Socket? Socket的中文翻译过来就是"套接字".套接字是什么,我 ...