Sha256: 1a8e76606a0c4937c592842aabb3f5084c2d0eb314a50683c1fbfe4d56ff41e2

Contents?: true

Size: 1.71 KB

Versions: 9

Compression:

Stored size: 1.71 KB

Contents

module Terraspace::Compiler
  class Expander
    extend Memoist
    delegate :expand, :expansion, to: :expander

    def initialize(mod, backend=nil)
      @mod, @backend = mod, backend
    end

    def expander
      expander_class.new(@mod)
    end
    memoize :expander

    # IE: TerraspacePluginAws::Interfaces::Expander
    def expander_class
      class_name = expander_class_name
      class_name ? class_name.constantize : Terraspace::Plugin::Expander::Generic
    rescue NameError => e
      logger.debug "#{e.class}: #{e.message}"
      Terraspace::Plugin::Expander::Generic
    end

    def expander_class_name
      plugin = Terraspace.config.autodetect.expander # contains plugin name. IE: aws, azurerm, google
      if plugin
        # early return for user override of autodetection
        return Terraspace::Plugin.klass("Expander", plugin: plugin) # can return nil
      end

      backend = @backend || parse_backend
      class_name = Terraspace::Plugin.klass("Expander", backend: backend) # can return nil
      unless class_name
        backend = plugin_backend
        class_name = Terraspace::Plugin.klass("Expander", backend: backend) # can return nil
      end
      class_name
    end

    # autodetect by parsing backend.tf or backend.rb
    def parse_backend
      Backend.new(@mod).detect
    end

    # autodetect by looking up loaded plugins
    def plugin_backend
      plugin = Terraspace::Autodetect.new.plugin # IE: aws, azurerm, google
      if plugin
        data = Terraspace::Plugin.meta[plugin]
        data[:backend] # IE: s3, azurerm, gcs
      end
    end

    class << self
      extend Memoist
      def autodetect(mod, opts={})
        new(mod, opts)
      end
      memoize :autodetect
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
terraspace-1.1.7 lib/terraspace/compiler/expander.rb
terraspace-1.1.6 lib/terraspace/compiler/expander.rb
terraspace-1.1.5 lib/terraspace/compiler/expander.rb
terraspace-1.1.4 lib/terraspace/compiler/expander.rb
terraspace-1.1.3 lib/terraspace/compiler/expander.rb
terraspace-1.1.2 lib/terraspace/compiler/expander.rb
terraspace-1.1.1 lib/terraspace/compiler/expander.rb
terraspace-1.1.0 lib/terraspace/compiler/expander.rb
terraspace-1.0.6 lib/terraspace/compiler/expander.rb