Sha256: 4dc0ac97ef81c9df1e1a025110c544bed305cd8689ee0c2db727a4f9babc97fc

Contents?: true

Size: 1.97 KB

Versions: 2

Compression:

Stored size: 1.97 KB

Contents

module Awspec::Type
  class Route53HostedZone < Base
    attr_reader :hosted_zone, :resource_record_sets

    def initialize(id)
      super
      @client = Aws::Route53::Client.new
      @hosted_zone = find_hosted_zone(id)
      @id = @hosted_zone[:id] if @hosted_zone
      return unless @id
      res = @client.list_resource_record_sets({
                                                hosted_zone_id: @id
                                              })
      @resource_record_sets = res.resource_record_sets
    end

    def has_record_set?(name, type, value, options = {})
      ret = @resource_record_sets.find do |record_set|
        next if record_set.type != type.upcase
        options[:ttl] = record_set.ttl unless options[:ttl]
        if !record_set.resource_records.empty?
          v = record_set.resource_records.map { |r| r.value }.join("\n")
          record_set.name == name && \
          value == v && \
          record_set.ttl == options[:ttl]
        else
          # ALIAS
          record_set.name == name && \
          record_set.alias_target.dns_name == options[:alias_dns_name] && \
          record_set.alias_target.hosted_zone_id == options[:alias_hosted_zone_id]
        end
      end
    end

    def find_hosted_zone(id)
      hosted_zones = {}
      marker = nil
      loop do
        res = @client.list_hosted_zones({
                                          marker: marker
                                        })
        marker = res.marker
        break if res.hosted_zones.empty?
        res.hosted_zones.each do |hosted_zone|
          hosted_zones[hosted_zone[:name]] = hosted_zones
          if hosted_zone[:name] == id || hosted_zone[:id] == '/hostedzone/' + id || hosted_zone[:id] == id
            return hosted_zone
          end
        end

        break if marker.nil?
      end
    end

    def method_missing(name)
      describe = name.to_s
      if @hosted_zone.key?(describe)
        @hosted_zone[describe]
      else
        super
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
awspec-0.1.1 lib/awspec/type/route53_hosted_zone.rb
awspec-0.1.0 lib/awspec/type/route53_hosted_zone.rb