Sha256: 7f586cfcdb3364e71cc5549f937f9d1b9f35ff5bd1515633cdc47eb93fd32928

Contents?: true

Size: 1.19 KB

Versions: 8

Compression:

Stored size: 1.19 KB

Contents

require 'bora/cfn/stack'

class Bora
  module Resolver
    class Cfn
      StackDoesNotExist = Class.new(StandardError)
      ValueNotFound = Class.new(StandardError)
      InvalidParameter = Class.new(StandardError)

      def initialize(stack)
        @stack = stack
        @stack_cache = {}
      end

      def resolve(uri)
        stack_name = uri.host
        section, name = uri.path.split("/").reject(&:empty?)
        if !stack_name || !section || !name || section != 'outputs'
          raise InvalidParameter, "Invalid parameter substitution: #{uri}"
        end

        stack_name, uri_region = stack_name.split(".")
        region = uri_region || @stack.region

        param_stack = @stack_cache[stack_name] || Bora::Cfn::Stack.new(stack_name, region)
        if !param_stack.exists?
          raise StackDoesNotExist, "Output #{name} not found in stack #{stack_name} as the stack does not exist"
        end

        outputs = param_stack.outputs || []
        matching_output = outputs.find { |output| output.key == name }
        if !matching_output
          raise ValueNotFound, "Output #{name} not found in stack #{stack_name}"
        end

        matching_output.value
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
bora-1.6.0 lib/bora/resolver/cfn.rb
bora-1.5.0 lib/bora/resolver/cfn.rb
bora-1.4.1 lib/bora/resolver/cfn.rb
bora-1.4.0 lib/bora/resolver/cfn.rb
bora-1.3.0 lib/bora/resolver/cfn.rb
bora-1.2.0 lib/bora/resolver/cfn.rb
bora-1.1.1 lib/bora/resolver/cfn.rb
bora-1.1.0 lib/bora/resolver/cfn.rb