inspec 1.24.0 → 1.25.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cf386497cc64b702dd9554fadcad59d66758a5cd
4
- data.tar.gz: 8c03d98784bd5163c4ac0f39855595c1f3016960
3
+ metadata.gz: 5261cd0fb515b9d1f811b7f5f64240bb621a3a45
4
+ data.tar.gz: a5db8a92f9fa823f77f3e5606228e24401143d1e
5
5
  SHA512:
6
- metadata.gz: 55f55fc7ec4d7557d546c27a64b6de6f079fe019141066ab7762a08892de76141df480670bcf525a152fdd539c0d2b91c409f960471af037f8f81a72aaf4ce1e
7
- data.tar.gz: a8957f05de8b17c042dc77cc5e1f179fd38b74b0b4d4485b68e2d24c800829299c995b66a48ae06fc4baa90125e4f6d6ce75616b6a70aa34c1c0283f0822573c
6
+ metadata.gz: 6e3be0aa353c6a58aa1be91c5c327c2eba93ce2d634919ebc60ff4252775a308b07c7190a897d82f1c3027baff643e6d558f0f8eb6d880264b8679d67fcc775f
7
+ data.tar.gz: e13a9c5266af39ba0ab44b4d64337d798b94f08a1b3b0aafd39625322bf1eeebc3e6ee917e56c1c48e0003750cb019c82b7b76b78d45bbd67cedb5333bf91c34
@@ -1,5 +1,18 @@
1
1
  # Change Log
2
2
 
