create_ini_settings.rb 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #
  2. # create_ini_settings.rb
  3. #
  4. module Puppet::Parser::Functions
  5. newfunction(:create_ini_settings, :type => :statement, :doc => <<-EOS
  6. Uses create_resources to create a set of ini_setting resources from a hash:
  7. $settings = { section1 => {
  8. setting1 => val1
  9. },
  10. section2 => {
  11. setting2 => val2,
  12. setting3 => {
  13. ensure => absent
  14. }
  15. }
  16. }
  17. $defaults = {
  18. path => '/tmp/foo.ini'
  19. }
  20. create_ini_settings($settings,$defaults)
  21. Will create the following resources
  22. ini_setting{'/tmp/foo.ini [section1] setting1':
  23. ensure => present,
  24. section => 'section1',
  25. setting => 'setting1',
  26. value => 'val1',
  27. path => '/tmp/foo.ini',
  28. }
  29. ini_setting{'/tmp/foo.ini [section2] setting2':
  30. ensure => present,
  31. section => 'section2',
  32. setting => 'setting2',
  33. value => 'val2',
  34. path => '/tmp/foo.ini',
  35. }
  36. ini_setting{'/tmp/foo.ini [section2] setting3':
  37. ensure => absent,
  38. section => 'section2',
  39. setting => 'setting3',
  40. path => '/tmp/foo.ini',
  41. }
  42. EOS
  43. ) do |arguments|
  44. raise(Puppet::ParseError, "create_ini_settings(): Wrong number of arguments " +
  45. "given (#{arguments.size} for 1 or 2)") unless arguments.size.between?(1,2)
  46. settings = arguments[0]
  47. defaults = arguments[1] || {}
  48. if [settings,defaults].any?{|i| !i.is_a?(Hash) }
  49. raise(Puppet::ParseError,
  50. 'create_ini_settings(): Requires all arguments to be a Hash')
  51. end
  52. resources = settings.keys.inject({}) do |res, section|
  53. raise(Puppet::ParseError,
  54. "create_ini_settings(): Section #{section} must contain a Hash") \
  55. unless settings[section].is_a?(Hash)
  56. unless path = defaults.merge(settings)['path']
  57. raise Puppet::ParseError, 'create_ini_settings(): must pass the path parameter to the Ini_setting resource!'
  58. end
  59. settings[section].each do |setting, value|
  60. res["#{path} #{section} #{setting}"] = {
  61. 'ensure' => 'present',
  62. 'section' => section,
  63. 'setting' => setting,
  64. }.merge(if value.is_a?(Hash)
  65. value
  66. else
  67. { 'value' => value, }
  68. end)
  69. end
  70. res
  71. end
  72. Puppet::Parser::Functions.function('create_resources')
  73. function_create_resources(['ini_setting',resources,defaults])
  74. end
  75. end
  76. # vim: set ts=2 sw=2 et :