microwave 0.1004.5 → 0.1004.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -36,6 +36,5 @@ require 'chef/handler/json_file'
36
36
 
37
37
  require 'chef/monkey_patches/tempfile'
38
38
  require 'chef/monkey_patches/dir'
39
- require 'chef/monkey_patches/string'
40
39
  require 'chef/monkey_patches/numeric'
41
40
  require 'chef/monkey_patches/object'
@@ -236,25 +236,6 @@ class Chef
236
236
  @node
237
237
  end
238
238
 
239
- # Sync_cookbooks eagerly loads all files except files and
240
- # templates. It returns the cookbook_hash -- the return result
241
- # from /environments/#{node.chef_environment}/cookbook_versions,
242
- # which we will use for our run_context.
243
- #
244
- # === Returns
245
- # Hash:: The hash of cookbooks with download URLs as given by the server
246
- def sync_cookbooks
247
- Chef::Log.debug("Synchronizing cookbooks")
248
- cookbook_hash = rest.post_rest("environments/#{@node.chef_environment}/cookbook_versions",
249
- {:run_list => @expanded_run_list_with_versions})
250
- Chef::CookbookVersion.sync_cookbooks(cookbook_hash)
251
-
252
- # register the file cache path in the cookbook path so that CookbookLoader actually picks up the synced cookbooks
253
- Chef::Config[:cookbook_path] = File.join(Chef::Config[:file_cache_path], "cookbooks")
254
-
255
- cookbook_hash
256
- end
257
-
258
239
  # Converges the node.
259
240
  #
260
241
  # === Returns
@@ -25,46 +25,10 @@ class Chef
25
25
 
26
26
  extend Mixlib::Config
27
27
 
28
- # Manages the chef secret session key
29
- # === Returns
30
- # <newkey>:: A new or retrieved session key
31
- #
32
- def self.manage_secret_key
33
- newkey = nil
34
- if Chef::FileCache.has_key?("chef_server_cookie_id")
35
- newkey = Chef::FileCache.load("chef_server_cookie_id")
36
- else
37
- chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
38
- newkey = ""
39
- 40.times { |i| newkey << chars[rand(chars.size-1)] }
40
- Chef::FileCache.store("chef_server_cookie_id", newkey)
41
- end
42
- newkey
43
- end
44
-
45
28
  def self.inspect
46
29
  configuration.inspect
47
30
  end
48
31
 
49
- # Override the config dispatch to set the value of multiple server options simultaneously
50
- #
51
- # === Parameters
52
- # url<String>:: String to be set for all of the chef-server-api URL's
53
- #
54
- config_attr_writer :chef_server_url do |url|
55
- configure do |c|
56
- [ :registration_url,
57
- :template_url,
58
- :remotefile_url,
59
- :search_url,
60
- :chef_server_url,
61
- :role_url ].each do |u|
62
- c[u] = url
63
- end
64
- end
65
- url
66
- end
67
-
68
32
  # Override the config dispatch to set the value of log_location configuration option
69
33
  #
70
34
  # === Parameters
@@ -84,50 +48,35 @@ class Chef
84
48
  # Turn on "path sanity" by default. See also: http://wiki.opscode.com/display/chef/User+Environment+PATH+Sanity
85
49
  enforce_path_sanity(true)
86
50
 
87
- # The number of times the client should retry when registering with the server
88
- client_registration_retries 5
89
-
90
51
  # Where the cookbooks are located. Meaning is somewhat context dependent between
91
52
  # chef-client, and chef-solo.
92
- cookbook_path [ "/var/chef/cookbooks", "/var/chef/site-cookbooks" ]
53
+ cookbook_path [ "#{ENV['HOME']}/cookbooks" ] + $:.reject {|x| x.match(/\/cookbooks$/) ? nil : x }
93
54
 
94
55
  # Where cookbook files are stored on the server (by content checksum)
95
- checksum_path "/var/chef/checksums"
56
+ checksum_path "#{ENV['HOME']}/.microwave/checksums"
96
57
 
