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 98
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 84
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_to_upload = other.chef_object
  cookbook_to_upload.freeze_version if options[:freeze]
  uploader = Chef::CookbookUploader.new(cookbook_to_upload, :force => options[:force], :rest => chef_rest)

  with_actual_cookbooks_dir(other.parent.file_path) do
    uploader.upload_cookbooks
  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::HTTPServerException => 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 89
def with_actual_cookbooks_dir(actual_cookbook_path)
  old_cookbook_path = Chef::Config.cookbook_path
  Chef::Config.cookbook_path = actual_cookbook_path if !Chef::Config.cookbook_path

  yield
ensure
  Chef::Config.cookbook_path = old_cookbook_path
end