chef 0.9.18 → 0.10.0.beta.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. data/README.rdoc +0 -3
  2. data/distro/arch/etc/rc.d/chef-server +0 -4
  3. data/distro/arch/etc/rc.d/chef-server-webui +0 -4
  4. data/distro/arch/etc/rc.d/chef-solr +0 -4
  5. data/distro/arch/etc/rc.d/chef-solr-indexer +0 -4
  6. data/lib/chef.rb +3 -3
  7. data/lib/chef/api_client.rb +1 -1
  8. data/lib/chef/application.rb +11 -1
  9. data/lib/chef/application/client.rb +18 -22
  10. data/lib/chef/application/knife.rb +28 -29
  11. data/lib/chef/application/solo.rb +14 -12
  12. data/lib/chef/client.rb +112 -54
  13. data/lib/chef/config.rb +4 -0
  14. data/lib/chef/cookbook/chefignore.rb +66 -0
  15. data/lib/chef/cookbook/cookbook_collection.rb +6 -5
  16. data/lib/chef/cookbook/cookbook_version_loader.rb +151 -0
  17. data/lib/chef/cookbook/file_system_file_vendor.rb +10 -8
  18. data/lib/chef/cookbook/metadata.rb +200 -108
  19. data/lib/chef/cookbook_loader.rb +39 -163
  20. data/lib/chef/cookbook_uploader.rb +100 -78
  21. data/lib/chef/cookbook_version.rb +92 -47
  22. data/lib/chef/cookbook_version_selector.rb +163 -0
  23. data/lib/chef/couchdb.rb +9 -1
  24. data/lib/chef/data_bag.rb +1 -1
  25. data/lib/chef/data_bag_item.rb +1 -1
  26. data/lib/chef/encrypted_data_bag_item.rb +126 -0
  27. data/lib/chef/environment.rb +386 -0
  28. data/lib/chef/exceptions.rb +82 -1
  29. data/lib/chef/index_queue/amqp_client.rb +15 -12
  30. data/lib/chef/index_queue/indexable.rb +38 -4
  31. data/lib/chef/json_compat.rb +3 -3
  32. data/lib/chef/knife.rb +97 -202
  33. data/lib/chef/knife/bootstrap.rb +27 -61
  34. data/lib/chef/knife/bootstrap/archlinux-gems.erb +4 -2
  35. data/lib/chef/knife/bootstrap/centos5-gems.erb +6 -15
  36. data/lib/chef/knife/bootstrap/fedora13-gems.erb +3 -4
  37. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
  38. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +6 -5
  39. data/lib/chef/knife/client_bulk_delete.rb +6 -3
  40. data/lib/chef/knife/client_create.rb +13 -10
  41. data/lib/chef/knife/client_delete.rb +10 -7
  42. data/lib/chef/knife/client_edit.rb +9 -6
  43. data/lib/chef/knife/client_list.rb +8 -5
  44. data/lib/chef/knife/client_reregister.rb +9 -6
  45. data/lib/chef/knife/client_show.rb +9 -6
  46. data/lib/chef/knife/configure.rb +15 -19
  47. data/lib/chef/knife/configure_client.rb +4 -4
  48. data/lib/chef/knife/cookbook_bulk_delete.rb +11 -8
  49. data/lib/chef/knife/cookbook_create.rb +120 -55
  50. data/lib/chef/knife/cookbook_delete.rb +18 -12
  51. data/lib/chef/knife/cookbook_download.rb +10 -6
  52. data/lib/chef/knife/cookbook_list.rb +15 -6
  53. data/lib/chef/knife/cookbook_metadata.rb +41 -21
  54. data/lib/chef/knife/cookbook_metadata_from_file.rb +4 -0
  55. data/lib/chef/knife/cookbook_show.rb +16 -5
  56. data/lib/chef/knife/cookbook_site_download.rb +2 -2
  57. data/lib/chef/knife/cookbook_site_share.rb +18 -13
  58. data/lib/chef/knife/cookbook_site_unshare.rb +7 -4
  59. data/lib/chef/knife/cookbook_site_vendor.rb +21 -18
  60. data/lib/chef/knife/cookbook_test.rb +14 -14
  61. data/lib/chef/knife/cookbook_upload.rb +91 -40
  62. data/lib/chef/knife/data_bag_create.rb +41 -6
  63. data/lib/chef/knife/data_bag_delete.rb +5 -3
  64. data/lib/chef/knife/data_bag_edit.rb +55 -11
  65. data/lib/chef/knife/data_bag_from_file.rb +47 -7
  66. data/lib/chef/knife/data_bag_list.rb +4 -1
  67. data/lib/chef/knife/data_bag_show.rb +44 -4
  68. data/lib/chef/knife/environment_create.rb +53 -0
  69. data/lib/chef/knife/environment_delete.rb +45 -0
  70. data/lib/chef/knife/environment_edit.rb +45 -0
  71. data/lib/chef/knife/environment_from_file.rb +39 -0
  72. data/lib/chef/knife/environment_list.rb +42 -0
  73. data/lib/chef/knife/environment_show.rb +46 -0
  74. data/lib/chef/knife/exec.rb +1 -1
  75. data/lib/chef/knife/index_rebuild.rb +8 -9
  76. data/lib/chef/knife/node_bulk_delete.rb +9 -6
  77. data/lib/chef/knife/node_create.rb +9 -6
  78. data/lib/chef/knife/node_delete.rb +10 -7
  79. data/lib/chef/knife/node_edit.rb +129 -10
  80. data/lib/chef/knife/node_from_file.rb +10 -7
  81. data/lib/chef/knife/node_list.rb +11 -6
  82. data/lib/chef/knife/node_run_list_add.rb +10 -7
  83. data/lib/chef/knife/node_run_list_remove.rb +9 -6
  84. data/lib/chef/knife/node_show.rb +15 -7
  85. data/lib/chef/knife/recipe_list.rb +4 -3
  86. data/lib/chef/knife/role_bulk_delete.rb +9 -6
  87. data/lib/chef/knife/role_create.rb +9 -6
  88. data/lib/chef/knife/role_delete.rb +10 -7
  89. data/lib/chef/knife/role_edit.rb +11 -8
  90. data/lib/chef/knife/role_from_file.rb +10 -7
  91. data/lib/chef/knife/role_list.rb +8 -5
  92. data/lib/chef/knife/role_show.rb +11 -8
  93. data/lib/chef/knife/search.rb +33 -10
  94. data/lib/chef/knife/ssh.rb +33 -61
  95. data/lib/chef/knife/status.rb +7 -4
  96. data/lib/chef/knife/subcommand_loader.rb +101 -0
  97. data/lib/chef/knife/tag_create.rb +31 -0
  98. data/lib/chef/knife/tag_delete.rb +31 -0
  99. data/lib/chef/knife/tag_list.rb +29 -0
  100. data/lib/chef/knife/ui.rb +229 -0
  101. data/lib/chef/knife/windows_bootstrap.rb +8 -5
  102. data/lib/chef/log.rb +5 -59
  103. data/lib/chef/mash.rb +211 -0
  104. data/lib/chef/mixins.rb +1 -2
  105. data/lib/chef/nil_argument.rb +3 -0
  106. data/lib/chef/node.rb +96 -34
  107. data/lib/chef/platform.rb +27 -0
  108. data/lib/chef/provider/cookbook_file.rb +21 -20
  109. data/lib/chef/provider/deploy/revision.rb +3 -0
  110. data/lib/chef/provider/file.rb +20 -11
  111. data/lib/chef/provider/git.rb +26 -26
  112. data/lib/chef/provider/group/aix.rb +70 -0
  113. data/lib/chef/provider/group/groupadd.rb +7 -4
  114. data/lib/chef/provider/group/usermod.rb +1 -1
  115. data/lib/chef/provider/package.rb +28 -28
  116. data/lib/chef/provider/package/dpkg.rb +1 -1
  117. data/lib/chef/provider/package/portage.rb +50 -39
  118. data/lib/chef/provider/package/rubygems.rb +1 -1
  119. data/lib/chef/provider/package/zypper.rb +3 -20
  120. data/lib/chef/provider/remote_directory.rb +0 -2
  121. data/lib/chef/provider/remote_file.rb +2 -3
  122. data/lib/chef/provider/service/arch.rb +28 -35
  123. data/lib/chef/provider/service/simple.rb +1 -1
  124. data/lib/chef/provider/subversion.rb +22 -22
  125. data/lib/chef/providers.rb +1 -0
  126. data/lib/chef/recipe.rb +10 -12
  127. data/lib/chef/resource.rb +49 -42
  128. data/lib/chef/resource/gem_package.rb +7 -3
  129. data/lib/chef/resource/git.rb +5 -5
  130. data/lib/chef/resource/package.rb +7 -7
  131. data/lib/chef/resource/scm.rb +2 -1
  132. data/lib/chef/resource/solaris_package.rb +0 -1
  133. data/lib/chef/resource/yum_package.rb +0 -1
  134. data/lib/chef/rest.rb +7 -16
  135. data/lib/chef/rest/rest_request.rb +0 -16
  136. data/lib/chef/role.rb +67 -13
  137. data/lib/chef/run_context.rb +37 -21
  138. data/lib/chef/run_list.rb +30 -15
  139. data/lib/chef/run_list/run_list_expansion.rb +41 -20
  140. data/lib/chef/run_list/run_list_item.rb +20 -6
  141. data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
  142. data/lib/chef/runner.rb +7 -15
  143. data/lib/chef/search/query.rb +12 -7
  144. data/lib/chef/shef.rb +6 -7
  145. data/lib/chef/shef/shef_session.rb +40 -35
  146. data/lib/chef/shell_out.rb +22 -201
  147. data/lib/chef/shell_out/unix.rb +224 -0
  148. data/lib/chef/shell_out/windows.rb +95 -0
  149. data/lib/chef/solr_query.rb +187 -0
  150. data/lib/chef/solr_query/lucene.treetop +145 -0
  151. data/lib/chef/solr_query/lucene_nodes.rb +285 -0
  152. data/lib/chef/solr_query/query_transform.rb +65 -0
  153. data/lib/chef/solr_query/solr_http_request.rb +118 -0
  154. data/lib/chef/version.rb +4 -2
  155. data/lib/chef/version_class.rb +70 -0
  156. data/lib/chef/version_constraint.rb +116 -0
  157. metadata +68 -37
  158. data/lib/chef/cookbook/metadata/version.rb +0 -87
  159. data/lib/chef/knife/bluebox_images_list.rb +0 -54
  160. data/lib/chef/knife/bluebox_server_create.rb +0 -157
  161. data/lib/chef/knife/bluebox_server_delete.rb +0 -63
  162. data/lib/chef/knife/bluebox_server_list.rb +0 -59
  163. data/lib/chef/knife/ec2_instance_data.rb +0 -46
  164. data/lib/chef/knife/ec2_server_create.rb +0 -218
  165. data/lib/chef/knife/ec2_server_delete.rb +0 -87
  166. data/lib/chef/knife/ec2_server_list.rb +0 -89
  167. data/lib/chef/knife/rackspace_server_create.rb +0 -184
  168. data/lib/chef/knife/rackspace_server_delete.rb +0 -57
  169. data/lib/chef/knife/rackspace_server_list.rb +0 -59
  170. data/lib/chef/knife/slicehost_images_list.rb +0 -53
  171. data/lib/chef/knife/slicehost_server_create.rb +0 -103
  172. data/lib/chef/knife/slicehost_server_delete.rb +0 -61
  173. data/lib/chef/knife/slicehost_server_list.rb +0 -64
  174. data/lib/chef/knife/terremark_server_create.rb +0 -152
  175. data/lib/chef/knife/terremark_server_delete.rb +0 -87
  176. data/lib/chef/knife/terremark_server_list.rb +0 -77
  177. data/lib/chef/mixin/find_preferred_file.rb +0 -92
