Class: Construqt::Addresses::Address

Inherits:
Object
  • Object
show all
Defined in:
lib/construqt/addresses.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeAddress

Returns a new instance of Address.



38
39
40
41
42
43
44
45
46
# File 'lib/construqt/addresses.rb', line 38

def initialize()
  self.ips = []
  self.host = nil
  self.interface = nil
  self.routes = []
  self.tags = []
  @loopback = @dhcpv4 = @dhcpv6 = false
  @name = nil
end

Instance Attribute Details

#hostObject

Returns the value of attribute host.



22
23
24
# File 'lib/construqt/addresses.rb', line 22

def host
  @host
end

#interfaceObject

Returns the value of attribute interface.



23
24
25
# File 'lib/construqt/addresses.rb', line 23

def interface
  @interface
end

#ipsObject

Returns the value of attribute ips.



24
25
26
# File 'lib/construqt/addresses.rb', line 24

def ips
  @ips
end

#routesObject

@nameservers = []

def add_nameserver(ip)
  @nameservers << IPAddress.parse(ip)
  self
end


128
129
130
# File 'lib/construqt/addresses.rb', line 128

def routes
  @routes
end

#tagsObject

Returns the value of attribute tags.



25
26
27
# File 'lib/construqt/addresses.rb', line 25

def tags
  @tags
end

Instance Method Details

#add_ip(ip, region = "") ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/construqt/addresses.rb', line 103

def add_ip(ip, region = "")
  throw "please give a ip #{ip}" unless ip
  if ip
    #puts ">>>>> #{ip} #{ip.class.name}"
    if DHCPV4 == ip
      @dhcpv4 = true
    elsif DHCPV6 == ip
      @dhcpv6 = true
    elsif LOOOPBACK == ip
      @loopback = true
    else
      (unused, ip) = self.merge_tag(ip) { |ip| IPAddress.parse(ip) }
      self.ips << ip
    end
  end

  self
end

#add_route(dst, via, option = {}) ⇒ Object



135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/construqt/addresses.rb', line 135

def add_route(dst, via, option = {})
  #puts "DST => "+dst.class.name+":"+dst.to_s
  (unused, dst) = self.merge_tag(dst) { |dst| IPAddress.parse(dst) }
  metric = option['metric']
  if via == UNREACHABLE
    via = nil
    type = 'unreachable'
  else
    if via.nil?
      via = nil
    else
      via = IPAddress.parse(via)
      throw "different type #{dst} #{via}" unless dst.ipv4? == via.ipv4? && dst.ipv6? == via.ipv6?
    end

    type = nil
  end

  self.routes << OpenStruct.new("dst" => dst, "via" => via, "type" => type, "metric" => metric)
  self
end

#add_routes(addr_s, via, options = {}) ⇒ Object



129
130
131
132
133
# File 'lib/construqt/addresses.rb', line 129

def add_routes(addr_s, via, options = {})
  addrs = addr_s.kind_of?(Array) ? addr_s : [addr_s]
  addrs.each{|addr| addr.ips.each {|i| add_route(i.to_string, via, options) } }
  self
end

#dhcpv4?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/construqt/addresses.rb', line 26

def dhcpv4?
  @dhcpv4
end

#dhcpv6?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/construqt/addresses.rb', line 30

def dhcpv6?
  @dhcpv6
end

#first_ipv4Object



64
65
66
# File 'lib/construqt/addresses.rb', line 64

def first_ipv4
  v4s.first
end

#first_ipv6Object



68
69
70
# File 'lib/construqt/addresses.rb', line 68

def first_ipv6
  v6s.first
end

#loopback?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/construqt/addresses.rb', line 34

def loopback?
  @loopback
end

#match_network(ip) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/construqt/addresses.rb', line 48

def match_network(ip)
  if ip.ipv4?
    self.v4s.find{|nip| nip.include?(ip) }
  else
    self.v6s.find{|nip| nip.include?(ip) }
  end
end

#merge_tag(name, &block) ⇒ Object



72
73
74
# File 'lib/construqt/addresses.rb', line 72

def merge_tag(name, &block)
  Construqt::Tags.add(([name]+self.tags).join("#")) { |name| block.call(name) }
end

#nameObject



90
91
92
93
94
# File 'lib/construqt/addresses.rb', line 90

def name
  ret = self.name!
  throw "unreferenced address [#{self.ips.map{|i| i.to_string }}]" unless ret
  ret
end

#name!Object



96
97
98
99
100
101
# File 'lib/construqt/addresses.rb', line 96

def name!
  return @name if @name
  return "#{self.interface.name}-#{self.interface.host.name}" if self.interface
  return self.host.name if self.host
  nil
end

#name=(name) ⇒ Object



86
87
88
# File 'lib/construqt/addresses.rb', line 86

def name=(name)
  set_name(name)
end

#set_name(xname) ⇒ Object



81
82
83
84
# File 'lib/construqt/addresses.rb', line 81

def set_name(xname)
  (@name, obj) = self.merge_tag(xname) { |xname| self }
  self
end

#tag(tag) ⇒ Object



76
77
78
79
# File 'lib/construqt/addresses.rb', line 76

def tag(tag)
  self.tags << tag
  self
end

#to_sObject



157
158
159
# File 'lib/construqt/addresses.rb', line 157

def to_s
  "<Address:Address #{@name}=>#{self.ips.map{|i| i.to_s}.join(":")}>"
end

#v4sObject



60
61
62
# File 'lib/construqt/addresses.rb', line 60

def v4s
  self.ips.select{|ip| ip.ipv4? }
end

#v6sObject



56
57
58
# File 'lib/construqt/addresses.rb', line 56

def v6s
  self.ips.select{|ip| ip.ipv6? }
end