4 use proxmox
::api
::{api, cli::*, RpcEnvironment, ApiHandler}
;
6 use pbs_api_types
::JOB_ID_SCHEMA
;
7 use pbs_client
::view_task_result
;
9 use proxmox_backup
::api2
;
10 use proxmox_backup
::client_helpers
::connect_to_localhost
;
16 schema
: OUTPUT_FORMAT
,
22 /// Tape backup job list.
23 fn list_tape_backup_jobs(param
: Value
, rpcenv
: &mut dyn RpcEnvironment
) -> Result
<Value
, Error
> {
25 let output_format
= get_output_format(¶m
);
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
)?
,
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"));
44 format_and_print_result_full(&mut data
, &info
.returns
, &output_format
, &options
);
53 schema
: JOB_ID_SCHEMA
,
56 schema
: OUTPUT_FORMAT
,
62 /// Show tape backup job configuration
63 fn show_tape_backup_job(param
: Value
, rpcenv
: &mut dyn RpcEnvironment
) -> Result
<Value
, Error
> {
65 let output_format
= get_output_format(¶m
);
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
)?
,
73 let options
= default_table_format_options();
74 format_and_print_result_full(&mut data
, &info
.returns
, &output_format
, &options
);
83 schema
: JOB_ID_SCHEMA
,
88 /// Run THape Backup Job
89 async
fn run_tape_backup_job(mut param
: Value
) -> Result
<(), Error
> {
91 let output_format
= get_output_format(¶m
);
93 let id
= param
["id"].take().as_str().unwrap().to_string();
95 let mut client
= connect_to_localhost()?
;
97 let result
= client
.post(&format
!("api2/json/tape/backup/{}", id
), Some(param
)).await?
;
99 view_task_result(&mut client
, result
, &output_format
).await?
;
104 pub fn backup_job_commands() -> CommandLineInterface
{
106 let cmd_def
= CliCommandMap
::new()
107 .insert("list", CliCommand
::new(&API_METHOD_LIST_TAPE_BACKUP_JOBS
))
109 CliCommand
::new(&API_METHOD_SHOW_TAPE_BACKUP_JOB
)
111 .completion_cb("id", pbs_config
::tape_job
::complete_tape_job_id
)
114 CliCommand
::new(&API_METHOD_RUN_TAPE_BACKUP_JOB
)
116 .completion_cb("id", pbs_config
::tape_job
::complete_tape_job_id
)
119 CliCommand
::new(&api2
::config
::tape_backup_job
::API_METHOD_CREATE_TAPE_BACKUP_JOB
)
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
)
128 CliCommand
::new(&api2
::config
::tape_backup_job
::API_METHOD_UPDATE_TAPE_BACKUP_JOB
)
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
)
137 CliCommand
::new(&api2
::config
::tape_backup_job
::API_METHOD_DELETE_TAPE_BACKUP_JOB
)
139 .completion_cb("id", pbs_config
::tape_job
::complete_tape_job_id
)