動かざることバグの如し

近づきたいよ 君の理想に

Chefで設定ファイル等の文字列を置き換えしたり削除したりする方法

環境

  • 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

ちなみに対象のファイルが存在しないと例外が発生するので注意