Ansible の "lineinfile" 暗黙の初期値 state=present でなるほど冪等性と思った

Ansible でファイルの中身を編集するモジュール lineinfile がある。

使い方の例として「設定ファイルに一行パラメータを追加するときに使うんだよ」と教わった。

たとえば /etc/sudoers に一行追加しよう。

 

$ ansible hostname -i inventory -m lineinfile -a 'path=/etc/sudoers line="user01 ALL=(ALL) ALL"'

 

これで line で指定した内容が path で指定したファイルに 1行追加される。

で、再実行すると。何も起きない!1行追加されない!

なんで?

と思ったんだけど説明書を読んでようやく納得できた。

lineinfile - Manage lines in text files — Ansible Documentation

これはファイルに行を追加する命令じゃないんだ。line で指定した行が必ず存在するようにする命令なんだ。場所を指定しなければファイルの末尾が使われるんだ。

暗黙の初期値  state=present というのを読んでようやく理解した。必須パラメータじゃないから書かなくても動くんだけど。明示的に指定されるとそういう役目かとよくわかる。

なるほど冪等性。