summaryrefslogtreecommitdiff
path: root/README.markdown
diff options
context:
space:
mode:
Diffstat (limited to 'README.markdown')
-rw-r--r--README.markdown68
1 files changed, 67 insertions, 1 deletions
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,