Sha256: bce2628a1abce0a63c039c6ee0f871c2cbb3e7a6567c000892d9a8b8580fcd1a

Contents?: true

Size: 1.56 KB

Versions: 2

Compression:

Stored size: 1.56 KB

Contents

module Lono::Builder::Dsl::Helpers
  module Stack
    extend Memoist
    include Lono::AwsServices

    def stack_output(name)
      stack_name, key = name.split(".")
      stack_name = stack_name(stack_name)
      resp = describe_stacks(stack_name: stack_name)
      stack = resp.stacks.first
      if stack
        o = stack.outputs.detect { |h| h.output_key == key }
      end

      if o
        o.output_value
      else
        logger.info "WARN2: NOT FOUND: output #{key} for stack #{stack_name}"
        nil
      end
    end

    def stack_resource(name)
      stack_name, logical_id = name.split(".")
      stack_name = stack_name(stack_name)
      resp = describe_stack_resources(stack_name: stack_name)
      resources = resp.stack_resources
      resource = resources.find { |r| r.logical_resource_id == logical_id }
      if resource
        resource.physical_resource_id
      else
        logger.info "WARN: NOT FOUND: logical_id #{logical_id} for stack #{stack_name}"
        nil
      end
    end

    def stack_name(blueprint)
      return blueprint unless Lono.config.names.output.expand
      names = Lono::Names.new(blueprint: blueprint)
      # explicit expansion pattern provided by user
      pattern = blueprint.include?(':') ? blueprint : Lono.config.names.output.stack
      names.expansion(pattern)
    end

  private
    def describe_stacks(options={})
      cfn.describe_stacks(options)
    end
    memoize :describe_stacks

    def describe_stack_resources(options={})
      cfn.describe_stack_resources(options)
    end
    memoize :describe_stack_resources
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
lono-8.0.0.pre.rc3 lib/lono/builder/dsl/helpers/stack.rb
lono-8.0.0.pre.rc2 lib/lono/builder/dsl/helpers/stack.rb