chefspec 2.0.1 → 3.0.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/chefspec.rb +30 -44
- data/lib/chefspec/api.rb +74 -0
- data/lib/chefspec/api/apt_package.rb +192 -0
- data/lib/chefspec/api/batch.rb +43 -0
- data/lib/chefspec/api/chef_gem.rb +191 -0
- data/lib/chefspec/api/cookbook_file.rb +166 -0
- data/lib/chefspec/api/cron.rb +80 -0
- data/lib/chefspec/api/deploy.rb +117 -0
- data/lib/chefspec/api/directory.rb +80 -0
- data/lib/chefspec/api/dpkg_package.rb +117 -0
- data/lib/chefspec/api/easy_install_package.rb +154 -0
- data/lib/chefspec/api/env.rb +117 -0
- data/lib/chefspec/api/erl_call.rb +43 -0
- data/lib/chefspec/api/execute.rb +43 -0
- data/lib/chefspec/api/file.rb +166 -0
- data/lib/chefspec/api/freebsd_package.rb +80 -0
- data/lib/chefspec/api/gem_package.rb +191 -0
- data/lib/chefspec/api/git.rb +117 -0
- data/lib/chefspec/api/group.rb +154 -0
- data/lib/chefspec/api/http_request.rb +228 -0
- data/lib/chefspec/api/ifconfig.rb +154 -0
- data/lib/chefspec/api/include_recipe.rb +26 -0
- data/lib/chefspec/api/ips_package.rb +117 -0
- data/lib/chefspec/api/link.rb +102 -0
- data/lib/chefspec/api/log.rb +43 -0
- data/lib/chefspec/api/macports_package.rb +154 -0
- data/lib/chefspec/api/mdadm.rb +117 -0
- data/lib/chefspec/api/mount.rb +192 -0
- data/lib/chefspec/api/notifications.rb +38 -0
- data/lib/chefspec/api/ohai.rb +43 -0
- data/lib/chefspec/api/package.rb +192 -0
- data/lib/chefspec/api/pacman_package.rb +155 -0
- data/lib/chefspec/api/portage_package.rb +155 -0
- data/lib/chefspec/api/powershell_script.rb +43 -0
- data/lib/chefspec/api/registry_key.rb +166 -0
- data/lib/chefspec/api/remote_directory.rb +120 -0
- data/lib/chefspec/api/remote_file.rb +166 -0
- data/lib/chefspec/api/render_file.rb +32 -0
- data/lib/chefspec/api/route.rb +80 -0
- data/lib/chefspec/api/rpm_package.rb +117 -0
- data/lib/chefspec/api/ruby_block.rb +37 -0
- data/lib/chefspec/api/script.rb +228 -0
- data/lib/chefspec/api/service.rb +246 -0
- data/lib/chefspec/api/smartos_package.rb +117 -0
- data/lib/chefspec/api/solaris_package.rb +80 -0
- data/lib/chefspec/api/subversion.rb +154 -0
- data/lib/chefspec/api/template.rb +166 -0
- data/lib/chefspec/api/user.rb +228 -0
- data/lib/chefspec/api/yum_package.rb +154 -0
- data/lib/chefspec/berkshelf.rb +37 -0
- data/lib/chefspec/deprecations.rb +151 -0
- data/lib/chefspec/errors.rb +99 -0
- data/lib/chefspec/expect_exception.rb +45 -0
- data/lib/chefspec/extensions/chef/client.rb +15 -0
- data/lib/chefspec/extensions/chef/conditional.rb +11 -0
- data/lib/chefspec/extensions/chef/data_query.rb +29 -0
- data/lib/chefspec/extensions/chef/lwrp_base.rb +44 -0
- data/lib/chefspec/extensions/chef/resource.rb +27 -0
- data/lib/chefspec/extensions/chef/securable.rb +19 -0
- data/lib/chefspec/formatter.rb +270 -0
- data/lib/chefspec/macros.rb +217 -0
- data/lib/chefspec/matchers.rb +9 -0
- data/lib/chefspec/matchers/include_recipe_matcher.rb +45 -0
- data/lib/chefspec/matchers/link_to_matcher.rb +28 -0
- data/lib/chefspec/matchers/notifications_matcher.rb +92 -0
- data/lib/chefspec/matchers/render_file_matcher.rb +72 -0
- data/lib/chefspec/matchers/resource_matcher.rb +143 -0
- data/lib/chefspec/renderer.rb +137 -0
- data/lib/chefspec/rspec.rb +17 -0
- data/lib/chefspec/runner.rb +274 -0
- data/lib/chefspec/stubs/command_registry.rb +11 -0
- data/lib/chefspec/stubs/command_stub.rb +37 -0
- data/lib/chefspec/stubs/data_bag_item_registry.rb +13 -0
- data/lib/chefspec/stubs/data_bag_item_stub.rb +25 -0
- data/lib/chefspec/stubs/data_bag_registry.rb +13 -0
- data/lib/chefspec/stubs/data_bag_stub.rb +23 -0
- data/lib/chefspec/stubs/registry.rb +32 -0
- data/lib/chefspec/stubs/search_registry.rb +13 -0
- data/lib/chefspec/stubs/search_stub.rb +25 -0
- data/lib/chefspec/stubs/stub.rb +37 -0
- data/lib/chefspec/version.rb +1 -2
- metadata +100 -103
- data/lib/chef/expect_exception.rb +0 -34
- data/lib/chef/formatters/chefspec.rb +0 -233
- data/lib/chef/knife/cookbook_create_specs.rb +0 -107
- data/lib/chefspec/chef_runner.rb +0 -275
- data/lib/chefspec/helpers/describe.rb +0 -17
- data/lib/chefspec/matchers/cron.rb +0 -7
- data/lib/chefspec/matchers/env.rb +0 -8
- data/lib/chefspec/matchers/execute.rb +0 -33
- data/lib/chefspec/matchers/file.rb +0 -83
- data/lib/chefspec/matchers/file_content.rb +0 -32
- data/lib/chefspec/matchers/group.rb +0 -8
- data/lib/chefspec/matchers/include_recipe.rb +0 -20
- data/lib/chefspec/matchers/link.rb +0 -14
- data/lib/chefspec/matchers/log.rb +0 -21
- data/lib/chefspec/matchers/notifications.rb +0 -43
- data/lib/chefspec/matchers/package.rb +0 -39
- data/lib/chefspec/matchers/python.rb +0 -7
- data/lib/chefspec/matchers/ruby_block.rb +0 -13
- data/lib/chefspec/matchers/script.rb +0 -34
- data/lib/chefspec/matchers/service.rb +0 -25
- data/lib/chefspec/matchers/shared.rb +0 -132
- data/lib/chefspec/matchers/user.rb +0 -8
- data/lib/chefspec/minitest.rb +0 -195
- data/lib/chefspec/monkey_patches/conditional.rb +0 -19
- data/lib/chefspec/monkey_patches/hash.rb +0 -23
- data/lib/chefspec/monkey_patches/lwrp_base.rb +0 -45
- data/lib/chefspec/monkey_patches/provider.rb +0 -43
@@ -1,83 +0,0 @@
|
|
1
|
-
require 'chefspec/matchers/shared'
|
2
|
-
|
3
|
-
module ChefSpec
|
4
|
-
module Matchers
|
5
|
-
|
6
|
-
define_resource_matchers([:create, :delete], [:file, :directory, :cookbook_file], :path)
|
7
|
-
|
8
|
-
RSpec::Matchers.define :be_owned_by do |user, group|
|
9
|
-
match do |file|
|
10
|
-
file.nil? ? false : file.owner == user and file.group == group
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
{:create_remote_file => [:create], :create_remote_file_if_missing => [:create_if_missing]}.each do |matcher, corr_action|
|
15
|
-
RSpec::Matchers.define matcher do |path|
|
16
|
-
match do |chef_run|
|
17
|
-
if @attributes
|
18
|
-
chef_run.resources.any? do |resource|
|
19
|
-
expected_remote_file?(resource,path,corr_action) &&
|
20
|
-
expected_attributes?(resource)
|
21
|
-
end
|
22
|
-
else
|
23
|
-
chef_run.resources.any? do |resource|
|
24
|
-
expected_remote_file?(resource,path,corr_action)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
chain :with do |attributes|
|
30
|
-
@attributes = attributes
|
31
|
-
end
|
32
|
-
|
33
|
-
def expected_remote_file?(resource,path,corr_action)
|
34
|
-
resource_type(resource) == 'remote_file' &&
|
35
|
-
resource.path == path &&
|
36
|
-
!(corr_action & Array(resource.action).map(&:to_sym)).empty?
|
37
|
-
end
|
38
|
-
|
39
|
-
def expected_attributes?(resource)
|
40
|
-
@attributes.all? do |attribute,expected|
|
41
|
-
actual = resource.send(attribute)
|
42
|
-
attribute.to_sym == :source ? equal_source?(actual, expected) :
|
43
|
-
actual == expected
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# Compare two remote_file source attributes for equality.
|
48
|
-
#
|
49
|
-
# @param actual [String, Array<String>] The actual source.
|
50
|
-
# @param expected [String, Array<String>] The expected source.
|
51
|
-
# @return [Boolean] true if they are equal or false if not.
|
52
|
-
def equal_source?(actual, expected)
|
53
|
-
# NOTE: Chef stores the source attribute internally as an array since
|
54
|
-
# version 11 in order to support mirrors.
|
55
|
-
# (see http://docs.opscode.com/breaking_changes_chef_11.html#remote-file-mirror-support-may-break-subclasses)
|
56
|
-
|
57
|
-
# Handle wrong formated expectation for Chef versions >= 11.
|
58
|
-
if actual.is_a?(Array) && expected.is_a?(String)
|
59
|
-
actual == [expected]
|
60
|
-
|
61
|
-
# Handle wrong formated expectation for Chef versions < 11.
|
62
|
-
elsif actual.is_a?(String) && expected.is_a?(Array)
|
63
|
-
[actual] == expected
|
64
|
-
|
65
|
-
# Else assume the actual matches the expected type (String or Array).
|
66
|
-
else
|
67
|
-
actual == expected
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
failure_message_for_should do |actual|
|
72
|
-
message = "No remote_file named '#{path}' for action #{corr_action} found"
|
73
|
-
message << " with:\n#{@attributes}" unless @attributes.nil?
|
74
|
-
message
|
75
|
-
end
|
76
|
-
|
77
|
-
failure_message_for_should_not do |actual|
|
78
|
-
"Found remote_file named '#{path}' that should not exist."
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'chefspec/matchers/shared'
|
2
|
-
|
3
|
-
module ChefSpec
|
4
|
-
module Matchers
|
5
|
-
RSpec::Matchers.define :create_file_with_content do |path, expected|
|
6
|
-
match do |chef_run|
|
7
|
-
chef_run.resources.select { |resource| resource.name == path }.any? do |resource|
|
8
|
-
unless ([:create, :create_if_missing] & Array(resource.action).map(&:to_sym)).empty?
|
9
|
-
@actual_content = case resource_type(resource)
|
10
|
-
when 'template'
|
11
|
-
content_from_template(chef_run, resource)
|
12
|
-
when 'file'
|
13
|
-
content_from_file(chef_run, resource)
|
14
|
-
when 'cookbook_file'
|
15
|
-
content_from_cookbook_file(chef_run, resource)
|
16
|
-
end
|
17
|
-
|
18
|
-
if expected.is_a?(Regexp)
|
19
|
-
@actual_content.to_s =~ expected
|
20
|
-
else
|
21
|
-
@actual_content.to_s.include?(expected)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
failure_message_for_should do |actual|
|
28
|
-
"File content:\n#{@actual_content} does not match expected:\n#{expected}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'chefspec/matchers/shared'
|
2
|
-
|
3
|
-
module ChefSpec
|
4
|
-
module Matchers
|
5
|
-
RSpec::Matchers.define :include_recipe do |expected_recipe|
|
6
|
-
match do |chef_run|
|
7
|
-
if chef_run.run_context.respond_to?(:loaded_recipe?)
|
8
|
-
chef_run.run_context.loaded_recipe?(expected_recipe) # Chef 11+
|
9
|
-
else
|
10
|
-
chef_run.node.run_state[:seen_recipes].include?(expected_recipe) # Chef 10 and lower
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
failure_message_for_should do |chef_run|
|
15
|
-
"expected: ['#{expected_recipe}']\n" +
|
16
|
-
" got: #{chef_run.run_context.respond_to?(:loaded_recipes) ? chef_run.run_context.loaded_recipes : chef_run.node.run_state[:seen_recipes]}"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'chefspec/matchers/shared'
|
2
|
-
|
3
|
-
module ChefSpec
|
4
|
-
module Matchers
|
5
|
-
|
6
|
-
define_resource_matchers([:create, :delete], [:link], :target_file)
|
7
|
-
|
8
|
-
RSpec::Matchers.define :link_to do |path|
|
9
|
-
match do |link|
|
10
|
-
link.nil? ? false : link.to == path
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'chefspec/matchers/shared'
|
2
|
-
|
3
|
-
module ChefSpec
|
4
|
-
# RSpec Matchers
|
5
|
-
module Matchers
|
6
|
-
RSpec::Matchers.define :log do |message|
|
7
|
-
match do |chef_run|
|
8
|
-
chef_run.resources.any? do |resource|
|
9
|
-
if resource_type(resource) != 'log'
|
10
|
-
false
|
11
|
-
elsif resource.respond_to?(:message)
|
12
|
-
# Chef 10.18 added message attribute to the log resource
|
13
|
-
message === resource.message
|
14
|
-
else
|
15
|
-
message === resource.name
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'chefspec/matchers/shared'
|
2
|
-
|
3
|
-
module ChefSpec
|
4
|
-
module Matchers
|
5
|
-
|
6
|
-
|
7
|
-
RSpec::Matchers.define :notify do |expected_resource,expected_resource_action|
|
8
|
-
|
9
|
-
expected_resource.match(/^([^\[]*)\[(.*)\]$/)
|
10
|
-
expected_resource_name = $2
|
11
|
-
expected_resource_type = $1
|
12
|
-
match do |actual_resource|
|
13
|
-
notifications = actual_resource.delayed_notifications
|
14
|
-
notifications+= actual_resource.immediate_notifications
|
15
|
-
notifications.any? do |rs|
|
16
|
-
|
17
|
-
actual_resource_name = rs.resource.name.to_s
|
18
|
-
actual_resource_type = rs.resource.resource_name.to_s
|
19
|
-
actual_resource_action = rs.action
|
20
|
-
|
21
|
-
(actual_resource_name == expected_resource_name) and
|
22
|
-
(actual_resource_type == expected_resource_type) and
|
23
|
-
(actual_resource_action.to_s == expected_resource_action.to_s)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
failure_message_for_should do |actual_resource|
|
28
|
-
"expected: ['#{expected_resource_action}, #{expected_resource}']\n" +
|
29
|
-
" got: #{format_notifications(actual_resource)} "
|
30
|
-
end
|
31
|
-
|
32
|
-
def format_notifications(resource)
|
33
|
-
notifications = resource.delayed_notifications
|
34
|
-
notifications += resource.immediate_notifications
|
35
|
-
msg="["
|
36
|
-
notifications.each do |res|
|
37
|
-
msg+= "'#{res.action}, #{res.resource.resource_name}[#{res.resource.name}]'"
|
38
|
-
end
|
39
|
-
msg+="]"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'chefspec/matchers/shared'
|
2
|
-
|
3
|
-
module ChefSpec
|
4
|
-
module Matchers
|
5
|
-
define_resource_matchers([:install, :remove, :upgrade, :purge], [:package, :gem_package, :chef_gem, :yum_package], :package_name)
|
6
|
-
|
7
|
-
RSpec::Matchers.define :install_package_at_version do |package_name, version|
|
8
|
-
match do |chef_run|
|
9
|
-
chef_run.resources.any? do |resource|
|
10
|
-
resource_type(resource) == 'package' and resource.package_name == package_name and resource.action.to_s.include? 'install' and resource.version == version
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
RSpec::Matchers.define :install_yum_package_at_version do |package_name, version|
|
16
|
-
match do |chef_run|
|
17
|
-
chef_run.resources.any? do |resource|
|
18
|
-
resource_type(resource) == 'yum_package' and resource.package_name == package_name and resource.action.to_s.include? 'install' and resource.version == version
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
RSpec::Matchers.define :install_gem_package_at_version do |package_name, version|
|
24
|
-
match do |chef_run|
|
25
|
-
chef_run.resources.any? do |resource|
|
26
|
-
resource_type(resource) == 'gem_package' and resource.package_name == package_name and resource.action.to_s.include? 'install' and resource.version == version
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
RSpec::Matchers.define :install_chef_gem_at_version do |package_name, version|
|
32
|
-
match do |chef_run|
|
33
|
-
chef_run.resources.any? do |resource|
|
34
|
-
resource_type(resource) == 'chef_gem' and resource.package_name == package_name and resource.action.to_s.include? 'install' and resource.version == version
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'chefspec/matchers/shared'
|
2
|
-
|
3
|
-
module ChefSpec
|
4
|
-
module Matchers
|
5
|
-
RSpec::Matchers.define :execute_ruby_block do |block_name|
|
6
|
-
match do |chef_run|
|
7
|
-
chef_run.resources.any? do |resource|
|
8
|
-
resource_type(resource) == 'ruby_block' and block_name === resource.name
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'chefspec/matchers/shared'
|
2
|
-
|
3
|
-
module ChefSpec
|
4
|
-
module Matchers
|
5
|
-
%w(bash csh perl python ruby).each do |interpreter|
|
6
|
-
RSpec::Matchers.define "execute_#{interpreter}_script".to_sym do |name|
|
7
|
-
match do |chef_run|
|
8
|
-
if @attributes
|
9
|
-
chef_run.resources.any? do |resource|
|
10
|
-
(resource_type(resource) == interpreter ||
|
11
|
-
(resource_type(resource) == 'script' && resource.interpreter == interpreter)) &&
|
12
|
-
resource.name == name &&
|
13
|
-
expected_attributes?(resource)
|
14
|
-
end
|
15
|
-
else
|
16
|
-
chef_run.resources.any? do |resource|
|
17
|
-
(resource_type(resource) == interpreter ||
|
18
|
-
(resource_type(resource) == 'script' && resource.interpreter == interpreter)) &&
|
19
|
-
resource.name == name
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
chain :with do |attributes|
|
25
|
-
@attributes = attributes
|
26
|
-
end
|
27
|
-
|
28
|
-
def expected_attributes?(resource)
|
29
|
-
@attributes.all? { |k,v| v === resource.send(k) }
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'chefspec/matchers/shared'
|
2
|
-
|
3
|
-
module ChefSpec
|
4
|
-
module Matchers
|
5
|
-
|
6
|
-
define_resource_matchers([:start, :stop, :restart, :reload, :nothing, :enable, :disable], [:service], :service_name)
|
7
|
-
|
8
|
-
RSpec::Matchers.define :set_service_to_start_on_boot do |service|
|
9
|
-
match do |chef_run|
|
10
|
-
chef_run.resources.any? do |resource|
|
11
|
-
resource_type(resource) == 'service' and resource.service_name == service and resource.action.include? :enable
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
RSpec::Matchers.define :set_service_to_not_start_on_boot do |service|
|
17
|
-
match do |chef_run|
|
18
|
-
chef_run.resources.any? do |resource|
|
19
|
-
resource_type(resource) == 'service' and resource.service_name == service and resource.action.include? :disable
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
@@ -1,132 +0,0 @@
|
|
1
|
-
begin
|
2
|
-
require 'chef/mixin/template'
|
3
|
-
require 'chef/provider/template_finder'
|
4
|
-
rescue LoadError
|
5
|
-
end
|
6
|
-
|
7
|
-
# Given a resource return the unqualified type it is
|
8
|
-
#
|
9
|
-
# @param [String] resource A Chef Resource
|
10
|
-
# @return [String] The resource type
|
11
|
-
def resource_type(resource)
|
12
|
-
resource.resource_name.to_s
|
13
|
-
end
|
14
|
-
|
15
|
-
# Given a resource return an array of action strings
|
16
|
-
#
|
17
|
-
# @param [String] resource A Chef Resource
|
18
|
-
# @return [Array] An array of actions as Strings
|
19
|
-
def resource_actions(resource)
|
20
|
-
resource.action.kind_of?(Array) ? resource.action.map{ |action| action.to_s } : [ resource.action.to_s ]
|
21
|
-
end
|
22
|
-
|
23
|
-
# Define simple RSpec matchers for the product of resource types and actions
|
24
|
-
#
|
25
|
-
# @param [Array] actions The valid actions - for example [:create, :delete]
|
26
|
-
# @param [Array] resource_types The resource types
|
27
|
-
# @param [Symbol] name_attribute The name attribute of the resource types
|
28
|
-
def define_resource_matchers(actions, resource_types, name_attribute)
|
29
|
-
actions.product(resource_types).flatten.each_slice(2) do |action, resource_type|
|
30
|
-
RSpec::Matchers.define "#{action}_#{resource_type}".to_sym do |name|
|
31
|
-
match do |chef_run|
|
32
|
-
accepted_types = [resource_type.to_s]
|
33
|
-
accepted_types += ['template', 'cookbook_file'] if action.to_s == 'create' and resource_type.to_s == 'file'
|
34
|
-
chef_run.resources.any? do |resource|
|
35
|
-
if (accepted_types.include? resource_type(resource) and
|
36
|
-
name === resource.send(name_attribute) and
|
37
|
-
resource_actions(resource).include? action.to_s)
|
38
|
-
@resource_name = resource.send(name_attribute)
|
39
|
-
true
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
failure_message_for_should do |actual|
|
44
|
-
"No #{resource_type} resource matching name '#{name}' with action :#{action} found."
|
45
|
-
end
|
46
|
-
failure_message_for_should_not do |actual|
|
47
|
-
"Found #{resource_type} resource named '#{@resource_name}' matching name: '#{name}' with action :#{action} that should not exist."
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
# Compute the contents of a template using Chef's templating logic.
|
54
|
-
#
|
55
|
-
# @param [Chef::RunContext] chef_run
|
56
|
-
# the run context for the node
|
57
|
-
# @param [Chef::Provider::Template] template
|
58
|
-
# the template resource
|
59
|
-
#
|
60
|
-
# @return [String]
|
61
|
-
def content_from_template(chef_run, template)
|
62
|
-
cookbook_name = template.cookbook || template.cookbook_name
|
63
|
-
template_location = cookbook_collection(chef_run.node)[cookbook_name].preferred_filename_on_disk_location(chef_run.node, :templates, template.source)
|
64
|
-
|
65
|
-
if Chef::Mixin::Template.const_defined?(:TemplateContext) # Chef 11+
|
66
|
-
template_context = Chef::Mixin::Template::TemplateContext.new([])
|
67
|
-
template_context.update({
|
68
|
-
:node => chef_run.node,
|
69
|
-
:template_finder => template_finder(chef_run, cookbook_name),
|
70
|
-
}.merge(template.variables))
|
71
|
-
template_context.render_template(template_location)
|
72
|
-
else
|
73
|
-
template.provider.new(template, chef_run.run_context).send(:render_with_context, template_location) do |file|
|
74
|
-
File.read(file.path)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# Get the contents of a file resource.
|
80
|
-
#
|
81
|
-
# @param [Chef::RunContext] chef_run
|
82
|
-
# the run context for the node
|
83
|
-
# @param [Chef::Provider::File] file
|
84
|
-
# the file resource
|
85
|
-
#
|
86
|
-
# @return [String]
|
87
|
-
def content_from_file(chef_run, file)
|
88
|
-
file.content
|
89
|
-
end
|
90
|
-
|
91
|
-
# Get the contents of a cookbook file using Chef.
|
92
|
-
#
|
93
|
-
# @param [Chef::RunContext] chef_run
|
94
|
-
# the run context for the node
|
95
|
-
# @param [Chef::Provider::CookbookFile] cookbook_file
|
96
|
-
# the file resource
|
97
|
-
def content_from_cookbook_file(chef_run, cookbook_file)
|
98
|
-
cookbook_name = cookbook_file.cookbook || cookbook_file.cookbook_name
|
99
|
-
cookbook = chef_run.run_context.cookbook_collection[cookbook_name]
|
100
|
-
File.read(cookbook.preferred_filename_on_disk_location(chef_run.node, :files, cookbook_file.source, cookbook_file.path))
|
101
|
-
end
|
102
|
-
|
103
|
-
# The cookbook collection for the current Chef run context. Handles
|
104
|
-
# the differing cases between Chef 10 and Chef 11.
|
105
|
-
#
|
106
|
-
# @param [Chef::Node] node
|
107
|
-
# the Chef node to get the cookbook collection from
|
108
|
-
#
|
109
|
-
# @return [Array<Chef::Cookbook>]
|
110
|
-
def cookbook_collection(node)
|
111
|
-
if node.respond_to?(:run_context)
|
112
|
-
node.run_context.cookbook_collection # Chef 11+
|
113
|
-
else
|
114
|
-
node.cookbook_collection # Chef 10
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
# Return a new instance of the TemplateFinder if we are running on Chef 11.
|
119
|
-
#
|
120
|
-
# @param [Chef::RunContext] chef_run
|
121
|
-
# the run context for the noe
|
122
|
-
# @param [String] cookbook_name
|
123
|
-
# the name of the cookbook
|
124
|
-
#
|
125
|
-
# @return [Chef::Provider::TemplateFinder, nil]
|
126
|
-
def template_finder(chef_run, cookbook_name)
|
127
|
-
if Chef::Provider.const_defined?(:TemplateFinder) # Chef 11+
|
128
|
-
Chef::Provider::TemplateFinder.new(chef_run.run_context, cookbook_name, chef_run.node)
|
129
|
-
else
|
130
|
-
nil
|
131
|
-
end
|
132
|
-
end
|