class Chef::FileCache

Public Class Methods

create_cache_path(path, create_if_missing = true) click to toggle source

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 206
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(path) click to toggle source

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 131
def delete(path)
  validate(
    {
      path: path,
    },
    {
      path: { kind_of: String },
    }
  )
  cache_path = create_cache_path(path, false)
  if File.exists?(cache_path)
    File.unlink(cache_path)
  end
  true
end
find(glob_pattern) click to toggle source

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 159
def find(glob_pattern)
  keys = Array.new
  Dir[File.join(Chef::Util::PathHelper.escape_glob_dir(file_cache_path), glob_pattern)].each do |f|
    if File.file?(f)
      keys << f[/^#{Regexp.escape(Dir[Chef::Util::PathHelper.escape_glob_dir(file_cache_path)].first) + File::Separator}(.+)/, 1]
    end
  end
  keys
end
has_key?(path)
Alias for: key?
key?(path) click to toggle source

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 178
def key?(path)
  validate(
    {
      path: path,
    },
    {
      path: { kind_of: String },
    }
  )
  full_path = create_cache_path(path, false)
  if File.exists?(full_path)
    true
  else
    false
  end
end
Also aliased as: has_key?
list() click to toggle source

List all the files in the Cache

Returns

Array

An array of files in the cache, suitable for use with load, delete and store

# File lib/chef/file_cache.rb, line 151
def list
  find("**#{File::Separator}*")
end
load(path, read = true) click to toggle source

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.exists?(cache_path)
  if read
    File.read(cache_path)
  else
    cache_path
  end
end
move_to(file, path) click to toggle source

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.exists?(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
store(path, contents, perm = 0640) click to toggle source

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_cache_path() click to toggle source
# File lib/chef/file_cache.rb, line 217
def file_cache_path
  Chef::Config[:file_cache_path]
end