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,207 +1,207 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Benjamin Black (<bb@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(:Network) do
21
- require_relative "../../mixin/network_helper"
22
-
23
- provides "network", "network/interfaces"
24
- provides "counters/network", "counters/network/interfaces"
25
-
26
- include Ohai::Mixin::NetworkHelper
27
-
28
- def parse_media(media_string)
29
- media = {}
30
- line_array = media_string.split
31
-
32
- 0.upto(line_array.length - 1) do |i|
33
- unless line_array[i].eql?("none")
34
-
35
- if line_array[i + 1] =~ /^\<([a-zA-Z\-\,]+)\>$/
36
- media[line_array[i]] = {} unless media.key?(line_array[i])
37
- if media[line_array[i]].key?("options")
38
- $1.split(",").each do |opt|
39
- media[line_array[i]]["options"] << opt unless media[line_array[i]]["options"].include?(opt)
40
- end
41
- else
42
- media[line_array[i]]["options"] = $1.split(",")
43
- end
44
- elsif line_array[i].eql?("autoselect")
45
- media["autoselect"] = {} unless media.key?("autoselect")
46
- media["autoselect"]["options"] = []
47
- end
48
- else
49
- media["none"] = { "options" => [] }
50
- end
51
- end
52
-
53
- media
54
- end
55
-
56
- def darwin_encaps_lookup(ifname)
57
- return "Loopback" if ifname.eql?("lo")
58
- return "1394" if ifname.eql?("fw")
59
- return "IPIP" if ifname.eql?("gif")
60
- return "6to4" if ifname.eql?("stf")
61
- return "dot1q" if ifname.eql?("vlan")
62
-
63
- "Unknown"
64
- end
65
-
66
- def scope_lookup(scope)
67
- return "Node" if scope.eql?("::1")
68
- return "Link" if /^fe80\:/.match?(scope)
69
- return "Site" if /^fec0\:/.match?(scope)
70
-
71
- "Global"
72
- end
73
-
74
- def excluded_setting?(setting)
75
- setting.match("_sw_cksum")
76
- end
77
-
78
- def locate_interface(ifaces, ifname, mac)
79
- return ifname unless ifaces[ifname].nil?
80
- # oh well, time to go hunting!
81
- return ifname.chop if /\*$/.match?(ifname)
82
-
83
- ifaces.each_key do |ifc|
84
- ifaces[ifc][:addresses].each_key do |addr|
85
- return ifc if addr.eql? mac
86
- end
87
- end
88
-
89
- nil
90
- end
91
-
92
- collect_data(:darwin) do
93
- network Mash.new unless network
94
- network[:interfaces] ||= Mash.new
95
- counters Mash.new unless counters
96
- counters[:network] ||= Mash.new
97
-
98
- so = shell_out("route -n get default")
99
- so.stdout.lines do |line|
100
- if line =~ /(\w+): ([\w\.]+)/
101
- case $1
102
- when "gateway"
103
- network[:default_gateway] = $2
104
- when "interface"
105
- network[:default_interface] = $2
106
- end
107
- end
108
- end
109
-
110
- iface = Mash.new
111
- so = shell_out("ifconfig -a")
112
- cint = nil
113
- so.stdout.lines do |line|
114
- if line =~ /^([0-9a-zA-Z\.\:\-]+): \S+ mtu (\d+)$/
115
- cint = $1
116
- iface[cint] ||= Mash.new
117
- iface[cint][:addresses] ||= Mash.new
118
- iface[cint][:mtu] = $2
119
- if line =~ /\sflags\=\d+\<((UP|BROADCAST|DEBUG|SMART|SIMPLEX|LOOPBACK|POINTOPOINT|NOTRAILERS|RUNNING|NOARP|PROMISC|ALLMULTI|SLAVE|MASTER|MULTICAST|DYNAMIC|,)+)\>\s/
120
- flags = $1.split(",")
121
- else
122
- flags = []
123
- end
124
- iface[cint][:flags] = flags.flatten
125
- if cint =~ /^(\w+)(\d+.*)/
126
- iface[cint][:type] = $1
127
- iface[cint][:number] = $2
128
- iface[cint][:encapsulation] = darwin_encaps_lookup($1)
129
- end
130
- end
131
- if line =~ /^\s+ether ([0-9a-f\:]+)/
132
- iface[cint][:addresses] ||= Mash.new
133
- iface[cint][:addresses][$1] = { "family" => "lladdr" }
134
- iface[cint][:encapsulation] = "Ethernet"
135
- end
136
- if line =~ /^\s+lladdr ([0-9a-f\:]+)\s/
137
- iface[cint][:addresses] ||= Mash.new
138
- iface[cint][:addresses][$1] = { "family" => "lladdr" }
139
- end
140
- if line =~ /\s+inet (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) netmask 0x(([0-9a-f]){1,8})\s*$/
141
- iface[cint][:addresses] ||= Mash.new
142
- iface[cint][:addresses][$1] = { "family" => "inet", "netmask" => hex_to_dec_netmask($2) }
143
- end
144
- if line =~ /\s+inet (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) netmask 0x(([0-9a-f]){1,8}) broadcast (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/
145
- iface[cint][:addresses] ||= Mash.new
146
- iface[cint][:addresses][$1] = { "family" => "inet", "netmask" => hex_to_dec_netmask($2), "broadcast" => $4 }
147
- end
148
- if line =~ /\s+inet6 ([a-f0-9\:]+)(\s*|(\%[a-z0-9]+)\s*) prefixlen (\d+)\s*/
149
- iface[cint][:addresses] ||= Mash.new
150
- iface[cint][:addresses][$1] = { "family" => "inet6", "prefixlen" => $4, "scope" => scope_lookup($1) }
151
- end
152
- if line =~ /\s+inet6 ([a-f0-9\:]+)(\s*|(\%[a-z0-9]+)\s*) prefixlen (\d+) scopeid 0x([a-f0-9]+)/
153
- iface[cint][:addresses] ||= Mash.new
154
- iface[cint][:addresses][$1] = { "family" => "inet6", "prefixlen" => $4, "scope" => scope_lookup($1) }
155
- end
156
- if line =~ /^\s+media: ((\w+)|(\w+ [a-zA-Z0-9\-\<\>]+)) status: (\w+)/
157
- iface[cint][:media] ||= Mash.new
158
- iface[cint][:media][:selected] = parse_media($1)
159
- iface[cint][:status] = $4
160
- end
161
- if line =~ /^\s+supported media: (.*)/
162
- iface[cint][:media] ||= Mash.new
163
- iface[cint][:media][:supported] = parse_media($1)
164
- end
165
- end
166
-
167
- so = shell_out("arp -an")
168
- so.stdout.lines do |line|
169
- if line =~ /^\S+ \((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\) at ([a-fA-F0-9\:]+) on ([a-zA-Z0-9\.\:\-]+).*\[(\w+)\]/
170
- # MAC addr really should be normalized to include all the zeroes.
171
- next if iface[$3].nil? # this should never happen
172
-
173
- iface[$3][:arp] ||= Mash.new
174
- iface[$3][:arp][$1] = $2
175
- end
176
- end
177
-
178
- settings = Mash.new
179
- so = shell_out("sysctl net")
180
- so.stdout.lines do |line|
181
- if line =~ /^([a-zA-Z0-9\.\_]+)\: (.*)/
182
- # should normalize names between platforms for the same settings.
183
- settings[$1] = $2 unless excluded_setting?($1)
184
- end
185
- end
186
-
187
- network[:settings] = settings
188
- network[:interfaces] = iface
189
-
190
- net_counters = Mash.new
191
- so = shell_out("netstat -i -d -l -b -n")
192
- so.stdout.lines do |line|
193
- if line =~ /^([a-zA-Z0-9\.\:\-\*]+)\s+\d+\s+\<[a-zA-Z0-9\#]+\>\s+([a-f0-9\:]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/ ||
194
- line =~ /^([a-zA-Z0-9\.\:\-\*]+)\s+\d+\s+\<[a-zA-Z0-9\#]+\>(\s+)(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/
195
- ifname = locate_interface(iface, $1, $2)
196
- next if iface[ifname].nil? # this shouldn't happen, but just in case
197
-
198
- net_counters[ifname] ||= Mash.new
199
- net_counters[ifname] = { rx: { bytes: $5, packets: $3, errors: $4, drop: 0, overrun: 0, frame: 0, compressed: 0, multicast: 0 },
200
- tx: { bytes: $8, packets: $6, errors: $7, drop: 0, overrun: 0, collisions: $9, carrier: 0, compressed: 0 },
201
- }
202
- end
203
- end
204
-
205
- counters[:network][:interfaces] = net_counters
206
- end
207
- end
1
+ # frozen_string_literal: true
2
+ #
3
+ # Author:: Benjamin Black (<bb@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(:Network) do
21
+ require_relative "../../mixin/network_helper"
22
+
23
+ provides "network", "network/interfaces"
24
+ provides "counters/network", "counters/network/interfaces"
25
+
26
+ include Ohai::Mixin::NetworkHelper
27
+
28
+ def parse_media(media_string)
29
+ media = {}
30
+ line_array = media_string.split
31
+
32
+ 0.upto(line_array.length - 1) do |i|
33
+ unless line_array[i].eql?("none")
34
+
35
+ if line_array[i + 1] =~ /^\<([a-zA-Z\-\,]+)\>$/
36
+ media[line_array[i]] = {} unless media.key?(line_array[i])
37
+ if media[line_array[i]].key?("options")
38
+ $1.split(",").each do |opt|
39
+ media[line_array[i]]["options"] << opt unless media[line_array[i]]["options"].include?(opt)
40
+ end
41
+ else
42
+ media[line_array[i]]["options"] = $1.split(",")
43
+ end
44
+ elsif line_array[i].eql?("autoselect")
45
+ media["autoselect"] = {} unless media.key?("autoselect")
46
+ media["autoselect"]["options"] = []
47
+ end
48
+ else
49
+ media["none"] = { "options" => [] }
50
+ end
51
+ end
52
+
53
+ media
54
+ end
55
+
56
+ def darwin_encaps_lookup(ifname)
57
+ return "Loopback" if ifname.eql?("lo")
58
+ return "1394" if ifname.eql?("fw")
59
+ return "IPIP" if ifname.eql?("gif")
60
+ return "6to4" if ifname.eql?("stf")
61
+ return "dot1q" if ifname.eql?("vlan")
62
+
63
+ "Unknown"
64
+ end
65
+
66
+ def scope_lookup(scope)
67
+ return "Node" if scope.eql?("::1")
68
+ return "Link" if /^fe80\:/.match?(scope)
69
+ return "Site" if /^fec0\:/.match?(scope)
70
+
71
+ "Global"
72
+ end
73
+
74
+ def excluded_setting?(setting)
75
+ setting.match("_sw_cksum")
76
+ end
77
+
78
+ def locate_interface(ifaces, ifname, mac)
79
+ return ifname unless ifaces[ifname].nil?
80
+ # oh well, time to go hunting!
81
+ return ifname.chop if /\*$/.match?(ifname)
82
+
83
+ ifaces.each_key do |ifc|
84
+ ifaces[ifc][:addresses].each_key do |addr|
85
+ return ifc if addr.eql? mac
86
+ end
87
+ end
88
+
89
+ nil
90
+ end
91
+
92
+ collect_data(:darwin) do
93
+ network Mash.new unless network
94
+ network[:interfaces] ||= Mash.new
95
+ counters Mash.new unless counters
96
+ counters[:network] ||= Mash.new
97
+
98
+ so = shell_out("route -n get default")
99
+ so.stdout.lines do |line|
100
+ if line =~ /(\w+): ([\w\.]+)/
101
+ case $1
102
+ when "gateway"
103
+ network[:default_gateway] = $2
104
+ when "interface"
105
+ network[:default_interface] = $2
106
+ end
107
+ end
108
+ end
109
+
110
+ iface = Mash.new
111
+ so = shell_out("ifconfig -a")
112
+ cint = nil
113
+ so.stdout.lines do |line|
114
+ if line =~ /^([0-9a-zA-Z\.\:\-]+): \S+ mtu (\d+)$/
115
+ cint = $1
116
+ iface[cint] ||= Mash.new
117
+ iface[cint][:addresses] ||= Mash.new
118
+ iface[cint][:mtu] = $2
119
+ if line =~ /\sflags\=\d+\<((UP|BROADCAST|DEBUG|SMART|SIMPLEX|LOOPBACK|POINTOPOINT|NOTRAILERS|RUNNING|NOARP|PROMISC|ALLMULTI|SLAVE|MASTER|MULTICAST|DYNAMIC|,)+)\>\s/
120
+ flags = $1.split(",")
121
+ else
122
+ flags = []
123
+ end
124
+ iface[cint][:flags] = flags.flatten
125
+ if cint =~ /^(\w+)(\d+.*)/
126
+ iface[cint][:type] = $1
127
+ iface[cint][:number] = $2
128
+ iface[cint][:encapsulation] = darwin_encaps_lookup($1)
129
+ end
130
+ end
131
+ if line =~ /^\s+ether ([0-9a-f\:]+)/
132
+ iface[cint][:addresses] ||= Mash.new
133
+ iface[cint][:addresses][$1] = { "family" => "lladdr" }
134
+ iface[cint][:encapsulation] = "Ethernet"
135
+ end
136
+ if line =~ /^\s+lladdr ([0-9a-f\:]+)\s/
137
+ iface[cint][:addresses] ||= Mash.new
138
+ iface[cint][:addresses][$1] = { "family" => "lladdr" }
139
+ end
140
+ if line =~ /\s+inet (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) netmask 0x(([0-9a-f]){1,8})\s*$/
141
+ iface[cint][:addresses] ||= Mash.new
142
+ iface[cint][:addresses][$1] = { "family" => "inet", "netmask" => hex_to_dec_netmask($2) }
143
+ end
144
+ if line =~ /\s+inet (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) netmask 0x(([0-9a-f]){1,8}) broadcast (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/
145
+ iface[cint][:addresses] ||= Mash.new
146
+ iface[cint][:addresses][$1] = { "family" => "inet", "netmask" => hex_to_dec_netmask($2), "broadcast" => $4 }
147
+ end
148
+ if line =~ /\s+inet6 ([a-f0-9\:]+)(\s*|(\%[a-z0-9]+)\s*) prefixlen (\d+)\s*/
149
+ iface[cint][:addresses] ||= Mash.new
150
+ iface[cint][:addresses][$1] = { "family" => "inet6", "prefixlen" => $4, "scope" => scope_lookup($1) }
151
+ end
152
+ if line =~ /\s+inet6 ([a-f0-9\:]+)(\s*|(\%[a-z0-9]+)\s*) prefixlen (\d+) scopeid 0x([a-f0-9]+)/
153
+ iface[cint][:addresses] ||= Mash.new
154
+ iface[cint][:addresses][$1] = { "family" => "inet6", "prefixlen" => $4, "scope" => scope_lookup($1) }
155
+ end
156
+ if line =~ /^\s+media: ((\w+)|(\w+ [a-zA-Z0-9\-\<\>]+)) status: (\w+)/
157
+ iface[cint][:media] ||= Mash.new
158
+ iface[cint][:media][:selected] = parse_media($1)
159
+ iface[cint][:status] = $4
160
+ end
161
+ if line =~ /^\s+supported media: (.*)/
162
+ iface[cint][:media] ||= Mash.new
163
+ iface[cint][:media][:supported] = parse_media($1)
164
+ end
165
+ end
166
+
167
+ so = shell_out("arp -an")
168
+ so.stdout.lines do |line|
169
+ if line =~ /^\S+ \((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\) at ([a-fA-F0-9\:]+) on ([a-zA-Z0-9\.\:\-]+).*\[(\w+)\]/
170
+ # MAC addr really should be normalized to include all the zeroes.
171
+ next if iface[$3].nil? # this should never happen
172
+
173
+ iface[$3][:arp] ||= Mash.new
174
+ iface[$3][:arp][$1] = $2
175
+ end
176
+ end
177
+
178
+ settings = Mash.new
179
+ so = shell_out("sysctl net")
180
+ so.stdout.lines do |line|
181
+ if line =~ /^([a-zA-Z0-9\.\_]+)\: (.*)/
182
+ # should normalize names between platforms for the same settings.
183
+ settings[$1] = $2 unless excluded_setting?($1)
184
+ end
185
+ end
186
+
187
+ network[:settings] = settings
188
+ network[:interfaces] = iface
189
+
190
+ net_counters = Mash.new
191
+ so = shell_out("netstat -i -d -l -b -n")
192
+ so.stdout.lines do |line|
193
+ if line =~ /^([a-zA-Z0-9\.\:\-\*]+)\s+\d+\s+\<[a-zA-Z0-9\#]+\>\s+([a-f0-9\:]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/ ||
194
+ line =~ /^([a-zA-Z0-9\.\:\-\*]+)\s+\d+\s+\<[a-zA-Z0-9\#]+\>(\s+)(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/
195
+ ifname = locate_interface(iface, $1, $2)
196
+ next if iface[ifname].nil? # this shouldn't happen, but just in case
197
+
198
+ net_counters[ifname] ||= Mash.new
199
+ net_counters[ifname] = { rx: { bytes: $5, packets: $3, errors: $4, drop: 0, overrun: 0, frame: 0, compressed: 0, multicast: 0 },
200
+ tx: { bytes: $8, packets: $6, errors: $7, drop: 0, overrun: 0, collisions: $9, carrier: 0, compressed: 0 },
201
+ }
202
+ end
203
+ end
204
+
205
+ counters[:network][:interfaces] = net_counters
206
+ end
207
+ end
@@ -1,40 +1,40 @@
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(:Platform) do
21
- provides "platform", "platform_version", "platform_version_extra", "platform_build", "platform_family"
22
-
23
- collect_data(:darwin) do
24
- so = shell_out(Ohai.abs_path( "/usr/bin/sw_vers" ).to_s)
25
- so.stdout.lines do |line|
26
- case line
27
- when /^ProductVersion:\s+(.+)$/
28
- platform_version $1
29
- when /^ProductVersionExtra:\s+(.+)$/
30
- platform_version_extra $1
31
- when /^BuildVersion:\s+(.+)$/
32
- platform_build $1
33
- end
34
- end
35
-
36
- # if we're on darwin assume we're on mac_os_x
37
- platform "mac_os_x"
38
- platform_family "mac_os_x"
39
- end
40
- 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(:Platform) do
21
+ provides "platform", "platform_version", "platform_version_extra", "platform_build", "platform_family"
22
+
23
+ collect_data(:darwin) do
24
+ so = shell_out(Ohai.abs_path( "/usr/bin/sw_vers" ).to_s)
25
+ so.stdout.lines do |line|
26
+ case line
27
+ when /^ProductVersion:\s+(.+)$/
28
+ platform_version $1
29
+ when /^ProductVersionExtra:\s+(.+)$/
30
+ platform_version_extra $1
31
+ when /^BuildVersion:\s+(.+)$/
32
+ platform_build $1
33
+ end
34
+ end
35
+
36
+ # if we're on darwin assume we're on mac_os_x
37
+ platform "mac_os_x"
38
+ platform_family "mac_os_x"
39
+ end
40
+ end