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.
- checksums.yaml +4 -4
- data/Gemfile +28 -28
- data/LICENSE +201 -201
- data/bin/ohai +25 -25
- data/lib/ohai/application.rb +189 -189
- data/lib/ohai/common/dmi.rb +167 -167
- data/lib/ohai/config.rb +51 -51
- data/lib/ohai/dsl/plugin/versionvii.rb +203 -203
- data/lib/ohai/dsl/plugin.rb +232 -232
- data/lib/ohai/dsl.rb +22 -22
- data/lib/ohai/exception.rb +36 -36
- data/lib/ohai/hints.rb +68 -68
- data/lib/ohai/loader.rb +178 -178
- data/lib/ohai/log.rb +34 -34
- data/lib/ohai/mash.rb +22 -22
- data/lib/ohai/mixin/alibaba_metadata.rb +83 -83
- data/lib/ohai/mixin/azure_metadata.rb +105 -105
- data/lib/ohai/mixin/chef_utils_wiring.rb +52 -52
- data/lib/ohai/mixin/command.rb +4 -4
- data/lib/ohai/mixin/constant_helper.rb +55 -55
- data/lib/ohai/mixin/dmi_decode.rb +54 -54
- data/lib/ohai/mixin/do_metadata.rb +48 -48
- data/lib/ohai/mixin/ec2_metadata.rb +264 -270
- data/lib/ohai/mixin/gce_metadata.rb +79 -79
- data/lib/ohai/mixin/http_helper.rb +64 -64
- data/lib/ohai/mixin/json_helper.rb +36 -36
- data/lib/ohai/mixin/network_helper.rb +92 -92
- data/lib/ohai/mixin/oci_metadata.rb +60 -60
- data/lib/ohai/mixin/os.rb +128 -128
- data/lib/ohai/mixin/scaleway_metadata.rb +51 -51
- data/lib/ohai/mixin/seconds_to_human.rb +52 -52
- data/lib/ohai/mixin/shell_out.rb +51 -51
- data/lib/ohai/mixin/softlayer_metadata.rb +74 -74
- data/lib/ohai/mixin/string.rb +31 -31
- data/lib/ohai/mixin/train_helpers.rb +36 -36
- data/lib/ohai/mixin/which.rb +39 -39
- data/lib/ohai/plugin_config.rb +47 -47
- data/lib/ohai/plugins/aix/kernel.rb +50 -50
- data/lib/ohai/plugins/aix/memory.rb +37 -37
- data/lib/ohai/plugins/aix/network.rb +142 -142
- data/lib/ohai/plugins/aix/platform.rb +30 -30
- data/lib/ohai/plugins/aix/uptime.rb +54 -54
- data/lib/ohai/plugins/aix/virtualization.rb +154 -154
- data/lib/ohai/plugins/alibaba.rb +72 -72
- data/lib/ohai/plugins/azure.rb +154 -154
- data/lib/ohai/plugins/bsd/virtualization.rb +121 -121
- data/lib/ohai/plugins/c.rb +178 -178
- data/lib/ohai/plugins/chef.rb +50 -50
- data/lib/ohai/plugins/cloud.rb +379 -379
- data/lib/ohai/plugins/command.rb +26 -26
- data/lib/ohai/plugins/cpu.rb +642 -642
- data/lib/ohai/plugins/darwin/hardware.rb +99 -99
- data/lib/ohai/plugins/darwin/memory.rb +62 -62
- data/lib/ohai/plugins/darwin/network.rb +207 -207
- data/lib/ohai/plugins/darwin/platform.rb +40 -40
- data/lib/ohai/plugins/darwin/virtualization.rb +104 -104
- data/lib/ohai/plugins/digital_ocean.rb +67 -67
- data/lib/ohai/plugins/dmi.rb +134 -134
- data/lib/ohai/plugins/docker.rb +58 -58
- data/lib/ohai/plugins/dragonflybsd/memory.rb +60 -60
- data/lib/ohai/plugins/dragonflybsd/network.rb +128 -128
- data/lib/ohai/plugins/dragonflybsd/platform.rb +28 -28
- data/lib/ohai/plugins/ec2.rb +148 -148
- data/lib/ohai/plugins/elixir.rb +36 -36
- data/lib/ohai/plugins/erlang.rb +60 -60
- data/lib/ohai/plugins/eucalyptus.rb +86 -86
- data/lib/ohai/plugins/filesystem.rb +753 -753
- data/lib/ohai/plugins/fips.rb +36 -36
- data/lib/ohai/plugins/freebsd/memory.rb +60 -60
- data/lib/ohai/plugins/freebsd/network.rb +128 -128
- data/lib/ohai/plugins/freebsd/platform.rb +28 -28
- data/lib/ohai/plugins/gce.rb +89 -89
- data/lib/ohai/plugins/go.rb +34 -34
- data/lib/ohai/plugins/groovy.rb +38 -38
- data/lib/ohai/plugins/grub2.rb +40 -40
- data/lib/ohai/plugins/habitat.rb +73 -73
- data/lib/ohai/plugins/haskell.rb +96 -96
- data/lib/ohai/plugins/hostname.rb +133 -133
- data/lib/ohai/plugins/init_package.rb +26 -26
- data/lib/ohai/plugins/java.rb +78 -78
- data/lib/ohai/plugins/kernel.rb +292 -292
- data/lib/ohai/plugins/keys.rb +27 -27
- data/lib/ohai/plugins/languages.rb +26 -26
- data/lib/ohai/plugins/libvirt.rb +114 -114
- data/lib/ohai/plugins/linode.rb +73 -73
- data/lib/ohai/plugins/linux/block_device.rb +48 -48
- data/lib/ohai/plugins/linux/hostnamectl.rb +34 -34
- data/lib/ohai/plugins/linux/interrupts.rb +84 -83
- data/lib/ohai/plugins/linux/ipc.rb +52 -52
- data/lib/ohai/plugins/linux/livepatch.rb +38 -38
- data/lib/ohai/plugins/linux/lsb.rb +46 -46
- data/lib/ohai/plugins/linux/lspci.rb +80 -80
- data/lib/ohai/plugins/linux/machineid.rb +36 -36
- data/lib/ohai/plugins/linux/mdadm.rb +120 -120
- data/lib/ohai/plugins/linux/memory.rb +106 -106
- data/lib/ohai/plugins/linux/network.rb +879 -879
- data/lib/ohai/plugins/linux/os_release.rb +38 -38
- data/lib/ohai/plugins/linux/platform.rb +314 -314
- data/lib/ohai/plugins/linux/selinux.rb +69 -69
- data/lib/ohai/plugins/linux/sessions.rb +54 -54
- data/lib/ohai/plugins/linux/sysctl.rb +39 -39
- data/lib/ohai/plugins/linux/systemd_paths.rb +36 -36
- data/lib/ohai/plugins/linux/tc.rb +61 -61
- data/lib/ohai/plugins/linux/virtualization.rb +300 -300
- data/lib/ohai/plugins/lua.rb +39 -39
- data/lib/ohai/plugins/mono.rb +50 -50
- data/lib/ohai/plugins/netbsd/memory.rb +99 -99
- data/lib/ohai/plugins/netbsd/network.rb +122 -122
- data/lib/ohai/plugins/netbsd/platform.rb +28 -28
- data/lib/ohai/plugins/network.rb +186 -186
- data/lib/ohai/plugins/nodejs.rb +40 -40
- data/lib/ohai/plugins/oci.rb +94 -94
- data/lib/ohai/plugins/ohai.rb +29 -29
- data/lib/ohai/plugins/ohai_time.rb +26 -26
- data/lib/ohai/plugins/openbsd/memory.rb +99 -99
- data/lib/ohai/plugins/openbsd/network.rb +122 -122
- data/lib/ohai/plugins/openbsd/platform.rb +28 -28
- data/lib/ohai/plugins/openstack.rb +84 -84
- data/lib/ohai/plugins/os.rb +55 -55
- data/lib/ohai/plugins/packages.rb +234 -234
- data/lib/ohai/plugins/passwd.rb +104 -104
- data/lib/ohai/plugins/perl.rb +45 -45
- data/lib/ohai/plugins/php.rb +52 -52
- data/lib/ohai/plugins/platform.rb +41 -41
- data/lib/ohai/plugins/powershell.rb +82 -82
- data/lib/ohai/plugins/ps.rb +35 -35
- data/lib/ohai/plugins/python.rb +43 -43
- data/lib/ohai/plugins/rackspace.rb +177 -177
- data/lib/ohai/plugins/root_group.rb +41 -41
- data/lib/ohai/plugins/rpm.rb +121 -121
- data/lib/ohai/plugins/ruby.rb +66 -66
- data/lib/ohai/plugins/rust.rb +34 -34
- data/lib/ohai/plugins/scala.rb +38 -38
- data/lib/ohai/plugins/scaleway.rb +58 -58
- data/lib/ohai/plugins/scsi.rb +52 -52
- data/lib/ohai/plugins/shard.rb +142 -142
- data/lib/ohai/plugins/shells.rb +32 -32
- data/lib/ohai/plugins/softlayer.rb +48 -48
- data/lib/ohai/plugins/solaris2/dmi.rb +191 -191
- data/lib/ohai/plugins/solaris2/memory.rb +32 -32
- data/lib/ohai/plugins/solaris2/network.rb +192 -192
- data/lib/ohai/plugins/solaris2/platform.rb +58 -58
- data/lib/ohai/plugins/solaris2/virtualization.rb +90 -90
- data/lib/ohai/plugins/ssh_host_key.rb +84 -84
- data/lib/ohai/plugins/sysconf.rb +46 -46
- data/lib/ohai/plugins/timezone.rb +45 -45
- data/lib/ohai/plugins/train.rb +35 -35
- data/lib/ohai/plugins/uptime.rb +95 -95
- data/lib/ohai/plugins/virtualbox.rb +197 -197
- data/lib/ohai/plugins/vmware.rb +109 -109
- data/lib/ohai/plugins/windows/dmi.rb +95 -95
- data/lib/ohai/plugins/windows/drivers.rb +52 -52
- data/lib/ohai/plugins/windows/memory.rb +39 -39
- data/lib/ohai/plugins/windows/network.rb +222 -222
- data/lib/ohai/plugins/windows/platform.rb +34 -34
- data/lib/ohai/plugins/windows/system_enclosure.rb +29 -29
- data/lib/ohai/plugins/windows/virtualization.rb +45 -45
- data/lib/ohai/plugins/zpools.rb +94 -94
- data/lib/ohai/provides_map.rb +208 -208
- data/lib/ohai/runner.rb +128 -126
- data/lib/ohai/system.rb +258 -258
- data/lib/ohai/train_transport.rb +29 -29
- data/lib/ohai/util/file_helper.rb +6 -6
- data/lib/ohai/util/ip_helper.rb +56 -56
- data/lib/ohai/util/win32.rb +47 -47
- data/lib/ohai/version.rb +23 -23
- data/lib/ohai.rb +23 -23
- data/ohai.gemspec +35 -35
- 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
|
data/lib/ohai/plugins/network.rb
CHANGED
@@ -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
|
data/lib/ohai/plugins/nodejs.rb
CHANGED
@@ -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
|