module Puppet::Parser::Files

Public Instance Methods

find_file(file, environment) click to toggle source

Find the path to the given file selector. Files can be selected in one of two ways:

* absolute path: the path is simply returned
* modulename/filename selector: a file is found in the file directory
  of the named module.

In the second case a nil is returned if there isn’t a file found. In the first case (absolute path), there is no existence check done and so the path will be returned even if there isn’t a file available.

@param template [String] the file selector @param environment [Puppet::Node::Environment] the environment in which to search @return [String, nil] the absolute path to the file or nil if there is no file found

@api private

# File lib/puppet/parser/files.rb, line 43
def find_file(file, environment)
  if Puppet::Util.absolute_path?(file)
    file
  else
    path, module_file = split_file_path(file)
    mod = environment.module(path)

    if module_file && mod
      mod.file(module_file)
    else
      nil
    end
  end
end
find_manifests_in_modules(pattern, environment) click to toggle source

Return a list of manifests as absolute filenames matching the given pattern.

@param pattern [String] A reference for a file in a module. It is the format “<modulename>/<file glob>” @param environment [Puppet::Node::Environment] the environment of modules

@return [Array(String, Array<String>)] the module name and the list of files found @api private

# File lib/puppet/parser/files.rb, line 15
def find_manifests_in_modules(pattern, environment)
  module_name, file_pattern = split_file_path(pattern)
  begin
    if mod = environment.module(module_name)
      return [mod.name, mod.match_manifests(file_pattern)]
    end
  rescue Puppet::Module::InvalidName
    # one of the modules being loaded might have an invalid name and so
    # looking for one might blow up since we load them lazily.
  end
  [nil, []]
end
find_template(template, environment) click to toggle source

Find the path to the given template selector. Templates can be selected in a number of ways:

* absolute path: the path is simply returned
* path relative to the templatepath setting: a file is found and the path
  is returned
* modulename/filename selector: a file is found in the template directory
  of the named module.

In the last two cases a nil is returned if there isn’t a file found. In the first case (absolute path), there is no existence check done and so the path will be returned even if there isn’t a file available.

@param template [String] the template selector @param environment [Puppet::Node::Environment] the environment in which to search @return [String, nil] the absolute path to the template file or nil if there is no file found

@api private

# File lib/puppet/parser/files.rb, line 75
def find_template(template, environment)
  if Puppet::Util.absolute_path?(template)
    template
  else
    in_templatepath = find_template_in_templatepath(template, environment)
    if in_templatepath
      in_templatepath
    else
      find_template_in_module(template, environment)
    end
  end
end
find_template_in_module(template, environment) click to toggle source

@api private

# File lib/puppet/parser/files.rb, line 106
def find_template_in_module(template, environment)
  path, file = split_file_path(template)
  mod = environment.module(path)

  if file && mod
    mod.template(file)
  else
    nil
  end
end
find_template_in_templatepath(template, environment) click to toggle source

Templatepaths are deprecated functionality, this will be going away in Puppet 4.

@api private

# File lib/puppet/parser/files.rb, line 92
def find_template_in_templatepath(template, environment)
  template_paths = templatepath(environment)
  if template_paths
    template_paths.collect do |path|
      File::join(path, template)
    end.find do |f|
      Puppet::FileSystem.exist?(f)
    end
  else
    nil
  end
end
split_file_path(path) click to toggle source

Split the path into the module and the rest of the path, or return nil if the path is empty or absolute (starts with a /). @api private

# File lib/puppet/parser/files.rb, line 130
def split_file_path(path)
  if path == "" || Puppet::Util.absolute_path?(path)
    nil
  else
    path.split(File::SEPARATOR, 2)
  end
end
templatepath(environment) click to toggle source

Return an array of paths by splitting the templatedir config parameter. @api private

# File lib/puppet/parser/files.rb, line 120
def templatepath(environment)
  dirs = Puppet.settings.value(:templatedir, environment.to_s).split(File::PATH_SEPARATOR)
  dirs.select do |p|
    File::directory?(p)
  end
end