class Chef::ChefFS::FileSystem::ChefServer::RestListDir
Attributes
api_path[R]
data_handler[R]
Public Class Methods
new(name, parent, api_path = nil, data_handler = nil)
click to toggle source
Calls superclass method
Chef::ChefFS::FileSystem::BaseFSDir.new
# File lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb, line 28 def initialize(name, parent, api_path = nil, data_handler = nil) super(name, parent) @api_path = api_path || (parent.api_path == "" ? name : "#{parent.api_path}/#{name}") @data_handler = data_handler end
Public Instance Methods
can_have_child?(name, is_dir)
click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb, line 37 def can_have_child?(name, is_dir) !is_dir end
children()
click to toggle source
Does GET /<api_path>, assumes the result is of the format:
{
"foo": "<api_path>/foo", "bar": "<api_path>/bar",
}
Children are foo.json and bar.json in this case.
# File lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb, line 73 def children # Grab the names of the children, append json, and make child entries @children ||= root.get_json(api_path).keys.sort.map do |key| make_child_entry(key, true) end rescue Timeout::Error => e raise Chef::ChefFS::FileSystem::OperationFailedError.new(:children, self, e, "Timeout retrieving children: #{e}") rescue Net::HTTPServerException => e # 404 = NotFoundError if $!.response.code == "404" if parent.is_a?(ChefServerRootDir) # GET /organizations/ORG/<container> returned 404, but that just might be because # we are talking to an older version of the server that doesn't support policies. # Do GET /organizations/ORG to find out if the org exists at all. # TODO use server API version instead of a second network request. begin root.get_json(parent.api_path) # Return empty list if the organization exists but /policies didn't work [] rescue Net::HTTPServerException => e if e.response.code == "404" raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!) end raise Chef::ChefFS::FileSystem::OperationFailedError.new(:children, self, e, "HTTP error retrieving children: #{e}") end else raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!) end # Anything else is unexpected (OperationFailedError) else raise Chef::ChefFS::FileSystem::OperationFailedError.new(:children, self, e, "HTTP error retrieving children: #{e}") end end
create_child(name, file_contents)
click to toggle source
Does POST <api_path> with file_contents
# File lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb, line 112 def create_child(name, file_contents) # Parse the contents to ensure they are valid JSON begin object = Chef::JSONCompat.parse(file_contents) rescue Chef::Exceptions::JSON::ParseError => e raise Chef::ChefFS::FileSystem::OperationFailedError.new(:create_child, self, e, "Parse error reading JSON creating child '#{name}': #{e}") end # Create the child entry that will be returned result = make_child_entry(name, true) # Normalize the file_contents before post (add defaults, etc.) if data_handler object = data_handler.normalize_for_post(object, result) data_handler.verify_integrity(object, result) do |error| raise Chef::ChefFS::FileSystem::OperationFailedError.new(:create_child, self, nil, "Error creating '#{name}': #{error}") end end # POST /api_path with the normalized file_contents begin rest.post(api_path, object) rescue Timeout::Error => e raise Chef::ChefFS::FileSystem::OperationFailedError.new(:create_child, self, e, "Timeout creating '#{name}': #{e}") rescue Net::HTTPServerException => e # 404 = NotFoundError if e.response.code == "404" raise Chef::ChefFS::FileSystem::NotFoundError.new(self, e) # 409 = AlreadyExistsError elsif $!.response.code == "409" raise Chef::ChefFS::FileSystem::AlreadyExistsError.new(:create_child, self, e, "Failure creating '#{name}': #{path}/#{name} already exists") # Anything else is unexpected (OperationFailedError) else raise Chef::ChefFS::FileSystem::OperationFailedError.new(:create_child, self, e, "Failure creating '#{name}': #{e.message}") end end # Clear the cache of children so that if someone asks for children # again, we will get it again @children = nil result end
environment()
click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb, line 160 def environment parent.environment end
make_child_entry(name, exists = nil)
click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb, line 168 def make_child_entry(name, exists = nil) @children.find { |child| child.name == name } if @children RestListEntry.new(name, self, exists) end
org()
click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb, line 156 def org parent.org end
rest()
click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb, line 164 def rest parent.rest end