class Chef::Cookbook::FileSystemFileVendor

Chef::Cookbook::FileSystemFileVendor

This FileVendor loads files from Chef::Config.cookbook_path. The thing that's sort of janky about this FileVendor implementation is that it basically takes only the cookbook's name from the manifest and throws the rest away then re-builds the list of files on the disk. This is due to the manifest not having the on-disk file locations, since in the chef-client case, that information is non-sensical.

Attributes

cookbook_name[R]
repo_paths[R]

Public Class Methods

new(manifest, *repo_paths) click to toggle source
# File lib/chef/cookbook/file_system_file_vendor.rb, line 36
def initialize(manifest, *repo_paths)
  @cookbook_name = manifest.name
  @repo_paths = repo_paths.flatten
  raise ArgumentError, "You must specify at least one repo path" if repo_paths.empty?
end

Public Instance Methods

cookbooks() click to toggle source
# File lib/chef/cookbook/file_system_file_vendor.rb, line 42
def cookbooks
  @cookbooks ||= Chef::CookbookLoader.new(repo_paths).load_cookbooks
end
get_filename(filename) click to toggle source

Implements abstract base's requirement. It looks in the Chef::Config.cookbook_path file hierarchy for the requested file.

# File lib/chef/cookbook/file_system_file_vendor.rb, line 49
def get_filename(filename)
  location = File.join(cookbooks[cookbook_name].root_dir, filename) if cookbooks.key?(cookbook_name)
  raise "File #{filename} does not exist for cookbook #{cookbook_name}" unless location && File.exist?(location)
  location
end