inspec 2.2.112 → 2.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +8 -2
  3. data/CHANGELOG.md +42 -19
  4. data/README.md +1 -1
  5. data/Rakefile +16 -3
  6. data/docs/dev/integration-testing.md +31 -0
  7. data/docs/dev/plugins.md +4 -2
  8. data/docs/dsl_inspec.md +104 -4
  9. data/docs/plugins.md +57 -0
  10. data/docs/resources/aws_ebs_volume.md.erb +76 -0
  11. data/docs/resources/aws_ebs_volumes.md.erb +86 -0
  12. data/docs/style.md +178 -0
  13. data/examples/plugins/inspec-resource-lister/Gemfile +12 -0
  14. data/examples/plugins/inspec-resource-lister/LICENSE +13 -0
  15. data/examples/plugins/inspec-resource-lister/README.md +62 -0
  16. data/examples/plugins/inspec-resource-lister/Rakefile +40 -0
  17. data/examples/plugins/inspec-resource-lister/inspec-resource-lister.gemspec +45 -0
  18. data/examples/plugins/inspec-resource-lister/lib/inspec-resource-lister.rb +16 -0
  19. data/examples/plugins/inspec-resource-lister/lib/inspec-resource-lister/cli_command.rb +70 -0
  20. data/examples/plugins/inspec-resource-lister/lib/inspec-resource-lister/plugin.rb +55 -0
  21. data/examples/plugins/inspec-resource-lister/lib/inspec-resource-lister/version.rb +10 -0
  22. data/examples/plugins/inspec-resource-lister/test/fixtures/README.md +24 -0
  23. data/examples/plugins/inspec-resource-lister/test/functional/README.md +18 -0
  24. data/examples/plugins/inspec-resource-lister/test/functional/inspec_resource_lister_test.rb +110 -0
  25. data/examples/plugins/inspec-resource-lister/test/helper.rb +26 -0
  26. data/examples/plugins/inspec-resource-lister/test/unit/README.md +17 -0
  27. data/examples/plugins/inspec-resource-lister/test/unit/cli_args_test.rb +64 -0
  28. data/examples/plugins/inspec-resource-lister/test/unit/plugin_def_test.rb +51 -0
  29. data/examples/profile/controls/example.rb +9 -8
  30. data/inspec.gemspec +2 -1
  31. data/lib/inspec/attribute_registry.rb +1 -1
  32. data/lib/inspec/globals.rb +4 -0
  33. data/lib/inspec/objects/control.rb +18 -3
  34. data/lib/inspec/plugin/v2.rb +14 -3
  35. data/lib/inspec/plugin/v2/activator.rb +7 -2
  36. data/lib/inspec/plugin/v2/installer.rb +426 -0
  37. data/lib/inspec/plugin/v2/loader.rb +137 -30
  38. data/lib/inspec/plugin/v2/registry.rb +13 -4
  39. data/lib/inspec/profile.rb +2 -1
  40. data/lib/inspec/reporters/json.rb +11 -1
  41. data/lib/inspec/resource.rb +6 -15
  42. data/lib/inspec/rule.rb +18 -9
  43. data/lib/inspec/runner_rspec.rb +1 -1
  44. data/lib/inspec/schema.rb +1 -0
  45. data/lib/inspec/version.rb +1 -1
  46. data/lib/plugins/inspec-plugin-manager-cli/README.md +6 -0
  47. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli.rb +18 -0
  48. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb +420 -0
  49. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/plugin.rb +12 -0
  50. data/lib/plugins/inspec-plugin-manager-cli/test/fixtures/config_dirs/empty/.gitkeep +0 -0
  51. data/lib/plugins/inspec-plugin-manager-cli/test/fixtures/plugins/inspec-egg-white-omelette/lib/inspec-egg-white-omelette.rb +2 -0
  52. data/lib/plugins/inspec-plugin-manager-cli/test/fixtures/plugins/inspec-egg-white-omelette/lib/inspec-egg-white-omelette/.gitkeep +0 -0
  53. data/lib/plugins/inspec-plugin-manager-cli/test/fixtures/plugins/inspec-wrong-structure/.gitkeep +0 -0
  54. data/lib/plugins/inspec-plugin-manager-cli/test/fixtures/plugins/wrong-name/lib/wrong-name.rb +1 -0
  55. data/lib/plugins/inspec-plugin-manager-cli/test/fixtures/plugins/wrong-name/lib/wrong-name/.gitkeep +0 -0
  56. data/lib/plugins/inspec-plugin-manager-cli/test/functional/inspec-plugin_test.rb +651 -0
  57. data/lib/plugins/inspec-plugin-manager-cli/test/unit/cli_args_test.rb +71 -0
  58. data/lib/plugins/inspec-plugin-manager-cli/test/unit/plugin_def_test.rb +20 -0
  59. data/lib/plugins/shared/core_plugin_test_helper.rb +101 -2
  60. data/lib/plugins/things-for-train-integration.rb +14 -0
  61. data/lib/resource_support/aws.rb +2 -0
  62. data/lib/resources/aws/aws_ebs_volume.rb +122 -0
  63. data/lib/resources/aws/aws_ebs_volumes.rb +63 -0
  64. data/lib/resources/port.rb +10 -6
  65. metadata +56 -11
  66. data/docs/ruby_usage.md +0 -204
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: 2.2.112
4
+ version: 2.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Richter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-19 00:00:00.000000000 Z
11
+ date: 2018-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: train
@@ -16,20 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.4'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 1.4.37
19
+ version: '1.5'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '1.4'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 1.4.37
26
+ version: '1.5'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: thor
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -308,6 +302,20 @@ dependencies:
308
302
  - - ">="
