Class: Iface::ConfigFile

Inherits:
Object
  • Object
show all
Defined in:
lib/iface/config_file.rb

Overview

Base class for a network interface config file

When reading from an existing file, use ‘.create`. When creating a config programatically for writing to a file, instantiate one of the subclasses (e.g. `PrimaryFile.new`).

Direct Known Subclasses

CloneFile, LoopbackFile, PrimaryFile, RangeFile

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(filename, device, _range_num, _clone_num, vars) ⇒ ConfigFile

Returns a new instance of ConfigFile.



51
52
53
54
55
# File 'lib/iface/config_file.rb', line 51

def initialize(filename, device, _range_num, _clone_num, vars)
  @filename = filename
  @device = device
  @vars = vars
end

Instance Attribute Details

#deviceObject (readonly)

Returns the value of attribute device.



20
21
22
# File 'lib/iface/config_file.rb', line 20

def device
  @device
end

#filenameObject (readonly)

Returns the value of attribute filename.



20
21
22
# File 'lib/iface/config_file.rb', line 20

def filename
  @filename
end

#varsObject (readonly)

Returns the value of attribute vars.



20
21
22
# File 'lib/iface/config_file.rb', line 20

def vars
  @vars
end

Class Method Details

.create(filename, io) ⇒ Object

Raises:

  • (ArgumentError)


22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/iface/config_file.rb', line 22

def self.create(filename, io)
  fname = File.split(filename).last
  device, range_num, clone_num = parse_filename(fname)
  vars = ValueSet.new(io)

  FILE_TYPES.each do |klass|
    if klass.recognize?(device, range_num, clone_num, vars)
      return klass.new(filename, device, range_num, clone_num, vars)
    end
  end

  raise ArgumentError, "Input not recognized from file #{fname}: #{[device, range_num, clone_num, vars].inspect}"
end

.file_type_nameObject



47
48
49
# File 'lib/iface/config_file.rb', line 47

def self.file_type_name
  name.split('::').last[0..-5].decamelize.to_sym if name.match?(/File\Z/)
end

.parse_filename(filename) ⇒ Object



36
37
38
39
40
41
# File 'lib/iface/config_file.rb', line 36

def self.parse_filename(filename)
  match = filename.match(/\Aifcfg-(\w+)((-range(\d+))|(:(\d+)))?\Z/)
  return unless match
  device, _skip0, _skip1, range_num, _skip2, clone_num = match.captures
  [device, range_num&.to_i, clone_num&.to_i]
end

.recognize?(_device, _range_num, _clone_num, _vars) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/iface/config_file.rb', line 43

def self.recognize?(_device, _range_num, _clone_num, _vars)
  false
end

Instance Method Details

#include?(_ip) ⇒ Boolean

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


61
62
63
# File 'lib/iface/config_file.rb', line 61

def include?(_ip)
  raise NotImplementedError
end

#static?Boolean

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


57
58
59
# File 'lib/iface/config_file.rb', line 57

def static?
  raise NotImplementedError
end