\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7 \8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh \00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€ \00 $\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95 59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9 C/// File Manager

File Manager

Path: /opt/chef/embedded/lib/ruby/gems/2.7.0/gems/inspec-core-4.22.1/lib/inspec/

Viewing File: backend.rb

# copyright: 2015, Dominik Richter

require "train"
require "inspec/config"
require "inspec/version"
require "inspec/resource"
require "inspec/dsl" # for method_missing_resource

module Inspec
  class Backend
    attr_accessor :backend
    attr_accessor :profile

    # Creates a bunch of predefined resource methods based on the
    # current registry at the time. See #method_missing for what else
    # can happen.

    def self.add_resource_methods # TODO: remove
      Inspec::Resource.registry.each do |id, r|
        define_method id.to_sym do |*args|
          r.new(self, id.to_s, *args)
        end
      end
    end

    # Create the transport backend with aggregated resources.
    #
    # @param [Inspec::Config] config for the transport backend
    # @return [TransportBackend] enriched transport instance
    def self.create(config) # rubocop:disable Metrics/AbcSize
      train_credentials = config.unpack_train_credentials
      transport_name = Train.validate_backend(train_credentials)
      transport = Train.create(transport_name, train_credentials)
      if transport.nil?
        raise "Can't find transport backend '#{transport_name}'."
      end

      connection = transport.connection
      if connection.nil?
        raise "Can't connect to transport backend '#{transport_name}'."
      end

      # Set caching settings. We always want to enable caching for
      # the Mock transport for testing.
      if config[:backend_cache] || config[:backend] == :mock
        Inspec::Log.debug "Option backend_cache is enabled"
        connection.enable_cache(:file)
        connection.enable_cache(:command)
      elsif config[:debug_shell]
        Inspec::Log.debug "Option backend_cache is disabled"
        connection.disable_cache(:file)
        connection.disable_cache(:command)
      else
        Inspec::Log.debug "Option backend_cache is disabled"
        connection.disable_cache(:file)
        connection.disable_cache(:command)
      end

      Inspec::Backend.new(connection)
    rescue Train::ClientError => e
      raise "Client error, can't connect to '#{transport_name}' backend: #{e.message}"
    rescue Train::TransportError => e
      raise "Transport error, can't connect to '#{transport_name}' backend: #{e.message}"
    end

    def initialize(backend)
      self.backend = backend
      self.class.add_resource_methods
    end

    # Provide a shorthand to retrieve the inspec version from within a profile
    #
    # @return [String] inspec version
    def version
      Inspec::VERSION
    end

    # Determine whether the connection/transport is a local connection
    # Useful for resources to modify behavior as necessary, such as using
    # the Ruby stdlib for a better experience.
    def local_transport?
      return false unless defined?(Train::Transports::Local)

      backend.is_a?(Train::Transports::Local::Connection)
    end

    # Ruby internal for printing a nice name for this class
    def to_s
      "Inspec::Backend::Class"
    end

    # Ruby internal for pretty-printing a summary for this class
    def inspect
      "Inspec::Backend::Class @transport=#{backend.class}"
    end

    def method_missing(id, *args, &blk)
      Inspec::DSL.method_missing_resource(self, id, *args)
    rescue LoadError
      super
    end
  end
end