chef-zero 15.0.17 → 15.0.21

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.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +36 -31
  3. data/LICENSE +201 -201
  4. data/Rakefile +73 -68
  5. data/bin/chef-zero +111 -111
  6. data/chef-zero.gemspec +34 -33
  7. data/lib/chef_zero/chef_data/acl_path.rb +140 -140
  8. data/lib/chef_zero/chef_data/cookbook_data.rb +237 -237
  9. data/lib/chef_zero/chef_data/data_normalizer.rb +276 -276
  10. data/lib/chef_zero/chef_data/default_creator.rb +476 -476
  11. data/lib/chef_zero/data_store/data_already_exists_error.rb +29 -29
  12. data/lib/chef_zero/data_store/data_error.rb +32 -32
  13. data/lib/chef_zero/data_store/data_not_found_error.rb +29 -29
  14. data/lib/chef_zero/data_store/default_facade.rb +143 -147
  15. data/lib/chef_zero/data_store/interface_v1.rb +67 -67
  16. data/lib/chef_zero/data_store/interface_v2.rb +18 -18
  17. data/lib/chef_zero/data_store/memory_store.rb +33 -33
  18. data/lib/chef_zero/data_store/memory_store_v2.rb +159 -159
  19. data/lib/chef_zero/data_store/raw_file_store.rb +143 -143
  20. data/lib/chef_zero/data_store/v1_to_v2_adapter.rb +150 -150
  21. data/lib/chef_zero/data_store/v2_to_v1_adapter.rb +105 -105
  22. data/lib/chef_zero/dist.rb +9 -9
  23. data/lib/chef_zero/endpoints/acl_endpoint.rb +39 -39
  24. data/lib/chef_zero/endpoints/acls_endpoint.rb +41 -41
  25. data/lib/chef_zero/endpoints/actor_default_key_endpoint.rb +78 -78
  26. data/lib/chef_zero/endpoints/actor_endpoint.rb +184 -184
  27. data/lib/chef_zero/endpoints/actor_key_endpoint.rb +62 -62
  28. data/lib/chef_zero/endpoints/actor_keys_endpoint.rb +129 -129
  29. data/lib/chef_zero/endpoints/actors_endpoint.rb +104 -104
  30. data/lib/chef_zero/endpoints/authenticate_user_endpoint.rb +32 -32
  31. data/lib/chef_zero/endpoints/container_endpoint.rb +22 -22
  32. data/lib/chef_zero/endpoints/containers_endpoint.rb +25 -25
  33. data/lib/chef_zero/endpoints/controls_endpoint.rb +16 -16
  34. data/lib/chef_zero/endpoints/cookbook_artifact_endpoint.rb +24 -24
  35. data/lib/chef_zero/endpoints/cookbook_artifact_identifier_endpoint.rb +68 -68
  36. data/lib/chef_zero/endpoints/cookbook_artifacts_endpoint.rb +34 -34
  37. data/lib/chef_zero/endpoints/cookbook_endpoint.rb +39 -39
  38. data/lib/chef_zero/endpoints/cookbook_version_endpoint.rb +136 -136
  39. data/lib/chef_zero/endpoints/cookbooks_base.rb +80 -80
  40. data/lib/chef_zero/endpoints/cookbooks_endpoint.rb +19 -19
  41. data/lib/chef_zero/endpoints/data_bag_endpoint.rb +45 -45
  42. data/lib/chef_zero/endpoints/data_bag_item_endpoint.rb +25 -25
  43. data/lib/chef_zero/endpoints/data_bags_endpoint.rb +23 -23
  44. data/lib/chef_zero/endpoints/dummy_endpoint.rb +29 -29
  45. data/lib/chef_zero/endpoints/environment_cookbook_endpoint.rb +24 -24
  46. data/lib/chef_zero/endpoints/environment_cookbook_versions_endpoint.rb +126 -126
  47. data/lib/chef_zero/endpoints/environment_cookbooks_endpoint.rb +22 -22
  48. data/lib/chef_zero/endpoints/environment_endpoint.rb +33 -33
  49. data/lib/chef_zero/endpoints/environment_nodes_endpoint.rb +23 -23
  50. data/lib/chef_zero/endpoints/environment_recipes_endpoint.rb +22 -22
  51. data/lib/chef_zero/endpoints/environment_role_endpoint.rb +36 -36
  52. data/lib/chef_zero/endpoints/file_store_file_endpoint.rb +22 -22
  53. data/lib/chef_zero/endpoints/group_endpoint.rb +20 -20
  54. data/lib/chef_zero/endpoints/groups_endpoint.rb +13 -13
  55. data/lib/chef_zero/endpoints/license_endpoint.rb +25 -25
  56. data/lib/chef_zero/endpoints/node_endpoint.rb +34 -34
  57. data/lib/chef_zero/endpoints/node_identifiers_endpoint.rb +22 -22
  58. data/lib/chef_zero/endpoints/nodes_endpoint.rb +34 -34
  59. data/lib/chef_zero/endpoints/not_found_endpoint.rb +11 -11
  60. data/lib/chef_zero/endpoints/organization_association_request_endpoint.rb +22 -22
  61. data/lib/chef_zero/endpoints/organization_association_requests_endpoint.rb +30 -30
  62. data/lib/chef_zero/endpoints/organization_authenticate_user_endpoint.rb +26 -26
  63. data/lib/chef_zero/endpoints/organization_endpoint.rb +47 -47
  64. data/lib/chef_zero/endpoints/organization_user_base.rb +15 -15
  65. data/lib/chef_zero/endpoints/organization_user_default_key_endpoint.rb +16 -16
  66. data/lib/chef_zero/endpoints/organization_user_endpoint.rb +26 -26
  67. data/lib/chef_zero/endpoints/organization_user_key_endpoint.rb +17 -17
  68. data/lib/chef_zero/endpoints/organization_user_keys_endpoint.rb +17 -17
  69. data/lib/chef_zero/endpoints/organization_users_endpoint.rb +43 -43
  70. data/lib/chef_zero/endpoints/organization_validator_key_endpoint.rb +20 -20
  71. data/lib/chef_zero/endpoints/organizations_endpoint.rb +61 -61
  72. data/lib/chef_zero/endpoints/policies_endpoint.rb +26 -26
  73. data/lib/chef_zero/endpoints/policy_endpoint.rb +24 -24
  74. data/lib/chef_zero/endpoints/policy_group_endpoint.rb +46 -46
  75. data/lib/chef_zero/endpoints/policy_group_policy_endpoint.rb +83 -83
  76. data/lib/chef_zero/endpoints/policy_groups_endpoint.rb +38 -38
  77. data/lib/chef_zero/endpoints/policy_revision_endpoint.rb +66 -66
  78. data/lib/chef_zero/endpoints/policy_revisions_endpoint.rb +15 -15
  79. data/lib/chef_zero/endpoints/principal_endpoint.rb +55 -55
  80. data/lib/chef_zero/endpoints/rest_list_endpoint.rb +42 -42
  81. data/lib/chef_zero/endpoints/rest_object_endpoint.rb +78 -78
  82. data/lib/chef_zero/endpoints/role_endpoint.rb +16 -16
  83. data/lib/chef_zero/endpoints/role_environments_endpoint.rb +14 -14
  84. data/lib/chef_zero/endpoints/sandbox_endpoint.rb +27 -27
  85. data/lib/chef_zero/endpoints/sandboxes_endpoint.rb +51 -51
  86. data/lib/chef_zero/endpoints/search_endpoint.rb +208 -208
  87. data/lib/chef_zero/endpoints/searches_endpoint.rb +18 -18
  88. data/lib/chef_zero/endpoints/server_api_version_endpoint.rb +14 -14
  89. data/lib/chef_zero/endpoints/system_recovery_endpoint.rb +30 -30
  90. data/lib/chef_zero/endpoints/universe_endpoint.rb +15 -15
  91. data/lib/chef_zero/endpoints/user_association_request_endpoint.rb +41 -41
  92. data/lib/chef_zero/endpoints/user_association_requests_count_endpoint.rb +19 -19
  93. data/lib/chef_zero/endpoints/user_association_requests_endpoint.rb +19 -19
  94. data/lib/chef_zero/endpoints/user_organizations_endpoint.rb +22 -22
  95. data/lib/chef_zero/endpoints/version_endpoint.rb +13 -13
  96. data/lib/chef_zero/log.rb +7 -7
  97. data/lib/chef_zero/rest_base.rb +332 -332
  98. data/lib/chef_zero/rest_error_response.rb +11 -11
  99. data/lib/chef_zero/rest_request.rb +84 -88
  100. data/lib/chef_zero/rest_router.rb +72 -72
  101. data/lib/chef_zero/rspec.rb +355 -355
  102. data/lib/chef_zero/server.rb +730 -730
  103. data/lib/chef_zero/socketless_server_map.rb +92 -93
  104. data/lib/chef_zero/solr/query/binary_operator.rb +52 -52
  105. data/lib/chef_zero/solr/query/phrase.rb +23 -23
  106. data/lib/chef_zero/solr/query/range_query.rb +46 -46
  107. data/lib/chef_zero/solr/query/regexpable_query.rb +30 -30
  108. data/lib/chef_zero/solr/query/subquery.rb +37 -37
  109. data/lib/chef_zero/solr/query/term.rb +45 -45
  110. data/lib/chef_zero/solr/query/unary_operator.rb +41 -41
  111. data/lib/chef_zero/solr/solr_doc.rb +53 -53
  112. data/lib/chef_zero/solr/solr_parser.rb +208 -208
  113. data/lib/chef_zero/version.rb +3 -3
  114. data/lib/chef_zero.rb +10 -10
  115. data/spec/run_oc_pedant.rb +226 -226
  116. data/spec/search_spec.rb +36 -36
  117. data/spec/server_spec.rb +96 -96
  118. data/spec/socketless_server_map_spec.rb +74 -74
  119. data/spec/support/oc_pedant.rb +149 -149
  120. data/spec/support/secrets.json +6 -6
  121. data/spec/support/stickywicket.pem +27 -27
  122. metadata +35 -18
