🚨
Ansibleのpauseモジュールでエラーが出たら
この記事の概要
intro
実行前にセーフティガードを入れようと、pauseモジュールの動作を見ていたところ
見慣れないエラーが出た。
前は何なく実行できたplaybookだったのに何故...
コンポーネント
playbook
prompt.yml
- name : prompt_test
hosts : localhost
tasks:
- name: confirmation
pause: prompt="Please input (y/n)"
register: yn
- name: no_pattern
fail: msg="処理を中断しました"
when: yn.user_input != 'y'
- name: yes_pattern
debug:
msg: "yes"
実行結果
[boomkun@ansible-server ansible]$ sudo ansible-playbook tasks/prompt.yml
PLAY [prompt_test] ******************************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************************
ok: [localhost]
ERROR! The 'pause' module bypasses the host loop, which is currently not supported in the free strategy and would instead execute for every host in the inventory list.
The error appears to be in '/etc/ansible/tasks/prompt.yml': line 4, column 8, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
tasks:
- name: confirmation
^ here
エラー文言
ERROR! The 'pause' module bypasses the host loop, which is currently not supported in the free strategy and would instead execute for every host in the inventory list
原因
処理モードのfree
はtaskの完了を待たないモードなので、pauseが使えないみたいです。
各処理モードを分かりやすく図を描いている方を見つけたので、貼っておきます。
対処法
ansible.cfg
にstrategy = free
が記載されていたら、別のものに変更しましょう。
コメントアウトした場合、デフォルトはlinear
になるようです。
outro
タスクの並列処理を調べていた時に、strategyを変更したのがここに影響してくるとは。
ansibleはエラー調査すると英語ドキュメントばっかで、なかなか大変ですよね~
Discussion