Sha256: 1066ca971fbc8e1426c09127b89281aac48489ad5615a3de9451a2ae0a2cfeb7

Contents?: true

Size: 1.2 KB

Versions: 5

Compression:

Stored size: 1.2 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)
        unless 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 }
        unless matching_output
          raise ValueNotFound, "Output #{name} not found in stack #{stack_name}"
        end

        matching_output.value
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
bora-1.7.4 lib/bora/resolver/cfn.rb
bora-1.7.3 lib/bora/resolver/cfn.rb
bora-1.7.2 lib/bora/resolver/cfn.rb
bora-1.7.1 lib/bora/resolver/cfn.rb
bora-1.7.0 lib/bora/resolver/cfn.rb