class Iface::Config

Represents a set of ConfigFiles for network interface configuration

Constants

Reserved_IP_Ranges

Public Class Methods

discover(pattern) click to toggle source
# File lib/iface/config.rb, line 11
def self.discover(pattern)
  new.tap do |config|
    Dir.glob(pattern) do |fullname|
      File.open(fullname) { |io| config.add(fullname, io) }
    end
  end
end
new() click to toggle source
# File lib/iface/config.rb, line 19
def initialize
  @files = {}
  @devices = {}
end

Public Instance Methods

[](device) click to toggle source

Returns the `PrimaryFile` for `device`

# File lib/iface/config.rb, line 43
def [](device)
  @devices[device]
end
add(filename, io) click to toggle source

Adds the given `filename` and `io` and returns self

# File lib/iface/config.rb, line 25
def add(filename, io)
  file = ConfigFile.create(filename, io)

  # add to files by type
  file_type = file.class.file_type_name
  if @files.key?(file_type)
    @files[file_type] << file
  else
    @files[file_type] = [file]
  end

  # add PrimaryFile to devices by device name
  @devices[file.device] = file if file.is_a?(PrimaryFile)

  self
end
primary() click to toggle source

Returns the `PrimaryFile` for the primary interface

There should be 0 or 1 of these; else it's an error.

# File lib/iface/config.rb, line 50
def primary
  result = @files[:primary].select do |file|
    if !file.static?
      true
    elsif file.ip_address.nil?
      false
    else
      ipaddr = IPAddr.new(file.ip_address)
      Reserved_IP_Ranges.none? { |range| range.include?(ipaddr) }
    end
  end

  case result.size
  when 0
    nil
  when 1
    result.first
  else
    raise "Expected 0 or 1 primary files; found #{result.size}"
  end
end