class Chef::ChefFS::FileSystem::ChefServer::CookbooksDir
/cookbooks
Example children:
apache2/ mysql/
Public Instance Methods
can_have_child?(name, is_dir)
click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb, line 111 def can_have_child?(name, is_dir) is_dir end
chef_rest()
click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb, line 97 def chef_rest Chef::ServerAPI.new(root.chef_rest.url, root.chef_rest.options.merge(version_class: Chef::CookbookManifestVersions)) end
children()
click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb, line 47 def children @children ||= begin result = root.get_json(api_path).keys.map { |cookbook_name| CookbookDir.new(cookbook_name, self, exists: true) } result.sort_by(&:name) end end
create_child_from(other, options = {})
click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb, line 54 def create_child_from(other, options = {}) @children = nil upload_cookbook_from(other, options) end
make_child_entry(name)
click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb, line 42 def make_child_entry(name) result = @children.find { |child| child.name == name } if @children result || CookbookDir.new(name, self) end
upload_cookbook(other, options)
click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb, line 74 def upload_cookbook(other, options) cookbook = other.chef_object if other.chef_object raise Chef::Exceptions::MetadataNotFound.new(cookbook.root_paths[0], cookbook.name) unless cookbook.has_metadata_file? if cookbook Chef::CookbookLoader.copy_to_tmp_dir_from_array([cookbook]) do |tmp_cl| tmp_cl.load_cookbooks tmp_cl.compile_metadata tmp_cl.freeze_versions if options[:freeze] cookbook_for_upload = [] tmp_cl.each do |cookbook_name, cookbook| cookbook_for_upload << cookbook end uploader = Chef::CookbookUploader.new(cookbook_for_upload, force: options[:force], rest: chef_rest) with_actual_cookbooks_dir(other.parent.file_path) do uploader.upload_cookbooks end end end end
upload_cookbook_from(other, options = {})
click to toggle source
# File lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb, line 59 def upload_cookbook_from(other, options = {}) upload_cookbook(other, options) rescue Timeout::Error => e raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, e, "Timeout writing: #{e}") rescue Net::HTTPClientException => e case e.response.code when "409" raise Chef::ChefFS::FileSystem::CookbookFrozenError.new(:write, self, e, "Cookbook #{other.name} is frozen") else raise Chef::ChefFS::FileSystem::OperationFailedError.new(:write, self, e, "HTTP error writing: #{e}") end rescue Chef::Exceptions::CookbookFrozen => e raise Chef::ChefFS::FileSystem::CookbookFrozenError.new(:write, self, e, "Cookbook #{other.name} is frozen") end
with_actual_cookbooks_dir(actual_cookbook_path) { || ... }
click to toggle source
Work around the fact that CookbookUploader
doesn't understand chef_repo_path (yet)
# File lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb, line 102 def with_actual_cookbooks_dir(actual_cookbook_path) old_cookbook_path = Chef::Config.cookbook_path Chef::Config.cookbook_path = actual_cookbook_path unless Chef::Config.cookbook_path yield ensure Chef::Config.cookbook_path = old_cookbook_path end