chef-zero 0.9.8 → 0.9.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,8 @@
1
+ require 'chef_zero/core_ext'
2
+
1
3
  module ChefZero
4
+ autoload :Log, 'chef_zero/log'
5
+
2
6
  CERTIFICATE = "-----BEGIN CERTIFICATE-----\nMIIDMzCCApygAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnjELMAkGA1UEBhMCVVMx\nEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxFjAUBgNVBAoM\nDU9wc2NvZGUsIEluYy4xHDAaBgNVBAsME0NlcnRpZmljYXRlIFNlcnZpY2UxMjAw\nBgNVBAMMKW9wc2NvZGUuY29tL2VtYWlsQWRkcmVzcz1hdXRoQG9wc2NvZGUuY29t\nMB4XDTEyMTEyMTAwMzQyMVoXDTIyMTExOTAwMzQyMVowgZsxEDAOBgNVBAcTB1Nl\nYXR0bGUxEzARBgNVBAgTCldhc2hpbmd0b24xCzAJBgNVBAYTAlVTMRwwGgYDVQQL\nExNDZXJ0aWZpY2F0ZSBTZXJ2aWNlMRYwFAYDVQQKEw1PcHNjb2RlLCBJbmMuMS8w\nLQYDVQQDFCZVUkk6aHR0cDovL29wc2NvZGUuY29tL0dVSURTL3VzZXJfZ3VpZDCC\nASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANLDmPbR71bS2esZlZh/HfC6\n0azXFjl2677wq2ovk9xrUb0Ui4ZLC66TqQ9C/RBzOjXU4TRf3hgPTqvlCgHusl0d\nIcLCrsSl6kPEhJpYWWfRoroIAwf82A9yLQekhqXZEXu5EKkwoUMqyF6m0ZCasaE1\ny8niQxdLAsk3ady/CGQlFqHTPKFfU5UASR2LRtYC1MCIvJHDFRKAp9kPJbQo9P37\nZ8IU7cDudkZFgNLmDixlWsh7C0ghX8fgAlj1P6FgsFufygam973k79GhIP54dELB\nc0S6E8ekkRSOXU9jX/IoiXuFglBvFihAdhvED58bMXzj2AwXUyeAlxItnvs+NVUC\nAwEAATANBgkqhkiG9w0BAQUFAAOBgQBkFZRbMoywK3hb0/X7MXmPYa7nlfnd5UXq\nr2n32ettzZNmEPaI2d1j+//nL5qqhOlrWPS88eKEPnBOX/jZpUWOuAAddnrvFzgw\nrp/C2H7oMT+29F+5ezeViLKbzoFYb4yECHBoi66IFXNae13yj7taMboBeUmE664G\nTB/MZpRr8g==\n-----END CERTIFICATE-----\n"
3
7
  PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0sOY9tHvVtLZ6xmVmH8d\n8LrRrNcWOXbrvvCrai+T3GtRvRSLhksLrpOpD0L9EHM6NdThNF/eGA9Oq+UKAe6y\nXR0hwsKuxKXqQ8SEmlhZZ9GiuggDB/zYD3ItB6SGpdkRe7kQqTChQyrIXqbRkJqx\noTXLyeJDF0sCyTdp3L8IZCUWodM8oV9TlQBJHYtG1gLUwIi8kcMVEoCn2Q8ltCj0\n/ftnwhTtwO52RkWA0uYOLGVayHsLSCFfx+ACWPU/oWCwW5/KBqb3veTv0aEg/nh0\nQsFzRLoTx6SRFI5dT2Nf8iiJe4WCUG8WKEB2G8QPnxsxfOPYDBdTJ4CXEi2e+z41\nVQIDAQAB\n-----END PUBLIC KEY-----\n"
