🚨

Ansibleのpauseモジュールでエラーが出たら

2021/07/20に公開

この記事の概要

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が使えないみたいです。

各処理モードを分かりやすく図を描いている方を見つけたので、貼っておきます。
https://twitter.com/zaki_hmkc/status/1292065203668914176

対処法

ansible.cfgstrategy = freeが記載されていたら、別のものに変更しましょう。
コメントアウトした場合、デフォルトはlinearになるようです。

outro

タスクの並列処理を調べていた時に、strategyを変更したのがここに影響してくるとは。
ansibleはエラー調査すると英語ドキュメントばっかで、なかなか大変ですよね~

Discussion