inspec-core 5.22.72 → 5.22.95
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 -5
- data/inspec-core.gemspec +7 -8
- data/lib/inspec/exceptions.rb +1 -0
- data/lib/inspec/fetcher/git.rb +21 -1
- data/lib/inspec/profile.rb +10 -3
- data/lib/inspec/resources/audit_policy.rb +8 -2
- data/lib/inspec/secrets/yaml.rb +10 -8
- data/lib/inspec/version.rb +1 -1
- data/lib/inspec/waiver_file_reader.rb +90 -32
- metadata +20 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a7b225f8fda920cb03f73a84eb1edc2b98339058c824f2323bee26995b37c74b
|
4
|
+
data.tar.gz: 5b6eb547488c20ff9e8170066f0ba38871afeead368f91248254ccf171e33327
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 01e6f8d6a5749288c3a53d9fc0166d3b8e832437cbb63aa86dc67dfe09160a956c528a9fe06e43f7912b497d8201b99556d68f6b4569ba6ac044910db821fea0
|
7
|
+
data.tar.gz: d6e5f9d3e5b5393d3cc0fbe9754ddba827cb1f12df3911fe1486dfe314b1386d5dca7b32a52509b65f9ad10cc6870ba0d990e63b5bb38456df98a57b82667fc2
|
data/Gemfile
CHANGED
@@ -39,12 +39,17 @@ group :test do
|
|
39
39
|
gem "mocha"
|
40
40
|
# Pinning this version as it breaking for ruby 3.1.0
|
41
41
|
gem "nokogiri", "< 1.17.2"
|
42
|
-
|
42
|
+
# Pinning this version as it breaking for ruby 3.0.0
|
43
|
+
gem "pry-byebug", "< 3.12.0"
|
43
44
|
gem "pry"
|
44
45
|
gem "rake"
|
45
46
|
gem "simplecov"
|
46
47
|
gem "simplecov_json_formatter"
|
47
48
|
gem "webmock"
|
49
|
+
gem "signet", "< 0.21.0" # 0.20.0+ requires min ruby 3.1
|
50
|
+
# Pinning to 1.15 as multi_json 1.16 require ruby 3.2 version
|
51
|
+
# Ref: https://buildkite.com/chef-oss/inspec-inspec-inspec-5-verify/builds/647#019808ca-087b-43bc-b1f9-40a36f59c5f4
|
52
|
+
gem "multi_json", "~> 1.15.0"
|
48
53
|
end
|
49
54
|
|
50
55
|
group :deploy do
|
@@ -52,12 +57,9 @@ group :deploy do
|
|
52
57
|
end
|
53
58
|
|
54
59
|
# Build is failing - see: https://buildkite.com/chef-oss/inspec-inspec-inspec-5-verify/builds/442
|
55
|
-
# Error:
|
56
|
-
# zeitwerk-2.7.1 requires Ruby >= 3.2, which is incompatible with the current version (Ruby 3.0.7p220)
|
57
|
-
|
60
|
+
# Error: zeitwerk-2.7.1 requires Ruby >= 3.2, which is incompatible with the current version (Ruby 3.0.7p220)
|
58
61
|
# Dependency chain:
|
59
62
|
# zeitwerk → dry-configurable, dry-struct, dry-types → k8s-ruby → train-kubernetes
|
60
|
-
|
61
63
|
# Pinning zeitwerk to ~> 2.6 to avoid Ruby >= 3.2 requirement.
|
62
64
|
# Remove this pin when upgrading to Ruby 3.2 or higher.
|
63
65
|
gem "zeitwerk", "~> 2.6.0", "< 2.7"
|
data/inspec-core.gemspec
CHANGED
@@ -13,9 +13,8 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.license = "Apache-2.0"
|
14
14
|
spec.require_paths = ["lib"]
|
15
15
|
|
16
|
-
#
|
17
|
-
|
18
|
-
spec.required_ruby_version = ">= 3.0.3"
|
16
|
+
# Chef will provide AIX support with ruby 3.0 in separate builds with older versions of InSpec 5, hence we can drop ruby 3.0 support
|
17
|
+
spec.required_ruby_version = ">= 3.1.0"
|
19
18
|
|
20
19
|
# the gemfile and gemspec are necessary for appbundler so don't remove it
|
21
20
|
spec.files =
|
@@ -29,11 +28,11 @@ Gem::Specification.new do |spec|
|
|
29
28
|
spec.add_dependency "license-acceptance", ">= 0.2.13", "< 3.0"
|
30
29
|
# TODO: We should remove the thor pinning in next upcoming releases currently it's breaking our unit test in cli_args_test for aliases due to
|
31
30
|
# recent changes made in thor library REF: https://github.com/rails/thor/releases/tag/v1.3.0 & https://github.com/rails/thor/pull/800
|
32
|
-
spec.add_dependency "thor", ">= 0.20", "< 1.
|
31
|
+
spec.add_dependency "thor", ">= 0.20", "< 1.5.0"
|
33
32
|
spec.add_dependency "method_source", ">= 0.8", "< 2.0"
|
34
|
-
spec.add_dependency "rubyzip", ">= 1.2.2", "<
|
35
|
-
spec.add_dependency "rspec", ">= 3.9", "<= 3.
|
36
|
-
spec.add_dependency "rspec-its", "
|
33
|
+
spec.add_dependency "rubyzip", ">= 1.2.2", "< 4.0"
|
34
|
+
spec.add_dependency "rspec", ">= 3.9", "<= 3.14"
|
35
|
+
spec.add_dependency "rspec-its", ">= 1.2", "< 3.0"
|
37
36
|
spec.add_dependency "pry", "~> 0.13"
|
38
37
|
spec.add_dependency "hashie", ">= 3.4", "< 6.0"
|
39
38
|
spec.add_dependency "mixlib-log", "~> 3.0", "< 3.2"
|
@@ -55,5 +54,5 @@ Gem::Specification.new do |spec|
|
|
55
54
|
# which was causing a LoadError ('cannot load such file -- ast') for users/applications using 'inspec-core'.
|
56
55
|
spec.add_dependency "cookstyle"
|
57
56
|
|
58
|
-
spec.add_dependency "train-core", "~> 3.
|
57
|
+
spec.add_dependency "train-core", "~> 3.12.13" # Adding tight version constraint for train as it is compatible with Ruby 3.0.x
|
59
58
|
end
|
data/lib/inspec/exceptions.rb
CHANGED
data/lib/inspec/fetcher/git.rb
CHANGED
@@ -68,11 +68,21 @@ module Inspec::Fetcher
|
|
68
68
|
else
|
69
69
|
Dir.mktmpdir do |working_dir|
|
70
70
|
checkout(working_dir)
|
71
|
+
if git_only_or_empty?(working_dir)
|
72
|
+
# If the temporary working directory is empty after checkout,
|
73
|
+
# this means the git repository did not contain any files (or the checkout failed).
|
74
|
+
# In this case, remove the destination directory to avoid
|
75
|
+
# leaving an empty or invalid profile directory.
|
76
|
+
if Dir.exist?(destination_path)
|
77
|
+
FileUtils.rm_rf(destination_path)
|
78
|
+
end
|
79
|
+
raise Inspec::FetcherFailure, "Profile git dependency failed for #{@remote_url} - no files found in the repository."
|
80
|
+
end
|
71
81
|
if @relative_path
|
72
82
|
perform_relative_path_fetch(destination_path, working_dir)
|
73
83
|
else
|
74
84
|
Inspec::Log.debug("Checkout of #{resolved_ref.nil? ? @remote_url : resolved_ref} successful. " \
|
75
|
-
|
85
|
+
"Moving checkout to #{destination_path}")
|
76
86
|
FileUtils.cp_r(working_dir + "/.", destination_path)
|
77
87
|
end
|
78
88
|
end
|
@@ -80,6 +90,16 @@ module Inspec::Fetcher
|
|
80
90
|
@repo_directory
|
81
91
|
end
|
82
92
|
|
93
|
+
def git_only_or_empty?(dir)
|
94
|
+
return false unless Dir.exist?(dir)
|
95
|
+
|
96
|
+
children = Dir.children(dir)
|
97
|
+
# Return true if:
|
98
|
+
# - directory is completely empty
|
99
|
+
# - or it contains only one entry: '.git'
|
100
|
+
children.empty? || (children - [".git"]).empty?
|
101
|
+
end
|
102
|
+
|
83
103
|
def perform_relative_path_fetch(destination_path, working_dir)
|
84
104
|
Inspec::Log.debug("Checkout of #{resolved_ref.nil? ? @remote_url : resolved_ref} successful. " \
|
85
105
|
"Moving #{@relative_path} to #{destination_path}")
|
data/lib/inspec/profile.rb
CHANGED
@@ -256,7 +256,14 @@ module Inspec
|
|
256
256
|
# # Pull together waiver
|
257
257
|
waived_control_ids = []
|
258
258
|
waiver_paths.each do |waiver_path|
|
259
|
-
|
259
|
+
# Ruby 3.1 treats YAML load as a dangerous operation by default, requiring us to declare date and time classes as permitted
|
260
|
+
# It's not a valid option in 3.0.x
|
261
|
+
if Gem.ruby_version >= Gem::Version.new("3.1.0")
|
262
|
+
waiver_content = ::YAML.load_file(waiver_path, permitted_classes: [Date, Time])
|
263
|
+
else
|
264
|
+
waiver_content = YAML.load_file(waiver_path)
|
265
|
+
end
|
266
|
+
|
260
267
|
unless waiver_content
|
261
268
|
# Note that we will have already issued a detailed warning
|
262
269
|
Inspec::Log.error "YAML parsing error in #{waiver_path}"
|
@@ -575,7 +582,7 @@ module Inspec
|
|
575
582
|
include_tests: include_tests)
|
576
583
|
|
577
584
|
# Collect all metadata defined in the control block and inputs defined inside the control block
|
578
|
-
src.ast
|
585
|
+
src.ast&.each_node { |n|
|
579
586
|
ctl_id_collector.process(n)
|
580
587
|
input_collector.process(n)
|
581
588
|
}
|
@@ -637,7 +644,7 @@ module Inspec
|
|
637
644
|
}
|
638
645
|
source_location_ref = @source_reader.target.abs_path(control_filename)
|
639
646
|
Inspec::Profile::AstHelper::TitleCollector.new(group_data)
|
640
|
-
.process(src.ast
|
647
|
+
.process(src.ast&.child_nodes&.first) # Picking the title defined for the whole controls file
|
641
648
|
group_controls = @info_from_parse[:controls].select { |control| control[:source_location][:ref] == source_location_ref }
|
642
649
|
group_data[:controls] = group_controls.map { |control| control[:id] }
|
643
650
|
|
@@ -39,11 +39,17 @@ module Inspec::Resources
|
|
39
39
|
# expected result:
|
40
40
|
# Machine Name,Policy Target,Subcategory,Subcategory GUID,Inclusion Setting,Exclusion Setting
|
41
41
|
# WIN-MB8NINQ388J,System,Kerberos Authentication Service,{0CCE9242-69AE-11D9-BED3-505054503030},No Auditing,
|
42
|
-
|
42
|
+
auditpol_cmd = "Auditpol /get /subcategory:'#{key}' /r"
|
43
|
+
result ||= inspec.command(auditpol_cmd)
|
44
|
+
|
45
|
+
unless result.exit_status == 0
|
46
|
+
error = result.stdout + "\n" + result.stderr
|
47
|
+
raise Inspec::Exceptions::ResourceFailed, "Error while executing #{auditpol_cmd} command: #{error}"
|
48
|
+
end
|
43
49
|
|
44
50
|
# find line
|
45
51
|
target = nil
|
46
|
-
result.each_line do |s|
|
52
|
+
result.stdout.each_line do |s|
|
47
53
|
target = s.strip if s =~ /\b.*#{key}.*\b/
|
48
54
|
end
|
49
55
|
|
data/lib/inspec/secrets/yaml.rb
CHANGED
@@ -18,18 +18,20 @@ module Secrets
|
|
18
18
|
def initialize(target)
|
19
19
|
# Ruby 3.1 treats YAML load as a dangerous operation by default, requiring us to declare date and time classes as permitted
|
20
20
|
# It's not a valid option in 3.0.x
|
21
|
-
|
22
|
-
@inputs = ::YAML.load_file(target, permitted_classes: [Date, Time])
|
23
|
-
else
|
24
|
-
@inputs = ::YAML.load_file(target)
|
25
|
-
end
|
21
|
+
@inputs = ::YAML.load_file(target, permitted_classes: [Date, Time])
|
26
22
|
|
27
|
-
|
28
|
-
|
23
|
+
# In case of empty yaml file raise the warning else raise the parsing error.
|
24
|
+
if !@inputs || @inputs.empty?
|
25
|
+
Inspec::Log.warn("Unable to parse #{target}: YAML file is empty.")
|
29
26
|
@inputs = nil
|
27
|
+
elsif !@inputs.is_a?(Hash)
|
28
|
+
# Exits with usage error.
|
29
|
+
Inspec::Log.error("Unable to parse #{target}: invalid YAML or contents is not a Hash")
|
30
|
+
Inspec::UI.new.exit(:usage_error)
|
30
31
|
end
|
31
32
|
rescue => e
|
32
|
-
|
33
|
+
# Any other error related to Yaml parsing will be raised here.
|
34
|
+
raise "Error reading YAML file #{target}: #{e}"
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
data/lib/inspec/version.rb
CHANGED
@@ -5,6 +5,8 @@ require "inspec/utils/waivers/json_file_reader"
|
|
5
5
|
module Inspec
|
6
6
|
class WaiverFileReader
|
7
7
|
|
8
|
+
SUPPORTED_FILE_EXTENSION = %w{.yaml .yml .csv .json}.freeze
|
9
|
+
|
8
10
|
def self.fetch_waivers_by_profile(profile_id, files)
|
9
11
|
read_waivers_from_file(profile_id, files) if @waivers_data.nil? || @waivers_data[profile_id].nil?
|
10
12
|
@waivers_data[profile_id]
|
@@ -15,49 +17,105 @@ module Inspec
|
|
15
17
|
output = {}
|
16
18
|
|
17
19
|
files.each do |file_path|
|
18
|
-
|
19
|
-
data = nil
|
20
|
-
if [".yaml", ".yml"].include? file_extension
|
21
|
-
data = Secrets::YAML.resolve(file_path)
|
22
|
-
unless data.nil?
|
23
|
-
data = data.inputs
|
24
|
-
validate_json_yaml(data)
|
25
|
-
end
|
26
|
-
elsif file_extension == ".csv"
|
27
|
-
data = Waivers::CSVFileReader.resolve(file_path)
|
28
|
-
headers = Waivers::CSVFileReader.headers
|
29
|
-
validate_headers(headers)
|
30
|
-
elsif file_extension == ".json"
|
31
|
-
data = Waivers::JSONFileReader.resolve(file_path)
|
32
|
-
validate_json_yaml(data) unless data.nil?
|
33
|
-
end
|
34
|
-
output.merge!(data) if !data.nil? && data.is_a?(Hash)
|
20
|
+
next unless valid_waiver_file?(file_path)
|
35
21
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
22
|
+
data = parse_waiver_file(file_path)
|
23
|
+
output.merge!(data) if data.is_a?(Hash)
|
24
|
+
rescue Inspec::Exceptions::WaiversFileNotReadable, Inspec::Exceptions::WaiversFileInvalidFormatting => e
|
25
|
+
Inspec::Log.error "Error reading waivers file #{file_path}. #{e.message}"
|
26
|
+
Inspec::UI.new.exit(:usage_error)
|
41
27
|
end
|
42
28
|
|
43
29
|
@waivers_data[profile_id] = output
|
44
30
|
end
|
45
31
|
|
46
|
-
def self.
|
47
|
-
|
48
|
-
|
32
|
+
def self.valid_waiver_file?(file_path)
|
33
|
+
# Check if the file is readable
|
34
|
+
file_extension = File.extname(file_path).downcase
|
35
|
+
unless SUPPORTED_FILE_EXTENSION.include?(file_extension)
|
36
|
+
raise Inspec::Exceptions::WaiversFileNotReadable,
|
37
|
+
"Unsupported file extension for '#{file_path}'. Allowed waiver file extensions: #{SUPPORTED_FILE_EXTENSION.join(", ")}"
|
38
|
+
end
|
39
|
+
|
40
|
+
# Check if the file is empty
|
41
|
+
if File.zero?(file_path)
|
42
|
+
Inspec::Log.warn "Waivers file '#{file_path}' is empty. Skipping waivers."
|
43
|
+
return false
|
44
|
+
end
|
49
45
|
|
50
|
-
|
51
|
-
|
52
|
-
|
46
|
+
true
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.parse_waiver_file(file_path)
|
50
|
+
file_extension = File.extname(file_path).downcase
|
51
|
+
|
52
|
+
case file_extension
|
53
|
+
when ".yaml", ".yml"
|
54
|
+
data = Secrets::YAML.resolve(file_path)&.inputs
|
55
|
+
validate_json_yaml(data)
|
56
|
+
when ".csv"
|
57
|
+
data = Waivers::CSVFileReader.resolve(file_path)
|
58
|
+
validate_csv_headers(Waivers::CSVFileReader.headers)
|
59
|
+
when ".json"
|
60
|
+
data = Waivers::JSONFileReader.resolve(file_path)
|
61
|
+
validate_json_yaml(data)
|
62
|
+
end
|
63
|
+
|
64
|
+
data
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.all_fields
|
68
|
+
%w{control_id justification expiration_date run}
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.validate_csv_headers(headers)
|
72
|
+
invalid_headers_info = fetch_invalid_headers_info(headers)
|
73
|
+
# Warn if blank column found in csv file
|
74
|
+
Inspec::Log.warn "Invalid column headers: Column can't be nil" if invalid_headers_info[:blank_column]
|
75
|
+
# Warn if extra header found in csv file
|
76
|
+
Inspec::Log.warn "Extra header/s #{invalid_headers_info[:extra_headers]}" unless invalid_headers_info[:extra_headers].empty?
|
77
|
+
unless invalid_headers_info[:missing_required_fields].empty?
|
78
|
+
raise Inspec::Exceptions::WaiversFileInvalidFormatting,
|
79
|
+
"Missing required header/s #{invalid_headers_info[:missing_required_fields]}. Fix headers in file to proceed."
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.fetch_invalid_headers_info(headers, json_yaml = false)
|
84
|
+
required_fields = json_yaml ? %w{justification} : %w{control_id justification}
|
85
|
+
data = {}
|
86
|
+
data[:missing_required_fields] = []
|
87
|
+
# Finds missing required fields
|
88
|
+
unless (required_fields - headers).empty?
|
89
|
+
data[:missing_required_fields] = required_fields - headers
|
90
|
+
end
|
91
|
+
# If column with no header found set the blank_column flag. Only applicable for csv
|
92
|
+
data[:blank_column] = headers.include?(nil) ? true : false
|
93
|
+
# Find extra headers/parameters
|
94
|
+
data[:extra_headers] = (headers - all_fields)
|
95
|
+
data
|
53
96
|
end
|
54
97
|
|
55
98
|
def self.validate_json_yaml(data)
|
56
|
-
|
57
|
-
|
58
|
-
|
99
|
+
return if data.nil?
|
100
|
+
|
101
|
+
missing_required_field = false
|
102
|
+
data.each do |key, value|
|
103
|
+
# In case of yaml or json we need to validate headers/parametes for each value
|
104
|
+
invalid_headers_info = fetch_invalid_headers_info(value.keys, true)
|
105
|
+
# WARN in case of extra parameters found in each waived control
|
106
|
+
Inspec::Log.warn "Control ID #{key}: extra parameter/s #{invalid_headers_info[:extra_headers]}" unless invalid_headers_info[:extra_headers].empty?
|
107
|
+
unless invalid_headers_info[:missing_required_fields].empty?
|
108
|
+
missing_required_field = true
|
109
|
+
# Log error for each waived control
|
110
|
+
Inspec::Log.error "Control ID #{key}: missing required parameter/s #{invalid_headers_info[:missing_required_fields]}"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
# Raise error if any of the waived control has missing required filed
|
115
|
+
if missing_required_field
|
116
|
+
raise Inspec::Exceptions::WaiversFileInvalidFormatting,
|
117
|
+
"Missing required parameter [justification]. Fix parameters in file to proceed."
|
59
118
|
end
|
60
|
-
validate_headers(headers.flatten.uniq, true)
|
61
119
|
end
|
62
120
|
end
|
63
121
|
end
|
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: 5.22.
|
4
|
+
version: 5.22.95
|
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: 2025-
|
11
|
+
date: 2025-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-telemetry
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
version: '0.20'
|
60
60
|
- - "<"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 1.
|
62
|
+
version: 1.5.0
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -69,7 +69,7 @@ dependencies:
|
|
69
69
|
version: '0.20'
|
70
70
|
- - "<"
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: 1.
|
72
|
+
version: 1.5.0
|
73
73
|
- !ruby/object:Gem::Dependency
|
74
74
|
name: method_source
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
@@ -99,7 +99,7 @@ dependencies:
|
|
99
99
|
version: 1.2.2
|
100
100
|
- - "<"
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: '
|
102
|
+
version: '4.0'
|
103
103
|
type: :runtime
|
104
104
|
prerelease: false
|
105
105
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: 1.2.2
|
110
110
|
- - "<"
|
111
111
|
- !ruby/object:Gem::Version
|
112
|
-
version: '
|
112
|
+
version: '4.0'
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: rspec
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,7 +119,7 @@ dependencies:
|
|
119
119
|
version: '3.9'
|
120
120
|
- - "<="
|
121
121
|
- !ruby/object:Gem::Version
|
122
|
-
version: '3.
|
122
|
+
version: '3.14'
|
123
123
|
type: :runtime
|
124
124
|
prerelease: false
|
125
125
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -129,21 +129,27 @@ dependencies:
|
|
129
129
|
version: '3.9'
|
130
130
|
- - "<="
|
131
131
|
- !ruby/object:Gem::Version
|
132
|
-
version: '3.
|
132
|
+
version: '3.14'
|
133
133
|
- !ruby/object:Gem::Dependency
|
134
134
|
name: rspec-its
|
135
135
|
requirement: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
|
-
- - "
|
137
|
+
- - ">="
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '1.2'
|
140
|
+
- - "<"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '3.0'
|
140
143
|
type: :runtime
|
141
144
|
prerelease: false
|
142
145
|
version_requirements: !ruby/object:Gem::Requirement
|
143
146
|
requirements:
|
144
|
-
- - "
|
147
|
+
- - ">="
|
145
148
|
- !ruby/object:Gem::Version
|
146
149
|
version: '1.2'
|
150
|
+
- - "<"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '3.0'
|
147
153
|
- !ruby/object:Gem::Dependency
|
148
154
|
name: pry
|
149
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -390,14 +396,14 @@ dependencies:
|
|
390
396
|
requirements:
|
391
397
|
- - "~>"
|
392
398
|
- !ruby/object:Gem::Version
|
393
|
-
version:
|
399
|
+
version: 3.12.13
|
394
400
|
type: :runtime
|
395
401
|
prerelease: false
|
396
402
|
version_requirements: !ruby/object:Gem::Requirement
|
397
403
|
requirements:
|
398
404
|
- - "~>"
|
399
405
|
- !ruby/object:Gem::Version
|
400
|
-
version:
|
406
|
+
version: 3.12.13
|
401
407
|
description: InSpec provides a framework for creating end-to-end infrastructure tests.
|
402
408
|
You can use it for integration or even compliance testing. Create fully portable
|
403
409
|
test profiles and use them in your workflow to ensure stability and security. Integrate
|
@@ -867,14 +873,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
867
873
|
requirements:
|
868
874
|
- - ">="
|
869
875
|
- !ruby/object:Gem::Version
|
870
|
-
version: 3.0
|
876
|
+
version: 3.1.0
|
871
877
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
872
878
|
requirements:
|
873
879
|
- - ">="
|
874
880
|
- !ruby/object:Gem::Version
|
875
881
|
version: '0'
|
876
882
|
requirements: []
|
877
|
-
rubygems_version: 3.
|
883
|
+
rubygems_version: 3.3.27
|
878
884
|
signing_key:
|
879
885
|
specification_version: 4
|
880
886
|
summary: Infrastructure and compliance testing. Core library.
|