runa-chef 0.8.0.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.
Files changed (216) hide show
  1. data/LICENSE +201 -0
  2. data/README.rdoc +136 -0
  3. data/bin/chef-client +26 -0
  4. data/bin/chef-solo +26 -0
  5. data/bin/knife +27 -0
  6. data/bin/shef +45 -0
  7. data/distro/README +2 -0
  8. data/distro/common/man/man1/chef-indexer.1 +42 -0
  9. data/distro/common/man/man1/chef-server.1 +108 -0
  10. data/distro/common/man/man8/chef-client.8 +61 -0
  11. data/distro/common/man/man8/chef-solo.8 +58 -0
  12. data/distro/common/man/man8/knife.8 +359 -0
  13. data/distro/debian/etc/init.d/chef-client +175 -0
  14. data/distro/debian/etc/init.d/chef-indexer +175 -0
  15. data/distro/debian/etc/init.d/chef-server +120 -0
  16. data/distro/redhat/etc/init.d/chef-client +78 -0
  17. data/distro/redhat/etc/init.d/chef-indexer +76 -0
  18. data/distro/redhat/etc/init.d/chef-server +78 -0
  19. data/distro/redhat/etc/sysconfig/chef-client +10 -0
  20. data/distro/redhat/etc/sysconfig/chef-indexer +8 -0
  21. data/distro/redhat/etc/sysconfig/chef-server +10 -0
  22. data/distro/suse/etc/init.d/chef-client +121 -0
  23. data/lib/chef.rb +49 -0
  24. data/lib/chef/api_client.rb +269 -0
  25. data/lib/chef/application.rb +98 -0
  26. data/lib/chef/application/agent.rb +18 -0
  27. data/lib/chef/application/client.rb +214 -0
  28. data/lib/chef/application/knife.rb +138 -0
  29. data/lib/chef/application/server.rb +19 -0
  30. data/lib/chef/application/solo.rb +214 -0
  31. data/lib/chef/cache.rb +61 -0
  32. data/lib/chef/cache/checksum.rb +70 -0
  33. data/lib/chef/certificate.rb +154 -0
  34. data/lib/chef/client.rb +323 -0
  35. data/lib/chef/compile.rb +158 -0
  36. data/lib/chef/config.rb +195 -0
  37. data/lib/chef/cookbook.rb +198 -0
  38. data/lib/chef/cookbook/metadata.rb +487 -0
  39. data/lib/chef/cookbook/metadata/version.rb +87 -0
  40. data/lib/chef/cookbook_loader.rb +180 -0
  41. data/lib/chef/couchdb.rb +273 -0
  42. data/lib/chef/daemon.rb +170 -0
  43. data/lib/chef/data_bag.rb +216 -0
  44. data/lib/chef/data_bag_item.rb +227 -0
  45. data/lib/chef/exceptions.rb +39 -0
  46. data/lib/chef/file_cache.rb +205 -0
  47. data/lib/chef/knife.rb +300 -0
  48. data/lib/chef/knife/client_bulk_delete.rb +41 -0
  49. data/lib/chef/knife/client_create.rb +55 -0
  50. data/lib/chef/knife/client_delete.rb +37 -0
  51. data/lib/chef/knife/client_edit.rb +37 -0
  52. data/lib/chef/knife/client_list.rb +40 -0
  53. data/lib/chef/knife/client_reregister.rb +48 -0
  54. data/lib/chef/knife/client_show.rb +42 -0
  55. data/lib/chef/knife/configure.rb +84 -0
  56. data/lib/chef/knife/cookbook_bulk_delete.rb +47 -0
  57. data/lib/chef/knife/cookbook_delete.rb +41 -0
  58. data/lib/chef/knife/cookbook_download.rb +57 -0
  59. data/lib/chef/knife/cookbook_list.rb +41 -0
  60. data/lib/chef/knife/cookbook_metadata.rb +87 -0
  61. data/lib/chef/knife/cookbook_show.rb +75 -0
  62. data/lib/chef/knife/cookbook_upload.rb +173 -0
  63. data/lib/chef/knife/data_bag_create.rb +43 -0
  64. data/lib/chef/knife/data_bag_delete.rb +43 -0
  65. data/lib/chef/knife/data_bag_edit.rb +49 -0
  66. data/lib/chef/knife/data_bag_list.rb +42 -0
  67. data/lib/chef/knife/data_bag_show.rb +40 -0
  68. data/lib/chef/knife/ec2_instance_data.rb +46 -0
  69. data/lib/chef/knife/node_bulk_delete.rb +44 -0
  70. data/lib/chef/knife/node_create.rb +39 -0
  71. data/lib/chef/knife/node_delete.rb +36 -0
  72. data/lib/chef/knife/node_edit.rb +36 -0
  73. data/lib/chef/knife/node_from_file.rb +42 -0
  74. data/lib/chef/knife/node_list.rb +41 -0
  75. data/lib/chef/knife/node_run_list_add.rb +64 -0
  76. data/lib/chef/knife/node_run_list_remove.rb +45 -0
  77. data/lib/chef/knife/node_show.rb +46 -0
  78. data/lib/chef/knife/role_bulk_delete.rb +45 -0
  79. data/lib/chef/knife/role_create.rb +44 -0
  80. data/lib/chef/knife/role_delete.rb +36 -0
  81. data/lib/chef/knife/role_edit.rb +37 -0
  82. data/lib/chef/knife/role_from_file.rb +46 -0
  83. data/lib/chef/knife/role_list.rb +40 -0
  84. data/lib/chef/knife/role_show.rb +43 -0
  85. data/lib/chef/knife/search.rb +94 -0
  86. data/lib/chef/log.rb +39 -0
  87. data/lib/chef/mixin/check_helper.rb +31 -0
  88. data/lib/chef/mixin/checksum.rb +32 -0
  89. data/lib/chef/mixin/command.rb +390 -0
  90. data/lib/chef/mixin/convert_to_class_name.rb +57 -0
  91. data/lib/chef/mixin/create_path.rb +56 -0
  92. data/lib/chef/mixin/deep_merge.rb +33 -0
  93. data/lib/chef/mixin/find_preferred_file.rb +92 -0
  94. data/lib/chef/mixin/from_file.rb +50 -0
  95. data/lib/chef/mixin/generate_url.rb +58 -0
  96. data/lib/chef/mixin/language.rb +107 -0
  97. data/lib/chef/mixin/language_include_attribute.rb +56 -0
  98. data/lib/chef/mixin/language_include_recipe.rb +53 -0
  99. data/lib/chef/mixin/params_validate.rb +197 -0
  100. data/lib/chef/mixin/recipe_definition_dsl_core.rb +79 -0
  101. data/lib/chef/mixin/template.rb +94 -0
  102. data/lib/chef/nanite.rb +100 -0
  103. data/lib/chef/node.rb +463 -0
  104. data/lib/chef/node/attribute.rb +412 -0
  105. data/lib/chef/openid_registration.rb +181 -0
  106. data/lib/chef/platform.rb +268 -0
  107. data/lib/chef/provider.rb +101 -0
  108. data/lib/chef/provider/breakpoint.rb +36 -0
  109. data/lib/chef/provider/cron.rb +184 -0
  110. data/lib/chef/provider/deploy.rb +314 -0
  111. data/lib/chef/provider/deploy/revision.rb +70 -0
  112. data/lib/chef/provider/deploy/timestamped.rb +33 -0
  113. data/lib/chef/provider/directory.rb +72 -0
  114. data/lib/chef/provider/erl_call.rb +72 -0
  115. data/lib/chef/provider/execute.rb +58 -0
  116. data/lib/chef/provider/file.rb +195 -0
  117. data/lib/chef/provider/git.rb +203 -0
  118. data/lib/chef/provider/group.rb +120 -0
  119. data/lib/chef/provider/group/dscl.rb +128 -0
  120. data/lib/chef/provider/group/gpasswd.rb +50 -0
  121. data/lib/chef/provider/group/groupadd.rb +78 -0
  122. data/lib/chef/provider/group/pw.rb +88 -0
  123. data/lib/chef/provider/group/usermod.rb +57 -0
  124. data/lib/chef/provider/http_request.rb +106 -0
  125. data/lib/chef/provider/ifconfig.rb +131 -0
  126. data/lib/chef/provider/link.rb +157 -0
  127. data/lib/chef/provider/mdadm.rb +88 -0
  128. data/lib/chef/provider/mount.rb +117 -0
  129. data/lib/chef/provider/mount/mount.rb +208 -0
  130. data/lib/chef/provider/package.rb +160 -0
  131. data/lib/chef/provider/package/apt.rb +110 -0
  132. data/lib/chef/provider/package/dpkg.rb +109 -0
  133. data/lib/chef/provider/package/easy_install.rb +106 -0
  134. data/lib/chef/provider/package/freebsd.rb +153 -0
  135. data/lib/chef/provider/package/macports.rb +105 -0
  136. data/lib/chef/provider/package/portage.rb +124 -0
  137. data/lib/chef/provider/package/rpm.rb +99 -0
  138. data/lib/chef/provider/package/rubygems.rb +136 -0
  139. data/lib/chef/provider/package/yum-dump.py +125 -0
  140. data/lib/chef/provider/package/yum.rb +175 -0
  141. data/lib/chef/provider/package/zypper.rb +132 -0
  142. data/lib/chef/provider/remote_directory.rb +126 -0
  143. data/lib/chef/provider/remote_file.rb +141 -0
  144. data/lib/chef/provider/route.rb +118 -0
  145. data/lib/chef/provider/ruby_block.rb +33 -0
  146. data/lib/chef/provider/script.rb +42 -0
  147. data/lib/chef/provider/service.rb +135 -0
  148. data/lib/chef/provider/service/debian.rb +64 -0
  149. data/lib/chef/provider/service/freebsd.rb +156 -0
  150. data/lib/chef/provider/service/gentoo.rb +54 -0
  151. data/lib/chef/provider/service/init.rb +71 -0
  152. data/lib/chef/provider/service/redhat.rb +62 -0
  153. data/lib/chef/provider/service/simple.rb +114 -0
  154. data/lib/chef/provider/subversion.rb +156 -0
  155. data/lib/chef/provider/template.rb +175 -0
  156. data/lib/chef/provider/user.rb +170 -0
  157. data/lib/chef/provider/user/dscl.rb +280 -0
  158. data/lib/chef/provider/user/pw.rb +113 -0
  159. data/lib/chef/provider/user/useradd.rb +108 -0
  160. data/lib/chef/recipe.rb +105 -0
  161. data/lib/chef/resource.rb +380 -0
  162. data/lib/chef/resource/apt_package.rb +34 -0
  163. data/lib/chef/resource/bash.rb +33 -0
  164. data/lib/chef/resource/breakpoint.rb +35 -0
  165. data/lib/chef/resource/cron.rb +179 -0
  166. data/lib/chef/resource/csh.rb +33 -0
  167. data/lib/chef/resource/deploy.rb +359 -0
  168. data/lib/chef/resource/deploy_revision.rb +35 -0
  169. data/lib/chef/resource/directory.rb +76 -0
  170. data/lib/chef/resource/dpkg_package.rb +34 -0
  171. data/lib/chef/resource/easy_install_package.rb +41 -0
  172. data/lib/chef/resource/erl_call.rb +83 -0
  173. data/lib/chef/resource/execute.rb +127 -0
  174. data/lib/chef/resource/file.rb +84 -0
  175. data/lib/chef/resource/gem_package.rb +41 -0
  176. data/lib/chef/resource/git.rb +36 -0
  177. data/lib/chef/resource/group.rb +70 -0
  178. data/lib/chef/resource/http_request.rb +52 -0
  179. data/lib/chef/resource/ifconfig.rb +134 -0
  180. data/lib/chef/resource/link.rb +78 -0
  181. data/lib/chef/resource/macports_package.rb +29 -0
  182. data/lib/chef/resource/mdadm.rb +82 -0
  183. data/lib/chef/resource/mount.rb +135 -0
  184. data/lib/chef/resource/package.rb +80 -0
  185. data/lib/chef/resource/perl.rb +33 -0
  186. data/lib/chef/resource/portage_package.rb +33 -0
  187. data/lib/chef/resource/python.rb +33 -0
  188. data/lib/chef/resource/remote_directory.rb +91 -0
  189. data/lib/chef/resource/remote_file.rb +60 -0
  190. data/lib/chef/resource/route.rb +135 -0
  191. data/lib/chef/resource/ruby.rb +33 -0
  192. data/lib/chef/resource/ruby_block.rb +39 -0
  193. data/lib/chef/resource/scm.rb +137 -0
  194. data/lib/chef/resource/script.rb +51 -0
  195. data/lib/chef/resource/service.rb +134 -0
  196. data/lib/chef/resource/subversion.rb +34 -0
  197. data/lib/chef/resource/template.rb +60 -0
  198. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  199. data/lib/chef/resource/user.rb +101 -0
  200. data/lib/chef/resource_collection.rb +212 -0
  201. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  202. data/lib/chef/resource_definition.rb +67 -0
  203. data/lib/chef/rest.rb +298 -0
  204. data/lib/chef/role.rb +301 -0
  205. data/lib/chef/run_list.rb +164 -0
  206. data/lib/chef/runner.rb +130 -0
  207. data/lib/chef/search/query.rb +71 -0
  208. data/lib/chef/shef.rb +220 -0
  209. data/lib/chef/shef/ext.rb +297 -0
  210. data/lib/chef/shef/shef_session.rb +175 -0
  211. data/lib/chef/streaming_cookbook_uploader.rb +185 -0
  212. data/lib/chef/tasks/chef_repo.rake +245 -0
  213. data/lib/chef/util/file_edit.rb +125 -0
  214. data/lib/chef/util/fileedit.rb +121 -0
  215. data/lib/chef/webui_user.rb +231 -0
  216. metadata +398 -0
