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 /<api_path>, assumes the result is of the format:.
-
#create_child(name, file_contents) ⇒ Object
Does POST <api_path> 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 /<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.
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 109 |
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb', line 73 def children begin # 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 end |
#create_child(name, file_contents) ⇒ Object
Does POST <api_path> with file_contents
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 156 |
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb', line 114 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.}") 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
162 163 164 |
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb', line 162 def environment parent.environment end |
#make_child_entry(name, exists = nil) ⇒ Object
170 171 172 173 |
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb', line 170 def make_child_entry(name, exists = nil) @children.find { |child| child.name == name } if @children RestListEntry.new(name, self, exists) end |
#org ⇒ Object
158 159 160 |
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb', line 158 def org parent.org end |
#rest ⇒ Object
166 167 168 |
# File 'lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb', line 166 def rest parent.rest end |