97
58
  # Where chef's cache files should be stored
98
- file_cache_path "/var/chef/cache"
59
+ file_cache_path "#{ENV['HOME']}/.microwave/cache"
99
60
 
100
61
  # Where backups of chef-managed files should go
101
- file_backup_path "/var/chef/backup"
62
+ file_backup_path "#{ENV['HOME']}/.microwave/backup"
102
63
 
103
- http_retry_count 5
104
- http_retry_delay 5
105
64
  interval nil
106
65
  log_level :info
107
66
  log_location STDOUT
108
67
  verbose_logging nil
109
68
  node_name nil
110
- node_path "/var/chef/node"
69
+ node_path "#{ENV['HOME']}/nodes"
111
70
 
112
71
  pid_file nil
113
72
 
114
- rest_timeout 300
115
73
  run_command_stderr_timeout 120
116
74
  run_command_stdout_timeout 120
117
75
  solo false
118
76
  splay nil
119
77
 
120
- # Set these to enable SSL authentication / mutual-authentication
121
- # with the server
122
- ssl_client_cert nil
123
- ssl_client_key nil
124
- ssl_verify_mode :verify_none
125
- ssl_ca_path nil
126
- ssl_ca_file nil
127
-
128
-
129
78
  # Where should chef-solo look for role files?
130
- role_path "/var/chef/roles"
79
+ role_path [ "#{ENV['HOME']}/roles" ]
131
80
 
132
81
  # Report Handlers
133
82
  report_handlers []
@@ -138,7 +87,7 @@ class Chef
138
87
  # Checksum Cache
139
88
  # Uses Moneta on the back-end
140
89
  cache_type "BasicFile"
141
- cache_options({ :path => "/var/chef/cache/checksums", :skip_expires => true })
90
+ cache_options({ :path => "#{ENV['HOME']}/.microwave/cache/checksums", :skip_expires => true })
142
91
 
143
92
  # Those lists of regular expressions define what chef considers a
144
93
  # valid user and group name
@@ -45,7 +45,6 @@ class Chef
45
45
 
46
46
  def load_cookbooks
47
47
  load_as(:attribute_filenames, 'attributes', '*.rb')
48
- load_as(:definition_filenames, 'definitions', '*.rb')
49
48
  load_as(:recipe_filenames, 'recipes', '*.rb')
50
49
  load_as(:library_filenames, 'libraries', '*.rb')
51
50
  load_recursively_as(:template_filenames, "templates", "*")
@@ -58,8 +57,6 @@ class Chef
58
57
 
59
58
  if File.exists?(File.join(@cookbook_path, "metadata.rb"))
60
59
  @metadata_filenames << File.join(@cookbook_path, "metadata.rb")
61
- elsif File.exists?(File.join(@cookbook_path, "metadata.json"))
62
- @metadata_filenames << File.join(@cookbook_path, "metadata.json")
63
60
  end
64
61
 
65
62
  if empty?
@@ -94,8 +91,6 @@ class Chef
94
91
  case metadata_file
95
92
  when /\.rb$/
96
93
  apply_ruby_metadata(metadata_file)
97
- when /\.json$/
98
- apply_json_metadata(metadata_file)
99
94
  else
100
95
  raise RuntimeError, "Invalid metadata file: #{metadata_file} for cookbook: #{cookbook_version}"
101
96
  end
@@ -159,15 +154,6 @@ class Chef
159
154
  end
160
155
  end
161
156
 
162
- def apply_json_metadata(file)
163
- begin
164
- @metadata.from_json(IO.read(file))
165
- rescue JSON::ParserError
166
- Chef::Log.error("Couldn't parse cookbook metadata JSON for #@cookbook_name in " + file)
167
- raise
168
- end
169
- end
170
-
171
157
  end
172
158
  end
173
159
  end
@@ -22,7 +22,6 @@
22
22
  require 'chef/log'
23
23
  require 'chef/client'
