class Chef::FileCache
Public Class Methods
Create a full path to a given file in the cache. By default, also creates the path if it does not exist.
Parameters¶ ↑
- path
-
The path to create, relative to
file_cache_path
- create_if_missing
-
True by default - whether to create the path if it does not exist
Returns¶ ↑
String
-
The fully expanded path
# File lib/chef/file_cache.rb, line 222 def create_cache_path(path, create_if_missing = true) cache_dir = File.expand_path(File.join(file_cache_path, path)) if create_if_missing create_path(cache_dir) else cache_dir end end
Delete a file from the File Cache
Parameters¶ ↑
- path<String>
-
The path to the file you want to delete - should
be relative to file_cache_path
Returns¶ ↑
true
# File lib/chef/file_cache.rb, line 132 def delete(path) validate( { path: path, }, { path: { kind_of: String }, } ) cache_path = create_cache_path(path, false) if File.exist?(cache_path) File.unlink(cache_path) end true end
Find files in the cache by glob_pattern
Returns¶ ↑
String
-
An array of file cache keys matching the glob
-
# File lib/chef/file_cache.rb, line 160 def find(glob_pattern) keys = [] file_cache_dir = Chef::Util::PathHelper.escape_glob_dir(file_cache_path) first_filename = Dir[file_cache_dir].first # directory of the cache return keys unless first_filename # TODO: The usage of Regexp.escape and the match here is likely # vestigial, but since it's only getting called once per method, the # effort needed to confirm that its removal won't break something else # isn't worth it. A task for a brave soul ;-) regexp_pattern = /^(#{Regexp.escape(first_filename) + File::Separator}).+/ files = Dir[File.join(file_cache_dir, glob_pattern)] until files.empty? f = files.shift if File.file?(f) # We remove the cache directory from the string of each entry path_to_remove ||= f[regexp_pattern, 1] f.delete_prefix!(path_to_remove) keys << f end end keys end
Whether or not this file exists in the Cache
Parameters¶ ↑
- path
-
The path to the file you want to check - is relative
to file_cache_path
Returns¶ ↑
- True
-
If the file exists
- False
-
If it does not
# File lib/chef/file_cache.rb, line 194 def key?(path) validate( { path: path, }, { path: { kind_of: String }, } ) full_path = create_cache_path(path, false) if File.exist?(full_path) true else false end end
Read a file from the File Cache
Parameters¶ ↑
- path<String>
-
The path to the file you want to load - should
be relative to file_cache_path
- read<True/False>
-
Whether to return the file contents, or the path.
Defaults to true.
Returns¶ ↑
String
-
A string with the file contents, or the path to the file.
Raises¶ ↑
Chef::Exceptions::FileNotFound
-
If it cannot find the file in the cache
# File lib/chef/file_cache.rb, line 105 def load(path, read = true) validate( { path: path, }, { path: { kind_of: String }, } ) cache_path = create_cache_path(path, false) raise Chef::Exceptions::FileNotFound, "Cannot find #{cache_path} for #{path}!" unless File.exist?(cache_path) if read File.read(cache_path) else cache_path end end
Move a file into the cache. Useful with the REST raw file output.
Parameters¶ ↑
- file<String>
-
The path to the file you want in the cache
- path<String>
-
The relative name you want the new file to use
# File lib/chef/file_cache.rb, line 68 def move_to(file, path) validate( { file: file, path: path, }, { file: { kind_of: String }, path: { kind_of: String }, } ) file_path_array = File.split(path) file_name = file_path_array.pop if File.exist?(file) && File.writable?(file) FileUtils.mv( file, File.join(create_cache_path(File.join(file_path_array), true), file_name) ) else raise "Cannot move #{file} to #{path}!" end end
Write a file to the File Cache.
Parameters¶ ↑
- path<String>
-
The path to the file you want to put in the cache - should
be relative to file_cache_path
- contents<String>
-
A string with the contents you want written to the file
- perm<String>
-
Sets file permission bits. Permission bits are platform
dependent; on Unix systems, see open(2) for details.
Returns¶ ↑
true
# File lib/chef/file_cache.rb, line 42 def store(path, contents, perm = 0640) validate( { path: path, contents: contents, }, { path: { kind_of: String }, contents: { kind_of: String }, } ) file_path_array = File.split(path) file_name = file_path_array.pop cache_path = create_cache_path(File.join(file_path_array)) File.open(File.join(cache_path, file_name), "w", perm) do |io| io.print(contents) end true end
Private Class Methods
# File lib/chef/file_cache.rb, line 233 def file_cache_path Chef::Config[:file_cache_path] end