]> git.proxmox.com Git - proxmox-backup.git/blame - src/bin/proxmox_tape/backup_job.rs
bump proxmox dependency to 0.14.0 and proxmox-http to 0.5.0
[proxmox-backup.git] / src / bin / proxmox_tape / backup_job.rs
CommitLineData
be327dbc
DM
1use anyhow::Error;
2use serde_json::Value;
3
4use proxmox::api::{api, cli::*, RpcEnvironment, ApiHandler};
5
e3619d41 6use pbs_api_types::JOB_ID_SCHEMA;
01a08021 7use pbs_client::view_task_result;
2b7f8dd5 8
e7d4be9d 9use proxmox_backup::api2;
01a08021 10use proxmox_backup::client_helpers::connect_to_localhost;
be327dbc
DM
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.
23fn list_tape_backup_jobs(param: Value, rpcenv: &mut dyn RpcEnvironment) -> Result<Value, Error> {
24
25 let output_format = get_output_format(&param);
26
e5545c98
DM
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;
be327dbc
DM
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"))
e5545c98
DM
40 .column(ColumnConfig::new("next-run").renderer(pbs_tools::format::render_epoch))
41 .column(ColumnConfig::new("next-media-label"))
be327dbc
DM
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
63fn 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
41a8db35
DM
79#[api(
80 input: {
81 properties: {
82 id: {
83 schema: JOB_ID_SCHEMA,
84 },
85 },
86 },
87)]
88/// Run THape Backup Job
89async 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
be327dbc
DM
104pub 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"])
e3619d41 111 .completion_cb("id", pbs_config::tape_job::complete_tape_job_id)
be327dbc 112 )
41a8db35
DM
113 .insert("run",
114 CliCommand::new(&API_METHOD_RUN_TAPE_BACKUP_JOB)
115 .arg_param(&["id"])
e3619d41 116 .completion_cb("id", pbs_config::tape_job::complete_tape_job_id)
41a8db35 117 )
be327dbc
DM
118 .insert("create",
119 CliCommand::new(&api2::config::tape_backup_job::API_METHOD_CREATE_TAPE_BACKUP_JOB)
120 .arg_param(&["id"])
e3619d41 121 .completion_cb("id", pbs_config::tape_job::complete_tape_job_id)
e7d4be9d
DM
122 .completion_cb("schedule", pbs_config::datastore::complete_calendar_event)
123 .completion_cb("store", pbs_config::datastore::complete_datastore_name)
aad2d162 124 .completion_cb("pool", pbs_config::media_pool::complete_pool_name)
be327dbc
DM
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"])
e3619d41 130 .completion_cb("id", pbs_config::tape_job::complete_tape_job_id)
e7d4be9d
DM
131 .completion_cb("schedule", pbs_config::datastore::complete_calendar_event)
132 .completion_cb("store", pbs_config::datastore::complete_datastore_name)
aad2d162 133 .completion_cb("pool", pbs_config::media_pool::complete_pool_name)
be327dbc
DM
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"])
e3619d41 139 .completion_cb("id", pbs_config::tape_job::complete_tape_job_id)
be327dbc
DM
140 );
141
142 cmd_def.into()
143}