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