3
+ ## [v1.25.0](https://github.com/chef/inspec/tree/v1.25.0) (2017-05-17)
4
+ [Full Changelog](https://github.com/chef/inspec/compare/v1.24.0...v1.25.0)
5
+
6
+ **Implemented enhancements:**
7
+
8
+ - return version as json [\#1822](https://github.com/chef/inspec/pull/1822) ([chris-rock](https://github.com/chris-rock))
9
+ - support new automate compliance backend [\#1819](https://github.com/chef/inspec/pull/1819) ([chris-rock](https://github.com/chris-rock))
10
+
11
+ **Fixed bugs:**
12
+
13
+ - read source code if profile is in tgz/zip [\#1816](https://github.com/chef/inspec/pull/1816) ([arlimus](https://github.com/arlimus))
14
+ - Update postgresql conf resource to accept include\_dir as a string as well as an array [\#1727](https://github.com/chef/inspec/pull/1727) ([elliott-davis](https://github.com/elliott-davis))
15
+
3
16
  ## [v1.24.0](https://github.com/chef/inspec/tree/v1.24.0) (2017-05-11)
4
17
  [Full Changelog](https://github.com/chef/inspec/compare/v1.23.0...v1.24.0)
5
18
 
@@ -13,7 +26,7 @@
13
26
  - Add support for Windows auth in mssql\_resourcet [\#1786](https://github.com/chef/inspec/pull/1786) ([arlimus](https://github.com/arlimus))
14
27
  - Allow mysql\_session to test databases on different hosts [\#1779](https://github.com/chef/inspec/pull/1779) ([aaronlippold](https://github.com/aaronlippold))
15
28
  - Handle parse errors for attrs/secrets [\#1775](https://github.com/chef/inspec/pull/1775) ([adamleff](https://github.com/adamleff))
16
- - Add an oracle\_session resource [\#1751](https://github.com/chef/inspec/pull/1751) ([nsdavidson](https://github.com/nsdavidson))
29
+ - Add an oracledb\_session resource [\#1751](https://github.com/chef/inspec/pull/1751) ([nsdavidson](https://github.com/nsdavidson))
17
30
 
18
31
  ## [v1.23.0](https://github.com/chef/inspec/tree/v1.23.0) (2017-05-04)
19
32
  [Full Changelog](https://github.com/chef/inspec/compare/v1.22.0...v1.23.0)
@@ -101,12 +101,9 @@ and to target all of these examples in a single `inspec.yml` file:
101
101
  name: ssh
102
102
  supports:
103
103
  - os-name: debian
104
- supports:
105
104
  - os-name: ubuntu
106
105
  release: 14.04
107
- supports:
108
106
  - os-family: redhat
109
- supports:
110
107
  - platform: aws
111
108
 
112
109
 
@@ -6,12 +6,24 @@ require 'net/http'
6
6
  require 'uri'
7
7
 
8
8
  module Compliance
9
+ class ServerConfigurationMissing < StandardError
10
+ end
11
+
9
12
  # API Implementation does not hold any state by itself,
10
13
  # everything will be stored in local Configuration store
11
14
  class API # rubocop:disable Metrics/ClassLength
12
15
  # return all compliance profiles available for the user
13
16
  def self.profiles(config)
14
- config['server_type'] == 'automate' ? url = "#{config['server']}/#{config['user']}" : url = "#{config['server']}/user/compliance"
17
+ # Chef Compliance
18
+ if is_compliance_server?(config)
19
+ url = "#{config['server']}/user/compliance"
20
+ # Chef Automate
21
+ elsif is_automate_server?(config)
22
+ url = "#{config['server']}/profiles/#{config['user']}"
23
+ else
24
+ raise ServerConfigurationMissing
25
+ end
26
+
15
27
  headers = get_headers(config)
16
28
  response = Compliance::HTTP.get(url, headers, config['insecure'])
17
29
  data = response.body
@@ -21,15 +33,21 @@ module Compliance
21
33
  msg = 'success'
22
34
  profiles = JSON.parse(data)
23
35
  # iterate over profiles
24
- if config['server_type'] == 'automate'
25
- mapped_profiles = profiles.values.to_a.flatten
26
- else
36
+ if is_compliance_server?(config)
27
37
  mapped_profiles = []
28
38
  profiles.values.each { |org|
29
39
  mapped_profiles += org.values
30
40
  }
41
+ # Chef Automate pre 0.8.0
42
+ elsif is_automate_server_pre_080?(config)
43
+ mapped_profiles = profiles.values.flatten
44
+ else
45
+ owner_id = config['user']
46
+ mapped_profiles = profiles.map { |e|
47
+ e['owner_id'] = owner_id
48
+ e
49
+ }
31
50
  end
32
-
33
51
  return msg, mapped_profiles
34
52
  when '401'
35
53
  msg = '401 Unauthorized. Please check your token.'
@@ -43,16 +61,17 @@ module Compliance
43
61
  # return the server api version
44
62
  # NB this method does not use Compliance::Configuration to allow for using
45
63
  # it before we know the version (e.g. oidc or not)
46
- def self.version(url, insecure)
47
- if url.nil?
48
- puts "
49
- Server configuration information is missing.
50
- Please login using `inspec compliance login https://compliance.test --user admin --insecure --token 'PASTE TOKEN HERE' `
51
- "
52
- else
53
- response = Compliance::HTTP.get(url+'/version', nil, insecure)
54
- data = response.body
55
- end
64
+ def self.version(config)
65
+ url = config['server']
66
+ insecure = config['insecure']
67
+
68
+ raise ServerConfigurationMissing if url.nil?
69
+
70
+ headers = get_headers(config)
71
+ response = Compliance::HTTP.get(url+'/version', headers, insecure)
72
+ return {} if response.code == '404'
73
+ data = response.body
74
+
56
75
  if !data.nil?
57
76
  JSON.parse(data)
58
77
  else
@@ -72,8 +91,17 @@ Please login using `inspec compliance login https://compliance.test --user admin
72
91
  end
73
92
 
74
93
  def self.upload(config, owner, profile_name, archive_path)
75
- # upload the tar to Chef Compliance
76
- config['server_type'] == 'automate' ? url = "#{config['server']}/#{config['user']}" : url = "#{config['server']}/owners/#{owner}/compliance/#{profile_name}/tar"
94
+ # Chef Compliance
95
+ if is_compliance_server?(config)
96
+ url = "#{config['server']}/owners/#{owner}/compliance/#{profile_name}/tar"
97
+ # Chef Automate pre 0.8.0
98
+ elsif is_automate_server_pre_080?(config)
99
+ url = "#{config['server']}/#{config['user']}"
100
+ # Chef Automate
101
+ else
102
+ url = "#{config['server']}/profiles/#{config['user']}"
103
+ end
104
+
77
105
  headers = get_headers(config)
78
106
  res = Compliance::HTTP.post_file(url, headers, archive_path, config['insecure'])
79
107
  [res.is_a?(Net::HTTPSuccess), res.body]
@@ -129,7 +157,7 @@ Please login using `inspec compliance login https://compliance.test --user admin
129
157
 
130
158
  def self.get_headers(config)
131
159
  token = get_token(config)
132
- if config['server_type'] == 'automate'
160
+ if is_automate_server?(config)
133
161
  headers = { 'chef-delivery-enterprise' => config['automate']['ent'] }
134
162
  if config['automate']['token_type'] == 'dctoken'
135
163
  headers['x-data-collector-token'] = token
@@ -150,13 +178,40 @@ Please login using `inspec compliance login https://compliance.test --user admin
150
178
  end
151
179
 
152
180
  def self.target_url(config, profile)
153
- if config['server_type'] == 'automate'
154
- target = "#{config['server']}/#{profile}/tar"
181
+ if is_automate_server?(config)
182
+ owner, id = profile.split('/')
183
+ target = "#{config['server']}/profiles/#{owner}/#{id}/tar"
155
184
  else
156
185
  owner, id = profile.split('/')
157
186
  target = "#{config['server']}/owners/#{owner}/compliance/#{id}/tar"
158
187
  end
159
188
  target
160
189
  end
190
+
191
+ # returns a parsed url for `admin/profile` or `compliance://admin/profile`
192
+ def self.sanitize_profile_name(profile)
193
+ if URI(profile).scheme == 'compliance'
194
+ uri = URI(profile)
195
+ else
196
+ uri = URI("compliance://#{profile}")
197
+ end
198
+ uri.to_s.sub(%r{^compliance:\/\/}, '')
199
+ end
200
+
201
+ def self.is_compliance_server?(config)
202
+ config['server_type'] == 'compliance'
203
+ end
204
+
205
+ def self.is_automate_server_pre_080?(config)
206
+ config['server_type'] == 'automate' && config['version'].empty?
207
+ end
208
+
209
+ def self.is_automate_server_080_and_later?(config)
210
+ config['server_type'] == 'automate' && !config['version'].empty?
211
+ end
212
+
213
+ def self.is_automate_server?(config)
214
+ config['server_type'] == 'automate'
215
+ end
161
216
  end
162
217
  end
@@ -77,7 +77,7 @@ module Compliance
77
77
  desc: 'Explicitly allows InSpec to perform "insecure" SSL connections and transfers'
78
78
  def login_automate(server) # rubocop:disable Metrics/AbcSize
79
79
  options['server'] = server
80
- url = options['server'] + '/compliance/profiles'
80
+ url = options['server'] + '/compliance'
81
81
 
82
82
  if url && !options['user'].nil? && !options['ent'].nil? && (!options['dctoken'].nil? || !options['usertoken'].nil?)
83
83
  msg = login_automate_config(url, options['user'], options['dctoken'], options['usertoken'], options['ent'], options['insecure'])
@@ -110,6 +110,9 @@ module Compliance
110
110
  puts msg, 'Could not find any profiles'
111
111
  exit 1
112
112
  end
113
+ rescue Compliance::ServerConfigurationMissing
114
+ puts "\nServer configuration information is missing. Please login using `inspec compliance login`"
115
+ exit 1
113
116
  end
114
117
 
115
118
  desc 'exec PROFILE', 'executes a Chef Compliance profile'
@@ -118,7 +121,7 @@ module Compliance
118
121
  config = Compliance::Configuration.new
119
122
  return if !loggedin(config)
120
123
  # iterate over tests and add compliance scheme
121
- tests = tests.map { |t| 'compliance://' + sanitize_profile_name(t) }
124
+ tests = tests.map { |t| 'compliance://' + Compliance::API.sanitize_profile_name(t) }
122
125
  # execute profile from inspec exec implementation
123
126
  diagnose
124
127
  run_tests(tests, opts)
@@ -134,7 +137,7 @@ module Compliance
134
137
  config = Compliance::Configuration.new
135
138
  return if !loggedin(config)
136
139
 
137
- profile_name = sanitize_profile_name(profile_name)
140
+ profile_name = Compliance::API.sanitize_profile_name(profile_name)
138
141
  if Compliance::API.exist?(config, profile_name)
139
142
  puts "Downloading `#{profile_name}`"
140
143
 
@@ -221,7 +224,7 @@ module Compliance
221
224
  puts "Start upload to #{owner}/#{profile_name}"
222
225
  pname = ERB::Util.url_encode(profile_name)
223
226
 
224
- config['server_type'] == 'automate' ? upload_msg = 'Uploading to Chef Automate' : upload_msg = 'Uploading to Chef Compliance'
227
+ Compliance::API.is_automate_server?(config) ? upload_msg = 'Uploading to Chef Automate' : upload_msg = 'Uploading to Chef Compliance'
225
228
  puts upload_msg
226
229
  success, msg = Compliance::API.upload(config, owner, pname, archive_path)
227
230
 
@@ -237,17 +240,17 @@ module Compliance
237
240
  desc 'version', 'displays the version of the Chef Compliance server'
238
241
  def version
239
242
  config = Compliance::Configuration.new
240
- if config['server_type'] == 'automate'
241
- puts 'Version not available when logged in with Automate.'
243
+ info = Compliance::API.version(config)
244
+ if !info.nil? && info['version']
245
+ puts "Name: #{info['api']}"
246
+ puts "Version: #{info['version']}"
242
247
  else
243
- info = Compliance::API.version(config['server'], config['insecure'])
244
- if !info.nil? && info['version']
245
- puts "Chef Compliance version: #{info['version']}"
246
- else
247
- puts 'Could not determine server version.'
248
- exit 1
249
- end
248
+ puts 'Could not determine server version.'
249
+ exit 1
250
250
  end
251
+ rescue Compliance::ServerConfigurationMissing
252
+ puts "\nServer configuration information is missing. Please login using `inspec compliance login`"
253
+ exit 1
251
254
  end
252
255
 
253
256
  desc 'logout', 'user logout from Chef Compliance'
@@ -269,18 +272,9 @@ module Compliance
269
272
 
270
273
  private
271
274
 
272
- # returns a parsed url for `admin/profile` or `compliance://admin/profile`
273
- def sanitize_profile_name(profile)
274
- if URI(profile).scheme == 'compliance'
275
- uri = URI(profile)
276
- else
277
- uri = URI("compliance://#{profile}")
278
- end
279
- uri.host + uri.path
280
- end
281
-
282
275
  def login_automate_config(url, user, dctoken, usertoken, ent, insecure) # rubocop:disable Metrics/ParameterLists
283
276
  config = Compliance::Configuration.new
277
+ config.clean
284
278
  config['user'] = user
285
279
  config['server'] = url
286
280
  config['automate'] = {}
@@ -298,8 +292,8 @@ module Compliance
298
292
  token_type = 'usertoken'
299
293
  token_msg = 'automate user token'
300
294
  end
301
-
302
295
  config['automate']['token_type'] = token_type
296
+ config['version'] = Compliance::API.version(config)
303
297
  config.store
304
298
  msg = "Stored configuration for Chef Automate: '#{url}' with user: '#{user}', ent: '#{ent}' and your #{token_msg}"
305
299
  msg
@@ -309,10 +303,11 @@ module Compliance
309
303
  success, msg, _access_token = Compliance::API.get_token_via_refresh_token(url, options['refresh_token'], options['insecure'])
310
304
  if success
311
305
  config = Compliance::Configuration.new
306
+ config.clean
312
307
  config['server'] = url
313
308
  config['insecure'] = options['insecure']
314
- config['version'] = Compliance::API.version(url, options['insecure'])
315
309
  config['server_type'] = 'compliance'
310
+ config['version'] = Compliance::API.version(config)
316
311
  config.store
317
312
  end
318
313
 
@@ -321,14 +316,15 @@ module Compliance
321
316
 
322
317
  def login_username_password(url, username, password, insecure)
323
318
  config = Compliance::Configuration.new
319
+ config.clean
324
320
  success, msg, api_token = Compliance::API.get_token_via_password(url, username, password, insecure)
325
321
  if success
326
322
  config['server'] = url
327
323
  config['user'] = username
328
324
  config['token'] = api_token
329
325
  config['insecure'] = insecure
330
- config['version'] = Compliance::API.version(url, insecure)
331
326
  config['server_type'] = 'compliance'
327
+ config['version'] = Compliance::API.version(config)
332
328
  config.store
333
329
  success = true
334
330
  end
@@ -338,11 +334,13 @@ module Compliance
338
334
  # saves a user access token (limited time)
339
335
  def store_access_token(url, user, token, insecure)
340
336
  config = Compliance::Configuration.new
337
+ config.clean
341
338
  config['server'] = url
342
339
  config['insecure'] = insecure
343
340
  config['user'] = user
344
341
  config['token'] = token
345
- config['version'] = Compliance::API.version(url, insecure)
342
+ config['server_type'] = 'compliance'
343
+ config['version'] = Compliance::API.version(config)
346
344
  config.store
347
345
 
348
346
  [true, 'API access token stored']
@@ -351,10 +349,12 @@ module Compliance
351
349
  # saves a refresh token supplied by the user
352
350
  def store_refresh_token(url, refresh_token, verify, user, insecure)
353
351
  config = Compliance::Configuration.new
352
+ config.clean
354
353
  config['server'] = url
355
354
  config['refresh_token'] = refresh_token
356
355
  config['user'] = user
357
356
  config['insecure'] = insecure
357
+ config['server_type'] = 'compliance'
358
358
  config['version'] = Compliance::API.version(url, insecure)
359
359
 
360
360
  if !verify
@@ -28,6 +28,10 @@ module Compliance
28
28
  @config[key] = value
29
29
  end
30
30
 
31
+ def clean
32
+ @config = {}
33
+ end
34
+
31
35
  # return the json data
32
36
  def get
33
37
  if File.exist?(@config_file)
@@ -13,7 +13,7 @@ module Compliance
13
13
  class Fetcher < Fetchers::Url
14
14
  name 'compliance'
15
15
  priority 500
16
- def self.resolve(target) # rubocop:disable PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/AbcSize
16
+ def self.resolve(target) # rubocop:disable PerceivedComplexity, Metrics/CyclomaticComplexity
17
17
  uri = if target.is_a?(String) && URI(target).scheme == 'compliance'
18
18
  URI(target)
19
19
  elsif target.respond_to?(:key?) && target.key?(:compliance)
@@ -49,7 +49,7 @@ EOF
49
49
  end
50
50
 
51
51
  # verifies that the target e.g base/ssh exists
52
- profile = uri.host + uri.path
52
+ profile = Compliance::API.sanitize_profile_name(uri)
53
53
  if !Compliance::API.exist?(config, profile)
54
54
  raise Inspec::FetcherFailure, "The compliance profile #{profile} was not found on the configured compliance server"
55
55
  end
@@ -57,7 +57,6 @@ EOF
57
57
  end
58
58
  # We need to pass the token to the fetcher
59
59
  config['token'] = Compliance::API.get_token(config)
60
-
61
60
  new(profile_fetch_url, config)
62
61
  rescue URI::Error => _e
63
62
  nil
@@ -81,8 +80,10 @@ EOF
81
80
 
82
81
  # determine the owner_id and the profile name from the url
83
82
  def compliance_profile_name
84
- m = if @config['server_type'] == 'automate'
83
+ m = if Compliance::API.is_automate_server_pre_080(@config)
85
84
  %r{^#{@config['server']}/(?<owner>[^/]+)/(?<id>[^/]+)/tar$}
85
+ elsif Compliance::API.is_automate_server_080_and_later
86
+ %r{^#{@config['server']}/profiles/(?<owner>[^/]+)/(?<id>[^/]+)/tar$}
86
87
  else
87
88
  %r{^#{@config['server']}/owners/(?<owner>[^/]+)/compliance/(?<id>[^/]+)/tar$}
88
89
  end.match(@target)
@@ -238,12 +238,18 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
238
238
  end
239
239
 
240
240
  desc 'version', 'prints the version of this tool'
241
+ option :format, type: :string
241
242
  def version
242
- puts Inspec::VERSION
243
- # display outdated version
244
- latest = LatestInSpecVersion.new.latest
245
- if Gem::Version.new(Inspec::VERSION) < Gem::Version.new(latest)
246
- puts "\nYour version of InSpec is out of date! The latest version is #{latest}."
243
+ if opts['format'] == 'json'
244
+ v = { version: Inspec::VERSION }
245
+ puts v.to_json
246
+ else
247
+ puts Inspec::VERSION
248
+ # display outdated version
249
+ latest = LatestInSpecVersion.new.latest
250
+ if Gem::Version.new(Inspec::VERSION) < Gem::Version.new(latest)
251
+ puts "\nYour version of InSpec is out of date! The latest version is #{latest}."
252
+ end
247
253
  end
248
254
  end
249
255
  map %w{-v --version} => :version
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ # author: Dominik Richter
3
+ # author: Christoph Hartmann
4
+
5
+ module Inspec
6
+ module MethodSource
7
+ def self.code_at(location, source_reader)
8
+ # TODO: logger for these cases
9
+ return '' if location.nil? || location[:ref].nil? || location[:line].nil?
10
+ return '' unless source_reader && source_reader.target
11
+
12
+ # TODO: Non-controls still need more detection
13
+ ref = location[:ref]
14
+ ref = ref.sub(source_reader.target.prefix, '')
15
+ src = source_reader.tests[ref]
16
+ return '' if src.nil?
17
+
18
+ ::MethodSource.expression_at(src.lines, location[:line]).force_encoding('utf-8')
19
+ rescue SyntaxError => e
20
+ raise ::MethodSource::SourceNotFoundError,
21
+ "Could not parse source at #{location[:ref]}:#{location[:line]}: #{e.message}"
22
+ end
23
+ end
24
+ end
@@ -15,6 +15,7 @@ require 'inspec/rule'
15
15
  require 'inspec/log'
16
16
  require 'inspec/profile_context'
17
17
  require 'inspec/runtime_profile'
18
+ require 'inspec/method_source'
18
19
  require 'inspec/dependencies/cache'
19
20
  require 'inspec/dependencies/lockfile'
20
21
  require 'inspec/dependencies/dependency_set'
@@ -471,6 +472,7 @@ module Inspec
471
472
 
472
473
  def load_rule(rule, file, controls, groups)
473
474
  id = Inspec::Rule.rule_id(rule)
475
+ location = rule.instance_variable_get(:@__source_location)
474
476
  controls[id] = {
475
477
  title: rule.title,
476
478
  desc: rule.desc,
@@ -478,8 +480,8 @@ module Inspec
478
480
  refs: rule.ref,
479
481
  tags: rule.tag,
480
482
  checks: Inspec::Rule.checks(rule),
481
- code: rule.instance_variable_get(:@__code),
482
- source_location: rule.instance_variable_get(:@__source_location),
483
+ code: Inspec::MethodSource.code_at(location, source_reader),
484
+ source_location: location,
483
485
  }
484
486
 
485
487
  groups[file] ||= {
@@ -39,7 +39,6 @@ module Inspec
39
39
 
40
40
  # not changeable by the user:
41
41
  @__block = block
42
- @__code = __get_block_source(&block)
43
42
  @__source_location = __get_block_source_location(&block)
44
43
  @__rule_id = id
45
44
  @__profile_id = profile_id
@@ -249,14 +248,6 @@ module Inspec
249
248
  text.gsub(/^[[:blank:]]{#{len}}/, '').strip
250
249
  end
251
250
 
252
- # get the rule's source code
253
- def __get_block_source(&block)
254
- return '' unless block_given?
255
- block.source.to_s
256
- rescue MethodSource::SourceNotFoundError
257
- ''
258
- end
259
-
260
251
  # get the source location of the block
261
252
  def __get_block_source_location(&block)
262
253
  return {} unless block_given?
@@ -4,5 +4,5 @@
4
4
  # author: Christoph Hartmann
5
5
 
6
6
  module Inspec
7
- VERSION = '1.24.0'.freeze
7
+ VERSION = '1.25.0'.freeze
8
8
  end
@@ -93,7 +93,7 @@ module Inspec::Resources
93
93
  def include_files(params)
94
94
  include_files = params['include'] || []
95
95
  include_files += params['include_if_exists'] || []
96
- dirs = params['include_dir'] || []
96
+ dirs = Array(params['include_dir']) || []
97
97
  dirs.each do |dir|
98
98
  dir = File.join(@conf_dir, dir) if dir[0] != '/'
99
99
  include_files += find_files(dir, depth: 1, type: 'file')
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.24.0
4
+ version: 1.25.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-05-11 00:00:00.000000000 Z
11
+ date: 2017-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: train
@@ -289,7 +289,7 @@ files:
289
289
  - docs/inspec_and_friends.md
290
290
  - docs/matchers.md
291
291
  - docs/migration.md
292
- - docs/plugin_kitchen_inspec.html.md
292
+ - docs/plugin_kitchen_inspec.md
293
293
  - docs/profiles.md
294
294
  - docs/resources.md
295
295
  - docs/resources/apache_conf.md.erb
@@ -383,7 +383,6 @@ files:
383
383
  - examples/README.md
384
384
  - examples/inheritance/README.md
385
385
  - examples/inheritance/controls/example.rb
386
- - examples/inheritance/inspec.lock
387
386
  - examples/inheritance/inspec.yml
388
387
  - examples/kitchen-ansible/.kitchen.yml
389
388
  - examples/kitchen-ansible/Gemfile
@@ -409,11 +408,7 @@ files:
409
408
  - examples/kitchen-puppet/test/integration/default/web_spec.rb
410
409
  - examples/meta-profile/README.md
411
410
  - examples/meta-profile/controls/example.rb
412
- - examples/meta-profile/inspec.lock
413
411
  - examples/meta-profile/inspec.yml
414
- - examples/meta-profile/vendor/4d5c9187409941b96f00fb25d0888c301ede999fd63149f35ad4594d698d6535.tar.gz
415
- - examples/meta-profile/vendor/79e6b9846ab539669bbfcf5adcd246f1be484d4b55acb7c1c3dbd852203e4fae.tar.gz
416
- - examples/meta-profile/vendor/dbb5602f09f58d86f8743dfb44327207e9a23a49ef34f65614f1c1d8cc145f6b.tar.gz
417
412
  - examples/profile-attribute.yml
418
413
  - examples/profile-attribute/README.md
419
414
  - examples/profile-attribute/controls/example.rb
@@ -489,6 +484,7 @@ files:
489
484
  - lib/inspec/library_eval_context.rb
490
485
  - lib/inspec/log.rb
491
486
  - lib/inspec/metadata.rb
487
+ - lib/inspec/method_source.rb
492
488
  - lib/inspec/objects.rb
493
489
  - lib/inspec/objects/attribute.rb
494
490
  - lib/inspec/objects/control.rb
@@ -1,11 +0,0 @@
1
- ---
2
- lockfile_version: 1
3
- depends:
4
- - name: profile
5
- resolved_source:
6
- path: "/Users/aleff/projects/inspec/examples/profile"
7
- version_constraints: ">= 0"
8
- - name: profile-attribute
9
- resolved_source:
10
- path: "/Users/aleff/projects/inspec/examples/profile-attribute"
11
- version_constraints: ">= 0"
@@ -1,18 +0,0 @@
1
- ---
2
- lockfile_version: 1
3
- depends:
4
- - name: dev-sec/ssh-baseline
5
- resolved_source:
6
- url: https://github.com/dev-sec/ssh-baseline/archive/master.tar.gz
7
- sha256: 79e6b9846ab539669bbfcf5adcd246f1be484d4b55acb7c1c3dbd852203e4fae
8
- version_constraints: ">= 0"
9
- - name: ssl-benchmark
10
- resolved_source:
11
- url: https://github.com/dev-sec/ssl-benchmark/archive/master.tar.gz
12
- sha256: 4d5c9187409941b96f00fb25d0888c301ede999fd63149f35ad4594d698d6535
13
- version_constraints: ">= 0"
14
- - name: windows-patch-benchmark
15
- resolved_source:
16
- url: https://github.com/chris-rock/windows-patch-benchmark/archive/master.tar.gz
17
- sha256: dbb5602f09f58d86f8743dfb44327207e9a23a49ef34f65614f1c1d8cc145f6b
18
- version_constraints: ">= 0"