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