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 タスクの stdout) をユーザーに提供することです。
今のところ、コンソールですぐに stdout を確認できます。しかし、ansible ランナーから 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]
はジェネレータ オブジェクトですが、ループを実行すると、開始点から数行しか出力されません。これは、タスクがまだ完了していないためであると想定しているため、ジェネレータにもまだ値が設定されていません。
私を正しい方向に導くことができるあなたの提案やリンクは何ですか? ご不明な点がございましたら、お気軽にお問い合わせください。助けてくれてありがとう:)