api2/tape/changer: add drive state to changer status output
if we can find the drive in the config and it has a state Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
41e66bfaf6
commit
8be48ddfc7
|
@ -1,3 +1,4 @@
|
|||
use std::collections::HashMap;
|
||||
use std::path::Path;
|
||||
|
||||
use anyhow::Error;
|
||||
|
@ -11,6 +12,7 @@ use crate::{
|
|||
api2::types::{
|
||||
CHANGER_NAME_SCHEMA,
|
||||
ChangerListEntry,
|
||||
LinuxTapeDrive,
|
||||
MtxEntryKind,
|
||||
MtxStatusEntry,
|
||||
ScsiTapeChanger,
|
||||
|
@ -25,6 +27,7 @@ use crate::{
|
|||
ScsiMediaChange,
|
||||
mtx_status_to_online_set,
|
||||
},
|
||||
drive::get_tape_device_state,
|
||||
lookup_device_identification,
|
||||
},
|
||||
};
|
||||
|
@ -66,9 +69,26 @@ pub async fn get_status(name: String) -> Result<Vec<MtxStatusEntry>, Error> {
|
|||
|
||||
inventory.update_online_status(&map)?;
|
||||
|
||||
let drive_list: Vec<LinuxTapeDrive> = config.convert_to_typed_array("linux")?;
|
||||
let mut drive_map: HashMap<u64, String> = HashMap::new();
|
||||
|
||||
for drive in drive_list {
|
||||
if let Some(changer) = drive.changer {
|
||||
if changer != name {
|
||||
continue;
|
||||
}
|
||||
let num = drive.changer_drivenum.unwrap_or(0);
|
||||
drive_map.insert(num, drive.name.clone());
|
||||
}
|
||||
}
|
||||
|
||||
let mut list = Vec::new();
|
||||
|
||||
for (id, drive_status) in status.drives.iter().enumerate() {
|
||||
let mut state = None;
|
||||
if let Some(drive) = drive_map.get(&(id as u64)) {
|
||||
state = get_tape_device_state(&config, &drive)?;
|
||||
}
|
||||
let entry = MtxStatusEntry {
|
||||
entry_kind: MtxEntryKind::Drive,
|
||||
entry_id: id as u64,
|
||||
|
@ -78,6 +98,7 @@ pub async fn get_status(name: String) -> Result<Vec<MtxStatusEntry>, Error> {
|
|||
ElementStatus::VolumeTag(tag) => Some(tag.to_string()),
|
||||
},
|
||||
loaded_slot: drive_status.loaded_slot,
|
||||
state,
|
||||
};
|
||||
list.push(entry);
|
||||
}
|
||||
|
@ -96,6 +117,7 @@ pub async fn get_status(name: String) -> Result<Vec<MtxStatusEntry>, Error> {
|
|||
ElementStatus::VolumeTag(tag) => Some(tag.to_string()),
|
||||
},
|
||||
loaded_slot: None,
|
||||
state: None,
|
||||
};
|
||||
list.push(entry);
|
||||
}
|
||||
|
|
|
@ -129,4 +129,7 @@ pub struct MtxStatusEntry {
|
|||
/// The slot the drive was loaded from
|
||||
#[serde(skip_serializing_if="Option::is_none")]
|
||||
pub loaded_slot: Option<u64>,
|
||||
/// The current state of the drive
|
||||
#[serde(skip_serializing_if="Option::is_none")]
|
||||
pub state: Option<String>,
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue