Class: ForemanDatacenter::Device
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- ForemanDatacenter::Device
- Includes:
- ScopedSearchExtensions
- Defined in:
- app/models/foreman_datacenter/device.rb
Instance Method Summary collapse
- #child? ⇒ Boolean
- #correct_position ⇒ Object
- #free_console_ports ⇒ Object
- #free_console_server_ports ⇒ Object
- #free_interfaces ⇒ Object
- #free_power_outlets ⇒ Object
- #free_power_ports ⇒ Object
- #ip_address ⇒ Object
- #mac_address ⇒ Object
- #name_without_fqdn ⇒ Object
- #parent? ⇒ Boolean
- #populate_from_host(host) ⇒ Object
- #positions ⇒ Object
- #sync_interfaces_with_host ⇒ Object
Instance Method Details
#child? ⇒ Boolean
76 77 78 |
# File 'app/models/foreman_datacenter/device.rb', line 76 def child? device_type.try(:subdevice_role) == 'Child' end |
#correct_position ⇒ Object
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'app/models/foreman_datacenter/device.rb', line 147 def correct_position if position > 0 grid_template = JSON.parse(self.rack.grid_template_areas) correct_pos = true pos = [] sz = (size == 0 || size == 1) ? [position] : [*position..(position + (size - 1))] sd = (side.nil?) ? "full" : side sz.each do |i| if grid_template["#{i}"].is_a?(Hash) if grid_template["#{i}"].key?("full") && grid_template["#{i}"]["full"] != "device-#{self.id}" correct_pos = false pos << "#{i}(full)" end if sd == "full" ["left", "right"].each do |s| if grid_template["#{i}"].key?("#{s}") && grid_template["#{i}"]["#{s}"] != "device-#{self.id}" correct_pos = false pos << "#{i}(#{s})" end end else if grid_template["#{i}"].key?("#{sd}") && grid_template["#{i}"]["#{sd}"] != "device-#{self.id}" correct_pos = false pos << "#{i}(#{sd})" end end end end pos.uniq! errors.add(:position, "Positions: #{pos.join(', ')} already taken") if correct_pos == false end end |
#free_console_ports ⇒ Object
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_ports ⇒ Object
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_interfaces ⇒ Object
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_outlets ⇒ Object
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_ports ⇒ Object
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_address ⇒ Object
67 68 69 70 |
# File 'app/models/foreman_datacenter/device.rb', line 67 def ip_address ipmi_interface.try(:ip_address) || mgmt_interface.try(:ip_address) || primary_ip4 end |
#mac_address ⇒ Object
63 64 65 |
# File 'app/models/foreman_datacenter/device.rb', line 63 def mac_address ipmi_interface.try(:mac_address) || mgmt_interface.try(:mac_address) end |
#name_without_fqdn ⇒ Object
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
72 73 74 |
# File 'app/models/foreman_datacenter/device.rb', line 72 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 |
#positions ⇒ Object
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_host ⇒ Object
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 |