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.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +28 -28
  3. data/LICENSE +201 -201
  4. data/bin/ohai +25 -25
  5. data/lib/ohai/application.rb +189 -189
  6. data/lib/ohai/common/dmi.rb +167 -167
  7. data/lib/ohai/config.rb +51 -51
  8. data/lib/ohai/dsl/plugin/versionvii.rb +203 -203
  9. data/lib/ohai/dsl/plugin.rb +232 -232
  10. data/lib/ohai/dsl.rb +22 -22
  11. data/lib/ohai/exception.rb +36 -36
  12. data/lib/ohai/hints.rb +68 -68
  13. data/lib/ohai/loader.rb +178 -178
  14. data/lib/ohai/log.rb +34 -34
  15. data/lib/ohai/mash.rb +22 -22
  16. data/lib/ohai/mixin/alibaba_metadata.rb +83 -83
  17. data/lib/ohai/mixin/azure_metadata.rb +105 -105
  18. data/lib/ohai/mixin/chef_utils_wiring.rb +52 -52
  19. data/lib/ohai/mixin/command.rb +4 -4
  20. data/lib/ohai/mixin/constant_helper.rb +55 -55
  21. data/lib/ohai/mixin/dmi_decode.rb +54 -54
  22. data/lib/ohai/mixin/do_metadata.rb +48 -48
  23. data/lib/ohai/mixin/ec2_metadata.rb +264 -270
  24. data/lib/ohai/mixin/gce_metadata.rb +79 -79
  25. data/lib/ohai/mixin/http_helper.rb +64 -64
  26. data/lib/ohai/mixin/json_helper.rb +36 -36
  27. data/lib/ohai/mixin/network_helper.rb +92 -92
  28. data/lib/ohai/mixin/oci_metadata.rb +60 -60
  29. data/lib/ohai/mixin/os.rb +128 -128
  30. data/lib/ohai/mixin/scaleway_metadata.rb +51 -51
  31. data/lib/ohai/mixin/seconds_to_human.rb +52 -52
  32. data/lib/ohai/mixin/shell_out.rb +51 -51
  33. data/lib/ohai/mixin/softlayer_metadata.rb +74 -74
  34. data/lib/ohai/mixin/string.rb +31 -31
  35. data/lib/ohai/mixin/train_helpers.rb +36 -36
  36. data/lib/ohai/mixin/which.rb +39 -39
  37. data/lib/ohai/plugin_config.rb +47 -47
  38. data/lib/ohai/plugins/aix/kernel.rb +50 -50
  39. data/lib/ohai/plugins/aix/memory.rb +37 -37
  40. data/lib/ohai/plugins/aix/network.rb +142 -142
  41. data/lib/ohai/plugins/aix/platform.rb +30 -30
  42. data/lib/ohai/plugins/aix/uptime.rb +54 -54
  43. data/lib/ohai/plugins/aix/virtualization.rb +154 -154
  44. data/lib/ohai/plugins/alibaba.rb +72 -72
  45. data/lib/ohai/plugins/azure.rb +154 -154
  46. data/lib/ohai/plugins/bsd/virtualization.rb +121 -121
  47. data/lib/ohai/plugins/c.rb +178 -178
  48. data/lib/ohai/plugins/chef.rb +50 -50
  49. data/lib/ohai/plugins/cloud.rb +379 -379
  50. data/lib/ohai/plugins/command.rb +26 -26
  51. data/lib/ohai/plugins/cpu.rb +642 -642
  52. data/lib/ohai/plugins/darwin/hardware.rb +99 -99
  53. data/lib/ohai/plugins/darwin/memory.rb +62 -62
  54. data/lib/ohai/plugins/darwin/network.rb +207 -207
  55. data/lib/ohai/plugins/darwin/platform.rb +40 -40
  56. data/lib/ohai/plugins/darwin/virtualization.rb +104 -104
  57. data/lib/ohai/plugins/digital_ocean.rb +67 -67
  58. data/lib/ohai/plugins/dmi.rb +134 -134
  59. data/lib/ohai/plugins/docker.rb +58 -58
  60. data/lib/ohai/plugins/dragonflybsd/memory.rb +60 -60
  61. data/lib/ohai/plugins/dragonflybsd/network.rb +128 -128
  62. data/lib/ohai/plugins/dragonflybsd/platform.rb +28 -28
  63. data/lib/ohai/plugins/ec2.rb +148 -148
  64. data/lib/ohai/plugins/elixir.rb +36 -36
  65. data/lib/ohai/plugins/erlang.rb +60 -60
  66. data/lib/ohai/plugins/eucalyptus.rb +86 -86
  67. data/lib/ohai/plugins/filesystem.rb +753 -753
  68. data/lib/ohai/plugins/fips.rb +36 -36
  69. data/lib/ohai/plugins/freebsd/memory.rb +60 -60
  70. data/lib/ohai/plugins/freebsd/network.rb +128 -128
  71. data/lib/ohai/plugins/freebsd/platform.rb +28 -28
  72. data/lib/ohai/plugins/gce.rb +89 -89
  73. data/lib/ohai/plugins/go.rb +34 -34
  74. data/lib/ohai/plugins/groovy.rb +38 -38
  75. data/lib/ohai/plugins/grub2.rb +40 -40
  76. data/lib/ohai/plugins/habitat.rb +73 -73
  77. data/lib/ohai/plugins/haskell.rb +96 -96
  78. data/lib/ohai/plugins/hostname.rb +133 -133
  79. data/lib/ohai/plugins/init_package.rb +26 -26
  80. data/lib/ohai/plugins/java.rb +78 -78
  81. data/lib/ohai/plugins/kernel.rb +292 -292
  82. data/lib/ohai/plugins/keys.rb +27 -27
  83. data/lib/ohai/plugins/languages.rb +26 -26
  84. data/lib/ohai/plugins/libvirt.rb +114 -114
  85. data/lib/ohai/plugins/linode.rb +73 -73
  86. data/lib/ohai/plugins/linux/block_device.rb +48 -48
  87. data/lib/ohai/plugins/linux/hostnamectl.rb +34 -34
  88. data/lib/ohai/plugins/linux/interrupts.rb +84 -83
  89. data/lib/ohai/plugins/linux/ipc.rb +52 -52
  90. data/lib/ohai/plugins/linux/livepatch.rb +38 -38
  91. data/lib/ohai/plugins/linux/lsb.rb +46 -46
  92. data/lib/ohai/plugins/linux/lspci.rb +80 -80
  93. data/lib/ohai/plugins/linux/machineid.rb +36 -36
  94. data/lib/ohai/plugins/linux/mdadm.rb +120 -120
  95. data/lib/ohai/plugins/linux/memory.rb +106 -106
  96. data/lib/ohai/plugins/linux/network.rb +879 -879
  97. data/lib/ohai/plugins/linux/os_release.rb +38 -38
  98. data/lib/ohai/plugins/linux/platform.rb +314 -314
  99. data/lib/ohai/plugins/linux/selinux.rb +69 -69
  100. data/lib/ohai/plugins/linux/sessions.rb +54 -54
  101. data/lib/ohai/plugins/linux/sysctl.rb +39 -39
  102. data/lib/ohai/plugins/linux/systemd_paths.rb +36 -36
  103. data/lib/ohai/plugins/linux/tc.rb +61 -61
  104. data/lib/ohai/plugins/linux/virtualization.rb +300 -300
  105. data/lib/ohai/plugins/lua.rb +39 -39
  106. data/lib/ohai/plugins/mono.rb +50 -50
  107. data/lib/ohai/plugins/netbsd/memory.rb +99 -99
  108. data/lib/ohai/plugins/netbsd/network.rb +122 -122
  109. data/lib/ohai/plugins/netbsd/platform.rb +28 -28
  110. data/lib/ohai/plugins/network.rb +186 -186
  111. data/lib/ohai/plugins/nodejs.rb +40 -40
  112. data/lib/ohai/plugins/oci.rb +94 -94
  113. data/lib/ohai/plugins/ohai.rb +29 -29
  114. data/lib/ohai/plugins/ohai_time.rb +26 -26
  115. data/lib/ohai/plugins/openbsd/memory.rb +99 -99
  116. data/lib/ohai/plugins/openbsd/network.rb +122 -122
  117. data/lib/ohai/plugins/openbsd/platform.rb +28 -28
  118. data/lib/ohai/plugins/openstack.rb +84 -84
  119. data/lib/ohai/plugins/os.rb +55 -55
  120. data/lib/ohai/plugins/packages.rb +234 -234
  121. data/lib/ohai/plugins/passwd.rb +104 -104
  122. data/lib/ohai/plugins/perl.rb +45 -45
  123. data/lib/ohai/plugins/php.rb +52 -52
  124. data/lib/ohai/plugins/platform.rb +41 -41
  125. data/lib/ohai/plugins/powershell.rb +82 -82
  126. data/lib/ohai/plugins/ps.rb +35 -35
  127. data/lib/ohai/plugins/python.rb +43 -43
  128. data/lib/ohai/plugins/rackspace.rb +177 -177
  129. data/lib/ohai/plugins/root_group.rb +41 -41
  130. data/lib/ohai/plugins/rpm.rb +121 -121
  131. data/lib/ohai/plugins/ruby.rb +66 -66
  132. data/lib/ohai/plugins/rust.rb +34 -34
  133. data/lib/ohai/plugins/scala.rb +38 -38
  134. data/lib/ohai/plugins/scaleway.rb +58 -58
  135. data/lib/ohai/plugins/scsi.rb +52 -52
  136. data/lib/ohai/plugins/shard.rb +142 -142
  137. data/lib/ohai/plugins/shells.rb +32 -32
  138. data/lib/ohai/plugins/softlayer.rb +48 -48
  139. data/lib/ohai/plugins/solaris2/dmi.rb +191 -191
  140. data/lib/ohai/plugins/solaris2/memory.rb +32 -32
  141. data/lib/ohai/plugins/solaris2/network.rb +192 -192
  142. data/lib/ohai/plugins/solaris2/platform.rb +58 -58
  143. data/lib/ohai/plugins/solaris2/virtualization.rb +90 -90
  144. data/lib/ohai/plugins/ssh_host_key.rb +84 -84
  145. data/lib/ohai/plugins/sysconf.rb +46 -46
  146. data/lib/ohai/plugins/timezone.rb +45 -45
  147. data/lib/ohai/plugins/train.rb +35 -35
  148. data/lib/ohai/plugins/uptime.rb +95 -95
  149. data/lib/ohai/plugins/virtualbox.rb +197 -197
  150. data/lib/ohai/plugins/vmware.rb +109 -109
  151. data/lib/ohai/plugins/windows/dmi.rb +95 -95
  152. data/lib/ohai/plugins/windows/drivers.rb +52 -52
  153. data/lib/ohai/plugins/windows/memory.rb +39 -39
  154. data/lib/ohai/plugins/windows/network.rb +222 -222
  155. data/lib/ohai/plugins/windows/platform.rb +34 -34
  156. data/lib/ohai/plugins/windows/system_enclosure.rb +29 -29
  157. data/lib/ohai/plugins/windows/virtualization.rb +45 -45
  158. data/lib/ohai/plugins/zpools.rb +94 -94
  159. data/lib/ohai/provides_map.rb +208 -208
  160. data/lib/ohai/runner.rb +128 -126
  161. data/lib/ohai/system.rb +258 -258
  162. data/lib/ohai/train_transport.rb +29 -29
  163. data/lib/ohai/util/file_helper.rb +6 -6
  164. data/lib/ohai/util/ip_helper.rb +56 -56
  165. data/lib/ohai/util/win32.rb +47 -47
  166. data/lib/ohai/version.rb +23 -23
  167. data/lib/ohai.rb +23 -23
  168. data/ohai.gemspec +35 -35
  169. 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
@@ -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