chef-zero 14.0.13 → 14.0.17
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.
- checksums.yaml +4 -4
- data/Gemfile +4 -6
- data/Rakefile +9 -1
- data/chef-zero.gemspec +1 -4
- data/lib/chef_zero.rb +1 -1
- data/lib/chef_zero/chef_data/cookbook_data.rb +1 -1
- data/lib/chef_zero/chef_data/data_normalizer.rb +9 -7
- data/lib/chef_zero/chef_data/default_creator.rb +8 -5
- data/lib/chef_zero/data_store/data_already_exists_error.rb +1 -1
- data/lib/chef_zero/data_store/data_error.rb +1 -1
- data/lib/chef_zero/data_store/data_not_found_error.rb +1 -1
- data/lib/chef_zero/data_store/default_facade.rb +4 -4
- data/lib/chef_zero/data_store/interface_v2.rb +1 -1
- data/lib/chef_zero/data_store/memory_store.rb +3 -3
- data/lib/chef_zero/data_store/memory_store_v2.rb +22 -14
- data/lib/chef_zero/data_store/raw_file_store.rb +6 -4
- data/lib/chef_zero/data_store/v1_to_v2_adapter.rb +11 -1
- data/lib/chef_zero/data_store/v2_to_v1_adapter.rb +1 -1
- data/lib/chef_zero/endpoints/acl_endpoint.rb +3 -2
- data/lib/chef_zero/endpoints/acls_endpoint.rb +5 -4
- data/lib/chef_zero/endpoints/actor_default_key_endpoint.rb +2 -1
- data/lib/chef_zero/endpoints/actor_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/actor_key_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/actor_keys_endpoint.rb +3 -2
- data/lib/chef_zero/endpoints/actors_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/authenticate_user_endpoint.rb +2 -1
- data/lib/chef_zero/endpoints/container_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/containers_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/controls_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/cookbook_artifact_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/cookbook_artifact_identifier_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/cookbook_artifacts_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/cookbook_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/cookbook_version_endpoint.rb +7 -5
- data/lib/chef_zero/endpoints/cookbooks_base.rb +4 -2
- data/lib/chef_zero/endpoints/cookbooks_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/data_bag_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/data_bag_item_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/data_bags_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/environment_cookbook_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/environment_cookbook_versions_endpoint.rb +13 -10
- data/lib/chef_zero/endpoints/environment_cookbooks_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/environment_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/environment_nodes_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/environment_recipes_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/environment_role_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/file_store_file_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/group_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/groups_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/license_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/node_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/node_identifiers_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/nodes_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/not_found_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organization_association_request_endpoint.rb +2 -1
- data/lib/chef_zero/endpoints/organization_association_requests_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organization_authenticate_user_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organization_endpoint.rb +3 -2
- data/lib/chef_zero/endpoints/organization_user_base.rb +1 -1
- data/lib/chef_zero/endpoints/organization_user_default_key_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organization_user_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organization_user_key_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/organization_user_keys_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organization_users_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/organization_validator_key_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/organizations_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/policies_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/policy_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/policy_group_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/policy_group_policy_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/policy_groups_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/policy_revision_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/policy_revisions_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/principal_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/rest_list_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/rest_object_endpoint.rb +3 -2
- data/lib/chef_zero/endpoints/role_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/role_environments_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/sandbox_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/sandboxes_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/search_endpoint.rb +8 -8
- data/lib/chef_zero/endpoints/searches_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/server_api_version_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/system_recovery_endpoint.rb +3 -3
- data/lib/chef_zero/endpoints/universe_endpoint.rb +2 -2
- data/lib/chef_zero/endpoints/user_association_request_endpoint.rb +2 -1
- data/lib/chef_zero/endpoints/user_association_requests_count_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/user_association_requests_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/user_organizations_endpoint.rb +1 -1
- data/lib/chef_zero/endpoints/version_endpoint.rb +2 -2
- data/lib/chef_zero/rest_base.rb +15 -15
- data/lib/chef_zero/rest_request.rb +4 -4
- data/lib/chef_zero/rest_router.rb +2 -2
- data/lib/chef_zero/rspec.rb +3 -2
- data/lib/chef_zero/server.rb +87 -83
- data/lib/chef_zero/socketless_server_map.rb +2 -1
- data/lib/chef_zero/solr/query/phrase.rb +2 -2
- data/lib/chef_zero/solr/query/range_query.rb +3 -3
- data/lib/chef_zero/solr/query/term.rb +1 -1
- data/lib/chef_zero/solr/solr_parser.rb +12 -10
- data/lib/chef_zero/version.rb +1 -1
- data/spec/run_oc_pedant.rb +5 -3
- data/spec/search_spec.rb +2 -2
- data/spec/socketless_server_map_spec.rb +1 -1
- data/spec/support/oc_pedant.rb +1 -1
- metadata +3 -31
|
@@ -4,7 +4,7 @@ module ChefZero
|
|
|
4
4
|
module Endpoints
|
|
5
5
|
class NotFoundEndpoint
|
|
6
6
|
def call(request)
|
|
7
|
-
[404, { "Content-Type" => "application/json" }, FFI_Yajl::Encoder.encode({ "error" => ["Object not found: #{request.env[
|
|
7
|
+
[404, { "Content-Type" => "application/json" }, FFI_Yajl::Encoder.encode({ "error" => ["Object not found: #{request.env["REQUEST_PATH"]}"] }, pretty: true)]
|
|
8
8
|
end
|
|
9
9
|
end
|
|
10
10
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require "ffi_yajl"
|
|
2
|
-
|
|
2
|
+
require_relative "../rest_base"
|
|
3
3
|
|
|
4
4
|
module ChefZero
|
|
5
5
|
module Endpoints
|
|
@@ -11,6 +11,7 @@ module ChefZero
|
|
|
11
11
|
if id !~ /(.+)-#{orgname}$/
|
|
12
12
|
raise HttpErrorResponse.new(404, "Invalid ID #{id}. Must be of the form username-#{orgname}")
|
|
13
13
|
end
|
|
14
|
+
|
|
14
15
|
username = $1
|
|
15
16
|
path = request.rest_path[0..-2] + [username]
|
|
16
17
|
delete_data(request, path)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require "ffi_yajl"
|
|
2
|
-
|
|
2
|
+
require_relative "../rest_base"
|
|
3
3
|
|
|
4
4
|
module ChefZero
|
|
5
5
|
module Endpoints
|
|
@@ -19,8 +19,9 @@ module ChefZero
|
|
|
19
19
|
save_org = FFI_Yajl::Encoder.encode(org, pretty: true)
|
|
20
20
|
if new_org["name"] != request.rest_path[-1]
|
|
21
21
|
# This is a rename
|
|
22
|
-
return error(400, "Cannot rename org #{request.rest_path[-1]} to #{new_org[
|
|
22
|
+
return error(400, "Cannot rename org #{request.rest_path[-1]} to #{new_org["name"]}: rename not supported for orgs")
|
|
23
23
|
end
|
|
24
|
+
|
|
24
25
|
set_data(request, request.rest_path + [ "org" ], save_org)
|
|
25
26
|
json_response(200, {
|
|
26
27
|
"uri" => (build_uri(request.base_uri, request.rest_path)).to_s,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require "ffi_yajl"
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
require_relative "../rest_base"
|
|
3
|
+
require_relative "../chef_data/data_normalizer"
|
|
4
4
|
|
|
5
5
|
module ChefZero
|
|
6
6
|
module Endpoints
|
|
@@ -48,7 +48,7 @@ module ChefZero
|
|
|
48
48
|
# If the policy revision being submitted does not exist, create it.
|
|
49
49
|
# Storage: /organizations/ORG/policies/POLICY/revisions/REVISION
|
|
50
50
|
policyfile_path = request.rest_path[0..1] + ["policies", policy_name, "revisions", revision_id]
|
|
51
|
-
|
|
51
|
+
unless exists_data?(request, policyfile_path)
|
|
52
52
|
create_data(request, policyfile_path[0..-2], revision_id, request.body, :create_dir)
|
|
53
53
|
end
|
|
54
54
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require "ffi_yajl"
|
|
2
|
-
|
|
2
|
+
require_relative "../rest_base"
|
|
3
3
|
|
|
4
4
|
module ChefZero
|
|
5
5
|
module Endpoints
|
|
@@ -26,7 +26,7 @@ module ChefZero
|
|
|
26
26
|
contents = request.body
|
|
27
27
|
key = get_key(contents)
|
|
28
28
|
if key.nil?
|
|
29
|
-
error(400, "Must specify #{identity_keys.map
|
|
29
|
+
error(400, "Must specify #{identity_keys.map(&:inspect).join(" or ")} in JSON")
|
|
30
30
|
else
|
|
31
31
|
create_data(request, request.rest_path, key, contents)
|
|
32
32
|
json_response(201, { "uri" => (build_uri(request.base_uri, request.rest_path + [key])).to_s })
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require "ffi_yajl"
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
require_relative "../rest_base"
|
|
3
|
+
require_relative "../rest_error_response"
|
|
4
4
|
|
|
5
5
|
module ChefZero
|
|
6
6
|
module Endpoints
|
|
@@ -70,6 +70,7 @@ module ChefZero
|
|
|
70
70
|
# Does this request change the value of the identity key?
|
|
71
71
|
def is_rename?(request)
|
|
72
72
|
return false unless (key = identity_key_value(request))
|
|
73
|
+
|
|
73
74
|
key != request.rest_path[-1]
|
|
74
75
|
end
|
|
75
76
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
require_relative "../rest_base"
|
|
2
|
+
require_relative "../rest_error_response"
|
|
3
3
|
require "ffi_yajl"
|
|
4
4
|
|
|
5
5
|
module ChefZero
|
|
@@ -9,7 +9,7 @@ module ChefZero
|
|
|
9
9
|
def put(request)
|
|
10
10
|
existing_sandbox = FFI_Yajl::Parser.parse(get_data(request))
|
|
11
11
|
existing_sandbox["checksums"].each do |checksum|
|
|
12
|
-
|
|
12
|
+
unless exists_data?(request, request.rest_path[0..1] + ["file_store", "checksums", checksum])
|
|
13
13
|
raise RestErrorResponse.new(503, "Checksum not uploaded: #{checksum}")
|
|
14
14
|
end
|
|
15
15
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
require "ffi_yajl"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
require_relative "rest_object_endpoint"
|
|
3
|
+
require_relative "../chef_data/data_normalizer"
|
|
4
|
+
require_relative "../rest_error_response"
|
|
5
|
+
require_relative "../solr/solr_parser"
|
|
6
|
+
require_relative "../solr/solr_doc"
|
|
7
7
|
|
|
8
8
|
module ChefZero
|
|
9
9
|
module Endpoints
|
|
@@ -30,7 +30,7 @@ module ChefZero
|
|
|
30
30
|
if path.size > 0
|
|
31
31
|
value = search_value
|
|
32
32
|
path.each do |path_part|
|
|
33
|
-
value = value[path_part]
|
|
33
|
+
value = value[path_part] unless value.nil?
|
|
34
34
|
end
|
|
35
35
|
data[key] = value
|
|
36
36
|
else
|
|
@@ -180,7 +180,7 @@ module ChefZero
|
|
|
180
180
|
dest
|
|
181
181
|
when Hash
|
|
182
182
|
source.each do |src_key, src_value|
|
|
183
|
-
if dest.
|
|
183
|
+
if dest.is_a?(Hash)
|
|
184
184
|
if dest[src_key]
|
|
185
185
|
dest[src_key] = deep_merge!(src_value, dest[src_key])
|
|
186
186
|
else # dest[src_key] doesn't exist so we take whatever source has
|
|
@@ -191,7 +191,7 @@ module ChefZero
|
|
|
191
191
|
end
|
|
192
192
|
end
|
|
193
193
|
when Array
|
|
194
|
-
if dest.
|
|
194
|
+
if dest.is_a?(Array)
|
|
195
195
|
dest |= source
|
|
196
196
|
else
|
|
197
197
|
dest = source
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require "ffi_yajl"
|
|
2
|
-
|
|
2
|
+
require_relative "../rest_base"
|
|
3
3
|
|
|
4
4
|
module ChefZero
|
|
5
5
|
module Endpoints
|
|
@@ -10,13 +10,13 @@ module ChefZero
|
|
|
10
10
|
name = request_json["username"]
|
|
11
11
|
password = request_json["password"]
|
|
12
12
|
user = get_data(request, request.rest_path[0..-2] + ["users", name], :nil)
|
|
13
|
-
|
|
13
|
+
unless user
|
|
14
14
|
raise RestErrorResponse.new(403, "Nonexistent user")
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
user = FFI_Yajl::Parser.parse(user)
|
|
18
18
|
user = ChefData::DataNormalizer.normalize_user(user, name, [ "username" ], server.options[:osc_compat])
|
|
19
|
-
|
|
19
|
+
unless user["recovery_authentication_enabled"]
|
|
20
20
|
raise RestErrorResponse.new(403, "Only users with recovery_authentication_enabled=true may use /system_recovery to log in")
|
|
21
21
|
end
|
|
22
22
|
if user["password"] != password
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require "ffi_yajl"
|
|
2
|
-
|
|
2
|
+
require_relative "../rest_base"
|
|
3
3
|
|
|
4
4
|
module ChefZero
|
|
5
5
|
module Endpoints
|
|
@@ -11,6 +11,7 @@ module ChefZero
|
|
|
11
11
|
if id !~ /^#{username}-(.+)/
|
|
12
12
|
raise RestErrorResponse.new(400, "Association request #{id} is invalid. Must be #{username}-orgname.")
|
|
13
13
|
end
|
|
14
|
+
|
|
14
15
|
orgname = $1
|
|
15
16
|
|
|
16
17
|
json = FFI_Yajl::Parser.parse(request.body)
|