class Hyrb::Tasks::Rackspace::CreateDNSRecord

Public Instance Methods

run(env) click to toggle source
# File lib/hyrb/tasks/rackspace.rb, line 60
def run(env)
  record_type = (IPAddr.new(env.environment.host) rescue false) ? 'A' : 'CNAME'

  # assume zone is going to be x.com
  proj_zone = env.environment.domain.split('.')[-2..-1].join('.')

  zone = env.rackspace_dns_zones.find { |z| z.domain == proj_zone }
  zone ||= env.rackspace_dns_client.zones.create({
    domain: proj_zone,
    email: env.defaults.admin_email,
  })

  record = zone.records.find do |r|
    r.name == env.environment.domain && r.type == record_type
  end

  if record
    say "Record exists: '#{record.type} #{record.name} #{record.value} (#{record.ttl})'", :yellow
  else
    record = zone.records.create({
      name: env.environment.domain,
      value: env.environment.host,
      type: record_type,
      ttl: 300,
    })
    say "Created record: '#{record.type} #{record.name} #{record.value} (#{record.ttl})'", :green
  end
  env.environment.has_dns_record = true
  env.environment.save!
  beep
end