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.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

#cookbooksObject


43
44
45
# File 'lib/chef/cookbook/file_system_file_vendor.rb', line 43

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.


50
51
52
53
54
# File 'lib/chef/cookbook/file_system_file_vendor.rb', line 50

def get_filename(filename)
  location = File.join(cookbooks[cookbook_name].root_dir, filename) if cookbooks.has_key?(cookbook_name)
  raise "File #{filename} does not exist for cookbook #{cookbook_name}" unless location && File.exist?(location)
  location
end