inspec 1.46.2 → 1.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 275cc93db905d4d442e1c7c897a197c0123e1671
4
- data.tar.gz: '097b235e017ce4fdde8e890a12e4221de4fd7330'
3
+ metadata.gz: 73d4de764766d6ce02f52597d9cdd3d3c5f962bf
4
+ data.tar.gz: 0aaec0745ed380804d6bd333711054eab7c505ea
5
5
  SHA512:
6
- metadata.gz: c4424e307b2c5d474cb040e4fa023f98c9507c764edd84684cb286bf21c36a83395f5cd2d8a4f1f87d14a271e7b0a6d281eabe140065dcdd012f3780f3d390d1
7
- data.tar.gz: 35a966232190612e93daac133334c5f7f2f5c705261d0155dc2758168c0f2b15865cfd52f47d635065a754f4b1f239216dd5c1574a4657024d0d92a008c6e0b4
6
+ metadata.gz: 93d630d3408a4c34b13504dbdc6cb07e0de5a672525db739bb7e54eff8d0971b09838ae5c14169362d3a98b58ae27af1feffb0e443733e5e92ce948786494f95
7
+ data.tar.gz: 49a27fd5dbe847483d31fa7d5ec357c91008596f47042d531c81c290b332b542d7caf90e56a9ae04c572b9d39cc913dda87565ec82a405aeef92e7c3d87df425
data/CHANGELOG.md CHANGED
@@ -1,28 +1,43 @@
1
1
  # Change Log
2
2
  <!-- usage documentation: http://expeditor-docs.es.chef.io/configuration/changelog/ -->
3
- <!-- latest_release 1.46.2 -->
4
- ## [v1.46.2](https://github.com/chef/inspec/tree/v1.46.2) (2017-11-29)
3
+ <!-- latest_release 1.47.0 -->
4
+ ## [v1.47.0](https://github.com/chef/inspec/tree/v1.47.0) (2017-12-04)
5
5
 