4
8
  PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA0sOY9tHvVtLZ6xmVmH8d8LrRrNcWOXbrvvCrai+T3GtRvRSL\nhksLrpOpD0L9EHM6NdThNF/eGA9Oq+UKAe6yXR0hwsKuxKXqQ8SEmlhZZ9GiuggD\nB/zYD3ItB6SGpdkRe7kQqTChQyrIXqbRkJqxoTXLyeJDF0sCyTdp3L8IZCUWodM8\noV9TlQBJHYtG1gLUwIi8kcMVEoCn2Q8ltCj0/ftnwhTtwO52RkWA0uYOLGVayHsL\nSCFfx+ACWPU/oWCwW5/KBqb3veTv0aEg/nh0QsFzRLoTx6SRFI5dT2Nf8iiJe4WC\nUG8WKEB2G8QPnxsxfOPYDBdTJ4CXEi2e+z41VQIDAQABAoIBAALhqbW2KQ+G0nPk\nZacwFbi01SkHx8YBWjfCEpXhEKRy0ytCnKW5YO+CFU2gHNWcva7+uhV9OgwaKXkw\nKHLeUJH1VADVqI4Htqw2g5mYm6BPvWnNsjzpuAp+BR+VoEGkNhj67r9hatMAQr0I\nitTvSH5rvd2EumYXIHKfz1K1SegUk1u1EL1RcMzRmZe4gDb6eNBs9Sg4im4ybTG6\npPIytA8vBQVWhjuAR2Tm+wZHiy0Az6Vu7c2mS07FSX6FO4E8SxWf8idaK9ijMGSq\nFvIS04mrY6XCPUPUC4qm1qNnhDPpOr7CpI2OO98SqGanStS5NFlSFXeXPpM280/u\nfZUA0AECgYEA+x7QUnffDrt7LK2cX6wbvn4mRnFxet7bJjrfWIHf+Rm0URikaNma\nh0/wNKpKBwIH+eHK/LslgzcplrqPytGGHLOG97Gyo5tGAzyLHUWBmsNkRksY2sPL\nuHq6pYWJNkqhnWGnIbmqCr0EWih82x/y4qxbJYpYqXMrit0wVf7yAgkCgYEA1twI\ngFaXqesetTPoEHSQSgC8S4D5/NkdriUXCYb06REcvo9IpFMuiOkVUYNN5d3MDNTP\nIdBicfmvfNELvBtXDomEUD8ls1UuoTIXRNGZ0VsZXu7OErXCK0JKNNyqRmOwcvYL\nJRqLfnlei5Ndo1lu286yL74c5rdTLs/nI2p4e+0CgYB079ZmcLeILrmfBoFI8+Y/\ngJLmPrFvXBOE6+lRV7kqUFPtZ6I3yQzyccETZTDvrnx0WjaiFavUPH27WMjY01S2\nTMtO0Iq1MPsbSrglO1as8MvjB9ldFcvp7gy4Q0Sv6XT0yqJ/S+vo8Df0m+H4UBpU\nf5o6EwBSd/UQxwtZIE0lsQKBgQCswfjX8Eg8KL/lJNpIOOE3j4XXE9ptksmJl2sB\njxDnQYoiMqVO808saHVquC/vTrpd6tKtNpehWwjeTFuqITWLi8jmmQ+gNTKsC9Gn\n1Pxf2Gb67PqnEpwQGln+TRtgQ5HBrdHiQIi+5am+gnw89pDrjjO5rZwhanAo6KPJ\n1zcPNQKBgQDxFu8v4frDmRNCVaZS4f1B6wTrcMrnibIDlnzrK9GG6Hz1U7dDv8s8\nNf4UmeMzDXjlPWZVOvS5+9HKJPdPj7/onv8B2m18+lcgTTDJBkza7R1mjL1Cje/Z\nKcVGsryKN6cjE7yCDasnA7R2rVBV/7NWeJV77bmzT5O//rW4yIfUIg==\n-----END RSA PRIVATE KEY-----\n"
@@ -0,0 +1,30 @@
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
@@ -1,5 +1,5 @@
1
1
  require 'digest/md5'
2
- require 'chef/cookbook/metadata' # for ruby metadata.rb dsl
2
+ require 'chef_zero/chef/cookbook/metadata'
3
3
 
4
4
  module ChefZero
5
5
  module CookbookData
@@ -30,7 +30,7 @@ module ChefZero
30
30
  end
31
31
 
32
32
  def self.metadata_from(directory, name, version, recipe_names)
33
- metadata = Chef::Cookbook::Metadata.new(PretendCookbook.new(name, recipe_names))
33
+ metadata = ChefZero::Chef::Cookbook::Metadata.new(PretendCookbook.new(name, recipe_names))
34
34
  # If both .rb and .json exist, read .rb
35
35
  # TODO if recipes has 3 recipes in it, and the Ruby/JSON has only one, should
36
36
  # the resulting recipe list have 1, or 3-4 recipes in it?
@@ -45,7 +45,6 @@ module ChefZero
45
45
  end
46
46
  result[:version] = version
47
47
  result
48
-
49
48
  end
50
49
 
51
50
  def self.files_from(directory)
