]>
Commit | Line | Data |
---|---|---|
be327dbc DM |
1 | use anyhow::Error; |
2 | use serde_json::Value; | |
3 | ||
4 | use proxmox::api::{api, cli::*, RpcEnvironment, ApiHandler}; | |
5 | ||
e3619d41 | 6 | use pbs_api_types::JOB_ID_SCHEMA; |
01a08021 | 7 | use pbs_client::view_task_result; |
2b7f8dd5 | 8 | |
e7d4be9d | 9 | use proxmox_backup::api2; |
01a08021 | 10 | use 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. | |
23 | fn list_tape_backup_jobs(param: Value, rpcenv: &mut dyn RpcEnvironment) -> Result<Value, Error> { | |
24 | ||
25 | let output_format = get_output_format(¶m); | |
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 | |
63 | fn show_tape_backup_job(param: Value, rpcenv: &mut dyn RpcEnvironment) -> Result<Value, Error> { | |
64 | ||
65 | let output_format = get_output_format(¶m); | |
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 | |
89 | async fn run_tape_backup_job(mut param: Value) -> Result<(), Error> { | |
90 | ||
91 | let output_format = get_output_format(¶m); | |
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 |
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"]) | |
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 | } |