@@ -49,7 +49,7 @@ class Chef
49
49
  @current_resource.running false
50
50
  nil
51
51
  end
52
- else
52
+ elsif
53
53
  Chef::Log.debug "#{@new_resource}: falling back to process table inspection"
54
54
  if ps_cmd.nil? or ps_cmd.empty?
55
55
  raise Chef::Exceptions::Service, "#{@new_resource}: could not determine how to inspect the process table, please set this nodes 'command.ps' attribute"
@@ -6,9 +6,9 @@
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
8
8
  # You may obtain a copy of the License at
9
- #
9
+ #
10
10
  # http://www.apache.org/licenses/LICENSE-2.0
11
- #
11
+ #
12
12
  # Unless required by applicable law or agreed to in writing, software
13
13
  # distributed under the License is distributed on an "AS IS" BASIS,
14
14
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -25,9 +25,9 @@ require 'fileutils'
25
25
  class Chef
26
26
  class Provider
27
27
  class Subversion < Chef::Provider
28
-
28
+
29
29
  include Chef::Mixin::Command
30
-
30
+
31
31
  def load_current_resource
32
32
  @current_resource = Chef::Resource::Subversion.new(@new_resource.name)
33
33
 
@@ -37,7 +37,7 @@ class Chef
37
37
  end
