]> git.proxmox.com Git - proxmox-backup.git/blobdiff - src/bin/proxmox-tape.rs
drop pbs_tools::auth
[proxmox-backup.git] / src / bin / proxmox-tape.rs
index e1b87e355cde6534c87b6505dd006909ad503821..98d28c9569357d45c35cc7403e984952687b55d1 100644 (file)
@@ -14,36 +14,29 @@ use proxmox::{
     },
 };
 
+use pbs_client::view_task_result;
+use pbs_tools::format::{
+    HumanByte,
+    render_epoch,
+    render_bytes_human_readable,
+};
+
+use pbs_config::drive::complete_drive_name;
+use pbs_config::media_pool::complete_pool_name;
+use pbs_config::datastore::complete_datastore_name;
+
+use pbs_api_types::{
+    Userid, Authid, DATASTORE_SCHEMA, DATASTORE_MAP_LIST_SCHEMA,
+    DRIVE_NAME_SCHEMA, MEDIA_LABEL_SCHEMA, MEDIA_POOL_NAME_SCHEMA,
+    TAPE_RESTORE_SNAPSHOT_SCHEMA,
+};
+use pbs_tape::{
+    PROXMOX_BACKUP_CONTENT_HEADER_MAGIC_1_0, BlockReadError, MediaContentHeader,
+};
+
 use proxmox_backup::{
-    tools::format::{
-        HumanByte,
-        render_epoch,
-        render_bytes_human_readable,
-    },
-    client::{
-        connect_to_localhost,
-        view_task_result,
-    },
-    api2::{
-        self,
-        types::{
-            Authid,
-            DATASTORE_SCHEMA,
-            DATASTORE_MAP_LIST_SCHEMA,
-            DRIVE_NAME_SCHEMA,
-            MEDIA_LABEL_SCHEMA,
-            MEDIA_POOL_NAME_SCHEMA,
-            Userid,
-        },
-    },
-    config::{
-        self,
-        datastore::complete_datastore_name,
-        drive::complete_drive_name,
-        media_pool::complete_pool_name,
-    },
+    api2,
     tape::{
-        BlockReadError,
         drive::{
             open_drive,
             lock_tape_device,
@@ -51,12 +44,12 @@ use proxmox_backup::{
         },
         complete_media_label_text,
         complete_media_set_uuid,
+        complete_media_set_snapshots,
         file_formats::{
-            PROXMOX_BACKUP_CONTENT_HEADER_MAGIC_1_0,
-            MediaContentHeader,
             proxmox_tape_magic_to_text,
         },
     },
+    client_helpers::connect_to_localhost,
 };
 
 mod proxmox_tape;
@@ -119,9 +112,9 @@ pub fn extract_drive_name(
 /// Format media
 async fn format_media(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -152,9 +145,9 @@ async fn format_media(mut param: Value) -> Result<(), Error> {
 /// Rewind tape
 async fn rewind(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -185,9 +178,9 @@ async fn rewind(mut param: Value) -> Result<(), Error> {
 /// Eject/Unload drive media
 async fn eject_media(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -221,9 +214,9 @@ async fn eject_media(mut param: Value) -> Result<(), Error> {
 /// Load media with specified label
 async fn load_media(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -253,7 +246,7 @@ async fn load_media(mut param: Value) -> Result<(), Error> {
 /// Export media with specified label
 async fn export_media(mut param: Value) -> Result<(), Error> {
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -283,7 +276,7 @@ async fn export_media(mut param: Value) -> Result<(), Error> {
 /// Load media from the specified slot
 async fn load_media_from_slot(mut param: Value) -> Result<(), Error> {
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -318,9 +311,9 @@ async fn load_media_from_slot(mut param: Value) -> Result<(), Error> {
 /// Unload media via changer
 async fn unload_media(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -358,9 +351,9 @@ async fn unload_media(mut param: Value) -> Result<(), Error> {
 /// Label media
 async fn label_media(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -396,9 +389,9 @@ async fn label_media(mut param: Value) -> Result<(), Error> {
 /// Read media label
 async fn read_label(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -456,9 +449,9 @@ async fn inventory(
     mut param: Value,
 ) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
     let drive = extract_drive_name(&mut param, &config)?;
 
     let do_read = read_labels.unwrap_or(false) || read_all_labels.unwrap_or(false);
@@ -514,9 +507,9 @@ async fn inventory(
 /// Label media with barcodes from changer device
 async fn barcode_label_media(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -543,7 +536,7 @@ async fn barcode_label_media(mut param: Value) -> Result<(), Error> {
 /// Move to end of media (MTEOM, used to debug)
 fn move_to_eom(mut param: Value) -> Result<(), Error> {
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -573,7 +566,7 @@ fn move_to_eom(mut param: Value) -> Result<(), Error> {
 /// method is expected to fails when we reach EOT.
 fn debug_scan(mut param: Value) -> Result<(), Error> {
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -653,9 +646,9 @@ fn debug_scan(mut param: Value) -> Result<(), Error> {
 /// Read Cartridge Memory (Medium auxiliary memory attributes)
 async fn cartridge_memory(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -694,9 +687,9 @@ async fn cartridge_memory(mut param: Value) -> Result<(), Error> {
 /// Read Volume Statistics (SCSI log page 17h)
 async fn volume_statistics(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -732,9 +725,9 @@ async fn volume_statistics(mut param: Value) -> Result<(), Error> {
 /// Get drive/media status
 async fn status(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -792,9 +785,9 @@ async fn status(mut param: Value) -> Result<(), Error> {
 /// Clean drive
 async fn clean_drive(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -843,6 +836,12 @@ async fn clean_drive(mut param: Value) -> Result<(), Error> {
                 type: bool,
                 optional: true,
             },
+            "force-media-set": {
+                description: "Ignore the allocation policy and start a new media-set.",
+                optional: true,
+                type: bool,
+                default: false,
+            },
             "output-format": {
                 schema: OUTPUT_FORMAT,
                 optional: true,
@@ -853,9 +852,9 @@ async fn clean_drive(mut param: Value) -> Result<(), Error> {
 /// Backup datastore to tape media pool
 async fn backup(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     param["drive"] = extract_drive_name(&mut param, &config)?.into();
 
@@ -886,6 +885,14 @@ async fn backup(mut param: Value) -> Result<(), Error> {
                 type: Userid,
                 optional: true,
             },
+            "snapshots": {
+                description: "List of snapshots.",
+                type: Array,
+                optional: true,
+                items: {
+                    schema: TAPE_RESTORE_SNAPSHOT_SCHEMA,
+                },
+            },
             owner: {
                 type: Authid,
                 optional: true,
@@ -900,9 +907,9 @@ async fn backup(mut param: Value) -> Result<(), Error> {
 /// Restore data from media-set
 async fn restore(mut param: Value) -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     param["drive"] = extract_drive_name(&mut param, &config)?.into();
 
@@ -947,9 +954,9 @@ async fn restore(mut param: Value) -> Result<(), Error> {
 /// Scan media and record content
 async fn catalog_media(mut param: Value)  -> Result<(), Error> {
 
-    let output_format = get_output_format(&param);
+    let output_format = extract_output_format(&mut param);
 
-    let (config, _digest) = config::drive::config()?;
+    let (config, _digest) = pbs_config::drive::config()?;
 
     let drive = extract_drive_name(&mut param, &config)?;
 
@@ -977,9 +984,10 @@ fn main() {
         .insert(
             "restore",
             CliCommand::new(&API_METHOD_RESTORE)
-                .arg_param(&["media-set", "store"])
+                .arg_param(&["media-set", "store", "snapshots"])
                 .completion_cb("store", complete_datastore_name)
                 .completion_cb("media-set", complete_media_set_uuid)
+                .completion_cb("snapshots", complete_media_set_snapshots)
         )
         .insert(
             "barcode-label",
@@ -1090,5 +1098,5 @@ fn main() {
     let mut rpcenv = CliEnvironment::new();
     rpcenv.set_auth_id(Some(String::from("root@pam")));
 
-    proxmox_backup::tools::runtime::main(run_async_cli_command(cmd_def, rpcenv));
+    pbs_runtime::main(run_async_cli_command(cmd_def, rpcenv));
 }