inspec-core 4.49.0 → 4.56.17
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 +7 -11
- data/inspec-core.gemspec +2 -2
- data/lib/bundles/inspec-supermarket/README.md +21 -2
- data/lib/bundles/inspec-supermarket/cli.rb +20 -3
- data/lib/bundles/inspec-supermarket/target.rb +3 -2
- data/lib/inspec/base_cli.rb +8 -0
- data/lib/inspec/cli.rb +12 -3
- data/lib/inspec/config.rb +5 -1
- data/lib/inspec/dependencies/requirement.rb +2 -1
- data/lib/inspec/formatters/base.rb +8 -6
- data/lib/inspec/globals.rb +5 -0
- data/lib/inspec/library_eval_context.rb +2 -0
- data/lib/inspec/plugin/v1/registry.rb +1 -1
- data/lib/inspec/plugin/v2/plugin_types/streaming_reporter.rb +10 -0
- data/lib/inspec/profile.rb +2 -0
- data/lib/inspec/profile_context.rb +1 -6
- data/lib/inspec/reporters/automate.rb +1 -1
- data/lib/inspec/reporters/json.rb +1 -1
- data/lib/inspec/resources/auditd.rb +5 -4
- data/lib/inspec/resources/bash.rb +2 -0
- data/lib/inspec/resources/file.rb +38 -0
- data/lib/inspec/resources/firewalld.rb +83 -9
- data/lib/inspec/resources/grub_conf.rb +1 -1
- data/lib/inspec/resources/http.rb +135 -54
- data/lib/inspec/resources/ibmdb2_session.rb +2 -2
- data/lib/inspec/resources/iptables.rb +18 -2
- data/lib/inspec/resources/kernel_parameters.rb +58 -0
- data/lib/inspec/resources/mssql_session.rb +11 -3
- data/lib/inspec/resources/oracledb_session.rb +3 -1
- data/lib/inspec/resources/package.rb +74 -1
- data/lib/inspec/resources/packages.rb +21 -0
- data/lib/inspec/resources/registry_key.rb +30 -0
- data/lib/inspec/resources/selinux.rb +6 -1
- data/lib/inspec/resources/service.rb +58 -9
- data/lib/inspec/resources/ssl.rb +7 -0
- data/lib/inspec/resources/timezone.rb +65 -0
- data/lib/inspec/resources.rb +2 -0
- data/lib/inspec/runner_rspec.rb +30 -0
- data/lib/inspec/utils/filter.rb +46 -2
- data/lib/inspec/utils/run_data_filters.rb +1 -1
- data/lib/inspec/version.rb +1 -1
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +1 -1
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +4 -3
- metadata +8 -5
@@ -84,8 +84,13 @@ module Inspec::Resources
|
|
84
84
|
|
85
85
|
def initialize(selinux_path = "/etc/selinux/config")
|
86
86
|
@path = selinux_path
|
87
|
-
|
87
|
+
if inspec.os.redhat? && inspec.os.name == "amazon"
|
88
|
+
lcmd = "/usr/sbin/sestatus"
|
89
|
+
else
|
90
|
+
lcmd = "sestatus"
|
91
|
+
end
|
88
92
|
|
93
|
+
cmd = inspec.command(lcmd)
|
89
94
|
if cmd.exit_status != 0
|
90
95
|
# `sestatus` command not found error message comes in stdout so handling both here
|
91
96
|
out = cmd.stdout + "\n" + cmd.stderr
|
@@ -163,7 +163,12 @@ module Inspec::Resources
|
|
163
163
|
when "mac_os_x", "darwin"
|
164
164
|
LaunchCtl.new(inspec, service_ctl)
|
165
165
|
when "freebsd"
|
166
|
-
|
166
|
+
version = os[:release].to_f
|
167
|
+
if version < 10
|
168
|
+
BSDInit.new(inspec, service_ctl)
|
169
|
+
else
|
170
|
+
FreeBSD10Init.new(inspec, service_ctl)
|
171
|
+
end
|
167
172
|
when "arch"
|
168
173
|
Systemd.new(inspec, service_ctl)
|
169
174
|
when "coreos"
|
@@ -186,6 +191,8 @@ module Inspec::Resources
|
|
186
191
|
Svcs.new(inspec)
|
187
192
|
when "yocto"
|
188
193
|
Systemd.new(inspec, service_ctl)
|
194
|
+
when "alpine"
|
195
|
+
SysV.new(inspec, service_ctl)
|
189
196
|
end
|
190
197
|
end
|
191
198
|
|
@@ -478,6 +485,7 @@ module Inspec::Resources
|
|
478
485
|
|
479
486
|
# @see: https://www.freebsd.org/doc/en/articles/linux-users/startup.html
|
480
487
|
# @see: https://www.freebsd.org/cgi/man.cgi?query=rc.conf&sektion=5
|
488
|
+
# @see: https://www.freebsd.org/cgi/man.cgi?query=rc&apropos=0&sektion=8&manpath=FreeBSD+9.3-RELEASE&arch=default&format=html
|
481
489
|
class BSDInit < ServiceManager
|
482
490
|
def initialize(service_name, service_ctl = nil)
|
483
491
|
@service_ctl = service_ctl || "service"
|
@@ -485,17 +493,20 @@ module Inspec::Resources
|
|
485
493
|
end
|
486
494
|
|
487
495
|
def info(service_name)
|
488
|
-
#
|
489
|
-
#
|
490
|
-
#
|
491
|
-
#
|
492
|
-
#
|
493
|
-
#
|
496
|
+
# `service -e` lists all enabled services. Output format:
|
497
|
+
# % service -e
|
498
|
+
# /etc/rc.d/hostid
|
499
|
+
# /etc/rc.d/hostid_save
|
500
|
+
# /etc/rc.d/cleanvar
|
501
|
+
# /etc/rc.d/ip6addrctl
|
502
|
+
# /etc/rc.d/devd
|
503
|
+
|
494
504
|
cmd = inspec.command("#{service_ctl} -e")
|
495
505
|
return nil if cmd.exit_status != 0
|
496
506
|
|
497
507
|
# search for the service
|
498
|
-
|
508
|
+
|
509
|
+
srv = %r{^.*/(#{service_name}$)}.match(cmd.stdout)
|
499
510
|
return nil if srv.nil? || srv[0].nil?
|
500
511
|
|
501
512
|
enabled = true
|
@@ -516,6 +527,37 @@ module Inspec::Resources
|
|
516
527
|
end
|
517
528
|
end
|
518
529
|
|
530
|
+
# @see: https://www.freebsd.org/doc/en/articles/linux-users/startup.html
|
531
|
+
# @see: https://www.freebsd.org/cgi/man.cgi?query=rc.conf&sektion=5
|
532
|
+
# @see: https://www.freebsd.org/cgi/man.cgi?query=rc&apropos=0&sektion=8&manpath=FreeBSD+10.0-RELEASE&arch=default&format=html
|
533
|
+
class FreeBSD10Init < ServiceManager
|
534
|
+
def initialize(service_name, service_ctl = nil)
|
535
|
+
@service_ctl = service_ctl || "service"
|
536
|
+
super
|
537
|
+
end
|
538
|
+
|
539
|
+
def info(service_name)
|
540
|
+
# check if service is enabled
|
541
|
+
cmd = inspec.command("#{service_ctl} #{service_name} enabled")
|
542
|
+
|
543
|
+
enabled = cmd.exit_status == 0
|
544
|
+
|
545
|
+
# check if the service is running
|
546
|
+
# if the service is not available or not running, we always get an error code
|
547
|
+
cmd = inspec.command("#{service_ctl} #{service_name} onestatus")
|
548
|
+
running = cmd.exit_status == 0
|
549
|
+
|
550
|
+
{
|
551
|
+
name: service_name,
|
552
|
+
description: nil,
|
553
|
+
installed: true,
|
554
|
+
running: running,
|
555
|
+
enabled: enabled,
|
556
|
+
type: "bsd-init",
|
557
|
+
}
|
558
|
+
end
|
559
|
+
end
|
560
|
+
|
519
561
|
class Runit < ServiceManager
|
520
562
|
def initialize(service_name, service_ctl = nil)
|
521
563
|
@service_ctl = service_ctl || "sv"
|
@@ -782,7 +824,14 @@ module Inspec::Resources
|
|
782
824
|
EXAMPLE
|
783
825
|
|
784
826
|
def select_service_mgmt
|
785
|
-
|
827
|
+
os = inspec.os
|
828
|
+
version = os[:release].to_f
|
829
|
+
|
830
|
+
if version >= 10
|
831
|
+
FreeBSD10Init.new(inspec, service_ctl)
|
832
|
+
else
|
833
|
+
BSDInit.new(inspec, service_ctl)
|
834
|
+
end
|
786
835
|
end
|
787
836
|
end
|
788
837
|
|
data/lib/inspec/resources/ssl.rb
CHANGED
@@ -38,6 +38,7 @@ module Inspec::Resources
|
|
38
38
|
"tls1.0",
|
39
39
|
"tls1.1",
|
40
40
|
"tls1.2",
|
41
|
+
"tls1.3",
|
41
42
|
].freeze
|
42
43
|
|
43
44
|
attr_reader :host, :port, :timeout, :retries
|
@@ -72,6 +73,11 @@ module Inspec::Resources
|
|
72
73
|
protocol: proto, ciphers: e.map(&:cipher),
|
73
74
|
timeout: x.resource.timeout, retries: x.resource.retries, servername: x.resource.host)]
|
74
75
|
end
|
76
|
+
|
77
|
+
if !res[0].empty? && res[0][1].key?("error") && res[0][1]["error"].include?("Connection error Errno::ECONNREFUSED")
|
78
|
+
raise "#{res[0][1]["error"]}"
|
79
|
+
end
|
80
|
+
|
75
81
|
Hash[res]
|
76
82
|
end
|
77
83
|
.install_filter_methods_on_resource(self, :scan_config)
|
@@ -89,6 +95,7 @@ module Inspec::Resources
|
|
89
95
|
{ "protocol" => "tls1.0", "ciphers" => SSLShake::TLS::TLS10_CIPHERS.keys },
|
90
96
|
{ "protocol" => "tls1.1", "ciphers" => SSLShake::TLS::TLS10_CIPHERS.keys },
|
91
97
|
{ "protocol" => "tls1.2", "ciphers" => SSLShake::TLS::TLS_CIPHERS.keys },
|
98
|
+
{ "protocol" => "tls1.3", "ciphers" => SSLShake::TLS::TLS13_CIPHERS.keys },
|
92
99
|
].map do |line|
|
93
100
|
line["ciphers"].map do |cipher|
|
94
101
|
{ "protocol" => line["protocol"], "cipher" => cipher }
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require "inspec/resources/command"
|
2
|
+
|
3
|
+
module Inspec::Resources
|
4
|
+
class TimeZone < Cmd
|
5
|
+
name "timezone"
|
6
|
+
supports platform: "unix"
|
7
|
+
supports platform: "windows"
|
8
|
+
|
9
|
+
desc "Check for timezone configurations"
|
10
|
+
example <<~EXAMPLE
|
11
|
+
describe timezone do
|
12
|
+
its('identifier') { should eq 'Asia/Kolkata' }
|
13
|
+
its('name') { should eq 'IST' }
|
14
|
+
its('time_offset') { should eq '+0530' }
|
15
|
+
end
|
16
|
+
EXAMPLE
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@output = {}
|
20
|
+
os = inspec.os
|
21
|
+
cmd = if os.windows?
|
22
|
+
inspec.command("Get-TimeZone")
|
23
|
+
else
|
24
|
+
inspec.command("timedatectl status | grep -i 'Time zone'")
|
25
|
+
end
|
26
|
+
if cmd.exit_status != 0
|
27
|
+
raise Inspec::Exceptions::ResourceFailed, "Time Zone resource with error: #{cmd.stderr}"
|
28
|
+
else
|
29
|
+
if os.windows?
|
30
|
+
splitted_output = cmd.stdout.strip.gsub(/\r/, "").split("\n").select { |out| (out.include? "Id") || (out.include? "DisplayName") || (out.include? "BaseUtcOffset") }
|
31
|
+
@output["identifier"] = split_and_fetch_last(splitted_output[1])
|
32
|
+
@output["name"] = split_and_fetch_last(splitted_output[0])
|
33
|
+
@output["time_offset"] = split_and_fetch_last(splitted_output[2])
|
34
|
+
else
|
35
|
+
splitted_output = cmd.stdout.split(":")[-1]&.strip&.gsub(/[(),^]*/, "")&.split(" ") || []
|
36
|
+
@output["identifier"] = splitted_output[0]
|
37
|
+
@output["name"] = splitted_output[1]
|
38
|
+
@output["time_offset"] = splitted_output[2]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def identifier
|
44
|
+
@output["identifier"]
|
45
|
+
end
|
46
|
+
|
47
|
+
def name
|
48
|
+
@output["name"]
|
49
|
+
end
|
50
|
+
|
51
|
+
def time_offset
|
52
|
+
@output["time_offset"]
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_s
|
56
|
+
"Time Zone resource"
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def split_and_fetch_last(string_value)
|
62
|
+
string_value.split(" :")[-1].strip
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/inspec/resources.rb
CHANGED
@@ -41,6 +41,7 @@ require "inspec/resources/cassandradb_session"
|
|
41
41
|
require "inspec/resources/cassandradb_conf"
|
42
42
|
require "inspec/resources/cassandra"
|
43
43
|
require "inspec/resources/crontab"
|
44
|
+
require "inspec/resources/timezone"
|
44
45
|
require "inspec/resources/dh_params"
|
45
46
|
require "inspec/resources/directory"
|
46
47
|
require "inspec/resources/docker"
|
@@ -72,6 +73,7 @@ require "inspec/resources/ip6tables"
|
|
72
73
|
require "inspec/resources/iptables"
|
73
74
|
require "inspec/resources/kernel_module"
|
74
75
|
require "inspec/resources/kernel_parameter"
|
76
|
+
require "inspec/resources/kernel_parameters"
|
75
77
|
require "inspec/resources/key_rsa"
|
76
78
|
require "inspec/resources/ksh"
|
77
79
|
require "inspec/resources/limits_conf"
|
data/lib/inspec/runner_rspec.rb
CHANGED
@@ -123,6 +123,8 @@ module Inspec
|
|
123
123
|
def set_optional_formatters
|
124
124
|
return if @conf["reporter"].nil?
|
125
125
|
|
126
|
+
# This is a slightly modified version of the default RSpec JSON formatter
|
127
|
+
# No one in their right mind should be using this because we have a much better JSON reporter - named "json"
|
126
128
|
if @conf["reporter"].key?("json-rspec")
|
127
129
|
# We cannot pass in a nil output path. Rspec only accepts a valid string or a IO object.
|
128
130
|
if @conf["reporter"]["json-rspec"]&.[]("file").nil?
|
@@ -133,6 +135,7 @@ module Inspec
|
|
133
135
|
@conf["reporter"].delete("json-rspec")
|
134
136
|
end
|
135
137
|
|
138
|
+
# These are built-in to rspec
|
136
139
|
formats = @conf["reporter"].select { |k, _v| %w{documentation progress html}.include?(k) }
|
137
140
|
formats.each do |k, v|
|
138
141
|
# We cannot pass in a nil output path. Rspec only accepts a valid string or a IO object.
|
@@ -143,6 +146,33 @@ module Inspec
|
|
143
146
|
end
|
144
147
|
@conf["reporter"].delete(k)
|
145
148
|
end
|
149
|
+
|
150
|
+
# Here we need to look for reporter names in the reporter option that
|
151
|
+
# are names of streaming reporter plugins. We load them, then tell RSpec to add them as formatters.
|
152
|
+
# They will have already been detected at this point (see v2_loader.load_all in cli.rb)
|
153
|
+
# but they will not be activated activated at this point.
|
154
|
+
# then list all plugins by type by name
|
155
|
+
reg = Inspec::Plugin::V2::Registry.instance
|
156
|
+
streaming_reporters = reg\
|
157
|
+
.find_activators(plugin_type: :streaming_reporter)\
|
158
|
+
.map(&:activator_name).map(&:to_s)
|
159
|
+
|
160
|
+
@conf["reporter"].each do |streaming_reporter_name, file_target|
|
161
|
+
# It could be a non-streaming reporter
|
162
|
+
next unless streaming_reporters.include? streaming_reporter_name
|
163
|
+
|
164
|
+
# Activate the plugin so the formatter ID gets registered with RSpec, presumably
|
165
|
+
activator = reg.find_activator(plugin_type: :streaming_reporter, activator_name: streaming_reporter_name.to_sym)
|
166
|
+
activator.activate!
|
167
|
+
|
168
|
+
# We cannot pass in a nil output path. Rspec only accepts a valid string or a IO object.
|
169
|
+
if file_target&.[]("file").nil?
|
170
|
+
RSpec.configuration.add_formatter(activator.implementation_class)
|
171
|
+
else
|
172
|
+
RSpec.configuration.add_formatter(activator.implementation_class, file_target["file"])
|
173
|
+
end
|
174
|
+
@conf["reporter"].delete(streaming_reporter_name)
|
175
|
+
end
|
146
176
|
end
|
147
177
|
|
148
178
|
# Configure the output formatter and stream to be used with RSpec.
|
data/lib/inspec/utils/filter.rb
CHANGED
@@ -114,6 +114,7 @@ module FilterTable
|
|
114
114
|
raise(ArgumentError, "'#{decorate_symbols(raw_field_name)}' is not a recognized criterion - expected one of #{decorate_symbols(list_fields).join(", ")}'") unless field?(raw_field_name)
|
115
115
|
|
116
116
|
populate_lazy_field(raw_field_name, desired_value) if is_field_lazy?(raw_field_name)
|
117
|
+
populate_lazy_instance_field(raw_field_name, desired_value) if is_field_lazy_instance?(raw_field_name)
|
117
118
|
new_criteria_string += " #{raw_field_name} == #{desired_value.inspect}"
|
118
119
|
filtered_raw_data = filter_raw_data(filtered_raw_data, raw_field_name, desired_value)
|
119
120
|
end
|
@@ -188,6 +189,8 @@ module FilterTable
|
|
188
189
|
is_field ||= list_fields.include?(proposed_field.to_sym)
|
189
190
|
is_field ||= is_field_lazy?(proposed_field.to_s)
|
190
191
|
is_field ||= is_field_lazy?(proposed_field.to_sym)
|
192
|
+
is_field ||= is_field_lazy_instance?(proposed_field.to_s)
|
193
|
+
is_field ||= is_field_lazy_instance?(proposed_field.to_sym)
|
191
194
|
|
192
195
|
is_field
|
193
196
|
end
|
@@ -210,6 +213,23 @@ module FilterTable
|
|
210
213
|
mark_lazy_field_populated(field_name)
|
211
214
|
end
|
212
215
|
|
216
|
+
def populate_lazy_instance_field(field_name, criterion)
|
217
|
+
return unless is_field_lazy_instance?(field_name)
|
218
|
+
return if field_populated?(field_name)
|
219
|
+
|
220
|
+
raw_data.each do |row|
|
221
|
+
next if row.key?(field_name) # skip row if pre-existing data is present
|
222
|
+
|
223
|
+
lazy_caller = callback_for_lazy_instance_field(field_name)
|
224
|
+
if lazy_caller.is_a?(Proc)
|
225
|
+
lazy_caller.call(row, criterion, resource_instance)
|
226
|
+
elsif lazy_caller.is_a?(Symbol)
|
227
|
+
resource_instance.send(lazy_caller, row, criterion, self)
|
228
|
+
end
|
229
|
+
end
|
230
|
+
mark_lazy_field_populated(field_name)
|
231
|
+
end
|
232
|
+
|
213
233
|
def is_field_lazy?(sought_field_name)
|
214
234
|
custom_properties_schema.values.any? do |property_struct|
|
215
235
|
sought_field_name == property_struct.field_name && \
|
@@ -217,6 +237,13 @@ module FilterTable
|
|
217
237
|
end
|
218
238
|
end
|
219
239
|
|
240
|
+
def is_field_lazy_instance?(sought_field_name)
|
241
|
+
custom_properties_schema.values.any? do |property_struct|
|
242
|
+
sought_field_name == property_struct.field_name && \
|
243
|
+
property_struct.opts[:lazy_instance]
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
220
247
|
def callback_for_lazy_field(field_name)
|
221
248
|
return unless is_field_lazy?(field_name)
|
222
249
|
|
@@ -225,6 +252,14 @@ module FilterTable
|
|
225
252
|
end.opts[:lazy]
|
226
253
|
end
|
227
254
|
|
255
|
+
def callback_for_lazy_instance_field(field_name)
|
256
|
+
return unless is_field_lazy_instance?(field_name)
|
257
|
+
|
258
|
+
custom_properties_schema.values.find do |property_struct|
|
259
|
+
property_struct.field_name == field_name
|
260
|
+
end.opts[:lazy_instance]
|
261
|
+
end
|
262
|
+
|
228
263
|
def field_populated?(field_name)
|
229
264
|
@populated_lazy_columns[field_name]
|
230
265
|
end
|
@@ -349,12 +384,18 @@ module FilterTable
|
|
349
384
|
# args of the row struct; also the Struct class will already have provided
|
350
385
|
# a setter for each field.
|
351
386
|
@custom_properties.values.each do |property_info|
|
352
|
-
next unless property_info.opts[:lazy]
|
387
|
+
next unless property_info.opts[:lazy] || property_info.opts[:lazy_instance]
|
353
388
|
|
354
389
|
field_name = property_info.field_name.to_sym
|
355
390
|
row_eval_context_type.send(:define_method, field_name) do
|
356
391
|
unless filter_table.field_populated?(field_name)
|
357
|
-
|
392
|
+
if property_info.opts[:lazy]
|
393
|
+
filter_table.populate_lazy_field(field_name, NoCriteriaProvided)
|
394
|
+
end # No access to criteria here
|
395
|
+
if property_info.opts[:lazy_instance]
|
396
|
+
filter_table.populate_lazy_instance_field(field_name,
|
397
|
+
NoCriteriaProvided)
|
398
|
+
end
|
358
399
|
# OK, the underlying raw data has the value in the first row
|
359
400
|
# (because we would trigger population only on the first row)
|
360
401
|
# We could just return the value, but we need to set it on this Struct in case it is referenced multiple times
|
@@ -449,7 +490,10 @@ module FilterTable
|
|
449
490
|
result = where(nil)
|
450
491
|
if custom_property_struct.opts[:lazy]
|
451
492
|
result.populate_lazy_field(custom_property_struct.field_name, filter_criteria_value)
|
493
|
+
elsif custom_property_struct.opts[:lazy_instance]
|
494
|
+
result.populate_lazy_instance_field(custom_property_struct.field_name, filter_criteria_value)
|
452
495
|
end
|
496
|
+
|
453
497
|
result = where(nil).get_column_values(custom_property_struct.field_name) # TODO: the where(nil). is likely unneeded
|
454
498
|
result = result.flatten.uniq.compact if custom_property_struct.opts[:style] == :simple
|
455
499
|
result
|
@@ -65,7 +65,7 @@ module Inspec
|
|
65
65
|
c[:results]&.each do |r|
|
66
66
|
next unless r[:message] # :message only set on failure
|
67
67
|
|
68
|
-
pos = r[:message].index(
|
68
|
+
pos = r[:message].index(/\n{1,2}Diff.*:/)
|
69
69
|
next unless pos # Only textual tests get Diffs
|
70
70
|
|
71
71
|
r[:message] = r[:message].slice(0, pos)
|
data/lib/inspec/version.rb
CHANGED
@@ -84,7 +84,7 @@ module InspecPlugins
|
|
84
84
|
return {} if data.nil? || data.empty?
|
85
85
|
|
86
86
|
parsed = JSON.parse(data)
|
87
|
-
return {} unless parsed.key?("
|
87
|
+
return {} unless parsed.key?("build_timestamp") && !parsed["build_timestamp"].empty?
|
88
88
|
|
89
89
|
parsed
|
90
90
|
end
|
@@ -219,9 +219,10 @@ module InspecPlugins
|
|
219
219
|
def version
|
220
220
|
config = InspecPlugins::Compliance::Configuration.new
|
221
221
|
info = InspecPlugins::Compliance::API.version(config)
|
222
|
-
if !info.nil? && info["
|
223
|
-
|
224
|
-
puts "
|
222
|
+
if !info.nil? && info["build_timestamp"]
|
223
|
+
# key info["api"] is not longer available in latest version api response
|
224
|
+
puts "Name: automate"
|
225
|
+
puts "Version: #{info["build_timestamp"]}"
|
225
226
|
else
|
226
227
|
puts "Could not determine server version."
|
227
228
|
exit 1
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inspec-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.56.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chef InSpec Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-telemetry
|
@@ -117,7 +117,7 @@ dependencies:
|
|
117
117
|
- - ">="
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: '3.9'
|
120
|
-
- - "
|
120
|
+
- - "<="
|
121
121
|
- !ruby/object:Gem::Version
|
122
122
|
version: '3.11'
|
123
123
|
type: :runtime
|
@@ -127,7 +127,7 @@ dependencies:
|
|
127
127
|
- - ">="
|
128
128
|
- !ruby/object:Gem::Version
|
129
129
|
version: '3.9'
|
130
|
-
- - "
|
130
|
+
- - "<="
|
131
131
|
- !ruby/object:Gem::Version
|
132
132
|
version: '3.11'
|
133
133
|
- !ruby/object:Gem::Dependency
|
@@ -479,6 +479,7 @@ files:
|
|
479
479
|
- lib/inspec/plugin/v2/plugin_types/input.rb
|
480
480
|
- lib/inspec/plugin/v2/plugin_types/mock.rb
|
481
481
|
- lib/inspec/plugin/v2/plugin_types/reporter.rb
|
482
|
+
- lib/inspec/plugin/v2/plugin_types/streaming_reporter.rb
|
482
483
|
- lib/inspec/plugin/v2/registry.rb
|
483
484
|
- lib/inspec/plugin/v2/status.rb
|
484
485
|
- lib/inspec/profile.rb
|
@@ -554,6 +555,7 @@ files:
|
|
554
555
|
- lib/inspec/resources/json.rb
|
555
556
|
- lib/inspec/resources/kernel_module.rb
|
556
557
|
- lib/inspec/resources/kernel_parameter.rb
|
558
|
+
- lib/inspec/resources/kernel_parameters.rb
|
557
559
|
- lib/inspec/resources/key_rsa.rb
|
558
560
|
- lib/inspec/resources/ksh.rb
|
559
561
|
- lib/inspec/resources/launchd_service.rb
|
@@ -619,6 +621,7 @@ files:
|
|
619
621
|
- lib/inspec/resources/sys_info.rb
|
620
622
|
- lib/inspec/resources/systemd_service.rb
|
621
623
|
- lib/inspec/resources/sysv_service.rb
|
624
|
+
- lib/inspec/resources/timezone.rb
|
622
625
|
- lib/inspec/resources/toml.rb
|
623
626
|
- lib/inspec/resources/upstart_service.rb
|
624
627
|
- lib/inspec/resources/user.rb
|
@@ -788,7 +791,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
788
791
|
requirements:
|
789
792
|
- - ">="
|
790
793
|
- !ruby/object:Gem::Version
|
791
|
-
version: '2.
|
794
|
+
version: '2.6'
|
792
795
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
793
796
|
requirements:
|
794
797
|
- - ">="
|