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)


36
37
38
39
40
# 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

Instance Attribute Details

#cookbook_nameObject (readonly)

Returns the value of attribute cookbook_name.



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

def cookbook_name
  @cookbook_name
end

#repo_pathsObject (readonly)

Returns the value of attribute repo_paths.



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

def repo_paths
  @repo_paths
end

Instance Method Details

#cookbooksObject



42
43
44
# 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) ⇒ Object

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



49
50
51
52
53
54
# 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