Project

General

Profile

Download (1.38 KB) Statistics
| Branch: | Tag: | Revision:
module Nic
class Bond < Managed
SEPARATOR = ','
MODES = %w(balance-rr active-backup balance-xor broadcast 802.3ad balance-tlb balance-alb)
validates :mode, :presence => true, :inclusion => { :in => MODES }
validates :attached_devices, :format => { :with => /\A[a-z0-9#{SEPARATOR}.:_-]+\Z/ }, :allow_blank => true
validates :identifier, :presence => true, :if => :managed?

before_validation :ensure_virtual

register_to_enc_transformation :type, ->(type) { type.constantize.humanized_name }

def virtual
true
end
alias_method :virtual?, :virtual

def attached_devices=(devices)
devices = devices.split(SEPARATOR) if devices.is_a?(String)
super(devices.map { |i| i.downcase.strip }.join(SEPARATOR))
end

def attached_devices_identifiers
attached_devices.split(SEPARATOR)
end

def add_slave(identifier)
self.attached_devices = attached_devices_identifiers.push(identifier).uniq.join(SEPARATOR)
end

def remove_slave(identifier)
self.attached_devices = attached_devices_identifiers.tap { |a| a.delete(identifier) }.join(SEPARATOR)
end

def self.humanized_name
N_('Bond')
end

private

def ensure_virtual
self.virtual = true
end

def enc_attributes
@enc_attributes ||= (super + %w(mode attached_devices bond_options))
end
end

Base.register_type(Bond)
end
(3-3/6)