module PuppetDebugger::Support::Scope

Public Instance Methods

catalog() click to toggle source
# File lib/puppet-debugger/support/scope.rb, line 11
def catalog
  @catalog || scope.compiler.catalog
end
create_scope() click to toggle source

@return [Puppet::Pops::Scope] - returns a puppet scope object

# File lib/puppet-debugger/support/scope.rb, line 46
def create_scope
  do_initialize
  begin
    # creates a new compiler for each scope
    scope = Puppet::Parser::Scope.new(compiler)
    # creates a node class
    scope.source = Puppet::Resource::Type.new(:node, node.name)
    scope.parent = compiler.topscope
    # compiling will load all the facts into the scope
    # without this step facts will not get resolved
    scope.compiler.compile # this will load everything into the scope
  rescue StandardError => e
    err = parse_error(e)
    raise err
  end
  scope
end
get_catalog_text(catalog) click to toggle source
# File lib/puppet-debugger/support/scope.rb, line 15
def get_catalog_text(catalog)
  return nil unless catalog

  Puppet::FileSystem.read(catalog, encoding: 'utf-8')
end
scope() click to toggle source

@return [Puppet::Pops::Scope] - returns a puppet scope object

# File lib/puppet-debugger/support/scope.rb, line 41
def scope
  @scope ||= create_scope
end
scope_vars() click to toggle source

@return [Hash] - returns a hash of variables that are currently in scope

# File lib/puppet-debugger/support/scope.rb, line 65
def scope_vars
  vars = scope.to_hash.delete_if { |key, _value| node.facts.values.key?(key.to_sym) }
  vars['facts'] = 'removed by the puppet-debugger'
end
set_catalog(catalog_file) click to toggle source
# File lib/puppet-debugger/support/scope.rb, line 21
def set_catalog(catalog_file)
  return unless catalog_file

  catalog_text = get_catalog_text(catalog_file)
  scope # required
  Puppet.override({ current_environment: environment }, _('For puppet debugger')) do
    format = Puppet::Resource::Catalog.default_format
    begin
      c = Puppet::Resource::Catalog.convert_from(format, catalog_text)
    rescue StandardError => e
      raise Puppet::Error, format(_('Could not deserialize catalog from %{format}: %{detail}'), format: format, detail: e), e.backtrace
    end
    # Resolve all deferred values and replace them / mutate the catalog
    # Puppet 6 only
    Puppet::Pops::Evaluator::DeferredResolver.resolve_and_replace(node.facts, c) if Gem::Version.new(Puppet.version) >= Gem::Version.new('6.0.0')
    @catalog = c
  end
end
set_scope(value) click to toggle source

@param [Puppet::Pops::Scope] - Scope object or nil

# File lib/puppet-debugger/support/scope.rb, line 7
def set_scope(value)
  @scope = value
end