Puppet Function: cloudlib::httpyaml
- Defined in:
- modules/cloudlib/lib/puppet/functions/cloudlib/httpyaml.rb
- Function type:
- Ruby 4.x API
Overview
SPDX-License-Identifier: Apache-2.0
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 35 36 37 38 39 |
# File 'modules/cloudlib/lib/puppet/functions/cloudlib/httpyaml.rb', line 2 Puppet::Functions.create_function(:'cloudlib::httpyaml') do require 'net/http' require 'uri' require 'yaml' dispatch :data_hash do param 'Hash', :options param 'Puppet::LookupContext', :context end def data_hash(, context) parser = URI::Parser.new uri = URI.parse(['uri']) path = parser.escape(context.interpolate(uri.request_uri)) if context.cache_has_key(path) context.explain { "Returning cached value for #{path}" } value = context.cached_value(path) return value else context.explain { "Querying #{uri}" } if context.cache_has_key('__http_handler') http_handler = context.cached_value('__http_handler') else http_handler = Net::HTTP.new(uri.host, uri.port) http_handler.use_ssl = uri.scheme == "https" context.cache('__http_handler', http_handler) end request = Net::HTTP::Get.new(path) begin response = http_handler.request(request) body = YAML.safe_load(response.body) value = body.fetch('hiera', {}) context.cache(path, value) return value rescue StandardError => e raise Puppet::DataBinding::LookupError, "cloudlib::httpyaml failed #{e.}" end end end end |