Class: ForemanDatacenter::Device

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
ScopedSearchExtensions
Defined in:
app/models/foreman_datacenter/device.rb

Instance Method Summary collapse

Instance Method Details

#free_console_portsObject



79
80
81
# File 'app/models/foreman_datacenter/device.rb', line 79

def free_console_ports
  console_ports.where(console_server_port_id: nil)
end

#free_console_server_portsObject



87
88
89
90
# File 'app/models/foreman_datacenter/device.rb', line 87

def free_console_server_ports
  console_server_ports.joins('LEFT JOIN console_ports ON console_server_ports.id = console_ports.console_server_port_id').
    where(console_ports: { console_server_port_id: nil })
end

#free_interfacesObject



75
76
77
# File 'app/models/foreman_datacenter/device.rb', line 75

def free_interfaces
  interfaces.where(mgmt_only: false).reject(&:connected?)
end

#free_power_outletsObject



92
93
94
95
# File 'app/models/foreman_datacenter/device.rb', line 92

def free_power_outlets
  power_outlets.joins('LEFT JOIN power_ports ON power_outlets.id = power_ports.power_outlet_id').
    where(power_ports: { power_outlet_id: nil })
end

#free_power_portsObject



83
84
85
# File 'app/models/foreman_datacenter/device.rb', line 83

def free_power_ports
  power_ports.where(power_outlet_id: nil)
end

#ip_addressObject



66
67
68
69
# File 'app/models/foreman_datacenter/device.rb', line 66

def ip_address
  ipmi_interface.try(:ip_address) || mgmt_interface.try(:ip_address) ||
    primary_ip4
end

#mac_addressObject



62
63
64
# File 'app/models/foreman_datacenter/device.rb', line 62

def mac_address
  ipmi_interface.try(:mac_address) || mgmt_interface.try(:mac_address)
end

#name_without_fqdnObject



110
111
112
113
# File 'app/models/foreman_datacenter/device.rb', line 110

def name_without_fqdn
  match = name.match(/^([^.]*)/)
  match[1] if match
end

#parent?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'app/models/foreman_datacenter/device.rb', line 71

def parent?
  device_type.try(:subdevice_role) == 'Parent'
end

#populate_from_host(host) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
# File 'app/models/foreman_datacenter/device.rb', line 97

def populate_from_host(host)
  self.host = host
  self.name = host.name

  device_type = DeviceType.for_host(host)
  self.device_type = device_type if device_type

  self.device_role = DeviceRole.for_host unless self.device_role

  serial = host.fact_value_by_name('serialnumber')
  self.serial = serial.value if serial
end

#positionsObject



115
116
117
118
119
120
121
122
123
# File 'app/models/foreman_datacenter/device.rb', line 115

def positions
  result = []
  if size.nil?
    result << position
  else
    size.times{ |p| result << (position + p) } unless position.nil?
  end
  return result
end

#sync_interfaces_with_hostObject



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'app/models/foreman_datacenter/device.rb', line 125

def sync_interfaces_with_host
  if host
    existed_names = interfaces.map(&:name)
    host.interfaces.each do |interface|
      unless existed_names.include?(interface.identifier)
        interfaces.create(
          name: interface.identifier,
          form_factor: ForemanDatacenter::DeviceInterface::DEFAULT_FORM_FACTOR,
          mac_address: interface.mac,
          ip_address: interface.ip,
          mgmt_only: interface.identifier == 'ipmi'
        )
      end
    end
  end
end