api2/tape/drive: reorganize drive api
similar to the changers, create a listing at /tape/drive and put the specific api calls below that move the scan api call up one level remove the status info from the config listing Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
d8792b88ef
commit
5fdaecf6f4
@ -19,7 +19,6 @@ use crate::{
|
||||
tape::{
|
||||
linux_tape_device_list,
|
||||
check_drive_path,
|
||||
lookup_drive,
|
||||
},
|
||||
};
|
||||
|
||||
@ -112,37 +111,14 @@ pub fn get_config(
|
||||
pub fn list_drives(
|
||||
_param: Value,
|
||||
mut rpcenv: &mut dyn RpcEnvironment,
|
||||
) -> Result<Vec<DriveListEntry>, Error> {
|
||||
) -> Result<Vec<LinuxTapeDrive>, Error> {
|
||||
|
||||
let (config, digest) = config::drive::config()?;
|
||||
|
||||
let linux_drives = linux_tape_device_list();
|
||||
|
||||
let drive_list: Vec<LinuxTapeDrive> = config.convert_to_typed_array("linux")?;
|
||||
|
||||
let mut list = Vec::new();
|
||||
|
||||
for drive in drive_list {
|
||||
let mut entry = DriveListEntry {
|
||||
name: drive.name,
|
||||
path: drive.path.clone(),
|
||||
changer: drive.changer,
|
||||
changer_drivenum: drive.changer_drive_id,
|
||||
vendor: None,
|
||||
model: None,
|
||||
serial: None,
|
||||
};
|
||||
if let Some(info) = lookup_drive(&linux_drives, &drive.path) {
|
||||
entry.vendor = Some(info.vendor.clone());
|
||||
entry.model = Some(info.model.clone());
|
||||
entry.serial = Some(info.serial.clone());
|
||||
}
|
||||
|
||||
list.push(entry);
|
||||
}
|
||||
|
||||
rpcenv["digest"] = proxmox::tools::digest_to_hex(&digest).into();
|
||||
Ok(list)
|
||||
Ok(drive_list)
|
||||
}
|
||||
|
||||
#[api()]
|
||||
|
@ -31,6 +31,7 @@ use crate::{
|
||||
MEDIA_LABEL_SCHEMA,
|
||||
MEDIA_POOL_NAME_SCHEMA,
|
||||
Authid,
|
||||
DriveListEntry,
|
||||
LinuxTapeDrive,
|
||||
TapeDeviceInfo,
|
||||
MediaIdFlat,
|
||||
@ -48,6 +49,7 @@ use crate::{
|
||||
MediaCatalog,
|
||||
MediaId,
|
||||
linux_tape_device_list,
|
||||
lookup_drive,
|
||||
file_formats::{
|
||||
MediaLabel,
|
||||
MediaSetLabel,
|
||||
@ -1096,6 +1098,53 @@ pub fn catalog_media(
|
||||
Ok(upid_str.into())
|
||||
}
|
||||
|
||||
#[api(
|
||||
input: {
|
||||
properties: {},
|
||||
},
|
||||
returns: {
|
||||
description: "The list of configured drives with model information.",
|
||||
type: Array,
|
||||
items: {
|
||||
type: DriveListEntry,
|
||||
},
|
||||
},
|
||||
)]
|
||||
/// List drives
|
||||
pub fn list_drives(
|
||||
_param: Value,
|
||||
) -> Result<Vec<DriveListEntry>, Error> {
|
||||
|
||||
let (config, _) = config::drive::config()?;
|
||||
|
||||
let linux_drives = linux_tape_device_list();
|
||||
|
||||
let drive_list: Vec<LinuxTapeDrive> = config.convert_to_typed_array("linux")?;
|
||||
|
||||
let mut list = Vec::new();
|
||||
|
||||
for drive in drive_list {
|
||||
let mut entry = DriveListEntry {
|
||||
name: drive.name,
|
||||
path: drive.path.clone(),
|
||||
changer: drive.changer,
|
||||
changer_drivenum: drive.changer_drive_id,
|
||||
vendor: None,
|
||||
model: None,
|
||||
serial: None,
|
||||
};
|
||||
if let Some(info) = lookup_drive(&linux_drives, &drive.path) {
|
||||
entry.vendor = Some(info.vendor.clone());
|
||||
entry.model = Some(info.model.clone());
|
||||
entry.serial = Some(info.serial.clone());
|
||||
}
|
||||
|
||||
list.push(entry);
|
||||
}
|
||||
|
||||
Ok(list)
|
||||
}
|
||||
|
||||
#[sortable]
|
||||
pub const SUBDIRS: SubdirMap = &sorted!([
|
||||
(
|
||||
@ -1159,11 +1208,6 @@ pub const SUBDIRS: SubdirMap = &sorted!([
|
||||
&Router::new()
|
||||
.put(&API_METHOD_REWIND)
|
||||
),
|
||||
(
|
||||
"scan",
|
||||
&Router::new()
|
||||
.get(&API_METHOD_SCAN_DRIVES)
|
||||
),
|
||||
(
|
||||
"status",
|
||||
&Router::new()
|
||||
@ -1176,6 +1220,10 @@ pub const SUBDIRS: SubdirMap = &sorted!([
|
||||
),
|
||||
]);
|
||||
|
||||
pub const ROUTER: Router = Router::new()
|
||||
const ITEM_ROUTER: Router = Router::new()
|
||||
.get(&list_subdirs_api_method!(SUBDIRS))
|
||||
.subdirs(SUBDIRS);
|
||||
.subdirs(&SUBDIRS);
|
||||
|
||||
pub const ROUTER: Router = Router::new()
|
||||
.get(&API_METHOD_LIST_DRIVES)
|
||||
.match_all("drive", &ITEM_ROUTER);
|
||||
|
@ -54,6 +54,11 @@ const SUBDIRS: SubdirMap = &[
|
||||
&Router::new()
|
||||
.get(&API_METHOD_SCAN_CHANGERS),
|
||||
),
|
||||
(
|
||||
"scan-drives",
|
||||
&Router::new()
|
||||
.get(&drive::API_METHOD_SCAN_DRIVES),
|
||||
),
|
||||
];
|
||||
|
||||
pub const ROUTER: Router = Router::new()
|
||||
|
@ -79,7 +79,7 @@ fn list_drives(
|
||||
) -> Result<(), Error> {
|
||||
|
||||
let output_format = get_output_format(¶m);
|
||||
let info = &api2::config::drive::API_METHOD_LIST_DRIVES;
|
||||
let info = &api2::tape::drive::API_METHOD_LIST_DRIVES;
|
||||
let mut data = match info.handler {
|
||||
ApiHandler::Sync(handler) => (handler)(param, info, rpcenv)?,
|
||||
_ => unreachable!(),
|
||||
|
Loading…
Reference in New Issue
Block a user