result
}
-fn connect(server: &str, port: u16, auth_id: &Authid) -> Result<HttpClient, Error> {
+fn connect(repo: &BackupRepository) -> Result<HttpClient, Error> {
+ connect_do(repo.host(), repo.port(), repo.auth_id())
+ .map_err(|err| format_err!("error building client for repository {} - {}", repo, err))
+}
+fn connect_do(server: &str, port: u16, auth_id: &Authid) -> Result<HttpClient, Error> {
let fingerprint = std::env::var(ENV_VAR_PBS_FINGERPRINT).ok();
use std::env::VarError::*;
let repo = extract_repository_from_value(¶m)?;
- let client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let client = connect(&repo)?;
let path = format!("api2/json/admin/datastore/{}/groups", repo.store());
let repo = extract_repository_from_value(¶m)?;
- let mut client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let mut client = connect(&repo)?;
param.as_object_mut().unwrap().remove("repository");
let output_format = get_output_format(¶m);
- let client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let client = connect(&repo)?;
let group: Option<BackupGroup> = if let Some(path) = param["group"].as_str() {
Some(path.parse()?)
let path = tools::required_string_param(¶m, "snapshot")?;
let snapshot: BackupDir = path.parse()?;
- let mut client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let mut client = connect(&repo)?;
let path = format!("api2/json/admin/datastore/{}/snapshots", repo.store());
let repo = extract_repository_from_value(¶m)?;
- let client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let client = connect(&repo)?;
client.login().await?;
record_repository(&repo);
let repo = extract_repository_from_value(¶m);
if let Ok(repo) = repo {
- let client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let client = connect(&repo)?;
match client.get("api2/json/version", None).await {
Ok(mut result) => version_info["server"] = result["data"].take(),
let output_format = get_output_format(¶m);
- let client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let client = connect(&repo)?;
let path = format!("api2/json/admin/datastore/{}/files", repo.store());
let output_format = get_output_format(¶m);
- let mut client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let mut client = connect(&repo)?;
let path = format!("api2/json/admin/datastore/{}/gc", repo.store());
let backup_time = backup_time_opt.unwrap_or_else(|| epoch_i64());
- let client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let client = connect(&repo)?;
record_repository(&repo);
println!("Starting backup: {}/{}/{}", backup_type, backup_id, BackupDir::backup_time_to_string(backup_time)?);
let archive_name = tools::required_string_param(¶m, "archive-name")?;
- let client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let client = connect(&repo)?;
record_repository(&repo);
let snapshot = tools::required_string_param(¶m, "snapshot")?;
let snapshot: BackupDir = snapshot.parse()?;
- let mut client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let mut client = connect(&repo)?;
let (keydata, crypt_mode) = keyfile_parameters(¶m)?;
async fn prune_async(mut param: Value) -> Result<Value, Error> {
let repo = extract_repository_from_value(¶m)?;
- let mut client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let mut client = connect(&repo)?;
let path = format!("api2/json/admin/datastore/{}/prune", repo.store());
let output_format = get_output_format(¶m);
- let client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let client = connect(&repo)?;
let path = format!("api2/json/admin/datastore/{}/status", repo.store());
let output_format = get_output_format(¶m);
let repo = extract_repository_from_value(¶m)?;
- let client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let client = connect(&repo)?;
let limit = param["limit"].as_u64().unwrap_or(50) as usize;
let running = !param["all"].as_bool().unwrap_or(false);
let repo = extract_repository_from_value(¶m)?;
let upid = tools::required_string_param(¶m, "upid")?;
- let client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let client = connect(&repo)?;
display_task_log(client, upid, true).await?;
let repo = extract_repository_from_value(¶m)?;
let upid_str = tools::required_string_param(¶m, "upid")?;
- let mut client = connect(repo.host(), repo.port(), repo.auth_id())?;
+ let mut client = connect(&repo)?;
let path = format!("api2/json/nodes/localhost/tasks/{}", upid_str);
let _ = client.delete(&path, None).await?;