chef-helpers 0.0.4 → 0.0.5

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.
@@ -0,0 +1,98 @@
1
+ require 'chef/recipe'
2
+ require 'chef/resource/file'
3
+
4
+ module ChefHelpers
5
+ # Provides means for checking whether a template or cookbook file
6
+ # exist in a recipe, or directly in a resource definition.
7
+ module HasSource
8
+ # Checks for existence of a cookbook file or template source in a cookbook.
9
+ # @param [String] source name of the desired template or cookbook file source
10
+ # @param [Symbol] segment `:files` or `:templates`
11
+ # @param [String, nil] cookbook to look in, defaults to current cookbook
12
+ # @return [String, nil] full path to the source or `nil` if it doesn't exist
13
+ # @example
14
+ # has_source?("foo.erb", :templates)
15
+ # has_source?("bar.conf", :files, "a_cookbook")
16
+ def has_source?(source, segment, cookbook=nil)
17
+ cookbook ||= cookbook_name
18
+ begin
19
+ run_context.cookbook_collection[cookbook].
20
+ preferred_filename_on_disk_location(run_context.node, segment, src)
21
+ rescue Chef::Exceptions::FileNotFound
22
+ nil
23
+ end
24
+ end
25
+
26
+ # Checks for existence of a template source in a cookbook.
27
+ # @param [String] tmpl name of the template source
28
+ # @param [String,nil] cookbook cookbook to look in, defaults to current cookbook
29
+ # @return [String,nil] full path to the template source or `nil`
30
+ # @see #has_source?
31
+ def has_template?(tmpl, cookbook=nil)
32
+ has_source?(tmpl, :templates, cookbook)
33
+ end
34
+
35
+ # Checks for existence of a cookbook file in a cookbook.
36
+ # @param [String] cbf name of the cookbook file
37
+ # @param [String,nil] cookbook cookbook to look in, defaults to current cookbook
38
+ # @return [String,nil] full path to the template source or `nil`
39
+ # @see #has_source?
40
+ def has_cookbook_file?(cbf, cookbook=nil)
41
+ has_source?(tmpl, :files, cookbook)
42
+ end
43
+
44
+ # For a list of sources, returns first source that exist
45
+ # @param [Array<String>] sources list of source (template source
46
+ # or cookbook file) names to look for. Source name can include
47
+ # a cookbook name, e.g. `"mysql::my.cnf.erb"`
48
+ #
49
+ # Last parameter can be a `:templates` or `:files` keword, to
50
+ # indicate what kind of source to look for. If it is ommitted,
51
+ # and method is called in a `template` or `cookbook_file`
52
+ # resource block, it is automatically guessed; otherwise,
53
+ # `RuntimeError` is raised.
54
+ def try_sources(*sources)
55
+ segment =
56
+ if sources.last.is_a?(Symbol)
57
+ sources.pop
58
+ else
59
+ case self
60
+ when Chef::Resource::Template
61
+ :templates
62
+ when Chef::Resource::CookbookFile
63
+ :files
64
+ else
65
+ raise RuntimeError, "Please provide :templates or :files as last argument"
66
+ end
67
+ end
68
+ sources.find do |source|
69
+ if source =~ /::/
70
+ src, ckbk = $`, $'
71
+ else
72
+ src, ckbk = source, cookbook_name
73
+ end
74
+ has_source?(src, segment, ckbk)
75
+ end
76
+ end
77
+
78
+ # Return the first template source off the list that exists.
79
+ # @see #try_sources
80
+ def try_templates(*templates)
81
+ try_sources(templates, :templates)
82
+ end
83
+
84
+ # Return the first cookbook file off the list that exists.
85
+ # @see #try_sources
86
+ def try_files(*files)
87
+ try_sources(files, :files)
88
+ end
89
+ end
90
+ end
91
+
92
+ class Chef::Recipe
93
+ include ChefHelpers::HasSource
94
+ end
95
+
96
+ class Chef::Resource::File
97
+ include ChefHelpers::HasSource
98
+ end
@@ -1,3 +1,3 @@
1
1
  module ChefHelpers
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -42,6 +42,7 @@ files:
42
42
  - Rakefile
43
43
  - chef-helpers.gemspec
44
44
  - lib/chef-helpers.rb
45
+ - lib/chef-helpers/has_source.rb
45
46
  - lib/chef-helpers/node.rb
46
47
  - lib/chef-helpers/version.rb
47
48
  homepage: https://github.com/3ofcoins/chef-helpers/
@@ -58,7 +59,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
58
59
  version: '0'
59
60
  segments:
60
61
  - 0
61
- hash: -2511474728520866267
62
+ hash: 841325784782894157
62
63
  required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  none: false
64
65
  requirements:
@@ -67,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
68
  version: '0'
68
69
  segments:
69
70
  - 0
70
- hash: -2511474728520866267
71
+ hash: 841325784782894157
71
72
  requirements: []
72
73
  rubyforge_project:
73
74
  rubygems_version: 1.8.24