309
303
  - !ruby/object:Gem::Version
310
304
  version: '0'
305
+ - !ruby/object:Gem::Dependency
306
+ name: term-ansicolor
307
+ requirement: !ruby/object:Gem::Requirement
308
+ requirements:
309
+ - - ">="
310
+ - !ruby/object:Gem::Version
311
+ version: '0'
312
+ type: :runtime
313
+ prerelease: false
314
+ version_requirements: !ruby/object:Gem::Requirement
315
+ requirements:
316
+ - - ">="
317
+ - !ruby/object:Gem::Version
318
+ version: '0'
311
319
  description: InSpec provides a framework for creating end-to-end infrastructure tests.
312
320
  You can use it for integration or even compliance testing. Create fully portable
313
321
  test profiles and use them in your workflow to ensure stability and security. Integrate
@@ -333,6 +341,7 @@ files:
333
341
  - docs/dev/control-eval.md
334
342
  - docs/dev/filtertable-internals.md
335
343
  - docs/dev/filtertable-usage.md
344
+ - docs/dev/integration-testing.md
336
345
  - docs/dev/plugins.md
337
346
  - docs/dsl_inspec.md
338
347
  - docs/dsl_resource.md
@@ -343,6 +352,7 @@ files:
343
352
  - docs/migration.md
344
353
  - docs/platforms.md
345
354
  - docs/plugin_kitchen_inspec.md
355
+ - docs/plugins.md
346
356
  - docs/profiles.md
347
357
  - docs/reporters.md
348
358
  - docs/resources/aide_conf.md.erb
@@ -358,6 +368,8 @@ files:
358
368
  - docs/resources/aws_cloudwatch_log_metric_filter.md.erb
359
369
  - docs/resources/aws_config_delivery_channel.md.erb
360
370
  - docs/resources/aws_config_recorder.md.erb
371
+ - docs/resources/aws_ebs_volume.md.erb
372
+ - docs/resources/aws_ebs_volumes.md.erb
361
373
  - docs/resources/aws_ec2_instance.md.erb
362
374
  - docs/resources/aws_ec2_instances.md.erb
363
375
  - docs/resources/aws_elb.md.erb
@@ -492,13 +504,13 @@ files:
492
504
  - docs/resources/yum.md.erb
493
505
  - docs/resources/zfs_dataset.md.erb
494
506
  - docs/resources/zfs_pool.md.erb
495
- - docs/ruby_usage.md
496
507
  - docs/shared/matcher_be.md.erb
497
508
  - docs/shared/matcher_cmp.md.erb
498
509
  - docs/shared/matcher_eq.md.erb
499
510
  - docs/shared/matcher_include.md.erb
500
511
  - docs/shared/matcher_match.md.erb
501
512
  - docs/shell.md
513
+ - docs/style.md
502
514
  - examples/README.md
503
515
  - examples/custom-resource/README.md
