ohai 16.8.1 → 16.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -4
- data/lib/ohai/mixin/ec2_metadata.rb +30 -5
- data/lib/ohai/plugins/chef.rb +11 -0
- data/lib/ohai/plugins/ec2.rb +3 -0
- data/lib/ohai/plugins/eucalyptus.rb +1 -1
- data/lib/ohai/plugins/linux/network.rb +27 -2
- data/lib/ohai/plugins/linux/os_release.rb +38 -0
- data/lib/ohai/plugins/linux/platform.rb +10 -6
- data/lib/ohai/plugins/linux/virtualization.rb +5 -1
- data/lib/ohai/plugins/packages.rb +5 -4
- data/lib/ohai/plugins/rackspace.rb +2 -2
- data/lib/ohai/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67ffbc76e1366d1413aa7f01ac2e8f4ff22b89f8a9fa8568b348a441c284b8f9
|
4
|
+
data.tar.gz: 59e0790fc0ee8182982c63f1d495c89a974fec9950a0843ac46d2eeb9dea6baf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 867b388ecf15e49431eaea7b315411522d8d57e2e4310cf867048dcadde9832dc94a02710c99ef332b8f51f4e9fe88db0bb00e47ac3505bc911a2ca3763a3a0e
|
7
|
+
data.tar.gz: 4c0d991e9d1b3b92f705611f54af8f826ecd866cbc7f8b65d4ad70fb879f4a1501a2e1a38a908e4e6b4c3d0367e4b16167d843ba5840d64f9b41a68aae448f33
|
data/Gemfile
CHANGED
@@ -4,19 +4,19 @@ source "https://rubygems.org"
|
|
4
4
|
gemspec
|
5
5
|
|
6
6
|
# pull these gems from master of chef/chef so that we're testing against what we will release
|
7
|
-
gem "chef-config", git: "https://github.com/chef/chef", glob: "chef-config/chef-config.gemspec"
|
8
|
-
gem "chef-utils", git: "https://github.com/chef/chef", glob: "chef-utils/chef-utils.gemspec"
|
7
|
+
gem "chef-config", git: "https://github.com/chef/chef", branch: "chef-16", glob: "chef-config/chef-config.gemspec"
|
8
|
+
gem "chef-utils", git: "https://github.com/chef/chef", branch: "chef-16", glob: "chef-utils/chef-utils.gemspec"
|
9
9
|
|
10
10
|
# NOTE: do not submit PRs to add pry as a dep, add to your Gemfile.local
|
11
11
|
group :development do
|
12
|
-
gem "chefstyle",
|
12
|
+
gem "chefstyle", "1.6.2"
|
13
13
|
gem "ipaddr_extensions"
|
14
14
|
gem "rake", ">= 10.1.0"
|
15
15
|
gem "rspec-collection_matchers", "~> 1.0"
|
16
16
|
gem "rspec-core", "~> 3.0"
|
17
17
|
gem "rspec-expectations", "~> 3.0"
|
18
18
|
gem "rspec-mocks", "~> 3.0"
|
19
|
-
gem "rubocop-performance", "1.9.
|
19
|
+
gem "rubocop-performance", "1.9.2"
|
20
20
|
gem "rubocop-rspec"
|
21
21
|
end
|
22
22
|
|
@@ -43,15 +43,23 @@ module Ohai
|
|
43
43
|
EC2_METADATA_ADDR ||= "169.254.169.254"
|
44
44
|
EC2_SUPPORTED_VERSIONS ||= %w{ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15
|
45
45
|
2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12
|
46
|
-
2014-02-25 2014-11-05 2015-10-20 2016-04-19 2016-06-30 2016-09-02
|
46
|
+
2014-02-25 2014-11-05 2015-10-20 2016-04-19 2016-06-30 2016-09-02
|
47
|
+
2016-11-30 2018-08-17 2018-11-29 2019-10-01 2020-08-24 2020-11-01 }.freeze
|
47
48
|
EC2_ARRAY_VALUES ||= %w{security-groups local_ipv4s}.freeze
|
48
49
|
EC2_ARRAY_DIR ||= %w{network/interfaces/macs}.freeze
|
49
50
|
EC2_JSON_DIR ||= %w{iam}.freeze
|
50
51
|
|
52
|
+
#
|
53
|
+
# The latest metadata version in EC2_SUPPORTED_VERSIONS that this instance supports
|
54
|
+
# in AWS supported metadata versions are determined at instance start so we need to be
|
55
|
+
# cautious here in case an instance has been running for a long time
|
56
|
+
#
|
57
|
+
# @return [String] the version
|
58
|
+
#
|
51
59
|
def best_api_version
|
52
60
|
@api_version ||= begin
|
53
61
|
logger.trace("Mixin EC2: Fetching http://#{EC2_METADATA_ADDR}/ to determine the latest supported metadata release")
|
54
|
-
response = http_client.get("/")
|
62
|
+
response = http_client.get("/", { 'X-aws-ec2-metadata-token': v2_token })
|
55
63
|
if response.code == "404"
|
56
64
|
logger.trace("Mixin EC2: Received HTTP 404 from metadata server while determining API version, assuming 'latest'")
|
57
65
|
return "latest"
|
@@ -84,6 +92,23 @@ module Ohai
|
|
84
92
|
end
|
85
93
|
end
|
86
94
|
|
95
|
+
#
|
96
|
+
# Fetch an API token for use querying AWS IMDSv2 or return nil if no token if found
|
97
|
+
# AWS like systems (think OpenStack) will not respond with a token here
|
98
|
+
#
|
99
|
+
# @return [NilClass, String] API token or nil
|
100
|
+
#
|
101
|
+
def v2_token
|
102
|
+
@v2_token ||= begin
|
103
|
+
request = http_client.put("/latest/api/token", nil, { 'X-aws-ec2-metadata-token-ttl-seconds': "60" })
|
104
|
+
if request.code == "404" # not on AWS
|
105
|
+
nil
|
106
|
+
else
|
107
|
+
request.body
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
87
112
|
# Get metadata for a given path and API version
|
88
113
|
#
|
89
114
|
# Typically, a 200 response is expected for valid metadata.
|
@@ -93,7 +118,7 @@ module Ohai
|
|
93
118
|
def metadata_get(id, api_version)
|
94
119
|
path = "/#{api_version}/meta-data/#{id}"
|
95
120
|
logger.trace("Mixin EC2: Fetching http://#{EC2_METADATA_ADDR}#{path}")
|
96
|
-
response = http_client.get(path)
|
121
|
+
response = http_client.get(path, { 'X-aws-ec2-metadata-token': v2_token })
|
97
122
|
case response.code
|
98
123
|
when "200"
|
99
124
|
response.body
|
@@ -174,13 +199,13 @@ module Ohai
|
|
174
199
|
|
175
200
|
def fetch_userdata
|
176
201
|
logger.trace("Mixin EC2: Fetching http://#{EC2_METADATA_ADDR}/#{best_api_version}/user-data/")
|
177
|
-
response = http_client.get("/#{best_api_version}/user-data/")
|
202
|
+
response = http_client.get("/#{best_api_version}/user-data/", { 'X-aws-ec2-metadata-token': v2_token })
|
178
203
|
response.code == "200" ? response.body : nil
|
179
204
|
end
|
180
205
|
|
181
206
|
def fetch_dynamic_data
|
182
207
|
@fetch_dynamic_data ||= begin
|
183
|
-
response = http_client.get("/#{best_api_version}/dynamic/instance-identity/document/")
|
208
|
+
response = http_client.get("/#{best_api_version}/dynamic/instance-identity/document/", { 'X-aws-ec2-metadata-token': v2_token })
|
184
209
|
|
185
210
|
if json?(response.body) && response.code == "200"
|
186
211
|
FFI_Yajl::Parser.parse(response.body)
|
data/lib/ohai/plugins/chef.rb
CHANGED
@@ -20,9 +20,19 @@
|
|
20
20
|
Ohai.plugin(:Chef) do
|
21
21
|
provides "chef_packages/chef"
|
22
22
|
|
23
|
+
def chef_effortless?
|
24
|
+
# Determine if client is being run as a Habitat package.
|
25
|
+
if Chef::CHEF_ROOT.include?("hab/pkgs/chef/chef")
|
26
|
+
# Determine if client is running in zero mode which would show it is using the Effortless pattern.
|
27
|
+
# Explicitly set response to true or nil, not false
|
28
|
+
ChefConfig::Config["chef_server_url"].include?("chefzero://")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
23
32
|
collect_data(:default, :target) do
|
24
33
|
begin
|
25
34
|
require "chef/version"
|
35
|
+
require "chef-config/config" unless defined?(ChefConfig::Config)
|
26
36
|
rescue Gem::LoadError
|
27
37
|
logger.trace("Plugin Chef: Unable to load the chef gem to determine the version")
|
28
38
|
# this catches when you've done a major version bump of ohai, but
|
@@ -35,5 +45,6 @@ Ohai.plugin(:Chef) do
|
|
35
45
|
chef_packages[:chef] = Mash.new
|
36
46
|
chef_packages[:chef][:version] = Chef::VERSION
|
37
47
|
chef_packages[:chef][:chef_root] = Chef::CHEF_ROOT
|
48
|
+
chef_packages[:chef][:chef_effortless] = chef_effortless?
|
38
49
|
end
|
39
50
|
end
|
data/lib/ohai/plugins/ec2.rb
CHANGED
@@ -121,6 +121,9 @@ Ohai.plugin(:EC2) do
|
|
121
121
|
logger.trace("Plugin EC2: looks_like_ec2? == true")
|
122
122
|
ec2 Mash.new
|
123
123
|
fetch_metadata.each do |k, v|
|
124
|
+
# this includes sensitive data we don't want to store on the node
|
125
|
+
next if k == "identity_credentials_ec2_security_credentials_ec2_instance"
|
126
|
+
|
124
127
|
# fetch_metadata returns IAM security credentials, including the IAM user's
|
125
128
|
# secret access key. We'd rather not have ohai send this information
|
126
129
|
# to the server. If the instance is associated with an IAM role we grab
|
@@ -29,7 +29,7 @@ Ohai.plugin(:Eucalyptus) do
|
|
29
29
|
provides "eucalyptus"
|
30
30
|
depends "network/interfaces"
|
31
31
|
|
32
|
-
MAC_MATCH = /^[dD]0:0[dD]:/.freeze
|
32
|
+
MAC_MATCH = /^[dD]0:0[dD]:/.freeze unless defined?(MAC_MATCH)
|
33
33
|
|
34
34
|
# returns the mac address from the collection of all address types
|
35
35
|
def get_mac_address(addresses)
|
@@ -273,6 +273,30 @@ Ohai.plugin(:Network) do
|
|
273
273
|
iface
|
274
274
|
end
|
275
275
|
|
276
|
+
# determine pause parameters for the interface using ethtool
|
277
|
+
def ethernet_pause_parameters(iface)
|
278
|
+
return iface unless ethtool_binary_path
|
279
|
+
|
280
|
+
iface.each_key do |tmp_int|
|
281
|
+
next unless iface[tmp_int][:encapsulation] == "Ethernet"
|
282
|
+
|
283
|
+
so = shell_out("#{ethtool_binary_path} -a #{tmp_int}")
|
284
|
+
logger.trace("Plugin Network: Parsing ethtool output: #{so.stdout}")
|
285
|
+
iface[tmp_int]["pause_params"] = {}
|
286
|
+
so.stdout.lines.each do |line|
|
287
|
+
next if line.start_with?("Pause parameters for")
|
288
|
+
next if line.strip.nil?
|
289
|
+
|
290
|
+
key, val = line.split(/:\s+/)
|
291
|
+
if val
|
292
|
+
pause_key = "#{key.downcase.tr(" ", "_")}"
|
293
|
+
iface[tmp_int]["pause_params"][pause_key] = val.strip.eql? "on"
|
294
|
+
end
|
295
|
+
end
|
296
|
+
end
|
297
|
+
iface
|
298
|
+
end
|
299
|
+
|
276
300
|
# determine driver info for the interface using ethtool
|
277
301
|
def ethernet_driver_info(iface)
|
278
302
|
return iface unless ethtool_binary_path
|
@@ -385,7 +409,7 @@ Ohai.plugin(:Network) do
|
|
385
409
|
if line =~ IPROUTE_INT_REGEX
|
386
410
|
cint = $2
|
387
411
|
iface[cint] = Mash.new
|
388
|
-
if cint =~ /^(\w
|
412
|
+
if cint =~ /^(\w+?)(\d+.*)/
|
389
413
|
iface[cint][:type] = $1
|
390
414
|
iface[cint][:number] = $2
|
391
415
|
end
|
@@ -696,7 +720,7 @@ Ohai.plugin(:Network) do
|
|
696
720
|
if line =~ /^([0-9a-zA-Z@\.\:\-_]+)\s+/
|
697
721
|
cint = $1
|
698
722
|
iface[cint] = Mash.new
|
699
|
-
if cint =~ /^(\w
|
723
|
+
if cint =~ /^(\w+?)(\d+.*)/
|
700
724
|
iface[cint][:type] = $1
|
701
725
|
iface[cint][:number] = $2
|
702
726
|
end
|
@@ -770,6 +794,7 @@ Ohai.plugin(:Network) do
|
|
770
794
|
iface = ethernet_channel_parameters(iface)
|
771
795
|
iface = ethernet_coalesce_parameters(iface)
|
772
796
|
iface = ethernet_driver_info(iface)
|
797
|
+
iface = ethernet_pause_parameters(iface)
|
773
798
|
counters[:network][:interfaces] = net_counters
|
774
799
|
network["interfaces"] = iface
|
775
800
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Author:: Lance Albertson (lance@osuosl.org>)
|
4
|
+
# Copyright:: Copyright (c) 2021 Oregon State University
|
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(:OsRelease) do
|
21
|
+
provides "os_release"
|
22
|
+
|
23
|
+
collect_data(:linux) do
|
24
|
+
os_release Mash.new unless os_release
|
25
|
+
|
26
|
+
# https://www.freedesktop.org/software/systemd/man/os-release.html
|
27
|
+
if file_exist?("/etc/os-release")
|
28
|
+
file_read("/etc/os-release").each_line do |line|
|
29
|
+
key, value = line.split("=")
|
30
|
+
if key == "ID_LIKE"
|
31
|
+
os_release[key.downcase] = value.chomp.gsub(/\A"|"\Z/, "").split(" ") if value
|
32
|
+
else
|
33
|
+
os_release[key.downcase] = value.chomp.gsub(/\A"|"\Z/, "") if value
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -112,15 +112,16 @@ Ohai.plugin(:Platform) do
|
|
112
112
|
# ohai uses. If you're adding a new platform here and you want to change the name
|
113
113
|
# you'll want to add it here and then add a spec for the platform_id_remap method
|
114
114
|
{
|
115
|
-
"
|
115
|
+
"alinux" => "alibabalinux",
|
116
116
|
"amzn" => "amazon",
|
117
|
+
"archarm" => "arch",
|
118
|
+
"cumulus-linux" => "cumulus",
|
117
119
|
"ol" => "oracle",
|
118
|
-
"sles" => "suse",
|
119
|
-
"sles_sap" => "suse",
|
120
120
|
"opensuse-leap" => "opensuseleap",
|
121
|
+
"rhel" => "redhat",
|
122
|
+
"sles_sap" => "suse",
|
123
|
+
"sles" => "suse",
|
121
124
|
"xenenterprise" => "xenserver",
|
122
|
-
"cumulus-linux" => "cumulus",
|
123
|
-
"archarm" => "arch",
|
124
125
|
}[id] || id
|
125
126
|
end
|
126
127
|
|
@@ -136,7 +137,7 @@ Ohai.plugin(:Platform) do
|
|
136
137
|
when /debian/, /ubuntu/, /linuxmint/, /raspbian/, /cumulus/, /kali/, /pop/
|
137
138
|
# apt-get+dpkg almost certainly goes here
|
138
139
|
"debian"
|
139
|
-
when /oracle/, /centos/, /redhat/, /scientific/, /enterpriseenterprise/, /xcp/, /xenserver/, /cloudlinux/, /ibm_powerkvm/, /parallels/, /nexus_centos/, /clearos/, /bigip/ # Note that 'enterpriseenterprise' is oracle's LSB "distributor ID"
|
140
|
+
when /oracle/, /centos/, /redhat/, /almalinux/, /scientific/, /enterpriseenterprise/, /xcp/, /xenserver/, /cloudlinux/, /ibm_powerkvm/, /parallels/, /nexus_centos/, /clearos/, /bigip/, /alibabalinux/, /sangoma/ # Note that 'enterpriseenterprise' is oracle's LSB "distributor ID"
|
140
141
|
# NOTE: "rhel" should be reserved exclusively for recompiled rhel versions that are nearly perfectly compatible down to the platform_version.
|
141
142
|
# The operating systems that are "rhel" should all be as compatible as rhel7 = centos7 = oracle7 = scientific7 (98%-ish core RPM version compatibility
|
142
143
|
# and the version numbers MUST track the upstream). The appropriate EPEL version repo should work nearly perfectly. Some variation like the
|
@@ -287,6 +288,9 @@ Ohai.plugin(:Platform) do
|
|
287
288
|
# centos only includes the major version in os-release for some reason
|
288
289
|
if os_release_info["ID"] == "centos"
|
289
290
|
get_redhatish_version(file_read("/etc/redhat-release").chomp)
|
291
|
+
# debian testing and unstable don't have VERSION_ID set
|
292
|
+
elsif os_release_info["ID"] == "debian"
|
293
|
+
os_release_info["VERSION_ID"] || file_read("/etc/debian_version").chomp
|
290
294
|
else
|
291
295
|
os_release_info["VERSION_ID"] || shell_out("/bin/uname -r").stdout.strip
|
292
296
|
end
|
@@ -225,7 +225,11 @@ Ohai.plugin(:Virtualization) do
|
|
225
225
|
# If so, we may need to look further for a differentiator (OHAI-573)
|
226
226
|
virtualization[:systems][:lxc] = "host"
|
227
227
|
end
|
228
|
-
|
228
|
+
end
|
229
|
+
|
230
|
+
# regardless of what we found above, if we're a docker container inside
|
231
|
+
# of the above, lets report as a docker container
|
232
|
+
if file_exist?("/.dockerenv") || file_exist?("/.dockerinit")
|
229
233
|
logger.trace("Plugin Virtualization: .dockerenv or .dockerinit exist. Detecting as docker guest")
|
230
234
|
virtualization[:system] = "docker"
|
231
235
|
virtualization[:role] = "guest"
|
@@ -106,7 +106,7 @@ Ohai.plugin(:Packages) do
|
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
-
def collect_programs_from_registry_key(key_path)
|
109
|
+
def collect_programs_from_registry_key(repo, key_path)
|
110
110
|
# from http://msdn.microsoft.com/en-us/library/windows/desktop/aa384129(v=vs.85).aspx
|
111
111
|
if ::RbConfig::CONFIG["target_cpu"] == "i386"
|
112
112
|
reg_type = Win32::Registry::KEY_READ | 0x100
|
@@ -115,7 +115,7 @@ Ohai.plugin(:Packages) do
|
|
115
115
|
else
|
116
116
|
reg_type = Win32::Registry::KEY_READ
|
117
117
|
end
|
118
|
-
|
118
|
+
repo.open(key_path, reg_type) do |reg|
|
119
119
|
reg.each_key do |key, _wtime|
|
120
120
|
pkg = reg.open(key)
|
121
121
|
name = pkg["DisplayName"] rescue nil
|
@@ -133,9 +133,10 @@ Ohai.plugin(:Packages) do
|
|
133
133
|
collect_data(:windows) do
|
134
134
|
require "win32/registry" unless defined?(Win32::Registry)
|
135
135
|
packages Mash.new
|
136
|
-
collect_programs_from_registry_key('Software\Microsoft\Windows\CurrentVersion\Uninstall')
|
136
|
+
collect_programs_from_registry_key(Win32::Registry::HKEY_LOCAL_MACHINE, 'Software\Microsoft\Windows\CurrentVersion\Uninstall')
|
137
|
+
collect_programs_from_registry_key(Win32::Registry::HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Uninstall')
|
138
|
+
collect_programs_from_registry_key(Win32::Registry::HKEY_LOCAL_MACHINE, 'Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall')
|
137
139
|
# on 64 bit systems, 32 bit programs are stored here
|
138
|
-
collect_programs_from_registry_key('Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall')
|
139
140
|
end
|
140
141
|
|
141
142
|
collect_data(:aix) do
|
@@ -162,8 +162,8 @@ Ohai.plugin(:Rackspace) do
|
|
162
162
|
unless rackspace[:public_ip].nil?
|
163
163
|
rackspace[:public_hostname] = begin
|
164
164
|
Resolv.getname(rackspace[:public_ip])
|
165
|
-
|
166
|
-
|
165
|
+
rescue Resolv::ResolvError, Resolv::ResolvTimeout
|
166
|
+
rackspace[:public_ip]
|
167
167
|
end
|
168
168
|
end
|
169
169
|
rackspace[:local_ipv4] = rackspace[:private_ip]
|
data/lib/ohai/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ohai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 16.
|
4
|
+
version: 16.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Jacob
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-config
|
@@ -305,6 +305,7 @@ files:
|
|
305
305
|
- lib/ohai/plugins/linux/mdadm.rb
|
306
306
|
- lib/ohai/plugins/linux/memory.rb
|
307
307
|
- lib/ohai/plugins/linux/network.rb
|
308
|
+
- lib/ohai/plugins/linux/os_release.rb
|
308
309
|
- lib/ohai/plugins/linux/platform.rb
|
309
310
|
- lib/ohai/plugins/linux/selinux.rb
|
310
311
|
- lib/ohai/plugins/linux/sessions.rb
|
@@ -391,7 +392,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
391
392
|
- !ruby/object:Gem::Version
|
392
393
|
version: '0'
|
393
394
|
requirements: []
|
394
|
-
rubygems_version: 3.
|
395
|
+
rubygems_version: 3.1.4
|
395
396
|
signing_key:
|
396
397
|
specification_version: 4
|
397
398
|
summary: Ohai profiles your system and emits JSON
|