@@ -0,0 +1,3 @@
1
+ Dir["#{File.dirname(__FILE__)}/core_ext/*.rb"].sort.each do |path|
2
+ require "chef_zero/core_ext/#{File.basename(path, '.rb')}"
3
+ end
@@ -0,0 +1,5 @@
1
+ require 'hashie'
2
+
3
+ class Hash
4
+ include Hashie::Extensions::DeepMerge
5
+ end
@@ -1,4 +1,5 @@
1
1
  require 'chef_zero/endpoints/cookbooks_base'
2
+ require 'solve'
2
3
 
3
4
  module ChefZero
4
5
  module Endpoints
@@ -31,7 +32,7 @@ module ChefZero
31
32
  end
32
33
 
33
34
  def latest_version(versions)
34
- sorted = versions.sort_by { |version| Chef::Version.new(version) }
35
+ sorted = versions.sort_by { |version| Solve::Version.new(version) }
35
36
  sorted[-1]
36
37
  end
37
38
  end
@@ -2,6 +2,7 @@ require 'json'
2
2
  require 'chef_zero/endpoints/rest_object_endpoint'
3
3
  require 'chef_zero/rest_error_response'
4
4
  require 'chef_zero/data_normalizer'
5
+ require 'solve'
5
6
 
6
7
  module ChefZero
7
8
  module Endpoints
@@ -98,7 +99,7 @@ module ChefZero
98
99
  end
99
100
 
100
101
  def latest_version(versions)
101
- sorted = versions.sort_by { |version| Chef::Version.new(version) }
102
+ sorted = versions.sort_by { |version| Solve::Version.new(version) }
102
103
  sorted[-1]
103
104
  end
104
105
  end
@@ -1,9 +1,7 @@
1
1
  require 'json'
2
- require 'chef/exceptions' # Needed so Chef::Version/VersionConstraint load
3
- require 'chef/version_class'
4
- require 'chef/version_constraint'
5
2
  require 'chef_zero/rest_base'
6
3
  require 'chef_zero/data_normalizer'
4
+ require 'solve'
7
5
 
8
6
  module ChefZero
9
7
  module Endpoints
@@ -28,11 +26,11 @@ module ChefZero
28
26
 
29
27
  def filter_cookbooks(cookbooks_list, constraints = {}, num_versions = nil)
30
28
  cookbooks_list.keys.sort.each do |name|
31
- constraint = Chef::VersionConstraint.new(constraints[name])
29
+ constraint = Solve::Constraint.new(constraints[name])
32
30
  versions = []
33
- cookbooks_list[name].keys.sort_by { |version| Chef::Version.new(version) }.reverse.each do |version|
31
+ cookbooks_list[name].keys.sort_by { |version| Solve::Version.new(version) }.reverse.each do |version|
34
32
  break if num_versions && versions.size >= num_versions
35
- if constraint.include?(version)
33
+ if constraint.satisfies?(version)
36
34
  versions << version
37
35
  end
38
36
  end
@@ -1,9 +1,7 @@
1
1
  require 'json'
2
- require 'chef/exceptions' # Needed so Chef::Version/VersionConstraint load
3
- require 'chef/version_class'
4
- require 'chef/version_constraint'
5
2
  require 'chef_zero/rest_base'
6
3
  require 'chef_zero/rest_error_response'
4
+ require 'solve'
7
5
 
8
6
  module ChefZero
9
7
  module Endpoints
@@ -100,15 +98,15 @@ module ChefZero
100
98
  end
101
99
 
102
100
  def sort_versions(versions)
103
- result = versions.sort_by { |version| Chef::Version.new(version) }
101
+ result = versions.sort_by { |version| Solve::Version.new(version) }
104
102
  result.reverse
105
103
  end
106
104
 
107
105
  def filter_by_constraint(versions, cookbook_name, constraint)
108
106
  return versions if !constraint
109
- constraint = Chef::VersionConstraint.new(constraint)
107
+ constraint = Solve::Constraint.new(constraint)
110
108
  new_versions = versions[cookbook_name]
111
- new_versions = new_versions.select { |version| constraint.include?(version) }
109
+ new_versions = new_versions.select { |version| constraint.satisfies?(version) }
112
110
  result = versions.clone
113
111
  result[cookbook_name] = new_versions
114
112
  result
@@ -1,5 +1,4 @@
1
1
  require 'json'
2
- require 'chef/mixin/deep_merge'
3
2
  require 'chef_zero/endpoints/rest_object_endpoint'
4
3
  require 'chef_zero/data_normalizer'
5
4
  require 'chef_zero/rest_error_response'
