Class: Pvectl::Repositories::Disk
- Defined in:
- lib/pvectl/repositories/disk.rb,
sig/pvectl/repositories/disk.rbs
Overview
Repository for physical disks on Proxmox nodes.
Uses the /nodes/{node}/disks/list API endpoint to fetch
physical disk information per node.
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#build_model(data) ⇒ Models::PhysicalDisk
Builds PhysicalDisk model from API response data.
-
#disks_for_node(node_name) ⇒ Array<Models::PhysicalDisk>
Fetches disks for a single node.
-
#list(node: nil) ⇒ Array<Models::PhysicalDisk>
Lists physical disks, optionally filtered by node.
-
#online_nodes ⇒ Array<String>
Fetches list of online node names.
-
#smart(node_name, disk_path) ⇒ Hash{Symbol => untyped}
Fetches SMART data for a specific disk on a node.
Methods inherited from Base
#extract_data, #get, #initialize, #models_from, #unwrap
Constructor Details
This class inherits a constructor from Pvectl::Repositories::Base
Instance Method Details
#build_model(data) ⇒ Models::PhysicalDisk
Builds PhysicalDisk model from API response data.
55 56 57 |
# File 'lib/pvectl/repositories/disk.rb', line 55 def build_model(data) Models::PhysicalDisk.new(data) end |
#disks_for_node(node_name) ⇒ Array<Models::PhysicalDisk>
Fetches disks for a single node.
65 66 67 68 69 70 71 |
# File 'lib/pvectl/repositories/disk.rb', line 65 def disks_for_node(node_name) response = connection.client["nodes/#{node_name}/disks/list"].get disks_data = unwrap(response) disks_data.map { |data| build_model(data.merge(node: node_name)) } rescue StandardError [] end |
#list(node: nil) ⇒ Array<Models::PhysicalDisk>
Lists physical disks, optionally filtered by node.
When node is nil, iterates over all online nodes in the cluster. When node is specified, queries only that node.
29 30 31 32 33 34 35 |
# File 'lib/pvectl/repositories/disk.rb', line 29 def list(node: nil) if node disks_for_node(node) else online_nodes.flat_map { |node_name| disks_for_node(node_name) } end end |
#online_nodes ⇒ Array<String>
Fetches list of online node names.
76 77 78 79 80 81 82 83 84 |
# File 'lib/pvectl/repositories/disk.rb', line 76 def online_nodes response = connection.client["nodes"].get nodes_data = unwrap(response) nodes_data .select { |n| n[:status] == "online" } .map { |n| n[:node] || n[:name] } rescue StandardError [] end |
#smart(node_name, disk_path) ⇒ Hash{Symbol => untyped}
Fetches SMART data for a specific disk on a node.
42 43 44 45 46 47 |
# File 'lib/pvectl/repositories/disk.rb', line 42 def smart(node_name, disk_path) response = connection.client["nodes/#{node_name}/disks/smart"].get(params: { disk: disk_path }) extract_data(response) rescue StandardError {} end |