From ffab59de517086a3dc6372e5ec01fc789539030e Mon Sep 17 00:00:00 2001 From: Mathieu Bornoz Date: Fri, 12 Nov 2010 16:04:49 +0100 Subject: initial import of couchdb module --- lib/puppet/parser/functions/couchdblookup.rb | 38 ++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 lib/puppet/parser/functions/couchdblookup.rb (limited to 'lib') 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 + -- cgit v1.2.3