@@ -64,10 +63,10 @@ module ChefZero
64
63
  def expand_for_indexing(value, index, id)
65
64
  if index == 'node'
66
65
  result = {}
67
- Chef::Mixin::DeepMerge.deep_merge!(value['default'] || {}, result)
68
- Chef::Mixin::DeepMerge.deep_merge!(value['normal'] || {}, result)
69
- Chef::Mixin::DeepMerge.deep_merge!(value['override'] || {}, result)
70
- Chef::Mixin::DeepMerge.deep_merge!(value['automatic'] || {}, result)
66
+ result.deep_merge!(value['default'] || {})
67
+ result.deep_merge!(value['normal'] || {})
68
+ result.deep_merge!(value['override'] || {})
69
+ result.deep_merge!(value['automatic'] || {})
71
70
  result['recipe'] = []
72
71
  result['role'] = []
73
72
  if value['run_list']
@@ -0,0 +1,7 @@
1
+ require 'mixlib/log'
2
+
3
+ module ChefZero
4
+ class Log
5
+ extend Mixlib::Log
6
+ end
7
+ end
@@ -1,6 +1,5 @@
1
1
  require 'chef_zero/rest_request'
2
2
  require 'chef_zero/rest_error_response'
3
- require 'chef/log'
4
3
 
5
4
  module ChefZero
6
5
  class RestBase
@@ -21,7 +20,7 @@ module ChefZero
21
20
  accept_methods_str = accept_methods.map { |m| m.to_s.upcase }.join(', ')
22
21
  return [405, {"Content-Type" => "text/plain", "Allow" => accept_methods_str}, "Bad request method for '#{request.env['REQUEST_PATH']}': #{request.env['REQUEST_METHOD']}"]
23
22
  end
24
- if json_only && !request.env['HTTP_ACCEPT'].split(';').include?('application/json')
23
+ if json_only && request.env['HTTP_ACCEPT'] && !request.env['HTTP_ACCEPT'].split(';').include?('application/json')
25
24
  return [406, {"Content-Type" => "text/plain"}, "Must accept application/json"]
26
25
  end
27
26
  # Dispatch to get()/post()/put()/delete()
@@ -1,5 +1,3 @@
1
- require 'chef/log'
2
-
3
1
  module ChefZero
4
2
  class RestRouter
5
3
  def initialize(routes)
@@ -14,7 +12,7 @@ module ChefZero
14
12
 
15
13
  def call(request)
16
14
  begin
17
- Chef::Log.debug "Request: #{request}"
15
+ ChefZero::Log.debug "Request: #{request}"
18
16
  clean_path = "/" + request.rest_path.join("/")
19
17
  routes.each do |route, endpoint|
20
18
  if route.match(clean_path)
@@ -23,7 +21,7 @@ module ChefZero
23
21
  end
24
22
  not_found.call(request)
25
23
  rescue
26
- Chef::Log.error("#{$!.inspect}\n#{$!.backtrace.join("\n")}")
24
+ ChefZero::Log.error("#{$!.inspect}\n#{$!.backtrace.join("\n")}")
27
25
  [500, {"Content-Type" => "text/plain"}, "Exception raised! #{$!.inspect}\n#{$!.backtrace.join("\n")}"]
28
26
  end
29
27
  end
@@ -2,7 +2,6 @@ require 'thin'
2
2
  require 'tempfile'
3
3
  require 'chef_zero/server'
4
4
  require 'chef_zero/rest_request'
5
- require 'chef/config'
6
5
 
7
6
  module ChefZero
8
7
  module RSpec
@@ -45,19 +44,23 @@ module ChefZero
45
44
  end
46
45
  ChefZero::RSpec.clear_request_log
47
46
 
48
- @old_chef_server_url = Chef::Config.chef_server_url
49
- @old_node_name = Chef::Config.node_name
50
- @old_client_key = Chef::Config.client_key
51
- Chef::Config.chef_server_url = ChefZero::RSpec.server.url
52
- Chef::Config.node_name = 'admin'
53
- Chef::Config.client_key = ChefZero::RSpec.client_key.path
54
- Chef::Config.http_retry_count = 0
47
+ if defined?(Chef::Config)
48
+ @old_chef_server_url = Chef::Config.chef_server_url
49
+ @old_node_name = Chef::Config.node_name
50
+ @old_client_key = Chef::Config.client_key
51
+ Chef::Config.chef_server_url = ChefZero::RSpec.server.url
52
+ Chef::Config.node_name = 'admin'
53
+ Chef::Config.client_key = ChefZero::RSpec.client_key.path
54
+ Chef::Config.http_retry_count = 0
55
+ end
55
56
  end
