fuel-library/deployment/puppet/inifile
Aleksandr Didenko 81e85f0766 Sync inifile with upstream
v1.1.3 41e2ddbc1cd861247e57d16b778cbe891602f509
Partial blueprint merge-openstack-puppet-modules

Change-Id: Idd6b512a4adafc31cd0c80ccf0ca59a18b43d98e
2014-09-04 16:55:25 +03:00
..
lib/puppet Sync inifile with upstream 2014-09-04 16:55:25 +03:00
spec Sync inifile with upstream 2014-09-04 16:55:25 +03:00
tests Sync inifile with upstream 2014-09-04 16:55:25 +03:00
.fixtures.yml Sync inifile with upstream 2014-09-04 16:55:25 +03:00
.gitignore Sync inifile with upstream 2014-09-04 16:55:25 +03:00
.sync.yml Sync inifile with upstream 2014-09-04 16:55:25 +03:00
.travis.yml Sync inifile with upstream 2014-09-04 16:55:25 +03:00
CHANGELOG.md Sync inifile with upstream 2014-09-04 16:55:25 +03:00
CONTRIBUTING.md Sync inifile with upstream 2014-09-04 16:55:25 +03:00
Gemfile Sync inifile with upstream 2014-09-04 16:55:25 +03:00
LICENSE Update inifile module to 0.9.0 2012-11-14 18:33:51 +04:00
Rakefile Sync inifile with upstream 2014-09-04 16:55:25 +03:00
README.markdown Sync inifile with upstream 2014-09-04 16:55:25 +03:00

Build Status

INI-file module

This module provides resource types for use in managing INI-style configuration files. The main resource type is ini_setting, which is used to manage an individual setting in an INI file. Here's an example usage:

ini_setting { "sample setting":
  ensure  => present,
  path    => '/tmp/foo.ini',
  section => 'foo',
  setting => 'foosetting',
  value   => 'FOO!',
}

A supplementary resource type is ini_subsetting, which is used to manage settings that consist of several arguments such as

JAVA_ARGS="-Xmx192m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/pe-puppetdb/puppetdb-oom.hprof "

ini_subsetting {'sample subsetting':
  ensure  => present,
  section => '',
  key_val_separator => '=',
  path => '/etc/default/pe-puppetdb',
  setting => 'JAVA_ARGS',
  subsetting => '-Xmx',
  value   => '512m',
}

implementing child providers:

The ini_setting class can be overridden by child providers in order to implement the management of ini settings for a specific configuration file.

In order to implement this, you will need to specify your own Type (as shown below). This type needs to implement a namevar (name), and a property called value:

example:

#my_module/lib/puppet/type/glance_api_config.rb
Puppet::Type.newtype(:glance_api_config) do
  ensurable
  newparam(:name, :namevar => true) do
    desc 'Section/setting name to manage from glance-api.conf'
    # namevar should be of the form section/setting
    newvalues(/\S+\/\S+/)
  end
  newproperty(:value) do
    desc 'The value of the setting to be defined.'
    munge do |v|
      v.to_s.strip
    end
  end
end

This type also must have a provider that utilizes the ini_setting provider as its parent:

example:

# my_module/lib/puppet/provider/glance_api_config/ini_setting.rb
Puppet::Type.type(:glance_api_config).provide(
  :ini_setting,
  # set ini_setting as the parent provider
  :parent => Puppet::Type.type(:ini_setting).provider(:ruby)
) do
  # implement section as the first part of the namevar
  def section
    resource[:name].split('/', 2).first
  end
  def setting
    # implement setting as the second part of the namevar
    resource[:name].split('/', 2).last
  end
  # hard code the file path (this allows purging)
  def self.file_path
    '/etc/glance/glance-api.conf'
  end
end

Now, the individual settings of the /etc/glance/glance-api.conf file can be managed as individual resources:

glance_api_config { 'HEADER/important_config':
  value => 'secret_value',
}

Provided that self.file_path has been implemented, you can purge with the following puppet syntax:

resources { 'glance_api_config'
  purge => true,
}

If the above code is added, then the resulting configured file will only contain lines implemented as Puppet resources

A few noteworthy features:

  • The module tries hard not to manipulate your file any more than it needs to. In most cases, it should leave the original whitespace, comments, ordering, etc. perfectly intact.
  • Supports comments starting with either '#' or ';'.
  • Will add missing sections if they don't exist.
  • Supports a "global" section (settings that go at the beginning of the file, before any named sections) by specifying a section name of "".