class Unbind::View
Public Class Methods
expand_countries(clients)
click to toggle source
# File lib/unbind/view.rb, line 3 def self.expand_countries clients clients.flat_map { |i| if i.is_a?(Hash) && i.has_key?("countries") i["countries"].map { |c| "country_#{c.upcase}" } else i end } end
new(name, config)
click to toggle source
# File lib/unbind/view.rb, line 13 def initialize name, config raise "view must have a name" unless name.is_a?(String) && 0 < name.length raise "config should include clients and zones lists" unless config.is_a?(Hash) && [:clients, :zones].all? { |k| config.has_key?(k) && config[k].is_a?(Array) } @name = name @clients = config[:clients] @zones = config[:zones] end
Public Instance Methods
clients()
click to toggle source
# File lib/unbind/view.rb, line 31 def clients self.class.expand_countries(@clients) end
master()
click to toggle source
# File lib/unbind/view.rb, line 27 def master ["view \"#{@name}\" {", match_clients, servers, view_settings(:master), zones(:master), "};\n"].join("\n") end
slave()
click to toggle source
# File lib/unbind/view.rb, line 23 def slave ["view \"#{@name}\" {", match_clients, zones(:slave), "};\n"].join("\n") end
Private Instance Methods
file(zone)
click to toggle source
# File lib/unbind/view.rb, line 45 def file zone "file \"pri/#{zone.name}/#{@name}.zone\";" end
masters(zone)
click to toggle source
# File lib/unbind/view.rb, line 49 def masters zone "masters { %s key %s; };" % [zone.master, @name] end
match_clients()
click to toggle source
# File lib/unbind/view.rb, line 41 def match_clients "match-clients { key #{@name}; !tsig_keys; #{clients.join("; ")}; };" end
servers()
click to toggle source
# File lib/unbind/view.rb, line 53 def servers slaves.map { |slave| "server #{slave} { keys #{@name}; };" } end
slaves()
click to toggle source
# File lib/unbind/view.rb, line 37 def slaves @zones.reduce([]) { |a, e| a + e.slaves } end
view_settings(role)
click to toggle source
# File lib/unbind/view.rb, line 59 def view_settings role case role when :master "allow-transfer { keys #{@name}; };\nnotify yes;" end end
zones(role)
click to toggle source
# File lib/unbind/view.rb, line 66 def zones role @zones.flat_map { |zone| ([zone.name] + zone.aliases).flat_map { |zone_name| "zone \"#{zone_name}\" { type #{role}; #{:master == role ? file(zone) : masters(zone) } };" } } end