kitchen-inspec 0.15.2 → 0.16.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.kitchen.yml +36 -3
- data/.travis.yml +19 -8
- data/CHANGELOG.md +42 -2
- data/README.md +48 -9
- data/kitchen-inspec.gemspec +2 -1
- data/lib/kitchen/verifier/inspec.rb +29 -7
- data/lib/kitchen/verifier/inspec_version.rb +1 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63e838bc0d2ff3a02dc378832b89ca238ef16c75
|
4
|
+
data.tar.gz: 931d2ff55d6d41bb3f0145d2c0d776046005007f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 60abb7285e5826d23e811dee7997477199ada4ee2a6fc33d6b6701659fc2483887c5f8cb872c75d570479ede90a4c87354fb70e8a50eeda0ba86b3efb9919fea
|
7
|
+
data.tar.gz: 9debf27c7213f623f4a0008c22073442932ed8d21aae7c89c07043ffbc77fbb8ea78c0057a1a29d3d8410c8514b0e0119ba1cc98a6b3f8242a477ea30382ba1c
|
data/.kitchen.yml
CHANGED
@@ -29,14 +29,46 @@ suites:
|
|
29
29
|
- recipe[os_prepare]
|
30
30
|
verifier:
|
31
31
|
inspec_tests:
|
32
|
-
-
|
32
|
+
- name: tmp
|
33
|
+
git: https://github.com/nathenharvey/tmp_compliance_profile.git
|
33
34
|
- name: supermarket
|
34
35
|
run_list:
|
35
36
|
- recipe[apt]
|
36
37
|
- recipe[ssh-hardening]
|
37
38
|
verifier:
|
38
39
|
inspec_tests:
|
39
|
-
-
|
40
|
+
- name: hardening/ssh-hardening
|
41
|
+
- name: backwards
|
42
|
+
run_list:
|
43
|
+
- recipe[os_prepare]
|
44
|
+
verifier:
|
45
|
+
inspec_tests:
|
46
|
+
- https://github.com/nathenharvey/tmp_compliance_profile.git
|
47
|
+
- name: duplicates
|
48
|
+
run_list:
|
49
|
+
- recipe[os_prepare]
|
50
|
+
verifier:
|
51
|
+
inspec_tests:
|
52
|
+
- path: ./test/integration/duplicates
|
53
|
+
- path: ./test/integration/duplicates
|
54
|
+
- name: attributes_inline
|
55
|
+
run_list:
|
56
|
+
- recipe[os_prepare]
|
57
|
+
verifier:
|
58
|
+
inspec_tests:
|
59
|
+
- path: ./test/integration/attributes
|
60
|
+
attributes:
|
61
|
+
user: bob
|
62
|
+
password: secret
|
63
|
+
- name: attributes_file
|
64
|
+
run_list:
|
65
|
+
- recipe[os_prepare]
|
66
|
+
verifier:
|
67
|
+
inspec_tests:
|
68
|
+
- test/integration/attributes
|
69
|
+
# - path: ./test/integration/attributes
|
70
|
+
attrs:
|
71
|
+
- test/integration/profile-attribute.yml
|
40
72
|
# before you are able to use the compliance plugin, you need to run
|
41
73
|
# insecure is only required if you use self-signed certificates
|
42
74
|
# $ inspec compliance login https://compliance.test --user admin --insecure --token ''
|
@@ -46,4 +78,5 @@ suites:
|
|
46
78
|
- recipe[ssh-hardening]
|
47
79
|
verifier:
|
48
80
|
inspec_tests:
|
49
|
-
-
|
81
|
+
- name: ssh
|
82
|
+
compliance: base/ssh
|
data/.travis.yml
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
sudo: required
|
2
|
+
branches:
|
3
|
+
only:
|
4
|
+
- master
|
2
5
|
language: ruby
|
3
6
|
cache: bundler
|
4
7
|
dist: trusty
|
@@ -14,16 +17,24 @@ matrix:
|
|
14
17
|
- rvm: 2.2.5
|
15
18
|
- rvm: 2.3.1
|
16
19
|
bundler_args: "--without guard tools"
|
17
|
-
script: bundle exec rake
|
20
|
+
script: bundle exec rake $SUITE
|
21
|
+
env: SUITE="test:integration" OS='default profile contains_inspec'
|
18
22
|
- rvm: 2.3.1
|
19
23
|
bundler_args: "--without guard tools"
|
20
|
-
script: bundle exec rake
|
24
|
+
script: bundle exec rake $SUITE
|
25
|
+
env: SUITE="test:integration" OS='backwards'
|
26
|
+
- rvm: 2.3.1
|
27
|
+
bundler_args: "--without guard tools"
|
28
|
+
script: bundle exec rake $SUITE
|
29
|
+
env: SUITE="test:integration" OS='duplicates'
|
30
|
+
- rvm: 2.3.1
|
31
|
+
bundler_args: "--without guard tools"
|
32
|
+
script: bundle exec rake $SUITE
|
33
|
+
env: SUITE="test:integration" OS='supermarket'
|
34
|
+
- rvm: 2.3.1
|
35
|
+
bundler_args: "--without guard tools"
|
36
|
+
script: bundle exec rake $SUITE
|
37
|
+
env: SUITE="test:integration" OS='attributes-inline attributes-file'
|
21
38
|
- rvm: ruby-head
|
22
39
|
allow_failures:
|
23
40
|
- rvm: ruby-head
|
24
|
-
deploy:
|
25
|
-
provider: rubygems
|
26
|
-
on:
|
27
|
-
tags: true
|
28
|
-
api_key:
|
29
|
-
secure: lfOpkVSc5+O6mSc1JXEBRuJtNrQm2WxDyClovsV1tfKb54doutDD4fOoogQFUwu3Yq9kujer8KuqZaxzRd/DwQGkTFBGt3KgMEpCUZlRLCD1v81/xnc61DU37PeZMbfdQt0OeioTcyNoBrmjCggu3nmb4dIMZgRMi69qR/OGejz1FVun1d5PmdJ8jckU/wzwttISkHzkAaY55NBEZc8oLA7ekUo+1gnKM4+0YskP6lKg7Wf3r//neTvd0qXG9iHdc1laHnSEevrMrzzcsN4oWn+MXiT7cWB1Xh/MUc4wFCy1CJnw9rmX2YT20994avApJJRu3WVZ+gt0cxVPy7sux1qCG3KcMI0ei6jJuy8akRraYwFt4/CWAZXh41SNMGkvZEQU9J/3sxhCUeS5bGm6IYYWNczFPEgWRXAGOXgFflLE6+NaCT3KtCG3G994aPCFiiz5cc/n9nrsncLsXmL+4MlF+foA2UkT44/VwQTJK1UIBKqXscghR1FzD0It/Y3Gqe+fcKb2Wq77v3dC4IBmWncXDk3LjT36+T4C0hctsaaSjopSc7CyI4HE3MkwqPqJ8PPjlz36/d+42MkNFHE6dd2wPMtWVSfC1AsNf9k79GCSU+f3lYgZK1mjvR3Hx1MZGEfgvJHpZH2S4eOqiV+c9C+PPNUXRaYRyapIa+H4qow=
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,47 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## [0.
|
4
|
-
[Full Changelog](https://github.com/chef/kitchen-inspec/compare/v0.
|
3
|
+
## [0.16.1](https://github.com/chef/kitchen-inspec/tree/0.16.1) (2016-11-11)
|
4
|
+
[Full Changelog](https://github.com/chef/kitchen-inspec/compare/v0.16.0...0.16.1)
|
5
|
+
|
6
|
+
**Implemented enhancements:**
|
7
|
+
|
8
|
+
- Support InSpec attributes [\#108](https://github.com/chef/kitchen-inspec/issues/108)
|
9
|
+
|
10
|
+
**Closed issues:**
|
11
|
+
|
12
|
+
- Incorrect dependencies on 0.16 release [\#117](https://github.com/chef/kitchen-inspec/issues/117)
|
13
|
+
|
14
|
+
**Merged pull requests:**
|
15
|
+
|
16
|
+
- fix \#117 [\#118](https://github.com/chef/kitchen-inspec/pull/118) ([chris-rock](https://github.com/chris-rock))
|
17
|
+
|
18
|
+
## [v0.16.0](https://github.com/chef/kitchen-inspec/tree/v0.16.0) (2016-11-04)
|
19
|
+
[Full Changelog](https://github.com/chef/kitchen-inspec/compare/v0.15.2...v0.16.0)
|
20
|
+
|
21
|
+
**Implemented enhancements:**
|
22
|
+
|
23
|
+
- Harmonize profile location targets [\#111](https://github.com/chef/kitchen-inspec/issues/111)
|
24
|
+
- Add host and port config options [\#110](https://github.com/chef/kitchen-inspec/pull/110) ([alexpop](https://github.com/alexpop))
|
25
|
+
|
26
|
+
**Fixed bugs:**
|
27
|
+
|
28
|
+
- Duplicate testing when verifier specified in suite definition [\#109](https://github.com/chef/kitchen-inspec/issues/109)
|
29
|
+
- OS detection 2nd time with unknown value? [\#92](https://github.com/chef/kitchen-inspec/issues/92)
|
30
|
+
|
31
|
+
**Closed issues:**
|
32
|
+
|
33
|
+
- Message: Could not load the 'inspec' verifier from the load path. Please ensure that your transport is installed as a gem or included in your Gemfile if using Bundler. [\#105](https://github.com/chef/kitchen-inspec/issues/105)
|
34
|
+
|
35
|
+
**Merged pull requests:**
|
36
|
+
|
37
|
+
- add attributes support in kitchen-inspec [\#116](https://github.com/chef/kitchen-inspec/pull/116) ([chris-rock](https://github.com/chris-rock))
|
38
|
+
- use suite names and only test master branch + PRs [\#115](https://github.com/chef/kitchen-inspec/pull/115) ([chris-rock](https://github.com/chris-rock))
|
39
|
+
- fix duplicate testing when unique suite name [\#114](https://github.com/chef/kitchen-inspec/pull/114) ([vjeffrey](https://github.com/vjeffrey))
|
40
|
+
- update readme to reflect harmonization of profile location targets [\#113](https://github.com/chef/kitchen-inspec/pull/113) ([vjeffrey](https://github.com/vjeffrey))
|
41
|
+
- Make the info message clearer [\#112](https://github.com/chef/kitchen-inspec/pull/112) ([chilicheech](https://github.com/chilicheech))
|
42
|
+
|
43
|
+
## [v0.15.2](https://github.com/chef/kitchen-inspec/tree/v0.15.2) (2016-09-26)
|
44
|
+
[Full Changelog](https://github.com/chef/kitchen-inspec/compare/v0.15.1...v0.15.2)
|
5
45
|
|
6
46
|
**Merged pull requests:**
|
7
47
|
|
data/README.md
CHANGED
@@ -46,6 +46,15 @@ verifier:
|
|
46
46
|
sudo_command: 'skittles'
|
47
47
|
```
|
48
48
|
|
49
|
+
You can also specify the host and port to be used by InSpec when targeting the node. Otherwise, it defaults to the hostname and port used by kitchen for converging.
|
50
|
+
|
51
|
+
```yaml
|
52
|
+
verifier:
|
53
|
+
name: inspec
|
54
|
+
host: 192.168.56.40
|
55
|
+
port: 22
|
56
|
+
```
|
57
|
+
|
49
58
|
### Directory Structure
|
50
59
|
|
51
60
|
By default `kitchen-inspec` expects test to be in `test/integration/%suite%` directory structure (we use Chef as provisioner here):
|
@@ -117,15 +126,16 @@ suites:
|
|
117
126
|
- name: default
|
118
127
|
verifier:
|
119
128
|
inspec_tests:
|
120
|
-
-
|
129
|
+
- name: ssh-hardening
|
130
|
+
url: https://github.com/dev-sec/tests-ssh-hardening
|
121
131
|
```
|
122
132
|
|
123
133
|
`inspec_tests` accepts all values that `inspec exec profile` would expect. We support:
|
124
134
|
|
125
|
-
- local directory eg.
|
126
|
-
- github url `https://github.com/dev-sec/tests-ssh-hardening`
|
127
|
-
- Chef Supermarket `
|
128
|
-
- Chef Compliance `compliance
|
135
|
+
- local directory eg. `path: /path/to/profile`
|
136
|
+
- github url `git: https://github.com/dev-sec/tests-ssh-hardening.git`
|
137
|
+
- Chef Supermarket `name: hardening/ssh-hardening` # defaults to supermarket (list all available profiles with `inspec supermarket profiles`)
|
138
|
+
- Chef Compliance `name: ssh` `compliance: base/ssh`
|
129
139
|
|
130
140
|
The following example illustrates the usage in a `.kitchen.yml`
|
131
141
|
|
@@ -139,8 +149,11 @@ suites:
|
|
139
149
|
- recipe[os-hardening]
|
140
150
|
verifier:
|
141
151
|
inspec_tests:
|
142
|
-
-
|
143
|
-
-
|
152
|
+
- path: path/to/some/local/tests
|
153
|
+
- name: ssh-hardening
|
154
|
+
url: https://github.com/dev-sec/tests-ssh-hardening/archive/master.zip
|
155
|
+
- name: os-hardening
|
156
|
+
git: https://github.com/dev-sec/tests-os-hardening.git
|
144
157
|
- name: supermarket
|
145
158
|
run_list:
|
146
159
|
- recipe[apt]
|
@@ -148,7 +161,9 @@ suites:
|
|
148
161
|
- recipe[ssh-hardening]
|
149
162
|
verifier:
|
150
163
|
inspec_tests:
|
151
|
-
-
|
164
|
+
- name: hardening/ssh-hardening # name only defaults to supermarket
|
165
|
+
- name: ssh-supermarket # alternatively, you can explicitly specify that the profile is from supermarket in this way
|
166
|
+
supermarket: hardening/ssh-hardening
|
152
167
|
# before you are able to use the compliance plugin, you need to run
|
153
168
|
# insecure is only required if you use self-signed certificates
|
154
169
|
# $ inspec compliance login https://compliance.test --user admin --insecure --token ''
|
@@ -159,9 +174,33 @@ suites:
|
|
159
174
|
- recipe[ssh-hardening]
|
160
175
|
verifier:
|
161
176
|
inspec_tests:
|
162
|
-
-
|
177
|
+
- name: ssh
|
178
|
+
compliance: base/ssh
|
179
|
+
```
|
180
|
+
|
181
|
+
### Use attributes with your inspec profiles
|
182
|
+
|
183
|
+
To run a profile with attributes defined inline, you can adapt your `.kitchen.yml`:
|
184
|
+
|
185
|
+
```yaml
|
186
|
+
verifier:
|
187
|
+
inspec_tests:
|
188
|
+
- path: test/integration/attributes
|
189
|
+
attributes:
|
190
|
+
user: bob
|
191
|
+
password: secret
|
163
192
|
```
|
164
193
|
|
194
|
+
You can also define your attributes in an external file. Adapt your `.kitchen.yml` to point to that file:
|
195
|
+
|
196
|
+
```yaml
|
197
|
+
verifier:
|
198
|
+
inspec_tests:
|
199
|
+
- path: test/integration/attributes
|
200
|
+
attrs:
|
201
|
+
- test/integration/profile-attribute.yml
|
202
|
+
```
|
203
|
+
|
165
204
|
## Development
|
166
205
|
|
167
206
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/kitchen-inspec.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
spec.required_ruby_version = ">= 2.1.0"
|
24
|
-
spec.add_dependency "inspec", ">=0.
|
24
|
+
spec.add_dependency "inspec", ">=0.34.0", "<2.0.0"
|
25
25
|
spec.add_dependency "test-kitchen", "~> 1.6"
|
26
|
+
spec.add_dependency "hashie", "~> 3.4"
|
26
27
|
end
|
@@ -64,7 +64,15 @@ module Kitchen
|
|
64
64
|
# (see Base#call)
|
65
65
|
def call(state)
|
66
66
|
logger.debug("Initialize InSpec")
|
67
|
+
|
68
|
+
# gather connection options
|
67
69
|
opts = runner_options(instance.transport, state)
|
70
|
+
|
71
|
+
# add attributes
|
72
|
+
opts[:attrs] = config[:attrs]
|
73
|
+
opts[:attributes] = Hashie.stringify_keys config[:attributes] unless config[:attributes].nil?
|
74
|
+
|
75
|
+
# initialize runner
|
68
76
|
runner = ::Inspec::Runner.new(opts)
|
69
77
|
|
70
78
|
# add each profile to runner
|
@@ -119,10 +127,24 @@ module Kitchen
|
|
119
127
|
end
|
120
128
|
|
121
129
|
base = File.join(base, "inspec") if legacy_mode
|
122
|
-
logger.info("
|
130
|
+
logger.info("Using `#{base}` for testing")
|
123
131
|
|
124
132
|
# only return the directory if it exists
|
125
|
-
Pathname.new(base).exist? ? [base] : []
|
133
|
+
Pathname.new(base).exist? ? [{ :path => base }] : []
|
134
|
+
end
|
135
|
+
|
136
|
+
# Takes config[:inspec_tests] and modifies any value with a key of :path by adding the full path
|
137
|
+
# @return [Array] array of modified hashes
|
138
|
+
# @api private
|
139
|
+
def resolve_config_inspec_tests
|
140
|
+
config[:inspec_tests].map do |test_hash|
|
141
|
+
if test_hash.is_a? Hash
|
142
|
+
test_hash = { :path => config[:kitchen_root] + "/" + test_hash[:path] } if test_hash.has_key?(:path)
|
143
|
+
test_hash
|
144
|
+
else
|
145
|
+
test_hash # if it's not a hash, just return it as is
|
146
|
+
end
|
147
|
+
end
|
126
148
|
end
|
127
149
|
|
128
150
|
# Returns an array of test profiles
|
@@ -130,7 +152,7 @@ module Kitchen
|
|
130
152
|
# @api private
|
131
153
|
def collect_tests
|
132
154
|
# get local tests and get run list of profiles
|
133
|
-
(local_suite_files +
|
155
|
+
(local_suite_files + resolve_config_inspec_tests).compact.uniq
|
134
156
|
end
|
135
157
|
|
136
158
|
# Returns a configuration Hash that can be passed to a `Inspec::Runner`.
|
@@ -169,8 +191,8 @@ module Kitchen
|
|
169
191
|
# pass-in sudo config from kitchen verifier
|
170
192
|
"sudo" => config[:sudo],
|
171
193
|
"sudo_command" => config[:sudo_command],
|
172
|
-
"host" => kitchen[:hostname],
|
173
|
-
"port" => kitchen[:port],
|
194
|
+
"host" => config[:host] || kitchen[:hostname],
|
195
|
+
"port" => config[:port] || kitchen[:port],
|
174
196
|
"user" => kitchen[:username],
|
175
197
|
"keepalive" => kitchen[:keepalive],
|
176
198
|
"keepalive_interval" => kitchen[:keepalive_interval],
|
@@ -196,8 +218,8 @@ module Kitchen
|
|
196
218
|
opts = {
|
197
219
|
"backend" => "winrm",
|
198
220
|
"logger" => logger,
|
199
|
-
"host" => URI(kitchen[:endpoint]).hostname,
|
200
|
-
"port" => URI(kitchen[:endpoint]).port,
|
221
|
+
"host" => config[:host] || URI(kitchen[:endpoint]).hostname,
|
222
|
+
"port" => config[:port] || URI(kitchen[:endpoint]).port,
|
201
223
|
"user" => kitchen[:user],
|
202
224
|
"password" => kitchen[:password] || kitchen[:pass],
|
203
225
|
"connection_retries" => kitchen[:connection_retries],
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kitchen-inspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.16.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fletcher Nichol
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inspec
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.34.0
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: 2.0.0
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: 0.34.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 2.0.0
|
@@ -44,6 +44,20 @@ dependencies:
|
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '1.6'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: hashie
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.4'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '3.4'
|
47
61
|
description: A Test Kitchen Verifier for InSpec
|
48
62
|
email:
|
49
63
|
- fnichol@chef.io
|