microwave 0.1004.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 (206) hide show
  1. data/LICENSE +201 -0
  2. data/README.rdoc +102 -0
  3. data/bin/chef-solo +25 -0
  4. data/lib/chef.rb +41 -0
  5. data/lib/chef/application.rb +147 -0
  6. data/lib/chef/application/solo.rb +181 -0
  7. data/lib/chef/applications.rb +1 -0
  8. data/lib/chef/checksum.rb +83 -0
  9. data/lib/chef/checksum_cache.rb +189 -0
  10. data/lib/chef/client.rb +325 -0
  11. data/lib/chef/config.rb +152 -0
  12. data/lib/chef/cookbook/chefignore.rb +66 -0
  13. data/lib/chef/cookbook/cookbook_collection.rb +45 -0
  14. data/lib/chef/cookbook/cookbook_version_loader.rb +173 -0
  15. data/lib/chef/cookbook/file_system_file_vendor.rb +56 -0
  16. data/lib/chef/cookbook/file_vendor.rb +48 -0
  17. data/lib/chef/cookbook/metadata.rb +629 -0
  18. data/lib/chef/cookbook/syntax_check.rb +136 -0
  19. data/lib/chef/cookbook_loader.rb +121 -0
  20. data/lib/chef/cookbook_version.rb +786 -0
  21. data/lib/chef/cookbook_version_selector.rb +151 -0
  22. data/lib/chef/environment.rb +267 -0
  23. data/lib/chef/exceptions.rb +150 -0
  24. data/lib/chef/file_access_control.rb +144 -0
  25. data/lib/chef/file_cache.rb +218 -0
  26. data/lib/chef/handler.rb +206 -0
  27. data/lib/chef/handler/error_report.rb +33 -0
  28. data/lib/chef/handler/json_file.rb +58 -0
  29. data/lib/chef/json_compat.rb +52 -0
  30. data/lib/chef/log.rb +39 -0
  31. data/lib/chef/mash.rb +211 -0
  32. data/lib/chef/mixin/check_helper.rb +31 -0
  33. data/lib/chef/mixin/checksum.rb +32 -0
  34. data/lib/chef/mixin/command.rb +221 -0
  35. data/lib/chef/mixin/command/unix.rb +215 -0
  36. data/lib/chef/mixin/command/windows.rb +76 -0
  37. data/lib/chef/mixin/convert_to_class_name.rb +63 -0
  38. data/lib/chef/mixin/create_path.rb +57 -0
  39. data/lib/chef/mixin/deep_merge.rb +225 -0
  40. data/lib/chef/mixin/deprecation.rb +65 -0
  41. data/lib/chef/mixin/from_file.rb +50 -0
  42. data/lib/chef/mixin/get_source_from_package.rb +42 -0
  43. data/lib/chef/mixin/language.rb +125 -0
  44. data/lib/chef/mixin/language_include_attribute.rb +61 -0
  45. data/lib/chef/mixin/language_include_recipe.rb +52 -0
  46. data/lib/chef/mixin/params_validate.rb +225 -0
  47. data/lib/chef/mixin/recipe_definition_dsl_core.rb +78 -0
  48. data/lib/chef/mixin/shell_out.rb +41 -0
  49. data/lib/chef/mixin/template.rb +95 -0
  50. data/lib/chef/mixin/xml_escape.rb +140 -0
  51. data/lib/chef/mixins.rb +15 -0
  52. data/lib/chef/monkey_patches/dir.rb +36 -0
  53. data/lib/chef/monkey_patches/numeric.rb +15 -0
  54. data/lib/chef/monkey_patches/object.rb +9 -0
  55. data/lib/chef/monkey_patches/regexp.rb +34 -0
  56. data/lib/chef/monkey_patches/string.rb +49 -0
  57. data/lib/chef/monkey_patches/tempfile.rb +64 -0
  58. data/lib/chef/nil_argument.rb +3 -0
  59. data/lib/chef/node.rb +469 -0
  60. data/lib/chef/node/attribute.rb +487 -0
  61. data/lib/chef/platform.rb +409 -0
  62. data/lib/chef/provider.rb +124 -0
  63. data/lib/chef/provider/breakpoint.rb +31 -0
  64. data/lib/chef/provider/cookbook_file.rb +100 -0
  65. data/lib/chef/provider/cron.rb +186 -0
  66. data/lib/chef/provider/cron/solaris.rb +195 -0
  67. data/lib/chef/provider/deploy.rb +343 -0
  68. data/lib/chef/provider/deploy/revision.rb +80 -0
  69. data/lib/chef/provider/deploy/timestamped.rb +33 -0
  70. data/lib/chef/provider/directory.rb +72 -0
  71. data/lib/chef/provider/env.rb +152 -0
  72. data/lib/chef/provider/env/windows.rb +75 -0
  73. data/lib/chef/provider/erl_call.rb +101 -0
  74. data/lib/chef/provider/execute.rb +66 -0
  75. data/lib/chef/provider/file.rb +222 -0
  76. data/lib/chef/provider/git.rb +243 -0
  77. data/lib/chef/provider/group.rb +133 -0
  78. data/lib/chef/provider/group/aix.rb +70 -0
  79. data/lib/chef/provider/group/dscl.rb +121 -0
  80. data/lib/chef/provider/group/gpasswd.rb +53 -0
  81. data/lib/chef/provider/group/groupadd.rb +81 -0
  82. data/lib/chef/provider/group/pw.rb +84 -0
  83. data/lib/chef/provider/group/suse.rb +53 -0
  84. data/lib/chef/provider/group/usermod.rb +57 -0
  85. data/lib/chef/provider/group/windows.rb +79 -0
  86. data/lib/chef/provider/ifconfig.rb +134 -0
  87. data/lib/chef/provider/link.rb +164 -0
  88. data/lib/chef/provider/log.rb +54 -0
  89. data/lib/chef/provider/mdadm.rb +91 -0
  90. data/lib/chef/provider/mount.rb +114 -0
  91. data/lib/chef/provider/mount/mount.rb +240 -0
  92. data/lib/chef/provider/mount/windows.rb +81 -0
  93. data/lib/chef/provider/ohai.rb +42 -0
  94. data/lib/chef/provider/package.rb +163 -0
  95. data/lib/chef/provider/package/apt.rb +135 -0
  96. data/lib/chef/provider/package/dpkg.rb +115 -0
  97. data/lib/chef/provider/package/easy_install.rb +136 -0
  98. data/lib/chef/provider/package/freebsd.rb +125 -0
  99. data/lib/chef/provider/package/macports.rb +105 -0
  100. data/lib/chef/provider/package/pacman.rb +101 -0
  101. data/lib/chef/provider/package/portage.rb +135 -0
  102. data/lib/chef/provider/package/rpm.rb +104 -0
  103. data/lib/chef/provider/package/rubygems.rb +465 -0
  104. data/lib/chef/provider/package/solaris.rb +130 -0
  105. data/lib/chef/provider/package/yum-dump.py +286 -0
  106. data/lib/chef/provider/package/yum.rb +1128 -0
  107. data/lib/chef/provider/package/zypper.rb +144 -0
  108. data/lib/chef/provider/remote_directory.rb +137 -0
  109. data/lib/chef/provider/route.rb +193 -0
  110. data/lib/chef/provider/ruby_block.rb +34 -0
  111. data/lib/chef/provider/script.rb +55 -0
  112. data/lib/chef/provider/service.rb +122 -0
  113. data/lib/chef/provider/service/arch.rb +116 -0
  114. data/lib/chef/provider/service/debian.rb +130 -0
  115. data/lib/chef/provider/service/freebsd.rb +154 -0
  116. data/lib/chef/provider/service/gentoo.rb +53 -0
  117. data/lib/chef/provider/service/init.rb +71 -0
  118. data/lib/chef/provider/service/insserv.rb +52 -0
  119. data/lib/chef/provider/service/redhat.rb +60 -0
  120. data/lib/chef/provider/service/simple.rb +120 -0
  121. data/lib/chef/provider/service/solaris.rb +85 -0
  122. data/lib/chef/provider/service/systemd.rb +102 -0
  123. data/lib/chef/provider/service/upstart.rb +198 -0
  124. data/lib/chef/provider/service/windows.rb +146 -0
  125. data/lib/chef/provider/subversion.rb +197 -0
  126. data/lib/chef/provider/template.rb +104 -0
  127. data/lib/chef/provider/user.rb +186 -0
  128. data/lib/chef/provider/user/dscl.rb +280 -0
  129. data/lib/chef/provider/user/pw.rb +113 -0
  130. data/lib/chef/provider/user/useradd.rb +137 -0
  131. data/lib/chef/provider/user/windows.rb +124 -0
  132. data/lib/chef/providers.rb +93 -0
  133. data/lib/chef/recipe.rb +129 -0
  134. data/lib/chef/resource.rb +584 -0
  135. data/lib/chef/resource/apt_package.rb +34 -0
  136. data/lib/chef/resource/bash.rb +33 -0
  137. data/lib/chef/resource/breakpoint.rb +35 -0
  138. data/lib/chef/resource/cookbook_file.rb +45 -0
  139. data/lib/chef/resource/cron.rb +188 -0
  140. data/lib/chef/resource/csh.rb +33 -0
  141. data/lib/chef/resource/deploy.rb +380 -0
  142. data/lib/chef/resource/deploy_revision.rb +40 -0
  143. data/lib/chef/resource/directory.rb +89 -0
  144. data/lib/chef/resource/dpkg_package.rb +34 -0
  145. data/lib/chef/resource/easy_install_package.rb +57 -0
  146. data/lib/chef/resource/env.rb +58 -0
  147. data/lib/chef/resource/erl_call.rb +83 -0
  148. data/lib/chef/resource/execute.rb +127 -0
  149. data/lib/chef/resource/file.rb +112 -0
  150. data/lib/chef/resource/freebsd_package.rb +35 -0
  151. data/lib/chef/resource/gem_package.rb +53 -0
  152. data/lib/chef/resource/git.rb +46 -0
  153. data/lib/chef/resource/group.rb +70 -0
  154. data/lib/chef/resource/ifconfig.rb +134 -0
  155. data/lib/chef/resource/link.rb +105 -0
  156. data/lib/chef/resource/log.rb +62 -0
  157. data/lib/chef/resource/macports_package.rb +29 -0
  158. data/lib/chef/resource/mdadm.rb +82 -0
  159. data/lib/chef/resource/mount.rb +134 -0
  160. data/lib/chef/resource/ohai.rb +40 -0
  161. data/lib/chef/resource/package.rb +80 -0
  162. data/lib/chef/resource/pacman_package.rb +33 -0
  163. data/lib/chef/resource/perl.rb +33 -0
  164. data/lib/chef/resource/portage_package.rb +33 -0
  165. data/lib/chef/resource/python.rb +33 -0
  166. data/lib/chef/resource/remote_directory.rb +109 -0
  167. data/lib/chef/resource/route.rb +135 -0
  168. data/lib/chef/resource/rpm_package.rb +34 -0
  169. data/lib/chef/resource/ruby.rb +33 -0
  170. data/lib/chef/resource/ruby_block.rb +40 -0
  171. data/lib/chef/resource/scm.rb +147 -0
  172. data/lib/chef/resource/script.rb +60 -0
  173. data/lib/chef/resource/service.rb +160 -0
  174. data/lib/chef/resource/solaris_package.rb +36 -0
  175. data/lib/chef/resource/subversion.rb +36 -0
  176. data/lib/chef/resource/template.rb +69 -0
  177. data/lib/chef/resource/timestamped_deploy.rb +31 -0
  178. data/lib/chef/resource/user.rb +130 -0
  179. data/lib/chef/resource/yum_package.rb +63 -0
  180. data/lib/chef/resource_collection.rb +217 -0
  181. data/lib/chef/resource_collection/stepable_iterator.rb +124 -0
  182. data/lib/chef/resource_definition.rb +67 -0
  183. data/lib/chef/resource_definition_list.rb +38 -0
  184. data/lib/chef/resources.rb +62 -0
  185. data/lib/chef/role.rb +225 -0
  186. data/lib/chef/run_context.rb +126 -0
  187. data/lib/chef/run_list.rb +161 -0
  188. data/lib/chef/run_list/run_list_expansion.rb +159 -0
  189. data/lib/chef/run_list/run_list_item.rb +92 -0
  190. data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
  191. data/lib/chef/run_status.rb +121 -0
  192. data/lib/chef/runner.rb +105 -0
  193. data/lib/chef/shell_out.rb +250 -0
  194. data/lib/chef/shell_out/unix.rb +223 -0
  195. data/lib/chef/shell_out/windows.rb +98 -0
  196. data/lib/chef/tasks/chef_repo.rake +330 -0
  197. data/lib/chef/util/file_edit.rb +122 -0
  198. data/lib/chef/util/windows.rb +56 -0
  199. data/lib/chef/util/windows/net_group.rb +101 -0
  200. data/lib/chef/util/windows/net_use.rb +121 -0
  201. data/lib/chef/util/windows/net_user.rb +198 -0
  202. data/lib/chef/util/windows/volume.rb +59 -0
  203. data/lib/chef/version.rb +23 -0
  204. data/lib/chef/version_class.rb +70 -0
  205. data/lib/chef/version_constraint.rb +116 -0
  206. metadata +493 -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, run_context=nil)
