Class: Pvectl::Utils::ResourceResolver

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

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

#load_resourcesvoid

This method returns an undefined value.

Loads and caches cluster resources.



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/pvectl/utils/resource_resolver.rb', line 63

def load_resources
  return if @cache

  response = @connection.client["cluster/resources"].get(type: "vm")
  @cache = {}

  response.each do |r|
    @cache[r[:vmid]] = {
      vmid: r[:vmid],
      node: r[:node],
      type: r[:type] == "lxc" ? :lxc : :qemu,
      name: r[:name]
    }
  end
end

#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