38
38
  end
39
39
  end
40
-
40
+
41
41
  def action_checkout
42
42
  assert_target_directory_valid!
43
43
  if target_dir_non_existant_or_empty?
@@ -47,7 +47,7 @@ class Chef
47
47
  Chef::Log.info "Taking no action, checkout destination #{@new_resource.destination} already exists or is a non-empty directory"
48
48
  end
49
49
  end
50
-
50
+
51
51
  def action_export
52
52
  assert_target_directory_valid!
53
53
  if target_dir_non_existant_or_empty?
@@ -57,13 +57,13 @@ class Chef
57
57
  Chef::Log.info "Taking no action, export destination #{@new_resource.destination} already exists or is a non-empty directory"
58
58
  end
59
59
  end
60
-
60
+
61
61
  def action_force_export
62
62
  assert_target_directory_valid!
63
63
  run_command(run_options(:command => export_command))
64
64
  @new_resource.updated_by_last_action(true)
65
65
  end
66
-
66
+
67
67
  def action_sync
68
68
  assert_target_directory_valid!
69
69
  if ::File.exist?(::File.join(@new_resource.destination, ".svn"))
@@ -79,18 +79,18 @@ class Chef
79
79
  @new_resource.updated_by_last_action(true)
80
80
  end
81
81
  end