24
24
  require 'chef/node'
25
- require 'chef/resource_definition_list'
26
25
  require 'chef/recipe'
27
26
  require 'chef/cookbook/file_vendor'
28
27
  require 'chef/checksum'
@@ -92,7 +91,7 @@ class Chef
92
91
  class CookbookVersion
93
92
  include Comparable
94
93
 
95
- COOKBOOK_SEGMENTS = [ :resources, :providers, :recipes, :definitions, :libraries, :attributes, :files, :templates, :root_files ]
94
+ COOKBOOK_SEGMENTS = [ :resources, :providers, :recipes, :libraries, :attributes, :files, :templates, :root_files ]
96
95
 
97
96
  attr_accessor :root_dir
98
97
  attr_accessor :definition_filenames
@@ -149,25 +148,6 @@ class Chef
149
148
  reset_cache_validity
150
149
  end
151
150
 
152
- # Synchronizes all the cookbooks from the chef-server.
153
- #
154
- # === Returns
155
- # true:: Always returns true
156
- def self.sync_cookbooks(cookbook_hash)
157
- Chef::Log.info("Loading cookbooks [#{cookbook_hash.keys.sort.join(', ')}]")
158
- Chef::Log.debug("Cookbooks detail: #{cookbook_hash.inspect}")
159
-
160
- clear_obsoleted_cookbooks(cookbook_hash)
161
-
162
- # Synchronize each of the node's cookbooks, and add to the
163
- # valid_cache_entries hash.
164
- cookbook_hash.values.each do |cookbook|
165
- sync_cookbook_file_cache(cookbook)
166
- end
167
-
168
- true
169
- end
170
-
171
151
  # Iterates over cached cookbooks' files, removing files belonging to
172
152
  # cookbooks that don't appear in +cookbook_hash+
173
153
  def self.clear_obsoleted_cookbooks(cookbook_hash)
@@ -181,67 +161,6 @@ class Chef
181
161
  end
182
162
  end
183
163
 
184
- # Update the file caches for a given cache segment. Takes a segment name
185
- # and a hash that matches one of the cookbooks/_attribute_files style
186
- # remote file listings.
187
- #
188
- # === Parameters
189
- # cookbook<Chef::Cookbook>:: The cookbook to update
190
- # valid_cache_entries<Hash>:: Out-param; Added to this hash are the files that
191
- # were referred to by this cookbook
192
- def self.sync_cookbook_file_cache(cookbook)
193
- Chef::Log.debug("Synchronizing cookbook #{cookbook.name}")
194
-
195
- # files and templates are lazily loaded, and will be done later.
196
- eager_segments = COOKBOOK_SEGMENTS.dup
197
- eager_segments.delete(:files)
198
- eager_segments.delete(:templates)
199
-
200
- eager_segments.each do |segment|
201
- segment_filenames = Array.new
202
- cookbook.manifest[segment].each do |manifest_record|
203
- # segment = cookbook segment
204
- # remote_list = list of file hashes
205
- #
206
- # We need the list of known good attribute files, so we can delete any that are
207
- # just laying about.
208
-
209
- cache_filename = File.join("cookbooks", cookbook.name, manifest_record['path'])
210
- valid_cache_entries[cache_filename] = true
211
-
212
- current_checksum = nil
213
- if cache.has_key?(cache_filename)
214
- current_checksum = checksum_cookbook_file(cache.load(cache_filename, false))
215
- end
216
-
217
- # If the checksums are different between on-disk (current) and on-server
218
- # (remote, per manifest), do the update. This will also execute if there
219
- # is no current checksum.
220
- if current_checksum != manifest_record['checksum']
221
- raw_file = chef_server_rest.get_rest(manifest_record[:url], true)
222
-
223
- Chef::Log.info("Storing updated #{cache_filename} in the cache.")
224
- cache.move_to(raw_file.path, cache_filename)
225
- else
226
- Chef::Log.debug("Not storing #{cache_filename}, as the cache is up to date.")
227
- end
228
-
229
- # make the segment filenames a full path.
230
- full_path_cache_filename = cache.load(cache_filename, false)
231
- segment_filenames << full_path_cache_filename
232
- end
233
-
234
- # replace segment filenames with a full-path one.
235
- if segment.to_sym == :recipes
236
- cookbook.recipe_filenames = segment_filenames
237
- elsif segment.to_sym == :attributes
238
- cookbook.attribute_filenames = segment_filenames
239
- else
240
- cookbook.segment_filenames(segment).replace(segment_filenames)
241
- end
242
- end
243
- end
244
-
245
164
  def self.cleanup_file_cache
