inspec 3.6.6 → 3.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -1
- data/README.md +7 -7
- data/etc/deprecations.json +10 -0
- data/lib/inspec.rb +1 -1
- data/lib/inspec/base_cli.rb +1 -1
- data/lib/inspec/cli.rb +1 -1
- data/lib/inspec/config.rb +31 -1
- data/lib/inspec/control_eval_context.rb +4 -4
- data/lib/inspec/errors.rb +10 -10
- data/lib/inspec/exceptions.rb +2 -2
- data/lib/inspec/{attribute_registry.rb → input_registry.rb} +18 -18
- data/lib/inspec/objects.rb +1 -1
- data/lib/inspec/objects/{attribute.rb → input.rb} +61 -28
- data/lib/inspec/profile.rb +14 -14
- data/lib/inspec/profile_context.rb +11 -11
- data/lib/inspec/reporters/json.rb +1 -1
- data/lib/inspec/rspec_extensions.rb +3 -3
- data/lib/inspec/runner.rb +25 -18
- data/lib/inspec/schema.rb +1 -1
- data/lib/inspec/secrets/yaml.rb +5 -5
- data/lib/inspec/version.rb +1 -1
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +1 -1
- data/lib/plugins/inspec-init/{lib/inspec-init/templates → templates}/profiles/aws/README.md +0 -0
- data/lib/plugins/inspec-init/{lib/inspec-init/templates → templates}/profiles/aws/attributes.yml +0 -0
- data/lib/plugins/inspec-init/{lib/inspec-init/templates → templates}/profiles/aws/controls/example.rb +0 -0
- data/lib/plugins/inspec-init/{lib/inspec-init/templates → templates}/profiles/aws/inspec.yml +0 -0
- data/lib/plugins/inspec-init/{lib/inspec-init/templates → templates}/profiles/aws/libraries/.gitkeep +0 -0
- data/lib/plugins/inspec-init/test/functional/inspec_init_profile_test.rb +14 -2
- data/lib/resource_support/aws/aws_resource_mixin.rb +1 -0
- data/lib/resources/postgres.rb +31 -15
- data/lib/utils/pkey_reader.rb +4 -4
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5fac8050f287e7724b43ec98cc5d315849aeabe1ba832068c30eab5d1c2e990f
|
4
|
+
data.tar.gz: 5779e58ee9fb65084d06c3a118fff3f9f99083436f747a60230c34a857a6e71f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f13bf3144f139198a8443ac4db6e8e0bb1c3ac38cc3c2aaec9169544d90133991888d25f98c74ff3634440fd269cf9ddfb3231b69129c7d6aedf69ef934ff335
|
7
|
+
data.tar.gz: 5f6587a9d8716b90b79d024f3d486a76ae8f77ec85ab72b4e0f1232261b7c0a88cf399d35c5e59ee52559d8ef946e2a6a4c9dd4ac23dd95dfb195a5c7865d419
|
data/Gemfile
CHANGED
@@ -22,7 +22,10 @@ group :test do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
group :integration do
|
25
|
-
|
25
|
+
# this version check can be removed when inspec no longer support ruby 2.3
|
26
|
+
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4')
|
27
|
+
gem 'berkshelf', '~> 7'
|
28
|
+
end
|
26
29
|
gem 'test-kitchen', '>= 1.24'
|
27
30
|
gem 'kitchen-vagrant'
|
28
31
|
# we need winrm v2 support >= 0.15.1
|
data/README.md
CHANGED
@@ -288,9 +288,9 @@ Remote Targets
|
|
288
288
|
| ---------------------------- | ------------------------------------------------ | ------------- |
|
289
289
|
| AIX | 6.1, 7.1, 7.2 | ppc64 |
|
290
290
|
| CentOS | 5, 6, 7 | i386, x86_64 |
|
291
|
-
| Debian | 7, 8
|
292
|
-
| FreeBSD | 9, 10
|
293
|
-
| Mac OS X | 10.9, 10.10, 10.11
|
291
|
+
| Debian | 7, 8, 9 | i386, x86_64 |
|
292
|
+
| FreeBSD | 9, 10, 11 | i386, amd64 |
|
293
|
+
| Mac OS X | 10.9, 10.10, 10.11, 10.12, 10.13, 10.14 | x86_64 |
|
294
294
|
| Oracle Enterprise Linux | 5, 6, 7 | i386, x86_64 |
|
295
295
|
| Red Hat Enterprise Linux | 5, 6, 7 | i386, x86_64 |
|
296
296
|
| Solaris | 10, 11 | sparc, x86 |
|
@@ -299,7 +299,7 @@ Remote Targets
|
|
299
299
|
| SUSE Linux Enterprise Server | 11, 12 | x86_64 |
|
300
300
|
| Scientific Linux | 5.x, 6.x and 7.x | i386, x86_64 |
|
301
301
|
| Fedora | | x86_64 |
|
302
|
-
| OpenSUSE | 13
|
302
|
+
| OpenSUSE | 13, 42 | x86_64 |
|
303
303
|
| OmniOS | | x86_64 |
|
304
304
|
| Gentoo Linux | | x86_64 |
|
305
305
|
| Arch Linux | | x86_64 |
|
@@ -311,7 +311,7 @@ In addition, runtime support is provided for:
|
|
311
311
|
|
312
312
|
| Platform | Versions |
|
313
313
|
| -------- | -------- |
|
314
|
-
| Debian | 8
|
314
|
+
| Debian | 8, 9 |
|
315
315
|
| RHEL | 6, 7 |
|
316
316
|
| Ubuntu | 12.04+ |
|
317
317
|
| Windows | 7+ |
|
@@ -440,7 +440,7 @@ Please see [TESTING_AGAINST_AZURE.md](./test/integration/aws/TESTING_AGAINST_AZU
|
|
440
440
|
| **Author:** | Dominik Richter (<drichter@chef.io>) |
|
441
441
|
| **Author:** | Christoph Hartmann (<chartmann@chef.io>) |
|
442
442
|
| **Copyright:** | Copyright (c) 2015 Vulcano Security GmbH. |
|
443
|
-
| **Copyright:** | Copyright (c) 2017 Chef Software Inc
|
443
|
+
| **Copyright:** | Copyright (c) 2017-2018 Chef Software Inc.|
|
444
444
|
| **License:** | Apache License, Version 2.0 |
|
445
445
|
|
446
446
|
Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -453,4 +453,4 @@ Unless required by applicable law or agreed to in writing, software
|
|
453
453
|
distributed under the License is distributed on an "AS IS" BASIS,
|
454
454
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
455
455
|
See the License for the specific language governing permissions and
|
456
|
-
limitations under the License.
|
456
|
+
limitations under the License.
|
data/etc/deprecations.json
CHANGED
@@ -14,6 +14,16 @@
|
|
14
14
|
"filesystem_property_size": {
|
15
15
|
"action": "ignore",
|
16
16
|
"comment": "See #3778"
|
17
|
+
},
|
18
|
+
"rename_attributes_to_inputs": {
|
19
|
+
"action": "ignore",
|
20
|
+
"prefix": "InSpec Attributes are being renamed to InSpec Inputs to avoid confusion with Chef Attributes.",
|
21
|
+
"comment": "See #3802"
|
22
|
+
},
|
23
|
+
"aws_resources_in_resource_pack": {
|
24
|
+
"comment": "See #3822",
|
25
|
+
"action": "ignore",
|
26
|
+
"prefix": "AWS resources shipped with core InSpec are being to moved to a resource pack for faster iteration. Please update your profiles to depend on git@github.com:inspec/inspec-aws.git ."
|
17
27
|
}
|
18
28
|
}
|
19
29
|
}
|
data/lib/inspec.rb
CHANGED
@@ -16,7 +16,7 @@ require 'inspec/runner'
|
|
16
16
|
require 'inspec/shell'
|
17
17
|
require 'inspec/formatters'
|
18
18
|
require 'inspec/reporters'
|
19
|
-
require 'inspec/
|
19
|
+
require 'inspec/input_registry'
|
20
20
|
require 'inspec/rspec_extensions'
|
21
21
|
require 'inspec/globals'
|
22
22
|
require 'inspec/impact'
|
data/lib/inspec/base_cli.rb
CHANGED
@@ -108,7 +108,7 @@ module Inspec
|
|
108
108
|
banner: 'one two:/output/file/path',
|
109
109
|
desc: 'Enable one or more output reporters: cli, documentation, html, progress, json, json-min, json-rspec, junit, yaml'
|
110
110
|
option :attrs, type: :array,
|
111
|
-
desc: 'Load
|
111
|
+
desc: 'Load one or more input files, a YAML file with values for the profile to use'
|
112
112
|
option :create_lockfile, type: :boolean,
|
113
113
|
desc: 'Write out a lockfile based on this execution (unless one already exists)'
|
114
114
|
option :backend_cache, type: :boolean,
|
data/lib/inspec/cli.rb
CHANGED
@@ -216,7 +216,7 @@ class Inspec::InspecCLI < Inspec::BaseCLI
|
|
216
216
|
inspec exec /path/to/profile
|
217
217
|
```
|
218
218
|
|
219
|
-
Local single test (doesn't allow
|
219
|
+
Local single test (doesn't allow inputs or custom resources)
|
220
220
|
```
|
221
221
|
inspec exec /path/to/a_test.rb
|
222
222
|
```
|
data/lib/inspec/config.rb
CHANGED
@@ -71,6 +71,8 @@ module Inspec
|
|
71
71
|
# transport name prefixed, which is stripped before being added
|
72
72
|
# to the creds hash)
|
73
73
|
# * the --target CLI option, which is interpreted:
|
74
|
+
# - as a transport://credset format, which looks up the creds in
|
75
|
+
# the config file in the credentials section
|
74
76
|
# - as an arbitrary URI, which is parsed by Train.unpack_target_from_uri
|
75
77
|
|
76
78
|
def unpack_train_credentials
|
@@ -82,8 +84,9 @@ module Inspec
|
|
82
84
|
credentials.merge!(_utc_generic_credentials)
|
83
85
|
|
84
86
|
_utc_determine_backend(credentials)
|
85
|
-
credentials.merge!(Train.unpack_target_from_uri(final_options[:target] || '')) # TODO: this will be replaced with the credset work
|
86
87
|
transport_name = credentials[:backend].to_s
|
88
|
+
|
89
|
+
_utc_merge_credset(credentials, transport_name)
|
87
90
|
_utc_merge_transport_options(credentials, transport_name)
|
88
91
|
|
89
92
|
# Convert to all-Symbol keys
|
@@ -137,6 +140,33 @@ module Inspec
|
|
137
140
|
credentials[:backend] = transport_name.to_s # these are indeed stored in Train as Strings.
|
138
141
|
end
|
139
142
|
|
143
|
+
def _utc_merge_credset(credentials, transport_name)
|
144
|
+
# Look for Config File credentials/transport_name/credset
|
145
|
+
credset_name = _utc_find_credset_name(credentials, transport_name)
|
146
|
+
|
147
|
+
if credset_name
|
148
|
+
credset = @cfg_file_contents.dig('credentials', transport_name, credset_name)
|
149
|
+
if credset
|
150
|
+
credentials.merge!(credset)
|
151
|
+
else
|
152
|
+
# OK, we had a target that looked like transport://something
|
153
|
+
# But we don't know what that something is - there was no
|
154
|
+
# matching credset with it. Let train parse it.
|
155
|
+
credentials.merge!(Train.unpack_target_from_uri(final_options[:target]))
|
156
|
+
end
|
157
|
+
elsif final_options.key?(:target)
|
158
|
+
# Not sure what target looked like at all!
|
159
|
+
# Let train parse it.
|
160
|
+
credentials.merge!(Train.unpack_target_from_uri(final_options[:target]))
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def _utc_find_credset_name(_credentials, transport_name)
|
165
|
+
return nil unless final_options[:target]
|
166
|
+
match = final_options[:target].match(%r{^#{transport_name}://(?<credset_name>[\w\d\-]+)$})
|
167
|
+
match ? match[:credset_name] : nil
|
168
|
+
end
|
169
|
+
|
140
170
|
#-----------------------------------------------------------------------#
|
141
171
|
# Reading Config Files
|
142
172
|
#-----------------------------------------------------------------------#
|
@@ -27,7 +27,7 @@ module Inspec
|
|
27
27
|
|
28
28
|
# allow attributes to be accessed within control blocks
|
29
29
|
define_method :attribute do |name|
|
30
|
-
Inspec::
|
30
|
+
Inspec::InputRegistry.find_input(name, profile_id).value
|
31
31
|
end
|
32
32
|
|
33
33
|
# Support for Control DSL plugins.
|
@@ -167,12 +167,12 @@ module Inspec
|
|
167
167
|
profile_context_owner.register_rule(control, &block) unless control.nil?
|
168
168
|
end
|
169
169
|
|
170
|
-
# method for
|
170
|
+
# method for inputs; import input handling
|
171
171
|
define_method :attribute do |name, options = nil|
|
172
172
|
if options.nil?
|
173
|
-
Inspec::
|
173
|
+
Inspec::InputRegistry.find_input(name, profile_id).value
|
174
174
|
else
|
175
|
-
profile_context_owner.
|
175
|
+
profile_context_owner.register_input(name, options)
|
176
176
|
end
|
177
177
|
end
|
178
178
|
|
data/lib/inspec/errors.rb
CHANGED
@@ -18,29 +18,29 @@ module Inspec
|
|
18
18
|
class ConfigError::MalformedJson < ConfigError; end
|
19
19
|
class ConfigError::Invalid < ConfigError; end
|
20
20
|
|
21
|
-
class
|
21
|
+
class Input
|
22
22
|
class Error < Inspec::Error; end
|
23
23
|
class ValidationError < Error
|
24
|
-
attr_accessor :
|
25
|
-
attr_accessor :
|
26
|
-
attr_accessor :
|
24
|
+
attr_accessor :input_name
|
25
|
+
attr_accessor :input_value
|
26
|
+
attr_accessor :input_type
|
27
27
|
end
|
28
28
|
class TypeError < Error
|
29
|
-
attr_accessor :
|
29
|
+
attr_accessor :input_type
|
30
30
|
end
|
31
31
|
class RequiredError < Error
|
32
|
-
attr_accessor :
|
32
|
+
attr_accessor :input_name
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
class
|
36
|
+
class InputRegistry
|
37
37
|
class Error < Inspec::Error; end
|
38
|
-
class
|
38
|
+
class ProfileLookupError < Error
|
39
39
|
attr_accessor :profile_name
|
40
40
|
end
|
41
|
-
class
|
41
|
+
class InputLookupError < Error
|
42
42
|
attr_accessor :profile_name
|
43
|
-
attr_accessor :
|
43
|
+
attr_accessor :input_name
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
data/lib/inspec/exceptions.rb
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
|
4
4
|
module Inspec
|
5
5
|
module Exceptions
|
6
|
-
class
|
7
|
-
class
|
6
|
+
class InputsFileDoesNotExist < ArgumentError; end
|
7
|
+
class InputsFileNotReadable < ArgumentError; end
|
8
8
|
class ResourceFailed < StandardError; end
|
9
9
|
class ResourceSkipped < StandardError; end
|
10
10
|
class SecretsBackendNotFound < ArgumentError; end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'forwardable'
|
2
2
|
require 'singleton'
|
3
|
-
require 'inspec/objects/
|
3
|
+
require 'inspec/objects/input'
|
4
4
|
|
5
5
|
module Inspec
|
6
|
-
class
|
6
|
+
class InputRegistry
|
7
7
|
include Singleton
|
8
8
|
extend Forwardable
|
9
9
|
|
@@ -15,54 +15,54 @@ module Inspec
|
|
15
15
|
|
16
16
|
# These self methods are convenience methods so you dont always
|
17
17
|
# have to specify instance when calling the registry
|
18
|
-
def self.
|
19
|
-
instance.
|
18
|
+
def self.find_input(name, profile)
|
19
|
+
instance.find_input(name, profile)
|
20
20
|
end
|
21
21
|
|
22
|
-
def self.
|
23
|
-
instance.
|
22
|
+
def self.register_input(name, profile, options = {})
|
23
|
+
instance.register_input(name, profile, options)
|
24
24
|
end
|
25
25
|
|
26
26
|
def self.register_profile_alias(name, alias_name)
|
27
27
|
instance.register_profile_alias(name, alias_name)
|
28
28
|
end
|
29
29
|
|
30
|
-
def self.
|
31
|
-
instance.
|
30
|
+
def self.list_inputs_for_profile(profile)
|
31
|
+
instance.list_inputs_for_profile(profile)
|
32
32
|
end
|
33
33
|
|
34
34
|
def initialize
|
35
|
-
# this is a collection of profiles which have a value of
|
35
|
+
# this is a collection of profiles which have a value of input objects
|
36
36
|
@list = {}
|
37
37
|
|
38
38
|
# this is a list of optional profile name overrides set in the inspec.yml
|
39
39
|
@profile_aliases = {}
|
40
40
|
end
|
41
41
|
|
42
|
-
def
|
42
|
+
def find_input(name, profile)
|
43
43
|
profile = @profile_aliases[profile] if !profile_exist?(profile) && @profile_aliases[profile]
|
44
44
|
unless profile_exist?(profile)
|
45
|
-
error = Inspec::
|
45
|
+
error = Inspec::InputRegistry::ProfileLookupError.new
|
46
46
|
error.profile_name = profile
|
47
|
-
raise error, "Profile '#{error.profile_name}' does not have any
|
47
|
+
raise error, "Profile '#{error.profile_name}' does not have any inputs"
|
48
48
|
end
|
49
49
|
|
50
50
|
unless list[profile].key?(name)
|
51
|
-
error = Inspec::
|
52
|
-
error.
|
51
|
+
error = Inspec::InputRegistry::InputLookupError.new
|
52
|
+
error.input_name = name
|
53
53
|
error.profile_name = profile
|
54
|
-
raise error, "Profile '#{error.profile_name}' does not have an
|
54
|
+
raise error, "Profile '#{error.profile_name}' does not have an input with name '#{error.input_name}'"
|
55
55
|
end
|
56
56
|
list[profile][name]
|
57
57
|
end
|
58
58
|
|
59
|
-
def
|
59
|
+
def register_input(name, profile, options = {})
|
60
60
|
# check for a profile override name
|
61
61
|
if profile_exist?(profile) && list[profile][name] && options.empty?
|
62
62
|
list[profile][name]
|
63
63
|
else
|
64
64
|
list[profile] = {} unless profile_exist?(profile)
|
65
|
-
list[profile][name] = Inspec::
|
65
|
+
list[profile][name] = Inspec::Input.new(name, options)
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
@@ -70,7 +70,7 @@ module Inspec
|
|
70
70
|
@profile_aliases[name] = alias_name
|
71
71
|
end
|
72
72
|
|
73
|
-
def
|
73
|
+
def list_inputs_for_profile(profile)
|
74
74
|
list[profile] = {} unless profile_exist?(profile)
|
75
75
|
list[profile]
|
76
76
|
end
|
data/lib/inspec/objects.rb
CHANGED
@@ -2,21 +2,22 @@
|
|
2
2
|
|
3
3
|
require 'utils/deprecation'
|
4
4
|
|
5
|
+
# For backwards compatibility during the rename (see #3802),
|
6
|
+
# maintain the Inspec::Attribute namespace for people checking for
|
7
|
+
# Inspec::Attribute::DEFAULT_ATTRIBUTE
|
5
8
|
module Inspec
|
6
9
|
class Attribute
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
Numeric
|
12
|
-
Regexp
|
13
|
-
Array
|
14
|
-
Hash
|
15
|
-
Boolean
|
16
|
-
Any
|
17
|
-
}.freeze
|
10
|
+
# This only exists to create the Inspec::Attribute::DEFAULT_ATTRIBUTE symbol with a class
|
11
|
+
class DEFAULT_ATTRIBUTE; end # rubocop: disable Style/ClassAndModuleCamelCase
|
12
|
+
end
|
13
|
+
end
|
18
14
|
|
19
|
-
|
15
|
+
module Inspec
|
16
|
+
class Input
|
17
|
+
# This special class is used to represent the value when an input has
|
18
|
+
# not been assigned a value. This allows a user to explicitly assign nil
|
19
|
+
# to an input.
|
20
|
+
class NO_VALUE_SET # rubocop: disable Style/ClassAndModuleCamelCase
|
20
21
|
def initialize(name)
|
21
22
|
@name = name
|
22
23
|
|
@@ -37,17 +38,49 @@ module Inspec
|
|
37
38
|
end
|
38
39
|
|
39
40
|
def to_s
|
40
|
-
"
|
41
|
+
"Input '#{@name}' does not have a value. Skipping test."
|
42
|
+
end
|
43
|
+
|
44
|
+
def is_a?(klass)
|
45
|
+
if klass == Inspec::Attribute::DEFAULT_ATTRIBUTE
|
46
|
+
Inspec.deprecate(:rename_attributes_to_inputs, "Don't check for `is_a?(Inspec::Attribute::DEFAULT_ATTRIBUTE)`, check for `Inspec::Input::NO_VALUE_SET")
|
47
|
+
true # lie for backward compatibility
|
48
|
+
else
|
49
|
+
super(klass)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def kind_of?(klass)
|
54
|
+
if klass == Inspec::Attribute::DEFAULT_ATTRIBUTE
|
55
|
+
Inspec.deprecate(:rename_attributes_to_inputs, "Don't check for `kind_of?(Inspec::Attribute::DEFAULT_ATTRIBUTE)`, check for `Inspec::Input::NO_VALUE_SET")
|
56
|
+
true # lie for backward compatibility
|
57
|
+
else
|
58
|
+
super(klass)
|
59
|
+
end
|
41
60
|
end
|
42
61
|
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class Input
|
65
|
+
attr_accessor :name
|
66
|
+
|
67
|
+
VALID_TYPES = %w{
|
68
|
+
String
|
69
|
+
Numeric
|
70
|
+
Regexp
|
71
|
+
Array
|
72
|
+
Hash
|
73
|
+
Boolean
|
74
|
+
Any
|
75
|
+
}.freeze
|
43
76
|
|
44
77
|
def initialize(name, options = {})
|
45
78
|
@name = name
|
46
79
|
@opts = options
|
47
80
|
if @opts.key?(:default)
|
48
|
-
Inspec.deprecate(:attrs_value_replaces_default, "
|
81
|
+
Inspec.deprecate(:attrs_value_replaces_default, "input name: '#{name}'")
|
49
82
|
if @opts.key?(:value)
|
50
|
-
Inspec::Log.warn "
|
83
|
+
Inspec::Log.warn "Input #{@name} created using both :default and :value options - ignoring :default"
|
51
84
|
@opts.delete(:default)
|
52
85
|
else
|
53
86
|
@opts[:value] = @opts.delete(:default)
|
@@ -104,7 +137,7 @@ module Inspec
|
|
104
137
|
end
|
105
138
|
|
106
139
|
def to_s
|
107
|
-
"
|
140
|
+
"Input #{@name} with #{@value}"
|
108
141
|
end
|
109
142
|
|
110
143
|
private
|
@@ -115,9 +148,9 @@ module Inspec
|
|
115
148
|
|
116
149
|
# value will be set already if a secrets file was passed in
|
117
150
|
if (!@opts.key?(:default) && value.nil?) || (@opts[:default].nil? && value.nil?)
|
118
|
-
error = Inspec::
|
119
|
-
error.
|
120
|
-
raise error, "
|
151
|
+
error = Inspec::Input::RequiredError.new
|
152
|
+
error.input_name = @name
|
153
|
+
raise error, "Input '#{error.input_name}' is required and does not have a value."
|
121
154
|
end
|
122
155
|
end
|
123
156
|
|
@@ -129,9 +162,9 @@ module Inspec
|
|
129
162
|
}
|
130
163
|
type = abbreviations[type] if abbreviations.key?(type)
|
131
164
|
if !VALID_TYPES.include?(type)
|
132
|
-
error = Inspec::
|
133
|
-
error.
|
134
|
-
raise error, "Type '#{error.
|
165
|
+
error = Inspec::Input::TypeError.new
|
166
|
+
error.input_type = type
|
167
|
+
raise error, "Type '#{error.input_type}' is not a valid input type."
|
135
168
|
end
|
136
169
|
type
|
137
170
|
end
|
@@ -168,17 +201,17 @@ module Inspec
|
|
168
201
|
end
|
169
202
|
|
170
203
|
if invalid_type == true
|
171
|
-
error = Inspec::
|
172
|
-
error.
|
173
|
-
error.
|
174
|
-
error.
|
175
|
-
raise error, "
|
204
|
+
error = Inspec::Input::ValidationError.new
|
205
|
+
error.input_name = @name
|
206
|
+
error.input_value = value
|
207
|
+
error.input_type = type
|
208
|
+
raise error, "Input '#{error.input_name}' with value '#{error.input_value}' does not validate to type '#{error.input_type}'."
|
176
209
|
end
|
177
210
|
end
|
178
211
|
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
179
212
|
|
180
213
|
def value_or_dummy
|
181
|
-
@opts.key?(:value) ? @opts[:value] :
|
214
|
+
@opts.key?(:value) ? @opts[:value] : Inspec::Input::NO_VALUE_SET.new(@name)
|
182
215
|
end
|
183
216
|
end
|
184
217
|
end
|
data/lib/inspec/profile.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
require 'forwardable'
|
7
7
|
require 'openssl'
|
8
|
-
require 'inspec/
|
8
|
+
require 'inspec/input_registry'
|
9
9
|
require 'inspec/polyfill'
|
10
10
|
require 'inspec/cached_fetcher'
|
11
11
|
require 'inspec/file_provider'
|
@@ -97,7 +97,7 @@ module Inspec
|
|
97
97
|
@profile_id = options[:id]
|
98
98
|
@profile_name = options[:profile_name]
|
99
99
|
@cache = options[:vendor_cache] || Cache.new
|
100
|
-
@
|
100
|
+
@input_values = options[:inputs]
|
101
101
|
@tests_collected = false
|
102
102
|
@libraries_loaded = false
|
103
103
|
@check_mode = options[:check_mode] || false
|
@@ -120,22 +120,22 @@ module Inspec
|
|
120
120
|
|
121
121
|
@runner_context =
|
122
122
|
options[:profile_context] ||
|
123
|
-
Inspec::ProfileContext.for_profile(self, @backend, @
|
123
|
+
Inspec::ProfileContext.for_profile(self, @backend, @input_values)
|
124
124
|
|
125
125
|
@supports_platform = metadata.supports_platform?(@backend)
|
126
126
|
@supports_runtime = metadata.supports_runtime?
|
127
|
-
|
127
|
+
register_metadata_inputs
|
128
128
|
end
|
129
129
|
|
130
|
-
def
|
130
|
+
def register_metadata_inputs # TODO: deprecate
|
131
131
|
if metadata.params.key?(:attributes) && metadata.params[:attributes].is_a?(Array)
|
132
132
|
metadata.params[:attributes].each do |attribute|
|
133
133
|
attr_dup = attribute.dup
|
134
134
|
name = attr_dup.delete(:name)
|
135
|
-
@runner_context.
|
135
|
+
@runner_context.register_input(name, attr_dup)
|
136
136
|
end
|
137
137
|
elsif metadata.params.key?(:attributes)
|
138
|
-
Inspec::Log.warn '
|
138
|
+
Inspec::Log.warn 'Inputs must be defined as an Array. Skipping current definition.'
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
@@ -297,12 +297,12 @@ module Inspec
|
|
297
297
|
group
|
298
298
|
end
|
299
299
|
|
300
|
-
# add information about the required
|
301
|
-
if res[:
|
302
|
-
# convert to array for
|
303
|
-
res[:
|
300
|
+
# add information about the required inputs
|
301
|
+
if res[:inputs].nil? || res[:inputs].empty?
|
302
|
+
# convert to array for backwards compatability
|
303
|
+
res[:inputs] = []
|
304
304
|
else
|
305
|
-
res[:
|
305
|
+
res[:inputs] = res[:inputs].values.map(&:to_hash)
|
306
306
|
end
|
307
307
|
res[:sha256] = sha256
|
308
308
|
res[:parent_profile] = parent_profile unless parent_profile.nil?
|
@@ -530,7 +530,7 @@ module Inspec
|
|
530
530
|
backend: @backend,
|
531
531
|
parent_profile: name,
|
532
532
|
}
|
533
|
-
Inspec::DependencySet.from_lockfile(lockfile, config, {
|
533
|
+
Inspec::DependencySet.from_lockfile(lockfile, config, { inputs: @input_values })
|
534
534
|
end
|
535
535
|
|
536
536
|
# Calculate this profile's SHA256 checksum. Includes metadata, dependencies,
|
@@ -595,7 +595,7 @@ module Inspec
|
|
595
595
|
f = load_rule_filepath(prefix, rule)
|
596
596
|
load_rule(rule, f, controls, groups)
|
597
597
|
end
|
598
|
-
params[:
|
598
|
+
params[:inputs] = @runner_context.inputs
|
599
599
|
params
|
600
600
|
end
|
601
601
|
|
@@ -8,17 +8,17 @@ require 'inspec/library_eval_context'
|
|
8
8
|
require 'inspec/control_eval_context'
|
9
9
|
require 'inspec/require_loader'
|
10
10
|
require 'securerandom'
|
11
|
-
require 'inspec/objects/
|
11
|
+
require 'inspec/objects/input'
|
12
12
|
|
13
13
|
module Inspec
|
14
14
|
class ProfileContext
|
15
|
-
def self.for_profile(profile, backend,
|
15
|
+
def self.for_profile(profile, backend, inputs)
|
16
16
|
new(profile.name, backend, { 'profile' => profile,
|
17
|
-
'
|
17
|
+
'inputs' => inputs,
|
18
18
|
'check_mode' => profile.check_mode })
|
19
19
|
end
|
20
20
|
|
21
|
-
attr_reader :
|
21
|
+
attr_reader :inputs, :backend, :profile_name, :profile_id, :resource_registry
|
22
22
|
attr_accessor :rules
|
23
23
|
def initialize(profile_id, backend, conf)
|
24
24
|
if backend.nil?
|
@@ -34,8 +34,8 @@ module Inspec
|
|
34
34
|
@control_subcontexts = []
|
35
35
|
@lib_subcontexts = []
|
36
36
|
@require_loader = ::Inspec::RequireLoader.new
|
37
|
-
Inspec::
|
38
|
-
@
|
37
|
+
Inspec::InputRegistry.register_profile_alias(@profile_id, @profile_name) if @profile_id != @profile_name
|
38
|
+
@inputs = Inspec::InputRegistry.list_inputs_for_profile(@profile_id)
|
39
39
|
# A local resource registry that only contains resources defined
|
40
40
|
# in the transitive dependency tree of the loaded profile.
|
41
41
|
@resource_registry = Inspec::Resource.new_registry
|
@@ -187,11 +187,11 @@ module Inspec
|
|
187
187
|
end
|
188
188
|
end
|
189
189
|
|
190
|
-
def
|
191
|
-
# we need to return an
|
192
|
-
|
193
|
-
|
194
|
-
|
190
|
+
def register_input(name, options = {})
|
191
|
+
# we need to return an input object, to allow dermination of values
|
192
|
+
input = Inspec::InputRegistry.register_input(name, @profile_id, options)
|
193
|
+
input.value = @conf['inputs'][name] unless @conf['inputs'].nil? || @conf['inputs'][name].nil?
|
194
|
+
input.value
|
195
195
|
end
|
196
196
|
|
197
197
|
def set_header(field, val)
|
@@ -107,7 +107,7 @@ module Inspec::Reporters
|
|
107
107
|
copyright: p[:copyright],
|
108
108
|
copyright_email: p[:copyright_email],
|
109
109
|
supports: p[:supports],
|
110
|
-
attributes: p[:attributes],
|
110
|
+
attributes: (p[:inputs] ? p[:inputs] : p[:attributes]), # TODO: rename exposed field to inputs, see #3802
|
111
111
|
parent_profile: p[:parent_profile],
|
112
112
|
depends: p[:depends],
|
113
113
|
groups: profile_groups(p),
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'inspec/
|
1
|
+
require 'inspec/input_registry'
|
2
2
|
require 'inspec/plugin/v2'
|
3
3
|
require 'rspec/core/example_group'
|
4
4
|
|
@@ -64,9 +64,9 @@ module Inspec
|
|
64
64
|
end
|
65
65
|
|
66
66
|
class RSpec::Core::ExampleGroup
|
67
|
-
# This DSL method allows us to access the values of
|
67
|
+
# This DSL method allows us to access the values of inputs within InSpec tests
|
68
68
|
def attribute(name)
|
69
|
-
Inspec::
|
69
|
+
Inspec::InputRegistry.find_input(name, self.class.metadata[:profile_id]).value
|
70
70
|
end
|
71
71
|
define_example_method :attribute
|
72
72
|
|
data/lib/inspec/runner.rb
CHANGED
@@ -32,7 +32,13 @@ module Inspec
|
|
32
32
|
class Runner
|
33
33
|
extend Forwardable
|
34
34
|
|
35
|
-
attr_reader :backend, :rules, :
|
35
|
+
attr_reader :backend, :rules, :inputs
|
36
|
+
|
37
|
+
def attributes
|
38
|
+
Inspec.deprecate(:rename_attributes_to_inputs, "Don't call runner.attributes, call runner.inputs")
|
39
|
+
inputs
|
40
|
+
end
|
41
|
+
|
36
42
|
def initialize(conf = {})
|
37
43
|
@rules = []
|
38
44
|
# If we were handed a Hash config (by audit cookbook or kitchen-inspec),
|
@@ -51,10 +57,10 @@ module Inspec
|
|
51
57
|
RunnerRspec.new(@conf)
|
52
58
|
end
|
53
59
|
|
54
|
-
# list of profile
|
55
|
-
@
|
60
|
+
# list of profile inputs
|
61
|
+
@inputs = {}
|
56
62
|
|
57
|
-
|
63
|
+
load_inputs(@conf)
|
58
64
|
configure_transport
|
59
65
|
end
|
60
66
|
|
@@ -95,7 +101,7 @@ module Inspec
|
|
95
101
|
@test_collector.add_profile(requirement.profile)
|
96
102
|
end
|
97
103
|
|
98
|
-
@
|
104
|
+
@inputs = profile.runner_context.inputs if @inputs.empty?
|
99
105
|
tests = profile.collect_tests
|
100
106
|
all_controls += tests unless tests.nil?
|
101
107
|
end
|
@@ -143,25 +149,26 @@ module Inspec
|
|
143
149
|
@test_collector.exit_code
|
144
150
|
end
|
145
151
|
|
146
|
-
# determine all
|
147
|
-
def
|
152
|
+
# determine all inputs before the execution, fetch data from secrets backend
|
153
|
+
def load_inputs(options)
|
154
|
+
# TODO: - rename :attributes and :attrs - these are both user-visible
|
148
155
|
options[:attributes] ||= {}
|
149
156
|
|
150
157
|
secrets_targets = options[:attrs]
|
151
158
|
return options[:attributes] if secrets_targets.nil?
|
152
159
|
|
153
160
|
secrets_targets.each do |target|
|
154
|
-
|
161
|
+
validate_inputs_file_readability!(target)
|
155
162
|
|
156
163
|
secrets = Inspec::SecretsBackend.resolve(target)
|
157
164
|
if secrets.nil?
|
158
165
|
raise Inspec::Exceptions::SecretsBackendNotFound,
|
159
|
-
"Cannot find parser for
|
166
|
+
"Cannot find parser for inputs file '#{target}'. " \
|
160
167
|
'Check to make sure file has the appropriate extension.'
|
161
168
|
end
|
162
169
|
|
163
|
-
next if secrets.
|
164
|
-
options[:attributes].merge!(secrets.
|
170
|
+
next if secrets.inputs.nil?
|
171
|
+
options[:attributes].merge!(secrets.inputs)
|
165
172
|
end
|
166
173
|
|
167
174
|
options[:attributes]
|
@@ -173,7 +180,7 @@ module Inspec
|
|
173
180
|
#
|
174
181
|
# A target is a path or URL that points to a profile. Using this
|
175
182
|
# target we generate a Profile and a ProfileContext. The content
|
176
|
-
# (libraries, tests, and
|
183
|
+
# (libraries, tests, and inputs) from the Profile are loaded
|
177
184
|
# into the ProfileContext.
|
178
185
|
#
|
179
186
|
# If the profile depends on other profiles, those profiles will be
|
@@ -198,7 +205,7 @@ module Inspec
|
|
198
205
|
vendor_cache: @cache,
|
199
206
|
backend: @backend,
|
200
207
|
controls: @controls,
|
201
|
-
|
208
|
+
inputs: @conf[:attributes]) # TODO: read form :inputs here (user visible)
|
202
209
|
raise "Could not resolve #{target} to valid input." if profile.nil?
|
203
210
|
@target_profiles << profile if supports_profile?(profile)
|
204
211
|
end
|
@@ -289,16 +296,16 @@ module Inspec
|
|
289
296
|
examples.each { |e| @test_collector.add_test(e, rule) }
|
290
297
|
end
|
291
298
|
|
292
|
-
def
|
299
|
+
def validate_inputs_file_readability!(target)
|
293
300
|
unless File.exist?(target)
|
294
|
-
raise Inspec::Exceptions::
|
295
|
-
"Cannot find
|
301
|
+
raise Inspec::Exceptions::InputsFileDoesNotExist,
|
302
|
+
"Cannot find input file '#{target}'. " \
|
296
303
|
'Check to make sure file exists.'
|
297
304
|
end
|
298
305
|
|
299
306
|
unless File.readable?(target)
|
300
|
-
raise Inspec::Exceptions::
|
301
|
-
"Cannot read
|
307
|
+
raise Inspec::Exceptions::InputsFileNotReadable,
|
308
|
+
"Cannot read input file '#{target}'. " \
|
302
309
|
'Check to make sure file is readable.'
|
303
310
|
end
|
304
311
|
|
data/lib/inspec/schema.rb
CHANGED
data/lib/inspec/secrets/yaml.rb
CHANGED
@@ -6,7 +6,7 @@ module Secrets
|
|
6
6
|
class YAML < Inspec.secrets(1)
|
7
7
|
name 'yaml'
|
8
8
|
|
9
|
-
attr_reader :
|
9
|
+
attr_reader :inputs
|
10
10
|
|
11
11
|
def self.resolve(target)
|
12
12
|
unless target.is_a?(String) && File.file?(target) && ['.yml', '.yaml'].include?(File.extname(target).downcase)
|
@@ -17,14 +17,14 @@ module Secrets
|
|
17
17
|
|
18
18
|
# array of yaml file paths
|
19
19
|
def initialize(target)
|
20
|
-
@
|
20
|
+
@inputs = ::YAML.load_file(target)
|
21
21
|
|
22
|
-
if @
|
22
|
+
if @inputs == false || !@inputs.is_a?(Hash)
|
23
23
|
Inspec::Log.warn("#{self.class} unable to parse #{target}: invalid YAML or contents is not a Hash")
|
24
|
-
@
|
24
|
+
@inputs = nil
|
25
25
|
end
|
26
26
|
rescue => e
|
27
|
-
raise "Error reading InSpec
|
27
|
+
raise "Error reading InSpec inputs: #{e}"
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
data/lib/inspec/version.rb
CHANGED
@@ -141,7 +141,7 @@ module InspecPlugins
|
|
141
141
|
configure_logger(o)
|
142
142
|
|
143
143
|
# only run against the mock backend, otherwise we run against the local system
|
144
|
-
o[:backend] = Inspec::Backend.create(
|
144
|
+
o[:backend] = Inspec::Backend.create(Inspec::Config.mock)
|
145
145
|
o[:check_mode] = true
|
146
146
|
o[:vendor_cache] = Inspec::Cache.new(o[:vendor_cache])
|
147
147
|
|
File without changes
|
data/lib/plugins/inspec-init/{lib/inspec-init/templates → templates}/profiles/aws/attributes.yml
RENAMED
File without changes
|
File without changes
|
data/lib/plugins/inspec-init/{lib/inspec-init/templates → templates}/profiles/aws/inspec.yml
RENAMED
File without changes
|
data/lib/plugins/inspec-init/{lib/inspec-init/templates → templates}/profiles/aws/libraries/.gitkeep
RENAMED
File without changes
|
@@ -62,15 +62,27 @@ class InitCli < MiniTest::Test
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
+
def test_generating_inspec_profile_aws
|
66
|
+
Dir.mktmpdir do |dir|
|
67
|
+
profile = File.join(dir, 'test-aws-profile')
|
68
|
+
out = run_inspec_process("init profile --platform aws test-aws-profile", prefix: "cd #{dir} &&")
|
69
|
+
assert_equal 0, out.exit_status
|
70
|
+
assert_includes out.stdout, 'Creating new profile at'
|
71
|
+
assert_includes out.stdout, profile
|
72
|
+
assert_includes Dir.entries(profile).join, 'inspec.yml'
|
73
|
+
assert_includes Dir.entries(profile).join, 'README.md'
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
65
77
|
def test_generating_inspec_profile_os
|
66
78
|
Dir.mktmpdir do |dir|
|
67
|
-
profile = File.join(dir,'test-os-profile')
|
79
|
+
profile = File.join(dir, 'test-os-profile')
|
68
80
|
out = run_inspec_process("init profile --platform os test-os-profile", prefix: "cd #{dir} &&")
|
69
81
|
assert_equal 0, out.exit_status
|
70
82
|
assert_includes out.stdout, 'Creating new profile at'
|
71
83
|
assert_includes out.stdout, profile
|
72
84
|
assert_includes Dir.entries(profile).join, 'inspec.yml'
|
73
85
|
assert_includes Dir.entries(profile).join, 'README.md'
|
74
|
-
|
86
|
+
end
|
75
87
|
end
|
76
88
|
end
|
data/lib/resources/postgres.rb
CHANGED
@@ -9,6 +9,28 @@ module Inspec::Resources
|
|
9
9
|
|
10
10
|
attr_reader :service, :data_dir, :conf_dir, :conf_path, :version, :cluster
|
11
11
|
def initialize
|
12
|
+
# determine dirs and service based on versions
|
13
|
+
determine_dirs
|
14
|
+
determine_service
|
15
|
+
|
16
|
+
# print warnings if the dirs do not exist
|
17
|
+
verify_dirs
|
18
|
+
|
19
|
+
if !@version.nil? && !@conf_dir.empty?
|
20
|
+
@conf_path = File.join @conf_dir, 'postgresql.conf'
|
21
|
+
else
|
22
|
+
@conf_path = nil
|
23
|
+
return skip_resource 'Seems like PostgreSQL is not installed on your system'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_s
|
28
|
+
'PostgreSQL'
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def determine_dirs
|
12
34
|
if inspec.os.debian?
|
13
35
|
#
|
14
36
|
# https://wiki.debian.org/PostgreSql
|
@@ -33,26 +55,18 @@ module Inspec::Resources
|
|
33
55
|
end
|
34
56
|
@data_dir = locate_data_dir_location_by_version(@version)
|
35
57
|
end
|
36
|
-
|
37
|
-
@service = 'postgresql'
|
38
|
-
@service += "-#{@version}" if @version.to_f >= 9.4
|
39
58
|
@conf_dir ||= @data_dir
|
40
|
-
|
41
|
-
verify_dirs
|
42
|
-
if !@version.nil? && !@conf_dir.empty?
|
43
|
-
@conf_path = File.join @conf_dir, 'postgresql.conf'
|
44
|
-
else
|
45
|
-
@conf_path = nil
|
46
|
-
return skip_resource 'Seems like PostgreSQL is not installed on your system'
|
47
|
-
end
|
48
59
|
end
|
49
60
|
|
50
|
-
def
|
51
|
-
'
|
61
|
+
def determine_service
|
62
|
+
@service = 'postgresql'
|
63
|
+
if @version.to_i >= 10
|
64
|
+
@service += "-#{@version.to_i}"
|
65
|
+
elsif @version.to_f >= 9.4
|
66
|
+
@service += "-#{@version}"
|
67
|
+
end
|
52
68
|
end
|
53
69
|
|
54
|
-
private
|
55
|
-
|
56
70
|
def verify_dirs
|
57
71
|
warn "Default postgresql configuration directory: #{@conf_dir} does not exist. " \
|
58
72
|
"Postgresql may not be installed or we've misidentified the configuration " \
|
@@ -71,6 +85,8 @@ module Inspec::Resources
|
|
71
85
|
def locate_data_dir_location_by_version(ver = @version)
|
72
86
|
dir_list = [
|
73
87
|
"/var/lib/pgsql/#{ver}/data",
|
88
|
+
# for 10, the versions are just stored in `10` although their version `10.7`
|
89
|
+
"/var/lib/pgsql/#{ver.to_i}/data",
|
74
90
|
'/var/lib/pgsql/data',
|
75
91
|
'/var/lib/postgres/data',
|
76
92
|
'/var/lib/postgresql/data',
|
data/lib/utils/pkey_reader.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
module PkeyReader
|
2
2
|
def read_pkey(filecontent, passphrase)
|
3
|
-
|
3
|
+
raise_if_unset(passphrase)
|
4
4
|
|
5
5
|
OpenSSL::PKey.read(filecontent, passphrase)
|
6
6
|
rescue OpenSSL::PKey::PKeyError
|
7
7
|
raise Inspec::Exceptions::ResourceFailed, 'passphrase error'
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
if passphrase.is_a? Inspec::
|
12
|
-
raise Inspec::Exceptions::ResourceFailed, 'Please provide
|
10
|
+
def raise_if_unset(passphrase)
|
11
|
+
if passphrase.is_a? Inspec::Input::NO_VALUE_SET
|
12
|
+
raise Inspec::Exceptions::ResourceFailed, 'Please provide a value for input for openssl key passphrase'
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dominik Richter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02
|
11
|
+
date: 2019-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: train
|
@@ -386,7 +386,6 @@ files:
|
|
386
386
|
- lib/inspec.rb
|
387
387
|
- lib/inspec/archive/tar.rb
|
388
388
|
- lib/inspec/archive/zip.rb
|
389
|
-
- lib/inspec/attribute_registry.rb
|
390
389
|
- lib/inspec/backend.rb
|
391
390
|
- lib/inspec/base_cli.rb
|
392
391
|
- lib/inspec/cached_fetcher.rb
|
@@ -416,15 +415,16 @@ files:
|
|
416
415
|
- lib/inspec/formatters/show_progress.rb
|
417
416
|
- lib/inspec/globals.rb
|
418
417
|
- lib/inspec/impact.rb
|
418
|
+
- lib/inspec/input_registry.rb
|
419
419
|
- lib/inspec/library_eval_context.rb
|
420
420
|
- lib/inspec/log.rb
|
421
421
|
- lib/inspec/metadata.rb
|
422
422
|
- lib/inspec/method_source.rb
|
423
423
|
- lib/inspec/objects.rb
|
424
|
-
- lib/inspec/objects/attribute.rb
|
425
424
|
- lib/inspec/objects/control.rb
|
426
425
|
- lib/inspec/objects/describe.rb
|
427
426
|
- lib/inspec/objects/each_loop.rb
|
427
|
+
- lib/inspec/objects/input.rb
|
428
428
|
- lib/inspec/objects/list.rb
|
429
429
|
- lib/inspec/objects/or_test.rb
|
430
430
|
- lib/inspec/objects/ruby_helper.rb
|
@@ -511,11 +511,6 @@ files:
|
|
511
511
|
- lib/plugins/inspec-init/lib/inspec-init/cli_plugin.rb
|
512
512
|
- lib/plugins/inspec-init/lib/inspec-init/cli_profile.rb
|
513
513
|
- lib/plugins/inspec-init/lib/inspec-init/renderer.rb
|
514
|
-
- lib/plugins/inspec-init/lib/inspec-init/templates/profiles/aws/README.md
|
515
|
-
- lib/plugins/inspec-init/lib/inspec-init/templates/profiles/aws/attributes.yml
|
516
|
-
- lib/plugins/inspec-init/lib/inspec-init/templates/profiles/aws/controls/example.rb
|
517
|
-
- lib/plugins/inspec-init/lib/inspec-init/templates/profiles/aws/inspec.yml
|
518
|
-
- lib/plugins/inspec-init/lib/inspec-init/templates/profiles/aws/libraries/.gitkeep
|
519
514
|
- lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/Gemfile
|
520
515
|
- lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/LICENSE
|
521
516
|
- lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/README.md
|
@@ -532,6 +527,11 @@ files:
|
|
532
527
|
- lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/unit/README.md
|
533
528
|
- lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/unit/cli_args_test.rb
|
534
529
|
- lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/unit/plugin_def_test.rb
|
530
|
+
- lib/plugins/inspec-init/templates/profiles/aws/README.md
|
531
|
+
- lib/plugins/inspec-init/templates/profiles/aws/attributes.yml
|
532
|
+
- lib/plugins/inspec-init/templates/profiles/aws/controls/example.rb
|
533
|
+
- lib/plugins/inspec-init/templates/profiles/aws/inspec.yml
|
534
|
+
- lib/plugins/inspec-init/templates/profiles/aws/libraries/.gitkeep
|
535
535
|
- lib/plugins/inspec-init/templates/profiles/gcp/README.md
|
536
536
|
- lib/plugins/inspec-init/templates/profiles/gcp/attributes.yml
|
537
537
|
- lib/plugins/inspec-init/templates/profiles/gcp/controls/example.rb
|