summaryrefslogtreecommitdiff
path: root/lib/puppet/util/trocla_helper.rb
blob: 94670aeb5cef851f7bfdf4ba978e37be5a56c3f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module Puppet::Util::TroclaHelper
  def trocla(trocla_func,has_options,*args)
        # Functions called from puppet manifests that look like this:
        #   lookup("foo", "bar")
        # internally in puppet are invoked:  func(["foo", "bar"])
        #
        # where as calling from templates should work like this:
        #   scope.function_lookup("foo", "bar")
        #
        #  Therefore, declare this function with args '*args' to accept any number
        #  of arguments and deal with puppet's special calling mechanism now:
        if args[0].is_a?(Array)
            args = args[0]
        end

        key = args[0] || raise(Puppet::ParseError, "You need to pass at least a key as an argument!")
        format = args[1] || 'plain'
        options = args[2] || {}

        if options.is_a?(String)
          require 'yaml'
          options = YAML.load(options)
        end

        configfile = File.join(File.dirname(Puppet.settings[:config]), "troclarc.yaml")

        raise(Puppet::ParseError, "Trocla config file #{configfile} is not readable") unless File.exist?(configfile)

        require 'trocla'

        has_options ? Trocla.new(configfile).send(trocla_func, key, format, options) : Trocla.new(configfile).send(trocla_func, key, format)
  end
  module_function :trocla
end