• 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

  • 相关阅读:
    Git 如何优雅地回退代码?
    如何让自己的技能变现?
    读了100本书,总结出读遍万卷书的 7 大方法
    08月10日总结
    08月09日总结
    08月08日总结
    08月06日总结
    08月04日总结
    08月03日总结
    剑指offer52 两个链表的第一个公共节点
  • 原文地址:https://www.cnblogs.com/shhnwangjian/p/6074445.html
Copyright © 2020-2023  润新知