lib/ohai/mixin/alibaba_metadata.rb in ohai-18.1.0 vs lib/ohai/mixin/alibaba_metadata.rb in ohai-18.1.3

- old
+ new

@@ -16,10 +16,13 @@ # See the License for the specific language governing permissions and # limitations under the License. require "net/http" unless defined?(Net::HTTP) +require_relative "../mixin/json_helper" +include Ohai::Mixin::JsonHelper + module Ohai module Mixin # # This code parses the Alibaba Instance Metadata API to provide details # of the running instance. @@ -38,45 +41,29 @@ conn.get("/2016-01-01/#{uri}", { "User-Agent" => "chef-ohai/#{Ohai::VERSION}" }) end 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