summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Price <chris@puppetlabs.com>2013-04-01 15:29:54 -0700
committerDan Bode <dan@puppetlabs.com>2013-04-02 15:10:43 -0700
commit6c245ef674316f4fbddb79698552138fe9f1e69a (patch)
treed231794a23687e28679afe8a934320476965c443
parente824ab2abae16e97f9a19d21580d6825c4bf705e (diff)
downloadpuppet-inifile-6c245ef674316f4fbddb79698552138fe9f1e69a.tar.gz
puppet-inifile-6c245ef674316f4fbddb79698552138fe9f1e69a.tar.bz2
Update Modulefile and Changelog, prepping for 0.10.0 release
This commit also adds some comments clarifying the new code that was added to support purging.
-rw-r--r--CHANGELOG15
-rw-r--r--Modulefile2
-rw-r--r--README.markdown68
-rw-r--r--lib/puppet/provider/ini_setting/ruby.rb17
4 files changed, 100 insertions, 2 deletions
diff --git a/CHANGELOG b/CHANGELOG
index d6a475f..50884bc 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,18 @@
+2013-02-15 - Karel Brezina <karel.brezina@gmail.com> - 0.10.0
+ * Added 'ini_subsetting' custom resource type (4351d8b)
+
+2013-03-11 - Dan Bode <dan@puppetlabs.com> - 0.10.0
+ * guard against nil indentation values (5f71d7f)
+
+2013-01-07 - Dan Bode <dan@puppetlabs.com> - 0.10.0
+ * Add purging support to ini file (2f22483)
+
+2013-02-05 - James Sweeny <james.sweeny@puppetlabs.com> - 0.10.0
+ * Fix test to use correct key_val_parameter (b1aff63)
+
+2012-11-06 - Chris Price <chris@puppetlabs.com> - 0.10.0
+ * Added license file w/Apache 2.0 license (5e1d203)
+
2012-11-02 - Chris Price <chris@puppetlabs.com> - 0.9.0
* Version 0.9.0 released
diff --git a/Modulefile b/Modulefile
index 57c1d4e..883dbe7 100644
--- a/Modulefile
+++ b/Modulefile
@@ -1,5 +1,5 @@
name 'cprice404-inifile'
-version '0.9.0'
+version '0.10.0'
source 'git://github.com/cprice-puppet/puppetlabs-inifile.git'
author 'Chris Price'
description 'Resource types for managing settings in INI files'
diff --git a/README.markdown b/README.markdown
index f0a9c0e..558190a 100644
--- a/README.markdown
+++ b/README.markdown
@@ -27,7 +27,73 @@ settings that consist of several arguments such as
value => '512m',
}
-A few noteworthy features:
+## 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,
diff --git a/lib/puppet/provider/ini_setting/ruby.rb b/lib/puppet/provider/ini_setting/ruby.rb
index af7a073..e57ffe2 100644
--- a/lib/puppet/provider/ini_setting/ruby.rb
+++ b/lib/puppet/provider/ini_setting/ruby.rb
@@ -3,6 +3,15 @@ require File.expand_path('../../../util/ini_file', __FILE__)
Puppet::Type.type(:ini_setting).provide(:ruby) do
def self.instances
+ # this code is here to support purging and the query-all functionality of the
+ # 'puppet resource' command, on a per-file basis. Users
+ # can create a type for a specific config file with a provider that uses
+ # this as its parent and implements the method
+ # 'self.file_path', and that will provide the value for the path to the
+ # ini file (rather than needing to specify it on each ini setting
+ # declaration). This allows 'purging' to be used to clear out
+ # all settings from a particular ini file except those included in
+ # the catalog.
if self.respond_to?(:file_path)
# figure out what to do about the seperator
ini_file = Puppet::Util::IniFile.new(file_path, '=')
@@ -50,14 +59,22 @@ Puppet::Type.type(:ini_setting).provide(:ruby) do
end
def section
+ # this method is here so that it can be overridden by a child provider
resource[:section]
end
def setting
+ # this method is here so that it can be overridden by a child provider
resource[:setting]
end
def file_path
+ # this method is here to support purging and sub-classing.
+ # if a user creates a type and subclasses our provider and provides a
+ # 'file_path' method, then they don't have to specify the
+ # path as a parameter for every ini_setting declaration.
+ # This implementation allows us to support that while still
+ # falling back to the parameter value when necessary.
if self.class.respond_to?(:file_path)
self.class.file_path
else