inspec-core 4.23.15 → 4.24.8
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 +20 -29
- data/inspec-core.gemspec +1 -2
- data/lib/inspec/formatters/base.rb +16 -0
- data/lib/inspec/globals.rb +8 -2
- data/lib/inspec/plugin/v2/loader.rb +5 -0
- data/lib/inspec/reporters/json.rb +2 -0
- data/lib/inspec/resource.rb +2 -0
- data/lib/inspec/resources/grub_conf.rb +2 -1
- data/lib/inspec/resources/package.rb +1 -1
- data/lib/inspec/resources/platform.rb +11 -1
- data/lib/inspec/resources/wmi.rb +15 -7
- data/lib/inspec/run_data.rb +1 -1
- data/lib/inspec/run_data/result.rb +2 -0
- data/lib/inspec/schema.rb +2 -0
- data/lib/inspec/version.rb +1 -1
- metadata +4 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40b226d810bf523c7b914a00d3e3e0556d23eb78b944f12fe7af7fac35a279f4
|
4
|
+
data.tar.gz: ff6cafe82a9e7234814575a3723098ccb1238fb88754cb4891288547e9c3a47b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c663121d4e9dba5764ba321d391b4779f3b9236b827fc7dca58aa2a6a3b9d76a5749205635c38ca6a28f614364f19fef1c7c790321067fef2ae1e1eb9a1dbd74
|
7
|
+
data.tar.gz: da255c1b0637e48aa1f83ea42607829767450bd03fd5f970e527afa81898ba215b7ac4ec66c508d23ef2de74ebb9e3dc26893427c76ab4176e67ffaf5df42c54
|
data/Gemfile
CHANGED
@@ -11,6 +11,11 @@ gem "inspec-bin", path: "./inspec-bin"
|
|
11
11
|
|
12
12
|
gem "ffi", ">= 1.9.14", "!= 1.13.0"
|
13
13
|
|
14
|
+
if Gem.ruby_version.to_s.start_with?("2.5")
|
15
|
+
# 16.7.23 required ruby 2.6+
|
16
|
+
gem "chef-utils", "< 16.7.23" # TODO: remove when we drop ruby 2.5
|
17
|
+
end
|
18
|
+
|
14
19
|
group :omnibus do
|
15
20
|
gem "rb-readline"
|
16
21
|
gem "appbundler"
|
@@ -20,45 +25,31 @@ end
|
|
20
25
|
|
21
26
|
group :test do
|
22
27
|
gem "chefstyle", "~> 1.2.1"
|
23
|
-
gem "minitest", "~> 5.5"
|
24
|
-
gem "minitest-sprint", "~> 1.0"
|
25
|
-
gem "rake", ">= 10"
|
26
|
-
gem "simplecov", ["~> 0.10", "<=0.18.2"]
|
27
28
|
gem "concurrent-ruby", "~> 1.0"
|
28
|
-
gem "
|
29
|
+
gem "html-proofer", platforms: :ruby # do not attempt to run proofer on windows
|
30
|
+
gem "json_schemer", ">= 0.2.1", "< 0.2.12"
|
31
|
+
gem "m"
|
32
|
+
gem "minitest-sprint", "~> 1.0"
|
33
|
+
gem "minitest", "~> 5.5"
|
29
34
|
gem "mocha", "~> 1.1"
|
35
|
+
gem "nokogiri", "~> 1.9"
|
36
|
+
gem "pry-byebug"
|
37
|
+
gem "pry", "~> 0.10"
|
38
|
+
gem "rake", ">= 10"
|
30
39
|
gem "ruby-progressbar", "~> 1.8"
|
40
|
+
gem "simplecov", ["~> 0.10", "<=0.18.2"]
|
31
41
|
gem "webmock", "~> 3.0"
|
32
|
-
gem "m"
|
33
|
-
gem "pry", "~> 0.10"
|
34
|
-
gem "pry-byebug"
|
35
|
-
gem "html-proofer", platforms: :ruby # do not attempt to run proofer on windows
|
36
42
|
end
|
37
43
|
|
38
44
|
group :integration do
|
39
45
|
gem "berkshelf"
|
40
|
-
gem "test-kitchen"
|
41
|
-
gem "kitchen-vagrant"
|
42
|
-
gem "
|
43
|
-
gem "
|
44
|
-
gem "kitchen-inspec"
|
45
|
-
gem "kitchen-ec2"
|
46
|
-
gem "kitchen-dokken"
|
46
|
+
gem "test-kitchen", ">= 2.8"
|
47
|
+
gem "kitchen-vagrant", ">= 1.7"
|
48
|
+
gem "kitchen-inspec", ">= 2.0"
|
49
|
+
gem "kitchen-dokken", ">= 2.11"
|
47
50
|
gem "git"
|
48
51
|
end
|
49
52
|
|
50
|
-
# gems for Maintainers.md generation
|
51
|
-
group :maintenance do
|
52
|
-
gem "tomlrb"
|
53
|
-
|
54
|
-
# To sync maintainers with github
|
55
|
-
gem "octokit"
|
56
|
-
gem "netrc"
|
57
|
-
end
|
58
|
-
|
59
53
|
group :deploy do
|
60
54
|
gem "inquirer"
|
61
|
-
end
|
62
|
-
|
63
|
-
# add these additional dependencies into Gemfile.local
|
64
|
-
eval_gemfile(__FILE__ + ".local") if File.exist?(__FILE__ + ".local")
|
55
|
+
end
|
data/inspec-core.gemspec
CHANGED
@@ -26,10 +26,9 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_dependency "chef-telemetry", "~> 1.0"
|
27
27
|
spec.add_dependency "license-acceptance", ">= 0.2.13", "< 3.0"
|
28
28
|
spec.add_dependency "thor", ">= 0.20", "< 2.0"
|
29
|
-
spec.add_dependency "json_schemer", ">= 0.2.1", "< 0.2.12"
|
30
29
|
spec.add_dependency "method_source", ">= 0.8", "< 2.0"
|
31
30
|
spec.add_dependency "rubyzip", "~> 1.2", ">= 1.2.2"
|
32
|
-
spec.add_dependency "rspec", "~> 3.9"
|
31
|
+
spec.add_dependency "rspec", "~> 3.9.0"
|
33
32
|
spec.add_dependency "rspec-its", "~> 1.2"
|
34
33
|
spec.add_dependency "pry", "~> 0.13"
|
35
34
|
spec.add_dependency "hashie", "~> 3.4"
|
@@ -159,6 +159,14 @@ module Inspec::Formatters
|
|
159
159
|
resource_title: example.metadata[:described_class] || example.metadata[:example_group][:description],
|
160
160
|
expectation_message: format_expectation_message(example),
|
161
161
|
waiver_data: example.metadata[:waiver_data],
|
162
|
+
# This enforces the resource name as expected based off of the class
|
163
|
+
# name. However, if we wanted the `name` attribute against the class
|
164
|
+
# to be canonical for this case (consider edge cases!) we would use
|
165
|
+
# example.metadata[:described_class].instance_variable_get(:@__resource_name__)&.to_s
|
166
|
+
resource_class: example.metadata[:described_class].class.superclass.name,
|
167
|
+
# This is a raw grep of the text passed to the resource in any format,
|
168
|
+
# and is used to enforce near-uniqueness against the resource.
|
169
|
+
resource_params: find_resource_params(example.metadata[:described_class]),
|
162
170
|
}
|
163
171
|
|
164
172
|
unless (pid = example.metadata[:profile_id]).nil?
|
@@ -174,6 +182,14 @@ module Inspec::Formatters
|
|
174
182
|
res
|
175
183
|
end
|
176
184
|
|
185
|
+
def find_resource_params(example)
|
186
|
+
if example.class.ancestors.include?(Inspec::Resource)
|
187
|
+
example.instance_variable_get(:@resource_params)
|
188
|
+
else
|
189
|
+
[]
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
177
193
|
def format_expectation_message(example)
|
178
194
|
if (example.metadata[:example_group][:description_args].first == example.metadata[:example_group][:described_class]) ||
|
179
195
|
example.metadata[:example_group][:described_class].nil?
|
data/lib/inspec/globals.rb
CHANGED
@@ -1,15 +1,21 @@
|
|
1
1
|
require_relative "utils/install_context"
|
2
2
|
|
3
3
|
module Inspec
|
4
|
-
|
5
4
|
extend Inspec::InstallContextHelpers
|
6
5
|
|
7
6
|
def self.config_dir
|
8
|
-
ENV["INSPEC_CONFIG_DIR"]
|
7
|
+
ENV["INSPEC_CONFIG_DIR"] || File.join(home_path, ".inspec")
|
9
8
|
end
|
10
9
|
|
11
10
|
def self.src_root
|
12
11
|
@src_root ||= File.expand_path(File.join(__FILE__, "../../.."))
|
13
12
|
end
|
14
13
|
|
14
|
+
def self.home_path
|
15
|
+
Dir.home
|
16
|
+
rescue ArgumentError, NoMethodError
|
17
|
+
# If ENV['HOME'] is not set, Dir.home will fail due to expanding the ~. Fallback to Etc.
|
18
|
+
require "etc" unless defined?(Etc)
|
19
|
+
Etc.getpwuid.dir
|
20
|
+
end
|
15
21
|
end
|
@@ -50,6 +50,11 @@ module Inspec::Plugin::V2
|
|
50
50
|
# we want to allow "sidecar loading", in which case a plugin may add an entry to the registry.
|
51
51
|
registry.plugin_names.dup.each do |plugin_name|
|
52
52
|
plugin_details = registry[plugin_name]
|
53
|
+
|
54
|
+
# Under some conditions (kitchen-inspec with multiple test suites, for example), this may be
|
55
|
+
# called multple times. Don't reload anything.
|
56
|
+
next if plugin_details.loaded
|
57
|
+
|
53
58
|
# We want to capture literally any possible exception here, since we are storing them.
|
54
59
|
# rubocop: disable Lint/RescueException
|
55
60
|
begin
|
data/lib/inspec/resource.rb
CHANGED
@@ -108,6 +108,7 @@ module Inspec
|
|
108
108
|
# Infrastructure / Bookkeeping
|
109
109
|
|
110
110
|
def self.__register(name, resource_klass)
|
111
|
+
# This has bitten us and should be a great candidate to remove in InSpec5
|
111
112
|
cl = Class.new(resource_klass) do # TODO: remove
|
112
113
|
# As best I can figure out, this anonymous class only exists
|
113
114
|
# because we're trying to avoid having resources with
|
@@ -116,6 +117,7 @@ module Inspec
|
|
116
117
|
# documentation.
|
117
118
|
def initialize(backend, name, *args)
|
118
119
|
supersuper_initialize(backend, name) do
|
120
|
+
@resource_params = args
|
119
121
|
super(*args)
|
120
122
|
end
|
121
123
|
end
|
@@ -29,7 +29,7 @@ module Inspec::Resources
|
|
29
29
|
@content = read_file(@conf_path)
|
30
30
|
@kernel = kernel || "default"
|
31
31
|
rescue UnknownGrubConfig
|
32
|
-
skip_resource "The `
|
32
|
+
skip_resource "The `grub_conf` resource is not yet supported on the target OS #{inspec.os[:name]}."
|
33
33
|
end
|
34
34
|
|
35
35
|
def config_for_platform(path)
|
@@ -77,6 +77,7 @@ module Inspec::Resources
|
|
77
77
|
|
78
78
|
def grub2_parse_kernel_lines(content, conf)
|
79
79
|
menu_entries = extract_menu_entries(content)
|
80
|
+
return {} if menu_entries.empty?
|
80
81
|
|
81
82
|
if @kernel == "default"
|
82
83
|
default_menu_entry(menu_entries, conf["GRUB_DEFAULT"])
|
@@ -314,7 +314,7 @@ module Inspec::Resources
|
|
314
314
|
# Find the package
|
315
315
|
cmd = inspec.command <<-EOF.gsub(/^\s*/, "")
|
316
316
|
Get-ItemProperty (@("#{search_paths.join('", "')}") | Where-Object { Test-Path $_ }) |
|
317
|
-
Where-Object { $_.DisplayName -
|
317
|
+
Where-Object { $_.DisplayName -like "#{package_name}" -or $_.PSChildName -like "#{package_name}" } |
|
318
318
|
Select-Object -Property DisplayName,DisplayVersion | ConvertTo-Json
|
319
319
|
EOF
|
320
320
|
|
@@ -81,7 +81,7 @@ module Inspec::Resources
|
|
81
81
|
when :os, :platform then
|
82
82
|
platform?(v)
|
83
83
|
when :os_name, :platform_name then
|
84
|
-
|
84
|
+
check_name(v)
|
85
85
|
when :release then
|
86
86
|
check_release(v)
|
87
87
|
end
|
@@ -99,6 +99,16 @@ module Inspec::Resources
|
|
99
99
|
|
100
100
|
private
|
101
101
|
|
102
|
+
def check_name(value)
|
103
|
+
# allow wild card matching
|
104
|
+
if value.include?("*")
|
105
|
+
cleaned = Regexp.escape(value).gsub('\*', ".*?")
|
106
|
+
name =~ /#{cleaned}/
|
107
|
+
else
|
108
|
+
name == value
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
102
112
|
def check_release(value)
|
103
113
|
# allow wild card matching
|
104
114
|
if value.include?("*")
|
data/lib/inspec/resources/wmi.rb
CHANGED
@@ -16,7 +16,10 @@ module Inspec::Resources
|
|
16
16
|
namespace: 'root\\rsop\\computer',
|
17
17
|
filter: 'KeyName = \'MinimumPasswordAge\' And precedence=1'
|
18
18
|
}) do
|
19
|
-
its('Setting') { should
|
19
|
+
its('Setting') { should cmp true }
|
20
|
+
end
|
21
|
+
describe wmi({namespace: "root\\cimv2", query: "SELECT installstate FROM win32_optionalfeature"}) do
|
22
|
+
its("installstate") { should include 2 }
|
20
23
|
end
|
21
24
|
EXAMPLE
|
22
25
|
|
@@ -66,13 +69,18 @@ module Inspec::Resources
|
|
66
69
|
|
67
70
|
# run wmi command and filter empty wmi
|
68
71
|
script = <<-EOH
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
$
|
73
|
-
|
72
|
+
Function Aggregate {
|
73
|
+
$propsHash = @{}
|
74
|
+
ForEach ($wmiObj in $Input) {
|
75
|
+
ForEach ($wmiProp in $wmiObj.properties) {
|
76
|
+
If($propsHash.ContainsKey($wmiProp.name)) {
|
77
|
+
$propsHash[$wmiProp.name].add($wmiProp.value) | Out-Null
|
78
|
+
} Else {
|
79
|
+
$propsHash[$wmiProp.name] = [System.Collections.ArrayList]@($wmiProp.value)
|
80
|
+
}
|
74
81
|
}
|
75
|
-
|
82
|
+
}
|
83
|
+
$propsHash
|
76
84
|
}
|
77
85
|
Get-WmiObject #{params} | Aggregate | ConvertTo-Json
|
78
86
|
EOH
|
data/lib/inspec/run_data.rb
CHANGED
@@ -47,7 +47,7 @@ module Inspec
|
|
47
47
|
# core reporters have been migrated to plugins. It is probable that new data elements
|
48
48
|
# and new Hash compatibility behavior will be added during the core reporter plugin
|
49
49
|
# conversion process.
|
50
|
-
SCHEMA_VERSION = "0.
|
50
|
+
SCHEMA_VERSION = "0.3.0".freeze
|
51
51
|
|
52
52
|
def self.compatible_schema?(constraints)
|
53
53
|
reqs = Gem::Requirement.create(constraints)
|
@@ -8,6 +8,7 @@ module Inspec
|
|
8
8
|
:run_time, # Float seconds execution time
|
9
9
|
:skip_message, # String
|
10
10
|
:start_time, # DateTime
|
11
|
+
:resource_params, # What is passed to the resource as a raw grep
|
11
12
|
:status, # String
|
12
13
|
:resource_title, # Ugly internals
|
13
14
|
# :waiver_data, # Undocumented tramp data / not exposed in this API
|
@@ -34,6 +35,7 @@ module Inspec
|
|
34
35
|
end
|
35
36
|
|
36
37
|
self.resource_name = raw_res_data[:resource_title].instance_variable_get(:@__resource_name__)&.to_s
|
38
|
+
self.resource_params = raw_res_data[:resource_title].instance_variable_get(:@grep)&.to_s
|
37
39
|
end
|
38
40
|
end
|
39
41
|
end
|
data/lib/inspec/schema.rb
CHANGED
@@ -56,6 +56,7 @@ module Inspec
|
|
56
56
|
"code_desc" => { "type" => "string" },
|
57
57
|
"run_time" => { "type" => "number" },
|
58
58
|
"start_time" => { "type" => "string" },
|
59
|
+
"resource_class" => { "type" => "string", "optional" => true },
|
59
60
|
"skip_message" => { "type" => "string", "optional" => true },
|
60
61
|
"resource" => { "type" => "string", "optional" => true },
|
61
62
|
"message" => { "type" => "string", "optional" => true },
|
@@ -194,6 +195,7 @@ module Inspec
|
|
194
195
|
"profile_sha256" => { "type" => "string" },
|
195
196
|
"status" => { "type" => "string" },
|
196
197
|
"code_desc" => { "type" => "string" },
|
198
|
+
"resource_class" => { "type" => "string", "optional" => true },
|
197
199
|
"skip_message" => { "type" => "string", "optional" => true },
|
198
200
|
"resource" => { "type" => "string", "optional" => true },
|
199
201
|
"message" => { "type" => "string", "optional" => true },
|
data/lib/inspec/version.rb
CHANGED
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.24.8
|
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: 2020-
|
11
|
+
date: 2020-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-telemetry
|
@@ -64,26 +64,6 @@ dependencies:
|
|
64
64
|
- - "<"
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: '2.0'
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
name: json_schemer
|
69
|
-
requirement: !ruby/object:Gem::Requirement
|
70
|
-
requirements:
|
71
|
-
- - ">="
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: 0.2.1
|
74
|
-
- - "<"
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: 0.2.12
|
77
|
-
type: :runtime
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - ">="
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: 0.2.1
|
84
|
-
- - "<"
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
version: 0.2.12
|
87
67
|
- !ruby/object:Gem::Dependency
|
88
68
|
name: method_source
|
89
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,14 +110,14 @@ dependencies:
|
|
130
110
|
requirements:
|
131
111
|
- - "~>"
|
132
112
|
- !ruby/object:Gem::Version
|
133
|
-
version:
|
113
|
+
version: 3.9.0
|
134
114
|
type: :runtime
|
135
115
|
prerelease: false
|
136
116
|
version_requirements: !ruby/object:Gem::Requirement
|
137
117
|
requirements:
|
138
118
|
- - "~>"
|
139
119
|
- !ruby/object:Gem::Version
|
140
|
-
version:
|
120
|
+
version: 3.9.0
|
141
121
|
- !ruby/object:Gem::Dependency
|
142
122
|
name: rspec-its
|
143
123
|
requirement: !ruby/object:Gem::Requirement
|