inspec 1.48.0 → 1.49.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -0
  3. data/CHANGELOG.md +40 -16
  4. data/Rakefile +1 -1
  5. data/docs/resources/bond.md.erb +6 -1
  6. data/docs/resources/mysql_session.md.erb +24 -12
  7. data/docs/resources/passwd.md.erb +1 -1
  8. data/docs/resources/xml.md.erb +7 -2
  9. data/docs/shell.md +22 -0
  10. data/inspec.gemspec +1 -1
  11. data/lib/bundles/inspec-artifact/cli.rb +0 -2
  12. data/lib/bundles/inspec-compliance/api.rb +58 -3
  13. data/lib/bundles/inspec-compliance/cli.rb +1 -1
  14. data/lib/bundles/inspec-habitat/profile.rb +1 -1
  15. data/lib/fetchers/url.rb +1 -1
  16. data/lib/inspec/base_cli.rb +3 -1
  17. data/lib/inspec/cli.rb +11 -1
  18. data/lib/inspec/control_eval_context.rb +13 -2
  19. data/lib/inspec/dependencies/lockfile.rb +0 -2
  20. data/lib/inspec/dsl_shared.rb +8 -0
  21. data/lib/inspec/library_eval_context.rb +12 -1
  22. data/lib/inspec/metadata.rb +13 -44
  23. data/lib/inspec/objects/attribute.rb +1 -1
  24. data/lib/inspec/plugins/resource.rb +18 -2
  25. data/lib/inspec/profile.rb +17 -11
  26. data/lib/inspec/profile_context.rb +9 -3
  27. data/lib/inspec/profile_vendor.rb +1 -1
  28. data/lib/inspec/resource.rb +5 -0
  29. data/lib/inspec/rspec_json_formatter.rb +3 -3
  30. data/lib/inspec/rule.rb +1 -1
  31. data/lib/inspec/runner.rb +13 -5
  32. data/lib/inspec/schema.rb +1 -1
  33. data/lib/inspec/shell.rb +1 -1
  34. data/lib/inspec/version.rb +1 -1
  35. data/lib/resources/aide_conf.rb +0 -2
  36. data/lib/resources/apache_conf.rb +9 -2
  37. data/lib/resources/auditd.rb +0 -1
  38. data/lib/resources/auditd_rules.rb +0 -2
  39. data/lib/resources/bond.rb +4 -0
  40. data/lib/resources/crontab.rb +1 -1
  41. data/lib/resources/docker.rb +1 -1
  42. data/lib/resources/elasticsearch.rb +1 -1
  43. data/lib/resources/file.rb +2 -0
  44. data/lib/resources/groups.rb +29 -5
  45. data/lib/resources/grub_conf.rb +1 -1
  46. data/lib/resources/os.rb +8 -20
  47. data/lib/resources/package.rb +20 -21
  48. data/lib/resources/platform.rb +112 -0
  49. data/lib/resources/port.rb +1 -1
  50. data/lib/resources/processes.rb +1 -1
  51. data/lib/resources/registry_key.rb +1 -1
  52. data/lib/resources/service.rb +1 -1
  53. data/lib/resources/virtualization.rb +1 -1
  54. data/lib/resources/x509_certificate.rb +1 -1
  55. data/lib/resources/xml.rb +1 -0
  56. metadata +5 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: '012308b85533b4379b4dae9b2d6bb956e4716dea'
4
- data.tar.gz: a621d9a79814290988494ec07da9bad51057f33b
3
+ metadata.gz: ff56bd489f8c7496d62120343dd41c16364bef74
4
+ data.tar.gz: c2fc41784be9b7695628bea807ba737ea1f0deb4
5
5
  SHA512:
6
- metadata.gz: 93b4c27033acdb1e4559c48940d0c73b1d94b3b20e109ed6a3b2ecf57908143b8c133717790ff273253aa580d893ee3ecd9a75e1129d9125bbc64f2c7c2d8397
7
- data.tar.gz: 8eb7fe1e83c0bba17b5ef763015c83be4952c622e80a80af68a702d829d78bed389864157cdee86352f4ae166213ddc17b4fd5fbd5455719c89c8efc3de77a30
6
+ metadata.gz: fc9b5edf8c20fa3b937a7215cb6aee10a3622de37d4bbfa9752666f92cbf355300b953840ee5a032be8ae3fd4a338cd0e6345be2156fab4b5d3dd008ef5193d0
7
+ data.tar.gz: 250b01f2dc31fd57a9321758e8ef6b4ffc47ddd025c1b0db157a842ff3ebe04467fe7e9e8f90ccf16afc3b7fbff767bab3a89d799dc4d5959000bfd76f48115e
@@ -38,6 +38,8 @@ Metrics/AbcSize:
38
38
  Max: 33
