環境
- chef 14
やりたいこと
chefでレシピを当てるターゲット先のサーバーでファイル内の文字列を置き換えたり削除したりと操作したい時がある。
ググるとexecute内でsedコマンド叩けとかいうのもあるが、あまりスマートなやり方ではない。
やり方
Chef::Util::FileEditという専用のリソースが用意されているのでありがたく使わせてもらう。
file '/etc/hogehoge' do _file = Chef::Util::FileEdit.new(path) #マッチした次の行に挿入 _file.insert_line_after_match(/regex/, 'newline') #マッチしなかったら文末に挿入 _file.insert_line_if_no_match(/regex/, 'newline') #マッチした文字列/行を削除 _file.search_file_delete(/regex/) _file.search_file_delete_line(/regex/) #マッチした文字列/行を置換 _file.search_file_replace(/regex/, 'replace') _file.search_file_replace_line(/regex/, 'replace') _file.write_file end
ちなみに対象のファイルが存在しないと例外が発生するので注意