class GeoEngineer::Resources::AwsRoute53Record

Note: Currently, 'name' must be the fully qualified domain name.

Public Class Methods

_fetch_name(record, zone) click to toggle source
# File lib/geoengineer/resources/aws_route53_record.rb, line 67
def self._fetch_name(record, zone)
  # Need to trim the trailing dot, as well as convert ASCII 42 (Octal 52) to
  # the wildcard star. Route53 uses that for wildcard records.
  name = record[:name].downcase.gsub(/\.$/, '').gsub(/^\\052/, '*')
  zone_name = zone[:name].gsub(/\.$/, '')
  if name !~ /#{zone_name}$/
    name = name.empty? ? zone_name : "#{name}.#{zone_name}"
  end
  name
end
_fetch_records_for_zone(provider, zone) click to toggle source
# File lib/geoengineer/resources/aws_route53_record.rb, line 51
def self._fetch_records_for_zone(provider, zone)
  zone_id = zone[:id].gsub(%r{^/hostedzone/}, '')
  response = AwsClients.route53(provider).list_resource_record_sets({ hosted_zone_id: zone_id })

  records = []
  response.each do |page|
    records += page.resource_record_sets.map(&:to_h).map do |record|
      name = _fetch_name(record, zone)
      id = "#{zone_id}_#{name}_#{record[:type]}"
      record.merge({ fqdn: name, _terraform_id: id, _geo_id: id })
    end
  end

  records
end
_fetch_remote_resources(provider) click to toggle source
# File lib/geoengineer/resources/aws_route53_record.rb, line 43
def self._fetch_remote_resources(provider)
  _fetch_zones(provider).map { |zone| _fetch_records_for_zone(provider, zone) }.flatten.compact
end
_fetch_zones(provider) click to toggle source
# File lib/geoengineer/resources/aws_route53_record.rb, line 47
def self._fetch_zones(provider)
  AwsClients.route53(provider).list_hosted_zones.hosted_zones.map(&:to_h)
end

Public Instance Methods

fqdn() click to toggle source
# File lib/geoengineer/resources/aws_route53_record.rb, line 35
def fqdn
  self["name"].downcase
end
record_type(val = nil) click to toggle source
# File lib/geoengineer/resources/aws_route53_record.rb, line 31
def record_type(val = nil)
  val ? self["type"] = val : self["type"]
end
support_tags?() click to toggle source
# File lib/geoengineer/resources/aws_route53_record.rb, line 39
def support_tags?
  false
end
to_terraform_state() click to toggle source
# File lib/geoengineer/resources/aws_route53_record.rb, line 21
def to_terraform_state
  tfstate = super
  tfstate[:primary][:attributes] = {
    'id' => _terraform_id,
    'name' => name,
    'type' => record_type
  }
  tfstate
end