82
-
82
+
83
83
  def sync_command
84
84
  Chef::Log.info "Updating working copy #{@new_resource.destination} to revision #{@new_resource.revision}"
85
85
  scm :update, @new_resource.svn_arguments, verbose, authentication, "-r#{revision_int}", @new_resource.destination
86
86
  end
87
-
87
+
88
88
  def checkout_command
89
89
  Chef::Log.info "checking out #{@new_resource.repository} at revision #{@new_resource.revision} to #{@new_resource.destination}"
90
- scm :checkout, @new_resource.svn_arguments, verbose, authentication,
90
+ scm :checkout, @new_resource.svn_arguments, verbose, authentication,
91
91
  "-r#{revision_int}", @new_resource.repository, @new_resource.destination
92
92
  end
93
-
93
+
94
94
  def export_command
95
95
  Chef::Log.info "exporting #{@new_resource.repository} at revision #{@new_resource.revision} to #{@new_resource.destination}"
96
96
  args = ["--force"]
@@ -98,7 +98,7 @@ class Chef
98
98
  "-r#{revision_int}" << @new_resource.repository << @new_resource.destination
99
99
  scm :export, *args
100
100
  end
101
-
101
+
102
102
  # If the specified revision isn't an integer ("HEAD" for example), look
103
103
  # up the revision id by asking the server
