lib/ohai/mixin/alibaba_metadata.rb in ohai-18.1.3 vs lib/ohai/mixin/alibaba_metadata.rb in ohai-18.1.18
- old
+ new
@@ -39,31 +39,41 @@
conn.read_timeout = 6
conn.keep_alive_timeout = 6
conn.get("/2016-01-01/#{uri}", { "User-Agent" => "chef-ohai/#{Ohai::VERSION}" })
end
- def fetch_metadata(id = "")
+ def fetch_metadata(id = "", is_directory = true)
response = http_get(id)
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
+
+ if !is_directory
+ json_data = parse_json(response.body)
+ if json_data.nil?
response.body
+ else
+ json_data
end
- else
- json_data
+ elsif is_directory
+ temp = {}
+ response.body.split("\n").each do |sub_attr|
+ if "#{id}/#{sub_attr}" != "/user-data"
+ uri = id == "" ? "#{id}#{sub_attr}/" : "#{id}#{sub_attr}"
+ temp[sanitize_key(sub_attr).gsub(/_$/, "")] = fetch_metadata(uri, has_trailing_slash?(uri))
+ end
+ end
+ temp
end
else
logger.warn("Mixin AlibabaMetadata: Received response code #{response.code} requesting metadata for id='#{id}'")
nil
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