salt 执行命令等待_saltstack异步执行命令
Saltstack異步執(zhí)行命令
salt執(zhí)行命令有時(shí)候會(huì)有超時(shí)的問(wèn)題,就是命令下發(fā)下去了,部分主機(jī)沒(méi)有返回信息,這時(shí)候就很難判斷命令或任務(wù)是否執(zhí)行成功。因此,salt提供異步執(zhí)行的功能,發(fā)出命令后立即返回一個(gè)jid。然后我們就可以根據(jù)這個(gè)jid來(lái)查詢?nèi)蝿?wù)是否執(zhí)行成功。
命令行實(shí)現(xiàn)異步
參數(shù)--async,返回job ID,根據(jù)job ID我們可以查詢執(zhí)行結(jié)果。
salt?--async?'*'?test.ping
salt-run?jobs.lookup_jid?20161117163153353501
-v參數(shù)在返回結(jié)果的同時(shí),一同返回本次任務(wù)的jid,如果超時(shí)還是會(huì)返回jid
salt?-v?'*'?test.ping
API實(shí)現(xiàn)異步
任務(wù)執(zhí)行代碼樣例,通過(guò)async方法執(zhí)行異步命令獲取返回job id,通過(guò)job方法查看執(zhí)行結(jié)果。
import?requests
import?json
def?async(fun,?tgt):
"""
異步任務(wù),獲取jid
"""
params?=?{'client':?'local_async',?'fun':?fun,?'tgt':?tgt}
headers?=?{'X-Auth-Token':?登陸時(shí)獲取的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任務(wù)的執(zhí)行結(jié)果
job_id傳值時(shí),查看指定job?id的執(zhí)行結(jié)果
"""
headers?=?{'X-Auth-Token':?登陸時(shí)獲取的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://www.cnblogs.com/shhnwangjian/p/6074445.html
總結(jié)
以上是生活随笔為你收集整理的salt 执行命令等待_saltstack异步执行命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 水滴石穿C语言之声明的语法
- 下一篇: 通用ShellCode深入剖析