chef-zero 0.9.8 → 0.9.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|