我使用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]
是一个生成器对象,但是当循环运行时,它仅从起点开始打印几行,我认为这是因为任务尚未完成,所以生成器也尚未填充
您有什么建议或链接可以为我指明正确的方向?随时要求任何澄清。非常感谢您的帮助:)