403Webshell
Server IP : 172.67.158.161  /  Your IP : 3.145.12.34
Web Server : LiteSpeed
System : Linux business53.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
User : giankuin ( 1871)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/info_service/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/info_service/class_information_service.rb
require_relative '../../puppet'
require_relative '../../puppet/pops'
require_relative '../../puppet/pops/evaluator/json_strict_literal_evaluator'

class Puppet::InfoService::ClassInformationService

  def initialize
    @file_to_result = {}
    @parser = Puppet::Pops::Parser::EvaluatingParser.new()
  end

  def classes_per_environment(env_file_hash)
    # In this version of puppet there is only one way to parse manifests, as feature switches per environment
    # are added or removed, this logic needs to change to compute the result per environment with the correct
    # feature flags in effect.

    unless env_file_hash.is_a?(Hash)
      raise ArgumentError, _('Given argument must be a Hash')
    end

    result = {}

    # for each environment
    #   for each file
    #     if file already processed, use last result or error
    #
    env_file_hash.each do |env, files|
      env_result = result[env] = {}
      files.each do |f|
        env_result[f] = result_of(f)
      end
    end
    result
  end

  private

  def type_parser
    Puppet::Pops::Types::TypeParser.singleton
  end

  def literal_evaluator
    @@literal_evaluator ||= Puppet::Pops::Evaluator::JsonStrictLiteralEvaluator.new
  end

  def result_of(f)
    entry =  @file_to_result[f]
    if entry.nil?
      @file_to_result[f] = entry = parse_file(f)
    end
    entry
  end

  def parse_file(f)
    return {:error => _("The file %{f} does not exist") % { f: f }} unless Puppet::FileSystem.exist?(f)

    begin
      parse_result = @parser.parse_file(f)
      {:classes =>
        parse_result.definitions.select {|d| d.is_a?(Puppet::Pops::Model::HostClassDefinition)}.map do |d|
          {:name   => d.name,
           :params => d.parameters.map {|p| extract_param(p) }
          }
        end
      }
    rescue StandardError => e
      {:error => e.message }
    end
  end

  def extract_param(p)
    extract_default(extract_type({:name => p.name}, p), p)
  end

  def extract_type(structure, p)
    return structure if p.type_expr.nil?
    structure[:type] = typeexpr_to_string(p.name, p.type_expr)
    structure
  end

  def extract_default(structure, p)
    value_expr = p.value
    return structure if value_expr.nil?
    default_value = value_as_literal(value_expr)
    structure[:default_literal] = default_value unless default_value.nil?
    structure[:default_source] = extract_value_source(value_expr)
    structure
  end

  def typeexpr_to_string(name, type_expr)
    begin
      type_parser.interpret_any(type_expr, nil).to_s
    rescue Puppet::ParseError => e
      raise Puppet::Error, "The parameter '$#{name}' is invalid: #{e.message}", e.backtrace
    end
  end

  def value_as_literal(value_expr)
    catch(:not_literal) do
      return literal_evaluator.literal(value_expr)
    end
    nil
  end

  # Extracts the source for the expression
  def extract_value_source(value_expr)
    value_expr.locator.extract_tree_text(value_expr)
  end
end

Youez - 2016 - github.com/yon3zu
LinuXploit