タスクの実行結果をwhenで指定するならcheck_modeつける

Ansibleでコマンドの実行結果をwhenで指定するなら、そのコマンドにcheck_modeをつけよう。
Ansibleの公式ドキュメントに書いてあることだが、cehck_mode: no をつけないと、dryrunでコマンドが実行されずにエラーとなる。
Ansibleのバージョンが2.2未満であれば、alwarys_runというオプションがあるので、そちらを利用する。

どんなケースでエラーになるかというと、

---

- name: 'LANGの確認'
  shell: localectl status | grep "System Locale" | sed -re "s/.*:\sLANG=//"
  changed_when: false
  register: current_lang

- name: 'LANGの設定'
  shell: localectl set-locale LANG={{lang}}
  when: current_lang.stdout != lang

こんな感じ。
最初のタスクにcheck_mode: noをつければ問題はなくなる。
でも、破壊的な操作につけたら、それはそれで問題になるはずなので、気をつけよう。

コメント

このブログの人気の投稿

新生活始まります

ElasticIPを複数利用する時の注意