6
- #### Bug Fixes
7
- - Allow skipping/failing resources in FilterTable [#2349](https://github.com/chef/inspec/pull/2349) ([jerryaldrichiii](https://github.com/jerryaldrichiii))
6
+ #### New Features
7
+ - Enable caching for backend calls [#2309](https://github.com/chef/inspec/pull/2309) ([jquick](https://github.com/jquick))
8
8
  <!-- latest_release -->
9
9
 
10
- <!-- release_rollup since=1.45.13 -->
11
- ### Changes since 1.45.13 release
10
+ <!-- release_rollup since=1.46.2 -->
11
+ ### Changes since 1.46.2 release
12
12
 
13
- #### Enhancements
14
- - allow override of attribute identifier [#2347](https://github.com/chef/inspec/pull/2347) ([chris-rock](https://github.com/chris-rock)) <!-- 1.46.0 -->
13
+ #### New Features
14
+ - Enable caching for backend calls [#2309](https://github.com/chef/inspec/pull/2309) ([jquick](https://github.com/jquick)) <!-- 1.47.0 -->
15
+
16
+ #### Merged Pull Requests
17
+ - docker_image resource: properly handle registries in image strings [#2356](https://github.com/chef/inspec/pull/2356) ([adamleff](https://github.com/adamleff)) <!-- 1.46.5 -->
15
18
 
16
19
  #### Bug Fixes
17
- - Allow skipping/failing resources in FilterTable [#2349](https://github.com/chef/inspec/pull/2349) ([jerryaldrichiii](https://github.com/jerryaldrichiii)) <!-- 1.46.2 -->
18
- - wmi resource: properly escape quotes in WMI query [#2342](https://github.com/chef/inspec/pull/2342) ([TheLonelyGhost](https://github.com/TheLonelyGhost)) <!-- 1.46.1 -->
19
- - file resource: fix NilClass error when using advanced windows permissions [#2344](https://github.com/chef/inspec/pull/2344) ([TheLonelyGhost](https://github.com/TheLonelyGhost)) <!-- 1.45.17 -->
20
- - http resource: properly support HEAD request with remote worker [#2340](https://github.com/chef/inspec/pull/2340) ([adamleff](https://github.com/adamleff)) <!-- 1.45.16 -->
21
- - grub_conf resource: correct grub path for RHEL-7-based OS [#2332](https://github.com/chef/inspec/pull/2332) ([atomic111](https://github.com/atomic111)) <!-- 1.45.15 -->
22
- - json resource (et. al.): allow inspec check to succeed when using command [#2317](https://github.com/chef/inspec/pull/2317) ([adamleff](https://github.com/adamleff)) <!-- 1.45.14 -->
20
+ - security_policy resource: use PID for filename instead of random [#2368](https://github.com/chef/inspec/pull/2368) ([jquick](https://github.com/jquick)) <!-- 1.46.7 -->
21
+ - key_rsa resource: fix inline shell documentation help, wrong resource name used in examples [#2364](https://github.com/chef/inspec/pull/2364) ([eramoto](https://github.com/eramoto)) <!-- 1.46.6 -->
22
+ - json resource: ensure params is not nil in event of read/parse failure [#2354](https://github.com/chef/inspec/pull/2354) ([adamleff](https://github.com/adamleff)) <!-- 1.46.4 -->
23
+ - Unique export file for security policy resource [#2350](https://github.com/chef/inspec/pull/2350) ([jquick](https://github.com/jquick)) <!-- 1.46.3 -->
23
24
  <!-- release_rollup -->
24
25
 
25
26
  <!-- latest_stable_release -->
27
+ ## [v1.46.2](https://github.com/chef/inspec/tree/v1.46.2) (2017-11-29)
28
+
29
+ #### Enhancements
30
+ - allow override of attribute identifier [#2347](https://github.com/chef/inspec/pull/2347) ([chris-rock](https://github.com/chris-rock))
31
+
32
+ #### Bug Fixes
33
+ - json resource (et. al.): allow inspec check to succeed when using command [#2317](https://github.com/chef/inspec/pull/2317) ([adamleff](https://github.com/adamleff))
34
+ - grub_conf resource: correct grub path for RHEL-7-based OS [#2332](https://github.com/chef/inspec/pull/2332) ([atomic111](https://github.com/atomic111))
35
+ - http resource: properly support HEAD request with remote worker [#2340](https://github.com/chef/inspec/pull/2340) ([adamleff](https://github.com/adamleff))
36
+ - file resource: fix NilClass error when using advanced windows permissions [#2344](https://github.com/chef/inspec/pull/2344) ([TheLonelyGhost](https://github.com/TheLonelyGhost))
37
+ - wmi resource: properly escape quotes in WMI query [#2342](https://github.com/chef/inspec/pull/2342) ([TheLonelyGhost](https://github.com/TheLonelyGhost))
38
+ - Allow skipping/failing resources in FilterTable [#2349](https://github.com/chef/inspec/pull/2349) ([jerryaldrichiii](https://github.com/jerryaldrichiii))
39
+ <!-- latest_stable_release -->
40
+
26
41
  ## [v1.45.13](https://github.com/chef/inspec/tree/v1.45.13) (2017-11-21)
27
42
 
28
43
  #### Merged Pull Requests
@@ -30,7 +45,6 @@
30
45
  - Remove bundler install during Appveyor tests [#2322](https://github.com/chef/inspec/pull/2322) ([adamleff](https://github.com/adamleff))
31
46
  - Bump Rubocop to 0.49.1 [#2323](https://github.com/chef/inspec/pull/2323) ([adamleff](https://github.com/adamleff))
32
47
  - Bump train to 0.29.2 [#2327](https://github.com/chef/inspec/pull/2327) ([adamleff](https://github.com/adamleff))
33
- <!-- latest_stable_release -->
34
48
 
35
49
  ## [v1.45.9](https://github.com/chef/inspec/tree/v1.45.9) (2017-11-16)
36
50
 
data/docs/ruby_usage.md CHANGED
@@ -73,7 +73,7 @@ independent of programming languages and their resolver mechanisms.
73
73
  ## Interactive Debugging with Pry
74
74
 
75
75
  Here's a sample InSpec control that users Ruby variables to instantiate
76
- an InSpec resource once and use the content in multipLe tests.
76
+ an InSpec resource once and use the content in multiple tests.
77
77
 
78
78
  ```ruby
79
79
  control 'check-perl' do
data/inspec.gemspec CHANGED
@@ -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.29', '>= 0.29.2'
29
+ spec.add_dependency 'train', '~> 0.30'
30
30
  spec.add_dependency 'thor', '~> 0.19'
31
31
  spec.add_dependency 'json', '>= 1.8', '< 3.0'
32
32
  spec.add_dependency 'rainbow', '~> 2'
@@ -53,6 +53,18 @@ module Inspec
53
53
  raise "Can't connect to transport backend '#{name}'."
54
54
  end
55
55
 
56
+ # Set caching settings. We always want to enable caching for
57
+ # the Mock transport for testing.
58
+ if config[:backend_cache] || config[:backend] == :mock
59
+ connection.enable_cache(:file)
60
+ connection.enable_cache(:command)
61
+ elsif config[:debug_shell]
62
+ connection.disable_cache(:file)
63
+ connection.disable_cache(:command)
64
+ else
65
+ connection.disable_cache(:command)
66
+ end
67
+
56
68
  cls = Class.new do
57
69
  include Base
58
70
 
@@ -67,6 +67,8 @@ module Inspec
67
67
  desc: 'Use the given path for caching dependencies. (default: ~/.inspec/cache)'
68
68
  option :create_lockfile, type: :boolean, default: true,
69
69
  desc: 'Write out a lockfile based on this execution (unless one already exists)'
70
+ option :backend_cache, type: :boolean, default: false,
71
+ desc: 'Allow caching for backend command output.'
70
72
  end
71
73
 
72
74
  private
data/lib/inspec/cli.rb CHANGED
@@ -189,6 +189,7 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
189
189
  def shell_func
190
190
  diagnose
191
191
  o = opts.dup
192
+ o[:debug_shell] = true
192
193
 
193
194
  json_output = ['json', 'json-min'].include?(opts['format'])
194
195
  log_device = json_output ? nil : STDOUT
@@ -4,5 +4,5 @@
4
4
  # author: Christoph Hartmann
5
5
 
6
6
  module Inspec
7
- VERSION = '1.46.2'
7
+ VERSION = '1.47.0'
8
8
  end
@@ -63,25 +63,19 @@ module Inspec::Resources
63
63
  private
64
64
 
65
65
  def sanitize_options(opts)
66
- if !opts[:image].nil?
67
- if !opts[:image].index(':').nil?
68
- repo, tag = opts[:image].split(':')
69
- else
70
- opts[:repo] = opts[:image]
71
- opts[:image] = nil
72
- end
73
- opts[:repo] ||= repo
74
- opts[:tag] ||= tag
75
- end
76
-
77
- if !opts[:id].nil?
78
- if opts[:id].index(':').nil?
79
- opts[:id] = 'sha256:' + opts[:id]
80
- end
81
- end
66
+ opts.merge!(parse_components_from_image(opts[:image]))
82
67
 
68
+ # assume a "latest" tag if we don't have one
83
69
  opts[:tag] ||= 'latest'
84
- opts[:image] ||= "#{opts[:repo]}:#{opts[:tag]}" unless opts[:repo].nil?
70
+
71
+ # if the ID isn't nil and doesn't contain a hash indicator (indicated by the presence
72
+ # of a colon, which separates the indicator from the actual hash), we assume it's sha256.
73
+ opts[:id] = 'sha256:' + opts[:id] unless opts[:id].nil? || opts[:id].include?(':')
74
+
75
+ # Assemble/reassemble the image from the repo and tag
76
+ opts[:image] = "#{opts[:repo]}:#{opts[:tag]}" unless opts[:repo].nil?
77
+
78
+ # return the santized opts back to the caller
85
79
  opts
86
80
  end
87
81
 
@@ -92,5 +86,39 @@ module Inspec::Resources
92
86
  (repository == opts[:repo] && tag == opts[:tag]) || (!id.nil? && !opts[:id].nil? && (id == opts[:id] || id.start_with?(opts[:id])))
93
87
  }
94
88
  end
89
+
90
+ def parse_components_from_image(image_string)
91
+ # if the user did not supply an image string, they likely supplied individual
92
+ # option parameters, such as repo and tag. Return empty data back to the caller.
93
+ return {} if image_string.nil?
94
+
95
+ first_colon = image_string.index(':') || -1
96
+ first_slash = image_string.index('/') || -1
97
+
98
+ if image_string.count(':') == 2
99
+ # If there are two colons in the image string, it contains a repo-with-port and a tag.
100
+ # example: localhost:5000/chef/inspec:1.46.3
101
+ partitioned_string = image_string.rpartition(':')
102
+ repo = partitioned_string.first
103
+ tag = partitioned_string.last
104
+ elsif image_string.count(':') == 1 && first_colon < first_slash
105
+ # If there's one colon in the image string, and it comes before a forward-slash,
106
+ # it contains a repo-with-port but no tag.
107
+ # example: localhost:5000/ubuntu
108
+ repo = image_string
109
+ tag = nil
110
+ else
111
+ # If there's one colon in the image string and it doesn't preceed a slash, or if
112
+ # there is no colon at all, then it separates the repo from the tag, if there is a tag.
113
+ # example: chef/inspec:1.46.3
114
+ # example: chef/inspec
115
+ # example: ubuntu:14.04
116
+ repo, tag = image_string.split(':')
117
+ end
118
+
119
+ # return the repo and tag parsed from the string, which can be merged into
120
+ # the rest of the user-supplied options
121
+ { repo: repo, tag: tag }
122
+ end
95
123
  end
96
124
  end
@@ -29,6 +29,12 @@ module Inspec::Resources
29
29
  attr_reader :params, :raw_content
30
30
 
31
31
  def initialize(opts)
32
+ # pre-initialize @params to an empty hash. In the event that reading/parsing the data
33
+ # throws an exception, this allows the resource to still be called outside of a
34
+ # describe/test and not throw errors when a caller attempts to fetch a value from the params.
35
+ @params = {}
36
+
37
+ # load the raw content from the source, and then parse it
32
38
  @raw_content = load_raw_content(opts)
33
39
  @params = parse(@raw_content)
34
40
  end
@@ -10,11 +10,11 @@ module Inspec::Resources
10
10
  name 'key_rsa'
11
11
  desc 'public/private RSA key pair test'
12
12
  example "
13
- describe rsa_key('/etc/pki/www.mywebsite.com.key') do
13
+ describe key_rsa('/etc/pki/www.mywebsite.com.key') do
14
14
  its('public_key') { should match /BEGIN RSA PUBLIC KEY/ }
15
15
  end
16
16
 
17
- describe rsa_key('/etc/pki/www.mywebsite.com.key', 'passphrase') do
17
+ describe key_rsa('/etc/pki/www.mywebsite.com.key', 'passphrase') do
18
18
  it { should be_private }
19
19
  it { should be_public }
20
20
  end
@@ -108,22 +108,21 @@ module Inspec::Resources
108
108
  def read_content
109
109
  return @content if defined?(@content)
110
110
 
111
+ # using process pid to prevent any race conditions with multiple runners
112
+ export_file = "win_secpol-#{Process.pid}.cfg"
113
+
111
114
  # export the security policy
112
- cmd = inspec.command('secedit /export /cfg win_secpol.cfg')
115
+ cmd = inspec.command("secedit /export /cfg #{export_file}")
113
116
  return nil if cmd.exit_status.to_i != 0
114
117
 
115
118
  # store file content
116
- cmd = inspec.command('Get-Content win_secpol.cfg')
119
+ cmd = inspec.command("Get-Content #{export_file}")
117
120
  return skip_resource "Can't read security policy" if cmd.exit_status.to_i != 0
118
- @content = cmd.stdout
119
121
 
120
- if @content.empty? && !file.empty?
121
- return skip_resource "Can't read security policy"
122
- end
123
- @content
122
+ @content = cmd.stdout
124
123
  ensure
125
124
  # delete temp file
126
- inspec.command('Remove-Item win_secpol.cfg').exit_status.to_i
125
+ inspec.command("Remove-Item #{export_file}").exit_status.to_i
127
126
  end
128
127
 
129
128
  def read_params
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: 1.46.2
4
+ version: 1.47.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Richter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-29 00:00:00.000000000 Z
11
+ date: 2017-12-04 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: '0.29'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 0.29.2
19
+ version: '0.30'
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: '0.29'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 0.29.2
26
+ version: '0.30'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: thor
35
29
  requirement: !ruby/object:Gem::Requirement