class CloudFlare::DynamicDNS::Updater

Update DNS zone / domain information in cloudflare with the new IP address if it has changed.

Attributes

email[R]
hostname[R]
ip[R]
key[R]
zone[R]

Public Class Methods

new(key:, email:, zone:, hostname:, ipv4:) click to toggle source

@param [String] key @param [String] email @param [String] zone @param [String] hostname @param [String] ipv4

# File lib/cloud_flare/dynamic_dns/updater.rb, line 14
def initialize(key:, email:, zone:, hostname:, ipv4:)
  @key = key
  @email = email
  @zone = zone
  @hostname = hostname
  @ip = ipv4
end

Public Instance Methods

update() click to toggle source

Update Cloudflare with the new IP addr

# File lib/cloud_flare/dynamic_dns/updater.rb, line 23
def update
  current_config
  if changed?
    logger.info "=> updating #{dns_record.record[:name]} to #{ip}"
    dns_record.update_content(ip)
  else
    logger.info '=> No changes detected.'
  end
end

Private Instance Methods

changed?() click to toggle source
# File lib/cloud_flare/dynamic_dns/updater.rb, line 40
def changed?
  ip != dns_record.record[:content]
end
connection() click to toggle source
# File lib/cloud_flare/dynamic_dns/updater.rb, line 52
def connection
  @connection ||= Cloudflare.connect(key: key, email: email)
end
current_config() click to toggle source
# File lib/cloud_flare/dynamic_dns/updater.rb, line 35
def current_config
  logger.info "=> #{dns_record.record[:name]} currently pointing to -> #{dns_record.record[:content]}"
  logger.info "=> current public IP of your network is #{ip}."
end
dns_record() click to toggle source
# File lib/cloud_flare/dynamic_dns/updater.rb, line 44
def dns_record
  @dns_record ||= dns_zone.dns_records.find_by_name(hostname)
end
dns_zone() click to toggle source
# File lib/cloud_flare/dynamic_dns/updater.rb, line 48
def dns_zone
  @dns_zone ||= connection.zones.find_by_name(zone)
end
logger() click to toggle source
# File lib/cloud_flare/dynamic_dns/updater.rb, line 56
def logger
  Logger.new(STDOUT)
end