chef-zero 4.3.0 → 4.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +201 -201
  3. data/README.md +155 -155
  4. data/Rakefile +31 -31
  5. data/bin/chef-zero +100 -100
  6. data/lib/chef_zero.rb +10 -10
  7. data/lib/chef_zero/chef_data/acl_path.rb +139 -139
  8. data/lib/chef_zero/chef_data/cookbook_data.rb +240 -240
  9. data/lib/chef_zero/chef_data/data_normalizer.rb +208 -207
  10. data/lib/chef_zero/chef_data/default_creator.rb +446 -446
  11. data/lib/chef_zero/data_store/data_already_exists_error.rb +29 -29
  12. data/lib/chef_zero/data_store/data_error.rb +31 -31
  13. data/lib/chef_zero/data_store/data_not_found_error.rb +28 -28
  14. data/lib/chef_zero/data_store/default_facade.rb +149 -149
  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 +155 -155
  19. data/lib/chef_zero/data_store/raw_file_store.rb +147 -147
  20. data/lib/chef_zero/data_store/v1_to_v2_adapter.rb +142 -142
  21. data/lib/chef_zero/data_store/v2_to_v1_adapter.rb +107 -107
  22. data/lib/chef_zero/endpoints/acl_endpoint.rb +38 -38
  23. data/lib/chef_zero/endpoints/acls_endpoint.rb +29 -29
  24. data/lib/chef_zero/endpoints/actor_endpoint.rb +94 -94
  25. data/lib/chef_zero/endpoints/actors_endpoint.rb +64 -64
  26. data/lib/chef_zero/endpoints/authenticate_user_endpoint.rb +31 -31
  27. data/lib/chef_zero/endpoints/container_endpoint.rb +22 -22
  28. data/lib/chef_zero/endpoints/containers_endpoint.rb +13 -13
  29. data/lib/chef_zero/endpoints/cookbook_endpoint.rb +39 -39
  30. data/lib/chef_zero/endpoints/cookbook_version_endpoint.rb +119 -119
  31. data/lib/chef_zero/endpoints/cookbooks_base.rb +65 -65
  32. data/lib/chef_zero/endpoints/cookbooks_endpoint.rb +19 -19
  33. data/lib/chef_zero/endpoints/data_bag_endpoint.rb +45 -45
  34. data/lib/chef_zero/endpoints/data_bag_item_endpoint.rb +25 -25
  35. data/lib/chef_zero/endpoints/data_bags_endpoint.rb +23 -23
  36. data/lib/chef_zero/endpoints/environment_cookbook_endpoint.rb +24 -24
  37. data/lib/chef_zero/endpoints/environment_cookbook_versions_endpoint.rb +123 -123
  38. data/lib/chef_zero/endpoints/environment_cookbooks_endpoint.rb +22 -22
  39. data/lib/chef_zero/endpoints/environment_endpoint.rb +33 -33
  40. data/lib/chef_zero/endpoints/environment_nodes_endpoint.rb +23 -23
  41. data/lib/chef_zero/endpoints/environment_recipes_endpoint.rb +22 -22
  42. data/lib/chef_zero/endpoints/environment_role_endpoint.rb +36 -36
  43. data/lib/chef_zero/endpoints/file_store_file_endpoint.rb +22 -22
  44. data/lib/chef_zero/endpoints/group_endpoint.rb +20 -20
  45. data/lib/chef_zero/endpoints/groups_endpoint.rb +13 -13
  46. data/lib/chef_zero/endpoints/license_endpoint.rb +25 -25
  47. data/lib/chef_zero/endpoints/node_endpoint.rb +17 -17
  48. data/lib/chef_zero/endpoints/node_identifiers_endpoint.rb +22 -22
  49. data/lib/chef_zero/endpoints/not_found_endpoint.rb +11 -11
  50. data/lib/chef_zero/endpoints/organization_association_request_endpoint.rb +22 -22
  51. data/lib/chef_zero/endpoints/organization_association_requests_endpoint.rb +30 -30
  52. data/lib/chef_zero/endpoints/organization_authenticate_user_endpoint.rb +26 -26
  53. data/lib/chef_zero/endpoints/organization_endpoint.rb +46 -46
  54. data/lib/chef_zero/endpoints/organization_user_base.rb +15 -15
  55. data/lib/chef_zero/endpoints/organization_user_endpoint.rb +26 -26
  56. data/lib/chef_zero/endpoints/organization_users_endpoint.rb +43 -43
  57. data/lib/chef_zero/endpoints/organization_validator_key_endpoint.rb +20 -20
  58. data/lib/chef_zero/endpoints/organizations_endpoint.rb +62 -62
  59. data/lib/chef_zero/endpoints/policies_endpoint.rb +151 -151
  60. data/lib/chef_zero/endpoints/principal_endpoint.rb +42 -42
  61. data/lib/chef_zero/endpoints/rest_list_endpoint.rb +42 -42
  62. data/lib/chef_zero/endpoints/rest_object_endpoint.rb +63 -63
  63. data/lib/chef_zero/endpoints/role_endpoint.rb +16 -16
  64. data/lib/chef_zero/endpoints/role_environments_endpoint.rb +14 -14
  65. data/lib/chef_zero/endpoints/sandbox_endpoint.rb +27 -27
  66. data/lib/chef_zero/endpoints/sandboxes_endpoint.rb +50 -50
  67. data/lib/chef_zero/endpoints/search_endpoint.rb +194 -194
  68. data/lib/chef_zero/endpoints/searches_endpoint.rb +18 -18
  69. data/lib/chef_zero/endpoints/server_api_version_endpoint.rb +14 -14
  70. data/lib/chef_zero/endpoints/system_recovery_endpoint.rb +30 -30
  71. data/lib/chef_zero/endpoints/user_association_request_endpoint.rb +40 -40
  72. data/lib/chef_zero/endpoints/user_association_requests_count_endpoint.rb +19 -19
  73. data/lib/chef_zero/endpoints/user_association_requests_endpoint.rb +19 -19
  74. data/lib/chef_zero/endpoints/user_organizations_endpoint.rb +22 -22
  75. data/lib/chef_zero/endpoints/version_endpoint.rb +12 -12
  76. data/lib/chef_zero/log.rb +7 -7
  77. data/lib/chef_zero/rest_base.rb +242 -242
  78. data/lib/chef_zero/rest_error_response.rb +11 -11
  79. data/lib/chef_zero/rest_request.rb +69 -69
  80. data/lib/chef_zero/rest_router.rb +45 -45
  81. data/lib/chef_zero/rspec.rb +308 -308
  82. data/lib/chef_zero/server.rb +642 -642
  83. data/lib/chef_zero/socketless_server_map.rb +92 -92
  84. data/lib/chef_zero/solr/query/binary_operator.rb +52 -52
  85. data/lib/chef_zero/solr/query/phrase.rb +23 -23
  86. data/lib/chef_zero/solr/query/range_query.rb +46 -46
  87. data/lib/chef_zero/solr/query/regexpable_query.rb +29 -29
  88. data/lib/chef_zero/solr/query/subquery.rb +37 -37
  89. data/lib/chef_zero/solr/query/term.rb +45 -45
  90. data/lib/chef_zero/solr/query/unary_operator.rb +43 -43
  91. data/lib/chef_zero/solr/solr_doc.rb +53 -53
  92. data/lib/chef_zero/solr/solr_parser.rb +203 -203
  93. data/lib/chef_zero/version.rb +3 -3
  94. data/spec/run_oc_pedant.rb +63 -63
  95. data/spec/search_spec.rb +32 -32
  96. data/spec/server_spec.rb +92 -92
  97. data/spec/socketless_server_map_spec.rb +76 -76
  98. data/spec/support/oc_pedant.rb +132 -132
  99. data/spec/support/stickywicket.pem +27 -27
  100. metadata +3 -3
