chef-zero 0.9.9 → 0.9.11

Sign up to get free protection for your applications and to get access to all the features.
data/bin/chef-zero CHANGED
@@ -18,13 +18,19 @@ OptionParser.new do |opts|
18
18
  opts.on("-H", "--host HOST", "Host to bind to (default: 127.0.0.1)") do |value|
19
19
  options[:host] = value
20
20
  end
21
+
21
22
  opts.on("-p", "--port PORT", Integer, "Port to listen on") do |value|
22
23
  options[:port] = value
23
24
  end
25
+
24
26
  opts.on("--[no-]generate-keys", "Whether to generate actual keys or fake it (faster). Default: false.") do |value|
25
27
  options[:generate_real_keys] = value
26
28
  end
27
29
 
30
+ opts.on("-d", "--debug", "Show requests and debugging output") do |value|
31
+ options[:debug] = true
32
+ end
33
+
28
34
  opts.on_tail("-h", "--help", "Show this message") do
29
35
  puts opts
30
36
  exit
@@ -1,5 +1,5 @@
1
1
  require 'digest/md5'
2
- require 'chef_zero/chef/cookbook/metadata'
2
+ require 'hashie/mash'
3
3
 
4
4
  module ChefZero
5
5
  module CookbookData
@@ -29,8 +29,80 @@ module ChefZero
29
29
  attr_reader :name, :fully_qualified_recipe_names
30
30
  end
31
31
 
32
+ # Handles loading configuration values from a Chef config file
33
+ #
34
+ # @author Justin Campbell <justin.campbell@riotgames.com>
35
+ class PretendCookbookMetadata < Hash
36
+ # @param [String] path
37
+ def initialize(cookbook)
38
+ self.name(cookbook.name)
39
+ self.recipes(cookbook.fully_qualified_recipe_names)
40
+ %w(dependencies supports recommendations suggestions conflicting providing replacing recipes).each do |cookbook_arg|
41
+ self[cookbook_arg.to_sym] = Hashie::Mash.new
42
+ end
43
+ end
44
+
45
+ def from_json(filepath)
46
+ self.merge!(JSON.parse(File.read(filepath)))
47
+ end
48
+
49
+ private
50
+
51
+ def depends(cookbook, *version_constraints)
52
+ cookbook_arg(:dependencies, cookbook, version_constraints)
53
+ end
54
+
55
+ def supports(cookbook, *version_constraints)
56
+ cookbook_arg(:supports, cookbook, version_constraints)
57
+ end
58
+
59
+ def recommends(cookbook, *version_constraints)
60
+ cookbook_arg(:recommendations, cookbook, version_constraints)
61
+ end
62
+
63
+ def suggests(cookbook, *version_constraints)
64
+ cookbook_arg(:suggestions, cookbook, version_constraints)
65
+ end
66
+
67
+ def conflicts(cookbook, *version_constraints)
68
+ cookbook_arg(:conflicting, cookbook, version_constraints)
69
+ end
70
+
71
+ def provides(cookbook, *version_constraints)
72
+ cookbook_arg(:providing, cookbook, version_constraints)
73
+ end
74
+
75
+ def replaces(cookbook, *version_constraints)
76
+ cookbook_arg(:replacing, cookbook, version_constraints)
77
+ end
78
+
79
+ def recipe(recipe, description)
80
+ self[:recipes][recipe] = description
81
+ end
82
+
83
+ def attribute(name, options)
84
+ self[:attributes][name] = options
85
+ end
86
+
87
+ def grouping(name, options)
88
+ self[:grouping][name] = options
89
+ end
90
+
91
+ def cookbook_arg(key, cookbook, version_constraints)
92
+ self[key][cookbook] = version_constraints.first || ">= 0.0.0"
93
+ end
94
+
95
+ def method_missing(key, value = nil)
96
+ if value.nil?
97
+ self[key.to_sym]
98
+ else
99
+ store key.to_sym, value
100
+ end
101
+ end
102
+ end
103
+
32
104
  def self.metadata_from(directory, name, version, recipe_names)
