Created
December 22, 2020 10:35
-
-
Save opensourceame/c942b4b32637c65fa7291a53b28f19fe to your computer and use it in GitHub Desktop.
Import a DNS zone file into hover.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# import am DNS zone file into Hover | |
# | |
# first get your domain ID from here: | |
# https://www.hover.com/api/domains/yourdomain.com/dns/ | |
# | |
# install the required gems: | |
# | |
# gem install hover dns-zone | |
# | |
# then run like so: | |
# | |
# DOMAIN_ID=domain123 USERNAME=myusername PASSWORD=mypassword ZONE_FILE=mydomain.zone ./import_zone_to_hover.rb | |
# | |
require 'hover' | |
require 'dns/zone' | |
require 'logger' | |
def get_content(record) | |
case record.type | |
when 'A' | |
record.address | |
when 'CNAME' | |
record.domainname | |
when 'TXT' | |
record.text | |
when 'MX' | |
record.priority.to_s + ' ' + record.exchange | |
when 'NS' | |
record.nameserver | |
end | |
end | |
def record_exists?(record) | |
$existing_records.find {|r| | |
r['type'] == record.type && \ | |
r['name' ] == record.label && \ | |
r['content'] == get_content(record) | |
} | |
end | |
logger = Logger.new(STDOUT) | |
domain_id = ENV['DOMAIN_ID'] | |
api = Hover::Api.new(ENV['USERNAME'], ENV['PASSWORD']) | |
text = File.read(ENV['ZONE_FILE']) | |
zone = DNS::Zone.load(text) | |
$existing_records = api.domain_dns(domain_id) | |
logger.info "zone file contains #{zone.records.count} records" | |
zone.records.each do |record| | |
# when migrating to Hover they become the SOA for the domain | |
next if record.type == 'SOA' | |
if record_exists?(record) | |
logger.warn "skipping existing record: #{record.dump}" | |
else | |
logger.info "creating record: #{record.dump}" | |
api.create_record(domain_id, record.label, record.type, get_content(record)) | |
sleep 1 # workaround for Hover API closing connections | |
end | |
end | |
logger.info 'finished' | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment