Class: Pvectl::Commands::Get::Handlers::Disks

Inherits:
Object
  • Object
show all
Includes:
ResourceHandler
Defined in:
lib/pvectl/commands/get/handlers/disks.rb

Overview

Handler for listing physical disks on Proxmox nodes.

Implements ResourceHandler interface for the “disks” resource type. Uses Repositories::Disk for data access and Presenters::Disk for formatting.

Examples:

Using via ResourceRegistry

handler = ResourceRegistry.for("disks")
disks = handler.list(node: "pve1")

See Also:

Instance Method Summary collapse

Constructor Details

#initialize(repository: nil) ⇒ Disks

Creates handler with optional repository for dependency injection.

Parameters:

  • repository (Repositories::Disk, nil) (defaults to: nil)

    repository (default: create new)



26
27
28
# File 'lib/pvectl/commands/get/handlers/disks.rb', line 26

def initialize(repository: nil)
  @repository = repository
end

Instance Method Details

#describe(name:, node: nil, args: [], vmid: nil) ⇒ Models::PhysicalDisk

Describes a single physical disk with SMART data.

Locates the disk by devpath across all nodes (or a specific node), then fetches SMART data and merges it into the model.

Parameters:

  • name (String)

    device path (e.g., “/dev/nvme0n1”)

  • node (String, nil) (defaults to: nil)

    optional node filter

  • args (Array<String>) (defaults to: [])

    unused, for interface compatibility

  • vmid (String, nil) (defaults to: nil)

    unused, for interface compatibility

Returns:

Raises:



54
55
56
57
58
59
60
61
62
# File 'lib/pvectl/commands/get/handlers/disks.rb', line 54

def describe(name:, node: nil, args: [], vmid: nil)
  disks = repository.list(node: node)
  disk = disks.find { |d| d.devpath == name }
  raise Pvectl::ResourceNotFoundError, "Disk not found: #{name}" unless disk

  smart_data = repository.smart(disk.node, name)
  disk.merge_smart(smart_data)
  disk
end

#list(node: nil, name: nil, args: [], storage: nil, **_options) ⇒ Array<Models::PhysicalDisk>

Lists physical disks with optional filtering.

Parameters:

  • node (String, nil) (defaults to: nil)

    filter by node name

  • name (String, nil) (defaults to: nil)

    filter by device path (e.g., “/dev/sda”)

  • args (Array<String>) (defaults to: [])

    unused, for interface compatibility

  • storage (String, nil) (defaults to: nil)

    unused, for interface compatibility

Returns:



37
38
39
40
41
# File 'lib/pvectl/commands/get/handlers/disks.rb', line 37

def list(node: nil, name: nil, args: [], storage: nil, **_options)
  disks = repository.list(node: node)
  disks = disks.select { |d| d.devpath == name } if name
  disks
end

#presenterPresenters::Disk

Returns presenter for physical disks.

Returns:



67
68
69
# File 'lib/pvectl/commands/get/handlers/disks.rb', line 67

def presenter
  Pvectl::Presenters::Disk.new
end

#selector_classClass

Returns selector class for client-side filtering.

Returns:

  • (Class)

    Selectors::Disk class



74
75
76
# File 'lib/pvectl/commands/get/handlers/disks.rb', line 74

def selector_class
  Pvectl::Selectors::Disk
end