]> git.proxmox.com Git - proxmox-backup.git/commitdiff
api2/tape/changer: reorganize api
authorDominik Csapak <d.csapak@proxmox.com>
Mon, 25 Jan 2021 15:30:57 +0000 (16:30 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 26 Jan 2021 11:47:34 +0000 (12:47 +0100)
add a changer listing here (copied from api2/config/changer)
and put the status and transfer api calls below that

puts the changer scan into the top level tape api
and removes the (now redundant) info from the config api path

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
src/api2/config/changer.rs
src/api2/tape/changer.rs
src/api2/tape/mod.rs
src/bin/proxmox_tape/changer.rs

index c1e8c59e0b2d9da16f4d52b9ba6a2e5601caffb4..df8e042d165492491a4fefc58b0c1d7425103276 100644 (file)
@@ -24,7 +24,6 @@ use crate::{
     tape::{
         linux_tape_changer_list,
         check_drive_path,
-        lookup_drive,
     },
 };
 
@@ -126,28 +125,19 @@ pub fn list_changers(
 
     let (config, digest) = config::drive::config()?;
 
-    let linux_changers = linux_tape_changer_list();
-
     let changer_list: Vec<ScsiTapeChanger> = config.convert_to_typed_array("changer")?;
 
     let mut list = Vec::new();
 
     for changer in changer_list {
-        let mut entry = DriveListEntry {
+        list.push(DriveListEntry {
             name: changer.name,
             path: changer.path.clone(),
             changer: None,
             vendor: None,
             model: None,
             serial: None,
-        };
-        if let Some(info) = lookup_drive(&linux_changers, &changer.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();
index da620c4afa9e012685bf3c9d04a90cc79798f4b3..03e92a0e502d21cb4580ddd0c2d6870ba1651cda 100644 (file)
@@ -10,6 +10,7 @@ use crate::{
     config,
     api2::types::{
         CHANGER_NAME_SCHEMA,
+        DriveListEntry,
         ScsiTapeChanger,
         TapeDeviceInfo,
         MtxStatusEntry,
@@ -25,6 +26,7 @@ use crate::{
             ScsiMediaChange,
             mtx_status_to_online_set,
         },
+        lookup_drive,
     },
 };
 
@@ -155,14 +157,68 @@ pub fn scan_changers(_param: Value) -> Result<Vec<TapeDeviceInfo>, Error> {
     Ok(list)
 }
 
+#[api(
+    input: {
+        properties: {},
+    },
+    returns: {
+        description: "The list of configured changers with model information.",
+        type: Array,
+        items: {
+            type: DriveListEntry,
+        },
+    },
+)]
+/// List changers
+pub fn list_changers(
+    _param: Value,
+) -> Result<Vec<DriveListEntry>, Error> {
+
+    let (config, _digest) = config::drive::config()?;
+
+    let linux_changers = linux_tape_changer_list();
+
+    let changer_list: Vec<ScsiTapeChanger> = config.convert_to_typed_array("changer")?;
+
+    let mut list = Vec::new();
+
+    for changer in changer_list {
+        let mut entry = DriveListEntry {
+            name: changer.name,
+            path: changer.path.clone(),
+            changer: None,
+            vendor: None,
+            model: None,
+            serial: None,
+        };
+        if let Some(info) = lookup_drive(&linux_changers, &changer.path) {
+            entry.vendor = Some(info.vendor.clone());
+            entry.model = Some(info.model.clone());
+            entry.serial = Some(info.serial.clone());
+        }
+
+        list.push(entry);
+    }
+    Ok(list)
+}
+
 const SUBDIRS: SubdirMap = &[
     (
-        "scan",
+        "status",
+        &Router::new()
+            .get(&API_METHOD_GET_STATUS)
+    ),
+    (
+        "transfer",
         &Router::new()
-            .get(&API_METHOD_SCAN_CHANGERS)
+            .post(&API_METHOD_TRANSFER)
     ),
 ];
 
-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_CHANGERS)
+    .match_all("name", &ITEM_ROUTER);
index 8241fa057d393bc3066620b4332c1c2692fe6995..6fbf902a3b7385fb1f07f5f183c265bb154fcc57 100644 (file)
@@ -16,6 +16,11 @@ pub const SUBDIRS: SubdirMap = &[
     ("drive", &drive::ROUTER),
     ("media", &media::ROUTER),
     ("restore", &restore::ROUTER),
+    (
+        "scan-changers",
+        &Router::new()
+            .get(&changer::API_METHOD_SCAN_CHANGERS),
+    ),
 ];
 
 pub const ROUTER: Router = Router::new()
index db7a8b9cf4a79bca7fac69caa15c56feea822ea5..0479771ee04f432e2be451532bed68fa395dcfc2 100644 (file)
@@ -113,7 +113,7 @@ fn list_changers(
 ) -> Result<(), Error> {
 
     let output_format = get_output_format(&param);
-    let info = &api2::config::changer::API_METHOD_LIST_CHANGERS;
+    let info = &api2::tape::changer::API_METHOD_LIST_CHANGERS;
     let mut data = match info.handler {
         ApiHandler::Sync(handler) => (handler)(param, info, rpcenv)?,
         _ => unreachable!(),