urllib2 调用salt restapi

1获取token

#_*_coding:utf8_*_
import urllib2
import json

def get_token():
    url='http://10.20.32.86:8000/login'
    #http头这个就不介绍了
    headers ={"Content-type":"application/json","Accept": "application/json"}
    #参数
    params=json.dumps(
              {"eauth":"pam","username":"salt","password":"salt"})
    #这里并不是真的开始访问而是将信息组合起来
    req = urllib2.Request(url,params,headers)
    #这才是正真打开web页面
    respones = urllib2.urlopen(req)
    result=json.loads(respones.read())
    #获取salt token
    token=result['return'][0]['token']
    return token

2,设置http头携带token就可以了。

有了这个值就可以做任何事情了

调用salt模块

url='http://10.20.32.86:8000'
#X-Auth-Token: 这个头就是验证头,值就是刚才获取的token,这样就有权访问api了
headers ={"Content-type":"application/json","Accept": "application/json","X-Auth-Token":get_token()}

#fun 就是模块的名字和方法名字。
#kwarg 传递给方法的参数
#剩下的地方就是固定的了
body=json.dumps({
    "client": "local",
    "fun": "cinders.create_volumes",
    "tgt": "master-minion",
    "kwarg": {
      "provider_name": "test_opss",
      "driver_name":"nova",
      "size":1,
      "name":None,
      "description":None,
      "source_volid":None,
      "volume_type":None,
      "availability_zone":"nova",
      "imageRef":None,
      "source_replica":None,
      "consistencygroup_id":None,
      "multiattach":False,
      "snapshot_id":None
    }
})
req = urllib2.Request(url,body,headers)
respones = urllib2.urlopen(req)
result=json.loads(respones.read())
print result
原文地址:https://www.cnblogs.com/menkeyi/p/6020109.html