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, io) ⇒ ConfigFile

Returns a new instance of ConfigFile.



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

def initialize(filename, device, _range_num, _clone_num, io)
  @filename = filename
  @device = device
  @vars = value_set_class.new(io)
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
# 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)

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

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

.file_type_nameObject



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

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

.parse_filename(filename) ⇒ Object



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

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) ⇒ Boolean

Returns:

  • (Boolean)


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

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

Instance Method Details

#include?(_ip) ⇒ Boolean

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


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

def include?(_ip)
  raise NotImplementedError
end

#static?Boolean

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


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

def static?
  raise NotImplementedError
end

#to_sObject



68
69
70
# File 'lib/iface/config_file.rb', line 68

def to_s
  @vars.to_s
end

#value_set_classObject



64
65
66
# File 'lib/iface/config_file.rb', line 64

def value_set_class
  ValueSet
end