Project

General

Profile

Download (1.6 KB) Statistics
| Branch: | Tag: | Revision:
# Represents a Host's network interface
# This class is the both parent
module Nic
class Base < ActiveRecord::Base
include Foreman::STI

self.table_name = 'nics'

attr_accessible :host_id, :host,
:mac, :name,
:_destroy # used for nested_attributes

before_validation :normalize_mac

validates :mac, :uniqueness => true, :presence => true, :mac_address => true

validate :uniq_with_hosts

validates :host, :presence => true

scope :bootable, lambda { where(:type => "Nic::Bootable") }
scope :bmc, lambda { where(:type => "Nic::BMC") }
scope :interfaces, lambda { where(:type => "Nic::Interface") }
scope :managed, lambda { where(:type => "Nic::Managed") }

belongs_to_host :inverse_of => :interfaces, :class_name => "Host::Managed"
# keep extra attributes needed for sub classes.
serialize :attrs, Hash

protected

def uniq_fields_with_hosts
[:mac]
end

# make sure we don't have a conflicting interface with an host record
def uniq_with_hosts
failed = false
uniq_fields_with_hosts.each do |attr|
value = self.send(attr)
unless value.blank?
if host.send(attr) == value
errors.add(attr, _("Can't use the same value as the primary interface"))
failed = true
elsif Host.where(attr => value).limit(1).pluck(attr).any?
errors.add(attr, _("already in use"))
failed = true
end
end
end
!failed
end

def normalize_mac
self.mac = Net::Validations.normalize_mac(mac)
end
end
end
(1-1/5)