api: add keep-job-configs flag to datastore remove endpoint

Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
Suggested Fixes:
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
Hannes Laimer 2021-07-08 12:13:48 +02:00 committed by Thomas Lamprecht
parent c7d032fc17
commit eb1c59cc2a
1 changed files with 27 additions and 1 deletions

View File

@ -10,6 +10,12 @@ use proxmox::api::schema::parse_property_string;
use pbs_datastore::task::TaskState; use pbs_datastore::task::TaskState;
use crate::api2::config::sync::delete_sync_job;
use crate::api2::config::verify::delete_verification_job;
use crate::api2::admin::{
sync::list_sync_jobs,
verify::list_verification_jobs,
};
use crate::api2::types::*; use crate::api2::types::*;
use crate::backup::*; use crate::backup::*;
use crate::config::cached_user_info::CachedUserInfo; use crate::config::cached_user_info::CachedUserInfo;
@ -413,6 +419,12 @@ pub fn update_datastore(
name: { name: {
schema: DATASTORE_SCHEMA, schema: DATASTORE_SCHEMA,
}, },
"keep-job-configs": {
description: "If enabled, the job configurations related to this datastore will be kept.",
type: bool,
optional: true,
default: false,
},
digest: { digest: {
optional: true, optional: true,
schema: PROXMOX_CONFIG_DIGEST_SCHEMA, schema: PROXMOX_CONFIG_DIGEST_SCHEMA,
@ -424,7 +436,12 @@ pub fn update_datastore(
}, },
)] )]
/// Remove a datastore configuration. /// Remove a datastore configuration.
pub async fn delete_datastore(name: String, digest: Option<String>) -> Result<(), Error> { pub async fn delete_datastore(
name: String,
keep_job_configs: bool,
digest: Option<String>,
rpcenv: &mut dyn RpcEnvironment,
) -> Result<(), Error> {
let _lock = datastore::lock_config()?; let _lock = datastore::lock_config()?;
@ -440,6 +457,15 @@ pub async fn delete_datastore(name: String, digest: Option<String>) -> Result<()
None => bail!("datastore '{}' does not exist.", name), None => bail!("datastore '{}' does not exist.", name),
} }
if !keep_job_configs {
for job in list_verification_jobs(Some(name.clone()), Value::Null, rpcenv)? {
delete_verification_job(job.config.id, None, rpcenv)?
}
for job in list_sync_jobs(Some(name.clone()), Value::Null, rpcenv)? {
delete_sync_job(job.config.id, None, rpcenv)?
}
}
datastore::save_config(&config)?; datastore::save_config(&config)?;
// ignore errors // ignore errors