Class: Chef::Cookbook::FileSystemFileVendor

Inherits:
FileVendor show all
Defined in:
lib/chef/cookbook/file_system_file_vendor.rb

Overview

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.

Instance Method Summary collapse

Methods inherited from FileVendor

create_from_manifest, on_create

Constructor Details

#initialize(manifest, *repo_paths) ⇒ FileSystemFileVendor

Returns a new instance of FileSystemFileVendor

Raises:

  • (ArgumentError)

34
35
36
37
38
# File 'lib/chef/cookbook/file_system_file_vendor.rb', line 34

def initialize(manifest, *repo_paths)
  @cookbook_name = manifest[:cookbook_name]
  @repo_paths = repo_paths.flatten
  raise ArgumentError, "You must specify at least one repo path" if @repo_paths.empty?
end

Instance Method Details

#get_filename(filename) ⇒ Object

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


43
44
45
46
47
48
49
50
51
52
# File 'lib/chef/cookbook/file_system_file_vendor.rb', line 43

def get_filename(filename)
  location = @repo_paths.inject(nil) do |memo, basepath|
    candidate_location = File.join(basepath, @cookbook_name, filename)
    memo = candidate_location if File.exist?(candidate_location)
    memo
  end
  raise "File #{filename} does not exist for cookbook #{@cookbook_name}" unless location

  location
end