]>
git.proxmox.com Git - proxmox-backup.git/blob - src/bin/backup-client.rs
6 use apitest
::cli
::command
::*;
7 use apitest
::api
::schema
::*;
8 use apitest
::api
::router
::*;
9 use apitest
::backup
::chunk_store
::*;
10 use serde_json
::{Value}
;
12 use apitest
::config
::datastore
;
14 fn required_string_param
<'a
>(param
: &'a Value
, name
: &str) -> &'a
str {
15 param
[name
].as_str().expect(&format
!("missing parameter '{}'", name
))
19 fn backup_file(param
: Value
, _info
: &ApiMethod
) -> Result
<Value
, Error
> {
21 let filename
= required_string_param(¶m
, "filename");
22 let store
= required_string_param(¶m
, "store");
24 let config
= datastore
::config()?
;
25 let (_
, store_config
) = config
.sections
.get(store
)
26 .ok_or(format_err
!("no such datastore '{}'", store
))?
;
28 let path
= store_config
["path"].as_str().unwrap();
30 let _store
= ChunkStore
::open(path
)?
;
32 println
!("Backup file '{}' to '{}'", filename
, store
);
34 let file
= std
::fs
::File
::open(filename
)?
;
36 tools
::file_chunker(file
, 64*1024, |pos
, chunk
| {
37 println
!("CHUNK {} {}", pos
, chunk
.len());
47 let cmd_def
= CliCommand
::new(
50 ObjectSchema
::new("Create backup from file.")
51 .required("filename", StringSchema
::new("Source file name."))
52 .required("store", StringSchema
::new("Datastore name."))
54 .arg_param(vec
!["filename"])
55 .completion_cb("store", apitest
::config
::datastore
::complete_datastore_name
);
58 if let Err(err
) = run_cli_command(&cmd_def
.into()) {
59 eprintln
!("Error: {}", err
);
61 std
::process
::exit(-1);