Sha256: 2b8fe908daa143a25561fba661e26b459b500d0f805c6554722926e5d0a19c9e

Contents?: true

Size: 1.26 KB

Versions: 5

Compression:

Stored size: 1.26 KB

Contents

require 'aws-sdk'
require 'bora/cfn/stack'

class Bora
  module Resolver
    class Hostedzone
      InvalidParameterError = Class.new(StandardError)
      NotFoundError = Class.new(StandardError)
      MultipleMatchesError = Class.new(StandardError)

      def initialize(stack); end

      def resolve(uri)
        zone_name = uri.host
        zone_type = uri.path[1..-1]
        raise InvalidParameterError, "Invalid hostedzone parameter #{uri}" unless zone_name
        zone_name += '.'
        route53 = Aws::Route53::Client.new
        res = route53.list_hosted_zones
        zones = res.hosted_zones.select do |hz|
          hz.name == zone_name && zone_type_matches(zone_type, hz.config.private_zone)
        end
        raise NotFoundError, "Could not find hosted zone #{uri}" if !zones || zones.empty?
        raise MultipleMatchesError, "Multiple candidates for hosted zone #{uri}. Use public/private discrimiator." if zones.size > 1
        zones[0].id.split('/')[-1]
      end

      private

      def zone_type_matches(required_zone_type, is_private_zone)
        return true if !required_zone_type || required_zone_type.empty?
        (required_zone_type == 'private' && is_private_zone) || (required_zone_type == 'public' && !is_private_zone)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

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