ohai 18.0.26 → 18.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) 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 +86 -86
  17. data/lib/ohai/mixin/azure_metadata.rb +111 -111
  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 +256 -256
  24. data/lib/ohai/mixin/gce_metadata.rb +83 -83
  25. data/lib/ohai/mixin/http_helper.rb +64 -64
  26. data/lib/ohai/mixin/network_helper.rb +65 -65
  27. data/lib/ohai/mixin/oci_metadata.rb +69 -0
  28. data/lib/ohai/mixin/os.rb +128 -128
  29. data/lib/ohai/mixin/scaleway_metadata.rb +51 -51
  30. data/lib/ohai/mixin/seconds_to_human.rb +52 -52
  31. data/lib/ohai/mixin/shell_out.rb +51 -51
  32. data/lib/ohai/mixin/softlayer_metadata.rb +74 -74
  33. data/lib/ohai/mixin/string.rb +31 -31
  34. data/lib/ohai/mixin/train_helpers.rb +36 -36
  35. data/lib/ohai/mixin/which.rb +39 -39
  36. data/lib/ohai/plugin_config.rb +47 -47
  37. data/lib/ohai/plugins/aix/kernel.rb +50 -50
  38. data/lib/ohai/plugins/aix/memory.rb +37 -37
  39. data/lib/ohai/plugins/aix/network.rb +142 -142
  40. data/lib/ohai/plugins/aix/platform.rb +30 -30
  41. data/lib/ohai/plugins/aix/uptime.rb +54 -54
  42. data/lib/ohai/plugins/aix/virtualization.rb +154 -154
  43. data/lib/ohai/plugins/alibaba.rb +72 -72
  44. data/lib/ohai/plugins/azure.rb +154 -154
  45. data/lib/ohai/plugins/bsd/virtualization.rb +121 -121
  46. data/lib/ohai/plugins/c.rb +178 -178
  47. data/lib/ohai/plugins/chef.rb +50 -50
  48. data/lib/ohai/plugins/cloud.rb +379 -357
  49. data/lib/ohai/plugins/command.rb +26 -26
  50. data/lib/ohai/plugins/cpu.rb +635 -635
  51. data/lib/ohai/plugins/darwin/hardware.rb +99 -99
  52. data/lib/ohai/plugins/darwin/memory.rb +62 -62
  53. data/lib/ohai/plugins/darwin/network.rb +207 -207
  54. data/lib/ohai/plugins/darwin/platform.rb +38 -38
  55. data/lib/ohai/plugins/darwin/virtualization.rb +90 -93
  56. data/lib/ohai/plugins/digital_ocean.rb +67 -67
  57. data/lib/ohai/plugins/dmi.rb +134 -134
  58. data/lib/ohai/plugins/docker.rb +58 -58
  59. data/lib/ohai/plugins/dragonflybsd/memory.rb +60 -60
  60. data/lib/ohai/plugins/dragonflybsd/network.rb +128 -128
  61. data/lib/ohai/plugins/dragonflybsd/platform.rb +28 -28
  62. data/lib/ohai/plugins/ec2.rb +148 -148
  63. data/lib/ohai/plugins/elixir.rb +36 -36
  64. data/lib/ohai/plugins/erlang.rb +60 -60
  65. data/lib/ohai/plugins/eucalyptus.rb +86 -86
  66. data/lib/ohai/plugins/filesystem.rb +751 -751
  67. data/lib/ohai/plugins/fips.rb +36 -36
  68. data/lib/ohai/plugins/freebsd/memory.rb +60 -60
  69. data/lib/ohai/plugins/freebsd/network.rb +128 -128
  70. data/lib/ohai/plugins/freebsd/platform.rb +28 -28
  71. data/lib/ohai/plugins/gce.rb +89 -89
  72. data/lib/ohai/plugins/go.rb +34 -34
  73. data/lib/ohai/plugins/groovy.rb +38 -38
  74. data/lib/ohai/plugins/grub2.rb +40 -40
  75. data/lib/ohai/plugins/habitat.rb +73 -73
  76. data/lib/ohai/plugins/haskell.rb +96 -96
  77. data/lib/ohai/plugins/hostname.rb +133 -133
  78. data/lib/ohai/plugins/init_package.rb +26 -26
  79. data/lib/ohai/plugins/java.rb +78 -78
  80. data/lib/ohai/plugins/kernel.rb +292 -292
  81. data/lib/ohai/plugins/keys.rb +27 -27
  82. data/lib/ohai/plugins/languages.rb +26 -26
  83. data/lib/ohai/plugins/libvirt.rb +114 -114
  84. data/lib/ohai/plugins/linode.rb +73 -73
  85. data/lib/ohai/plugins/linux/block_device.rb +48 -48
  86. data/lib/ohai/plugins/linux/hostnamectl.rb +34 -34
  87. data/lib/ohai/plugins/linux/interrupts.rb +84 -84
  88. data/lib/ohai/plugins/linux/ipc.rb +52 -52
  89. data/lib/ohai/plugins/linux/livepatch.rb +38 -38
  90. data/lib/ohai/plugins/linux/lsb.rb +46 -46
  91. data/lib/ohai/plugins/linux/lspci.rb +76 -76
  92. data/lib/ohai/plugins/linux/machineid.rb +36 -36
  93. data/lib/ohai/plugins/linux/mdadm.rb +120 -120
  94. data/lib/ohai/plugins/linux/memory.rb +106 -106
  95. data/lib/ohai/plugins/linux/network.rb +879 -879
  96. data/lib/ohai/plugins/linux/os_release.rb +38 -38
  97. data/lib/ohai/plugins/linux/platform.rb +314 -314
  98. data/lib/ohai/plugins/linux/selinux.rb +69 -69
  99. data/lib/ohai/plugins/linux/sessions.rb +54 -54
  100. data/lib/ohai/plugins/linux/sysctl.rb +39 -39
  101. data/lib/ohai/plugins/linux/systemd_paths.rb +36 -36
  102. data/lib/ohai/plugins/linux/tc.rb +61 -61
  103. data/lib/ohai/plugins/linux/virtualization.rb +300 -300
  104. data/lib/ohai/plugins/lua.rb +39 -39
  105. data/lib/ohai/plugins/mono.rb +50 -50
  106. data/lib/ohai/plugins/netbsd/memory.rb +99 -99
  107. data/lib/ohai/plugins/netbsd/network.rb +122 -122
  108. data/lib/ohai/plugins/netbsd/platform.rb +28 -28
  109. data/lib/ohai/plugins/network.rb +186 -186
  110. data/lib/ohai/plugins/nodejs.rb +40 -40
  111. data/lib/ohai/plugins/oci.rb +94 -0
  112. data/lib/ohai/plugins/ohai.rb +29 -29
  113. data/lib/ohai/plugins/ohai_time.rb +26 -26
  114. data/lib/ohai/plugins/openbsd/memory.rb +99 -99
  115. data/lib/ohai/plugins/openbsd/network.rb +122 -122
  116. data/lib/ohai/plugins/openbsd/platform.rb +28 -28
  117. data/lib/ohai/plugins/openstack.rb +84 -84
  118. data/lib/ohai/plugins/os.rb +55 -55
  119. data/lib/ohai/plugins/packages.rb +234 -234
  120. data/lib/ohai/plugins/passwd.rb +104 -104
  121. data/lib/ohai/plugins/perl.rb +45 -45
  122. data/lib/ohai/plugins/php.rb +52 -52
  123. data/lib/ohai/plugins/platform.rb +29 -29
  124. data/lib/ohai/plugins/powershell.rb +82 -82
  125. data/lib/ohai/plugins/ps.rb +35 -35
  126. data/lib/ohai/plugins/python.rb +43 -43
  127. data/lib/ohai/plugins/rackspace.rb +177 -177
  128. data/lib/ohai/plugins/root_group.rb +41 -41
  129. data/lib/ohai/plugins/rpm.rb +121 -121
  130. data/lib/ohai/plugins/ruby.rb +66 -66
  131. data/lib/ohai/plugins/rust.rb +34 -34
  132. data/lib/ohai/plugins/scala.rb +38 -38
  133. data/lib/ohai/plugins/scaleway.rb +58 -58
  134. data/lib/ohai/plugins/scsi.rb +52 -52
  135. data/lib/ohai/plugins/shard.rb +142 -142
  136. data/lib/ohai/plugins/shells.rb +32 -32
  137. data/lib/ohai/plugins/softlayer.rb +48 -48
  138. data/lib/ohai/plugins/solaris2/dmi.rb +191 -191
  139. data/lib/ohai/plugins/solaris2/memory.rb +32 -32
  140. data/lib/ohai/plugins/solaris2/network.rb +192 -192
  141. data/lib/ohai/plugins/solaris2/platform.rb +58 -58
  142. data/lib/ohai/plugins/solaris2/virtualization.rb +90 -90
  143. data/lib/ohai/plugins/ssh_host_key.rb +84 -84
  144. data/lib/ohai/plugins/sysconf.rb +46 -46
  145. data/lib/ohai/plugins/timezone.rb +45 -25
  146. data/lib/ohai/plugins/train.rb +35 -35
  147. data/lib/ohai/plugins/uptime.rb +95 -95
  148. data/lib/ohai/plugins/virtualbox.rb +197 -197
  149. data/lib/ohai/plugins/vmware.rb +109 -94
  150. data/lib/ohai/plugins/windows/dmi.rb +95 -95
  151. data/lib/ohai/plugins/windows/drivers.rb +52 -52
  152. data/lib/ohai/plugins/windows/memory.rb +39 -39
  153. data/lib/ohai/plugins/windows/network.rb +222 -222
  154. data/lib/ohai/plugins/windows/platform.rb +34 -34
  155. data/lib/ohai/plugins/windows/system_enclosure.rb +29 -29
  156. data/lib/ohai/plugins/windows/virtualization.rb +45 -45
  157. data/lib/ohai/plugins/zpools.rb +94 -94
  158. data/lib/ohai/provides_map.rb +208 -208
  159. data/lib/ohai/runner.rb +128 -128
  160. data/lib/ohai/system.rb +258 -258
  161. data/lib/ohai/train_transport.rb +29 -29
  162. data/lib/ohai/util/file_helper.rb +6 -6
  163. data/lib/ohai/util/ip_helper.rb +56 -56
  164. data/lib/ohai/util/win32.rb +47 -47
  165. data/lib/ohai/version.rb +23 -23
  166. data/lib/ohai.rb +23 -23
  167. data/ohai.gemspec +35 -35
  168. metadata +5 -3
