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