104
104
  # If the specified revision is an integer, trust it.
@@ -114,14 +114,14 @@ class Chef
114
114
  end
115
115
  end
116
116
  end
117
-
117
+
118
118
  alias :revision_slug :revision_int
119
-
119
+
120
120
  def find_current_revision
121
121
  return nil unless ::File.exist?(::File.join(@new_resource.destination, ".svn"))
122
122
  command = scm(:info)
123
123
  status, svn_info, error_message = output_of_command(command, run_options(:cwd => cwd))
124
-
124
+
125
125
  unless [0,1].include?(status.exitstatus)
126
126
  handle_command_failures(status, "STDOUT: #{svn_info}\nSTDERR: #{error_message}")
127
127
  end
@@ -137,17 +137,17 @@ class Chef
137
137
  run_opts[:group] = @new_resource.group if @new_resource.group
138
138
  run_opts
139
139
  end
140
-
140
+
141
141
  private
142
-
142
+
143
143
  def cwd
144
144
  @new_resource.destination
145
145
  end
146
-
146
+
147
147
  def verbose
148
148
  "-q"
149
149
  end
150
-
150
+
151
151
  def extract_revision_info(svn_info)
152
152
  begin
153
153
  repo_attrs = YAML.load(svn_info)
@@ -160,7 +160,7 @@ class Chef
160
160
  Chef::Log.debug "Resolved revision #{@new_resource.revision} to #{rev}"
161
161
  rev
162
162
  end
163
-
163
+
164
164
  # If a username is configured for the SCM, return the command-line
165
165
  # switches for that. Note that we don't need to return the password
166
166
  # switch, since Capistrano will check for that prompt in the output
@@ -171,7 +171,7 @@ class Chef
171
171
  result << "--password #{@new_resource.svn_password} "
172
172
  result
173
173
  end
174
-
174
+
175
175
  def scm(*args)
176
176
  ['svn', *args].compact.join(" ")
177
177
  end
@@ -78,6 +78,7 @@ require 'chef/provider/user/pw'
78
78
  require 'chef/provider/user/useradd'
79
79
  require 'chef/provider/user/windows'
80
80
 
81
+ require 'chef/provider/group/aix'
81
82
  require 'chef/provider/group/dscl'
82
83
  require 'chef/provider/group/gpasswd'
83
84
  require 'chef/provider/group/groupadd'
@@ -7,9 +7,9 @@
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
8
8
  # you may not use this file except in compliance with the License.
9
9
  # You may obtain a copy of the License at
10
- #
10
+ #
11
11
  # http://www.apache.org/licenses/LICENSE-2.0
12
- #
12
+ #
13
13
  # Unless required by applicable law or agreed to in writing, software
14
14
  # distributed under the License is distributed on an "AS IS" BASIS,
15
15
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -29,13 +29,13 @@ class Chef
29
29
  # == Chef::Recipe
30
30
  # A Recipe object is the context in which Chef recipes are evaluated.
31
31
  class Recipe
32
-
32
+
33
33
  include Chef::Mixin::FromFile
34
34
  include Chef::Mixin::Language
35
35
  include Chef::Mixin::LanguageIncludeRecipe
36
36
  include Chef::Mixin::RecipeDefinitionDSLCore
37
37
  include Chef::Mixin::Deprecation
