Saltstack異步執行命令
salt執行命令有時候會有超時的問題,就是命令下發下去了,部分主機沒有返回信息,這時候就很難判斷命令或任務是否執行成功。因此,salt提供異步執行的功能,發出命令后立即返回一個jid。然后我們就可以根據這個jid來查詢任務是否執行成功。
命令行實現異步
參數--async,返回job ID,根據job ID我們可以查詢執行結果。
salt --async '*' test.ping

salt-run jobs.lookup_jid 20161117163153353501

-v參數在返回結果的同時,一同返回本次任務的jid,如果超時還是會返回jid
salt -v '*' test.ping

API實現異步
任務執行代碼樣例,通過async方法執行異步命令獲取返回job id,通過job方法查看執行結果。
import requests
import json
def async(fun, tgt):
"""
異步任務,獲取jid
"""
params = {'client': 'local_async', 'fun': fun, 'tgt': tgt}
headers = {'X-Auth-Token': 登陸時獲取的token}
try:
ret = requests.post(https://ip:port/, data=params, headers=headers, verify=False)
ret = json.loads(ret.text)
return ret['return'][0]['jid']
except Exception as err:
print err
def jobs_all(jid=None):
"""
job_id=None, 查看salt cache中所有的job任務的執行結果
job_id傳值時,查看指定job id的執行結果
"""
headers = {'X-Auth-Token': 登陸時獲取的token}
try:
if jid is None:
ret = requests.get(https://ip:port/jobs, headers=headers, verify=False)
else:
ret = requests.get('https://ip:port/jobs' + jid, headers=headers, verify=False)
ret = json.loads(ret.text)
return ret
except Exception as err:
logger.error(err)
jid = async('test.ping', '*')
jobs_all()
jobs_all(jid=jid)
查看官方文檔獲取詳細幫助 https://docs.saltstack.com/en/latest/ref/netapi/all/salt.netapi.rest_cherrypy.html#id1