@@ -0,0 +1,57 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Christopher Walters (<cw@opscode.com>)
4
+ # Copyright:: Copyright (c) 2008, 2009 Opscode, Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ class Chef
21
+ module Mixin
22
+ module ConvertToClassName
23
+
24
+ def convert_to_class_name(str)
25
+ rname = nil
26
+ regexp = %r{^(.+?)(_(.+))?$}
27
+
28
+ mn = str.match(regexp)
29
+ if mn
30
+ rname = mn[1].capitalize
31
+
32
+ while mn && mn[3]
33
+ mn = mn[3].match(regexp)
34
+ rname << mn[1].capitalize if mn
35
+ end
36
+ end
37
+
38
+ rname
39
+ end
40
+
41
+ def convert_to_snake_case(str, namespace=nil)
42
+ str = str.dup
43
+ str.sub!(/^#{namespace}(\:\:)?/, '') if namespace
44
+ str.gsub!(/[A-Z]/) {|s| "_" + s}
45
+ str.downcase!
46
+ str.sub!(/^\_/, "")
47
+ str
48
+ end
49
+
50
+ def filename_to_qualified_string(base, filename)
51
+ file_base = File.basename(filename, ".rb")
52
+ base.to_s + (file_base == 'default' ? '' : "_#{file_base}")
53
+ end
54
+
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,56 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ class Chef
19
+ module Mixin
20
+ module CreatePath
21
+
22
+ # Creates a given path, including all directories that lead up to it.
23
+ # Like mkdir_p, but without the leaking.
24
+ #
25
+ # === Parameters
26
+ # file_path<String, Array>:: A string that represents the path to create,
27
+ # or an Array with the path-parts.
28
+ #
29
+ # === Returns
30
+ # The created file_path.
31
+ def create_path(file_path)
32
+ unless file_path.kind_of?(String) || file_path.kind_of?(Array)
33
+ raise ArgumentError, "file_path must be a string or an array!"
34
+ end
35
+
36
+ if file_path.kind_of?(String)
37
+ file_path = File.expand_path(file_path).split(File::SEPARATOR)
38
+ file_path.shift if file_path[0] = ''
39
+ unless file_path[0].match("^#{File::SEPARATOR}")
40
+ file_path[0] = "#{File::SEPARATOR}#{file_path[0]}"
41
+ end
42
+ end
43
+
44
+ file_path.each_index do |i|
45
+ create_path = File.join(file_path[0, i + 1])
46
+ unless File.directory?(create_path)
47
+ Chef::Log.debug("Creating directory #{create_path}")
48
+ Dir.mkdir(create_path)
49
+ end
50
+ end
51
+ File.expand_path(File.join(file_path))
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,33 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2009 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require 'deep_merge'
19
+
20
+ class Chef
21
+ module Mixin
22
+ class DeepMerge
23
+ def self.merge(first, second)
24
+ first = Mash.new(first).to_hash unless second.kind_of?(Mash)
25
+ first = first.to_hash
26
+ second = Mash.new(second).to_hash unless second.kind_of?(Mash)
27
+ second = second.to_hash
28
+
29
+ Mash.new(first.ko_deep_merge!(second, {:knockout_prefix => '!merge:'}))
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,92 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/cookbook_loader'
20
+
21
+ class Chef
22
+ module Mixin
23
+ module FindPreferredFile
24
+
25
+ def load_cookbook_files(cookbook_id, file_type)
26
+ unless file_type == :remote_file || file_type == :template
27
+ raise ArgumentError, "You must supply :remote_file or :template as the file_type"
28
+ end
29
+
30
+ cl = Chef::CookbookLoader.new
31
+ cookbook = cl[cookbook_id]
32
+ raise NotFound unless cookbook
33
+
34
+ files = Hash.new
35
+
36
+ cookbook_method = nil
37
+
38
+ case file_type
39
+ when :remote_file
40
+ cookbook_method = :remote_files
41
+ when :template
42
+ cookbook_method = :template_files
43
+ end
44
+
45
+ cookbook.send(cookbook_method).each do |rf|
46
+ full = File.expand_path(rf)
47
+ name = File.basename(full)
48
+ case file_type
49
+ when :remote_file
50
+ rf =~ /^.+#{cookbook_id}[\\|\/]files[\\|\/](.+?)[\\|\/]#{name}/
51
+ when :template
52
+ rf =~ /^.+#{cookbook_id}[\\|\/]templates[\\|\/](.+?)[\\|\/]#{name}/
53
+ end
54
+ singlecopy = $1
55
+ files[full] = {
56
+ :name => name,
57
+ :singlecopy => singlecopy,
58
+ :file => full,
59
+ }
60
+ end
61
+ Chef::Log.debug("Preferred #{file_type} list: #{files.inspect}")
62
+
63
+ files
64
+ end
65
+
66
+ def find_preferred_file(cookbook_id, file_type, file_name, fqdn, platform, version)
67
+ file_list = load_cookbook_files(cookbook_id, file_type)
68
+
69
+ preferences = [
70
+ File.join("host-#{fqdn}", "#{file_name}"),
71
+ File.join("#{platform}-#{version}", "#{file_name}"),
72
+ File.join("#{platform}", "#{file_name}"),
73
+ File.join("default", "#{file_name}")
74
+ ]
75
+
76
+ file_list_str = file_list.keys.join("\n")
77
+ Chef::Log.debug("Searching for preferred file in\n#{file_list_str}")
78
+
79
+ preferences.each do |pref|
80
+ Chef::Log.debug("Looking for #{pref}")
81
+ matcher = /^(.+#{pref})$/
82
+ if match = matcher.match(file_list_str)
83
+ return match[1]
84
+ end
85
+ end
86
+
87
+ raise Chef::Exceptions::FileNotFound, "Cannot find a preferred file for #{file_name}!"
88
+ end
89
+
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,50 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Christopher Walters (<cw@opscode.com>)
4
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
5
+ # License:: Apache License, Version 2.0
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ class Chef
21
+ module Mixin
22
+ module FromFile
23
+
24
+ # Loads a given ruby file, and runs instance_eval against it in the context of the current
25
+ # object.
26
+ #
27
+ # Raises an IOError if the file cannot be found, or is not readable.
28
+ def from_file(filename)
29
+ if File.exists?(filename) && File.readable?(filename)
30
+ self.instance_eval(IO.read(filename), filename, 1)
31
+ else
32
+ raise IOError, "Cannot open or read #{filename}!"
33
+ end
34
+ end
35
+
36
+ # Loads a given ruby file, and runs class_eval against it in the context of the current
37
+ # object.
38
+ #
39
+ # Raises an IOError if the file cannot be found, or is not readable.
40
+ def class_from_file(filename)
41
+ if File.exists?(filename) && File.readable?(filename)
42
+ self.class_eval(IO.read(filename), filename, 1)
43
+ else
44
+ raise IOError, "Cannot open or read #{filename}!"
45
+ end
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,58 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/platform'
20
+
21
+ class Chef
22
+ module Mixin
23
+ module GenerateURL
24
+
25
+ def generate_cookbook_url(url, cookbook, type, node, args=nil)
26
+ Chef::Log.debug("generating cookbook url for url=#{url}, cookbook=#{cookbook.inspect}, type=#{type}, node=#{node}")
27
+ new_url = nil
28
+ if url =~ /^(http|https):\/\//
29
+ new_url = url
30
+ else
31
+ new_url = "cookbooks/#{cookbook}/#{type}?"
32
+ new_url += "id=#{url}"
33
+ new_url = generate_cookbook_url_from_uri(new_url, node, args)
34
+ end
35
+ Chef::Log.debug("generated cookbook url: #{new_url}")
36
+ return new_url
37
+ end
38
+
39
+ def generate_cookbook_url_from_uri(uri, node, args=nil)
40
+ platform, version = Chef::Platform.find_platform_and_version(node)
41
+ uri =~ /cookbooks\/(.+?)\/(.+)\?/
42
+ cookbook = $1
43
+ type = $2
44
+ if type == "files" || type == "templates"
45
+ uri += "&platform=#{platform}&version=#{version}&fqdn=#{node[:fqdn]}&node_name=#{node.name}"
46
+ end
47
+ if args
48
+ args.each do |key, value|
49
+ uri += "&#{key}=#{value}"
50
+ end
51
+ end
52
+
53
+ uri
54
+ end
55
+
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,107 @@
1
+ #
2
+ # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/search/query'
20
+ require 'chef/data_bag'
21
+ require 'chef/data_bag_item'
22
+
23
+ class Chef
24
+ module Mixin
25
+ module Language
26
+
27
+ # Given a hash similar to the one we use for Platforms, select a value from the hash. Supports
28
+ # per platform defaults, along with a single base default. Arrays may be passed as hash keys and
29
+ # will be expanded.
30
+ #
31
+ # === Parameters
32
+ # platform_hash:: A platform-style hash.
33
+ #
34
+ # === Returns
35
+ # value:: Whatever the most specific value of the hash is.
36
+ def value_for_platform(platform_hash)
37
+ result = nil
38
+
39
+ platform_hash.each_pair do |key, value|
40
+ if key.is_a?(Array)
41
+ key.each { |array_key| platform_hash[array_key] = value }
42
+ platform_hash.delete(key)
43
+ end
44
+ end
45
+ if platform_hash.has_key?(@node[:platform])
46
+ if platform_hash[@node[:platform]].has_key?(@node[:platform_version])
47
+ result = platform_hash[@node[:platform]][@node[:platform_version]]
48
+ elsif platform_hash[@node[:platform]].has_key?("default")
49
+ result = platform_hash[@node[:platform]]["default"]
50
+ end
51
+ end
52
+
53
+ unless result
54
+ if platform_hash.has_key?("default")
55
+ result = platform_hash["default"]
56
+ end
57
+ end
58
+
59
+ result
60
+ end
61
+
62
+ # Given a list of platforms, returns true if the current recipe is being run on a node with
63
+ # that platform, false otherwise.
64
+ #
65
+ # === Parameters
66
+ # args:: A list of platforms
67
+ #
68
+ # === Returns
69
+ # true:: If the current platform is in the list
70
+ # false:: If the current platform is not in the list
71
+ def platform?(*args)
72
+ has_platform = false
73
+
74
+ args.flatten.each do |platform|
75
+ has_platform = true if platform == @node[:platform]
76
+ end
77
+
78
+ has_platform
79
+ end
80
+
81
+ def search(*args, &block)
82
+ # If you pass a block, or have at least the start argument, do raw result parsing
83
+ #
84
+ # Otherwise, do the iteration for the end user
85
+ if Kernel.block_given? || args.length >= 4
86
+ Chef::Search::Query.new.search(*args, &block)
87
+ else
88
+ results = Array.new
89
+ Chef::Search::Query.new.search(*args) do |o|
90
+ results << o
91
+ end
92
+ results
93
+ end
94
+ end
95
+
96
+ def data_bag(bag)
97
+ rbag = Chef::DataBag.load(bag)
98
+ rbag.keys
99
+ end
100
+
101
+ def data_bag_item(bag, item)
102
+ Chef::DataBagItem.load(bag, item)
103
+ end
104
+
105
+ end
106
+ end
107
+ end