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,79 +1,79 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Ranjib Dey (<dey.ranjib@gmail.com>)
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
- require "net/http" unless defined?(Net::HTTP)
19
-
20
- require_relative "../mixin/json_helper"
21
- include Ohai::Mixin::JsonHelper
22
-
23
- module Ohai
24
- module Mixin
25
- module GCEMetadata
26
-
27
- # Trailing dot to host is added to avoid DNS search path
28
- GCE_METADATA_ADDR ||= "metadata.google.internal."
29
- GCE_METADATA_URL ||= "/computeMetadata/v1"
30
-
31
- # fetch the meta content with a timeout and the required header
32
- def http_get(uri)
33
- conn = Net::HTTP.start(GCE_METADATA_ADDR)
34
- conn.read_timeout = 6
35
- conn.get(uri, {
36
- "Metadata-Flavor" => "Google",
37
- "User-Agent" => "chef-ohai/#{Ohai::VERSION}",
38
- })
39
- end
40
-
41
- def fetch_metadata(id = "")
42
- url = "#{GCE_METADATA_URL}/#{id}"
43
- url = "#{url}?recursive=true" if url.end_with?("/")
44
- response = http_get(url)
45
- if response.code == "200"
46
- json_data = parse_json(response.body)
47
- if json_data.nil?
48
- logger.warn("Mixin GCEMetadata: Metadata response is NOT valid JSON for id='#{id}'")
49
- if has_trailing_slash?(id) || (id == "")
50
- temp = {}
51
- response.body.split("\n").each do |sub_attr|
52
- temp[sanitize_key(sub_attr)] = fetch_metadata("#{id}#{sub_attr}")
53
- end
54
- temp
55
- else
56
- response.body
57
- end
58
- else
59
- json_data
60
- end
61
- else
62
- logger.warn("Mixin GCEMetadata: Received response code #{response.code} requesting metadata for id='#{id}'")
63
- nil
64
- end
65
- end
66
-
67
- # @param data [String]
68
- #
69
- # @return [Boolean] is there a trailing /?
70
- def has_trailing_slash?(data)
71
- !!( data =~ %r{/$} )
72
- end
73
-
74
- def sanitize_key(key)
75
- key.gsub(%r{\-|/}, "_")
76
- end
77
- end
78
- end
79
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Ranjib Dey (<dey.ranjib@gmail.com>)
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
+ require "net/http" unless defined?(Net::HTTP)
19
+
20
+ require_relative "../mixin/json_helper"
21
+ include Ohai::Mixin::JsonHelper
22
+
23
+ module Ohai
24
+ module Mixin
25
+ module GCEMetadata
26
+
27
+ # Trailing dot to host is added to avoid DNS search path
28
+ GCE_METADATA_ADDR ||= "metadata.google.internal."
29
+ GCE_METADATA_URL ||= "/computeMetadata/v1"
30
+
31
+ # fetch the meta content with a timeout and the required header
32
+ def http_get(uri)
33
+ conn = Net::HTTP.start(GCE_METADATA_ADDR)
34
+ conn.read_timeout = 6
35
+ conn.get(uri, {
36
+ "Metadata-Flavor" => "Google",
37
+ "User-Agent" => "chef-ohai/#{Ohai::VERSION}",
38
+ })
39
+ end
40
+
41
+ def fetch_metadata(id = "")
42
+ url = "#{GCE_METADATA_URL}/#{id}"
43
+ url = "#{url}?recursive=true" if url.end_with?("/")
44
+ response = http_get(url)
45
+ if response.code == "200"
46
+ json_data = parse_json(response.body)
47
+ if json_data.nil?
48
+ logger.warn("Mixin GCEMetadata: Metadata response is NOT valid JSON for id='#{id}'")
49
+ if has_trailing_slash?(id) || (id == "")
50
+ temp = {}
51
+ response.body.split("\n").each do |sub_attr|
52
+ temp[sanitize_key(sub_attr)] = fetch_metadata("#{id}#{sub_attr}")
53
+ end
54
+ temp
55
+ else
56
+ response.body
57
+ end
58
+ else
59
+ json_data
60
+ end
61
+ else
62
+ logger.warn("Mixin GCEMetadata: Received response code #{response.code} requesting metadata for id='#{id}'")
63
+ nil
64
+ end
65
+ end
66
+
67
+ # @param data [String]
68
+ #
69
+ # @return [Boolean] is there a trailing /?
70
+ def has_trailing_slash?(data)
71
+ !!( data =~ %r{/$} )
72
+ end
73
+
74
+ def sanitize_key(key)
75
+ key.gsub(%r{\-|/}, "_")
76
+ end
77
+ end
78
+ end
79
+ end
@@ -1,64 +1,64 @@
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
- require "socket" unless defined?(Socket)
19
-
20
- module Ohai
21
- module Mixin
22
- module HttpHelper
23
-
24
- # see if we can socket connect to an address/port
25
- #
26
- # @param addr [String] the address to connect to
27
- # @param port [Integer] the port to connect to
28
- # @param timeout [Integer] the seconds before timing out
29
- #
30
- # @return [Boolean] can we connect?
31
- def can_socket_connect?(addr, port, timeout = 2)
32
- t = Socket.new(Socket::Constants::AF_INET, Socket::Constants::SOCK_STREAM, 0)
33
- begin
34
- saddr = Socket.pack_sockaddr_in(port, addr)
35
- rescue SocketError => e # generally means dns resolution error
36
- logger.trace("Mixin HttpHelper: can_socket_connect? failed setting up socket connection: #{e}")
37
- return false
38
- end
39
-
40
- connected = false
41
-
42
- begin
43
- t.connect_nonblock(saddr)
44
- rescue Errno::EINPROGRESS
45
- _r, w, _e = IO.select(nil, [t], nil, timeout)
46
- if !w.nil?
47
- connected = true
48
- else
49
- begin
50
- t.connect_nonblock(saddr)
51
- rescue Errno::EISCONN
52
- t.close
53
- connected = true
54
- rescue SystemCallError
55
- end
56
- end
57
- rescue SystemCallError
58
- end
59
- logger.trace("Mixin HttpHelper: can_socket_connect? == #{connected}")
60
- connected
61
- end
62
- end
63
- end
64
- 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
+ require "socket" unless defined?(Socket)
19
+
20
+ module Ohai
21
+ module Mixin
22
+ module HttpHelper
23
+
24
+ # see if we can socket connect to an address/port
25
+ #
26
+ # @param addr [String] the address to connect to
27
+ # @param port [Integer] the port to connect to
28
+ # @param timeout [Integer] the seconds before timing out
29
+ #
30
+ # @return [Boolean] can we connect?
31
+ def can_socket_connect?(addr, port, timeout = 2)
32
+ t = Socket.new(Socket::Constants::AF_INET, Socket::Constants::SOCK_STREAM, 0)
33
+ begin
34
+ saddr = Socket.pack_sockaddr_in(port, addr)
35
+ rescue SocketError => e # generally means dns resolution error
36
+ logger.trace("Mixin HttpHelper: can_socket_connect? failed setting up socket connection: #{e}")
37
+ return false
38
+ end
39
+
40
+ connected = false
41
+
42
+ begin
43
+ t.connect_nonblock(saddr)
44
+ rescue Errno::EINPROGRESS
45
+ _r, w, _e = IO.select(nil, [t], nil, timeout)
46
+ if !w.nil?
47
+ connected = true
48
+ else
49
+ begin
50
+ t.connect_nonblock(saddr)
51
+ rescue Errno::EISCONN
52
+ t.close
53
+ connected = true
54
+ rescue SystemCallError
55
+ end
56
+ end
57
+ rescue SystemCallError
58
+ end
59
+ logger.trace("Mixin HttpHelper: can_socket_connect? == #{connected}")
60
+ connected
61
+ end
62
+ end
63
+ end
64
+ end
@@ -1,36 +1,36 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Renato Covarrubias (<rnt@rnt.cl>)
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
- module Ohai
19
- module Mixin
20
- module JsonHelper
21
- # parse JSON data from a String to a Hash
22
- #
23
- # @param [String] response_body json as string to parse
24
- # @param [Object] return_on_parse_error value to return if parsing fails
25
- #
26
- # @return [Hash]
27
- def parse_json(response_body, return_on_parse_error = nil)
28
- data = String(response_body)
29
- parser = FFI_Yajl::Parser.new
30
- parser.parse(data)
31
- rescue FFI_Yajl::ParseError
32
- return_on_parse_error
33
- end
34
- end
35
- end
36
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Renato Covarrubias (<rnt@rnt.cl>)
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
+ module Ohai
19
+ module Mixin
20
+ module JsonHelper
21
+ # parse JSON data from a String to a Hash
22
+ #
23
+ # @param [String] response_body json as string to parse
24
+ # @param [Object] return_on_parse_error value to return if parsing fails
25
+ #
26
+ # @return [Hash]
27
+ def parse_json(response_body, return_on_parse_error = nil)
28
+ data = String(response_body)
29
+ parser = FFI_Yajl::Parser.new
30
+ parser.parse(data)
31
+ rescue FFI_Yajl::ParseError
32
+ return_on_parse_error
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,92 +1,92 @@
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
- require "socket" unless defined?(Socket)
22
- require "resolv" unless defined?(Resolv)
23
-
24
- module Ohai
25
- module Mixin
26
- module NetworkHelper
27
- unless defined?(FAMILIES)
28
- FAMILIES = {
29
- "inet" => "default",
30
- "inet6" => "default_inet6",
31
- }.freeze
32
- end
33
-
34
- def hex_to_dec_netmask(netmask)
35
- # example 'ffff0000' -> '255.255.0.0'
36
- dec = netmask[0..1].to_i(16).to_s(10)
37
- [2, 4, 6].each { |n| dec = dec + "." + netmask[n..n + 1].to_i(16).to_s(10) }
38
- dec
39
- end
40
-
41
- # Addrinfo#ip*? methods return true on AI_CANONNAME Addrinfo records that match
42
- # the ipv* scheme and #ip? always returns true unless a non tcp Addrinfo
43
- def ip?(hostname)
44
- Resolv::IPv4::Regex.match?(hostname) || Resolv::IPv6::Regex.match?(hostname)
45
- end
46
-
47
- # This does a forward and reverse lookup on the hostname to return what should be
48
- # the FQDN for the host determined by name lookup (generally DNS). If the forward
49
- # lookup fails this will throw. If the reverse lookup fails this will return the
50
- # hostname back. The behavior on failure of the reverse lookup is both vitally important
51
- # to this API, and completely untested, so changes to this method (not recommended) need
52
- # to be manually validated by hand by setting up a DNS server with a broken A record to
53
- # an IP without a PTR record (e.g. any RFC1918 space not served by the configured DNS
54
- # server), and the method should return the hostname and not the IP address.
55
- #
56
- def canonicalize_hostname(hostname)
57
- ai = Addrinfo
58
- .getaddrinfo(hostname, nil, nil, nil, nil, Socket::AI_CANONNAME)
59
- .first
60
-
61
- canonname = ai&.canonname
62
- # use canonname if it's an FQDN
63
- # This API is preferred as it never gives us an IP address for broken DNS
64
- # (see https://github.com/chef/ohai/pull/1705)
65
- # However, we have found that Windows hosts that are not joined to a domain
66
- # can return a non-qualified hostname).
67
- # Use a '.' in the canonname as indicator of FQDN
68
- return canonname if canonname.include?(".")
69
-
70
- # If we got a non-qualified name, then we do a standard reverse resolve
71
- # which, assuming DNS is working, will work around that windows bug
72
- # (and maybe others)
73
- canonname = ai&.getnameinfo&.first
74
- return canonname unless ip?(canonname)
75
-
76
- # if all else fails, return the name we were given as a safety
77
- hostname
78
- end
79
-
80
- def canonicalize_hostname_with_retries(hostname)
81
- retries = 3
82
- begin
83
- canonicalize_hostname(hostname)
84
- rescue
85
- retries -= 1
86
- retry if retries > 0
87
- nil
88
- end
89
- end
90
- end
91
- end
92
- 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
+ require "socket" unless defined?(Socket)
22
+ require "resolv" unless defined?(Resolv)
23
+
24
+ module Ohai
25
+ module Mixin
26
+ module NetworkHelper
27
+ unless defined?(FAMILIES)
28
+ FAMILIES = {
29
+ "inet" => "default",
30
+ "inet6" => "default_inet6",
31
+ }.freeze
32
+ end
33
+
34
+ def hex_to_dec_netmask(netmask)
35
+ # example 'ffff0000' -> '255.255.0.0'
36
+ dec = netmask[0..1].to_i(16).to_s(10)
37
+ [2, 4, 6].each { |n| dec = dec + "." + netmask[n..n + 1].to_i(16).to_s(10) }
38
+ dec
39
+ end
40
+
41
+ # Addrinfo#ip*? methods return true on AI_CANONNAME Addrinfo records that match
42
+ # the ipv* scheme and #ip? always returns true unless a non tcp Addrinfo
43
+ def ip?(hostname)
44
+ Resolv::IPv4::Regex.match?(hostname) || Resolv::IPv6::Regex.match?(hostname)
45
+ end
46
+
47
+ # This does a forward and reverse lookup on the hostname to return what should be
48
+ # the FQDN for the host determined by name lookup (generally DNS). If the forward
49
+ # lookup fails this will throw. If the reverse lookup fails this will return the
50
+ # hostname back. The behavior on failure of the reverse lookup is both vitally important
51
+ # to this API, and completely untested, so changes to this method (not recommended) need
52
+ # to be manually validated by hand by setting up a DNS server with a broken A record to
53
+ # an IP without a PTR record (e.g. any RFC1918 space not served by the configured DNS
54
+ # server), and the method should return the hostname and not the IP address.
55
+ #
56
+ def canonicalize_hostname(hostname)
57
+ ai = Addrinfo
58
+ .getaddrinfo(hostname, nil, nil, nil, nil, Socket::AI_CANONNAME)
59
+ .first
60
+
61
+ canonname = ai&.canonname
62
+ # use canonname if it's an FQDN
63
+ # This API is preferred as it never gives us an IP address for broken DNS
64
+ # (see https://github.com/chef/ohai/pull/1705)
65
+ # However, we have found that Windows hosts that are not joined to a domain
66
+ # can return a non-qualified hostname).
67
+ # Use a '.' in the canonname as indicator of FQDN
68
+ return canonname if canonname.include?(".")
69
+
70
+ # If we got a non-qualified name, then we do a standard reverse resolve
71
+ # which, assuming DNS is working, will work around that windows bug
72
+ # (and maybe others)
73
+ canonname = ai&.getnameinfo&.first
74
+ return canonname unless ip?(canonname)
75
+
76
+ # if all else fails, return the name we were given as a safety
77
+ hostname
78
+ end
79
+
80
+ def canonicalize_hostname_with_retries(hostname)
81
+ retries = 3
82
+ begin
83
+ canonicalize_hostname(hostname)
84
+ rescue
85
+ retries -= 1
86
+ retry if retries > 0
87
+ nil
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -1,60 +1,60 @@
1
- # frozen_string_literal: true
2
-
3
- #
4
- # Author:: Renato Covarrubias (<rnt@rnt.cl>)
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
- module OCIMetadata
27
- OCI_METADATA_ADDR = "169.254.169.254"
28
- OCI_METADATA_URL = "/opc/v2"
29
- CHASSIS_ASSET_TAG_FILE = "/sys/devices/virtual/dmi/id/chassis_asset_tag"
30
-
31
- # fetch the meta content with a timeout and the required header
32
- def http_get(uri)
33
- conn = Net::HTTP.start(OCI_METADATA_ADDR)
34
- conn.read_timeout = 6
35
- conn.get(
36
- uri,
37
- {
38
- "Authorization" => "Bearer Oracle",
39
- "User-Agent" => "chef-ohai/#{Ohai::VERSION}",
40
- }
41
- )
42
- end
43
-
44
- # Fetch metadata from api
45
- def fetch_metadata(metadata = "instance")
46
- response = http_get("#{OCI_METADATA_URL}/#{metadata}")
47
- if response.code == "200"
48
- json_data = parse_json(response.body)
49
- if json_data.nil?
50
- logger.warn("Mixin OciMetadata: Metadata response is NOT valid JSON")
51
- end
52
- json_data
53
- else
54
- logger.warn("Mixin OciMetadata: Received response code #{response.code} requesting metadata")
55
- nil
56
- end
57
- end
58
- end
59
- end
60
- end
1
+ # frozen_string_literal: true
2
+
3
+ #
4
+ # Author:: Renato Covarrubias (<rnt@rnt.cl>)
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
+ module OCIMetadata
27
+ OCI_METADATA_ADDR = "169.254.169.254"
28
+ OCI_METADATA_URL = "/opc/v2"
29
+ CHASSIS_ASSET_TAG_FILE = "/sys/devices/virtual/dmi/id/chassis_asset_tag"
30
+
31
+ # fetch the meta content with a timeout and the required header
32
+ def http_get(uri)
33
+ conn = Net::HTTP.start(OCI_METADATA_ADDR)
34
+ conn.read_timeout = 6
35
+ conn.get(
36
+ uri,
37
+ {
38
+ "Authorization" => "Bearer Oracle",
39
+ "User-Agent" => "chef-ohai/#{Ohai::VERSION}",
40
+ }
41
+ )
42
+ end
43
+
44
+ # Fetch metadata from api
45
+ def fetch_metadata(metadata = "instance")
46
+ response = http_get("#{OCI_METADATA_URL}/#{metadata}")
47
+ if response.code == "200"
48
+ json_data = parse_json(response.body)
49
+ if json_data.nil?
50
+ logger.warn("Mixin OciMetadata: Metadata response is NOT valid JSON")
51
+ end
52
+ json_data
53
+ else
54
+ logger.warn("Mixin OciMetadata: Received response code #{response.code} requesting metadata")
55
+ nil
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end