module Ohai::Mixin::AlibabaMetadata

This code parses the Alibaba Instance Metadata API to provide details of the running instance.

Note: As of 2021-02-07 there is only one API release so we're not implementing logic like the ec2 or azure mixins where we have to find the latest supported release

Public Instance Methods

fetch_metadata(id = "") click to toggle source
# File lib/ohai/mixin/alibaba_metadata.rb, line 41
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}")
    end
    temp
  else
    response.body
  end
end
has_trailing_slash?(data) click to toggle source

@param data [String]

@return [Boolean] is there a trailing /?

# File lib/ohai/mixin/alibaba_metadata.rb, line 77
def has_trailing_slash?(data)
  !!( data =~ %r{/$} )
end
http_get(uri) click to toggle source
# File lib/ohai/mixin/alibaba_metadata.rb, line 34
def http_get(uri)
  conn = Net::HTTP.start(ALI_METADATA_ADDR)
  conn.read_timeout = 6
  conn.keep_alive_timeout = 6
  conn.get("/2016-01-01/#{uri}", { "User-Agent" => "chef-ohai/#{Ohai::VERSION}" })
end
json?(data) click to toggle source

@param [String] data that might be JSON

@return [Boolean] is the data JSON or not?

# File lib/ohai/mixin/alibaba_metadata.rb, line 63
def json?(data)
  data = String(data)
  parser = FFI_Yajl::Parser.new
  begin
    parser.parse(data)
    true
  rescue FFI_Yajl::ParseError
    false
  end
end
sanitize_key(key) click to toggle source
# File lib/ohai/mixin/alibaba_metadata.rb, line 81
def sanitize_key(key)
  key.gsub(%r{\-|/}, "_")
end