LoginSignup
0
0

More than 5 years have passed since last update.

ChefでINIファイルを扱うレシピの例

Last updated at Posted at 2019-03-11

ChefでINIファイルを扱う例を示す

INIファイルを扱うレシピの例

recipes/default.rb
gem_package 'inifile' do
  action :nothing
end.run_action(:install)

require 'inifile'

file '/etc/conf.ini' do
  content lazy {
            inifile = if File.file?(path)
                        IniFile.load(path)
                      else
                        IniFile.new
                      end

            # iniファイルを自由に編集
            inifile['foo']['bar'] = 'baz'   # [foo]にbar=bazを追加

            # 他の編集例
            # inifile.delete_section('foo') # [foo]セクションを削除
            # inifile['foo'] = inifile['foo'].delete_if { |key,val| key == 'bar' }  # [foo]からbar=を削除
            # inifile['foo'] = { 'bar2' => 'baz2' } # [foo]下をbar2=baz2に置き換え

            inifile.to_s                    # テキストに戻す
          }
end
  • iniファイルがなければ以下の内容で作成する。
[foo]
bar = baz
  • iniファイルがある場合、[foo] セクションにおける bar の値を baz に設定する。
  • Chef ClientのRubyへのinifile gem導入は、require 'inifile'をエラーなく通す為、Ruby実行フェーズで行なっている。

  • 「iniファイルを自由に編集」の箇所は、多重loopを使うなどご自由に。

  • 編集に使用可能なメソッドは以下のClass: IniFileを参照

  • if文は3項演算子に置き換え可。

参考

Ansibleの場合

ini_fileモジュールがあるが、こういった階層的なデータをloopで扱うとAnsibleでは醜くなりそう。

ini_file – Tweak settings in INI files

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0