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.
- data/lib/chef_zero.rb +4 -0
- data/lib/chef_zero/chef/cookbook/metadata.rb +30 -0
- data/lib/chef_zero/cookbook_data.rb +2 -3
- data/lib/chef_zero/core_ext.rb +3 -0
- data/lib/chef_zero/core_ext/hash.rb +5 -0
- data/lib/chef_zero/endpoints/cookbook_endpoint.rb +2 -1
- data/lib/chef_zero/endpoints/cookbook_version_endpoint.rb +2 -1
- data/lib/chef_zero/endpoints/cookbooks_base.rb +4 -6
- data/lib/chef_zero/endpoints/environment_cookbook_versions_endpoint.rb +4 -6
- data/lib/chef_zero/endpoints/search_endpoint.rb +4 -5
- data/lib/chef_zero/log.rb +7 -0
- data/lib/chef_zero/rest_base.rb +1 -2
- data/lib/chef_zero/rest_router.rb +2 -4
- data/lib/chef_zero/rspec.rb +15 -12
- data/lib/chef_zero/server.rb +14 -3
- data/lib/chef_zero/version.rb +1 -1
- metadata +42 -6
data/lib/chef_zero.rb
CHANGED
@@ -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'
|
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)
|
@@ -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|
|
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|
|
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 =
|
29
|
+
constraint = Solve::Constraint.new(constraints[name])
|
32
30
|
versions = []
|
33
|
-
cookbooks_list[name].keys.sort_by { |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.
|
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|
|
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 =
|
107
|
+
constraint = Solve::Constraint.new(constraint)
|
110
108
|
new_versions = versions[cookbook_name]
|
111
|
-
new_versions = new_versions.select { |version| constraint.
|
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
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
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']
|
data/lib/chef_zero/rest_base.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
data/lib/chef_zero/rspec.rb
CHANGED
@@ -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
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
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
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
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)
|
data/lib/chef_zero/server.rb
CHANGED
@@ -87,13 +87,14 @@ module ChefZero
|
|
87
87
|
server.start
|
88
88
|
rescue
|
89
89
|
@server_error = $!
|
90
|
-
|
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
|
-
|
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 =
|
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
|
data/lib/chef_zero/version.rb
CHANGED
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.
|
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-
|
12
|
+
date: 2013-05-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
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:
|
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:
|
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:
|
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
|