summaryrefslogtreecommitdiff
path: root/lib/ohai/mixin/alibaba_metadata.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ohai/mixin/alibaba_metadata.rb')
-rw-r--r--lib/ohai/mixin/alibaba_metadata.rb53
1 files changed, 20 insertions, 33 deletions
diff --git a/lib/ohai/mixin/alibaba_metadata.rb b/lib/ohai/mixin/alibaba_metadata.rb
index 983dfd91..d371431c 100644
--- a/lib/ohai/mixin/alibaba_metadata.rb
+++ b/lib/ohai/mixin/alibaba_metadata.rb
@@ -18,6 +18,9 @@
require "net/http" unless defined?(Net::HTTP)
+require_relative "../mixin/json_helper"
+include Ohai::Mixin::JsonHelper
+
module Ohai
module Mixin
#
@@ -40,44 +43,28 @@ module Ohai
def fetch_metadata(id = "")
response = http_get(id)
- return nil unless response.code == "200"
-
- if json?(response.body)
- data = String(response.body)
- parser = FFI_Yajl::Parser.new
- parser.parse(data)
- elsif response.body.include?("\n")
- 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 AlibabaMetadata: Metadata response is NOT valid JSON for id='#{id}'")
+ if response.body.include?("\n")
+ 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
+ logger.warn("Mixin AlibabaMetadata: Received response code #{response.code} requesting metadata for id='#{id}'")
+ nil
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
- end
- end
-
- # @param data [String]
- #
- # @return [Boolean] is there a trailing /?
- def has_trailing_slash?(data)
- !!( data =~ %r{/$} )
- end
-
def sanitize_key(key)
key.gsub(%r{\-|/}, "_")
end