[pbs-devel] [PATCH proxmox-backup 03/15] api2/tape/drive: reorganize drive api
Dominik Csapak
d.csapak at proxmox.com
Wed Jan 27 11:33:49 CET 2021
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 at proxmox.com>
---
src/api2/config/drive.rs | 28 ++--------------
src/api2/tape/drive.rs | 62 +++++++++++++++++++++++++++++++----
src/api2/tape/mod.rs | 5 +++
src/bin/proxmox_tape/drive.rs | 2 +-
4 files changed, 63 insertions(+), 34 deletions(-)
diff --git a/src/api2/config/drive.rs b/src/api2/config/drive.rs
index 32d74c19..5e0a078e 100644
--- a/src/api2/config/drive.rs
+++ b/src/api2/config/drive.rs
@@ -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()]
diff --git a/src/api2/tape/drive.rs b/src/api2/tape/drive.rs
index 97c28344..a88ef827 100644
--- a/src/api2/tape/drive.rs
+++ b/src/api2/tape/drive.rs
@@ -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);
diff --git a/src/api2/tape/mod.rs b/src/api2/tape/mod.rs
index 05cdb693..466f3b8b 100644
--- a/src/api2/tape/mod.rs
+++ b/src/api2/tape/mod.rs
@@ -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()
diff --git a/src/bin/proxmox_tape/drive.rs b/src/bin/proxmox_tape/drive.rs
index da61ddcf..e99ee860 100644
--- a/src/bin/proxmox_tape/drive.rs
+++ b/src/bin/proxmox_tape/drive.rs
@@ -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!(),
--
2.20.1
More information about the pbs-devel
mailing list