@@ -1,28 +1,28 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Bryan McLellan (btm@loftninjas.org)
4
- # Copyright:: Copyright (c) 2009 Bryan McLellan
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
-
20
- Ohai.plugin(:Platform) do
21
- provides "platform", "platform_version", "platform_family"
22
-
23
- collect_data(:netbsd) do
24
- platform shell_out("uname -s").stdout.strip.downcase
25
- platform_version shell_out("uname -r").stdout.strip
26
- platform_family "netbsd"
27
- end
28
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Bryan McLellan (btm@loftninjas.org)
4
+ # Copyright:: Copyright (c) 2009 Bryan McLellan
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
+
20
+ Ohai.plugin(:Platform) do
21
+ provides "platform", "platform_version", "platform_family"
22
+
23
+ collect_data(:netbsd) do
24
+ platform shell_out("uname -s").stdout.strip.downcase
25
+ platform_version shell_out("uname -r").stdout.strip
26
+ platform_family "netbsd"
27
+ end
28
+ end
@@ -1,186 +1,186 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Adam Jacob (<adam@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
-
20
- Ohai.plugin(:NetworkAddresses) do
21
- require_relative "../mixin/network_helper"
22
- include Ohai::Mixin::NetworkHelper
23
-
24
- provides "ipaddress", "ip6address", "macaddress"
25
-
26
- depends "network/interfaces"
27
-
28
- # from interface data create array of hashes with ipaddress, scope, and iface
29
- # sorted by scope, prefixlen and then ipaddress where longest prefixes first
30
- def sorted_ips(family = "inet")
31
- raise "bad family #{family}" unless %w{inet inet6}.include? family
32
-
33
- # priority of ipv6 link scopes to sort by later
34
- scope_prio = [ "global", "site", "link", "host", "node", nil ]
35
-
36
- # grab ipaddress, scope, and iface for sorting later
37
- ipaddresses = []
38
- Mash[network["interfaces"]].each do |iface, iface_v|
39
- next if iface_v.nil? || !iface_v.key?("addresses")
40
-
41
- iface_v["addresses"].each do |addr, addr_v|
42
- next if addr_v.nil? || (!addr_v.key? "family") || addr_v["family"] != family
43
-
44
- ipaddresses << {
45
- ipaddress: addr_v["prefixlen"] ? IPAddress("#{addr}/#{addr_v["prefixlen"]}") : IPAddress("#{addr}/#{addr_v["netmask"]}"),
46
- scope: addr_v["scope"].nil? ? nil : addr_v["scope"].downcase,
47
- iface: iface,
48
- }
49
- end
50
- end
51
-
52
- # sort ip addresses by scope, by prefixlen and then by ip address
53
- # 128 - prefixlen: longest prefixes first
54
- ipaddresses.sort_by do |v|
55
- [ ( scope_prio.index(v[:scope]) || 999999 ),
56
- 128 - v[:ipaddress].prefix.to_i,
57
- v[:ipaddress].to_i,
58
- ]
59
- end
60
- end
61
-
62
- # finds ip address / interface for interface with default route based on
63
- # passed in family. returns [ipaddress, interface] uses 1st ip if no default
64
- # route is found
65
- def find_ip(family = "inet")
66
- ips = sorted_ips(family)
67
-
68
- # return if there aren't any #{family} addresses!
69
- return [ nil, nil ] if ips.empty?
70
-
71
- # shortcuts to access default #{family} interface and gateway
72
- int_attr = Ohai::Mixin::NetworkHelper::FAMILIES[family] + "_interface"
73
- gw_attr = Ohai::Mixin::NetworkHelper::FAMILIES[family] + "_gateway"
74
-
75
- if network[int_attr]
76
- # working with the address(es) of the default network interface
77
- gw_if_ips = ips.select do |v|
78
- v[:iface] == network[int_attr]
79
- end
80
- if gw_if_ips.empty?
81
- logger.warn("Plugin Network: [#{family}] no ip address on #{network[int_attr]}")
82
- elsif network[gw_attr] &&
83
- network["interfaces"][network[int_attr]] &&
84
- network["interfaces"][network[int_attr]]["addresses"]
85
- if [ "0.0.0.0", "::", /^fe80:/ ].any? { |pat| pat === network[gw_attr] } # rubocop: disable Performance/RedundantEqualityComparisonBlock
86
- # link level default route
87
- logger.trace("Plugin Network: link level default #{family} route, picking ip from #{network[gw_attr]}")
88
- r = gw_if_ips.first
89
- else
90
- # checking network masks
91
- r = gw_if_ips.find do |v|
92
- network_contains_address(network[gw_attr], v[:ipaddress], v[:iface])
93
- end
94
- if r.nil?
95
- r = gw_if_ips.first
96
- logger.trace("Plugin Network: [#{family}] no ipaddress/mask on #{network[int_attr]} matching the gateway #{network[gw_attr]}, picking #{r[:ipaddress]}")
97
- else
98
- logger.trace("Plugin Network: [#{family}] Using default interface #{network[int_attr]} and default gateway #{network[gw_attr]} to set the default ip to #{r[:ipaddress]}")
99
- end
100
- end
101
- else
102
- # return the first ip address on network[int_attr]
103
- r = gw_if_ips.first
104
- end
105
- else
106
- r = ips.first
107
- logger.trace("Plugin Network: [#{family}] no default interface, picking the first ipaddress")
108
- end
109
-
110
- return [ nil, nil ] if r.nil? || r.empty?
111
-
112
- [ r[:ipaddress].to_s, r[:iface] ]
113
- end
114
-
115
- # select mac address of first interface with family of lladdr
116
- def find_mac_from_iface(iface)
117
- r = network["interfaces"][iface]["addresses"].select { |k, v| v["family"] == "lladdr" }
118
- r.nil? || r.first.nil? ? nil : r.first.first
119
- end
120
-
121
- # address_to_match: String
122
- # ipaddress: IPAddress
123
- # iface: String
124
- def network_contains_address(address_to_match, ipaddress, iface)
125
- if ( peer = network["interfaces"][iface]["addresses"][ipaddress.to_s][:peer] )
126
- IPAddress(peer) == IPAddress(address_to_match)
127
- else
128
- ipaddress.include? IPAddress(address_to_match)
129
- end
130
- end
131
-
132
- # ipaddress, ip6address and macaddress are set for each interface by the
133
- # #{os}::network plugin. atm it is expected macaddress is set at the same
134
- # time as ipaddress. if ipaddress is set and macaddress is nil, that means
135
- # the interface ipaddress is bound to has the NOARP flag
136
- collect_data do
137
- require "ipaddress" unless defined?(IPAddress)
138
-
139
- results = {}
140
-
141
- network Mash.new unless network
142
- network[:interfaces] ||= Mash.new
143
- counters Mash.new unless counters
144
- counters[:network] ||= Mash.new
145
-
146
- # inet family is processed before inet6 to give ipv4 precedence
147
- Ohai::Mixin::NetworkHelper::FAMILIES.keys.sort.each do |family|
148
- r = {}
149
- # find the ip/interface with the default route for this family
150
- (r["ip"], r["iface"]) = find_ip(family)
151
- r["mac"] = find_mac_from_iface(r["iface"]) unless r["iface"].nil?
152
- # don't overwrite attributes if they've already been set by the "#{os}::network" plugin
153
- if (family == "inet") && ipaddress.nil?
154
- if r["ip"].nil?
155
- logger.warn("Plugin Network: unable to detect ipaddress")
156
- else
157
- ipaddress r["ip"]
158
- end
159
- elsif (family == "inet6") && ip6address.nil?
160
- if r["ip"].nil?
161
- logger.trace("Plugin Network: unable to detect ip6address")
162
- else
163
- ip6address r["ip"]
164
- end
165
- end
166
-
167
- # set the macaddress [only if we haven't already]. this allows the #{os}::network plugin to set macaddress
168
- # otherwise we set macaddress on a first-found basis (and we started with ipv4)
169
- if macaddress.nil?
170
- if r["mac"]
171
- logger.trace("Plugin Network: setting macaddress to '#{r["mac"]}' from interface '#{r["iface"]}' for family '#{family}'")
172
- macaddress r["mac"]
173
- else
174
- logger.trace("Plugin Network: unable to detect macaddress for family '#{family}'")
175
- end
176
- end
177
-
178
- results[family] = r
179
- end
180
-
181
- if results["inet"]["iface"] && results["inet6"]["iface"] &&
182
- (results["inet"]["iface"] != results["inet6"]["iface"])
183
- logger.trace("Plugin Network: ipaddress and ip6address are set from different interfaces (#{results["inet"]["iface"]} & #{results["inet6"]["iface"]})")
184
- end
185
- end
186
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Adam Jacob (<adam@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
+
20
+ Ohai.plugin(:NetworkAddresses) do
21
+ require_relative "../mixin/network_helper"
22
+ include Ohai::Mixin::NetworkHelper
23
+
24
+ provides "ipaddress", "ip6address", "macaddress"
25
+
26
+ depends "network/interfaces"
27
+
28
+ # from interface data create array of hashes with ipaddress, scope, and iface
29
+ # sorted by scope, prefixlen and then ipaddress where longest prefixes first
30
+ def sorted_ips(family = "inet")
31
+ raise "bad family #{family}" unless %w{inet inet6}.include? family
32
+
33
+ # priority of ipv6 link scopes to sort by later
34
+ scope_prio = [ "global", "site", "link", "host", "node", nil ]
35
+
36
+ # grab ipaddress, scope, and iface for sorting later
37
+ ipaddresses = []
38
+ Mash[network["interfaces"]].each do |iface, iface_v|
39
+ next if iface_v.nil? || !iface_v.key?("addresses")
40
+
41
+ iface_v["addresses"].each do |addr, addr_v|
42
+ next if addr_v.nil? || (!addr_v.key? "family") || addr_v["family"] != family
43
+
44
+ ipaddresses << {
45
+ ipaddress: addr_v["prefixlen"] ? IPAddress("#{addr}/#{addr_v["prefixlen"]}") : IPAddress("#{addr}/#{addr_v["netmask"]}"),
46
+ scope: addr_v["scope"].nil? ? nil : addr_v["scope"].downcase,
47
+ iface: iface,
48
+ }
49
+ end
50
+ end
51
+
52
+ # sort ip addresses by scope, by prefixlen and then by ip address
53
+ # 128 - prefixlen: longest prefixes first
54
+ ipaddresses.sort_by do |v|
55
+ [ ( scope_prio.index(v[:scope]) || 999999 ),
56
+ 128 - v[:ipaddress].prefix.to_i,
57
+ v[:ipaddress].to_i,
58
+ ]
59
+ end
60
+ end
61
+
62
+ # finds ip address / interface for interface with default route based on
63
+ # passed in family. returns [ipaddress, interface] uses 1st ip if no default
64
+ # route is found
65
+ def find_ip(family = "inet")
66
+ ips = sorted_ips(family)
67
+
68
+ # return if there aren't any #{family} addresses!
69
+ return [ nil, nil ] if ips.empty?
70
+
71
+ # shortcuts to access default #{family} interface and gateway
72
+ int_attr = Ohai::Mixin::NetworkHelper::FAMILIES[family] + "_interface"
73
+ gw_attr = Ohai::Mixin::NetworkHelper::FAMILIES[family] + "_gateway"
74
+
75
+ if network[int_attr]
76
+ # working with the address(es) of the default network interface
77
+ gw_if_ips = ips.select do |v|
78
+ v[:iface] == network[int_attr]
79
+ end
80
+ if gw_if_ips.empty?
81
+ logger.warn("Plugin Network: [#{family}] no ip address on #{network[int_attr]}")
82
+ elsif network[gw_attr] &&
83
+ network["interfaces"][network[int_attr]] &&
84
+ network["interfaces"][network[int_attr]]["addresses"]
85
+ if [ "0.0.0.0", "::", /^fe80:/ ].any? { |pat| pat === network[gw_attr] } # rubocop: disable Performance/RedundantEqualityComparisonBlock
86
+ # link level default route
87
+ logger.trace("Plugin Network: link level default #{family} route, picking ip from #{network[gw_attr]}")
88
+ r = gw_if_ips.first
89
+ else
90
+ # checking network masks
91
+ r = gw_if_ips.find do |v|
92
+ network_contains_address(network[gw_attr], v[:ipaddress], v[:iface])
93
+ end
94
+ if r.nil?
95
+ r = gw_if_ips.first
96
+ logger.trace("Plugin Network: [#{family}] no ipaddress/mask on #{network[int_attr]} matching the gateway #{network[gw_attr]}, picking #{r[:ipaddress]}")
97
+ else
98
+ logger.trace("Plugin Network: [#{family}] Using default interface #{network[int_attr]} and default gateway #{network[gw_attr]} to set the default ip to #{r[:ipaddress]}")
99
+ end
100
+ end
101
+ else
102
+ # return the first ip address on network[int_attr]
103
+ r = gw_if_ips.first
104
+ end
105
+ else
106
+ r = ips.first
107
+ logger.trace("Plugin Network: [#{family}] no default interface, picking the first ipaddress")
108
+ end
109
+
110
+ return [ nil, nil ] if r.nil? || r.empty?
111
+
112
+ [ r[:ipaddress].to_s, r[:iface] ]
113
+ end
114
+
115
+ # select mac address of first interface with family of lladdr
116
+ def find_mac_from_iface(iface)
117
+ r = network["interfaces"][iface]["addresses"].select { |k, v| v["family"] == "lladdr" }
118
+ r.nil? || r.first.nil? ? nil : r.first.first
119
+ end
120
+
121
+ # address_to_match: String
122
+ # ipaddress: IPAddress
123
+ # iface: String
124
+ def network_contains_address(address_to_match, ipaddress, iface)
125
+ if ( peer = network["interfaces"][iface]["addresses"][ipaddress.to_s][:peer] )
126
+ IPAddress(peer) == IPAddress(address_to_match)
127
+ else
128
+ ipaddress.include? IPAddress(address_to_match)
129
+ end
130
+ end
131
+
132
+ # ipaddress, ip6address and macaddress are set for each interface by the
133
+ # #{os}::network plugin. atm it is expected macaddress is set at the same
134
+ # time as ipaddress. if ipaddress is set and macaddress is nil, that means
135
+ # the interface ipaddress is bound to has the NOARP flag
136
+ collect_data do
137
+ require "ipaddress" unless defined?(IPAddress)
138
+
139
+ results = {}
140
+
141
+ network Mash.new unless network
142
+ network[:interfaces] ||= Mash.new
143
+ counters Mash.new unless counters
144
+ counters[:network] ||= Mash.new
145
+
146
+ # inet family is processed before inet6 to give ipv4 precedence
147
+ Ohai::Mixin::NetworkHelper::FAMILIES.keys.sort.each do |family|
148
+ r = {}
149
+ # find the ip/interface with the default route for this family
150
+ (r["ip"], r["iface"]) = find_ip(family)
151
+ r["mac"] = find_mac_from_iface(r["iface"]) unless r["iface"].nil?
152
+ # don't overwrite attributes if they've already been set by the "#{os}::network" plugin
153
+ if (family == "inet") && ipaddress.nil?
154
+ if r["ip"].nil?
155
+ logger.warn("Plugin Network: unable to detect ipaddress")
156
+ else
157
+ ipaddress r["ip"]
158
+ end
159
+ elsif (family == "inet6") && ip6address.nil?
160
+ if r["ip"].nil?
161
+ logger.trace("Plugin Network: unable to detect ip6address")
162
+ else
163
+ ip6address r["ip"]
164
+ end
165
+ end
166
+
167
+ # set the macaddress [only if we haven't already]. this allows the #{os}::network plugin to set macaddress
168
+ # otherwise we set macaddress on a first-found basis (and we started with ipv4)
169
+ if macaddress.nil?
170
+ if r["mac"]
171
+ logger.trace("Plugin Network: setting macaddress to '#{r["mac"]}' from interface '#{r["iface"]}' for family '#{family}'")
172
+ macaddress r["mac"]
173
+ else
174
+ logger.trace("Plugin Network: unable to detect macaddress for family '#{family}'")
175
+ end
176
+ end
177
+
178
+ results[family] = r
179
+ end
180
+
181
+ if results["inet"]["iface"] && results["inet6"]["iface"] &&
182
+ (results["inet"]["iface"] != results["inet6"]["iface"])
183
+ logger.trace("Plugin Network: ipaddress and ip6address are set from different interfaces (#{results["inet"]["iface"]} & #{results["inet6"]["iface"]})")
184
+ end
185
+ end
186
+ end
@@ -1,40 +1,40 @@
1
- #
2
- # Author:: Jacques Marneweck (<jacques@powertrip.co.za>)
3
- # Copyright:: Copyright (c) 2012 Jacques Marneweck. All rights reserved.
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
- Ohai.plugin(:Nodejs) do
20
- provides "languages/nodejs"
21
- depends "languages".freeze
22
-
23
- collect_data do
24
-
25
- so = shell_out("node -v")
26
- # Sample output:
27
- # v5.10.1
28
- if so.exitstatus == 0
29
- nodejs = Mash.new
30
- output = so.stdout.split
31
- if output.length >= 1
32
- nodejs[:version] = output[0][1..output[0].length]
33
- end
34
- languages[:nodejs] = nodejs if nodejs[:version]
35
- end
36
- rescue Ohai::Exceptions::Exec
37
- logger.trace('Plugin Nodejs: Could not shell_out "node -v". Skipping plugin')
38
-
39
- end
40
- end
1
+ #
2
+ # Author:: Jacques Marneweck (<jacques@powertrip.co.za>)
3
+ # Copyright:: Copyright (c) 2012 Jacques Marneweck. All rights reserved.
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
+ Ohai.plugin(:Nodejs) do
20
+ provides "languages/nodejs"
21
+ depends "languages".freeze
22
+
23
+ collect_data do
24
+
25
+ so = shell_out("node -v")
26
+ # Sample output:
27
+ # v5.10.1
28
+ if so.exitstatus == 0
29
+ nodejs = Mash.new
30
+ output = so.stdout.split
31
+ if output.length >= 1
32
+ nodejs[:version] = output[0][1..output[0].length]
33
+ end
34
+ languages[:nodejs] = nodejs if nodejs[:version]
35
+ end
36
+ rescue Ohai::Exceptions::Exec
37
+ logger.trace('Plugin Nodejs: Could not shell_out "node -v". Skipping plugin')
38
+
39
+ end
40
+ end
@@ -0,0 +1,94 @@
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
+
20
+ Ohai.plugin(:Oci) do
21
+ require_relative "../mixin/oci_metadata"
22
+ require_relative "../mixin/http_helper"
23
+
24
+ include Ohai::Mixin::OCIMetadata
25
+ include Ohai::Mixin::HttpHelper
26
+
27
+ provides "oci"
28
+
29
+ collect_data do
30
+ oci_metadata_from_hints = hint?("oci")
31
+ if oci_metadata_from_hints
32
+ logger.trace("Plugin OCI: oci hint is present. Parsing any hint data.")
33
+ oci Mash.new
34
+ oci_metadata_from_hints.each { |k, v| oci[k] = v }
35
+ oci["metadata"] = parse_metadata
36
+ elsif oci_chassis_asset_tag?
37
+ logger.trace("Plugin oci: No hints present, but system appears to be on oci.")
38
+ oci Mash.new
39
+ oci["metadata"] = parse_metadata
40
+ else
41
+ logger.trace("Plugin oci: No hints present and doesn't appear to be on oci.")
42
+ false
43
+ end
44
+ end
45
+
46
+ def oci_chassis_asset_tag?
47
+ has_oci_chassis_asset_tag = false
48
+ if file_exist?(Ohai::Mixin::OCIMetadata::CHASSIS_ASSET_TAG_FILE)
49
+ file_open(Ohai::Mixin::OCIMetadata::CHASSIS_ASSET_TAG_FILE).each do |line|
50
+ next unless /OracleCloud.com/.match?(line)
51
+
52
+ logger.trace("Plugin oci: Found OracleCloud.com chassis_asset_tag used by oci.")
53
+ has_oci_chassis_asset_tag = true
54
+ break
55
+ end
56
+ end
57
+ has_oci_chassis_asset_tag
58
+ end
59
+
60
+ def parse_metadata
61
+ return nil unless can_socket_connect?(Ohai::Mixin::OCIMetadata::OCI_METADATA_ADDR, 80)
62
+
63
+ instance_data = fetch_metadata("instance")
64
+ return nil if instance_data.nil?
65
+
66
+ metadata = Mash.new
67
+ metadata["compute"] = Mash.new
68
+
69
+ instance_data.each do |k, v|
70
+ metadata["compute"][k] = v
71
+ end
72
+
73
+ vnics_data = fetch_metadata("vnics")
74
+
75
+ unless vnics_data.nil?
76
+ metadata["network"] = Mash.new
77
+ metadata["network"]["interface"] = []
78
+ vnics_data.each do |v|
79
+ metadata["network"]["interface"].append(v)
80
+ end
81
+ end
82
+
83
+ volume_attachments_data = fetch_metadata("volumeAttachments")
84
+
85
+ unless volume_attachments_data.nil?
86
+ metadata["volumes"] = Mash.new
87
+ volume_attachments_data.each do |k, v|
88
+ metadata["volumes"][k] = v
89
+ end
90
+ end
91
+
92
+ metadata
93
+ end
94
+ end
@@ -1,29 +1,29 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Tollef Fog Heen <tfheen@err.no>
4
- # Copyright:: Copyright (c) 2010 Tollef Fog Heen
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
-
20
- Ohai.plugin(:Ohai) do
21
- provides "chef_packages/ohai"
22
-
23
- collect_data do
24
- chef_packages Mash.new unless chef_packages
25
- chef_packages[:ohai] = Mash.new
26
- chef_packages[:ohai][:version] = Ohai::VERSION
27
- chef_packages[:ohai][:ohai_root] = Ohai::OHAI_ROOT
28
- end
29
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Tollef Fog Heen <tfheen@err.no>
4
+ # Copyright:: Copyright (c) 2010 Tollef Fog Heen
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
+
20
+ Ohai.plugin(:Ohai) do
21
+ provides "chef_packages/ohai"
22
+
23
+ collect_data do
24
+ chef_packages Mash.new unless chef_packages
25
+ chef_packages[:ohai] = Mash.new
26
+ chef_packages[:ohai][:version] = Ohai::VERSION
27
+ chef_packages[:ohai][:ohai_root] = Ohai::OHAI_ROOT
28
+ end
29
+ end