504
516
  - examples/custom-resource/controls/example.rb
@@ -534,6 +546,22 @@ files:
534
546
  - examples/meta-profile/README.md
535
547
  - examples/meta-profile/controls/example.rb
536
548
  - examples/meta-profile/inspec.yml
549
+ - examples/plugins/inspec-resource-lister/Gemfile
550
+ - examples/plugins/inspec-resource-lister/LICENSE
551
+ - examples/plugins/inspec-resource-lister/README.md
552
+ - examples/plugins/inspec-resource-lister/Rakefile
553
+ - examples/plugins/inspec-resource-lister/inspec-resource-lister.gemspec
554
+ - examples/plugins/inspec-resource-lister/lib/inspec-resource-lister.rb
555
+ - examples/plugins/inspec-resource-lister/lib/inspec-resource-lister/cli_command.rb
556
+ - examples/plugins/inspec-resource-lister/lib/inspec-resource-lister/plugin.rb
557
+ - examples/plugins/inspec-resource-lister/lib/inspec-resource-lister/version.rb
558
+ - examples/plugins/inspec-resource-lister/test/fixtures/README.md
559
+ - examples/plugins/inspec-resource-lister/test/functional/README.md
560
+ - examples/plugins/inspec-resource-lister/test/functional/inspec_resource_lister_test.rb
561
+ - examples/plugins/inspec-resource-lister/test/helper.rb
562
+ - examples/plugins/inspec-resource-lister/test/unit/README.md
563
+ - examples/plugins/inspec-resource-lister/test/unit/cli_args_test.rb
564
+ - examples/plugins/inspec-resource-lister/test/unit/plugin_def_test.rb
537
565
  - examples/profile-attribute.yml
538
566
  - examples/profile-attribute/README.md
539
567
  - examples/profile-attribute/controls/example.rb
@@ -638,6 +666,7 @@ files:
638
666
  - lib/inspec/plugin/v1/registry.rb
639
667
  - lib/inspec/plugin/v2.rb
640
668
  - lib/inspec/plugin/v2/activator.rb
669
+ - lib/inspec/plugin/v2/installer.rb
641
670
  - lib/inspec/plugin/v2/loader.rb
642
671
  - lib/inspec/plugin/v2/plugin_base.rb
643
672
  - lib/inspec/plugin/v2/plugin_types/cli.rb
@@ -691,7 +720,21 @@ files:
691
720
  - lib/plugins/inspec-init/lib/inspec-init/templates/profile/inspec.yml
692
721
  - lib/plugins/inspec-init/lib/inspec-init/templates/profile/libraries/.gitkeep
693
722
  - lib/plugins/inspec-init/test/functional/inspec_init_test.rb
723
+ - lib/plugins/inspec-plugin-manager-cli/README.md
724
+ - lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli.rb
725
+ - lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb
726
+ - lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/plugin.rb
727
+ - lib/plugins/inspec-plugin-manager-cli/test/fixtures/config_dirs/empty/.gitkeep
728
+ - lib/plugins/inspec-plugin-manager-cli/test/fixtures/plugins/inspec-egg-white-omelette/lib/inspec-egg-white-omelette.rb
729
+ - lib/plugins/inspec-plugin-manager-cli/test/fixtures/plugins/inspec-egg-white-omelette/lib/inspec-egg-white-omelette/.gitkeep
730
+ - lib/plugins/inspec-plugin-manager-cli/test/fixtures/plugins/inspec-wrong-structure/.gitkeep
731
+ - lib/plugins/inspec-plugin-manager-cli/test/fixtures/plugins/wrong-name/lib/wrong-name.rb
732
+ - lib/plugins/inspec-plugin-manager-cli/test/fixtures/plugins/wrong-name/lib/wrong-name/.gitkeep
733
+ - lib/plugins/inspec-plugin-manager-cli/test/functional/inspec-plugin_test.rb
734
+ - lib/plugins/inspec-plugin-manager-cli/test/unit/cli_args_test.rb
735
+ - lib/plugins/inspec-plugin-manager-cli/test/unit/plugin_def_test.rb
694
736
  - lib/plugins/shared/core_plugin_test_helper.rb
737
+ - lib/plugins/things-for-train-integration.rb
695
738
  - lib/resource_support/aws.rb
