class DnsServices::Linode

Public Class Methods

new(opts={}) click to toggle source
# File lib/dnsign/dns_services/linode.rb, line 7
def initialize(opts={})
  @access_token = opts.fetch :access_token
end

Public Instance Methods

retrieve_ip(fqdn) click to toggle source
# File lib/dnsign/dns_services/linode.rb, line 24
def retrieve_ip(fqdn)
  record_name, domain_name = split_fqdn fqdn

  if record = fetch_record(domain_name, record_name)
    record.target
  end
end
update_ip(fqdn, ip) click to toggle source
# File lib/dnsign/dns_services/linode.rb, line 11
def update_ip(fqdn, ip)
  record_name, domain_name = split_fqdn fqdn

  if record = fetch_record(domain_name, record_name)
    response = update_record(record.domainid, record.resourceid, record_name, ip)
    handle_record_response response, ip
  else
    domain = fetch_domain(domain_name)
    response = create_record(domain.domainid, record_name, ip)
    handle_record_response response, ip
  end
end

Private Instance Methods

client() click to toggle source
# File lib/dnsign/dns_services/linode.rb, line 34
def client
  @client ||= ::Linode.new api_key: @access_token
end
create_record(domain_id, record_name, ip) click to toggle source
# File lib/dnsign/dns_services/linode.rb, line 55
def create_record(domain_id, record_name, ip)
  client.domain.resource.create DomainId: domain_id, Type: 'A', Name: record_name, Target: ip
end
fetch_domain(domain_name) click to toggle source
# File lib/dnsign/dns_services/linode.rb, line 43
def fetch_domain(domain_name)
  domain = client.domain.list.select {|d| d.domain == domain_name}.first
end
fetch_record(domain_name, record_name) click to toggle source
# File lib/dnsign/dns_services/linode.rb, line 47
def fetch_record(domain_name, record_name)
  domain = fetch_domain domain_name
  client
    .domain
    .resource.list(DomainId: domain.domainid)
    .select {|r| r.name == record_name}.first
end
handle_record_response(response, ip) click to toggle source
# File lib/dnsign/dns_services/linode.rb, line 38
def handle_record_response(response, ip)
  # Linode API only returns resourceid on success
  ip if response.resourceid
end
update_record(domain_id, record_id, record_name, ip) click to toggle source
# File lib/dnsign/dns_services/linode.rb, line 59
def update_record(domain_id, record_id, record_name, ip)
  client.domain.resource.update DomainId: domain_id, ResourceId: record_id, Name: record_name, Target: ip
end