Class: Pvectl::Commands::Get::Handlers::Volume
- Inherits:
-
Object
- Object
- Pvectl::Commands::Get::Handlers::Volume
- Includes:
- ResourceHandler
- Defined in:
- lib/pvectl/commands/get/handlers/volume.rb
Overview
Handler for listing and describing virtual disk volumes.
Implements ResourceHandler interface for the “volumes” resource type. Supports two listing modes:
-
Config mode: list volumes from VM/CT config by resource type and IDs
-
Storage mode: list volumes from a specific storage
Uses Repositories::Volume for data access, Presenters::Volume for formatting, and Selectors::Volume for client-side filtering.
Instance Method Summary collapse
-
#describe(name:, args: [], node: nil, **_options) ⇒ Models::Volume
Describes a single virtual disk volume.
-
#initialize(repository: nil) ⇒ Volume
constructor
Creates handler with optional repository for dependency injection.
-
#list(args: [], storage: nil, node: nil, **_options) ⇒ Array<Models::Volume>
Lists virtual disk volumes with two modes of operation.
-
#presenter ⇒ Presenters::Volume
Returns presenter for virtual disk volumes.
-
#selector_class ⇒ Class
Returns selector class for client-side filtering.
Constructor Details
#initialize(repository: nil) ⇒ Volume
Creates handler with optional repository for dependency injection.
39 40 41 |
# File 'lib/pvectl/commands/get/handlers/volume.rb', line 39 def initialize(repository: nil) @repository = repository end |
Instance Method Details
#describe(name:, args: [], node: nil, **_options) ⇒ Models::Volume
Describes a single virtual disk volume.
Locates a specific disk by resource type, ID, and disk name.
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/pvectl/commands/get/handlers/volume.rb', line 80 def describe(name:, args: [], node: nil, **) resource_type = name id = args[0]&.to_i disk_name = args[1] volume = repository.find(resource_type: resource_type, id: id, disk_name: disk_name, node: node) raise Pvectl::ResourceNotFoundError, "Volume '#{disk_name}' not found on #{resource_type} #{id}" unless volume volume end |
#list(args: [], storage: nil, node: nil, **_options) ⇒ Array<Models::Volume>
Lists virtual disk volumes with two modes of operation.
Config mode: requires resource type and at least one ID in args.
args = ["vm", "100", "101"] lists volumes from VMs 100 and 101.
Storage mode: requires storage parameter.
storage = "local-lvm" lists all volumes on that storage.
56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/pvectl/commands/get/handlers/volume.rb', line 56 def list(args: [], storage: nil, node: nil, **) if storage repository.list_from_storage(storage: storage, node: node) elsif args.length >= 2 resource_type = args[0] ids = args[1..].map(&:to_i) repository.list_from_config(resource_type: resource_type, ids: ids, node: node) else $stderr.puts "Usage: pvectl get volume <vm|ct> <ID...> [--node NODE]" $stderr.puts " pvectl get volume --storage <STORAGE> [--node NODE]" [] end end |
#presenter ⇒ Presenters::Volume
Returns presenter for virtual disk volumes.
94 95 96 |
# File 'lib/pvectl/commands/get/handlers/volume.rb', line 94 def presenter Pvectl::Presenters::Volume.new end |