class Dns::CatalogZone::Provider::Knot
Public Class Methods
new(setting)
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 130 def initialize(setting) @setting = setting end
Public Instance Methods
make(catalog_zone)
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 133 def make(catalog_zone) @output = '' @templates = [] @acls = [] @remotes = [] @zones = [] global_config(catalog_zone) zones_config(catalog_zone) make_output end
make_output()
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 144 def make_output output_r 'acl:' @acls.each do |acl| output_r acl.print end output_r 'remote:' @remotes.each do |remote| output_r remote.print end output_r 'template:' @templates.each do |template| output_r template.print end output_r 'zone:' @zones.each do |zone| output_r zone.print end end
reconfig()
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 163 def reconfig system("#{control} reload") end
Private Instance Methods
add_acl(acl)
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 179 def add_acl(acl) @acls.push(acl) end
add_remote(remote)
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 175 def add_remote(remote) @remotes.push(remote) end
add_template(template)
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 171 def add_template(template) @templates.push(template) end
add_zone(zone)
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 183 def add_zone(zone) @zones.push(zone) end
control()
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 168 def control @setting['control'] || "knotc" end
global_config(catalog_zone)
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 195 def global_config(catalog_zone) template = Template.new(id: 'catalog-zone') add_template(template) catalog_zone.masters.each_pair do |label, master| output_master(master, template, label) end catalog_zone.notifies.each_pair do |label, notify| output_notify(notify, template, label) end catalog_zone.allow_transfers.each_pair do |_label, prefixes| output_prefixes(prefixes, template, 'allow-transfer') end end
mkl(prefix, label)
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 187 def mkl(prefix, label) label = "#{prefix}-#{label}" label.tr!('.', '-') label.gsub!(/-$/, 'global') label end
output_master(master, template, label)
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 210 def output_master(master, template, label) return if master.addresses.empty? # for request axfr remote = Remote.new(id: mkl('master', label), tsig: master.tsig) # for allow notify acl = Acl.new(id: mkl('notify', label), action: 'notify', key: master.tsig) master.addresses.each do |addr| remote.add_address(addr) acl.add_address(addr) end template.add_acl(mkl('notify', label)) template.add_master(mkl('master', label)) add_acl(acl) add_remote(remote) end
output_notify(notify, template, label)
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 227 def output_notify(notify, template, label) return if notify.addresses.empty? # for send notify remote = Remote.new(id: mkl('notify', label), tsig: notify.tsig) # for allow transfer acl = Acl.new(id: mkl('transfer', label), action: 'transfer', key: notify.tsig) notify.addresses.each do |addr| remote.add_address(addr) acl.add_address(addr) end template.add_notify(mkl('notify', label)) template.add_acl(mkl('transfer', label)) add_acl(acl) add_remote(remote) end
output_prefixes(prefixes, template, label)
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 243 def output_prefixes(prefixes, template, label) acl = Acl.new(id: mkl('acl', label), action: 'transfer') prefixes.prefixes.each do |prefix| acl.add_address("#{prefix.address}/#{prefix.prefix_length}") end add_acl(acl) template.add_acl(mkl('acl', label)) end
zones_config(catalog_zone)
click to toggle source
# File lib/dns/catalog_zone/provider/knot.rb, line 253 def zones_config(catalog_zone) catalog_zone.zones.each_pair do |_hash, zone| zone_path = zonepath(zone) storage = ::File.dirname(zone_path) file = ::File.basename(zone_path) kzone = Zone.new(domain: zone.zonename, storage: storage, file: file) add_zone(kzone) zone.masters.each_pair do |label, master| output_master(master, kzone, "#{zone.zonename}-#{label}") end zone.notifies.each_pair do |label, notify| output_notify(notify, kzone, "#{zone.zonename}-#{label}") end zone.allow_transfers.each_pair do |label, prefixes| output_prefixes(prefixes, kzone, "#{zone.zonename}-#{label}") end end end