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,34 @@
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/resource/package'
20
+ require 'chef/provider/package/apt'
21
+
22
+ class Chef
23
+ class Resource
24
+ class AptPackage < Chef::Resource::Package
25
+
26
+ def initialize(name, collection=nil, node=nil)
27
+ super(name, collection, node)
28
+ @resource_name = :apt_package
29
+ @provider = Chef::Provider::Package::Apt
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,33 @@
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/resource/script'
20
+
21
+ class Chef
22
+ class Resource
23
+ class Bash < Chef::Resource::Script
24
+
25
+ def initialize(name, collection=nil, node=nil)
26
+ super(name, collection, node)
27
+ @resource_name = :bash
28
+ @interpreter = "bash"
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,35 @@
1
+ #
2
+ # Author:: Daniel DeLeo (<dan@kallistec.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
+
20
+ require 'chef/resource'
21
+
22
+ class Chef
23
+ class Resource
24
+ class Breakpoint < Chef::Resource
25
+
26
+ def initialize(action="break", *args)
27
+ @name = caller.first
28
+ super(@name, *args)
29
+ @action = "break"
30
+ @allowed_actions << :break
31
+ @provider = Chef::Provider::Breakpoint
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,179 @@
1
+ #
2
+ # Author:: Bryan McLellan (btm@loftninjas.org)
3
+ # Copyright:: Copyright (c) 2009 Bryan McLellan
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/resource'
20
+
21
+ class Chef
22
+ class Resource
23
+ class Cron < Chef::Resource
24
+
25
+ def initialize(name, collection=nil, node=nil)
26
+ super(name, collection, node)
27
+ @resource_name = :cron
28
+ @action = :create
29
+ @allowed_actions.push(:create, :delete)
30
+ @minute = "*"
31
+ @hour = "*"
32
+ @day = "*"
33
+ @month = "*"
34
+ @weekday = "*"
35
+ @command = nil
36
+ @user = "root"
37
+ @mailto = nil
38
+ @path = nil
39
+ @shell = nil
40
+ @home = nil
41
+ end
42
+
43
+ def minute(arg=nil)
44
+ if arg.is_a?(Integer)
45
+ converted_arg = arg.to_s
46
+ else
47
+ converted_arg = arg
48
+ end
49
+ begin
50
+ if Integer(arg) > 59 then raise RangeError end
51
+ rescue ArgumentError
52
+ end
53
+ set_or_return(
54
+ :minute,
55
+ converted_arg,
56
+ :kind_of => String
57
+ )
58
+ end
59
+
60
+ def hour(arg=nil)
61
+ if arg.is_a?(Integer)
62
+ converted_arg = arg.to_s
63
+ else
64
+ converted_arg = arg
65
+ end
66
+ begin
67
+ if Integer(arg) > 23 then raise RangeError end
68
+ rescue ArgumentError
69
+ end
70
+ set_or_return(
71
+ :hour,
72
+ converted_arg,
73
+ :kind_of => String
74
+ )
75
+ end
76
+
77
+ def day(arg=nil)
78
+ if arg.is_a?(Integer)
79
+ converted_arg = arg.to_s
80
+ else
81
+ converted_arg = arg
82
+ end
83
+ begin
84
+ if Integer(arg) > 31 then raise RangeError end
85
+ rescue ArgumentError
86
+ end
87
+ set_or_return(
88
+ :day,
89
+ converted_arg,
90
+ :kind_of => String
91
+ )
92
+ end
93
+
94
+ def month(arg=nil)
95
+ if arg.is_a?(Integer)
96
+ converted_arg = arg.to_s
97
+ else
98
+ converted_arg = arg
99
+ end
100
+ begin
101
+ if Integer(arg) > 12 then raise RangeError end
102
+ rescue ArgumentError
103
+ end
104
+ set_or_return(
105
+ :month,
106
+ converted_arg,
107
+ :kind_of => String
108
+ )
109
+ end
110
+
111
+ def weekday(arg=nil)
112
+ if arg.is_a?(Integer)
113
+ converted_arg = arg.to_s
114
+ else
115
+ converted_arg = arg
116
+ end
117
+ begin
118
+ if Integer(arg) > 7 then raise RangeError end
119
+ rescue ArgumentError
120
+ end
121
+ set_or_return(
122
+ :weekday,
123
+ converted_arg,
124
+ :kind_of => String
125
+ )
126
+ end
127
+
128
+ def mailto(arg=nil)
129
+ set_or_return(
130
+ :mailto,
131
+ arg,
132
+ :kind_of => String
133
+ )
134
+ end
135
+
136
+ def path(arg=nil)
137
+ set_or_return(
138
+ :path,
139
+ arg,
140
+ :kind_of => String
141
+ )
142
+ end
143
+
144
+ def home(arg=nil)
145
+ set_or_return(
146
+ :home,
147
+ arg,
148
+ :kind_of => String
149
+ )
150
+ end
151
+
152
+ def shell(arg=nil)
153
+ set_or_return(
154
+ :shell,
155
+ arg,
156
+ :kind_of => String
157
+ )
158
+ end
159
+
160
+ def command(arg=nil)
161
+ set_or_return(
162
+ :command,
163
+ arg,
164
+ :kind_of => String
165
+ )
166
+ end
167
+
168
+ def user(arg=nil)
169
+ set_or_return(
170
+ :user,
171
+ arg,
172
+ :kind_of => String
173
+ )
174
+ end
175
+ end
176
+ end
177
+ end
178
+
179
+
@@ -0,0 +1,33 @@
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/resource/script'
20
+
21
+ class Chef
22
+ class Resource
23
+ class Csh < Chef::Resource::Script
24
+
25
+ def initialize(name, collection=nil, node=nil)
26
+ super(name, collection, node)
27
+ @resource_name = :csh
28
+ @interpreter = "csh"
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,359 @@
1
+ #
2
+ # Author:: Daniel DeLeo (<dan@kallistec.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
+ # EX:
20
+ # deploy "/my/deploy/dir" do
21
+ # repo "git@github.com/whoami/project"
22
+ # revision "abc123" # or "HEAD" or "TAG_for_1.0" or (subversion) "1234"
23
+ # user "deploy_ninja"
24
+ # enable_submodules true
25
+ # migrate true
26
+ # migration_command "rake db:migrate"
27
+ # environment "RAILS_ENV" => "production", "OTHER_ENV" => "foo"
28
+ # shallow_clone true
29
+ # action :deploy # or :rollback
30
+ # restart_command "touch tmp/restart.txt"
31
+ # git_ssh_wrapper "wrap-ssh4git.sh"
32
+ # scm_provider Chef::Provider::Git # is the default, for svn: Chef::Provider::Subversion
33
+ # svn_username "whoami"
34
+ # svn_password "supersecret"
35
+ # end
36
+
37
+ require "chef/resource/scm"
38
+
39
+ class Chef
40
+ class Resource
41
+
42
+ # Deploy: Deploy apps from a source control repository.
43
+ #
44
+ # Callbacks:
45
+ # Callbacks can be a block or a string. If given a block, the code
46
+ # is evaluated as an embedded recipe, and run at the specified
47
+ # point in the deploy process. If given a string, the string is taken as
48
+ # a path to a callback file/recipe. Paths are evaluated relative to the
49
+ # release directory. Callback files can contain chef code (resources, etc.)
50
+ #
51
+ class Deploy < Chef::Resource
52
+
53
+ provider_base Chef::Provider::Deploy
54
+
55
+ def initialize(name, collection=nil, node=nil)
56
+ super(name, collection, node)
57
+ @resource_name = :deploy
58
+ @deploy_to = name
59
+ @environment = nil
60
+ @repository_cache = 'cached-copy'
61
+ @copy_exclude = []
62
+ @purge_before_symlink = %w{log tmp/pids public/system}
63
+ @create_dirs_before_symlink = %w{tmp public config}
64
+ @symlink_before_migrate = {"config/database.yml" => "config/database.yml"}
65
+ @symlinks = {"system" => "public/system", "pids" => "tmp/pids", "log" => "log"}
66
+ @revision = 'HEAD'
67
+ @action = :deploy
68
+ @migrate = false
69
+ @remote = "origin"
70
+ @enable_submodules = false
71
+ @shallow_clone = false
72
+ @scm_provider = Chef::Provider::Git
73
+ @svn_force_export = false
74
+ @provider = Chef::Provider::Deploy::Timestamped
75
+ @allowed_actions.push(:force_deploy, :deploy, :rollback)
76
+ end
77
+
78
+ # where the checked out/cloned code goes
79
+ def destination
80
+ @destination ||= shared_path + "/#{@repository_cache}/"
81
+ end
82
+
83
+ # where shared stuff goes, i.e., logs, tmp, etc. goes here
84
+ def shared_path
85
+ @shared_path ||= @deploy_to + "/shared"
86
+ end
87
+
88
+ # where the deployed version of your code goes
89
+ def current_path
90
+ @current_path ||= @deploy_to + "/current"
91
+ end
92
+
93
+ def depth
94
+ @shallow_clone ? "5" : nil
95
+ end
96
+
97
+ # note: deploy_to is your application "meta-root."
98
+ def deploy_to(arg=nil)
99
+ set_or_return(
100
+ :deploy_to,
101
+ arg,
102
+ :kind_of => [ String ]
103
+ )
104
+ end
105
+
106
+ def repo(arg=nil)
107
+ set_or_return(
108
+ :repo,
109
+ arg,
110
+ :kind_of => [ String ]
111
+ )
112
+ end
113
+ alias :repository :repo
114
+
115
+ def remote(arg=nil)
116
+ set_or_return(
117
+ :remote,
118
+ arg,
119
+ :kind_of => [ String ]
120
+ )
121
+ end
122
+
123
+ def role(arg=nil)
124
+ set_or_return(
125
+ :role,
126
+ arg,
127
+ :kind_of => [ String ]
128
+ )
129
+ end
130
+
131
+ def restart_command(arg=nil, &block)
132
+ arg ||= block
133
+ set_or_return(
134
+ :restart_command,
135
+ arg,
136
+ :kind_of => [ String, Proc ]
137
+ )
138
+ end
139
+ alias :restart :restart_command
140
+
141
+ def migrate(arg=nil)
142
+ set_or_return(
143
+ :migrate,
144
+ arg,
145
+ :kind_of => [ TrueClass, FalseClass ]
146
+ )
147
+ end
148
+
149
+ def migration_command(arg=nil)
150
+ set_or_return(
151
+ :migration_command,
152
+ arg,
153
+ :kind_of => [ String ]
154
+ )
155
+ end
156
+
157
+ def user(arg=nil)
158
+ set_or_return(
159
+ :user,
160
+ arg,
161
+ :kind_of => [ String ]
162
+ )
163
+ end
164
+
165
+ def group(arg=nil)
166
+ set_or_return(
167
+ :group,
168
+ arg,
169
+ :kind_of => [ String ]
170
+ )
171
+ end
172
+
173
+ def enable_submodules(arg=nil)
174
+ set_or_return(
175
+ :enable_submodules,
176
+ arg,
177
+ :kind_of => [ TrueClass, FalseClass ]
178
+ )
179
+ end
180
+
181
+ def shallow_clone(arg=nil)
182
+ set_or_return(
183
+ :shallow_clone,
184
+ arg,
185
+ :kind_of => [ TrueClass, FalseClass ]
186
+ )
187
+ end
188
+
189
+ def repository_cache(arg=nil)
190
+ set_or_return(
191
+ :repository_cache,
192
+ arg,
193
+ :kind_of => [ String ]
194
+ )
195
+ end
196
+
197
+ def copy_exclude(arg=nil)
198
+ set_or_return(
199
+ :copy_exclude,
200
+ arg,
201
+ :kind_of => [ String ]
202
+ )
203
+ end
204
+
205
+ def revision(arg=nil)
206
+ set_or_return(
207
+ :revision,
208
+ arg,
209
+ :kind_of => [ String ]
210
+ )
211
+ end
212
+ alias :branch :revision
213
+
214
+ def git_ssh_wrapper(arg=nil)
215
+ set_or_return(
216
+ :git_ssh_wrapper,
217
+ arg,
218
+ :kind_of => [ String ]
219
+ )
220
+ end
221
+ alias :ssh_wrapper :git_ssh_wrapper
222
+
223
+ def svn_username(arg=nil)
224
+ set_or_return(
225
+ :svn_username,
226
+ arg,
227
+ :kind_of => [ String ]
228
+ )
229
+ end
230
+
231
+ def svn_password(arg=nil)
232
+ set_or_return(
233
+ :svn_password,
234
+ arg,
235
+ :kind_of => [ String ]
236
+ )
237
+ end
238
+
239
+ def svn_arguments(arg=nil)
240
+ set_or_return(
241
+ :svn_arguments,
242
+ arg,
243
+ :kind_of => [ String ]
244
+ )
245
+ end
246
+
247
+ def scm_provider(arg=nil)
248
+ set_or_return(
249
+ :scm_provider,
250
+ arg,
251
+ :kind_of => [ Class ]
252
+ )
253
+ end
254
+
255
+ def svn_force_export(arg=nil)
256
+ set_or_return(
257
+ :svn_force_export,
258
+ arg,
259
+ :kind_of => [ TrueClass, FalseClass ]
260
+ )
261
+ end
262
+
263
+ def environment(arg=nil)
264
+ if arg.is_a?(String)
265
+ Chef::Log.info "Setting RAILS_ENV, RACK_ENV, and MERB_ENV to `#{arg}'"
266
+ Chef::Log.warn "[DEPRECATED] please modify your deploy recipe or attributes to set the environment using a hash"
267
+ arg = {"RAILS_ENV"=>arg,"MERB_ENV"=>arg,"RACK_ENV"=>arg}
268
+ end
269
+ set_or_return(
270
+ :environment,
271
+ arg,
272
+ :kind_of => [ Hash ]
273
+ )
274
+ end
275
+
276
+ # An array of paths, relative to your app's root, to be purged from a
277
+ # SCM clone/checkout before symlinking. Use this to get rid of files and
278
+ # directories you want to be shared between releases.
279
+ # Default: ["log", "tmp/pids", "public/system"]
280
+ def purge_before_symlink(arg=nil)
281
+ set_or_return(
282
+ :purge_before_symlink,
283
+ arg,
284
+ :kind_of => Array
285
+ )
286
+ end
287
+
288
+ # An array of paths, relative to your app's root, where you expect dirs to
289
+ # exist before symlinking. This runs after #purge_before_symlink, so you
290
+ # can use this to recreate dirs that you had previously purged.
291
+ # For example, if you plan to use a shared directory for pids, and you
292
+ # want it to be located in $APP_ROOT/tmp/pids, you could purge tmp,
293
+ # then specify tmp here so that the tmp directory will exist when you
294
+ # symlink the pids directory in to the current release.
295
+ # Default: ["tmp", "public", "config"]
296
+ def create_dirs_before_symlink(arg=nil)
297
+ set_or_return(
298
+ :create_dirs_before_symlink,
299
+ arg,
300
+ :kind_of => Array
301
+ )
302
+ end
303
+
304
+ # A Hash of shared/dir/path => release/dir/path. This attribute determines
305
+ # which files and dirs in the shared directory get symlinked to the current
306
+ # release directory, and where they go. If you have a directory
307
+ # $shared/pids that you would like to symlink as $current_release/tmp/pids
308
+ # you specify it as "pids" => "tmp/pids"
309
+ # Default {"system" => "public/system", "pids" => "tmp/pids", "log" => "log"}
310
+ def symlinks(arg=nil)
311
+ set_or_return(
312
+ :symlinks,
313
+ arg,
314
+ :kind_of => Hash
315
+ )
316
+ end
317
+
318
+ # A Hash of shared/dir/path => release/dir/path. This attribute determines
319
+ # which files in the shared directory get symlinked to the current release
320
+ # directory and where they go. Unlike map_shared_files, these are symlinked
321
+ # *before* any migration is run.
322
+ # For a rails/merb app, this is used to link in a known good database.yml
323
+ # (with the production db password) before running migrate.
324
+ # Default {"config/database.yml" => "config/database.yml"}
325
+ def symlink_before_migrate(arg=nil)
326
+ set_or_return(
327
+ :symlink_before_migrate,
328
+ arg,
329
+ :kind_of => Hash
330
+ )
331
+ end
332
+
333
+ # Callback fires before migration is run.
334
+ def before_migrate(arg=nil, &block)
335
+ arg ||= block
336
+ set_or_return(:before_migrate, arg, :kind_of => [Proc, String])
337
+ end
338
+
339
+ # Callback fires before symlinking
340
+ def before_symlink(arg=nil, &block)
341
+ arg ||= block
342
+ set_or_return(:before_symlink, arg, :kind_of => [Proc, String])
343
+ end
344
+
345
+ # Callback fires before restart
346
+ def before_restart(arg=nil, &block)
347
+ arg ||= block
348
+ set_or_return(:before_restart, arg, :kind_of => [Proc, String])
349
+ end
350
+
351
+ # Callback fires after restart
352
+ def after_restart(arg=nil, &block)
353
+ arg ||= block
354
+ set_or_return(:after_restart, arg, :kind_of => [Proc, String])
355
+ end
356
+
357
+ end
358
+ end
359
+ end