38
-
38
+
39
39
  attr_accessor :cookbook_name, :recipe_name, :recipe, :params, :run_context
40
40
 
41
41
  # Parses a potentially fully-qualified recipe name into its
@@ -63,20 +63,18 @@ class Chef
63
63
  @params = Hash.new
64
64
  @node = deprecated_ivar(run_context.node, :node, :warn)
65
65
  end
66
-
66
+
67
67
  # Used in DSL mixins
68
68
  def node
69
69
  run_context.node
70
70
  end
71
-
71
+
72
72
  # Used by the DSL to look up resources when executing in the context of a
73
73
  # recipe.
74
- #--
75
- # what does this do? and what is args? TODO 5-14-2010.
76
74
  def resources(*args)
77
75
  run_context.resource_collection.find(*args)
78
76
  end
79
-
77
+
80
78
  # Sets a tag, or list of tags, for this node. Syntactic sugar for
81
79
  # run_context.node[:tags].
82
80
  #
@@ -97,7 +95,7 @@ class Chef
97
95
  run_context.node[:tags]
98
96
  end
99
97
  end
100
-
98
+
101
99
  # Returns true if the node is tagged with *all* of the supplied +tags+.
102
100
  #
103
101
  # === Parameters
@@ -112,7 +110,7 @@ class Chef
112
110
  end
113
111
  true
114
112
  end
115
-
113
+
116
114
  # Removes the list of tags from the node.
117
115
  #
118
116
  # === Parameters
@@ -125,6 +123,6 @@ class Chef
125
123
  run_context.node[:tags].delete(tag)
126
124
  end
127
125
  end
128
-
126
+
129
127
  end
130
128
  end
@@ -7,9 +7,9 @@
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
8
8
  # you may not use this file except in compliance with the License.
9
9
  # You may obtain a copy of the License at
10
- #
10
+ #
11
11
  # http://www.apache.org/licenses/LICENSE-2.0
12
- #
12
+ #
13
13
  # Unless required by applicable law or agreed to in writing, software
14
14
  # distributed under the License is distributed on an "AS IS" BASIS,
15
15
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -77,7 +77,7 @@ F
77
77
  include Chef::Mixin::Language
78
78
  include Chef::Mixin::ConvertToClassName
79
79
  include Chef::Mixin::Deprecation
80
-
80
+
81
81
  attr_accessor :params
82
82
  attr_accessor :provider
83
83
  attr_accessor :allowed_actions
@@ -97,7 +97,7 @@ F
97
97
  # Struct with a #resource and #action member
98
98
  attr_reader :immediate_notifications
99
99
  attr_reader :delayed_notifications
100
-
100
+
101
101
  def initialize(name, run_context=nil)
102
102
  @name = name
103
103
  @run_context = run_context
@@ -144,7 +144,7 @@ F
144
144
  raise NoMethodError, "undefined method `#{method_symbol.to_s}' for #{self.class.to_s}"
145
145
  end
146
146
  end
147
-
147
+
148
148
  def load_prior_resource
149
149
  begin
150
150
  prior_resource = run_context.resource_collection.lookup(self.to_s)
@@ -159,7 +159,7 @@ F
159
159
  true
160
160
  end
161
161
  end
162
-
162
+
163
163
  def supports(args={})
164
164
  if args.any?
165
165
  @supports = args
@@ -167,7 +167,7 @@ F
167
167
  @supports
168
168
  end
169
169
  end
170
-
170
+
171
171
  def provider(arg=nil)
172
172
  klass = if arg.kind_of?(String) || arg.kind_of?(Symbol)
173
173
  lookup_provider_constant(arg)
@@ -180,7 +180,7 @@ F
180
180
  :kind_of => [ Class ]
181
181
  )
182
182
  end
183
-
183
+
184
184
  def action(arg=nil)
185
185
  if arg
186
186
  action_list = arg.kind_of?(Array) ? arg : [ arg ]
