Class: Chef::ChefFS::FileSystem::ChefServer::RestListDir
- Inherits:
-
BaseFSDir
- Object
- BaseFSObject
- BaseFSDir
- Chef::ChefFS::FileSystem::ChefServer::RestListDir
- Defined in:
- lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb
Direct Known Subclasses
CookbooksDir, DataBagDir, DataBagsDir, EnvironmentsDir, NodesDir, PoliciesDir, PolicyGroupsDir
Instance Attribute Summary collapse
-
#api_path ⇒ Object
readonly
Returns the value of attribute api_path.
-
#data_handler ⇒ Object
readonly
Returns the value of attribute data_handler.
Attributes inherited from BaseFSObject
Instance Method Summary collapse
- #can_have_child?(name, is_dir) ⇒ Boolean
-
#children ⇒ Object
Does GET /
, assumes the result is of the format:. -
#create_child(name, file_contents) ⇒ Object
Does POST
with file_contents. - #environment ⇒ Object
-
#initialize(name, parent, api_path = nil, data_handler = nil) ⇒ RestListDir
constructor
A new instance of RestListDir.
- #make_child_entry(name, exists = nil) ⇒ Object
- #org ⇒ Object
- #rest ⇒ Object
Methods inherited from BaseFSDir
Methods inherited from BaseFSObject
#chef_object, #child, #compare_to, #delete, #dir?, #exists?, #path_for_printing, #read, #root, #write
Constructor Details
#initialize(name, parent, api_path = nil, data_handler = nil) ⇒ RestListDir
Returns a new instance of RestListDir.
28 29 30 31 32 |
# 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 |
Instance Attribute Details
#api_path ⇒ Object (readonly)
Returns the value of attribute api_path.
34 35 36 |
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb', line 34 def api_path @api_path end |
#data_handler ⇒ Object (readonly)
Returns the value of attribute data_handler.
35 36 37 |
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb', line 35 def data_handler @data_handler end |
Instance Method Details
#can_have_child?(name, is_dir) ⇒ Boolean
37 38 39 |
# 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 ⇒ Object
Does GET /
{
"foo": "
Children are foo.json and bar.json in this case.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# 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::HTTPClientException => 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::HTTPClientException => 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) ⇒ Object
Does POST
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb', line 113 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::HTTPClientException => 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.}") 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 ⇒ Object
161 162 163 |
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb', line 161 def environment parent.environment end |
#make_child_entry(name, exists = nil) ⇒ Object
169 170 171 172 |
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb', line 169 def make_child_entry(name, exists = nil) @children.find { |child| child.name == name } if @children RestListEntry.new(name, self, exists) end |
#org ⇒ Object
157 158 159 |
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb', line 157 def org parent.org end |
#rest ⇒ Object
165 166 167 |
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb', line 165 def rest parent.rest end |