27
+ super
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, run_context=nil)
26
+ super
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,45 @@
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/file'
20
+ require 'chef/provider/cookbook_file'
21
+
22
+ class Chef
23
+ class Resource
24
+ class CookbookFile < Chef::Resource::File
25
+
26
+ def initialize(name, run_context=nil)
27
+ super
28
+ @provider = Chef::Provider::CookbookFile
29
+ @resource_name = :cookbook_file
30
+ @action = "create"
31
+ @source = ::File.basename(name)
32
+ @cookbook = nil
33
+ end
34
+
35
+ def source(source_filename=nil)
36
+ set_or_return(:source, source_filename, :kind_of => String)
37
+ end
38
+
39
+ def cookbook(cookbook_name=nil)
40
+ set_or_return(:cookbook, cookbook_name, :kind_of => String)
41
+ end
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,188 @@
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, run_context=nil)
26
+ super
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 integerize(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 integerize(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 integerize(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 integerize(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 integerize(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
+
176
+ private
177
+
178
+ # On Ruby 1.8, Kernel#Integer will happily do this for you. On 1.9, no.
179
+ def integerize(integerish)
180
+ Integer(integerish)
181
+ rescue TypeError
182
+ 0
183
+ end
184
+ end
185
+ end
186
+ end
187
+
188
+
@@ -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, run_context=nil)
26
+ super
27
+ @resource_name = :csh
28
+ @interpreter = "csh"
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,380 @@
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, run_context=nil)
56
+ super
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
+ @additional_remotes = Hash[]
77
+ end
78
+
79
+ # where the checked out/cloned code goes
80
+ def destination
81
+ @destination ||= shared_path + "/#{@repository_cache}"
82
+ end
83
+
84
+ # where shared stuff goes, i.e., logs, tmp, etc. goes here
85
+ def shared_path
86
+ @shared_path ||= @deploy_to + "/shared"
87
+ end
88
+
89
+ # where the deployed version of your code goes
90
+ def current_path
91
+ @current_path ||= @deploy_to + "/current"
92
+ end
93
+
94
+ def depth
95
+ @shallow_clone ? "5" : nil
96
+ end
97
+
98
+ # note: deploy_to is your application "meta-root."
99
+ def deploy_to(arg=nil)
100
+ set_or_return(
101
+ :deploy_to,
102
+ arg,
103
+ :kind_of => [ String ]
104
+ )
105
+ end
106
+
107
+ def repo(arg=nil)
108
+ set_or_return(
109
+ :repo,
110
+ arg,
111
+ :kind_of => [ String ]
112
+ )
113
+ end
114
+ alias :repository :repo
115
+
116
+ def remote(arg=nil)
117
+ set_or_return(
118
+ :remote,
119
+ arg,
120
+ :kind_of => [ String ]
121
+ )
122
+ end
123
+
124
+ def role(arg=nil)
125
+ set_or_return(
126
+ :role,
127
+ arg,
128
+ :kind_of => [ String ]
129
+ )
130
+ end
131
+
132
+ def restart_command(arg=nil, &block)
133
+ arg ||= block
134
+ set_or_return(
135
+ :restart_command,
136
+ arg,
137
+ :kind_of => [ String, Proc ]
138
+ )
139
+ end
140
+ alias :restart :restart_command
141
+
142
+ def migrate(arg=nil)
143
+ set_or_return(
144
+ :migrate,
145
+ arg,
146
+ :kind_of => [ TrueClass, FalseClass ]
147
+ )
148
+ end
149
+
150
+ def migration_command(arg=nil)
151
+ set_or_return(
152
+ :migration_command,
153
+ arg,
154
+ :kind_of => [ String ]
155
+ )
156
+ end
157
+
158
+ def user(arg=nil)
159
+ set_or_return(
160
+ :user,
161
+ arg,
162
+ :kind_of => [ String ]
163
+ )
164
+ end
165
+
166
+ def group(arg=nil)
167
+ set_or_return(
168
+ :group,
169
+ arg,
170
+ :kind_of => [ String ]
171
+ )
172
+ end
173
+
174
+ def enable_submodules(arg=nil)
175
+ set_or_return(
176
+ :enable_submodules,
177
+ arg,
178
+ :kind_of => [ TrueClass, FalseClass ]
179
+ )
180
+ end
181
+
182
+ def shallow_clone(arg=nil)
183
+ set_or_return(
184
+ :shallow_clone,
185
+ arg,
186
+ :kind_of => [ TrueClass, FalseClass ]
187
+ )
188
+ end
189
+
190
+ def repository_cache(arg=nil)
191
+ set_or_return(
192
+ :repository_cache,
193
+ arg,
194
+ :kind_of => [ String ]
195
+ )
196
+ end
197
+
198
+ def copy_exclude(arg=nil)
199
+ set_or_return(
200
+ :copy_exclude,
201
+ arg,
202
+ :kind_of => [ String ]
203
+ )
204
+ end
205
+
206
+ def revision(arg=nil)
207
+ set_or_return(
208
+ :revision,
209
+ arg,
210
+ :kind_of => [ String ]
211
+ )
212
+ end
213
+ alias :branch :revision
214
+
215
+ def git_ssh_wrapper(arg=nil)
216
+ set_or_return(
217
+ :git_ssh_wrapper,
218
+ arg,
219
+ :kind_of => [ String ]
220
+ )
221
+ end
222
+ alias :ssh_wrapper :git_ssh_wrapper
223
+
224
+ def svn_username(arg=nil)
225
+ set_or_return(
226
+ :svn_username,
227
+ arg,
228
+ :kind_of => [ String ]
229
+ )
230
+ end
231
+
232
+ def svn_password(arg=nil)
233
+ set_or_return(
234
+ :svn_password,
235
+ arg,
236
+ :kind_of => [ String ]
237
+ )
238
+ end
239
+
240
+ def svn_arguments(arg=nil)
241
+ set_or_return(
242
+ :svn_arguments,
243
+ arg,
244
+ :kind_of => [ String ]
245
+ )
246
+ end
247
+
248
+ def svn_info_args(arg=nil)
249
+ set_or_return(
250
+ :svn_arguments,
251
+ arg,
252
+ :kind_of => [ String ])
253
+ end
254
+
255
+ def scm_provider(arg=nil)
256
+ klass = if arg.kind_of?(String) || arg.kind_of?(Symbol)
257
+ lookup_provider_constant(arg)
258
+ else
259
+ arg
260
+ end
261
+ set_or_return(
262
+ :scm_provider,
263
+ klass,
264
+ :kind_of => [ Class ]
265
+ )
266
+ end
267
+
268
+ def svn_force_export(arg=nil)
269
+ set_or_return(
270
+ :svn_force_export,
271
+ arg,
272
+ :kind_of => [ TrueClass, FalseClass ]
273
+ )
274
+ end
275
+
276
+ def environment(arg=nil)
277
+ if arg.is_a?(String)
278
+ Chef::Log.debug "Setting RAILS_ENV, RACK_ENV, and MERB_ENV to `#{arg}'"
279
+ Chef::Log.warn "[DEPRECATED] please modify your deploy recipe or attributes to set the environment using a hash"
280
+ arg = {"RAILS_ENV"=>arg,"MERB_ENV"=>arg,"RACK_ENV"=>arg}
281
+ end
282
+ set_or_return(
283
+ :environment,
284
+ arg,
285
+ :kind_of => [ Hash ]
286
+ )
287
+ end
288
+
289
+ # An array of paths, relative to your app's root, to be purged from a
290
+ # SCM clone/checkout before symlinking. Use this to get rid of files and
291
+ # directories you want to be shared between releases.
292
+ # Default: ["log", "tmp/pids", "public/system"]
293
+ def purge_before_symlink(arg=nil)
294
+ set_or_return(
295
+ :purge_before_symlink,
296
+ arg,
297
+ :kind_of => Array
298
+ )
299
+ end
300
+
301
+ # An array of paths, relative to your app's root, where you expect dirs to
302
+ # exist before symlinking. This runs after #purge_before_symlink, so you
303
+ # can use this to recreate dirs that you had previously purged.
304
+ # For example, if you plan to use a shared directory for pids, and you
305
+ # want it to be located in $APP_ROOT/tmp/pids, you could purge tmp,
306
+ # then specify tmp here so that the tmp directory will exist when you
307
+ # symlink the pids directory in to the current release.
308
+ # Default: ["tmp", "public", "config"]
309
+ def create_dirs_before_symlink(arg=nil)
310
+ set_or_return(
311
+ :create_dirs_before_symlink,
312
+ arg,
313
+ :kind_of => Array
314
+ )
315
+ end
316
+
317
+ # A Hash of shared/dir/path => release/dir/path. This attribute determines
318
+ # which files and dirs in the shared directory get symlinked to the current
319
+ # release directory, and where they go. If you have a directory
320
+ # $shared/pids that you would like to symlink as $current_release/tmp/pids
321
+ # you specify it as "pids" => "tmp/pids"
322
+ # Default {"system" => "public/system", "pids" => "tmp/pids", "log" => "log"}
323
+ def symlinks(arg=nil)
324
+ set_or_return(
325
+ :symlinks,
326
+ arg,
327
+ :kind_of => Hash
328
+ )
329
+ end
330
+
331
+ # A Hash of shared/dir/path => release/dir/path. This attribute determines
332
+ # which files in the shared directory get symlinked to the current release
333
+ # directory and where they go. Unlike map_shared_files, these are symlinked
334
+ # *before* any migration is run.
335
+ # For a rails/merb app, this is used to link in a known good database.yml
336
+ # (with the production db password) before running migrate.
337
+ # Default {"config/database.yml" => "config/database.yml"}
338
+ def symlink_before_migrate(arg=nil)
339
+ set_or_return(
340
+ :symlink_before_migrate,
341
+ arg,
342
+ :kind_of => Hash
343
+ )
344
+ end
345
+
346
+ # Callback fires before migration is run.
347
+ def before_migrate(arg=nil, &block)
348
+ arg ||= block
349
+ set_or_return(:before_migrate, arg, :kind_of => [Proc, String])
350
+ end
351
+
352
+ # Callback fires before symlinking
353
+ def before_symlink(arg=nil, &block)
354
+ arg ||= block
355
+ set_or_return(:before_symlink, arg, :kind_of => [Proc, String])
356
+ end
357
+
358
+ # Callback fires before restart
359
+ def before_restart(arg=nil, &block)
360
+ arg ||= block
361
+ set_or_return(:before_restart, arg, :kind_of => [Proc, String])
362
+ end
363
+
364
+ # Callback fires after restart
365
+ def after_restart(arg=nil, &block)
366
+ arg ||= block
367
+ set_or_return(:after_restart, arg, :kind_of => [Proc, String])
368
+ end
369
+
370
+ def additional_remotes(arg=nil)
371
+ set_or_return(
372
+ :additional_remotes,
373
+ arg,
374
+ :kind_of => Hash
375
+ )
376
+ end
377
+
378
+ end
379
+ end
380
+ end