Class: Pvectl::Utils::ResourceResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/pvectl/utils/resource_resolver.rb

Overview

Utility for resolving VMID to VM/container type and node.

ResourceResolver auto-detects whether a given VMID belongs to a QEMU virtual machine or LXC container and retrieves its node location. Results are cached for efficiency when resolving multiple VMIDs.

Examples:

Resolving a single VMID

resolver = ResourceResolver.new(connection)
info = resolver.resolve(100)
puts "VM #{info[:vmid]} is a #{info[:type]} on #{info[:node]}"

Resolving multiple VMIDs

resolver = ResourceResolver.new(connection)
infos = resolver.resolve_multiple([100, 101, 102])
infos.each { |i| puts "#{i[:vmid]}: #{i[:type]}" }

Instance Method Summary collapse

Constructor Details

#initialize(connection) ⇒ ResourceResolver

Creates a new ResourceResolver.

Parameters:

  • connection (Connection)

    Proxmox API connection



25
26
27
28
# File 'lib/pvectl/utils/resource_resolver.rb', line 25

def initialize(connection)
  @connection = connection
  @cache = nil
end

Instance Method Details

#resolve(vmid) ⇒ Hash?

Resolves a VMID to its resource information.

Parameters:

  • vmid (Integer, String)

    VM or container identifier

Returns:

  • (Hash, nil)

    hash with :vmid, :node, :type (:qemu or :lxc), :name or nil if not found



35
36
37
38
39
# File 'lib/pvectl/utils/resource_resolver.rb', line 35

def resolve(vmid)
  vmid = vmid.to_i
  load_resources
  @cache[vmid]
end

#resolve_allArray<Hash>

Returns all resources in the cluster.

Returns:

  • (Array<Hash>)

    array of all VM/container resources



53
54
55
56
# File 'lib/pvectl/utils/resource_resolver.rb', line 53

def resolve_all
  load_resources
  @cache.values
end

#resolve_multiple(vmids) ⇒ Array<Hash>

Resolves multiple VMIDs to their resource information.

Parameters:

  • vmids (Array<Integer, String>)

    array of VM/container identifiers

Returns:

  • (Array<Hash>)

    array of resolved resources (unknown VMIDs are skipped)



45
46
47
48
# File 'lib/pvectl/utils/resource_resolver.rb', line 45

def resolve_multiple(vmids)
  load_resources
  vmids.map { |id| @cache[id.to_i] }.compact
end