Project

General

Profile

Download (1.76 KB) Statistics
| Branch: | Tag: | Revision:
module Nic
class BMC < Managed
PROVIDERS = %w(IPMI Redfish SSH)
before_validation :ensure_physical
before_validation { |nic| nic.provider == 'Redfish' || nic.provider.try(:upcase!) }
validates :provider, :presence => true, :inclusion => { :in => PROVIDERS }
validates :mac, :presence => true, :if => :managed?
validate :validate_bmc_proxy

def virtual
false
end
alias_method :virtual?, :virtual

attr_exportable :provider, :username, :password

def proxy
proxy = bmc_proxy
raise Foreman::Exception.new(N_('Unable to find a proxy with BMC feature')) if proxy.nil?
args = {
:host_ip => ip,
:url => proxy.url,
:user => username,
:password => password_unredacted,
}
args[:bmc_provider] = provider if provider != 'IPMI'
ProxyAPI::BMC.new(args)
end

def self.humanized_name
N_('BMC')
end

class Jail < Nic::Managed::Jail
allow :provider, :username, :password
end

alias_method :password_unredacted, :password
def password
Setting[:bmc_credentials_accessible] ? password_unredacted : nil
end

def credentials_present?
password_unredacted.present? && username.present?
end

private

def ensure_physical
self.virtual = false
true # don't stop validation chain
end

def bmc_proxy
subnet&.bmc || \
raise(::Foreman::BMCFeatureException.new(N_('There is no proxy with BMC feature set up. Associate a BMC feature with a subnet.')))
end

def validate_bmc_proxy
return true unless managed?
return true if host && !host_managed?
bmc_proxy
rescue ::Foreman::BMCFeatureException => e
errors.add(:type, e.message)
end
end

Base.register_type(BMC)
end
(2-2/7)