bk/src/config.rs
2025-04-25 13:06:16 +02:00

193 lines
5.4 KiB
Rust

use serde::Deserialize;
/// Configuration structure for the backup system.
#[derive(Debug, Clone, Deserialize)]
pub struct Config {
/// Optional script to run before starting the backup process.
pub start_script: Option<String>,
/// Optional script to run after completing the backup process.
pub end_script: Option<String>,
/// Configuration for rsync jobs.
pub rsync: Option<Vec<RsyncConfig>>,
/// Configuration for Borg backup jobs.
pub borg: Option<Vec<BorgConfig>>,
/// Configuration for Borg check jobs to verify repository integrity.
pub borg_check: Option<Vec<BorgCheckConfig>>,
/// Configuration for Borg prune jobs to manage repository snapshots.
pub borg_prune: Option<Vec<BorgPruneConfig>>,
/// Configuration for Borg backup jobs.
pub restic: Option<Vec<ResticConfig>>,
}
/// Configuration for an individual rsync job.
#[derive(Debug, Clone, Deserialize)]
pub struct RsyncConfig {
/// Source path for rsync.
pub src: String,
/// Destination path for rsync.
pub dest: String,
/// List of patterns to exclude from synchronization.
pub exclude: Option<Vec<String>>,
/// Whether to delete files at the destination that are not in the source.
pub delete: Option<bool>,
/// Ensure a specific directory exists before running the rsync job.
pub ensure_exists: Option<String>,
/// Create CephFS snapshot before the rsync job.
pub cephfs_snap: Option<bool>,
}
/// Configuration for an individual Borg backup job.
#[derive(Debug, Clone, Deserialize)]
pub struct BorgConfig {
/// Borg repository path.
pub repo: String,
/// Optional passphrase for the repository.
pub passphrase: Option<String>,
/// List of source paths to include in the backup.
pub src: Vec<String>,
/// List of patterns to exclude from the backup.
pub exclude: Option<Vec<String>>,
/// List of marker files; directories containing these will be excluded.
pub exclude_if_present: Option<Vec<String>>,
/// Whether to limit the backup to a single filesystem.
pub one_file_system: Option<bool>,
/// Whether to backup ctime
pub ctime: Option<bool>,
/// Disable backup of ACLs (Access Control Lists).
pub no_acls: Option<bool>,
/// Disable backup of extended attributes.
pub no_xattrs: Option<bool>,
/// Optional comment to associate with the backup.
pub comment: Option<String>,
/// Compression mode to use for the backup.
pub compression: Option<String>,
/// Ensure a specific directory exists before running the backup.
pub ensure_exists: Option<String>,
/// Create CephFS snapshots before the backup.
pub cephfs_snap: Option<bool>,
/// Bind mount to consistent path
pub same_path: Option<bool>,
}
/// Configuration for a Borg repository integrity check job.
#[derive(Debug, Clone, Deserialize)]
pub struct BorgCheckConfig {
/// Borg repository path.
pub repo: String,
/// Whether to verify the repository's data integrity.
pub verify_data: Option<bool>,
/// Whether to attempt repairs on detected issues.
pub repair: Option<bool>,
}
/// Configuration for a Borg repository pruning job.
#[derive(Debug, Clone, Deserialize)]
pub struct BorgPruneConfig {
/// Borg repository path.
pub repo: String,
/// Passphrase for accessing the repository.
pub passphrase: String,
/// Retain all archives within this time period.
pub keep_within: String,
/// Retain the last `n` archives.
pub keep_last: Option<u32>,
/// Retain the last `n` secondly archives.
pub keep_secondly: Option<u32>,
/// Retain the last `n` minutely archives.
pub keep_minutely: Option<u32>,
/// Retain the last `n` hourly archives.
pub keep_hourly: Option<u32>,
/// Retain the last `n` daily archives.
pub keep_daily: Option<u32>,
/// Retain the last `n` weekly archives.
pub keep_weekly: Option<u32>,
/// Retain the last `n` monthly archives.
pub keep_monthly: Option<u32>,
/// Retain the last `n` yearly archives.
pub keep_yearly: Option<u32>,
}
// TODO : restic support
/// Configuration for an individual restic backup job.
#[derive(Debug, Clone, Deserialize)]
pub struct ResticConfig {
/// Borg repository path.
pub repo: String,
/// Optional passphrase for the repository.
pub passphrase: String,
/// List of source paths to include in the backup.
pub src: Vec<String>,
/// List of patterns to exclude from the backup.
pub exclude: Option<Vec<String>>,
/// Cache directories marked with CACHEDIR.TAG will be excluded
pub exclude_caches: Option<bool>,
/// Reread all files even if unchanged
pub reread: Option<bool>,
/// List of marker files; directories containing these will be excluded.
pub exclude_if_present: Option<Vec<String>>,
/// Whether to limit the backup to a single filesystem.
pub one_file_system: Option<bool>,
/// Read concurrency
pub concurrency: Option<u64>,
/// Optional comment to associate with the backup.
pub tags: Option<Vec<String>>,
/// Compression mode to use for the backup.
// TODO :
pub compression: Option<String>,
/// Ensure a specific directory exists before running the backup.
pub ensure_exists: Option<String>,
/// Create CephFS snapshots before the backup.
pub cephfs_snap: Option<bool>,
/// Bind mount to consistent path
pub same_path: Option<bool>,
}