246
165
  end
247
166
 
@@ -423,8 +342,6 @@ class Chef
423
342
  @recipe_filenames
424
343
  when :libraries
425
344
  @library_filenames
426
- when :definitions
427
- @definition_filenames
428
345
  when :attributes
429
346
  @attribute_filenames
430
347
  when :files
@@ -618,58 +535,10 @@ class Chef
618
535
  rendered_manifest
619
536
  end
620
537
 
621
- def metadata_json_file
622
- File.join(root_dir, "metadata.json")
623
- end
624
-
625
538
  def metadata_rb_file
626
539
  File.join(root_dir, "metadata.rb")
627
540
  end
628
541
 
629
- def reload_metadata!
630
- if File.exists?(metadata_json_file)
631
- metadata.from_json(IO.read(metadata_json_file))
632
- end
633
- end
634
-
635
- def destroy
636
- chef_server_rest.delete_rest("cookbooks/#{name}/#{version}")
637
- self
638
- end
639
-
640
- def self.load(name, version="_latest")
641
- version = "_latest" if version == "latest"
642
- chef_server_rest.get_rest("cookbooks/#{name}/#{version}")
643
- end
644
-
645
- def self.list
646
- chef_server_rest.get_rest('cookbooks')
647
- end
648
-
649
- ##
650
- # Given a +cookbook_name+, get a list of all versions that exist on the
651
- # server.
652
- # ===Returns
653
- # [String]:: Array of cookbook versions, which are strings like 'x.y.z'
654
- # nil:: if the cookbook doesn't exist. an error will also be logged.
655
- def self.available_versions(cookbook_name)
656
- chef_server_rest.get_rest("cookbooks/#{cookbook_name}")[cookbook_name]["versions"].map do |cb|
657
- cb["version"]
658
- end
659
- rescue Net::HTTPServerException => e
660
- if e.to_s =~ /^404/
661
- Chef::Log.error("Cannot find a cookbook named #{cookbook_name}")
662
- nil
663
- else
664
- raise
665
- end
666
- end
667
-
668
- # Get the newest version of all cookbooks
669
- def self.latest_cookbooks
670
- chef_server_rest.get_rest('cookbooks/_latest')
671
- end
672
-
673
542
  def <=>(o)
674
543
  raise Chef::Exceptions::CookbookVersionNameMismatch if self.name != o.name
675
544
  # FIXME: can we change the interface to the Metadata class such
@@ -691,7 +560,6 @@ class Chef
691
560
  def generate_manifest
