2 use lazy_static
::lazy_static
;
3 use std
::collections
::HashMap
;
5 use proxmox_schema
::{ApiType, Schema}
;
6 use proxmox_section_config
::{SectionConfig, SectionConfigData, SectionConfigPlugin}
;
8 use pbs_api_types
::{TapeBackupJobConfig, JOB_ID_SCHEMA}
;
10 use crate::{open_backup_lockfile, replace_backup_config, BackupLockGuard}
;
13 pub static ref CONFIG
: SectionConfig
= init();
16 fn init() -> SectionConfig
{
17 let obj_schema
= match TapeBackupJobConfig
::API_SCHEMA
{
18 Schema
::AllOf(ref allof_schema
) => allof_schema
,
23 SectionConfigPlugin
::new("backup".to_string(), Some(String
::from("id")), obj_schema
);
24 let mut config
= SectionConfig
::new(&JOB_ID_SCHEMA
);
25 config
.register_plugin(plugin
);
30 pub const TAPE_JOB_CFG_FILENAME
: &str = "/etc/proxmox-backup/tape-job.cfg";
31 pub const TAPE_JOB_CFG_LOCKFILE
: &str = "/etc/proxmox-backup/.tape-job.lck";
33 /// Get exclusive lock
34 pub fn lock() -> Result
<BackupLockGuard
, Error
> {
35 open_backup_lockfile(TAPE_JOB_CFG_LOCKFILE
, None
, true)
38 pub fn config() -> Result
<(SectionConfigData
, [u8; 32]), Error
> {
40 proxmox_sys
::fs
::file_read_optional_string(TAPE_JOB_CFG_FILENAME
)?
.unwrap_or_default();
42 let digest
= openssl
::sha
::sha256(content
.as_bytes());
43 let data
= CONFIG
.parse(TAPE_JOB_CFG_FILENAME
, &content
)?
;
47 pub fn save_config(config
: &SectionConfigData
) -> Result
<(), Error
> {
48 let raw
= CONFIG
.write(TAPE_JOB_CFG_FILENAME
, config
)?
;
49 replace_backup_config(TAPE_JOB_CFG_FILENAME
, raw
.as_bytes())
52 // shell completion helper
54 /// List all tape job IDs
55 pub fn complete_tape_job_id(_arg
: &str, _param
: &HashMap
<String
, String
>) -> Vec
<String
> {
57 Ok((data
, _digest
)) => data
.sections
.iter().map(|(id
, _
)| id
.to_string()).collect(),