]> git.proxmox.com Git - proxmox-backup.git/blob - src/bin/proxmox_tape/backup_job.rs
drop pbs_tools::auth
[proxmox-backup.git] / src / bin / proxmox_tape / backup_job.rs
1 use anyhow::Error;
2 use serde_json::Value;
3
4 use proxmox::api::{api, cli::*, RpcEnvironment, ApiHandler};
5
6 use pbs_api_types::JOB_ID_SCHEMA;
7 use pbs_client::view_task_result;
8
9 use proxmox_backup::api2;
10 use proxmox_backup::client_helpers::connect_to_localhost;
11
12 #[api(
13 input: {
14 properties: {
15 "output-format": {
16 schema: OUTPUT_FORMAT,
17 optional: true,
18 },
19 }
20 }
21 )]
22 /// Tape backup job list.
23 fn list_tape_backup_jobs(param: Value, rpcenv: &mut dyn RpcEnvironment) -> Result<Value, Error> {
24
25 let output_format = get_output_format(&param);
26
27 //let info = &api2::config::tape_backup_job::API_METHOD_LIST_TAPE_BACKUP_JOBS;
28 let info = &api2::tape::backup::API_METHOD_LIST_TAPE_BACKUP_JOBS;
29 let mut data = match info.handler {
30 ApiHandler::Sync(handler) => (handler)(param, info, rpcenv)?,
31 _ => unreachable!(),
32 };
33
34 let options = default_table_format_options()
35 .column(ColumnConfig::new("id"))
36 .column(ColumnConfig::new("store"))
37 .column(ColumnConfig::new("pool"))
38 .column(ColumnConfig::new("drive"))
39 .column(ColumnConfig::new("schedule"))
40 .column(ColumnConfig::new("next-run").renderer(pbs_tools::format::render_epoch))
41 .column(ColumnConfig::new("next-media-label"))
42 .column(ColumnConfig::new("comment"));
43
44 format_and_print_result_full(&mut data, &info.returns, &output_format, &options);
45
46 Ok(Value::Null)
47 }
48
49 #[api(
50 input: {
51 properties: {
52 id: {
53 schema: JOB_ID_SCHEMA,
54 },
55 "output-format": {
56 schema: OUTPUT_FORMAT,
57 optional: true,
58 },
59 }
60 }
61 )]
62 /// Show tape backup job configuration
63 fn show_tape_backup_job(param: Value, rpcenv: &mut dyn RpcEnvironment) -> Result<Value, Error> {
64
65 let output_format = get_output_format(&param);
66
67 let info = &api2::config::tape_backup_job::API_METHOD_READ_TAPE_BACKUP_JOB;
68 let mut data = match info.handler {
69 ApiHandler::Sync(handler) => (handler)(param, info, rpcenv)?,
70 _ => unreachable!(),
71 };
72
73 let options = default_table_format_options();
74 format_and_print_result_full(&mut data, &info.returns, &output_format, &options);
75
76 Ok(Value::Null)
77 }
78
79 #[api(
80 input: {
81 properties: {
82 id: {
83 schema: JOB_ID_SCHEMA,
84 },
85 },
86 },
87 )]
88 /// Run THape Backup Job
89 async fn run_tape_backup_job(mut param: Value) -> Result<(), Error> {
90
91 let output_format = get_output_format(&param);
92
93 let id = param["id"].take().as_str().unwrap().to_string();
94
95 let mut client = connect_to_localhost()?;
96
97 let result = client.post(&format!("api2/json/tape/backup/{}", id), Some(param)).await?;
98
99 view_task_result(&mut client, result, &output_format).await?;
100
101 Ok(())
102 }
103
104 pub fn backup_job_commands() -> CommandLineInterface {
105
106 let cmd_def = CliCommandMap::new()
107 .insert("list", CliCommand::new(&API_METHOD_LIST_TAPE_BACKUP_JOBS))
108 .insert("show",
109 CliCommand::new(&API_METHOD_SHOW_TAPE_BACKUP_JOB)
110 .arg_param(&["id"])
111 .completion_cb("id", pbs_config::tape_job::complete_tape_job_id)
112 )
113 .insert("run",
114 CliCommand::new(&API_METHOD_RUN_TAPE_BACKUP_JOB)
115 .arg_param(&["id"])
116 .completion_cb("id", pbs_config::tape_job::complete_tape_job_id)
117 )
118 .insert("create",
119 CliCommand::new(&api2::config::tape_backup_job::API_METHOD_CREATE_TAPE_BACKUP_JOB)
120 .arg_param(&["id"])
121 .completion_cb("id", pbs_config::tape_job::complete_tape_job_id)
122 .completion_cb("schedule", pbs_config::datastore::complete_calendar_event)
123 .completion_cb("store", pbs_config::datastore::complete_datastore_name)
124 .completion_cb("pool", pbs_config::media_pool::complete_pool_name)
125 .completion_cb("drive", crate::complete_drive_name)
126 )
127 .insert("update",
128 CliCommand::new(&api2::config::tape_backup_job::API_METHOD_UPDATE_TAPE_BACKUP_JOB)
129 .arg_param(&["id"])
130 .completion_cb("id", pbs_config::tape_job::complete_tape_job_id)
131 .completion_cb("schedule", pbs_config::datastore::complete_calendar_event)
132 .completion_cb("store", pbs_config::datastore::complete_datastore_name)
133 .completion_cb("pool", pbs_config::media_pool::complete_pool_name)
134 .completion_cb("drive", crate::complete_drive_name)
135 )
136 .insert("remove",
137 CliCommand::new(&api2::config::tape_backup_job::API_METHOD_DELETE_TAPE_BACKUP_JOB)
138 .arg_param(&["id"])
139 .completion_cb("id", pbs_config::tape_job::complete_tape_job_id)
140 );
141
142 cmd_def.into()
143 }