56
57
 
57
- after :each do
58
- Chef::Config.chef_server_url = @old_chef_server_url
59
- Chef::Config.node_name = @old_node_name
60
- Chef::Config.client_key = @old_client_key
58
+ if defined?(Chef::Config)
59
+ after :each do
60
+ Chef::Config.chef_server_url = @old_chef_server_url
61
+ Chef::Config.node_name = @old_node_name
62
+ Chef::Config.client_key = @old_client_key
63
+ end
61
64
  end
62
65
 
63
66
  def self.client(name, client)
@@ -87,13 +87,14 @@ module ChefZero
87
87
  server.start
88
88
  rescue
89
89
  @server_error = $!
90
- Chef::Log.error("#{$!.message}\n#{$!.backtrace.join("\n")}")
90
+ ChefZero::Log.error("#{$!.message}\n#{$!.backtrace.join("\n")}")
91
91
  end
92
92
  end
93
93
  Timeout::timeout(timeout) do
94
94
  until server.running? || @server_error
95
95
  sleep(0.01)
96
96
  end
97
+ raise @server_error if @server_error
97
98
  end
98
99
  end
99
100
 
@@ -107,7 +108,7 @@ module ChefZero
107
108
  @thread.join(timeout)
108
109
  @thread = nil
109
110
  rescue
110
- Chef::Log.error("Server did not stop within #{timeout}s. Killing.")
111
+ ChefZero::Log.error("Server did not stop within #{timeout}s. Killing.")
111
112
  @thread.kill if @thread
112
113
  @thread = nil
113
114
  end
@@ -210,6 +211,10 @@ module ChefZero
210
211
  }
211
212
  end
212
213
 
214
+ def request_handler(&block)
215
+ @request_handler = block
216
+ end
217
+
213
218
  private
214
219
 
215
220
  def make_app
@@ -254,7 +259,13 @@ module ChefZero
254
259
  if @on_request_proc
255
260
  @on_request_proc.call(request)
256
261
  end
257
- response = router.call(request)
262
+ response = nil
263
+ if @request_handler
264
+ response = @request_handler.call(request)
265
+ end
266
+ unless response
267
+ response = router.call(request)
268
+ end
258
269
  if @on_response_proc
259
270
  @on_response_proc.call(request, response)
260
271
  end
@@ -1,3 +1,3 @@
1
1
  module ChefZero
2
- VERSION = '0.9.8'
2
+ VERSION = '0.9.9'
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.8
4
+ version: 0.9.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,10 +9,10 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-29 00:00:00.000000000 Z
12
+ date: 2013-05-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: chef
15
+ name: thin
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
@@ -28,13 +28,13 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
- name: thin
31
+ name: mixlib-log
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
35
  - - ! '>='
36
36
  - !ruby/object:Gem::Version
37
- version: '0'
37
+ version: 1.3.0
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,39 @@ dependencies:
42
42
  requirements:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
- version: '0'
45
+ version: 1.3.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: solve
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 0.4.3
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.4.3
62
+ - !ruby/object:Gem::Dependency
63
+ name: hashie
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 2.0.4
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 2.0.4
46
78
  description: Self-contained, easy-setup, fast-start in-memory Chef server for testing
47
79
  and solo setup purposes
48
80
  email: jkeiser@opscode.com
@@ -56,7 +88,10 @@ files:
56
88
  - LICENSE
57
89
  - README.rdoc
58
90
  - Rakefile
91
+ - lib/chef_zero/chef/cookbook/metadata.rb
59
92
  - lib/chef_zero/cookbook_data.rb
93
+ - lib/chef_zero/core_ext/hash.rb
94
+ - lib/chef_zero/core_ext.rb
60
95
  - lib/chef_zero/data_normalizer.rb
61
96
  - lib/chef_zero/endpoints/actor_endpoint.rb
62
97
  - lib/chef_zero/endpoints/actors_endpoint.rb
@@ -87,6 +122,7 @@ files:
87
122
  - lib/chef_zero/endpoints/sandboxes_endpoint.rb
88
123
  - lib/chef_zero/endpoints/search_endpoint.rb
89
124
  - lib/chef_zero/endpoints/searches_endpoint.rb
125
+ - lib/chef_zero/log.rb
90
126
  - lib/chef_zero/rest_base.rb
91
127
  - lib/chef_zero/rest_error_response.rb
92
128
  - lib/chef_zero/rest_request.rb