ohai 18.2.6 → 19.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +28 -28
- data/LICENSE +201 -201
- data/bin/ohai +25 -25
- data/lib/ohai/application.rb +189 -189
- data/lib/ohai/common/dmi.rb +167 -167
- data/lib/ohai/config.rb +51 -51
- data/lib/ohai/dsl/plugin/versionvii.rb +203 -203
- data/lib/ohai/dsl/plugin.rb +232 -232
- data/lib/ohai/dsl.rb +22 -22
- data/lib/ohai/exception.rb +36 -36
- data/lib/ohai/hints.rb +68 -68
- data/lib/ohai/loader.rb +178 -178
- data/lib/ohai/log.rb +34 -34
- data/lib/ohai/mash.rb +22 -22
- data/lib/ohai/mixin/alibaba_metadata.rb +83 -83
- data/lib/ohai/mixin/azure_metadata.rb +105 -105
- data/lib/ohai/mixin/chef_utils_wiring.rb +52 -52
- data/lib/ohai/mixin/command.rb +4 -4
- data/lib/ohai/mixin/constant_helper.rb +55 -55
- data/lib/ohai/mixin/dmi_decode.rb +54 -54
- data/lib/ohai/mixin/do_metadata.rb +48 -48
- data/lib/ohai/mixin/ec2_metadata.rb +264 -270
- data/lib/ohai/mixin/gce_metadata.rb +79 -79
- data/lib/ohai/mixin/http_helper.rb +64 -64
- data/lib/ohai/mixin/json_helper.rb +36 -36
- data/lib/ohai/mixin/network_helper.rb +92 -92
- data/lib/ohai/mixin/oci_metadata.rb +60 -60
- data/lib/ohai/mixin/os.rb +128 -128
- data/lib/ohai/mixin/scaleway_metadata.rb +51 -51
- data/lib/ohai/mixin/seconds_to_human.rb +52 -52
- data/lib/ohai/mixin/shell_out.rb +51 -51
- data/lib/ohai/mixin/softlayer_metadata.rb +74 -74
- data/lib/ohai/mixin/string.rb +31 -31
- data/lib/ohai/mixin/train_helpers.rb +36 -36
- data/lib/ohai/mixin/which.rb +39 -39
- data/lib/ohai/plugin_config.rb +47 -47
- data/lib/ohai/plugins/aix/kernel.rb +50 -50
- data/lib/ohai/plugins/aix/memory.rb +37 -37
- data/lib/ohai/plugins/aix/network.rb +142 -142
- data/lib/ohai/plugins/aix/platform.rb +30 -30
- data/lib/ohai/plugins/aix/uptime.rb +54 -54
- data/lib/ohai/plugins/aix/virtualization.rb +154 -154
- data/lib/ohai/plugins/alibaba.rb +72 -72
- data/lib/ohai/plugins/azure.rb +154 -154
- data/lib/ohai/plugins/bsd/virtualization.rb +121 -121
- data/lib/ohai/plugins/c.rb +178 -178
- data/lib/ohai/plugins/chef.rb +50 -50
- data/lib/ohai/plugins/cloud.rb +379 -379
- data/lib/ohai/plugins/command.rb +26 -26
- data/lib/ohai/plugins/cpu.rb +642 -642
- data/lib/ohai/plugins/darwin/hardware.rb +99 -99
- data/lib/ohai/plugins/darwin/memory.rb +62 -62
- data/lib/ohai/plugins/darwin/network.rb +207 -207
- data/lib/ohai/plugins/darwin/platform.rb +40 -40
- data/lib/ohai/plugins/darwin/virtualization.rb +104 -104
- data/lib/ohai/plugins/digital_ocean.rb +67 -67
- data/lib/ohai/plugins/dmi.rb +134 -134
- data/lib/ohai/plugins/docker.rb +58 -58
- data/lib/ohai/plugins/dragonflybsd/memory.rb +60 -60
- data/lib/ohai/plugins/dragonflybsd/network.rb +128 -128
- data/lib/ohai/plugins/dragonflybsd/platform.rb +28 -28
- data/lib/ohai/plugins/ec2.rb +148 -148
- data/lib/ohai/plugins/elixir.rb +36 -36
- data/lib/ohai/plugins/erlang.rb +60 -60
- data/lib/ohai/plugins/eucalyptus.rb +86 -86
- data/lib/ohai/plugins/filesystem.rb +753 -753
- data/lib/ohai/plugins/fips.rb +36 -36
- data/lib/ohai/plugins/freebsd/memory.rb +60 -60
- data/lib/ohai/plugins/freebsd/network.rb +128 -128
- data/lib/ohai/plugins/freebsd/platform.rb +28 -28
- data/lib/ohai/plugins/gce.rb +89 -89
- data/lib/ohai/plugins/go.rb +34 -34
- data/lib/ohai/plugins/groovy.rb +38 -38
- data/lib/ohai/plugins/grub2.rb +40 -40
- data/lib/ohai/plugins/habitat.rb +73 -73
- data/lib/ohai/plugins/haskell.rb +96 -96
- data/lib/ohai/plugins/hostname.rb +133 -133
- data/lib/ohai/plugins/init_package.rb +26 -26
- data/lib/ohai/plugins/java.rb +78 -78
- data/lib/ohai/plugins/kernel.rb +292 -292
- data/lib/ohai/plugins/keys.rb +27 -27
- data/lib/ohai/plugins/languages.rb +26 -26
- data/lib/ohai/plugins/libvirt.rb +114 -114
- data/lib/ohai/plugins/linode.rb +73 -73
- data/lib/ohai/plugins/linux/block_device.rb +48 -48
- data/lib/ohai/plugins/linux/hostnamectl.rb +34 -34
- data/lib/ohai/plugins/linux/interrupts.rb +84 -83
- data/lib/ohai/plugins/linux/ipc.rb +52 -52
- data/lib/ohai/plugins/linux/livepatch.rb +38 -38
- data/lib/ohai/plugins/linux/lsb.rb +46 -46
- data/lib/ohai/plugins/linux/lspci.rb +80 -80
- data/lib/ohai/plugins/linux/machineid.rb +36 -36
- data/lib/ohai/plugins/linux/mdadm.rb +120 -120
- data/lib/ohai/plugins/linux/memory.rb +106 -106
- data/lib/ohai/plugins/linux/network.rb +879 -879
- data/lib/ohai/plugins/linux/os_release.rb +38 -38
- data/lib/ohai/plugins/linux/platform.rb +314 -314
- data/lib/ohai/plugins/linux/selinux.rb +69 -69
- data/lib/ohai/plugins/linux/sessions.rb +54 -54
- data/lib/ohai/plugins/linux/sysctl.rb +39 -39
- data/lib/ohai/plugins/linux/systemd_paths.rb +36 -36
- data/lib/ohai/plugins/linux/tc.rb +61 -61
- data/lib/ohai/plugins/linux/virtualization.rb +300 -300
- data/lib/ohai/plugins/lua.rb +39 -39
- data/lib/ohai/plugins/mono.rb +50 -50
- data/lib/ohai/plugins/netbsd/memory.rb +99 -99
- data/lib/ohai/plugins/netbsd/network.rb +122 -122
- data/lib/ohai/plugins/netbsd/platform.rb +28 -28
- data/lib/ohai/plugins/network.rb +186 -186
- data/lib/ohai/plugins/nodejs.rb +40 -40
- data/lib/ohai/plugins/oci.rb +94 -94
- data/lib/ohai/plugins/ohai.rb +29 -29
- data/lib/ohai/plugins/ohai_time.rb +26 -26
- data/lib/ohai/plugins/openbsd/memory.rb +99 -99
- data/lib/ohai/plugins/openbsd/network.rb +122 -122
- data/lib/ohai/plugins/openbsd/platform.rb +28 -28
- data/lib/ohai/plugins/openstack.rb +84 -84
- data/lib/ohai/plugins/os.rb +55 -55
- data/lib/ohai/plugins/packages.rb +234 -234
- data/lib/ohai/plugins/passwd.rb +104 -104
- data/lib/ohai/plugins/perl.rb +45 -45
- data/lib/ohai/plugins/php.rb +52 -52
- data/lib/ohai/plugins/platform.rb +41 -41
- data/lib/ohai/plugins/powershell.rb +82 -82
- data/lib/ohai/plugins/ps.rb +35 -35
- data/lib/ohai/plugins/python.rb +43 -43
- data/lib/ohai/plugins/rackspace.rb +177 -177
- data/lib/ohai/plugins/root_group.rb +41 -41
- data/lib/ohai/plugins/rpm.rb +121 -121
- data/lib/ohai/plugins/ruby.rb +66 -66
- data/lib/ohai/plugins/rust.rb +34 -34
- data/lib/ohai/plugins/scala.rb +38 -38
- data/lib/ohai/plugins/scaleway.rb +58 -58
- data/lib/ohai/plugins/scsi.rb +52 -52
- data/lib/ohai/plugins/shard.rb +142 -142
- data/lib/ohai/plugins/shells.rb +32 -32
- data/lib/ohai/plugins/softlayer.rb +48 -48
- data/lib/ohai/plugins/solaris2/dmi.rb +191 -191
- data/lib/ohai/plugins/solaris2/memory.rb +32 -32
- data/lib/ohai/plugins/solaris2/network.rb +192 -192
- data/lib/ohai/plugins/solaris2/platform.rb +58 -58
- data/lib/ohai/plugins/solaris2/virtualization.rb +90 -90
- data/lib/ohai/plugins/ssh_host_key.rb +84 -84
- data/lib/ohai/plugins/sysconf.rb +46 -46
- data/lib/ohai/plugins/timezone.rb +45 -45
- data/lib/ohai/plugins/train.rb +35 -35
- data/lib/ohai/plugins/uptime.rb +95 -95
- data/lib/ohai/plugins/virtualbox.rb +197 -197
- data/lib/ohai/plugins/vmware.rb +109 -109
- data/lib/ohai/plugins/windows/dmi.rb +95 -95
- data/lib/ohai/plugins/windows/drivers.rb +52 -52
- data/lib/ohai/plugins/windows/memory.rb +39 -39
- data/lib/ohai/plugins/windows/network.rb +222 -222
- data/lib/ohai/plugins/windows/platform.rb +34 -34
- data/lib/ohai/plugins/windows/system_enclosure.rb +29 -29
- data/lib/ohai/plugins/windows/virtualization.rb +45 -45
- data/lib/ohai/plugins/zpools.rb +94 -94
- data/lib/ohai/provides_map.rb +208 -208
- data/lib/ohai/runner.rb +128 -126
- data/lib/ohai/system.rb +258 -258
- data/lib/ohai/train_transport.rb +29 -29
- data/lib/ohai/util/file_helper.rb +6 -6
- data/lib/ohai/util/ip_helper.rb +56 -56
- data/lib/ohai/util/win32.rb +47 -47
- data/lib/ohai/version.rb +23 -23
- data/lib/ohai.rb +23 -23
- data/ohai.gemspec +35 -35
- metadata +9 -15
@@ -1,83 +1,83 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
5
|
-
# License:: Apache License, Version 2.0
|
6
|
-
#
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
# See the License for the specific language governing permissions and
|
17
|
-
# limitations under the License.
|
18
|
-
|
19
|
-
require "net/http" unless defined?(Net::HTTP)
|
20
|
-
|
21
|
-
require_relative "../mixin/json_helper"
|
22
|
-
include Ohai::Mixin::JsonHelper
|
23
|
-
|
24
|
-
module Ohai
|
25
|
-
module Mixin
|
26
|
-
#
|
27
|
-
# This code parses the Alibaba Instance Metadata API to provide details
|
28
|
-
# of the running instance.
|
29
|
-
#
|
30
|
-
# Note: As of 2021-02-07 there is only one API release so we're not implementing
|
31
|
-
# logic like the ec2 or azure mixins where we have to find the latest supported
|
32
|
-
# release
|
33
|
-
module AlibabaMetadata
|
34
|
-
|
35
|
-
ALI_METADATA_ADDR ||= "100.100.100.200"
|
36
|
-
|
37
|
-
def http_get(uri)
|
38
|
-
conn = Net::HTTP.start(ALI_METADATA_ADDR)
|
39
|
-
conn.read_timeout = 6
|
40
|
-
conn.keep_alive_timeout = 6
|
41
|
-
conn.get("/2016-01-01/#{uri}", { "User-Agent" => "chef-ohai/#{Ohai::VERSION}" })
|
42
|
-
end
|
43
|
-
|
44
|
-
def fetch_metadata(id = "", is_directory = true)
|
45
|
-
response = http_get(id)
|
46
|
-
if response.code == "200"
|
47
|
-
|
48
|
-
if !is_directory
|
49
|
-
json_data = parse_json(response.body)
|
50
|
-
if json_data.nil?
|
51
|
-
response.body
|
52
|
-
else
|
53
|
-
json_data
|
54
|
-
end
|
55
|
-
elsif is_directory
|
56
|
-
temp = {}
|
57
|
-
response.body.split("\n").each do |sub_attr|
|
58
|
-
if "#{id}/#{sub_attr}" != "/user-data"
|
59
|
-
uri = id == "" ? "#{id}#{sub_attr}/" : "#{id}#{sub_attr}"
|
60
|
-
temp[sanitize_key(sub_attr).gsub(/_$/, "")] = fetch_metadata(uri, has_trailing_slash?(uri))
|
61
|
-
end
|
62
|
-
end
|
63
|
-
temp
|
64
|
-
end
|
65
|
-
else
|
66
|
-
logger.warn("Mixin AlibabaMetadata: Received response code #{response.code} requesting metadata for id='#{id}'")
|
67
|
-
nil
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# @param data [String]
|
72
|
-
#
|
73
|
-
# @return [Boolean] is there a trailing /?
|
74
|
-
def has_trailing_slash?(data)
|
75
|
-
!!(data =~ %r{/$})
|
76
|
-
end
|
77
|
-
|
78
|
-
def sanitize_key(key)
|
79
|
-
key.gsub(%r{\-|/}, "_")
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
|
19
|
+
require "net/http" unless defined?(Net::HTTP)
|
20
|
+
|
21
|
+
require_relative "../mixin/json_helper"
|
22
|
+
include Ohai::Mixin::JsonHelper
|
23
|
+
|
24
|
+
module Ohai
|
25
|
+
module Mixin
|
26
|
+
#
|
27
|
+
# This code parses the Alibaba Instance Metadata API to provide details
|
28
|
+
# of the running instance.
|
29
|
+
#
|
30
|
+
# Note: As of 2021-02-07 there is only one API release so we're not implementing
|
31
|
+
# logic like the ec2 or azure mixins where we have to find the latest supported
|
32
|
+
# release
|
33
|
+
module AlibabaMetadata
|
34
|
+
|
35
|
+
ALI_METADATA_ADDR ||= "100.100.100.200"
|
36
|
+
|
37
|
+
def http_get(uri)
|
38
|
+
conn = Net::HTTP.start(ALI_METADATA_ADDR)
|
39
|
+
conn.read_timeout = 6
|
40
|
+
conn.keep_alive_timeout = 6
|
41
|
+
conn.get("/2016-01-01/#{uri}", { "User-Agent" => "chef-ohai/#{Ohai::VERSION}" })
|
42
|
+
end
|
43
|
+
|
44
|
+
def fetch_metadata(id = "", is_directory = true)
|
45
|
+
response = http_get(id)
|
46
|
+
if response.code == "200"
|
47
|
+
|
48
|
+
if !is_directory
|
49
|
+
json_data = parse_json(response.body)
|
50
|
+
if json_data.nil?
|
51
|
+
response.body
|
52
|
+
else
|
53
|
+
json_data
|
54
|
+
end
|
55
|
+
elsif is_directory
|
56
|
+
temp = {}
|
57
|
+
response.body.split("\n").each do |sub_attr|
|
58
|
+
if "#{id}/#{sub_attr}" != "/user-data"
|
59
|
+
uri = id == "" ? "#{id}#{sub_attr}/" : "#{id}#{sub_attr}"
|
60
|
+
temp[sanitize_key(sub_attr).gsub(/_$/, "")] = fetch_metadata(uri, has_trailing_slash?(uri))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
temp
|
64
|
+
end
|
65
|
+
else
|
66
|
+
logger.warn("Mixin AlibabaMetadata: Received response code #{response.code} requesting metadata for id='#{id}'")
|
67
|
+
nil
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# @param data [String]
|
72
|
+
#
|
73
|
+
# @return [Boolean] is there a trailing /?
|
74
|
+
def has_trailing_slash?(data)
|
75
|
+
!!(data =~ %r{/$})
|
76
|
+
end
|
77
|
+
|
78
|
+
def sanitize_key(key)
|
79
|
+
key.gsub(%r{\-|/}, "_")
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -1,105 +1,105 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
5
|
-
# License:: Apache License, Version 2.0
|
6
|
-
#
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
# See the License for the specific language governing permissions and
|
17
|
-
# limitations under the License.
|
18
|
-
|
19
|
-
require "net/http" unless defined?(Net::HTTP)
|
20
|
-
|
21
|
-
require_relative "../mixin/json_helper"
|
22
|
-
include Ohai::Mixin::JsonHelper
|
23
|
-
|
24
|
-
module Ohai
|
25
|
-
module Mixin
|
26
|
-
#
|
27
|
-
# This code parses the Azure Instance Metadata API to provide details
|
28
|
-
# of the running instance.
|
29
|
-
#
|
30
|
-
# The code probes the instance metadata endpoint for
|
31
|
-
# available versions, determines the most advanced version known to
|
32
|
-
# work and executes the metadata retrieval using that version.
|
33
|
-
#
|
34
|
-
# If no compatible version is found, an empty hash is returned.
|
35
|
-
#
|
36
|
-
module AzureMetadata
|
37
|
-
|
38
|
-
AZURE_METADATA_ADDR ||= "169.254.169.254"
|
39
|
-
|
40
|
-
# it's important that the newer versions are at the end of this array so we can skip sorting it
|
41
|
-
AZURE_SUPPORTED_VERSIONS ||= %w{ 2018-10-01 2019-02-01 2019-03-11 2019-04-30 2019-06-01
|
42
|
-
2019-06-04 2019-08-01 2019-08-15 2019-11-01 2020-06-01
|
43
|
-
2020-07-15 2020-09-01 2020-10-01 2020-12-01 2021-01-01
|
44
|
-
2021-02-01 2021-03-01 2021-05-01 2021-10-01 2021-11-01
|
45
|
-
2021-11-15 2021-12-13 2023-07-01 }.freeze
|
46
|
-
|
47
|
-
def best_api_version
|
48
|
-
@api_version ||= begin
|
49
|
-
logger.trace("Mixin AzureMetadata: Fetching http://#{AZURE_METADATA_ADDR}/metadata/instance to determine the latest supported metadata release")
|
50
|
-
response = http_get("/metadata/instance")
|
51
|
-
if response.code == "404"
|
52
|
-
logger.trace("Mixin AzureMetadata: Received HTTP 404 from metadata server while determining API version, assuming #{AZURE_SUPPORTED_VERSIONS.last}")
|
53
|
-
return AZURE_SUPPORTED_VERSIONS.last
|
54
|
-
elsif response.code != "400" # 400 is actually what we want
|
55
|
-
raise "Mixin AzureMetadata: Unable to determine Azure metadata version (returned #{response.code} response)"
|
56
|
-
end
|
57
|
-
|
58
|
-
# azure returns a list of the 3 latest versions it supports
|
59
|
-
versions = parse_json(response.body).fetch("newest-versions", [])
|
60
|
-
versions.sort!
|
61
|
-
|
62
|
-
until versions.empty? || AZURE_SUPPORTED_VERSIONS.include?(versions.last)
|
63
|
-
pv = versions.pop
|
64
|
-
logger.trace("Mixin AzureMetadata: Azure metadata version #{pv} is not present in the versions provided by the Azure Instance Metadata service")
|
65
|
-
end
|
66
|
-
|
67
|
-
if versions.empty?
|
68
|
-
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}"
|
69
|
-
return AZURE_SUPPORTED_VERSIONS.last
|
70
|
-
end
|
71
|
-
|
72
|
-
logger.trace("Mixin AzureMetadata: Latest supported Azure metadata version: #{versions.last}")
|
73
|
-
versions.last
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
# fetch the meta content with a timeout and the required header and a read timeout of 6s
|
78
|
-
#
|
79
|
-
# @param [String] the relative uri to fetch from the Azure Metadata Service URL
|
80
|
-
#
|
81
|
-
# @return [Net::HTTP]
|
82
|
-
def http_get(uri)
|
83
|
-
conn = Net::HTTP.start(AZURE_METADATA_ADDR)
|
84
|
-
conn.read_timeout = 6
|
85
|
-
conn.get(uri, { "Metadata" => "true" })
|
86
|
-
end
|
87
|
-
|
88
|
-
def fetch_metadata(_api_version = nil)
|
89
|
-
metadata_url = "/metadata/instance?api-version=#{best_api_version}"
|
90
|
-
logger.trace("Mixin AzureMetadata: Fetching metadata from host #{AZURE_METADATA_ADDR} at #{metadata_url}")
|
91
|
-
response = http_get(metadata_url)
|
92
|
-
if response.code == "200"
|
93
|
-
json_data = parse_json(response.body)
|
94
|
-
if json_data.nil?
|
95
|
-
logger.warn("Mixin AzureMetadata: Metadata response is NOT valid JSON")
|
96
|
-
end
|
97
|
-
json_data
|
98
|
-
else
|
99
|
-
logger.warn("Mixin AzureMetadata: Received response code #{response.code} requesting metadata")
|
100
|
-
nil
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
|
19
|
+
require "net/http" unless defined?(Net::HTTP)
|
20
|
+
|
21
|
+
require_relative "../mixin/json_helper"
|
22
|
+
include Ohai::Mixin::JsonHelper
|
23
|
+
|
24
|
+
module Ohai
|
25
|
+
module Mixin
|
26
|
+
#
|
27
|
+
# This code parses the Azure Instance Metadata API to provide details
|
28
|
+
# of the running instance.
|
29
|
+
#
|
30
|
+
# The code probes the instance metadata endpoint for
|
31
|
+
# available versions, determines the most advanced version known to
|
32
|
+
# work and executes the metadata retrieval using that version.
|
33
|
+
#
|
34
|
+
# If no compatible version is found, an empty hash is returned.
|
35
|
+
#
|
36
|
+
module AzureMetadata
|
37
|
+
|
38
|
+
AZURE_METADATA_ADDR ||= "169.254.169.254"
|
39
|
+
|
40
|
+
# it's important that the newer versions are at the end of this array so we can skip sorting it
|
41
|
+
AZURE_SUPPORTED_VERSIONS ||= %w{ 2018-10-01 2019-02-01 2019-03-11 2019-04-30 2019-06-01
|
42
|
+
2019-06-04 2019-08-01 2019-08-15 2019-11-01 2020-06-01
|
43
|
+
2020-07-15 2020-09-01 2020-10-01 2020-12-01 2021-01-01
|
44
|
+
2021-02-01 2021-03-01 2021-05-01 2021-10-01 2021-11-01
|
45
|
+
2021-11-15 2021-12-13 2023-07-01 }.freeze
|
46
|
+
|
47
|
+
def best_api_version
|
48
|
+
@api_version ||= begin
|
49
|
+
logger.trace("Mixin AzureMetadata: Fetching http://#{AZURE_METADATA_ADDR}/metadata/instance to determine the latest supported metadata release")
|
50
|
+
response = http_get("/metadata/instance")
|
51
|
+
if response.code == "404"
|
52
|
+
logger.trace("Mixin AzureMetadata: Received HTTP 404 from metadata server while determining API version, assuming #{AZURE_SUPPORTED_VERSIONS.last}")
|
53
|
+
return AZURE_SUPPORTED_VERSIONS.last
|
54
|
+
elsif response.code != "400" # 400 is actually what we want
|
55
|
+
raise "Mixin AzureMetadata: Unable to determine Azure metadata version (returned #{response.code} response)"
|
56
|
+
end
|
57
|
+
|
58
|
+
# azure returns a list of the 3 latest versions it supports
|
59
|
+
versions = parse_json(response.body).fetch("newest-versions", [])
|
60
|
+
versions.sort!
|
61
|
+
|
62
|
+
until versions.empty? || AZURE_SUPPORTED_VERSIONS.include?(versions.last)
|
63
|
+
pv = versions.pop
|
64
|
+
logger.trace("Mixin AzureMetadata: Azure metadata version #{pv} is not present in the versions provided by the Azure Instance Metadata service")
|
65
|
+
end
|
66
|
+
|
67
|
+
if versions.empty?
|
68
|
+
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}"
|
69
|
+
return AZURE_SUPPORTED_VERSIONS.last
|
70
|
+
end
|
71
|
+
|
72
|
+
logger.trace("Mixin AzureMetadata: Latest supported Azure metadata version: #{versions.last}")
|
73
|
+
versions.last
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# fetch the meta content with a timeout and the required header and a read timeout of 6s
|
78
|
+
#
|
79
|
+
# @param [String] the relative uri to fetch from the Azure Metadata Service URL
|
80
|
+
#
|
81
|
+
# @return [Net::HTTP]
|
82
|
+
def http_get(uri)
|
83
|
+
conn = Net::HTTP.start(AZURE_METADATA_ADDR)
|
84
|
+
conn.read_timeout = 6
|
85
|
+
conn.get(uri, { "Metadata" => "true" })
|
86
|
+
end
|
87
|
+
|
88
|
+
def fetch_metadata(_api_version = nil)
|
89
|
+
metadata_url = "/metadata/instance?api-version=#{best_api_version}"
|
90
|
+
logger.trace("Mixin AzureMetadata: Fetching metadata from host #{AZURE_METADATA_ADDR} at #{metadata_url}")
|
91
|
+
response = http_get(metadata_url)
|
92
|
+
if response.code == "200"
|
93
|
+
json_data = parse_json(response.body)
|
94
|
+
if json_data.nil?
|
95
|
+
logger.warn("Mixin AzureMetadata: Metadata response is NOT valid JSON")
|
96
|
+
end
|
97
|
+
json_data
|
98
|
+
else
|
99
|
+
logger.warn("Mixin AzureMetadata: Received response code #{response.code} requesting metadata")
|
100
|
+
nil
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -1,52 +1,52 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
|
19
|
-
require_relative "../config"
|
20
|
-
require "singleton" unless defined?(Singleton)
|
21
|
-
|
22
|
-
module Ohai
|
23
|
-
module Mixin
|
24
|
-
# Common Dependency Injection wiring for ChefUtils-related modules
|
25
|
-
module ChefUtilsWiring
|
26
|
-
private
|
27
|
-
|
28
|
-
def __config
|
29
|
-
Ohai::Config
|
30
|
-
end
|
31
|
-
|
32
|
-
def __log
|
33
|
-
logger
|
34
|
-
end
|
35
|
-
|
36
|
-
def __transport_connection
|
37
|
-
transport_connection
|
38
|
-
end
|
39
|
-
|
40
|
-
# because of target mode we cache the PATH to avoid massive amounts of `echo $PATH` remote queries
|
41
|
-
#
|
42
|
-
def __env_path
|
43
|
-
PathCache.instance.path_cache ||= super
|
44
|
-
end
|
45
|
-
|
46
|
-
class PathCache
|
47
|
-
include Singleton
|
48
|
-
attr_accessor :path_cache
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require_relative "../config"
|
20
|
+
require "singleton" unless defined?(Singleton)
|
21
|
+
|
22
|
+
module Ohai
|
23
|
+
module Mixin
|
24
|
+
# Common Dependency Injection wiring for ChefUtils-related modules
|
25
|
+
module ChefUtilsWiring
|
26
|
+
private
|
27
|
+
|
28
|
+
def __config
|
29
|
+
Ohai::Config
|
30
|
+
end
|
31
|
+
|
32
|
+
def __log
|
33
|
+
logger
|
34
|
+
end
|
35
|
+
|
36
|
+
def __transport_connection
|
37
|
+
transport_connection
|
38
|
+
end
|
39
|
+
|
40
|
+
# because of target mode we cache the PATH to avoid massive amounts of `echo $PATH` remote queries
|
41
|
+
#
|
42
|
+
def __env_path
|
43
|
+
PathCache.instance.path_cache ||= super
|
44
|
+
end
|
45
|
+
|
46
|
+
class PathCache
|
47
|
+
include Singleton
|
48
|
+
attr_accessor :path_cache
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/ohai/mixin/command.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
$stderr.puts "WARN: Ohai::Mixin::Command is deprecated, please use Ohai::Mixin::ShellOut or remove if the reference is unnecessary"
|
3
|
-
require_relative "shell_out"
|
4
|
-
Ohai::Mixin::Command = Ohai::Mixin::ShellOut unless defined?(Ohai::Mixin::Command)
|
1
|
+
# frozen_string_literal: true
|
2
|
+
$stderr.puts "WARN: Ohai::Mixin::Command is deprecated, please use Ohai::Mixin::ShellOut or remove if the reference is unnecessary"
|
3
|
+
require_relative "shell_out"
|
4
|
+
Ohai::Mixin::Command = Ohai::Mixin::ShellOut unless defined?(Ohai::Mixin::Command)
|
@@ -1,55 +1,55 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
#
|
3
|
-
# Author:: Serdar Sutay (<serdar@chef.io>)
|
4
|
-
# Copyright:: Copyright (c) Chef Software Inc.
|
5
|
-
# License:: Apache License, Version 2.0
|
6
|
-
#
|
7
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
# you may not use this file except in compliance with the License.
|
9
|
-
# You may obtain a copy of the License at
|
10
|
-
#
|
11
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
#
|
13
|
-
# Unless required by applicable law or agreed to in writing, software
|
14
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
16
|
-
# implied.
|
17
|
-
# See the License for the specific language governing permissions and
|
18
|
-
# limitations under the License.
|
19
|
-
#
|
20
|
-
|
21
|
-
module Ohai
|
22
|
-
module Mixin
|
23
|
-
module ConstantHelper
|
24
|
-
|
25
|
-
def remove_constants
|
26
|
-
new_object_constants = Object.constants - @object_pristine.constants - [ :SortedSet ]
|
27
|
-
new_object_constants.each do |constant|
|
28
|
-
Object.send(:remove_const, constant) unless Object.const_get(constant).is_a?(Module)
|
29
|
-
end
|
30
|
-
|
31
|
-
recursive_remove_constants(Ohai::NamedPlugin)
|
32
|
-
end
|
33
|
-
|
34
|
-
def recursive_remove_constants(object)
|
35
|
-
if object.respond_to?(:constants)
|
36
|
-
object.constants.each do |const|
|
37
|
-
next unless strict_const_defined?(object, const)
|
38
|
-
|
39
|
-
recursive_remove_constants(object.const_get(const))
|
40
|
-
object.send(:remove_const, const)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def strict_const_defined?(object, const)
|
46
|
-
if object.method(:const_defined?).arity == 1
|
47
|
-
object.const_defined?(const)
|
48
|
-
else
|
49
|
-
object.const_defined?(const, false)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Author:: Serdar Sutay (<serdar@chef.io>)
|
4
|
+
# Copyright:: Copyright (c) Chef Software Inc.
|
5
|
+
# License:: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
16
|
+
# implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
|
21
|
+
module Ohai
|
22
|
+
module Mixin
|
23
|
+
module ConstantHelper
|
24
|
+
|
25
|
+
def remove_constants
|
26
|
+
new_object_constants = Object.constants - @object_pristine.constants - [ :SortedSet ]
|
27
|
+
new_object_constants.each do |constant|
|
28
|
+
Object.send(:remove_const, constant) unless Object.const_get(constant).is_a?(Module)
|
29
|
+
end
|
30
|
+
|
31
|
+
recursive_remove_constants(Ohai::NamedPlugin)
|
32
|
+
end
|
33
|
+
|
34
|
+
def recursive_remove_constants(object)
|
35
|
+
if object.respond_to?(:constants)
|
36
|
+
object.constants.each do |const|
|
37
|
+
next unless strict_const_defined?(object, const)
|
38
|
+
|
39
|
+
recursive_remove_constants(object.const_get(const))
|
40
|
+
object.send(:remove_const, const)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def strict_const_defined?(object, const)
|
46
|
+
if object.method(:const_defined?).arity == 1
|
47
|
+
object.const_defined?(const)
|
48
|
+
else
|
49
|
+
object.const_defined?(const, false)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|