Class: Chef::Cookbook::FileSystemFileVendor

Inherits:
FileVendor
  • Object
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 Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from FileVendor

create_from_manifest, fetch_from_disk, fetch_from_remote, initialization_options, vendor_class

Constructor Details

#initialize(manifest, *repo_paths) ⇒ FileSystemFileVendor

Returns a new instance of FileSystemFileVendor.

Raises:

  • (ArgumentError)


37
38
39
40
41
# File 'lib/chef/cookbook/file_system_file_vendor.rb', line 37

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 Attribute Details

#cookbook_nameObject (readonly)

Returns the value of attribute cookbook_name.



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

def cookbook_name
  @cookbook_name
end

#repo_pathsObject (readonly)

Returns the value of attribute repo_paths.



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

def repo_paths
  @repo_paths
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.



46
47
48
49
50
51
52
53
54
55
# File 'lib/chef/cookbook/file_system_file_vendor.rb', line 46

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