pve/lib/pve/proxmox/qemu.rb
2025-07-10 21:15:19 +02:00

87 lines
2.1 KiB
Ruby

require_relative 'hosted'
require_relative 'node'
require_relative 'exceptions'
require_relative 'ha'
class Proxmox::Qemu < Proxmox::Hosted
class <<self
def all
Proxmox::Node.all.flat_map {|n| n.qemu }
end
def find_by_vmid vmid
vmid = vmid.to_s
all.each do |l|
return l if l.vmid == vmid
end
nil
end
def find_by_name name
all.each do |l|
return l if l.name == name
end
nil
end
def find name_or_id = nil, name: nil, vmid: nil
if (name and vmid) or (name and name_or_id) or (name_or_id and vmid)
raise Proxmox::NotFound, "name xor vmid needed to find CT, not both."
elsif name
find_by_name name
elsif vmid
find_by_vmid vmid.to_i
elsif name_or_id =~ /\D/
find_by_name name_or_id
elsif name_or_id.is_a?( Numeric) or name_or_id =~ /\d/
find_by_vmid name_or_id.to_i
else
raise Proxmox::NotFound, "name xor vmid needed to find CT."
end
end
def find_by_vmid! name
find_by_vmid( name) or raise( Proxmox::NotFound, "Virtual Machine not found: #{name}")
end
def find_by_name! name
find_by_name( name) or raise( Proxmox::NotFound, "Virtual Machine not found: #{name}")
end
def find! name
find( name) or raise( Proxmox::NotFound, "Virtual Machine not found: #{name}")
end
end
def rest_prefix
@rest_prefix ||= "/nodes/%s/qemu/%d" % [@node.node, @vmid]
end
def initialize
rest_prefix
@sid = "qm:#{@vmid}"
end
def ha
Proxmox::HA.find self
end
def exec *args
node.exec 'qm', 'guest', 'exec', vmid, '--', *args
end
def resize disk, size
upid = rest_put "#{@rest_prefix}/resize", disk: disk, size: size
Proxmox::Task.send :__new__, node: @node, host: self, upid: upid
end
def migrate target, online: nil
target =
case target
when Proxmox::Node then target
else Proxmox::Node.find!( target.to_s)
end
Proxmox::Task.send :__new__, node: @node, host: self, upid: rest_post( "#{@rest_prefix}/migrate", target: target.node, online: ! !online)
end
end