Ansibleプレイブックを作成およびデバッグする際の一般的なワークフローは次のとおりです。
ansible-playbook ./main.yaml
理想的には、失敗したタスクの実行を再開し、インベントリとすべてのファクトを以前のタスクで収集したいと思います。それも可能ですか?プレイブックの作成/デバッグを高速化する方法は?
http://docs.ansible.com/playbooks_startnstep.html をご覧ください。特定のタスクでプレイブックの実行を開始する場合は、--start-at-task
オプションを使用して実行できます。
ansible-playbook playbook.yml --start-at-task="install packages"
上記は、「install packages」という名前のタスクでプレイブックの実行を開始します。
または、この前の答えを見てください ansible playbookで1つのタスクのみを実行する方法?
最後に、プレイが失敗すると、通常は次のようなものが提供されます。
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/user/site.retry
その--limit
コマンドを使用すると、失敗したタスクから再試行する必要があります。
将来の読者:
--limit @/home/user/site.retry
はこのようなシナリオでは役に立ちません。.retry
は失敗したホストのみを保存するため、失敗したホストに対してすべてのタスクを実行します。
最新バージョン(Ansible 2.x)を使用している場合、--start-at-task
はroles
内で定義されたタスクに対して機能しません。
--step
フラグを使用するだけで、同様の効果を実現できます(例:ansible-playbook playbook.yml --step
)。このステップでは、各タスクを実行する前に尋ねられ、(N)o/(y)es/(c)ontinue
を選択できます。
このアプローチでは、必要に応じてタスクを選択的に実行し、修正後、失敗したポイントから続行します。
Future Futureの読者:
Ansible 2.4.2.0現在、--start-at-task
は、作成したロールで定義されたタスクに対して機能します。
Ansibleチームはこの問題に対処するつもりはありません。ロールをdem等性に保ち、プレイ全体をリプレイすることをお勧めします。これには時間がありません。私の役割では、@ JeremyWhitingのような大量の事実を使用していないため、この--start-at-task
機能を使用できます。
ただし、これは手動のタスクなので、代わりにansible rpmを作成し、これらの基本的な手順に従う「再開」機能を追加しました。
Ansibleチームはこの基本的な(そして非常に便利な)機能を作成したくないので、唯一の選択肢はいくつかのbashスクリプトを介して一緒にハックすることです。