lib/ohai/mixin/azure_metadata.rb in ohai-18.1.18 vs lib/ohai/mixin/azure_metadata.rb in ohai-19.0.3
- old
+ new
@@ -1,105 +1,105 @@
-# frozen_string_literal: true
-#
-# Author:: Tim Smith (<tsmith@chef.io>)
-# Copyright:: Copyright (c) Chef Software Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# 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 Azure Instance Metadata API to provide details
- # of the running instance.
- #
- # The code probes the instance metadata endpoint for
- # available versions, determines the most advanced version known to
- # work and executes the metadata retrieval using that version.
- #
- # If no compatible version is found, an empty hash is returned.
- #
- module AzureMetadata
-
- AZURE_METADATA_ADDR ||= "169.254.169.254"
-
- # it's important that the newer versions are at the end of this array so we can skip sorting it
- AZURE_SUPPORTED_VERSIONS ||= %w{ 2018-10-01 2019-02-01 2019-03-11 2019-04-30 2019-06-01
- 2019-06-04 2019-08-01 2019-08-15 2019-11-01 2020-06-01
- 2020-07-15 2020-09-01 2020-10-01 2020-12-01 2021-01-01
- 2021-02-01 2021-03-01 2021-05-01 2021-10-01 2021-11-01
- 2021-11-15 2021-12-13 2023-07-01 }.freeze
-
- def best_api_version
- @api_version ||= begin
- logger.trace("Mixin AzureMetadata: Fetching http://#{AZURE_METADATA_ADDR}/metadata/instance to determine the latest supported metadata release")
- response = http_get("/metadata/instance")
- if response.code == "404"
- logger.trace("Mixin AzureMetadata: Received HTTP 404 from metadata server while determining API version, assuming #{AZURE_SUPPORTED_VERSIONS.last}")
- return AZURE_SUPPORTED_VERSIONS.last
- elsif response.code != "400" # 400 is actually what we want
- raise "Mixin AzureMetadata: Unable to determine Azure metadata version (returned #{response.code} response)"
- end
-
- # azure returns a list of the 3 latest versions it supports
- versions = parse_json(response.body).fetch("newest-versions", [])
- versions.sort!
-
- until versions.empty? || AZURE_SUPPORTED_VERSIONS.include?(versions.last)
- pv = versions.pop
- logger.trace("Mixin AzureMetadata: Azure metadata version #{pv} is not present in the versions provided by the Azure Instance Metadata service")
- end
-
- if versions.empty?
- logger.debug "Mixin AzureMetadata: The short list of supported versions provided by Azure Instance Metadata service doesn't match any known versions to Ohai. Using the latest supported release known to Ohai instead: #{AZURE_SUPPORTED_VERSIONS.last}"
- return AZURE_SUPPORTED_VERSIONS.last
- end
-
- logger.trace("Mixin AzureMetadata: Latest supported Azure metadata version: #{versions.last}")
- versions.last
- end
- end
-
- # fetch the meta content with a timeout and the required header and a read timeout of 6s
- #
- # @param [String] the relative uri to fetch from the Azure Metadata Service URL
- #
- # @return [Net::HTTP]
- def http_get(uri)
- conn = Net::HTTP.start(AZURE_METADATA_ADDR)
- conn.read_timeout = 6
- conn.get(uri, { "Metadata" => "true" })
- end
-
- def fetch_metadata(_api_version = nil)
- metadata_url = "/metadata/instance?api-version=#{best_api_version}"
- logger.trace("Mixin AzureMetadata: Fetching metadata from host #{AZURE_METADATA_ADDR} at #{metadata_url}")
- response = http_get(metadata_url)
- if response.code == "200"
- json_data = parse_json(response.body)
- if json_data.nil?
- logger.warn("Mixin AzureMetadata: Metadata response is NOT valid JSON")
- end
- json_data
- else
- logger.warn("Mixin AzureMetadata: Received response code #{response.code} requesting metadata")
- nil
- end
- end
- end
- end
-end
+# frozen_string_literal: true
+#
+# Author:: Tim Smith (<tsmith@chef.io>)
+# Copyright:: Copyright (c) Chef Software Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# 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 Azure Instance Metadata API to provide details
+ # of the running instance.
+ #
+ # The code probes the instance metadata endpoint for
+ # available versions, determines the most advanced version known to
+ # work and executes the metadata retrieval using that version.
+ #
+ # If no compatible version is found, an empty hash is returned.
+ #
+ module AzureMetadata
+
+ AZURE_METADATA_ADDR ||= "169.254.169.254"
+
+ # it's important that the newer versions are at the end of this array so we can skip sorting it
+ AZURE_SUPPORTED_VERSIONS ||= %w{ 2018-10-01 2019-02-01 2019-03-11 2019-04-30 2019-06-01
+ 2019-06-04 2019-08-01 2019-08-15 2019-11-01 2020-06-01
+ 2020-07-15 2020-09-01 2020-10-01 2020-12-01 2021-01-01
+ 2021-02-01 2021-03-01 2021-05-01 2021-10-01 2021-11-01
+ 2021-11-15 2021-12-13 2023-07-01 }.freeze
+
+ def best_api_version
+ @api_version ||= begin
+ logger.trace("Mixin AzureMetadata: Fetching http://#{AZURE_METADATA_ADDR}/metadata/instance to determine the latest supported metadata release")
+ response = http_get("/metadata/instance")
+ if response.code == "404"
+ logger.trace("Mixin AzureMetadata: Received HTTP 404 from metadata server while determining API version, assuming #{AZURE_SUPPORTED_VERSIONS.last}")
+ return AZURE_SUPPORTED_VERSIONS.last
+ elsif response.code != "400" # 400 is actually what we want
+ raise "Mixin AzureMetadata: Unable to determine Azure metadata version (returned #{response.code} response)"
+ end
+
+ # azure returns a list of the 3 latest versions it supports
+ versions = parse_json(response.body).fetch("newest-versions", [])
+ versions.sort!
+
+ until versions.empty? || AZURE_SUPPORTED_VERSIONS.include?(versions.last)
+ pv = versions.pop
+ logger.trace("Mixin AzureMetadata: Azure metadata version #{pv} is not present in the versions provided by the Azure Instance Metadata service")
+ end
+
+ if versions.empty?
+ logger.debug "Mixin AzureMetadata: The short list of supported versions provided by Azure Instance Metadata service doesn't match any known versions to Ohai. Using the latest supported release known to Ohai instead: #{AZURE_SUPPORTED_VERSIONS.last}"
+ return AZURE_SUPPORTED_VERSIONS.last
+ end
+
+ logger.trace("Mixin AzureMetadata: Latest supported Azure metadata version: #{versions.last}")
+ versions.last
+ end
+ end
+
+ # fetch the meta content with a timeout and the required header and a read timeout of 6s
+ #
+ # @param [String] the relative uri to fetch from the Azure Metadata Service URL
+ #
+ # @return [Net::HTTP]
+ def http_get(uri)
+ conn = Net::HTTP.start(AZURE_METADATA_ADDR)
+ conn.read_timeout = 6
+ conn.get(uri, { "Metadata" => "true" })
+ end
+
+ def fetch_metadata(_api_version = nil)
+ metadata_url = "/metadata/instance?api-version=#{best_api_version}"
+ logger.trace("Mixin AzureMetadata: Fetching metadata from host #{AZURE_METADATA_ADDR} at #{metadata_url}")
+ response = http_get(metadata_url)
+ if response.code == "200"
+ json_data = parse_json(response.body)
+ if json_data.nil?
+ logger.warn("Mixin AzureMetadata: Metadata response is NOT valid JSON")
+ end
+ json_data
+ else
+ logger.warn("Mixin AzureMetadata: Received response code #{response.code} requesting metadata")
+ nil
+ end
+ end
+ end
+ end
+end