summaryrefslogtreecommitdiff
path: root/lib/chef/chef_fs/file_system/rest_list_entry.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chef/chef_fs/file_system/rest_list_entry.rb')
-rw-r--r--lib/chef/chef_fs/file_system/rest_list_entry.rb185
1 files changed, 0 insertions, 185 deletions
diff --git a/lib/chef/chef_fs/file_system/rest_list_entry.rb b/lib/chef/chef_fs/file_system/rest_list_entry.rb
deleted file mode 100644
index 49c6cc9e67..0000000000
--- a/lib/chef/chef_fs/file_system/rest_list_entry.rb
+++ /dev/null
@@ -1,185 +0,0 @@
-#
-# Author:: John Keiser (<jkeiser@opscode.com>)
-# Copyright:: Copyright (c) 2012 Opscode, Inc.
-# License:: Apache License, Version 2.0
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-require 'chef/chef_fs/file_system/base_fs_object'
-require 'chef/chef_fs/file_system/not_found_error'
-require 'chef/chef_fs/file_system/operation_failed_error'
-require 'chef/role'
-require 'chef/node'
-require 'chef/json_compat'
-
-class Chef
- module ChefFS
- module FileSystem
- class RestListEntry < BaseFSObject
- def initialize(name, parent, exists = nil)
- super(name, parent)
- @exists = exists
- end
-
- def data_handler
- parent.data_handler
- end
-
- def api_child_name
- if name.length < 5 || name[-5,5] != ".json"
- raise "Invalid name #{path}: must end in .json"
- end
- name[0,name.length-5]
- end
-
- def api_path
- "#{parent.api_path}/#{api_child_name}"
- end
-
- def org
- parent.org
- end
-
- def environment
- parent.environment
- end
-
- def exists?
- if @exists.nil?
- begin
- @exists = parent.children.any? { |child| child.name == name }
- rescue Chef::ChefFS::FileSystem::NotFoundError
- @exists = false
- end
- end
- @exists
- end
-
- def delete(recurse)
- begin
- rest.delete(api_path)
- rescue Timeout::Error => e
- raise Chef::ChefFS::FileSystem::OperationFailedError.new(:delete, self, e, "Timeout deleting: #{e}")
- rescue Net::HTTPServerException => e
- if e.response.code == "404"
- raise Chef::ChefFS::FileSystem::NotFoundError.new(self, e)
- else
- raise Chef::ChefFS::FileSystem::OperationFailedError.new(:delete, self, e, "Timeout deleting: #{e}")
- end
- end
- end
-
- def read
- Chef::JSONCompat.to_json_pretty(minimize_value(_read_json))
- end
-
- def _read_json
- begin
- # Minimize the value (get rid of defaults) so the results don't look terrible
- root.get_json(api_path)
- rescue Timeout::Error => e
- raise Chef::ChefFS::FileSystem::OperationFailedError.new(:read, self, e, "Timeout reading: #{e}")
- rescue Net::HTTPServerException => e
- if $!.response.code == "404"
- raise Chef::ChefFS::FileSystem::NotFoundError.new(self, e)
- else
- raise Chef::ChefFS::FileSystem::OperationFailedError.new(:read, self, e, "HTTP error reading: #{e}")
- end
- end
- end
-
- def chef_object
- # REST will inflate the Chef object using json_class
- data_handler.json_class.json_create(read)
- end
-
- def minimize_value(value)
- data_handler.minimize(data_handler.normalize(value, self), self)
- end
-
- def compare_to(other)
- # TODO this pair of reads can be parallelized
-
- # Grab the other value
- begin
- other_value_json = other.read
- rescue Chef::ChefFS::FileSystem::NotFoundError
- return [ nil, nil, :none ]
- end
-
- # Grab this value
- begin
- value = _read_json
- rescue Chef::ChefFS::FileSystem::NotFoundError
- return [ false, :none, other_value_json ]
- end
-
- # Minimize (and normalize) both values for easy and beautiful diffs
- value = minimize_value(value)
- value_json = Chef::JSONCompat.to_json_pretty(value)
- begin
- other_value = Chef::JSONCompat.parse(other_value_json)
- rescue Chef::Exceptions::JSON::ParseError => e
- Chef::Log.warn("Parse error reading #{other.path_for_printing} as JSON: #{e}")
- return [ nil, value_json, other_value_json ]
- end
- other_value = minimize_value(other_value)
- other_value_json = Chef::JSONCompat.to_json_pretty(other_value)
-
- [ value == other_value, value_json, other_value_json ]
- end
-
- def rest
- parent.rest
- end
-
- def write(file_contents)
- begin
- object = Chef::JSONCompat.parse(file_contents)
- rescue Chef::Exceptions::JSON::ParseError => e
- raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, e, "Parse error reading JSON: #{e}")
- end
-
- if data_handler
- object = data_handler.normalize_for_put(object, self)
- data_handler.verify_integrity(object, self) do |error|
- raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, nil, "#{error}")
- end
- end
-
- begin
- rest.put(api_path, object)
- rescue Timeout::Error => e
- raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, e, "Timeout writing: #{e}")
- rescue Net::HTTPServerException => e
- if e.response.code == "404"
- raise Chef::ChefFS::FileSystem::NotFoundError.new(self, e)
- else
- raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, e, "HTTP error writing: #{e}")
- end
- end
- end
-
- def api_error_text(response)
- begin
- Chef::JSONCompat.parse(response.body)['error'].join("\n")
- rescue
- response.body
- end
- end
- end
-
- end
- end
-end