class Terrafying::Components::Zone

Attributes

fqdn[R]
id[R]

Public Class Methods

create(fqdn, options = {}) click to toggle source
# File lib/terrafying/components/zone.rb, line 18
def self.create(fqdn, options = {})
  Zone.new.create fqdn, options
end
find(fqdn) click to toggle source
# File lib/terrafying/components/zone.rb, line 10
def self.find(fqdn)
  Zone.new.find fqdn
end
find_by_tag(tag) click to toggle source
# File lib/terrafying/components/zone.rb, line 14
def self.find_by_tag(tag)
  Zone.new.find_by_tag tag
end
new() click to toggle source
Calls superclass method
# File lib/terrafying/components/zone.rb, line 22
def initialize
  super
end

Public Instance Methods

add_alias(name, config) click to toggle source
# File lib/terrafying/components/zone.rb, line 97
def add_alias(name, config)
  add_alias_in(self, name, config)
end
add_alias_in(ctx, name, config) click to toggle source
# File lib/terrafying/components/zone.rb, line 101
def add_alias_in(ctx, name, config)
  fqdn = qualify(name)
  ctx.resource :aws_route53_record, tf_safe(fqdn),
               zone_id: @id,
               name: fqdn,
               type: 'A',
               alias: config
end
add_cname(name, *records) click to toggle source
# File lib/terrafying/components/zone.rb, line 126
def add_cname(name, *records)
  add_cname_in(self, name, *records)
end
add_cname_in(ctx, name, *records) click to toggle source
# File lib/terrafying/components/zone.rb, line 130
def add_cname_in(ctx, name, *records)
  fqdn = qualify(name)
  ident = fqdn.tr('.', '-')
  ctx.resource :aws_route53_record, ident,
               zone_id: @id,
               name: fqdn,
               type: 'CNAME',
               ttl: 300,
               records: records
end
add_record(name, records, options = {}) click to toggle source
# File lib/terrafying/components/zone.rb, line 80
def add_record(name, records, options = {})
  add_record_in(self, name, records, options)
end
add_record_in(ctx, name, records, options = {}) click to toggle source
# File lib/terrafying/components/zone.rb, line 84
def add_record_in(ctx, name, records, options = {})
  options = {
    type: 'A',
    ttl: 300,
    name: qualify(name)
  }.merge(options)

  ctx.resource :aws_route53_record, options[:resource_name] || tf_safe(options[:name]), {
    zone_id: @id,
    records: records
  }.merge(options.slice(:type, :ttl, :name, :records, :zone_id, :weight))
end
add_srv(name, service_name, port, type, hosts) click to toggle source
# File lib/terrafying/components/zone.rb, line 110
def add_srv(name, service_name, port, type, hosts)
  add_srv_in(self, name, service_name, port, type, hosts)
end
add_srv_in(ctx, name, service_name, port, type, hosts) click to toggle source
# File lib/terrafying/components/zone.rb, line 114
def add_srv_in(ctx, name, service_name, port, type, hosts)
  fqdn = qualify(name)
  ident = tf_safe(fqdn)

  ctx.resource :aws_route53_record, "srv-#{ident}-#{service_name}",
               zone_id: @id,
               name: "_#{service_name}._#{type}.#{fqdn}",
               type: 'SRV',
               ttl: '60',
               records: hosts.map { |host| "0 0 #{port} #{host}" }
end
create(fqdn, options = {}) click to toggle source
# File lib/terrafying/components/zone.rb, line 43
def create(fqdn, options = {})
  options = {
    tags: {}
  }.merge(options)

  ident = tf_safe(fqdn)

  zone_config = {
    name: fqdn,
    tags: options[:tags]
  }

  if options[:vpc]
    zone_config[:vpc] = {
      vpc_id: options[:vpc].id
    }

    ident = tf_safe("#{options[:vpc].name}-#{ident}")
  end

  @fqdn = fqdn
  @id = resource :aws_route53_zone, ident, zone_config

  if options[:parent_zone]
    ns = (0..3).map { |i| output_of(:aws_route53_zone, ident, "name_servers.#{i}") }

    resource :aws_route53_record, "#{ident}-ns",
             zone_id: options[:parent_zone].id,
             name: fqdn,
             type: 'NS',
             ttl: '30',
             records: ns
  end

  self
end
find(fqdn) click to toggle source
# File lib/terrafying/components/zone.rb, line 26
def find(fqdn)
  zone = aws.hosted_zone(fqdn)

  @id = zone.id
  @fqdn = fqdn

  self
end
find_by_tag(tag) click to toggle source
# File lib/terrafying/components/zone.rb, line 35
def find_by_tag(tag)
  zone = aws.hosted_zone_by_tag(tag)
  @id = zone.id
  @fqdn = zone.name.chomp('.')

  self
end
qualify(name) click to toggle source
# File lib/terrafying/components/zone.rb, line 141
def qualify(name)
  "#{name}.#{@fqdn}"
end