平台化之利用ansible api接口的async使任务异步

#xiaorui.ccimportsysimporttimeimportansible.runnerrunner=ansible.runner.Runner(module_name=’shell’,module_args=sys.argv[1],pattern=’web’,)datastructure=runner.run_async(30)printdatastructureprintdatastructure[1].poll()time.sleep(3)printdatastructure[1].poll()time.sleep(3)printdatastructure[1].poll()time.sleep(3)printdatastructure[1].poll()

终端执行的结果:

[root@67~]#pythoncmd.py”sleep6;echo1111″({‘dark’:{},’contacted’:{‘10.10.10.66′:{u’started’:1,’invocation’:{‘module_name’:’shell’,’module_args’:’sleep6;echo1111′},u’results_file’:u’/root/.ansible_async/637134991839′,u’ansible_job_id’:u’637134991839′}}},<ansible.runner.poller.AsyncPollerobjectat0x9d75c2c>){‘dark’:{},’polled’:{‘10.10.10.66′:{u’started’:1,’invocation’:{‘module_name’:’async_status’,’module_args’:u’jid=637134991839′},u’results_file’:u’/root/.ansible_async/637134991839′,u’ansible_job_id’:u’637134991839′,u’changed’:False}},’contacted’:{}}{‘dark’:{},’polled’:{‘10.10.10.66′:{u’started’:1,’invocation’:{‘module_name’:’async_status’,’module_args’:u’jid=637134991839′},u’results_file’:u’/root/.ansible_async/637134991839′,u’ansible_job_id’:u’637134991839′,u’changed’:False}},’contacted’:{}}{‘dark’:{},’polled’:{},’contacted’:{‘10.10.10.66′:{u’changed’:True,u’end’:u’2014-06-0507:06:19.426764′,u’ansible_job_id’:u’637134991839′,u’stdout’:u’1111′,u’cmd’:u’sleep6;echo1111′,’invocation’:{‘module_name’:’async_status’,’module_args’:u’jid=637134991839′},u’start’:u’2014-06-0507:06:13.420793′,u’finished’:1,u’stderr’:u”,u’rc’:0,u’delta’:u’0:00:06.005971′}}}{‘dark’:{},’polled’:{},’contacted’:{‘10.10.10.66′:{u’changed’:True,u’end’:u’2014-06-0507:06:19.426764′,u’ansible_job_id’:u’637134991839′,u’stdout’:u’1111′,u’cmd’:u’sleep6;echo1111′,’invocation’:{‘module_name’:’async_status’,’module_args’:u’jid=637134991839′},u’start’:u’2014-06-0507:06:13.420793′,u’finished’:1,u’stderr’:u”,u’rc’:0,u’delta’:u’0:00:06.005971′}}}

在运行的过程中,我强制中断主进程。

因为任务是fork到守候进程,所以任务还是被执行的。

[root@66~]#cat/root/.ansible_async/656009932164{“changed”:true,”end”:”2014-06-0507:10:15.741252″,”stdout”:”1111″,”cmd”:”sleep10;echo1111″,”start”:”2014-06-0507:10:05.736109″,”delta”:”0:00:10.005143″,”stderr”:””,”rc”:0}

想知道他是怎么异步的获取状态的么? 

比起saltstack这种逆天的工具来说,ansible的返回值显得有点不时尚。

他的任务结果会输出到.ansible_aysnc的一个token文件里面的。然后你每次去poll任务,他都是拿着这个jid,然后ssh到客户端cat数据,然后把数据json.loads。

当执行异步任务的时候,我监控了22端口的行为数据。

配合上面的python调用ansible api 的那个脚本

T10.10.10.66:22->10.10.10.67:33046[A]T10.10.10.66:22->10.10.10.67:33046[A]T10.10.10.66:22->10.10.10.67:33046[A]T10.10.10.66:22->10.10.10.67:33046[A]T10.10.10.66:22->10.10.10.67:33046[A]T10.10.10.66:22->10.10.10.67:33046[A]T10.10.10.66:22->10.10.10.67:33046[A]T10.10.10.66:22->10.10.10.67:33046[A]T10.10.10.66:22->10.10.10.67:33046[A]T10.10.10.66:22->10.10.10.67:33046[A]T10.10.10.66:22->10.10.10.67:33046[A]T10.10.10.66:22->10.10.10.67:33046[A]T10.10.10.67:33046->10.10.10.66:22[A]T10.10.10.67:33046->10.10.10.66:22[A]T10.10.10.67:33046->10.10.10.66:22[A]T10.10.10.67:33046->10.10.10.66:22[A]T10.10.10.67:33046->10.10.10.66:22[ARxiaorui.cc

每当我看天的时候我就不喜欢再说话,每当我说话的时候我却敢看天。

平台化之利用ansible api接口的async使任务异步

相关文章:

你感兴趣的文章:

标签云: