Class: Pvectl::Repositories::Capabilities

Inherits:
Base
  • Object
show all
Defined in:
lib/pvectl/repositories/capabilities.rb,
sig/pvectl/repositories/capabilities.rbs

Overview

Repository for Proxmox node capabilities.

Aggregates feature information from the two most useful capability endpoints — QEMU CPU models and QEMU machine types — into a flat collection of Capability models. The cpu-flags and migration capability endpoints are intentionally out of scope for the initial implementation (YAGNI); they can be added when there is a concrete consumer need.

Examples:

List capabilities for a node

repo = Capabilities.new(connection)
caps = repo.list(node: "pve1")
caps.each { |c| puts "#{c.kind}: #{c.name}" }

See Also:

Constant Summary collapse

CPU_ENDPOINT =

CPU capability endpoint path (without leading slash).

Returns:

  • (String)
"capabilities/qemu/cpu"
MACHINES_ENDPOINT =

Machine type capability endpoint path (without leading slash).

Returns:

  • (String)
"capabilities/qemu/machines"

Instance Attribute Summary

Attributes inherited from Base

#connection

Instance Method Summary collapse

Methods inherited from Base

#build_model, #extract_data, #get, #initialize, #models_from, #unwrap

Constructor Details

This class inherits a constructor from Pvectl::Repositories::Base

Instance Method Details

#build_cpu(data, node) ⇒ Models::Capability

Builds a CPU capability model.

Parameters:

  • data (Hash)

    one entry from the CPU endpoint

  • node (String)

Returns:



69
70
71
72
73
74
75
76
77
# File 'lib/pvectl/repositories/capabilities.rb', line 69

def build_cpu(data, node)
  Models::Capability.new(
    node_name: node,
    kind: :cpu,
    name: data[:name],
    vendor: data[:vendor],
    custom: data[:custom] || false
  )
end

#build_machine(data, node) ⇒ Models::Capability

Builds a machine type capability model.

Parameters:

  • data (Hash)

    one entry from the machines endpoint

  • node (String)

Returns:



84
85
86
87
88
89
90
91
92
93
# File 'lib/pvectl/repositories/capabilities.rb', line 84

def build_machine(data, node)
  Models::Capability.new(
    node_name: node,
    kind: :machine,
    name: data[:id],
    machine_type: data[:type],
    version: data[:version],
    changes: data[:changes]
  )
end

#cpus(node) ⇒ Array<Models::Capability>

Fetches CPU model capabilities.

Parameters:

  • node (String)

Returns:



50
51
52
53
# File 'lib/pvectl/repositories/capabilities.rb', line 50

def cpus(node)
  response = connection.client["nodes/#{node}/#{CPU_ENDPOINT}"].get
  unwrap(response).map { |data| build_cpu(data, node) }
end

#list(node:) ⇒ Array<Models::Capability>

Lists capabilities for a node.

Combines GET /nodes/{node}/capabilities/qemu/cpu and GET /nodes/{node}/capabilities/qemu/machines. Each entry becomes a Capability instance — CPU models first, then machine types.

Parameters:

  • node (String)

    cluster node name (required)

  • node: (String)

Returns:

Raises:

  • (ArgumentError)

    when node is nil/empty

  • (StandardError)

    propagated from the API on auth/connection failure



38
39
40
41
42
# File 'lib/pvectl/repositories/capabilities.rb', line 38

def list(node:)
  raise ArgumentError, "node is required" if node.nil? || node.to_s.empty?

  cpus(node) + machines(node)
end

#machines(node) ⇒ Array<Models::Capability>

Fetches machine type capabilities.

Parameters:

  • node (String)

Returns:



59
60
61
62
# File 'lib/pvectl/repositories/capabilities.rb', line 59

def machines(node)
  response = connection.client["nodes/#{node}/#{MACHINES_ENDPOINT}"].get
  unwrap(response).map { |data| build_machine(data, node) }
end