@@ -1,22 +1,22 @@
1
- require 'ffi_yajl'
2
- require 'chef_zero/endpoints/cookbooks_base'
3
-
4
- module ChefZero
5
- module Endpoints
6
- # /environments/NAME/cookbooks
7
- class EnvironmentCookbooksEndpoint < CookbooksBase
8
- def get(request)
9
- environment = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..3]), :create_additions => false)
10
- constraints = environment['cookbook_versions'] || {}
11
- if request.query_params['num_versions'] == 'all'
12
- num_versions = nil
13
- elsif request.query_params['num_versions']
14
- num_versions = request.query_params['num_versions'].to_i
15
- else
16
- num_versions = 1
17
- end
18
- json_response(200, format_cookbooks_list(request, all_cookbooks_list(request), constraints, num_versions))
19
- end
20
- end
21
- end
22
- end
1
+ require 'ffi_yajl'
2
+ require 'chef_zero/endpoints/cookbooks_base'
3
+
4
+ module ChefZero
5
+ module Endpoints
6
+ # /environments/NAME/cookbooks
7
+ class EnvironmentCookbooksEndpoint < CookbooksBase
8
+ def get(request)
9
+ environment = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..3]), :create_additions => false)
10
+ constraints = environment['cookbook_versions'] || {}
11
+ if request.query_params['num_versions'] == 'all'
12
+ num_versions = nil
13
+ elsif request.query_params['num_versions']
14
+ num_versions = request.query_params['num_versions'].to_i
15
+ else
16
+ num_versions = 1
17
+ end
18
+ json_response(200, format_cookbooks_list(request, all_cookbooks_list(request), constraints, num_versions))
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,33 +1,33 @@
1
- require 'ffi_yajl'
2
- require 'chef_zero/endpoints/rest_object_endpoint'
3
- require 'chef_zero/chef_data/data_normalizer'
4
-
5
- module ChefZero
6
- module Endpoints
7
- # /environments/NAME
8
- class EnvironmentEndpoint < RestObjectEndpoint
9
- def delete(request)
10
- if request.rest_path[3] == "_default"
11
- # 405, really?
12
- error(405, "The '_default' environment cannot be modified.")
13
- else
14
- super(request)
15
- end
16
- end
17
-
18
- def put(request)
19
- if request.rest_path[3] == "_default"
20
- error(405, "The '_default' environment cannot be modified.")
21
- else
22
- super(request)
23
- end
24
- end
25
-
26
- def populate_defaults(request, response_json)
27
- response = FFI_Yajl::Parser.parse(response_json, :create_additions => false)
28
- response = ChefData::DataNormalizer.normalize_environment(response, request.rest_path[3])
29
- FFI_Yajl::Encoder.encode(response, :pretty => true)
30
- end
31
- end
32
- end
33
- end
1
+ require 'ffi_yajl'
2
+ require 'chef_zero/endpoints/rest_object_endpoint'
3
+ require 'chef_zero/chef_data/data_normalizer'
4
+
5
+ module ChefZero
6
+ module Endpoints
7
+ # /environments/NAME
8
+ class EnvironmentEndpoint < RestObjectEndpoint
9
+ def delete(request)
10
+ if request.rest_path[3] == "_default"
11
+ # 405, really?
12
+ error(405, "The '_default' environment cannot be modified.")
13
+ else
14
+ super(request)
15
+ end
16
+ end
17
+
18
+ def put(request)
19
+ if request.rest_path[3] == "_default"
20
+ error(405, "The '_default' environment cannot be modified.")
21
+ else
22
+ super(request)
23
+ end
24
+ end
25
+
26
+ def populate_defaults(request, response_json)
27
+ response = FFI_Yajl::Parser.parse(response_json, :create_additions => false)
28
+ response = ChefData::DataNormalizer.normalize_environment(response, request.rest_path[3])
29
+ FFI_Yajl::Encoder.encode(response, :pretty => true)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,23 +1,23 @@
1
- require 'ffi_yajl'
2
- require 'chef_zero/rest_base'
3
-
4
- module ChefZero
5
- module Endpoints
6
- # /environment/NAME/nodes
7
- class EnvironmentNodesEndpoint < RestBase
8
- def get(request)
9
- # 404 if environment does not exist
10
- get_data(request, request.rest_path[0..3])
11
-
12
- result = {}
13
- list_data(request, request.rest_path[0..1] + ['nodes']).each do |name|
14
- node = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..1] + ['nodes', name]), :create_additions => false)
15
- if node['chef_environment'] == request.rest_path[3]
16
- result[name] = build_uri(request.base_uri, request.rest_path[0..1] + ['nodes', name])
17
- end
18
- end
19
- json_response(200, result)
20
- end
21
- end
22
- end
23
- end
1
+ require 'ffi_yajl'
2
+ require 'chef_zero/rest_base'
3
+
4
+ module ChefZero
5
+ module Endpoints
6
+ # /environment/NAME/nodes
7
+ class EnvironmentNodesEndpoint < RestBase
8
+ def get(request)
9
+ # 404 if environment does not exist
10
+ get_data(request, request.rest_path[0..3])
11
+
12
+ result = {}
13
+ list_data(request, request.rest_path[0..1] + ['nodes']).each do |name|
14
+ node = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..1] + ['nodes', name]), :create_additions => false)
15
+ if node['chef_environment'] == request.rest_path[3]
16
+ result[name] = build_uri(request.base_uri, request.rest_path[0..1] + ['nodes', name])
17
+ end
18
+ end
19
+ json_response(200, result)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,22 +1,22 @@
1
- require 'ffi_yajl'
2
- require 'chef_zero/endpoints/cookbooks_base'
3
-
4
- module ChefZero
5
- module Endpoints
6
- # /environment/NAME/recipes
7
- class EnvironmentRecipesEndpoint < CookbooksBase
8
- def get(request)
9
- environment = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..3]), :create_additions => false)
10
- constraints = environment['cookbook_versions'] || {}
11
- result = []
12
- filter_cookbooks(all_cookbooks_list(request), constraints, 1) do |name, versions|
13
- if versions.size > 0
14
- cookbook = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..1] + ['cookbooks', name, versions[0]]), :create_additions => false)
15
- result += recipe_names(name, cookbook)
16
- end
17
- end
18
- json_response(200, result.sort)
19
- end
20
- end
21
- end
22
- end
1
+ require 'ffi_yajl'
2
+ require 'chef_zero/endpoints/cookbooks_base'
3
+
4
+ module ChefZero
5
+ module Endpoints
6
+ # /environment/NAME/recipes
7
+ class EnvironmentRecipesEndpoint < CookbooksBase
8
+ def get(request)
9
+ environment = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..3]), :create_additions => false)
10
+ constraints = environment['cookbook_versions'] || {}
11
+ result = []
12
+ filter_cookbooks(all_cookbooks_list(request), constraints, 1) do |name, versions|
13
+ if versions.size > 0
14
+ cookbook = FFI_Yajl::Parser.parse(get_data(request, request.rest_path[0..1] + ['cookbooks', name, versions[0]]), :create_additions => false)
15
+ result += recipe_names(name, cookbook)
16
+ end
17
+ end
18
+ json_response(200, result.sort)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,36 +1,36 @@
1
- require 'ffi_yajl'
2
- require 'chef_zero/endpoints/cookbooks_base'
3
-
4
- module ChefZero
5
- module Endpoints
6
- # /environments/NAME/roles/NAME
7
- # /roles/NAME/environments/NAME
8
- class EnvironmentRoleEndpoint < CookbooksBase
9
- def get(request)
10
- # 404 if environment does not exist
11
- if request.rest_path[2] == 'environments'
12
- environment_path = request.rest_path[0..1] + request.rest_path[2..3]
13
- role_path = request.rest_path[0..1] + request.rest_path[4..5]
14
- else
15
- environment_path = request.rest_path[0..1] + request.rest_path[4..5]
16
- role_path = request.rest_path[0..1] + request.rest_path[2..3]
17
- end
18
- # Verify that the environment exists
19
- get_data(request, environment_path)
20
-
21
- role = FFI_Yajl::Parser.parse(get_data(request, role_path), :create_additions => false)
22
- environment_name = environment_path[3]
23
- if environment_name == '_default'
24
- run_list = role['run_list']
25
- else
26
- if role['env_run_lists']
27
- run_list = role['env_run_lists'][environment_name]
28
- else
29
- run_list = nil
30
- end
31
- end
32
- json_response(200, { 'run_list' => run_list })
33
- end
34
- end
35
- end
36
- end
1
+ require 'ffi_yajl'
2
+ require 'chef_zero/endpoints/cookbooks_base'
3
+
4
+ module ChefZero
5
+ module Endpoints
6
+ # /environments/NAME/roles/NAME
7
+ # /roles/NAME/environments/NAME
8
+ class EnvironmentRoleEndpoint < CookbooksBase
9
+ def get(request)
10
+ # 404 if environment does not exist
11
+ if request.rest_path[2] == 'environments'
12
+ environment_path = request.rest_path[0..1] + request.rest_path[2..3]
13
+ role_path = request.rest_path[0..1] + request.rest_path[4..5]
14
+ else
15
+ environment_path = request.rest_path[0..1] + request.rest_path[4..5]
16
+ role_path = request.rest_path[0..1] + request.rest_path[2..3]
17
+ end
18
+ # Verify that the environment exists
19
+ get_data(request, environment_path)
20
+
21
+ role = FFI_Yajl::Parser.parse(get_data(request, role_path), :create_additions => false)
22
+ environment_name = environment_path[3]
23
+ if environment_name == '_default'
24
+ run_list = role['run_list']
25
+ else
26
+ if role['env_run_lists']
27
+ run_list = role['env_run_lists'][environment_name]
28
+ else
29
+ run_list = nil
30
+ end
31
+ end
32
+ json_response(200, { 'run_list' => run_list })
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,22 +1,22 @@
1
- require 'chef_zero/rest_base'
2
-
3
- module ChefZero
4
- module Endpoints
5
- # The minimum amount of S3 necessary to support cookbook upload/download
6
- # /organizations/NAME/file_store/FILE
7
- class FileStoreFileEndpoint < RestBase
8
- def json_only
9
- false
10
- end
11
-
12
- def get(request)
13
- [200, {"Content-Type" => 'application/x-binary'}, get_data(request) ]
14
- end
15
-
16
- def put(request)
17
- data_store.set(request.rest_path, request.body, :create, :create_dir, :requestor => request.requestor)
18
- json_response(200, {})
19
- end
20
- end
21
- end
22
- end
1
+ require 'chef_zero/rest_base'
2
+
3
+ module ChefZero
4
+ module Endpoints
5
+ # The minimum amount of S3 necessary to support cookbook upload/download
6
+ # /organizations/NAME/file_store/FILE
7
+ class FileStoreFileEndpoint < RestBase
8
+ def json_only
9
+ false
10
+ end
11
+
12
+ def get(request)
13
+ [200, {"Content-Type" => 'application/x-binary'}, get_data(request) ]
14
+ end
15
+
16
+ def put(request)
17
+ data_store.set(request.rest_path, request.body, :create, :create_dir, :requestor => request.requestor)
18
+ json_response(200, {})
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,20 +1,20 @@
1
- require 'ffi_yajl'
2
- require 'chef_zero/endpoints/rest_object_endpoint'
3
- require 'chef_zero/chef_data/data_normalizer'
4
-
5
- module ChefZero
6
- module Endpoints
7
- # /organizations/ORG/groups/NAME
8
- class GroupEndpoint < RestObjectEndpoint
9
- def initialize(server)
10
- super(server, %w(id groupname))
11
- end
12
-
13
- def populate_defaults(request, response_json)
14
- group = FFI_Yajl::Parser.parse(response_json, :create_additions => false)
15
- group = ChefData::DataNormalizer.normalize_group(group, request.rest_path[3], request.rest_path[1])
16
- FFI_Yajl::Encoder.encode(group, :pretty => true)
17
- end
18
- end
19
- end
20
- end
1
+ require 'ffi_yajl'
2
+ require 'chef_zero/endpoints/rest_object_endpoint'
3
+ require 'chef_zero/chef_data/data_normalizer'
4
+
5
+ module ChefZero
6
+ module Endpoints
7
+ # /organizations/ORG/groups/NAME
8
+ class GroupEndpoint < RestObjectEndpoint
9
+ def initialize(server)
10
+ super(server, %w(id groupname))
11
+ end
12
+
13
+ def populate_defaults(request, response_json)
14
+ group = FFI_Yajl::Parser.parse(response_json, :create_additions => false)
15
+ group = ChefData::DataNormalizer.normalize_group(group, request.rest_path[3], request.rest_path[1])
16
+ FFI_Yajl::Encoder.encode(group, :pretty => true)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,13 +1,13 @@
1
- require 'ffi_yajl'
2
- require 'chef_zero/endpoints/rest_list_endpoint'
3
-
4
- module ChefZero
5
- module Endpoints
6
- # /organizations/ORG/groups/NAME
7
- class GroupsEndpoint < RestListEndpoint
8
- def initialize(server)
9
- super(server, %w(id groupname))
10
- end
11
- end
12
- end
13
- end
1
+ require 'ffi_yajl'
2
+ require 'chef_zero/endpoints/rest_list_endpoint'
3
+
4
+ module ChefZero
5
+ module Endpoints
6
+ # /organizations/ORG/groups/NAME
7
+ class GroupsEndpoint < RestListEndpoint
8
+ def initialize(server)
9
+ super(server, %w(id groupname))
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,25 +1,25 @@
1
- require 'ffi_yajl'
2
- require 'chef_zero/rest_base'
3
-
4
- module ChefZero
5
- module Endpoints
6
- # /license
7
- class LicenseEndpoint < RestBase
8
- MAX_NODE_COUNT = 25
9
-
10
- def get(request)
11
- node_count = 0
12
- list_data(request, [ 'organizations' ]).each do |orgname|
13
- node_count += list_data(request, [ 'organizations', orgname, 'nodes' ]).size
14
- end
15
-
16
- json_response(200, {
17
- "limit_exceeded" => (node_count > MAX_NODE_COUNT) ? true : false,
18
- "node_license" => MAX_NODE_COUNT,
19
- "node_count" => node_count,
20
- "upgrade_url" => 'http://blah.com'
21
- })
22
- end
23
- end
24
- end
25
- end
1
+ require 'ffi_yajl'
2
+ require 'chef_zero/rest_base'
3
+
4
+ module ChefZero
5
+ module Endpoints
6
+ # /license
7
+ class LicenseEndpoint < RestBase
8
+ MAX_NODE_COUNT = 25
9
+
10
+ def get(request)
11
+ node_count = 0
12
+ list_data(request, [ 'organizations' ]).each do |orgname|
13
+ node_count += list_data(request, [ 'organizations', orgname, 'nodes' ]).size
14
+ end
15
+
16
+ json_response(200, {
17
+ "limit_exceeded" => (node_count > MAX_NODE_COUNT) ? true : false,
18
+ "node_license" => MAX_NODE_COUNT,
19
+ "node_count" => node_count,
20
+ "upgrade_url" => 'http://blah.com'
21
+ })
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,17 +1,17 @@
1
- require 'ffi_yajl'
2
- require 'chef_zero/endpoints/rest_object_endpoint'
3
- require 'chef_zero/chef_data/data_normalizer'
4
-
5
- module ChefZero
6
- module Endpoints
7
- # /nodes/ID
8
- class NodeEndpoint < RestObjectEndpoint
9
- def populate_defaults(request, response_json)
10
- node = FFI_Yajl::Parser.parse(response_json, :create_additions => false)
11
- node = ChefData::DataNormalizer.normalize_node(node, request.rest_path[3])
12
- FFI_Yajl::Encoder.encode(node, :pretty => true)
13
- end
14
- end
15
- end
16
- end
17
-
1
+ require 'ffi_yajl'
2
+ require 'chef_zero/endpoints/rest_object_endpoint'
3
+ require 'chef_zero/chef_data/data_normalizer'
4
+
5
+ module ChefZero
6
+ module Endpoints
7
+ # /nodes/ID
8
+ class NodeEndpoint < RestObjectEndpoint
9
+ def populate_defaults(request, response_json)
10
+ node = FFI_Yajl::Parser.parse(response_json, :create_additions => false)
11
+ node = ChefData::DataNormalizer.normalize_node(node, request.rest_path[3])
12
+ FFI_Yajl::Encoder.encode(node, :pretty => true)
13
+ end
14
+ end
15
+ end
16
+ end
17
+