class SignalFlare

Public Class Methods

new(api_key, email) click to toggle source
# File lib/SignalFlare.rb, line 5
def initialize(api_key, email)
  @api_key = api_key
  @email = email
  @api = CloudFlare::connection(api_key, email)
end

Public Instance Methods

fetch_ip() click to toggle source
# File lib/SignalFlare.rb, line 43
def fetch_ip
  %x(dig +short myip.opendns.com @resolver1.opendns.com).strip
end
update_ip(hostname) click to toggle source
# File lib/SignalFlare.rb, line 11
def update_ip(hostname)
  split = hostname.partition(".")
  host = split[0]
  domain = split[2]

  record_id = nil
  dns_ip = nil
  external_ip = fetch_ip()

  @api.rec_load_all(domain)["response"]["recs"]["objs"].each do |record|
    if record["name"] == hostname
      record_id = record["rec_id"]
      dns_ip = record["content"]
      break
    end
  end

  if record_id == nil
    print "Suitable record for #{hostname} not found."
    return
  end

  if dns_ip == external_ip
    print "IP for #{hostname} has not changed. (#{external_ip})"
    return
  end

  @api.rec_edit(domain, "A", record_id, hostname, external_ip, 1)

  print "IP for #{hostname} has been updated from #{dns_ip} to #{external_ip}"
end