From 5fb694e8c03d31e6d92b35dcc68555e59e88f1f9 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Wed, 9 Dec 2020 17:43:38 +0100 Subject: [PATCH] tape: implement rewind --- src/api2/tape/drive.rs | 26 ++++++++++++++++++++++++++ src/bin/proxmox-tape.rs | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/src/api2/tape/drive.rs b/src/api2/tape/drive.rs index 32b92750..a5d6c3f1 100644 --- a/src/api2/tape/drive.rs +++ b/src/api2/tape/drive.rs @@ -141,7 +141,33 @@ pub fn erase_media(drive: String, fast: Option) -> Result<(), Error> { Ok(()) } +#[api( + input: { + properties: { + drive: { + schema: DRIVE_ID_SCHEMA, + }, + }, + }, +)] +/// Rewind tape +pub fn rewind(drive: String) -> Result<(), Error> { + + let (config, _digest) = config::drive::config()?; + + let mut drive = open_drive(&config, &drive)?; + + drive.rewind()?; + + Ok(()) +} + pub const SUBDIRS: SubdirMap = &[ + ( + "rewind", + &Router::new() + .put(&API_METHOD_REWIND) + ), ( "erase-media", &Router::new() diff --git a/src/bin/proxmox-tape.rs b/src/bin/proxmox-tape.rs index 1c24aa73..de70a61d 100644 --- a/src/bin/proxmox-tape.rs +++ b/src/bin/proxmox-tape.rs @@ -93,9 +93,43 @@ fn erase_media( Ok(()) } +#[api( + input: { + properties: { + drive: { + schema: DRIVE_ID_SCHEMA, + optional: true, + }, + }, + }, +)] +/// Rewind tape +fn rewind( + mut param: Value, + rpcenv: &mut dyn RpcEnvironment, +) -> Result<(), Error> { + let (config, _digest) = config::drive::config()?; + + param["drive"] = lookup_drive_name(¶m, &config)?.into(); + + let info = &api2::tape::drive::API_METHOD_REWIND; + + match info.handler { + ApiHandler::Sync(handler) => (handler)(param, info, rpcenv)?, + _ => unreachable!(), + }; + + Ok(()) +} + fn main() { let cmd_def = CliCommandMap::new() + .insert( + "rewind", + CliCommand::new(&API_METHOD_REWIND) + .completion_cb("drive", complete_drive_name) + ) .insert( "erase", CliCommand::new(&API_METHOD_ERASE_MEDIA)