From 73b23c1efacc8227916d63f150d07ddb05037688 Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Tue, 4 Aug 2015 13:47:37 +0300 Subject: [PATCH] Use a and a4 records from zonefile setting #2806 --- lib/tasks/import.rake | 24 ++++++++-------- lib/tasks/zonefile.rake | 61 ++++++----------------------------------- 2 files changed, 20 insertions(+), 65 deletions(-) diff --git a/lib/tasks/import.rake b/lib/tasks/import.rake index f8b7be5ce..7b3625ad2 100644 --- a/lib/tasks/import.rake +++ b/lib/tasks/import.rake @@ -478,7 +478,7 @@ namespace :import do start = Time.zone.now.to_f 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!({ origin: 'ee', @@ -495,7 +495,7 @@ namespace :import do }) # 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!({ origin: 'edu.ee', @@ -512,7 +512,7 @@ namespace :import do }) # 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!({ origin: 'aip.ee', @@ -529,7 +529,7 @@ namespace :import do }) # 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!({ origin: 'org.ee', @@ -546,7 +546,7 @@ namespace :import do }) # 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!({ origin: 'pri.ee', @@ -563,7 +563,7 @@ namespace :import do }) # 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!({ origin: 'med.ee', @@ -580,7 +580,7 @@ namespace :import do }) # 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!({ origin: 'fie.ee', @@ -597,7 +597,7 @@ namespace :import do }) # 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!({ origin: 'com.ee', @@ -614,7 +614,7 @@ namespace :import do }) # 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!({ origin: 'gov.ee', @@ -631,7 +631,7 @@ namespace :import do }) # 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!({ origin: 'riik.ee', @@ -651,7 +651,7 @@ namespace :import do end end -def parse_zone_ns_data(zone) +def parse_zone_ns_data(domain, zone) ns_records = '' a_records = '' a4_records = '' @@ -659,7 +659,7 @@ def parse_zone_ns_data(zone) ipv4 = x.addrs.select { |addr| addr.ipv4? }.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? a4_records += "#{x.fqdn}. IN AAAA #{ipv6}\n" if ipv6.present? end diff --git a/lib/tasks/zonefile.rake b/lib/tasks/zonefile.rake index d3d8f1f46..4aaeaf50e 100644 --- a/lib/tasks/zonefile.rake +++ b/lib/tasks/zonefile.rake @@ -58,19 +58,9 @@ namespace :zonefile do ret := concat(ret, tmp_var, chr(10), chr(10)); - -- a glue records for origin nameservers - SELECT array_to_string( - array( - 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); + -- origin a glue records + SELECT a_records FROM zonefile_settings zf WHERE i_origin = zf.origin INTO tmp_var; + ret := concat(ret, '; Zone A Records', chr(10), tmp_var, chr(10)); -- a glue records for other nameservers SELECT array_to_string( @@ -82,43 +72,14 @@ namespace :zonefile do AND ns.hostname LIKE '%.' || d.name AND d.name <> i_origin 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) ) 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.* - -- FROM nameservers ns - -- JOIN domains d ON d.id = ns.domain_id - -- 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); + -- origin aaaa glue records + SELECT a4_records FROM zonefile_settings zf WHERE i_origin = zf.origin INTO tmp_var; + ret := concat(ret, '; Zone AAAA Records', chr(10), tmp_var, chr(10)); -- aaaa glue records for other nameservers SELECT array_to_string( @@ -130,16 +91,10 @@ namespace :zonefile do AND ns.hostname LIKE '%.' || d.name AND d.name <> i_origin 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) ) 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 SELECT array_to_string(