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::{
|
tape::{
|
||||||
linux_tape_device_list,
|
linux_tape_device_list,
|
||||||
check_drive_path,
|
check_drive_path,
|
||||||
lookup_drive,
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -112,37 +111,14 @@ pub fn get_config(
|
|||||||
pub fn list_drives(
|
pub fn list_drives(
|
||||||
_param: Value,
|
_param: Value,
|
||||||
mut rpcenv: &mut dyn RpcEnvironment,
|
mut rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<Vec<DriveListEntry>, Error> {
|
) -> Result<Vec<LinuxTapeDrive>, Error> {
|
||||||
|
|
||||||
let (config, digest) = config::drive::config()?;
|
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 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();
|
rpcenv["digest"] = proxmox::tools::digest_to_hex(&digest).into();
|
||||||
Ok(list)
|
Ok(drive_list)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[api()]
|
#[api()]
|
||||||
|
@ -31,6 +31,7 @@ use crate::{
|
|||||||
MEDIA_LABEL_SCHEMA,
|
MEDIA_LABEL_SCHEMA,
|
||||||
MEDIA_POOL_NAME_SCHEMA,
|
MEDIA_POOL_NAME_SCHEMA,
|
||||||
Authid,
|
Authid,
|
||||||
|
DriveListEntry,
|
||||||
LinuxTapeDrive,
|
LinuxTapeDrive,
|
||||||
TapeDeviceInfo,
|
TapeDeviceInfo,
|
||||||
MediaIdFlat,
|
MediaIdFlat,
|
||||||
@ -48,6 +49,7 @@ use crate::{
|
|||||||
MediaCatalog,
|
MediaCatalog,
|
||||||
MediaId,
|
MediaId,
|
||||||
linux_tape_device_list,
|
linux_tape_device_list,
|
||||||
|
lookup_drive,
|
||||||
file_formats::{
|
file_formats::{
|
||||||
MediaLabel,
|
MediaLabel,
|
||||||
MediaSetLabel,
|
MediaSetLabel,
|
||||||
@ -1096,6 +1098,53 @@ pub fn catalog_media(
|
|||||||
Ok(upid_str.into())
|
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]
|
#[sortable]
|
||||||
pub const SUBDIRS: SubdirMap = &sorted!([
|
pub const SUBDIRS: SubdirMap = &sorted!([
|
||||||
(
|
(
|
||||||
@ -1159,11 +1208,6 @@ pub const SUBDIRS: SubdirMap = &sorted!([
|
|||||||
&Router::new()
|
&Router::new()
|
||||||
.put(&API_METHOD_REWIND)
|
.put(&API_METHOD_REWIND)
|
||||||
),
|
),
|
||||||
(
|
|
||||||
"scan",
|
|
||||||
&Router::new()
|
|
||||||
.get(&API_METHOD_SCAN_DRIVES)
|
|
||||||
),
|
|
||||||
(
|
(
|
||||||
"status",
|
"status",
|
||||||
&Router::new()
|
&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))
|
.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()
|
&Router::new()
|
||||||
.get(&API_METHOD_SCAN_CHANGERS),
|
.get(&API_METHOD_SCAN_CHANGERS),
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
"scan-drives",
|
||||||
|
&Router::new()
|
||||||
|
.get(&drive::API_METHOD_SCAN_DRIVES),
|
||||||
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
pub const ROUTER: Router = Router::new()
|
pub const ROUTER: Router = Router::new()
|
||||||
|
@ -79,7 +79,7 @@ fn list_drives(
|
|||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
|
|
||||||
let output_format = get_output_format(¶m);
|
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 {
|
let mut data = match info.handler {
|
||||||
ApiHandler::Sync(handler) => (handler)(param, info, rpcenv)?,
|
ApiHandler::Sync(handler) => (handler)(param, info, rpcenv)?,
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
|
Loading…
Reference in New Issue
Block a user