692
561
  manifest = Mash.new({
693
562
  :recipes => Array.new,
694
- :definitions => Array.new,
695
563
  :libraries => Array.new,
696
564
  :attributes => Array.new,
697
565
  :files => Array.new,
@@ -207,42 +207,6 @@ class Chef
207
207
  environment
208
208
  end
209
209
 
210
- def self.list(inflate=false)
211
- if inflate
212
- # TODO: index the environments and use search to inflate - don't inflate for now :(
213
- chef_server_rest.get_rest("environments")
214
- else
215
- chef_server_rest.get_rest("environments")
216
- end
217
- end
218
-
219
- def self.load(name)
220
- chef_server_rest.get_rest("environments/#{name}")
221
- end
222
-
223
- def destroy
224
- chef_server_rest.delete_rest("environments/#{@name}")
225
- end
226
-
227
- def save
228
- begin
229
- chef_server_rest.put_rest("environments/#{@name}", self)
230
- rescue Net::HTTPServerException => e
231
- raise e unless e.response.code == "404"
232
- chef_server_rest.post_rest("environments", self)
233
- end
234
- self
235
- end
236
-
237
- def create
238
- chef_server_rest.post_rest("environments", self)
239
- self
240
- end
241
-
242
- def self.load_filtered_recipe_list(environment)
243
- chef_server_rest.get_rest("environments/#{environment}/recipes")
244
- end
245
-
246
210
  def to_s
247
211
  @name
248
212
  end
@@ -27,7 +27,7 @@ class Chef
27
27
 
28
28
  def initialize(config={})
29
29
  @config = config
30
- @config[:path] ||= "/var/chef/reports"
30
+ @config[:path] ||= "#{ENV['HOME']}/.microwave/reports"
31
31
  @config
32
32
  end
33
33
 
@@ -34,43 +34,27 @@ class Chef
34
34
  include Chef::Mixin::Language
35
35
 
36
36
  def method_missing(method_symbol, *args, &block)
37
- # If we have a definition that matches, we want to use that instead. This should
38
- # let you do some really crazy over-riding of "native" types, if you really want
39
- # to.
40
- if run_context.definitions.has_key?(method_symbol)
41
- # This dupes the high level object, but we still need to dup the params
42
- new_def = run_context.definitions[method_symbol].dup
43
- new_def.params = new_def.params.dup
44
- new_def.node = run_context.node
45
- # This sets up the parameter overrides
46
- new_def.instance_eval(&block) if block
47
- new_recipe = Chef::Recipe.new(cookbook_name, @recipe_name, run_context)
48
- new_recipe.params = new_def.params
49
- new_recipe.params[:name] = args[0]
50
- new_recipe.instance_eval(&new_def.recipe)
51
- else
52
- # Otherwise, we're rocking the regular resource call route.
53
- method_name = method_symbol.to_s
54
- rname = convert_to_class_name(method_name)
37
+ # Otherwise, we're rocking the regular resource call route.
38
+ method_name = method_symbol.to_s
39
+ rname = convert_to_class_name(method_name)
55
40
 
56
- super unless Chef::Resource.const_defined?(rname)
57
- raise ArgumentError, "You must supply a name when declaring a #{method_name} resource" unless args.size > 0
41
+ super unless Chef::Resource.const_defined?(rname)
42
+ raise ArgumentError, "You must supply a name when declaring a #{method_name} resource" unless args.size > 0
58
43
 
59
- # If we have a resource like this one, we want to steal its state
60
- args << run_context
61
- resource = Chef::Resource.const_get(rname).new(*args)
62
- resource.load_prior_resource
63
- resource.cookbook_name = cookbook_name
64
- resource.recipe_name = @recipe_name
65
- resource.params = @params
66
- resource.source_line = caller[0]
67
- # Determine whether this resource is being created in the context of an enclosing Provider
68
- resource.enclosing_provider = self.is_a?(Chef::Provider) ? self : nil
69
- resource.instance_eval(&block) if block
44
+ # If we have a resource like this one, we want to steal its state
45
+ args << run_context
46
+ resource = Chef::Resource.const_get(rname).new(*args)
47
+ resource.load_prior_resource
48
+ resource.cookbook_name = cookbook_name
49
+ resource.recipe_name = @recipe_name
50
+ resource.params = @params
51
+ resource.source_line = caller[0]
52
+ # Determine whether this resource is being created in the context of an enclosing Provider
53
+ resource.enclosing_provider = self.is_a?(Chef::Provider) ? self : nil
54
+ resource.instance_eval(&block) if block
70
55
 
71
- run_context.resource_collection.insert(resource)
72
- resource
73
- end
56
+ run_context.resource_collection.insert(resource)
57
+ resource
74
58
  end
75
59
 
76
60
  end