Module: ForemanFogProxmox::ProxmoxVmQueries

Includes:
ProxmoxPools
Included in:
Proxmox
Defined in:
app/models/foreman_fog_proxmox/proxmox_vm_queries.rb

Instance Method Summary collapse

Methods included from ProxmoxPools

#add_vm_to_pool, #pool_owner, #pools, #remove_vm_from_pool, #update_pool

Instance Method Details

#bridges(node_id = default_node_id) ⇒ Object



36
37
38
39
40
41
# File 'app/models/foreman_fog_proxmox/proxmox_vm_queries.rb', line 36

def bridges(node_id = default_node_id)
  node = network_client.nodes.get node_id
  node ||= network_client.nodes.first
  bridges = node.networks.all(type: 'any_bridge')
  bridges.sort_by(&:iface)
end

#find_vm_by_uuid(uuid) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'app/models/foreman_fog_proxmox/proxmox_vm_queries.rb', line 50

def find_vm_by_uuid(uuid)
  # look for the uuid on all known nodes
  vm = nil
  nodes.each do |node|
    vm = find_vm_in_servers_by_uuid(node.servers, uuid)
    vm ||= find_vm_in_servers_by_uuid(node.containers, uuid)
    unless vm.nil?
      logger.debug("found vm #{uuid} on node #{node.node}")
      break
    end
  end
  vm
end

#find_vm_in_servers_by_uuid(servers, uuid) ⇒ Object



64
65
66
67
68
69
70
71
72
73
# File 'app/models/foreman_fog_proxmox/proxmox_vm_queries.rb', line 64

def find_vm_in_servers_by_uuid(servers, uuid)
  vm = servers.get(uuid) if !uuid.nil? && !uuid.to_s.empty?
  pool_owner(vm) if vm
  vm
rescue Fog::Errors::NotFound
  nil
rescue StandardError => e
  Foreman::Logging.exception(format(_('Failed retrieving proxmox server vm by vmid=%<vmid>s'), vmid: uuid), e)
  raise(ActiveRecord::RecordNotFound, e)
end

#nodesObject



24
25
26
27
# File 'app/models/foreman_fog_proxmox/proxmox_vm_queries.rb', line 24

def nodes
  nodes = client.nodes.all if client
  nodes&.sort_by(&:node)
end

#storages(node_id = default_node_id, type = 'images') ⇒ Object



29
30
31
32
33
34
# File 'app/models/foreman_fog_proxmox/proxmox_vm_queries.rb', line 29

def storages(node_id = default_node_id, type = 'images')
  node = client.nodes.get node_id
  node ||= default_node
  storages = node.storages.list_by_content_type type
  storages.sort_by(&:storage)
end

#vms(_opts = {}) ⇒ Object

TODO: Pagination with filters



44
45
46
47
48
# File 'app/models/foreman_fog_proxmox/proxmox_vm_queries.rb', line 44

def vms(_opts = {})
  vms = []
  nodes.each { |node| vms += node.servers.all + node.containers.all }
  ForemanFogProxmox::Vms.new(vms)
end