39
39
  Metrics/BlockLength:
40
40
  Max: 50
41
+ Metrics/ClassLength:
42
+ Enabled: false
41
43
  Metrics/CyclomaticComplexity:
42
44
  Max: 10
43
45
  Metrics/PerceivedComplexity:
@@ -60,6 +62,8 @@ Style/Encoding:
60
62
  Enabled: false
61
63
  Style/FileName:
62
64
  Enabled: false
65
+ Style/GuardClause:
66
+ Enabled: false
63
67
  Style/IfUnlessModifier:
64
68
  Enabled: false
65
69
  Style/MethodMissing:
@@ -1,32 +1,57 @@
1
1
  # Change Log
2
2
  <!-- usage documentation: http://expeditor-docs.es.chef.io/configuration/changelog/ -->
3
- <!-- latest_release 1.48.0 -->
4
- ## [v1.48.0](https://github.com/chef/inspec/tree/v1.48.0) (2017-12-07)
3
+ <!-- latest_release 1.49.2 -->
4
+ ## [v1.49.2](https://github.com/chef/inspec/tree/v1.49.2) (2018-01-04)
5
5
 
6
- #### Merged Pull Requests
7
- - Fix changelog categories, bump minor version for release [#2381](https://github.com/chef/inspec/pull/2381) ([adamleff](https://github.com/adamleff))
6
+ #### Enhancements
7
+ - load local dependencies in inspec shell [#2438](https://github.com/chef/inspec/pull/2438) ([arlimus](https://github.com/arlimus))
8
8
  <!-- latest_release -->
9
9
 
10
- <!-- release_rollup since=1.47.0 -->
11
- ### Changes since 1.47.0 release
10
+ <!-- release_rollup since=1.48.0 -->
11
+ ### Changes since 1.48.0 release
12
12
 
13
13
  #### Enhancements
14
- - Allow crontab resource to read crontab at user specified paths. [#2328](https://github.com/chef/inspec/pull/2328) ([miah](https://github.com/miah)) <!-- 1.47.7 -->
15
- - Update default cli options to be uniq per command type [#2378](https://github.com/chef/inspec/pull/2378) ([jquick](https://github.com/jquick)) <!-- 1.47.6 -->
14
+ - load local dependencies in inspec shell [#2438](https://github.com/chef/inspec/pull/2438) ([arlimus](https://github.com/arlimus)) <!-- 1.49.2 -->
15
+ - Deprecate and warn when comparing against OS name with capitals/spaces [#2397](https://github.com/chef/inspec/pull/2397) ([jquick](https://github.com/jquick)) <!-- 1.49.1 -->
16
+ - Add platform resource and platform supports [#2393](https://github.com/chef/inspec/pull/2393) ([jquick](https://github.com/jquick)) <!-- 1.48.12 -->
17
+ - file resource: adds `Synchronize` permission to windows ACL checks [#2399](https://github.com/chef/inspec/pull/2399) ([TheLonelyGhost](https://github.com/TheLonelyGhost)) <!-- 1.48.6 -->
18
+ - bond resource: Add bonding mode matcher [#2414](https://github.com/chef/inspec/pull/2414) ([ehanlon](https://github.com/ehanlon)) <!-- 1.48.8 -->
16
19
 
17
20
  #### Bug Fixes
18
- - Allow `inspec check` to ignore `only_if` [#2250](https://github.com/chef/inspec/pull/2250) ([jerryaldrichiii](https://github.com/jerryaldrichiii)) <!-- 1.47.2 -->
19
- - Remove rainbow dependency, fix duplicate rake gem [#2374](https://github.com/chef/inspec/pull/2374) ([adamleff](https://github.com/adamleff)) <!-- 1.47.8 -->
20
- - Resolve merge issue with json-config vs thor defaults [#2377](https://github.com/chef/inspec/pull/2377) ([jquick](https://github.com/jquick)) <!-- 1.47.5 -->
21
- - Update rspec cli control summary to not uniq fails/skips [#2362](https://github.com/chef/inspec/pull/2362) ([jquick](https://github.com/jquick)) <!-- 1.47.1 -->
21
+ - Modify `inspec json` to use `check_mode` [#2435](https://github.com/chef/inspec/pull/2435) ([jerryaldrichiii](https://github.com/jerryaldrichiii)) <!-- 1.48.14 -->
22
+ - dependency chaining in libraries [#2428](https://github.com/chef/inspec/pull/2428) ([arlimus](https://github.com/arlimus)) <!-- 1.48.13 -->
23
+ - Update apache_conf regular expression to exclude whitespace. [#2416](https://github.com/chef/inspec/pull/2416) ([miah](https://github.com/miah)) <!-- 1.48.9 -->
24
+ - Add support for Darwin Directory Service groups [#2403](https://github.com/chef/inspec/pull/2403) ([jerryaldrichiii](https://github.com/jerryaldrichiii)) <!-- 1.48.4 -->
25
+ - Fix Docker build in the Expeditor pipeline [#2432](https://github.com/chef/inspec/pull/2432) ([adamleff](https://github.com/adamleff)) <!-- 1.48.11 -->
26
+ - Fix `x509_certificate` integration tests [#2431](https://github.com/chef/inspec/pull/2431) ([jerryaldrichiii](https://github.com/jerryaldrichiii)) <!-- 1.48.10 -->
27
+ - Fix OWCA detection for `compliance login` [#2401](https://github.com/chef/inspec/pull/2401) ([jerryaldrichiii](https://github.com/jerryaldrichiii)) <!-- 1.48.7 -->
28
+ - default attributes for nil and false [#2410](https://github.com/chef/inspec/pull/2410) ([arlimus](https://github.com/arlimus)) <!-- 1.48.5 -->
29
+ - package resource: Enhance resource error handling [#2388](https://github.com/chef/inspec/pull/2388) ([jerryaldrichiii](https://github.com/jerryaldrichiii)) <!-- 1.48.3 -->
22
30
 
23
31
  #### Merged Pull Requests
24
- - Fix changelog categories, bump minor version for release [#2381](https://github.com/chef/inspec/pull/2381) ([adamleff](https://github.com/adamleff)) <!-- 1.48.0 -->
25
- - Fix inspec appveyor test with the new local train transport [#2376](https://github.com/chef/inspec/pull/2376) ([jquick](https://github.com/jquick)) <!-- 1.47.4 -->
26
- - Update command resource to check for mock backend [#2353](https://github.com/chef/inspec/pull/2353) ([jquick](https://github.com/jquick)) <!-- 1.47.3 -->
32
+ - Bump minor version and cleanup changelog for release [#2440](https://github.com/chef/inspec/pull/2440) ([adamleff](https://github.com/adamleff)) <!-- 1.49.0 -->
33
+ - Split unit tests from functional [#2391](https://github.com/chef/inspec/pull/2391) ([adamleff](https://github.com/adamleff)) <!-- 1.48.2 -->
27
34
  <!-- release_rollup -->
28
35
 
29
36
  <!-- latest_stable_release -->
37
+ ## [v1.48.0](https://github.com/chef/inspec/tree/v1.48.0) (2017-12-07)
38
+
39
+ #### Enhancements
40
+ - Update default cli options to be uniq per command type [#2378](https://github.com/chef/inspec/pull/2378) ([jquick](https://github.com/jquick))
41
+ - Allow crontab resource to read crontab at user specified paths. [#2328](https://github.com/chef/inspec/pull/2328) ([miah](https://github.com/miah))
42
+
43
+ #### Bug Fixes
44
+ - Update rspec cli control summary to not uniq fails/skips [#2362](https://github.com/chef/inspec/pull/2362) ([jquick](https://github.com/jquick))
45
+ - Resolve merge issue with json-config vs thor defaults [#2377](https://github.com/chef/inspec/pull/2377) ([jquick](https://github.com/jquick))
46
+ - Remove rainbow dependency, fix duplicate rake gem [#2374](https://github.com/chef/inspec/pull/2374) ([adamleff](https://github.com/adamleff))
47
+ - Allow `inspec check` to ignore `only_if` [#2250](https://github.com/chef/inspec/pull/2250) ([jerryaldrichiii](https://github.com/jerryaldrichiii))
48
+
49
+ #### Merged Pull Requests
50
+ - Update command resource to check for mock backend [#2353](https://github.com/chef/inspec/pull/2353) ([jquick](https://github.com/jquick))
51
+ - Fix inspec appveyor test with the new local train transport [#2376](https://github.com/chef/inspec/pull/2376) ([jquick](https://github.com/jquick))
52
+ - Fix changelog categories, bump minor version for release [#2381](https://github.com/chef/inspec/pull/2381) ([adamleff](https://github.com/adamleff))
53
+ <!-- latest_stable_release -->
54
+
30
55
  ## [v1.47.0](https://github.com/chef/inspec/tree/v1.47.0) (2017-12-04)
31
56
 
32
57
  #### New Features
@@ -40,7 +65,6 @@
40
65
 
41
66
  #### Merged Pull Requests
42
67
  - docker_image resource: properly handle registries in image strings [#2356](https://github.com/chef/inspec/pull/2356) ([adamleff](https://github.com/adamleff))
43
- <!-- latest_stable_release -->
44
68
 
45
69
  ## [v1.46.2](https://github.com/chef/inspec/tree/v1.46.2) (2017-11-29)
46
70
 
data/Rakefile CHANGED
@@ -68,7 +68,7 @@ namespace :test do
68
68
  task :integration do
69
69
  concurrency = ENV['CONCURRENCY'] || 1
70
70
  os = ENV['OS'] || ''
71
- sh('sh', '-c', "bundle exec kitchen test -c #{concurrency} #{os}")
71
+ sh("bundle exec kitchen test -c #{concurrency} #{os}")
72
72
  end
73
73
 
74
74
  task :ssh, [:target] do |_t, args|
@@ -37,7 +37,7 @@ The following examples show how to use this InSpec audit resource.
37
37
  ### Test parameters for bond0
38
38
 
39
39
  describe bond('bond0') do
40
- its('Bonding Mode') { should eq 'IEEE 802.3ad Dynamic link aggregation' }
40
+ its('mode') { should eq 'IEEE 802.3ad Dynamic link aggregation' }
41
41
  its('Transmit Hash Policy') { should eq 'layer3+4 (1)' }
42
42
  its('MII Status') { should eq 'up' }
43
43
  its('MII Polling Interval (ms)') { should eq '100' }
@@ -75,6 +75,11 @@ The `interfaces` matcher tests if the named secondary interfaces are available:
75
75
 
76
76
  its('interfaces') { should eq ['eth0', 'eth1', ...] }
77
77
 
78
+ ### mode
79
+ The `mode` matcher tests the Bonding Mode:
80
+
81
+ its('mode') { should eq 'IEEE 802.3ad Dynamic link aggregation' }
82
+
78
83
  ### params
79
84
 
80
85
  The `params` matcher tests arbitrary parameters for the bonded network interface:
@@ -13,14 +13,14 @@ Use the `mysql_session` InSpec audit resource to test SQL commands run against a
13
13
  A `mysql_session` resource block declares the username and password to use for the session, and then the command to be run:
14
14
 
15
15
  describe mysql_session('username', 'password').query('QUERY') do
16
- its('output') { should eq('') }
16
+ its('stdout') { should match(/expected-result/) }
17
17
  end
18
18
 
19
19
  where
20
20
 
21
- * `mysql_session` declares a username and password with permission to run the query
21
+ * `mysql_session` declares a username and password, connecting locally, with permission to run the query
22
22
  * `query('QUERY')` contains the query to be run
23
- * `its('output') { should eq('') }` compares the results of the query against the expected result in the test
23
+ * `its('stdout') { should eq(/expected-result/) }` compares the results of the query against the expected result in the test
24
24
 
25
25
  <br>
26
26
 
@@ -38,24 +38,36 @@ The following examples show how to use this InSpec audit resource.
38
38
 
39
39
  ### Alternate Connection: Different Host
40
40
 
41
- sql = mysql_session('my_user','password','db.example.com')
41
+ sql = mysql_session('my_user','password','db.example.com')
42
42
 
43
43
  ### Alternate Connection: Different Port
44
44
 
45
- sql = mysql_seesion('my_user','password','localhost',3307)
45
+ sql = mysql_session('my_user','password','localhost',3307)
46
46
 
47
47
  ### Alternate Connection: Using a socket
48
48
 
49
- sql = mysql_session('my_user','password', nil, nil, '/var/lib/mysql-default/mysqld.sock')
49
+ sql = mysql_session('my_user','password', nil, nil, '/var/lib/mysql-default/mysqld.sock')
50
50
 
51
- <br>
51
+ ### Test for a successful query
52
52
 
53
- ## Matchers
53
+ describe mysql_session('my_user','password').query('show tables in existing_database;') do
54
+ its('exit_status') { should eq(0) }
55
+ end
56
+
57
+ ### Test for a failing query
58
+
59
+ describe mysql_session('my_user','password').query('show tables in non_existent_database;') do
60
+ its('exit_status') { should_not eq(0) }
61
+ end
54
62
 
55
- This InSpec audit resource has the following matchers. For a full list of available matchers please visit our [matchers page](https://www.inspec.io/docs/reference/matchers/).
63
+ ### Test for specific error message
56
64
 
57
- ### output
65
+ describe mysql_session('my_user','password').query('show tables in non_existent_database;') do
66
+ its('stderr') { should match(/Unknown database/) }
67
+ end
58
68
 
59
- The `output` matcher tests the results of the query:
69
+ <br>
70
+
71
+ ## Matchers
60
72
 
61
- its('output') { should eq(/^0/) }
73
+ This InSpec audit resource builds a [command](https://www.inspec.io/docs/reference/resources/command) object and returns the the result object. For a full list of available matchers please visit our [matchers page](https://www.inspec.io/docs/reference/matchers/).
@@ -59,7 +59,7 @@ The following examples show how to use this InSpec audit resource.
59
59
  its('count') { should eq 1 }
60
60
  end
61
61
 
62
- describe passwd.filter(user: 'www-data') do
62
+ describe passwd.where { user == 'www-data' } do
63
63
  its('uids') { should cmp 33 }
64
64
  its('count') { should eq 1 }
65
65
  end
@@ -28,7 +28,7 @@ This file can be queried using:
28
28
  describe xml('/path/to/name.xml') do
29
29
  its('root/name') { should eq ['hello'] }
30
30
  its('root/meta/creator') { should eq ['John Doe'] }
31
- its('root/array[2]/element]) { should eq ['two'] }
31
+ its('root/array[2]/element') { should eq ['two'] }
32
32
  end
33
33
 
34
34
  where
@@ -38,6 +38,10 @@ where
38
38
 
39
39
  <br>
40
40
 
41
+ In the event the path contains an element which contains periods, the alternate syntax can be used:
42
+
43
+ its(['root/name.with.a.period']) { should cmp 'so_many_dots' }
44
+
41
45
  ## Examples
42
46
 
43
47
  The following examples show how to use this InSpec audit resource.
@@ -45,7 +49,8 @@ The following examples show how to use this InSpec audit resource.
45
49
  ### Test an AppPool's presence in an applicationHost.config file
46
50
 
47
51
  describe xml('applicationHost.config') do
48
- its('configuration/system.applicationHost/applicationPools/add@name') { should contain('my_pool') }
52
+ # using the alternate syntax as described above because of the . in the key name
53
+ its(['configuration/system.applicationHost/applicationPools/add@name']) { should contain('my_pool') }
49
54
  end
50
55
 
51
56
  <br>
@@ -40,6 +40,28 @@ $ inspec shell -t winrm://UserName:Password@windowsmachine:1234 # Login to wind
40
40
  $ inspec shell -t docker://container_id # Login to a docker container.
41
41
  ```
42
42
 
43
+ ## Resource packs
44
+
45
+ The InSpec shell may use additional keywords provided in resource packs.
46
+ A resource pack is a profile that defines new language terms that can
47
+ be used in InSpec. For example, the profile in `examples/profile` in
48
+ the InSpec git repo defines a `gordon_config` resource. To use these
49
+ resources with the InSpec shell, you will need to download and specify
50
+ them as a dependency.
51
+
52
+ To use the `gordon_config` resource that is provided in the `examples/profile`
53
+ in the InSpec repo you can run the following:
54
+
55
+ ```bash
56
+ inspec shell --depends examples/profile
57
+ ```
58
+
59
+ Once inside the shell your resource will be available:
60
+
61
+ ```ruby
62
+ inspec> gordon_config
63
+ ```
64
+
43
65
  ## Using Ruby in InSpec shell
44
66
 
45
67
  Since InSpec shell is pry based, you may treat the shell as an
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
 
27
27
  spec.required_ruby_version = '>= 2.3'
28
28
 
29
- spec.add_dependency 'train', '~> 0.31', '>= 0.31.1'
29
+ spec.add_dependency 'train', '~> 0.32'
30
30
  spec.add_dependency 'thor', '~> 0.19'
31
31
  spec.add_dependency 'json', '>= 1.8', '< 3.0'
32
32
  spec.add_dependency 'method_source', '~> 0.8'
@@ -90,8 +90,6 @@ module Artifact
90
90
 
91
91
  SIGNED_PROFILE_SUFFIX='iaf'
92
92
  SIGNED_REPORT_SUFFIX='iar'
93
-
94
- # rubocop:disable Metrics/ClassLength
95
93
  class CLI < Inspec::BaseCLI
96
94
  namespace 'artifact'
97
95
 
@@ -12,7 +12,7 @@ module Compliance
12
12
 
13
13
  # API Implementation does not hold any state by itself,
14
14
  # everything will be stored in local Configuration store
15
- class API # rubocop:disable Metrics/ClassLength
15
+ class API
16
16
  extend Compliance::API::Login
17
17
 
18
18
  # return all compliance profiles available for the user
@@ -251,11 +251,66 @@ module Compliance
251
251
  end
252
252
 
253
253
  def self.determine_server_type(url, insecure)
254
- if Compliance::HTTP.get(url + '/compliance/version', nil, insecure).code == '401'
254
+ if target_is_automate_server?(url, insecure)
255
255
  :automate
256
- elsif Compliance::HTTP.get(url + '/api/version', nil, insecure).code == '200'
256
+ elsif target_is_compliance_server?(url, insecure)
257
257
  :compliance
258
+ else
259
+ Inspec::Log.debug('Could not determine server type using known endpoints')
260
+ nil
261
+ end
262
+ end
263
+
264
+ def self.target_is_automate_server?(url, insecure)
265
+ automate_endpoint = '/compliance/version'
266
+ response = Compliance::HTTP.get(url + automate_endpoint, nil, insecure)
267
+ case response.code
268
+ when '401'
269
+ Inspec::Log.debug(
270
+ "Received 401 from #{url}#{automate_endpoint} - " \
271
+ 'assuming target is a Chef Automate instance',
272
+ )
273
+ true
274
+ when '200'
275
+ # Chef Automate currently returns 401 for `/compliance/version` but some
276
+ # versions of OpsWorks Chef Automate return 200 and a Chef Manage page
277
+ # when unauthenticated requests are received.
278
+ if response.body.include?('Are You Looking For the Chef Server?')
279
+ Inspec::Log.debug(
280
+ "Received 200 from #{url}#{automate_endpoint} - " \
281
+ 'assuming target is an OpsWorks Chef Automate instance',
282
+ )
283
+ true
284
+ else
285
+ Inspec::Log.debug(
286
+ "Received 200 from #{url}#{automate_endpoint} " \
287
+ 'but did not receive the Chef Manage page - ' \
288
+ 'assuming target is not a Chef Automate instance',
289
+ )
290
+ false
291
+ end
292
+ else
293
+ Inspec::Log.debug(
294
+ "Received unexpected status code #{response.code} " \
295
+ "from #{url}#{automate_endpoint} - " \
296
+ 'assuming target is not a Chef Automate instance',
297
+ )
298
+ false
258
299
  end
259
300
  end
301
+
302
+ def self.target_is_compliance_server?(url, insecure)
303
+ # All versions of Chef Compliance return 200 for `/api/version`
304
+ compliance_endpoint = '/api/version'
305
+
306
+ response = Compliance::HTTP.get(url + compliance_endpoint, nil, insecure)
307
+ return false unless response.code == '200'
308
+
309
+ Inspec::Log.debug(
310
+ "Received 200 from #{url}#{compliance_endpoint} - " \
311
+ 'assuming target is a Compliance server',
312
+ )
313
+ true
314
+ end
260
315
  end
261
316
  end
@@ -6,7 +6,7 @@ require 'thor'
6
6
  require 'erb'
7
7
 
8
8
  module Compliance
9
- class ComplianceCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
9
+ class ComplianceCLI < Inspec::BaseCLI
10
10
  namespace 'compliance'
11
11
 
12
12
  # TODO: find another solution, once https://github.com/erikhuda/thor/issues/261 is fixed
@@ -6,7 +6,7 @@ require 'mixlib/shellout'
6
6
  require 'tomlrb'
7
7
 
8
8
  module Habitat
9
- class Profile # rubocop:disable Metrics/ClassLength
9
+ class Profile
10
10
  attr_reader :options, :path, :profile
11
11
 
12
12
  def self.create(path, options = {})
@@ -8,7 +8,7 @@ require 'tempfile'
8
8
  require 'open-uri'
9
9
 
10
10
  module Fetchers
11
- class Url < Inspec.fetcher(1) # rubocop:disable Metrics/ClassLength
11
+ class Url < Inspec.fetcher(1)
12
12
  MIME_TYPES = {
13
13
  'application/x-zip-compressed' => '.zip',
14
14
  'application/zip' => '.zip',
@@ -7,7 +7,7 @@ require 'inspec/log'
7
7
  require 'inspec/profile_vendor'
8
8
 
9
9
  module Inspec
10
- class BaseCLI < Thor # rubocop:disable Metrics/ClassLength
10
+ class BaseCLI < Thor
11
11
  def self.target_options
12
12
  option :target, aliases: :t, type: :string,
13
13
  desc: 'Simple targeting option using URIs, e.g. ssh://user:pass@host:port'
@@ -64,6 +64,8 @@ module Inspec
64
64
  option :attrs, type: :array,
65
65
  desc: 'Load attributes file (experimental)'
66
66
  option :cache, type: :string,
67
+ desc: '[DEPRECATED] Please use --vendor-cache - this will be removed in InSpec 2.0'
68
+ option :vendor_cache, type: :string,
67
69
  desc: 'Use the given path for caching dependencies. (default: ~/.inspec/cache)'
68
70
  option :create_lockfile, type: :boolean,
69
71
  desc: 'Write out a lockfile based on this execution (unless one already exists)'
@@ -15,7 +15,7 @@ require 'inspec/runner_mock'
15
15
  require 'inspec/env_printer'
16
16
  require 'inspec/schema'
17
17
 
18
- class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
18
+ class Inspec::InspecCLI < Inspec::BaseCLI
19
19
  class_option :log_level, aliases: :l, type: :string,
20
20
  desc: 'Set the log level: info (default), debug, warn, error'
21
21
 
@@ -36,6 +36,7 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
36
36
  o = opts.dup
37
37
  o[:ignore_supports] = true
38
38
  o[:backend] = Inspec::Backend.create(target: 'mock://')
39
+ o[:check_mode] = true
39
40
 
40
41
  profile = Inspec::Profile.for_target(target, o)
41
42
  dst = o[:output].to_s
@@ -155,6 +156,13 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
155
156
  o = opts(:exec).dup
156
157
  configure_logger(o)
157
158
 
159
+ # check for deprecated --cache
160
+ # TODO: REMOVE for inspec 2.0
161
+ if o.key?('cache')
162
+ o[:vendor_cache] = o[:cache]
163
+ o[:logger].warn '[DEPRECATED] The use of `--cache` is being deprecated in InSpec 2.0. Please use `--vendor-cache` instead.'
164
+ end
165
+
158
166
  # run tests
159
167
  run_tests(targets, o)
160
168
  rescue StandardError => e
@@ -187,6 +195,8 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
187
195
  desc: 'A single command string to run instead of launching the shell'
188
196
  option :format, type: :string, default: nil, hide: true,
189
197
  desc: 'Which formatter to use: cli, documentation, html, json, json-min, junit, progress'
198
+ option :depends, type: :array, default: [],
199
+ desc: 'A space-delimited list of local folders containing profiles whose libraries and resources will be loaded into the new shell'
190
200
  def shell_func
191
201
  diagnose
192
202
  o = opts.dup