Use a and a4 records from zonefile setting #2806

This commit is contained in:
Martin Lensment 2015-08-04 13:47:37 +03:00
parent 303e3150cd
commit 73b23c1efa
2 changed files with 20 additions and 65 deletions

View file

@ -478,7 +478,7 @@ namespace :import do
start = Time.zone.now.to_f start = Time.zone.now.to_f
puts '-----> Importing zones...' puts '-----> Importing zones...'
ns_records, a_records, a4_records = parse_zone_ns_data(1) ns_records, a_records, a4_records = parse_zone_ns_data('ee', 1)
ZonefileSetting.create!({ ZonefileSetting.create!({
origin: 'ee', origin: 'ee',
@ -495,7 +495,7 @@ namespace :import do
}) })
# edu.ee # edu.ee
ns_records, a_records, a4_records = parse_zone_ns_data(6) ns_records, a_records, a4_records = parse_zone_ns_data('edu.ee', 6)
ZonefileSetting.create!({ ZonefileSetting.create!({
origin: 'edu.ee', origin: 'edu.ee',
@ -512,7 +512,7 @@ namespace :import do
}) })
# aip.ee # aip.ee
ns_records, a_records, a4_records = parse_zone_ns_data(9) ns_records, a_records, a4_records = parse_zone_ns_data('aip.ee', 9)
ZonefileSetting.create!({ ZonefileSetting.create!({
origin: 'aip.ee', origin: 'aip.ee',
@ -529,7 +529,7 @@ namespace :import do
}) })
# org.ee # org.ee
ns_records, a_records, a4_records = parse_zone_ns_data(10) ns_records, a_records, a4_records = parse_zone_ns_data('org.ee', 10)
ZonefileSetting.create!({ ZonefileSetting.create!({
origin: 'org.ee', origin: 'org.ee',
@ -546,7 +546,7 @@ namespace :import do
}) })
# pri.ee # pri.ee
ns_records, a_records, a4_records = parse_zone_ns_data(2) ns_records, a_records, a4_records = parse_zone_ns_data('pri.ee', 2)
ZonefileSetting.create!({ ZonefileSetting.create!({
origin: 'pri.ee', origin: 'pri.ee',
@ -563,7 +563,7 @@ namespace :import do
}) })
# med.ee # med.ee
ns_records, a_records, a4_records = parse_zone_ns_data(3) ns_records, a_records, a4_records = parse_zone_ns_data('med.ee', 3)
ZonefileSetting.create!({ ZonefileSetting.create!({
origin: 'med.ee', origin: 'med.ee',
@ -580,7 +580,7 @@ namespace :import do
}) })
# fie.ee # fie.ee
ns_records, a_records, a4_records = parse_zone_ns_data(4) ns_records, a_records, a4_records = parse_zone_ns_data('fie.ee', 4)
ZonefileSetting.create!({ ZonefileSetting.create!({
origin: 'fie.ee', origin: 'fie.ee',
@ -597,7 +597,7 @@ namespace :import do
}) })
# com.ee # com.ee
ns_records, a_records, a4_records = parse_zone_ns_data(5) ns_records, a_records, a4_records = parse_zone_ns_data('com.ee', 5)
ZonefileSetting.create!({ ZonefileSetting.create!({
origin: 'com.ee', origin: 'com.ee',
@ -614,7 +614,7 @@ namespace :import do
}) })
# gov.ee # gov.ee
ns_records, a_records, a4_records = parse_zone_ns_data(7) ns_records, a_records, a4_records = parse_zone_ns_data('gov.ee', 7)
ZonefileSetting.create!({ ZonefileSetting.create!({
origin: 'gov.ee', origin: 'gov.ee',
@ -631,7 +631,7 @@ namespace :import do
}) })
# riik.ee # riik.ee
ns_records, a_records, a4_records = parse_zone_ns_data(8) ns_records, a_records, a4_records = parse_zone_ns_data('riik.ee', 8)
ZonefileSetting.create!({ ZonefileSetting.create!({
origin: 'riik.ee', origin: 'riik.ee',
@ -651,7 +651,7 @@ namespace :import do
end end
end end
def parse_zone_ns_data(zone) def parse_zone_ns_data(domain, zone)
ns_records = '' ns_records = ''
a_records = '' a_records = ''
a4_records = '' a4_records = ''
@ -659,7 +659,7 @@ def parse_zone_ns_data(zone)
ipv4 = x.addrs.select { |addr| addr.ipv4? }.first ipv4 = x.addrs.select { |addr| addr.ipv4? }.first
ipv6 = x.addrs.select { |addr| addr.ipv6? }.first ipv6 = x.addrs.select { |addr| addr.ipv6? }.first
ns_records += "ee. IN NS #{x.fqdn}.\n" ns_records += "#{domain}. IN NS #{x.fqdn}.\n"
a_records += "#{x.fqdn}. IN A #{ipv4}\n" if ipv4.present? a_records += "#{x.fqdn}. IN A #{ipv4}\n" if ipv4.present?
a4_records += "#{x.fqdn}. IN AAAA #{ipv6}\n" if ipv6.present? a4_records += "#{x.fqdn}. IN AAAA #{ipv6}\n" if ipv6.present?
end end

View file

@ -58,19 +58,9 @@ namespace :zonefile do
ret := concat(ret, tmp_var, chr(10), chr(10)); ret := concat(ret, tmp_var, chr(10), chr(10));
-- a glue records for origin nameservers -- origin a glue records
SELECT array_to_string( SELECT a_records FROM zonefile_settings zf WHERE i_origin = zf.origin INTO tmp_var;
array( ret := concat(ret, '; Zone A Records', chr(10), tmp_var, chr(10));
SELECT concat(ns.hostname, '. IN A ', ns.ipv4)
FROM nameservers ns
JOIN domains d ON d.id = ns.domain_id
WHERE d.name = i_origin
AND ns.hostname LIKE '%.' || d.name
AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
), chr(10)
) INTO tmp_var;
ret := concat(ret, '; Zone A Records', chr(10), tmp_var);
-- a glue records for other nameservers -- a glue records for other nameservers
SELECT array_to_string( SELECT array_to_string(
@ -82,43 +72,14 @@ namespace :zonefile do
AND ns.hostname LIKE '%.' || d.name AND ns.hostname LIKE '%.' || d.name
AND d.name <> i_origin AND d.name <> i_origin
AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> '' AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
AND NOT EXISTS ( -- filter out glue records that already appeared in origin glue recrods
SELECT 1 FROM nameservers nsi
JOIN domains di ON nsi.domain_id = di.id
WHERE di.name = i_origin
AND nsi.hostname = ns.hostname
)
), chr(10) ), chr(10)
) INTO tmp_var; ) INTO tmp_var;
-- TODO This is a possible subtitition to the previous query, stress testing is needed to see which is faster ret := concat(ret, tmp_var, chr(10), chr(10));
-- SELECT ns.* -- origin aaaa glue records
-- FROM nameservers ns SELECT a4_records FROM zonefile_settings zf WHERE i_origin = zf.origin INTO tmp_var;
-- JOIN domains d ON d.id = ns.domain_id ret := concat(ret, '; Zone AAAA Records', chr(10), tmp_var, chr(10));
-- WHERE d.name LIKE '%ee' AND d.name NOT LIKE '%pri.ee'
-- AND ns.hostname LIKE '%.' || d.name
-- AND d.name <> 'ee'
-- AND ns.ipv4 IS NOT NULL AND ns.ipv4 <> ''
-- AND ns.hostname NOT IN (
-- SELECT ns.hostname FROM domains d JOIN nameservers ns ON d.id = ns.domain_id WHERE d.name = 'ee'
-- )
ret := concat(ret, chr(10), tmp_var, chr(10), chr(10));
-- aaaa glue records for origin nameservers
SELECT array_to_string(
array(
SELECT concat(ns.hostname, '. IN AAAA ', ns.ipv6)
FROM nameservers ns
JOIN domains d ON d.id = ns.domain_id
WHERE d.name = i_origin
AND ns.hostname LIKE '%.' || d.name
AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> ''
), chr(10)
) INTO tmp_var;
ret := concat(ret, '; Zone AAAA Records', chr(10), tmp_var);
-- aaaa glue records for other nameservers -- aaaa glue records for other nameservers
SELECT array_to_string( SELECT array_to_string(
@ -130,16 +91,10 @@ namespace :zonefile do
AND ns.hostname LIKE '%.' || d.name AND ns.hostname LIKE '%.' || d.name
AND d.name <> i_origin AND d.name <> i_origin
AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> '' AND ns.ipv6 IS NOT NULL AND ns.ipv6 <> ''
AND NOT EXISTS ( -- filter out glue records that already appeared in origin glue recrods
SELECT 1 FROM nameservers nsi
JOIN domains di ON nsi.domain_id = di.id
WHERE di.name = i_origin
AND nsi.hostname = ns.hostname
)
), chr(10) ), chr(10)
) INTO tmp_var; ) INTO tmp_var;
ret := concat(ret, chr(10), tmp_var, chr(10), chr(10)); ret := concat(ret, tmp_var, chr(10), chr(10));
-- ds records -- ds records
SELECT array_to_string( SELECT array_to_string(