class Splicer::Rackspace::Provider

Attributes

client[R]
config[R]
records[R]

Public Class Methods

new(config) click to toggle source
# File lib/splicer/rackspace/provider.rb, line 7
def initialize(config)
  @config = config
  @client = Fog::DNS.new(provider: 'Rackspace', rackspace_api_key: config.api_key, rackspace_username: config.username)
end

Public Instance Methods

create_record_in_zone(record, zone) click to toggle source
# File lib/splicer/rackspace/provider.rb, line 47
def create_record_in_zone(record, zone)
  Splicer.logger.debug "[SPLICER][RACKSPACE] #create_record_in_zone record=#{record.inspect} zone=#{zone.inspect}"
  domain = client.zones.get(zone.name) || client.zones.create(domain: zone.name, email: config.email)

  rax_record = domain.records.detect { |r| r.name == record.name && r.type == record.type }
  rax_record ? false : domain.records.create(record_payload(record, zone))
end
create_zone(zone) click to toggle source
# File lib/splicer/rackspace/provider.rb, line 12
def create_zone(zone)
  Splicer.logger.debug "[SPLICER][RACKSPACE] #create_zone zone=#{zone.inspect}"
  domain = client.zones.get(zone.name)

  if domain
    client.zones.create(domain: zone.name, email: config.email)
  else
    false
  end
end
delete_record_in_zone(record, zone) click to toggle source
# File lib/splicer/rackspace/provider.rb, line 29
def delete_record_in_zone(record, zone)
  Splicer.logger.debug "[SPLICER][RACKSPACE] #delete_record_in_zone record=#{record.inspect} zone=#{zone.inspect}"
  domain = client.zones.get(zone.name)
  return false unless domain

  rax_record = domain.records.detect { |r| r.name == record.name && r.type == record.type }
  rax_record ? rax_record.destroy : false
end
delete_zone(zone) click to toggle source
# File lib/splicer/rackspace/provider.rb, line 23
def delete_zone(zone)
  Splicer.logger.debug "[SPLICER][RACKSPACE] #delete_zone zone=#{zone.inspect}"
  domain = client.zones.get(zone.name)
  domain ? domain.destroy : false
end
get_records_for(zone) click to toggle source
# File lib/splicer/rackspace/provider.rb, line 55
def get_records_for(zone)
  Splicer.logger.debug "[SPLICER][RACKSPACE] #get_records_for zone=#{zone.inspect}"
  domain = client.zones.get(zone.name)
  return [] unless domain
  domains.records
end
update_record_in_zone(record, zone) click to toggle source
# File lib/splicer/rackspace/provider.rb, line 38
def update_record_in_zone(record, zone)
  Splicer.logger.debug "[SPLICER][RACKSPACE] #update_record_in_zone record=#{record.inspect} zone=#{zone.inspect}"
  domain = client.zones.get(zone.name)
  return false unless domain

  rax_record = domain.records.detect { |r| r.name == record.name && r.type == record.type }
  rax_record ? rax_record.update(record_payload(record, zone)) : false
end

Private Instance Methods

record_payload(record, zone) click to toggle source
# File lib/splicer/rackspace/provider.rb, line 64
def record_payload(record, zone)
  payload = {
    type: record.type,
    name: record.name ? "#{record.name}.#{zone.name}" : '',
    ttl: record.ttl
  }
  case record
    when Splicer::Records::ARecord
      payload.merge!({ value: record.ip })
    when Splicer::Records::AAAARecord
      payload.merge!({ value: record.ip })
    when Splicer::Records::CNAMERecord
      # Removes last period
      payload.merge!({ value: record.cname.sub(/\.\z/, '') })
    when Splicer::Records::MXRecord
      payload.merge!({ value: record.exchanger, mxLevel: record.priority })
    when Splicer::Records::NSRecord
      payload.merge!({ value: record.server })
    when Splicer::Records::PTRRecord
      payload.merge!({ value: record.host })
    when Splicer::Records::SRVRecord
      payload.merge!({
        value: record.target,
        weight: record.weight,
        priority: record.priority,
        port: record.port
      })
    when Splicer::Records::TXTRecord
      payload.merge!({
        value: record.text
      })
    else
      payload = {}
  end
  payload
end