Chefのscript(bash)リソースを使ってファイルに追記するレシピ

Chefのscript(bash)リソースを使ってファイル追記するレシピを作成した場合の注意点
not_ifまたはonly_ifといったガード条件が入っていないと
Chef実行の度に重複してコマンドが実行されてしまいます。

例えば、
/etc/securetty

ttyS0
を追記する場合の例です。


ガード条件を入れずに

echo "ttyS0" >> /etc/securetty

とコマンドを実行させると1回目の処理は上手くいくのですが、
何度もChefを繰り返し実行すると

ttyS0
ttyS0
ttyS0

と何個も同じ文字列がファイルに書きこまれてしまいます。


そこでレシピを以下のようにします。
ガード条件でgrepを行い該当文字が含まれていない場合のみファイルに追記するようにします。

bash "add ttyS0" do
  not_if 'grep "ttyS0" /etc/securetty'
  code <<-EOC
    echo "ttyS0" >> /etc/securetty
  EOC
end