Class: Construqt::Flavour::Mikrotik::Interface

Inherits:
Object
  • Object
show all
Defined in:
lib/construqt/flavour/mikrotik/flavour_mikrotik_interface.rb

Class Method Summary collapse

Class Method Details

.build_config(host, iface) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/construqt/flavour/mikrotik/flavour_mikrotik_interface.rb', line 61

def self.build_config(host, iface)
  #name = File.join(host.name, "interface", "device")
  #ret = []
  #ret += self.clazz.build_config(host, iface||self)
  if !(iface.address.nil? || iface.address.ips.empty?)
    iface.address.ips.each do |ip|
      render_ip(host, iface, ip)
    end

    iface.address.routes.each do |rt|
      render_route(host, iface, rt)
    end
  end
  #ret
end

.render_ip(host, iface, ip) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/construqt/flavour/mikrotik/flavour_mikrotik_interface.rb', line 7

def self.render_ip(host, iface, ip)
  cfg = {
    "address" => ip,
    "interface" => iface.name
  }
  if ip.ipv6?
    default = {
      "address" => Schema.addrprefix.required,
      "interface" => Schema.identifier.required,
      "advertise" => Schema.boolean.default(false),
      "comment" => Schema.string.required.key
    }
    cfg['comment'] = "#{cfg['interface']}-#{cfg['address']}-CONSTRUQT"
    #puts ">>>>>>>> #{cfg.inspect}"
    host.result.render_mikrotik(default, cfg, "ipv6", "address")
  else
    default = {
      "address" => Schema.addrprefix.required,
      "interface" => Schema.identifier.required,
      "comment" => Schema.string.required.key
    }
    cfg['comment'] = "#{cfg['interface']}-#{cfg['address']}-CONSTRUQT"
    host.result.render_mikrotik(default, cfg, "ip", "address")
  end
end

.render_route(host, iface, rt) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/construqt/flavour/mikrotik/flavour_mikrotik_interface.rb', line 33

def self.render_route(host, iface, rt)
  throw "dst via mismatch #{rt}" if rt.type.nil? and !(rt.dst.ipv6? == rt.via.ipv6? or rt.dst.ipv4? == rt.via.ipv4?)
  cfg = {
    "dst-address" => rt.dst,
    "gateway" => rt.via,
  }
  if rt.type.nil?
    cfg['gateway'] = rt.via
  else
    cfg['type'] = rt.type
  end

  cfg['distance'] = rt.metric if rt.metric
  default = {
    "dst-address" => Schema.network.required.key(0),
    "gateway" => Schema.address,
    "type" => Schema.identifier,
    "distance" => Schema.int,
    "comment" => Schema.string.required.key(1)
  }
  cfg['comment'] = "#{cfg['dst-address']} via #{cfg['gateway']} CONSTRUQT"
  if rt.dst.ipv6?
    host.result.render_mikrotik(default, cfg, "ipv6", "route")
  else
    host.result.render_mikrotik(default, cfg, "ip", "route")
  end
end