2 # create_ini_settings.rb
5 module Puppet::Parser::Functions
6 newfunction(:create_ini_settings, :type => :statement, :doc => <<-EOS
7 Uses create_resources to create a set of ini_setting resources from a hash:
9 $settings = { section1 => {
20 path => '/tmp/foo.ini'
22 create_ini_settings($settings,$defaults)
25 Will create the following resources
27 ini_setting{'[section1] setting1':
29 section => 'section1',
30 setting => 'setting1',
32 path => '/tmp/foo.ini',
34 ini_setting{'[section2] setting2':
36 section => 'section2',
37 setting => 'setting2',
39 path => '/tmp/foo.ini',
41 ini_setting{'[section2] setting3':
43 section => 'section2',
44 setting => 'setting3',
45 path => '/tmp/foo.ini',
51 raise(Puppet::ParseError, "create_ini_settings(): Wrong number of arguments " +
52 "given (#{arguments.size} for 1 or 2)") unless arguments.size.between?(1,2)
54 settings = arguments[0]
55 defaults = arguments[1] || {}
57 if [settings,defaults].any?{|i| !i.is_a?(Hash) }
58 raise(Puppet::ParseError,
59 'create_ini_settings(): Requires all arguments to be a Hash')
62 resources = settings.keys.inject({}) do |res, section|
63 raise(Puppet::ParseError,
64 "create_ini_settings(): Section #{section} must contain a Hash") \
65 unless settings[section].is_a?(Hash)
67 settings[section].each do |setting, value|
68 res["[#{section}] #{setting}"] = {
69 'ensure' => 'present',
72 }.merge(if value.is_a?(Hash)
81 Puppet::Parser::Functions.function('create_resources')
82 function_create_resources(['ini_setting',resources,defaults])
86 # vim: set ts=2 sw=2 et :