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



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

def free_console_ports
  console_ports.where(console_server_port_id: nil)
end

#free_console_server_portsObject



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

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



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

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

#free_power_outletsObject



97
98
99
100
# File 'app/models/foreman_datacenter/device.rb', line 97

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



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

def free_power_ports
  power_ports.where(power_outlet_id: nil)
end

#ip_addressObject



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

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

#mac_addressObject



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

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

#name_without_fqdnObject



115
116
117
118
# File 'app/models/foreman_datacenter/device.rb', line 115

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

#parent?Boolean

Returns:

  • (Boolean)


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

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

#populate_from_host(host) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
# File 'app/models/foreman_datacenter/device.rb', line 102

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



120
121
122
123
124
125
126
127
128
# File 'app/models/foreman_datacenter/device.rb', line 120

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



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'app/models/foreman_datacenter/device.rb', line 130

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