chefで頑張って冪等性を確保する
packageリソースなどは、勝手に冪等になってくれるけど、executeとかは自分で冪等になるように書かないといけない。
特定の文字列を、ファイルの末尾に追記したい場合
例:/etc/resolv.conf に 'options single-request-reopen' を追加する。 二重に追加されないように not_if で制限する。
execute 'add single-request-reopen' do command "echo 'options single-request-reopen' >> /etc/resolv.conf" not_if "cat /etc/resolv.conf | grep 'options single-request-reopen'" end
パスを通す場合
例:rbenvコマンドにパスを通す。 パスが通っている場合は not_if で制限する。
user = 'vagrant' home_dir = "/home/#{user}" execute 'export path' do not_if 'which rbenv' user user group user command <<-EOC echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> #{home_dir}/.bash_profile echo 'eval "$(rbenv init -)"' >> #{home_dir}/.bash_profile EOC end
とりあえず、このへんを知っておくと、たいていは冪等に書けるんじゃないかと。