@@ -200,21 +200,21 @@ F
200
200
  @action
201
201
  end
202
202
  end
203
-
203
+
204
204
  def name(name=nil)
205
205
  set_if_args(@name, name) do
206
206
  raise ArgumentError, "name must be a string!" unless name.kind_of?(String)
207
207
  @name = name
208
208
  end
209
209
  end
210
-
210
+
211
211
  def noop(tf=nil)
212
- set_if_args(@noop, tf) do
212
+ set_if_args(@noop, tf) do
213
213
  raise ArgumentError, "noop must be true or false!" unless tf == true || tf == false
214
214
  @noop = tf
215
215
  end
216
216
  end
217
-
217
+
218
218
  def ignore_failure(arg=nil)
219
219
  set_or_return(
220
220
  :ignore_failure,
@@ -222,7 +222,7 @@ F
222
222
  :kind_of => [ TrueClass, FalseClass ]
223
223
  )
224
224
  end
225
-
225
+
226
226
  def epic_fail(arg=nil)
227
227
  ignore_failure(arg)
228
228
  end
@@ -243,7 +243,7 @@ F
243
243
  Chef::Log.debug "adding notification from resource #{self} to `#{resource.inspect}' => `#{notification.inspect}'"
244
244
  add_notification(action, resource, timing)
245
245
  end
246
- end
246
+ end
247
247
  end
248
248
  rescue NoMethodError
249
249
  Chef::Log.fatal("Error processing notifies(#{args.inspect}) on #{self}")
@@ -286,7 +286,7 @@ F
286
286
  def resources(*args)
287
287
  run_context.resource_collection.find(*args)
288
288
  end
289
-
289
+
290
290
  def subscribes(action, resources, timing=:delayed)
291
291
  resources = [resources].flatten
292
292
  resources.each do |resource|
@@ -302,7 +302,7 @@ F
302
302
  return *args
303
303
  end
304
304
  end
305
-
305
+
306
306
  def to_s
307
307
  "#{@resource_name}[#{@name}]"
308
308
  end
@@ -318,13 +318,20 @@ F
318
318
  end
319
319
  text << "end\n"
320
320
  end
321
-
322
- # Serialize this object as a hash
321
+
322
+ def inspect
323
+ ivars = instance_variables.map { |ivar| ivar.to_sym } - HIDDEN_IVARS
324
+ ivars.inject("<#{to_s}") do |str, ivar|
325
+ str << " #{ivar}: #{instance_variable_get(ivar).inspect}"
326
+ end << ">"
327
+ end
328
+
329
+ # Serialize this object as a hash
323
330
  def to_json(*a)
324
331
  instance_vars = Hash.new
325
332
  self.instance_variables.each do |iv|
326
333
  unless iv == "@run_context"
327
- instance_vars[iv] = self.instance_variable_get(iv)
334
+ instance_vars[iv] = self.instance_variable_get(iv)
328
335
  end
329
336
  end
330
337
  results = {
@@ -333,7 +340,7 @@ F
333
340
  }
334
341
  results.to_json(*a)
335
342
  end
336
-
343
+
337
344
  def to_hash
338
345
  instance_vars = Hash.new
339
346
  self.instance_variables.each do |iv|
@@ -342,7 +349,7 @@ F
342
349
  end
343
350
  instance_vars
344
351
  end
345
-
352
+
346
353
  def only_if(arg=nil, args = {}, &blk)
347
354
  if Kernel.block_given?
348
355
  @only_if = blk
@@ -353,7 +360,7 @@ F
353
360
  end
354
361
  @only_if
355
362
  end
356
-
363
+
357
364
  def not_if(arg=nil, args = {}, &blk)
358
365
  if Kernel.block_given?
359
366
  @not_if = blk
@@ -364,7 +371,7 @@ F
364
371
  end
365
372
  @not_if
366
373
  end
367
-
374
+
368
375
  def run_action(action)
