Class: Construqt::Addresses::Address
- Inherits:
-
Object
- Object
- Construqt::Addresses::Address
- Defined in:
- lib/construqt/addresses.rb
Instance Attribute Summary collapse
-
#host ⇒ Object
Returns the value of attribute host.
-
#interface ⇒ Object
Returns the value of attribute interface.
-
#ips ⇒ Object
Returns the value of attribute ips.
-
#routes ⇒ Object
@nameservers = [] def add_nameserver(ip) @nameservers << IPAddress.parse(ip) self end.
-
#tags ⇒ Object
Returns the value of attribute tags.
Instance Method Summary collapse
- #add_ip(ip, region = "") ⇒ Object
- #add_route(dst, via, option = {}) ⇒ Object
- #add_routes(addr_s, via, options = {}) ⇒ Object
- #dhcpv4? ⇒ Boolean
- #dhcpv6? ⇒ Boolean
- #first_ipv4 ⇒ Object
- #first_ipv6 ⇒ Object
-
#initialize ⇒ Address
constructor
A new instance of Address.
- #loopback? ⇒ Boolean
- #match_network(ip) ⇒ Object
- #merge_tag(name, &block) ⇒ Object
- #name ⇒ Object
- #name! ⇒ Object
- #name=(name) ⇒ Object
- #set_name(xname) ⇒ Object
- #tag(tag) ⇒ Object
- #to_s ⇒ Object
- #v4s ⇒ Object
- #v6s ⇒ Object
Constructor Details
#initialize ⇒ Address
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. = [] @loopback = @dhcpv4 = @dhcpv6 = false @name = nil end |
Instance Attribute Details
#host ⇒ Object
Returns the value of attribute host.
22 23 24 |
# File 'lib/construqt/addresses.rb', line 22 def host @host end |
#interface ⇒ Object
Returns the value of attribute interface.
23 24 25 |
# File 'lib/construqt/addresses.rb', line 23 def interface @interface end |
#ips ⇒ Object
Returns the value of attribute ips.
24 25 26 |
# File 'lib/construqt/addresses.rb', line 24 def ips @ips end |
#routes ⇒ Object
@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 |
#tags ⇒ Object
Returns the value of attribute tags.
25 26 27 |
# File 'lib/construqt/addresses.rb', line 25 def @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
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 |
# File 'lib/construqt/addresses.rb', line 144 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 134 135 136 137 138 139 140 141 142 |
# File 'lib/construqt/addresses.rb', line 129 def add_routes(addr_s, via, = {}) addrs = addr_s.kind_of?(Array) ? addr_s : [addr_s] addrs.each do |addr| if addr.respond_to? :ips ips = addr.ips if addr.respond_to? :ips else ips = [addr] end ips.each do |i| add_route(i.to_string, via, ) end end self end |
#dhcpv4? ⇒ Boolean
26 27 28 |
# File 'lib/construqt/addresses.rb', line 26 def dhcpv4? @dhcpv4 end |
#dhcpv6? ⇒ Boolean
30 31 32 |
# File 'lib/construqt/addresses.rb', line 30 def dhcpv6? @dhcpv6 end |
#first_ipv4 ⇒ Object
64 65 66 |
# File 'lib/construqt/addresses.rb', line 64 def first_ipv4 v4s.first end |
#first_ipv6 ⇒ Object
68 69 70 |
# File 'lib/construqt/addresses.rb', line 68 def first_ipv6 v6s.first end |
#loopback? ⇒ 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.).join("#")) { |name| block.call(name) } end |
#name ⇒ Object
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. << tag self end |
#to_s ⇒ Object
166 167 168 |
# File 'lib/construqt/addresses.rb', line 166 def to_s "<Address:Address #{@name}=>#{self.ips.map{|i| i.to_s}.join(":")}>" end |
#v4s ⇒ Object
60 61 62 |
# File 'lib/construqt/addresses.rb', line 60 def v4s self.ips.select{|ip| ip.ipv4? } end |
#v6s ⇒ Object
56 57 58 |
# File 'lib/construqt/addresses.rb', line 56 def v6s self.ips.select{|ip| ip.ipv6? } end |