Class: QemuToolkit::Vnic
- Inherits:
-
Object
- Object
- QemuToolkit::Vnic
- Defined in:
- lib/qemu-toolkit/vnic.rb
Instance Attribute Summary collapse
-
#interface ⇒ Object
readonly
Returns the value of attribute interface.
-
#macaddr ⇒ Object
readonly
Returns the value of attribute macaddr.
-
#number ⇒ Object
readonly
Returns the value of attribute number.
-
#over ⇒ Object
readonly
Returns the value of attribute over.
-
#prefix ⇒ Object
readonly
Returns the value of attribute prefix.
-
#vlan ⇒ Object
readonly
Returns the value of attribute vlan.
Class Method Summary collapse
Instance Method Summary collapse
- #==(other) ⇒ Object
- #create(backend) ⇒ Object
-
#initialize(prefix, number, over, macaddr = nil) ⇒ Vnic
constructor
A new instance of Vnic.
- #mac_address? ⇒ Boolean
- #to_s ⇒ Object
- #vlan_tagged? ⇒ Boolean
- #vnic_name ⇒ Object
Constructor Details
#initialize(prefix, number, over, macaddr = nil) ⇒ Vnic
Returns a new instance of Vnic.
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/qemu-toolkit/vnic.rb', line 45 def initialize(prefix, number, over, macaddr=nil) @prefix, @number, @over = prefix, number, over @macaddr = macaddr && Network::MacAddress.new(macaddr) if vlan_tagged? @interface, @vlan = @over.split(':') else @interface = @over @vlan = nil end end |
Instance Attribute Details
#interface ⇒ Object (readonly)
Returns the value of attribute interface.
62 63 64 |
# File 'lib/qemu-toolkit/vnic.rb', line 62 def interface @interface end |
#macaddr ⇒ Object (readonly)
Returns the value of attribute macaddr.
60 61 62 |
# File 'lib/qemu-toolkit/vnic.rb', line 60 def macaddr @macaddr end |
#number ⇒ Object (readonly)
Returns the value of attribute number.
58 59 60 |
# File 'lib/qemu-toolkit/vnic.rb', line 58 def number @number end |
#over ⇒ Object (readonly)
Returns the value of attribute over.
59 60 61 |
# File 'lib/qemu-toolkit/vnic.rb', line 59 def over @over end |
#prefix ⇒ Object (readonly)
Returns the value of attribute prefix.
57 58 59 |
# File 'lib/qemu-toolkit/vnic.rb', line 57 def prefix @prefix end |
#vlan ⇒ Object (readonly)
Returns the value of attribute vlan.
63 64 65 |
# File 'lib/qemu-toolkit/vnic.rb', line 63 def vlan @vlan end |
Class Method Details
.create(prefix, over, backend, macaddr = nil) ⇒ Object
34 35 36 37 38 39 40 41 |
# File 'lib/qemu-toolkit/vnic.rb', line 34 def create(prefix, over, backend, macaddr=nil) # Retrieve links that exist for this prefix and this over interface vnics = for_prefix(prefix, backend) next_vnic_number = (vnics.map(&:number).max || 0) + 1 new(prefix, next_vnic_number, over, macaddr).tap { |o| o.create(backend) } end |
.for_prefix(prefix, background) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/qemu-toolkit/vnic.rb', line 9 def for_prefix(prefix, background) vnics = VnicCollection.new links = background.dladm 'show-vnic', '-po link,over,vid,macaddress' re_separator = /(?<!\\):/ links.each_line do |line| next unless line.start_with?(prefix) link, over, vid, macaddr = line.chomp.split(re_separator) # macaddr being the only place escaping takes place, unescape it # by replacing \: -> : macaddr.gsub!(/\\:/, ':') # Assumes that vid 0 is always the 'no vlan' VLAN over = "#{over}:#{vid}" if vid.to_i > 0 if md=link.match(/^(?<vm>.*)_(?<link_no>\d+)$/) vnics << Vnic.new(md[:vm], Integer(md[:link_no]), over, macaddr) end end vnics end |
Instance Method Details
#==(other) ⇒ Object
65 66 67 68 69 70 |
# File 'lib/qemu-toolkit/vnic.rb', line 65 def ==(other) self.prefix == other.prefix && self.number == other.number && self.over == other.over && self.macaddr == other.macaddr end |
#create(backend) ⇒ Object
83 84 85 86 87 88 89 90 |
# File 'lib/qemu-toolkit/vnic.rb', line 83 def create backend opts = ["-l #{interface}"] opts << "-v #{vlan}" if vlan_tagged? opts << "--mac-address #{macaddr}" if mac_address? backend.dladm 'create-vnic', *opts, vnic_name end |
#mac_address? ⇒ Boolean
79 80 81 |
# File 'lib/qemu-toolkit/vnic.rb', line 79 def mac_address? @macaddr end |
#to_s ⇒ Object
72 73 74 |
# File 'lib/qemu-toolkit/vnic.rb', line 72 def to_s "#{vnic_name} (#{vlan || 'g'}/#{macaddr})" end |
#vlan_tagged? ⇒ Boolean
76 77 78 |
# File 'lib/qemu-toolkit/vnic.rb', line 76 def vlan_tagged? @over.index(':') end |
#vnic_name ⇒ Object
92 93 94 |
# File 'lib/qemu-toolkit/vnic.rb', line 92 def vnic_name "#{prefix}_#{number}" end |