Saltstack异步执行命令(十三)

Posted shhnwangjian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Saltstack异步执行命令(十三)相关的知识,希望对你有一定的参考价值。

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

 

以上是关于Saltstack异步执行命令(十三)的主要内容,如果未能解决你的问题,请参考以下文章

风险提示天融信关于SaltStack远程命令执行漏洞风险提示

安全通告:针对SaltStack远程命令执行漏洞植入挖矿木马的应急响应

高危漏洞|SaltStack远程命令执行漏洞(CVE-2020-11651CVE-2020-11652)

通告更新SaltStack远程命令执行漏洞安全风险通告第二次更新

请马上修复!SaltStack远程命令执行漏洞

Saltstack系列2:Saltstack远程执行命令