369
376
  # ensure that we don't leave @updated_by_last_action set to true
370
377
  # on accident
@@ -403,13 +410,13 @@ F
403
410
  def updated_by_last_action?
404
411
  @updated_by_last_action
405
412
  end
406
-
413
+
407
414
  def updated?
408
415
  updated
409
416
  end
410
417
 
411
418
  class << self
412
-
419
+
413
420
  def json_create(o)
414
421
  resource = self.new(o["instance_vars"]["@name"])
415
422
  o["instance_vars"].each do |k,v|
@@ -417,9 +424,9 @@ F
417
424
  end
418
425
  resource
419
426
  end
420
-
427
+
421
428
  include Chef::Mixin::ConvertToClassName
422
-
429
+
423
430
  def attribute(attr_name, validation_opts={})
424
431
  # This atrocity is the only way to support 1.8 and 1.9 at the same time
425
432
  # When you're ready to drop 1.8 support, do this:
@@ -431,12 +438,12 @@ F
431
438
  end
432
439
  SHIM
433
440
  class_eval(shim_method)
434
-
441
+
435
442
  define_method("_set_or_return_#{attr_name.to_s}".to_sym) do |arg|
436
443
  set_or_return(attr_name.to_sym, arg, validation_opts)
437
444
  end
438
445
  end
439
-
446
+
440
447
  def build_from_file(cookbook_name, filename)
441
448
  rname = filename_to_qualified_string(cookbook_name, filename)
442
449
 
@@ -444,33 +451,33 @@ F
444
451
  class_name = convert_to_class_name(rname)
445
452
  overriding = Chef::Resource.const_defined?(class_name)
446
453
  Chef::Log.info("#{class_name} light-weight resource already initialized -- overriding!") if overriding
447
-
454
+
448
455
  new_resource_class = Class.new self do |cls|
449
-
456
+
450
457
  # default initialize method that ensures that when initialize is finally
451
458
  # wrapped (see below), super is called in the event that the resource
452
459
  # definer does not implement initialize
453
460
  def initialize(name, run_context)
454
461
  super(name, run_context)
455
462
  end
456
-
463
+
457
464
  @actions_to_create = []
458
-
465
+
459
466
  class << cls
460
467
  include Chef::Mixin::FromFile
461
-
468
+
462
469
  def actions_to_create
463
470
  @actions_to_create
464
471
  end
465
-
472
+
466
473
  define_method(:actions) do |*action_names|
467
474
  actions_to_create.push(*action_names)
468
475
  end
469
476
  end
470
-
477
+
471
478
  # load resource definition from file
472
479
  cls.class_from_file(filename)
473
-
480
+
474
481
  # create a new constructor that wraps the old one and adds the actions
475
482
  # specified in the DSL
476
483
  old_init = instance_method(:initialize)
@@ -482,16 +489,16 @@ F
482
489
  allowed_actions.push(self.class.actions_to_create).flatten!
483
490
  end
484
491
  end
485
-
492
+
486
493
  # register new class as a Chef::Resource
487
494
  class_name = convert_to_class_name(rname)
488
495
  Chef::Resource.const_set(class_name, new_resource_class)
489
496
  Chef::Log.debug("Loaded contents of #{filename} into a resource named #{rname} defined in Chef::Resource::#{class_name}")
490
-
497
+
491
498
  new_resource_class
492
499
  end
493
-
494
- # Resources that want providers namespaced somewhere other than
500
+
501
+ # Resources that want providers namespaced somewhere other than
495
502
  # Chef::Provider can set the namespace with +provider_base+
496
503
  # Ex:
497
504
  # class MyResource < Chef::Resource
@@ -502,7 +509,7 @@ F
502
509
  @provider_base ||= arg
503
510
  @provider_base ||= Chef::Provider
504
511
  end
505
-
512
+
506
513
  end
507
514
 
508
515
  private