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