33
- metadata = ChefZero::Chef::Cookbook::Metadata.new(PretendCookbook.new(name, recipe_names))
105
+ metadata = PretendCookbookMetadata.new(PretendCookbook.new(name, recipe_names))
34
106
  # If both .rb and .json exist, read .rb
35
107
  # TODO if recipes has 3 recipes in it, and the Ruby/JSON has only one, should
36
108
  # the resulting recipe list have 1, or 3-4 recipes in it?
@@ -12,18 +12,29 @@ module ChefZero
12
12
 
13
13
  def call(request)
14
14
  begin
15
- ChefZero::Log.debug "Request: #{request}"
15
+ ChefZero::Log.debug(request)
16
+
16
17
  clean_path = "/" + request.rest_path.join("/")
17
- routes.each do |route, endpoint|
18
- if route.match(clean_path)
19
- return endpoint.call(request)
20
- end
21
- end
22
- not_found.call(request)
18
+
19
+ response = find_endpoint(clean_path).call(request)
20
+ ChefZero::Log.debug([
21
+ "",
22
+ "--- RESPONSE (#{response[0]}) ---",
23
+ response[2],
24
+ "--- END RESPONSE ---",
25
+ ].join("\n"))
26
+ return response
23
27
  rescue
24
28
  ChefZero::Log.error("#{$!.inspect}\n#{$!.backtrace.join("\n")}")
25
29
  [500, {"Content-Type" => "text/plain"}, "Exception raised! #{$!.inspect}\n#{$!.backtrace.join("\n")}"]
26
30
  end
27
31
  end
32
+
33
+ private
34
+
35
+ def find_endpoint(clean_path)
36
+ _, endpoint = routes.find { |route, endpoint| route.match(clean_path) }
37
+ endpoint || not_found
38
+ end
28
39
  end
29
40
  end
@@ -59,6 +59,7 @@ module ChefZero
59
59
  options[:host] ||= '127.0.0.1'
60
60
  options[:port] ||= 80
61
61
  options[:generate_real_keys] = true if !options.has_key?(:generate_real_keys)
62
+ ChefZero::Log.level = :debug if options.has_key?(:debug)
62
63
  thin_options = {}
63
64
  thin_options[:signals] = options[:signals] if options.has_key?(:signals)
64
65
  @server = Thin::Server.new(options[:host], options[:port], make_app, thin_options)
@@ -1,3 +1,3 @@
1
1
  module ChefZero
2
- VERSION = '0.9.9'
2
+ VERSION = '0.9.11'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-zero
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9
4
+ version: 0.9.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-14 00:00:00.000000000 Z
12
+ date: 2013-05-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thin
@@ -88,7 +88,6 @@ files:
88
88
  - LICENSE
89
89
  - README.rdoc
90
90
  - Rakefile
91
- - lib/chef_zero/chef/cookbook/metadata.rb
92
91
  - lib/chef_zero/cookbook_data.rb
93
92
  - lib/chef_zero/core_ext/hash.rb
94
93
  - lib/chef_zero/core_ext.rb
@@ -1,30 +0,0 @@
1
- module ChefZero
2
- module Chef
3
- module Cookbook
4
- # Handles loading configuration values from a Chef config file
5
- #
6
- # @author Justin Campbell <justin.campbell@riotgames.com>
7
- class Metadata < Hash
8
- # @param [String] path
9
- def initialize(cookbook)
10
- self.name(cookbook.name)
11
- self.recipes(cookbook.fully_qualified_recipe_names)
12
- end
13
-
14
- def from_json(filepath)
15
- self.merge!(JSON.parse(File.read(filepath)))
16
- end
17
-
18
- private
19
-
20
- def method_missing(key, value = nil)
21
- if value.nil?
22
- self[key.to_sym]
23
- else
24
- store key.to_sym, value
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end