diff options
Diffstat (limited to 'lib/ohai/mixin/gce_metadata.rb')
-rw-r--r-- | lib/ohai/mixin/gce_metadata.rb | 46 |
1 files changed, 20 insertions, 26 deletions
diff --git a/lib/ohai/mixin/gce_metadata.rb b/lib/ohai/mixin/gce_metadata.rb index 64b35f92..1f662223 100644 --- a/lib/ohai/mixin/gce_metadata.rb +++ b/lib/ohai/mixin/gce_metadata.rb @@ -17,6 +17,9 @@ require "net/http" unless defined?(Net::HTTP) +require_relative "../mixin/json_helper" +include Ohai::Mixin::JsonHelper + module Ohai module Mixin module GCEMetadata @@ -37,34 +40,25 @@ module Ohai def fetch_metadata(id = "") response = http_get("#{GCE_METADATA_URL}/#{id}") - return nil unless response.code == "200" - - if json?(response.body) - data = String(response.body) - parser = FFI_Yajl::Parser.new - parser.parse(data) - elsif has_trailing_slash?(id) || (id == "") - temp = {} - response.body.split("\n").each do |sub_attr| - temp[sanitize_key(sub_attr)] = fetch_metadata("#{id}#{sub_attr}") + if response.code == "200" + json_data = parse_json(response.body) + if json_data.nil? + logger.warn("Mixin GCEMetadata: Metadata response is NOT valid JSON for id='#{id}'") + if has_trailing_slash?(id) || (id == "") + temp = {} + response.body.split("\n").each do |sub_attr| + temp[sanitize_key(sub_attr)] = fetch_metadata("#{id}#{sub_attr}") + end + temp + else + response.body + end + else + json_data end - temp else - response.body - end - end - - # @param [String] data that might be JSON - # - # @return [Boolean] is the data JSON or not? - def json?(data) - data = String(data) - parser = FFI_Yajl::Parser.new - begin - parser.parse(data) - true - rescue FFI_Yajl::ParseError - false + logger.warn("Mixin GCEMetadata: Received response code #{response.code} requesting metadata for id='#{id}'") + nil end end |