@@ -1,11 +1,11 @@
1
- module ChefZero
2
- class RestErrorResponse < StandardError
3
- attr_reader :response_code, :error
4
-
5
- def initialize(response_code, error)
6
- @response_code = response_code
7
- @error = error
8
- super "#{response_code}: #{error}"
9
- end
10
- end
11
- end
1
+ module ChefZero
2
+ class RestErrorResponse < StandardError
3
+ attr_reader :response_code, :error
4
+
5
+ def initialize(response_code, error)
6
+ @response_code = response_code
7
+ @error = error
8
+ super "#{response_code}: #{error}"
9
+ end
10
+ end
11
+ end
@@ -1,88 +1,84 @@
1
- require "rack/request"
2
- require "cgi" unless defined?(CGI)
3
-
4
- module ChefZero
5
- class RestRequest
6
- def initialize(env, rest_base_prefix = [])
7
- @env = env
8
- @rest_base_prefix = rest_base_prefix
9
- end
10
-
11
- attr_reader :env
12
- attr_accessor :rest_base_prefix
13
-
14
- def base_uri
15
- # Load balancer awareness
16
- if env["HTTP_X_FORWARDED_PROTO"]
17
- scheme = env["HTTP_X_FORWARDED_PROTO"]
18
- else
19
- scheme = env["rack.url_scheme"]
20
- end
21
- @base_uri ||= "#{scheme}://#{env["HTTP_HOST"]}#{env["SCRIPT_NAME"]}"
22
- end
23
-
24
- def base_uri=(value)
25
- @base_uri = value
26
- end
27
-
28
- def api_version
29
- Integer(@env["HTTP_X_OPS_SERVER_API_VERSION"] || 0)
30
- end
31
-
32
- def api_v0?
33
- api_version == 0
34
- end
35
-
36
- def requestor
37
- @env["HTTP_X_OPS_USERID"]
38
- end
39
-
40
- def method
41
- @env["REQUEST_METHOD"]
42
- end
43
-
44
- def rest_path
45
- @rest_path ||= rest_base_prefix + env["PATH_INFO"].split("/").select { |part| part != "" }
46
- end
47
-
48
- def rest_path=(rest_path)
49
- @rest_path = rest_path
50
- end
51
-
52
- def body=(body)
53
- @body = body
54
- end
55
-
56
- def body
57
- @body ||= env["rack.input"].read
58
- end
59
-
60
- def query_params
61
- @query_params ||= begin
62
- params = Rack::Request.new(env).GET
63
- params.keys.each do |key|
64
- params[key] = self.class.rfc2396_parser.unescape(params[key])
65
- end
66
- params
67
- end
68
- end
69
-
70
- def to_s
71
- result = "#{method} #{rest_path.join("/")}"
72
- if query_params.size > 0
73
- result << "?#{query_params.map { |k, v| "#{k}=#{v}" }.join("&")}"
74
- end
75
- if body.chomp != ""
76
- result << "\n--- #{method} BODY ---\n"
77
- result << body
78
- result << "\n" unless body.end_with?("\n")
79
- result << "--- END #{method} BODY ---"
80
- end
81
- result
82
- end
83
-
84
- def self.rfc2396_parser
85
- @parser ||= URI::RFC2396_Parser.new
86
- end
87
- end
88
- end
1
+ require "rack/request"
2
+ require "cgi" unless defined?(CGI)
3
+
4
+ module ChefZero
5
+ class RestRequest
6
+ def initialize(env, rest_base_prefix = [])
7
+ @env = env
8
+ @rest_base_prefix = rest_base_prefix
9
+ end
10
+
11
+ attr_reader :env
12
+ attr_accessor :rest_base_prefix
13
+
14
+ def base_uri
15
+ # Load balancer awareness
16
+ scheme = env["HTTP_X_FORWARDED_PROTO"] || env["rack.url_scheme"]
17
+ @base_uri ||= "#{scheme}://#{env["HTTP_HOST"]}#{env["SCRIPT_NAME"]}"
18
+ end
19
+
20
+ def base_uri=(value)
21
+ @base_uri = value
22
+ end
23
+
24
+ def api_version
25
+ Integer(@env["HTTP_X_OPS_SERVER_API_VERSION"] || 0)
26
+ end
27
+
28
+ def api_v0?
29
+ api_version == 0
30
+ end
31
+
32
+ def requestor
33
+ @env["HTTP_X_OPS_USERID"]
34
+ end
35
+
36
+ def method
37
+ @env["REQUEST_METHOD"]
38
+ end
39
+
40
+ def rest_path
41
+ @rest_path ||= rest_base_prefix + env["PATH_INFO"].split("/").select { |part| part != "" }
42
+ end
43
+
44
+ def rest_path=(rest_path)
45
+ @rest_path = rest_path
46
+ end
47
+
48
+ def body=(body)
49
+ @body = body
50
+ end
51
+
52
+ def body
53
+ @body ||= env["rack.input"].read
54
+ end
55
+
56
+ def query_params
57
+ @query_params ||= begin
58
+ params = Rack::Request.new(env).GET
59
+ params.keys.each do |key|
60
+ params[key] = self.class.rfc2396_parser.unescape(params[key])
61
+ end
62
+ params
63
+ end
64
+ end
65
+
66
+ def to_s
67
+ result = "#{method} #{rest_path.join("/")}"
68
+ if query_params.size > 0
69
+ result << "?#{query_params.map { |k, v| "#{k}=#{v}" }.join("&")}"
70
+ end
71
+ if body.chomp != ""
72
+ result << "\n--- #{method} BODY ---\n"
73
+ result << body
74
+ result << "\n" unless body.end_with?("\n")
75
+ result << "--- END #{method} BODY ---"
76
+ end
77
+ result
78
+ end
79
+
80
+ def self.rfc2396_parser
81
+ @parser ||= URI::RFC2396_Parser.new
82
+ end
83
+ end
84
+ end
@@ -1,72 +1,72 @@
1
- require "pp" unless defined?(PP)
2
-
3
- module ChefZero
4
- class RestRouter
5
- def initialize(routes)
6
- @routes = routes.map do |route, endpoint|
7
- if route =~ /\*\*$/
8
- pattern = Regexp.new("^#{route[0..-3].gsub("*", "[^/]*")}")
9
- else
10
- pattern = Regexp.new("^#{route.gsub("*", "[^/]*")}$")
11
- end
12
- [ pattern, endpoint ]
13
- end
14
- end
15
-
16
- attr_reader :routes
17
- attr_accessor :not_found
18
-
19
- def call(request)
20
- log_request(request)
21
-
22
- clean_path = "/" + request.rest_path.join("/")
23
-
24
- find_endpoint(clean_path).call(request).tap do |response|
25
- log_response(response)
26
- end
27
- rescue => ex
28
- exception = "#{ex.inspect}\n#{ex.backtrace.join("\n")}"
29
-
30
- ChefZero::Log.error(exception)
31
- [ 500, { "Content-Type" => "text/plain" }, "Exception raised! #{exception}" ]
32
- end
33
-
34
- private
35
-
36
- def find_endpoint(clean_path)
37
- _, endpoint = routes.find { |route, endpoint| route.match(clean_path) }
38
- endpoint || not_found
39
- end
40
-
41
- def log_request(request)
42
- ChefZero::Log.debug do
43
- "#{request.method} /#{request.rest_path.join("/")}".tap do |msg|
44
- next unless request.method =~ /^(POST|PUT)$/
45
-
46
- if request.body.nil? || request.body.empty?
47
- msg << " (no body)"
48
- else
49
- msg << [
50
- "",
51
- "--- #{request.method} BODY ---",
52
- request.body.chomp,
53
- "--- END #{request.method} BODY ---",
54
- ].join("\n")
55
- end
56
- end
57
- end
58
-
59
- ChefZero::Log.debug { request.pretty_inspect }
60
- end
61
-
62
- def log_response(response)
63
- ChefZero::Log.debug do
64
- [ "",
65
- "--- RESPONSE (#{response[0]}) ---",
66
- response[2].chomp,
67
- "--- END RESPONSE ---",
68
- ].join("\n")
69
- end
70
- end
71
- end
72
- end
1
+ require "pp" unless defined?(PP)
2
+
3
+ module ChefZero
4
+ class RestRouter
5
+ def initialize(routes)
6
+ @routes = routes.map do |route, endpoint|
7
+ if route =~ /\*\*$/
8
+ pattern = Regexp.new("^#{route[0..-3].gsub("*", "[^/]*")}")
9
+ else
10
+ pattern = Regexp.new("^#{route.gsub("*", "[^/]*")}$")
11
+ end
12
+ [ pattern, endpoint ]
13
+ end
14
+ end
15
+
16
+ attr_reader :routes
17
+ attr_accessor :not_found
18
+
19
+ def call(request)
20
+ log_request(request)
21
+
22
+ clean_path = "/" + request.rest_path.join("/")
23
+
24
+ find_endpoint(clean_path).call(request).tap do |response|
25
+ log_response(response)
26
+ end
27
+ rescue => ex
28
+ exception = "#{ex.inspect}\n#{ex.backtrace.join("\n")}"
29
+
30
+ ChefZero::Log.error(exception)
31
+ [ 500, { "Content-Type" => "text/plain" }, "Exception raised! #{exception}" ]
32
+ end
33
+
34
+ private
35
+
36
+ def find_endpoint(clean_path)
37
+ _, endpoint = routes.find { |route, endpoint| route.match(clean_path) }
38
+ endpoint || not_found
39
+ end
40
+
41
+ def log_request(request)
42
+ ChefZero::Log.debug do
43
+ "#{request.method} /#{request.rest_path.join("/")}".tap do |msg|
44
+ next unless request.method =~ /^(POST|PUT)$/
45
+
46
+ if request.body.nil? || request.body.empty?
47
+ msg << " (no body)"
48
+ else
49
+ msg << [
50
+ "",
51
+ "--- #{request.method} BODY ---",
52
+ request.body.chomp,
53
+ "--- END #{request.method} BODY ---",
54
+ ].join("\n")
55
+ end
56
+ end
57
+ end
58
+
59
+ ChefZero::Log.debug { request.pretty_inspect }
60
+ end
61
+
62
+ def log_response(response)
63
+ ChefZero::Log.debug do
64
+ [ "",
65
+ "--- RESPONSE (#{response[0]}) ---",
66
+ response[2].chomp,
67
+ "--- END RESPONSE ---",
68
+ ].join("\n")
69
+ end
70
+ end
71
+ end
72
+ end