696
739
  - lib/resource_support/aws/aws_backend_base.rb
697
740
  - lib/resource_support/aws/aws_backend_factory_mixin.rb
@@ -711,6 +754,8 @@ files:
711
754
  - lib/resources/aws/aws_cloudwatch_log_metric_filter.rb
712
755
  - lib/resources/aws/aws_config_delivery_channel.rb
713
756
  - lib/resources/aws/aws_config_recorder.rb
757
+ - lib/resources/aws/aws_ebs_volume.rb
758
+ - lib/resources/aws/aws_ebs_volumes.rb
714
759
  - lib/resources/aws/aws_ec2_instance.rb
715
760
  - lib/resources/aws/aws_ec2_instances.rb
716
761
  - lib/resources/aws/aws_ecs_cluster.rb
data/docs/ruby_usage.md DELETED
@@ -1,204 +0,0 @@
1
- # Using Ruby in InSpec
2
-
3
- The InSpec DSL is a Ruby based DSL for writing audit controls, which
4
- includes audit resources that you can invoke. Core and custom resources
5
- are written as regular Ruby classes which inherit from
6
- `Inspec.resource`.
7
-
8
- Assuming we have a JSON file like this on the node to be tested:
9
-
10
- ```json
11
- {
12
- "keys":[
13
- {"username":"john", "key":"/opt/keys/johnd.key"},
14
- {"username":"jane", "key":"/opt/keys/janed.key"},
15
- {"username":"sunny ", "key":"/opt/keys/sunnym.key"}
16
- ]
17
- }
18
- ```
19
-
20
- The following example shows how you can use pure Ruby code(variables,
21
- loops, conditionals, regular expressions, etc) to run a few tests
22
- against the above JSON file:
23
-
24
- ```ruby
25
- control 'check-interns' do
26
- # use the json InSpec resource to get the file
27
- json_obj = json('/opt/keys/interns.json')
28
- describe json_obj do
29
- its('keys') { should_not eq nil }
30
- end
31
- if json_obj['keys']
32
- # loop over the keys array
33
- json_obj['keys'].each do |intern|
34
- username = intern['username'].strip
35
- # check for white spaces chars in usernames
36
- describe username do
37
- it { should_not match(/\s/) }
38
- end
39
- # check key file owners and permissions
40
- describe file(intern['key']) do
41
- it { should be_owned_by username }
42
- its('mode') { should cmp '0600' }
43
- end
44
- end
45
- end
46
- end
47
- ```
48
-
49
- ## Execution
50
-
51
- It's important to understand that Ruby code used in custom resources and
52
- controls DSL is executed on the system that runs InSpec. This allows
53
- InSpec to work without Ruby and rubygems being required on remote
54
- targets(servers or containers).
55
-
56
- For example, using `` `ls ``\` or `system('ls')` will result in the `ls`
57
- command being run locally and not on the target(remote) system. In order
58
- to process the output of `ls` executed on the target system, use
59
- `inspec.command('ls')` or `inspec.powershell('ls')`
60
-
61
- Similarly, use `inspec.file(PATH)` to access files or directories from
62
- remote systems in your tests or custom resources.
63
-
64
- ## Using rubygems
65
-
66
- Ruby gems are self-contained programs and libraries. If you create a custom
67
- resource please vendor gems into the library. This ensures that all resources
68
- are self-contained and complete and don't need any resolution at runtime. We
69
- vendor resources and requirements through dependency resolution, which is
70
- independent of programming languages and their resolver mechanisms.
71
-
72
- ## Interactive Debugging with Pry
73
-
74
- Here's a sample InSpec control that users Ruby variables to instantiate
75
- an InSpec resource once and use the content in multiple tests.
76
-
77
- ```ruby
78
- control 'check-perl' do
79
- impact 0.3
80
- title 'Check perl compiled options and permissions'
81
- perl_out = command('perl -V')
82
- #require 'pry'; binding.pry;
83
- describe perl_out do
84
- its('exit_status') { should eq 0 }
85
- its('stdout') { should match (/USE_64_BIT_ALL/) }
86
- its('stdout') { should match (/useposix=true/) }
87
- its('stdout') { should match (/-fstack-protector/) }
88
- end
89
-
90
- # extract an array of include directories
91
- perl_inc = perl_out.stdout.partition('@INC:').last.strip.split("\n")
92
- # ensure include directories are only writable by 'owner'
93
- perl_inc.each do |path|
94
- describe directory(path.strip) do
95
- it { should_not be_writable.by('group') }
96
- it { should_not be_writable.by('other') }
97
- end
98
- end
99
- end
100
- ```
101
-
102
- An **advanced** but very useful Ruby tip. In the previous example, I
103
- commented out the `require 'pry'; binding.pry;` line. If you remove the
104
- `#` prefix and run the control, the execution will stop at that line and
105
- give you a `pry` shell. Use that to troubleshoot, print variables, see
106
- methods available, etc. For the above example:
107
-
108
- ```ruby
109
- [1] pry> perl_out.exit_status
110
- => 0
111
- [2] pry> perl_out.stderr
112
- => ""
113
- [3] pry> ls perl_out
114
- Inspec::Plugins::Resource#methods: inspect
115
- Inspec::Resources::Cmd#methods: command exist? exit_status result stderr stdout to_s
116
- Inspec::Resource::Registry::Command#methods: inspec
117
- instance variables: @__backend_runner__ @__resource_name__ @command @result
118
- [4] pry> perl_out.stdout.partition('@INC:').last.strip.split("\n")
119
- => ["/Library/Perl/5.18/darwin-thread-multi-2level",
120
- " /Library/Perl/5.18",
121
- ...REDACTED...
122
- [5] pry> exit # or abort
123
- ```
124
-
125
- You can use `pry` inside both the controls DSL and resources. Similarly,
126
- for dev and test, you can use `inspec shell` which is based on `pry`,
127
- for example:
128
-
129
- ```ruby
130
- $ inspec shell
131
- Welcome to the interactive InSpec Shell
132
- To find out how to use it, type: help
133
-
134
- inspec> command('ls /home/gordon/git/inspec/docs').stdout
135
- => "ctl_inspec.rst\ndsl_inspec.rst\ndsl_resource.rst\n"
136
- inspec> command('ls').stdout.split("\n")
137
- => ["ctl_inspec.rst", "dsl_inspec.rst", "dsl_resource.rst"]
138
-
139
- inspec> help command
140
- Name: command
141
-
142
- Description:
143
- Use the command InSpec audit resource to test an arbitrary command that is run on the system.
144
-
145
- Example:
146
- describe command('ls -al /') do
147
- it { should exist }
148
- its('stdout') { should match /bin/ }
149
- its('stderr') { should eq '' }
150
- its('exit_status') { should eq 0 }
151
- end
152
- ```
153
-
154
- ## Shelling out in tests
155
-
156
- When writing tests you can not use standard ruby methods to shellout as it tries to execute those commands locally.
157
- However, the `command` resource has a `.stdout` method that will allow you to manipulate the results.
158
- Using the above example, you could check the writes on several subdirectories.
159
-
160
- ### Example 1
161
-
162
- ```ruby
163
- $ inspec shell
164
- Welcome to the interactive InSpec Shell
165
- To find out how to use it, type: help
166
-
167
- inspec> output=command('echo test').stdout
168
- => "test\n"
169
- inspec> describe command('echo test') do
170
- inspec> its('stdout') { should eq output }
171
- inspec> end
172
-
173
- Profile: inspec-shell
174
- Version: (not specified)
175
-
176
- Command echo
177
- ✔ test stdout should eq "test\n"
178
-
179
- Test Summary: 1 successful, 0 failures, 0 skipped
180
- ```
181
-
182
- ### Example 2
183
-
184
- ```ruby
185
- $ inspec shell
186
- Welcome to the interactive InSpec Shell
187
- To find out how to use it, type: help
188
-
189
- inspec> dirs = command('ls -d /home/gordon/git/inspec/docs').stdout.split("\n")
190
- => ["/home/gordon/git/inspec/docs"]
191
- inspec> dirs.each do |dir|
192
- inspec> describe directory(dir) do
193
- inspec> its('mode') { should cmp '0775' }
194
- inspec> end
195
- inspec> end
196
-
197
- Profile: inspec-shell
198
- Version: (not specified)
199
-
200
- File /home/gordon/git/inspec/docs/
201
- ✔ mode should cmp == "0775"
202
-
203
- Test Summary: 1 successful, 0 failures, 0 skipped
204
- ```