# frozen_string_literal: true
# Copyright 2019 Tristan Robert
# This file is part of ForemanFogProxmox.
# ForemanFogProxmox is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# ForemanFogProxmox is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with ForemanFogProxmox. If not, see .
module ForemanFogProxmox
module ProxmoxVmQueries
def next_vmid
node.servers.next_id
end
def nodes
nodes = client.nodes.all if client
nodes&.sort_by(&:node)
end
def pools
pools = identity_client.pools.all
pools.sort_by(&:poolid)
end
def storages(type = 'images')
storages = node.storages.list_by_content_type type
storages.sort_by(&:storage)
end
def bridges
node = network_client.nodes.get node_id
bridges = node.networks.all(type: 'any_bridge')
bridges.sort_by(&:iface)
end
def vms(_opts = {})
node
end
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
def find_vm_in_servers_by_uuid(servers, uuid)
servers.get(uuid) if !uuid.nil? && !uuid.to_s.empty?
rescue Fog::Errors::NotFound
nil
rescue StandardError => e
Foreman::Logging.exception(format(_('Failed retrieving proxmox server vm by vmid=%s'), vmid: uuid), e)
raise(ActiveRecord::RecordNotFound)
end
end
end