chefspec 4.1.1 → 4.2.0.beta.1
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 +4 -4
- data/.travis.yml +1 -2
- data/CHANGELOG.md +10 -0
- data/README.md +8 -5
- data/examples/custom_matcher/libraries/matcher.rb +1 -1
- data/features/inherits.feature +1 -0
- data/gemfiles/{chef-12.0.0.alpha.gemfile → chef-12.0.0.rc.gemfile} +1 -1
- data/lib/chefspec.rb +1 -0
- data/lib/chefspec/chef_backwards_compat.rb +79 -0
- data/lib/chefspec/deprecations.rb +1 -0
- data/lib/chefspec/extensions/chef/lwrp_base.rb +0 -59
- data/lib/chefspec/rspec.rb +1 -0
- data/lib/chefspec/server_runner.rb +12 -2
- data/lib/chefspec/solo_runner.rb +16 -0
- data/lib/chefspec/version.rb +1 -1
- data/spec/unit/deprecations_spec.rb +1 -0
- data/spec/unit/extensions/lwrp_base_spec.rb +2 -3
- data/spec/unit/solo_runner_spec.rb +2 -0
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68b2b322b2293fa631345ed68a61262d0f46d943
|
4
|
+
data.tar.gz: 99a905d8ea24d4c6d20f554c8bc0f42d5f60f14f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07409059ef229f4eb9e2e7f9fe3d4f1d9db2b9e859f0864fbc29df6ed89fddf1e60788e9d7808aae2c853d6ed52163be242ecb99b55ff410327a958b95310883
|
7
|
+
data.tar.gz: 7153ec068c65759290deadf4183d3a57693b092a531118ce4b3f1294f2fa4b2d056202ff2fa4f3c83397db7fc9bb5d2fb92c1a4f5b02fc502d612500c39a8c37
|
data/.travis.yml
CHANGED
@@ -21,11 +21,10 @@ bundler_args: --jobs 7
|
|
21
21
|
gemfile:
|
22
22
|
- gemfiles/chef-11.14.0.gemfile
|
23
23
|
- gemfiles/chef-11.16.0.gemfile
|
24
|
-
- gemfiles/chef-12.0.0.
|
24
|
+
- gemfiles/chef-12.0.0.rc.gemfile
|
25
25
|
- gemfiles/chef-master.gemfile
|
26
26
|
|
27
27
|
matrix:
|
28
28
|
fast_finish: true
|
29
29
|
allow_failures:
|
30
|
-
- gemfile: gemfiles/chef-12.0.0.alpha.gemfile
|
31
30
|
- gemfile: gemfiles/chef-master.gemfile
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
CHANGELOG for ChefSpec
|
2
2
|
======================
|
3
3
|
|
4
|
+
## 4.2.0.beta.1 (November 5, 2014)
|
5
|
+
Bugfixes:
|
6
|
+
- Updated README grep examples
|
7
|
+
- Fix various typographical errors
|
8
|
+
- Improved error message when using a deprecated resource matcher
|
9
|
+
|
10
|
+
Improvements:
|
11
|
+
- Add support for Chef 12
|
12
|
+
- Added support for environments in Chef Solo
|
13
|
+
|
4
14
|
## 4.1.1 (October 13, 2014)
|
5
15
|
Bugfixes:
|
6
16
|
- Fix total fail on my part with deprecations and add test coverage
|
data/README.md
CHANGED
@@ -81,6 +81,9 @@ RSpec.configure do |config|
|
|
81
81
|
# Specify the path for Chef Solo to find roles (default: [ascending search])
|
82
82
|
config.role_path = '/var/roles'
|
83
83
|
|
84
|
+
# Specify the path for Chef Solo to find environments (default: [ascending search])
|
85
|
+
config.environment_path = '/var/environments'
|
86
|
+
|
84
87
|
# Specify the Chef log_level (default: :warn)
|
85
88
|
config.log_level = :debug
|
86
89
|
|
@@ -437,18 +440,18 @@ Given a recipe with shell guard:
|
|
437
440
|
|
438
441
|
```ruby
|
439
442
|
template '/tmp/foo.txt' do
|
440
|
-
not_if 'grep /tmp/foo.txt
|
443
|
+
not_if 'grep text /tmp/foo.txt'
|
441
444
|
end
|
442
445
|
```
|
443
446
|
|
444
447
|
ChefSpec will raise an error like:
|
445
448
|
|
446
449
|
```text
|
447
|
-
Real commands are disabled. Unregistered command: `grep /tmp/foo.txt
|
450
|
+
Real commands are disabled. Unregistered command: `grep text /tmp/foo.txt`
|
448
451
|
|
449
452
|
You can stub this command with:
|
450
453
|
|
451
|
-
stub_command("grep /tmp/foo.txt
|
454
|
+
stub_command("grep text /tmp/foo.txt").and_return(true)
|
452
455
|
|
453
456
|
============================================================
|
454
457
|
```
|
@@ -460,7 +463,7 @@ describe 'example::default' do
|
|
460
463
|
let(:chef_run) { ChefSpec::SoloRunner.new }
|
461
464
|
|
462
465
|
before do
|
463
|
-
stub_command("grep /tmp/foo.txt
|
466
|
+
stub_command("grep text /tmp/foo.txt").and_return(true)
|
464
467
|
end
|
465
468
|
end
|
466
469
|
```
|
@@ -470,7 +473,7 @@ describe 'example::default' do
|
|
470
473
|
let(:chef_run) { ChefSpec::SoloRunner.new }
|
471
474
|
|
472
475
|
before do
|
473
|
-
stub_command("grep /tmp/foo.txt
|
476
|
+
stub_command("grep text /tmp/foo.txt") { rand(50)%2 == 0 }
|
474
477
|
end
|
475
478
|
end
|
476
479
|
```
|
@@ -6,7 +6,7 @@ if defined?(ChefSpec)
|
|
6
6
|
# documentation indicating how to use the custom matcher.
|
7
7
|
#
|
8
8
|
# @example This is an example
|
9
|
-
# expect(chef_run.to install_custom_matcher_thing('foo')
|
9
|
+
# expect(chef_run).to install_custom_matcher_thing('foo')
|
10
10
|
#
|
11
11
|
# @param [String] resource_name
|
12
12
|
# the resource name
|
data/features/inherits.feature
CHANGED
data/lib/chefspec.rb
CHANGED
@@ -0,0 +1,79 @@
|
|
1
|
+
#
|
2
|
+
# This file contains the backwards compatible hacks required to make ChefSpec
|
3
|
+
# work with the previous version of Chef. ChefSpec only promises to be backwards
|
4
|
+
# compatible with the last major release of Chef, but it may work with earlier
|
5
|
+
# versions.
|
6
|
+
#
|
7
|
+
# The hacks are kept in this file so as to avoid a bunch of branching logic
|
8
|
+
# throughout the codebase. It also makes dropping backwards compatability much
|
9
|
+
# easier without the risk of breaking things.
|
10
|
+
#
|
11
|
+
# This file must be loaded AFTER the rest of ChefSpec has been initialized!
|
12
|
+
#
|
13
|
+
|
14
|
+
module ChefSpec
|
15
|
+
class ServerRunner
|
16
|
+
#
|
17
|
+
# The method airty for the Chef::CookbookUploader used to accept a list of
|
18
|
+
# cookbook paths. This restores that behavior.
|
19
|
+
#
|
20
|
+
def cookbook_uploader_for(loader)
|
21
|
+
Chef::CookbookUploader.new(loader.cookbooks, loader.cookbook_paths)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module RemoveExistingLWRP
|
26
|
+
def self.extended(klass)
|
27
|
+
class << klass
|
28
|
+
alias_method :build_from_file_without_removal, :build_from_file
|
29
|
+
alias_method :build_from_file, :build_from_file_with_removal
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# Override Chef provider to remove any existing LWRPs to suppress constant
|
35
|
+
# re-definition warnings.
|
36
|
+
#
|
37
|
+
# @param [String] cookbook_name
|
38
|
+
# the name of the cookbook
|
39
|
+
# @param [String] filename
|
40
|
+
# file to load as a LWRP
|
41
|
+
# @param [Chef::RunContext] run_context
|
42
|
+
# context of a Chef Run
|
43
|
+
#
|
44
|
+
# @return [Chef::Provider]
|
45
|
+
#
|
46
|
+
def build_from_file_with_removal(cookbook_name, filename, run_context)
|
47
|
+
provider_name = filename_to_qualified_string(cookbook_name, filename)
|
48
|
+
class_name = convert_to_class_name(provider_name)
|
49
|
+
|
50
|
+
remove_existing_lwrp(class_name)
|
51
|
+
build_from_file_without_removal(cookbook_name, filename, run_context)
|
52
|
+
end
|
53
|
+
|
54
|
+
#
|
55
|
+
# Remove any existing Chef provider or resource with the specified name.
|
56
|
+
#
|
57
|
+
# @param [String] class_name
|
58
|
+
# The class name. Must be a valid constant name.
|
59
|
+
#
|
60
|
+
def remove_existing_lwrp(class_name)
|
61
|
+
[self, superclass].each do |resource_holder|
|
62
|
+
look_in_parents = false
|
63
|
+
if resource_holder.const_defined?(class_name, look_in_parents)
|
64
|
+
old_class = resource_holder.send(:remove_const, class_name)
|
65
|
+
|
66
|
+
if resource_holder.respond_to?(:resource_classes)
|
67
|
+
resource_holder.resource_classes.delete(old_class)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
# Only remove existing LWRPs for older versions of Chef. Newer versions of
|
77
|
+
# Chef do not break things as much...
|
78
|
+
Chef::Provider::LWRPBase.extend(ChefSpec::RemoveExistingLWRP)
|
79
|
+
Chef::Resource::LWRPBase.extend(ChefSpec::RemoveExistingLWRP)
|
@@ -20,6 +20,7 @@ module ChefSpec
|
|
20
20
|
# use {ChefSpec.define_runner_method} instead.
|
21
21
|
def self.define_runner_method(resource_name)
|
22
22
|
deprecated "`ChefSpec::Runner.define_runner_method' is deprecated. " \
|
23
|
+
"It is being used in the #{resource_name} resource matcher." \
|
23
24
|
"Please use `ChefSpec.define_matcher' instead."
|
24
25
|
|
25
26
|
ChefSpec.define_matcher(resource_name)
|
@@ -1,59 +1,7 @@
|
|
1
1
|
# Override Chef LWRP creation to remove existing class to avoid redefinition warnings.
|
2
2
|
class Chef
|
3
|
-
module RemoveExistingLWRP
|
4
|
-
def self.extended(klass)
|
5
|
-
class << klass
|
6
|
-
alias_method :build_from_file_without_removal, :build_from_file
|
7
|
-
alias_method :build_from_file, :build_from_file_with_removal
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
#
|
12
|
-
# Override Opscode provider to remove any existing LWRPs to suppress
|
13
|
-
# constant re-definition warnings.
|
14
|
-
#
|
15
|
-
# @param [String] cookbook_name
|
16
|
-
# the name of the cookbook
|
17
|
-
# @param [String] filename
|
18
|
-
# file to load as a LWRP
|
19
|
-
# @param [Chef::RunContext] run_context
|
20
|
-
# context of a Chef Run
|
21
|
-
#
|
22
|
-
# @return [Chef::Provider]
|
23
|
-
#
|
24
|
-
def build_from_file_with_removal(cookbook_name, filename, run_context)
|
25
|
-
provider_name = filename_to_qualified_string(cookbook_name, filename)
|
26
|
-
class_name = convert_to_class_name(provider_name)
|
27
|
-
|
28
|
-
remove_existing_lwrp(class_name)
|
29
|
-
build_from_file_without_removal(cookbook_name, filename, run_context)
|
30
|
-
end
|
31
|
-
|
32
|
-
#
|
33
|
-
# Remove any existing Chef provider or resource with the specified name.
|
34
|
-
#
|
35
|
-
# @param [String] class_name
|
36
|
-
# The class name. Must be a valid constant name.
|
37
|
-
#
|
38
|
-
def remove_existing_lwrp(class_name)
|
39
|
-
[self, superclass].each do |resource_holder|
|
40
|
-
look_in_parents = false
|
41
|
-
if resource_holder.const_defined?(class_name, look_in_parents)
|
42
|
-
old_class = resource_holder.send(:remove_const, class_name)
|
43
|
-
|
44
|
-
if resource_holder.respond_to?(:resource_classes)
|
45
|
-
resource_holder.resource_classes.delete(old_class)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
3
|
class Provider
|
53
|
-
# Chef provider for a resource
|
54
4
|
class LWRPBase < Provider
|
55
|
-
extend RemoveExistingLWRP
|
56
|
-
|
57
5
|
module InlineResources
|
58
6
|
module ClassMethods
|
59
7
|
#
|
@@ -72,11 +20,4 @@ class Chef
|
|
72
20
|
end
|
73
21
|
end
|
74
22
|
end
|
75
|
-
|
76
|
-
class Resource
|
77
|
-
# Chef provider for a resource
|
78
|
-
class LWRPBase < Resource
|
79
|
-
extend RemoveExistingLWRP
|
80
|
-
end
|
81
|
-
end
|
82
23
|
end
|
data/lib/chefspec/rspec.rb
CHANGED
@@ -38,9 +38,19 @@ module ChefSpec
|
|
38
38
|
def upload_cookbooks!
|
39
39
|
loader = Chef::CookbookLoader.new(Chef::Config[:cookbook_path])
|
40
40
|
loader.load_cookbooks
|
41
|
+
cookbook_uploader_for(loader).upload_cookbooks
|
42
|
+
end
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
+
#
|
45
|
+
# The uploader for the cookbooks.
|
46
|
+
#
|
47
|
+
# @param [Chef::CookbookLoader] loader
|
48
|
+
# the Chef cookbook loader
|
49
|
+
#
|
50
|
+
# @return [Chef::CookbookUploader]
|
51
|
+
#
|
52
|
+
def cookbook_uploader_for(loader)
|
53
|
+
Chef::CookbookUploader.new(loader.cookbooks)
|
44
54
|
end
|
45
55
|
|
46
56
|
# @see (SoloRunner#converge)
|
data/lib/chefspec/solo_runner.rb
CHANGED
@@ -77,6 +77,7 @@ module ChefSpec
|
|
77
77
|
Chef::Config[:role_path] = Array(@options[:role_path])
|
78
78
|
Chef::Config[:force_logger] = true
|
79
79
|
Chef::Config[:solo] = true
|
80
|
+
Chef::Config[:environment_path] = @options[:environment_path]
|
80
81
|
|
81
82
|
yield node if block_given?
|
82
83
|
end
|
@@ -301,6 +302,7 @@ module ChefSpec
|
|
301
302
|
{
|
302
303
|
cookbook_path: config.cookbook_path || calling_cookbook_path(caller),
|
303
304
|
role_path: config.role_path || default_role_path,
|
305
|
+
environment_path: config.environment_path || default_environment_path,
|
304
306
|
log_level: config.log_level,
|
305
307
|
path: config.path,
|
306
308
|
platform: config.platform,
|
@@ -340,6 +342,20 @@ module ChefSpec
|
|
340
342
|
nil
|
341
343
|
end
|
342
344
|
|
345
|
+
#
|
346
|
+
# The inferred path to environments.
|
347
|
+
#
|
348
|
+
# @return [String, nil]
|
349
|
+
#
|
350
|
+
def default_environment_path
|
351
|
+
Pathname.new(Dir.pwd).ascend do |path|
|
352
|
+
possible = File.join(path, 'environments')
|
353
|
+
return possible if File.exist?(possible)
|
354
|
+
end
|
355
|
+
|
356
|
+
nil
|
357
|
+
end
|
358
|
+
|
343
359
|
#
|
344
360
|
# The +Chef::Client+ for this runner.
|
345
361
|
#
|
data/lib/chefspec/version.rb
CHANGED
@@ -16,6 +16,7 @@ describe ChefSpec::Runner do
|
|
16
16
|
it 'prints a deprecation' do
|
17
17
|
expect(ChefSpec::Runner).to receive(:deprecated)
|
18
18
|
.with("`ChefSpec::Runner.define_runner_method' is deprecated. "\
|
19
|
+
"It is being used in the my_custom_resource resource matcher." \
|
19
20
|
"Please use `ChefSpec.define_matcher' instead.")
|
20
21
|
ChefSpec::Runner.define_runner_method(:my_custom_resource)
|
21
22
|
end
|
@@ -104,6 +104,7 @@ describe ChefSpec::SoloRunner do
|
|
104
104
|
context 'RSpec global configuration' do
|
105
105
|
before do
|
106
106
|
allow(RSpec.configuration).to receive(:cookbook_path).and_return('./path')
|
107
|
+
allow(RSpec.configuration).to receive(:environment_path).and_return('./env-path')
|
107
108
|
allow(RSpec.configuration).to receive(:log_level).and_return(:fatal)
|
108
109
|
allow(RSpec.configuration).to receive(:path).and_return('ohai.json')
|
109
110
|
allow(RSpec.configuration).to receive(:platform).and_return('ubuntu')
|
@@ -113,6 +114,7 @@ describe ChefSpec::SoloRunner do
|
|
113
114
|
it 'uses the RSpec values' do
|
114
115
|
options = described_class.new.options
|
115
116
|
expect(options[:cookbook_path]).to eq('./path')
|
117
|
+
expect(options[:environment_path]).to eq('./env-path')
|
116
118
|
expect(options[:log_level]).to eq(:fatal)
|
117
119
|
expect(options[:path]).to eq('ohai.json')
|
118
120
|
expect(options[:platform]).to eq('ubuntu')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chefspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.2.0.beta.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Crump
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-11-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chef
|
@@ -606,7 +606,7 @@ files:
|
|
606
606
|
- features/yum_package.feature
|
607
607
|
- gemfiles/chef-11.14.0.gemfile
|
608
608
|
- gemfiles/chef-11.16.0.gemfile
|
609
|
-
- gemfiles/chef-12.0.0.
|
609
|
+
- gemfiles/chef-12.0.0.rc.gemfile
|
610
610
|
- gemfiles/chef-master.gemfile
|
611
611
|
- lib/chefspec.rb
|
612
612
|
- lib/chefspec/api.rb
|
@@ -662,6 +662,7 @@ files:
|
|
662
662
|
- lib/chefspec/api/yum_package.rb
|
663
663
|
- lib/chefspec/berkshelf.rb
|
664
664
|
- lib/chefspec/cacher.rb
|
665
|
+
- lib/chefspec/chef_backwards_compat.rb
|
665
666
|
- lib/chefspec/coverage.rb
|
666
667
|
- lib/chefspec/coverage/filters.rb
|
667
668
|
- lib/chefspec/deprecations.rb
|
@@ -755,12 +756,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
755
756
|
version: '1.9'
|
756
757
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
757
758
|
requirements:
|
758
|
-
- - "
|
759
|
+
- - ">"
|
759
760
|
- !ruby/object:Gem::Version
|
760
|
-
version:
|
761
|
+
version: 1.3.1
|
761
762
|
requirements: []
|
762
763
|
rubyforge_project:
|
763
|
-
rubygems_version: 2.
|
764
|
+
rubygems_version: 2.2.2
|
764
765
|
signing_key:
|
765
766
|
specification_version: 4
|
766
767
|
summary: Write RSpec examples and generate coverage reports for Chef recipes!
|