我使用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 runner 交互式/即时读取标准输出。
我可以等待任务完成,最后读取最终的标准输出并将其显示给用户,我认为这不是更好的用户体验。我想提供用户正在发生的游戏的实时更新。类似于您在 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]
是一个生成器对象,但是当循环运行时,它只从起点打印几行,我认为这是因为任务尚未完成,所以生成器也没有填充。
您有哪些建议或链接可以为我指明正确的方向?随时要求任何澄清。非常感谢您的帮助:)