summaryrefslogtreecommitdiff
path: root/lib/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/parser/functions/couchdblookup.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/puppet/parser/functions/couchdblookup.rb b/lib/puppet/parser/functions/couchdblookup.rb
new file mode 100644
index 0000000..807c138
--- /dev/null
+++ b/lib/puppet/parser/functions/couchdblookup.rb
@@ -0,0 +1,38 @@
+#
+# A basic function to retrieve data in couchdb
+#
+
+require 'json'
+require 'open-uri'
+
+module Puppet::Parser::Functions
+ newfunction(:couchdblookup, :type => :rvalue) do |args|
+
+ url = args[0]
+ key = args[1]
+
+ raise Puppet::ParseError, ("couchdblookup(): wrong number of arguments (#{args.length}; must be == 2)") if args.length != 2
+
+ begin
+ json = JSON.parse(open(URI.parse(url)).read)
+ rescue OpenURI::HTTPError => error
+ raise Puppet::ParseError, "couchdblookup(): fetching URL #{url} failed with status #{error.message}"
+ end
+
+ result = nil
+ if json.has_key?("rows") and json['total_rows'] > 0 and json['rows'][0].has_key?(key)
+ result = Array.new
+ json['rows'].each do |x|
+ result.push(x[key])
+ end
+ else
+ if json.has_key?(key)
+ result = json[key]
+ end
+ end
+
+ result or raise Puppet::ParseError, "couchdblookup(): key '#{key}' not found in JSON object !"
+
+ end
+end
+