用Python实现salt-api调用

之前写过用PHP实现salt-api调用,由于业务需求又整了个Python版的,实现的思路和PHP一样,这里只贴出访问带1个参数或不带参数salt执行模块的代码,如果需要使用更多的参数,多堆几段代码就好了。如果不懂 saltstack 或 salt-api 建议参考PHP那篇中给的链接先好好学习学习(saltsatck是个运维利器,值得你这么做)。
先贴出我的代码,不好勿喷:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import pycurl
import StringIO

#登录salt-api,获取token
def api_login():
    global token
    url='https://IP地址:8000/login'
    ch=pycurl.Curl()
    ch.setopt(ch.URL, url)
    info = StringIO.StringIO()
    ch.setopt(ch.WRITEFUNCTION, info.write)
    ch.setopt(ch.POST, True)
    #如果是https就要开启这两行
    ch.setopt(ch.SSL_VERIFYPEER, 0)
    ch.setopt(ch.SSL_VERIFYHOST, 2)
    ch.setopt(ch.HTTPHEADER, ['Accept: application/x-yaml'])
    ch.setopt(ch.POSTFIELDS, 'username=你的用户名&password=对应用户的密码&eauth=pam')
    #要包头信息
    #ch.setopt(ch.HEADER, True)
    #不要包头信息
    ch.setopt(ch.HEADER,False)
    ch.perform()
    html = info.getvalue()
    #提取token
    token = html.split("\n")[-3].replace("\n", '')
    token = token.split(' ')[3]
    info.close()
    ch.close()

def api_exec(target, fun, arg='', arg_num=0):
    global token
    url='https://IP地址:8000/'
    ch=pycurl.Curl()
    ch.setopt(ch.URL, url)
    info = StringIO.StringIO()
    ch.setopt(ch.WRITEFUNCTION, info.write)
    ch.setopt(ch.POST, True)
    ch.setopt(ch.SSL_VERIFYPEER, 0)
    ch.setopt(ch.SSL_VERIFYHOST, 2)
    ch.setopt(ch.HTTPHEADER, ['Accept: application/x-yaml', "X-Auth-Token: %s" %(token)])
    if arg_num == 0:
        ch.setopt(ch.POSTFIELDS, "client=local&tgt=%s&fun=%s" %(target, fun))
    elif arg_num == 1:
        ch.setopt(ch.POSTFIELDS, "client=local&tgt=%s&fun=%s&arg=%s" %(target, fun, arg))
    ch.setopt(ch.HEADER,False)
    ch.perform()
    html = info.getvalue()
    info.close()
    ch.close()
    return html

#测试时用的,做为模块使用时请注释下面两行
api_login()
print api_exec('主机key', 'test.ping', '', 0)

先亮执行结果截图,哈哈:
python-salt-api
关键的地方是提取经过认证后的 token,不要忘记除掉结尾的换行符”\n”,不然就悲剧了。
转载请注明出处http://www.xiaomastack.com/2014/06/27/python-salt-api/ 谢谢!

发表评论:

你的电子邮件地址将不会被公开.

65 − = 59

1 Trackback

  1. 版本更新发布WEB化(3)_小插曲自定义请求saltAPI的类 | 小马 (Pingback)