Skip to content

Instantly share code, notes, and snippets.

@treydock
Last active March 3, 2021 03:04
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save treydock/9220796 to your computer and use it in GitHub Desktop.
Save treydock/9220796 to your computer and use it in GitHub Desktop.
foreman_dns_mass_recreate.rb
#!/usr/share/foreman/script/rails runner -e production
Host.all.each do |host|
next unless host.dns?
print "#{host}..."
dns_a_record = host.dns_a_record
print "#{dns_a_record}..."
if dns_a_record.valid?
puts "VALID"
elsif dns_a_record.conflicting?
puts "CONFLICT"
warn "not going to do anything as we found conflicting dns A records"
warn "we wanted #{dns_a_record.attrs.inspect} but found: #{dns_a_record.conflicts.map{|c| c.attrs.inspect}.join(', ')}"
else
print "missing..recreating.."
dns_a_record.create
puts "DONE"
end
next unless host.reverse_dns?
print "#{host}..."
dns_ptr_record = host.dns_ptr_record
print "#{dns_ptr_record}..."
if dns_ptr_record.valid?
puts "VALID"
elsif dns_ptr_record.conflicting?
puts "CONFLICT"
warn "not going to do anything as we found conflicting dns PTR records"
warn "we wanted #{dns_ptr_record.attrs.inspect} but found: #{dns_ptr_record.conflicts.map{|c| c.attrs.inspect}.join(', ')}"
else
print "missing..recreating.."
dns_ptr_record.create
puts "DONE"
end
host.interfaces.each do |interface|
next unless interface.dns?
dns_a_record = interface.dns_a_record
# Workaround for http://projects.theforeman.org/issues/2750
dns_a_record.hostname = "#{interface.name}.#{interface.domain.name}"
print "#{dns_a_record}..."
if dns_a_record.valid?
puts "VALID"
elsif dns_a_record.conflicting?
puts "CONFLICT"
warn "not going to do anything as we found conflicting dns A records"
warn "we wanted #{dns_a_record.attrs.inspect} but found: #{dns_a_record.conflicts.map{|c| c.attrs.inspect}.join(', ')}"
else
print "missing..recreating.."
dns_a_record.create
puts "DONE"
end
next unless interface.reverse_dns?
dns_ptr_record = interface.dns_ptr_record
# Workaround for http://projects.theforeman.org/issues/2750
dns_ptr_record.hostname = "#{interface.name}.#{interface.domain.name}"
print "#{dns_ptr_record}..."
if dns_ptr_record.valid?
puts "VALID"
elsif dns_ptr_record.conflicting?
puts "CONFLICT"
warn "not going to do anything as we found conflicting dns PTR records"
warn "we wanted #{dns_ptr_record.attrs.inspect} but found: #{dns_ptr_record.conflicts.map{|c| c.attrs.inspect}.join(', ')}"
else
print "missing..recreating.."
dns_ptr_record.create
puts "DONE"
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment