我用
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')
我要做的是在用户的项目上进行部署时,向用户提供实时更新(运行在该行动手册中的每个可负责任务的标准输出)。
现在,我可以在控制台中立即看到stdout。但我不知道如何从ansible runner中交互式/即时地阅读stdout。
我可以等待任务完成,最后阅读最后的stdout并将其显示给用户,我认为这并不是更好的用户体验。我想提供一个正在发生的用户播放的实时更新。类似于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]
是一个生成器对象,但是当循环运行时,它只从起点打印几行,我假设这是因为任务尚未完成,所以生成器也尚未填充。
你有什么建议或链接可以指引我正确的方向?请随时要求澄清。非常感谢您的帮助:)