mirror of
https://git.proxmox.com/git/proxmox-backup
synced 2025-04-29 00:21:11 +00:00
api types/config: add sync-push
config type for push sync jobs
In order for sync jobs to be either pull or push jobs, allow to configure the direction of the job. Adds an additional config type `sync-push` to the sync job config, to clearly distinguish sync jobs configured in pull and in push direction and defines and implements the required `SyncDirection` api type. This approach was chosen in order to limit possible misconfiguration, as unintentionally switching the sync direction could potentially delete still required snapshots. Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
This commit is contained in:
parent
33737196b1
commit
bcd80bf976
@ -498,6 +498,44 @@ pub const TRANSFER_LAST_SCHEMA: Schema =
|
||||
.minimum(1)
|
||||
.schema();
|
||||
|
||||
#[api()]
|
||||
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
/// Direction of the sync job, push or pull
|
||||
pub enum SyncDirection {
|
||||
/// Sync direction pull
|
||||
#[default]
|
||||
Pull,
|
||||
/// Sync direction push
|
||||
Push,
|
||||
}
|
||||
|
||||
impl std::fmt::Display for SyncDirection {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
SyncDirection::Pull => f.write_str("pull"),
|
||||
SyncDirection::Push => f.write_str("push"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl SyncDirection {
|
||||
pub fn as_config_type_str(&self) -> &'static str {
|
||||
match self {
|
||||
SyncDirection::Pull => "sync",
|
||||
SyncDirection::Push => "sync-push",
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_config_type_str(config_type: &str) -> Result<Self, anyhow::Error> {
|
||||
match config_type {
|
||||
"sync" => Ok(SyncDirection::Pull),
|
||||
"sync-push" => Ok(SyncDirection::Push),
|
||||
_ => bail!("invalid config type for sync job"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[api(
|
||||
properties: {
|
||||
id: {
|
||||
|
@ -6,7 +6,7 @@ use anyhow::Error;
|
||||
use proxmox_schema::{ApiType, Schema};
|
||||
use proxmox_section_config::{SectionConfig, SectionConfigData, SectionConfigPlugin};
|
||||
|
||||
use pbs_api_types::{SyncJobConfig, JOB_ID_SCHEMA};
|
||||
use pbs_api_types::{SyncDirection, SyncJobConfig, JOB_ID_SCHEMA};
|
||||
|
||||
use crate::{open_backup_lockfile, replace_backup_config, BackupLockGuard};
|
||||
|
||||
@ -18,9 +18,19 @@ fn init() -> SectionConfig {
|
||||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
let plugin = SectionConfigPlugin::new("sync".to_string(), Some(String::from("id")), obj_schema);
|
||||
let pull_plugin = SectionConfigPlugin::new(
|
||||
SyncDirection::Pull.as_config_type_str().to_string(),
|
||||
Some(String::from("id")),
|
||||
obj_schema,
|
||||
);
|
||||
let push_plugin = SectionConfigPlugin::new(
|
||||
SyncDirection::Push.as_config_type_str().to_string(),
|
||||
Some(String::from("id")),
|
||||
obj_schema,
|
||||
);
|
||||
let mut config = SectionConfig::new(&JOB_ID_SCHEMA);
|
||||
config.register_plugin(plugin);
|
||||
config.register_plugin(pull_plugin);
|
||||
config.register_plugin(push_plugin);
|
||||
|
||||
config
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user