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