如何以编程方式从ansible跑步者中读取事件

时间:2019-06-03 20:33:26

标签: python django ansible ansible-runner

我使用ansible runner从django应用程序触发了一个ansible-playbook,该应用程序运行良好。请参见以下代码。

import ansible_runner

def runner(request):
    r = ansible_runner.run_async(private_data_dir='/Users/path/to/private_dir', 
                                 playbook='path/to/provision.yml')

我要做的是,每当项目上进行部署时,就向用户提供实时更新(在该剧本中运行的每个ansible任务的标准输出)。

到目前为止,我可以在控制台中立即看到标准输出。但是我无法弄清楚如何从ansible跑步者交互式/即时读取标准输出。

我可以等待任务完成,最后阅读最终的标准输出并将其显示给用户,我认为这不是更好的用户体验。我想为用户提供正在播放的实时更新。类似于您在travis-ci版本上看到的。到目前为止,我无法从ansible-runner的文档中找出任何东西。

我尝试如下检查r.events的输出

r = ansible_runner.run_async(private_data_dir='/Users/path/to/private_dir', 
                                 playbook='path/to/provision.yml')
for event in r[1].events:
   try:
     print(event['event_data']['task'])
   except KeyError:
     pass

 # where r[1] is the Runner object returned by ansible, 
 # r[0] is the thread which runs ansible

所以基本上这个r[1]是一个生成器对象,但是当循环运行时,它仅从起点开始打印几行,我认为这是因为任务尚未完成,所以生成器也尚未填充

您有什么建议或链接可以为我指明正确的方向?随时要求任何澄清。非常感谢您的帮助:)

0 个答案:

没有答案