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,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