From cdc83c4eb2df81a2d6740613fac60d203c082985 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Wed, 8 Sep 2021 08:55:25 +0200 Subject: [PATCH] tape job cleanup: user Updater --- pbs-api-types/src/jobs.rs | 5 +- src/api2/config/tape_backup_job.rs | 83 ++++++------------------------ 2 files changed, 19 insertions(+), 69 deletions(-) diff --git a/pbs-api-types/src/jobs.rs b/pbs-api-types/src/jobs.rs index 3396e39e..a96fcc10 100644 --- a/pbs-api-types/src/jobs.rs +++ b/pbs-api-types/src/jobs.rs @@ -250,7 +250,7 @@ pub struct VerificationJobStatus { }, } )] -#[derive(Serialize,Deserialize,Clone)] +#[derive(Serialize,Deserialize,Clone,Updater)] #[serde(rename_all="kebab-case")] /// Tape Backup Job Setup pub struct TapeBackupJobSetup { @@ -286,10 +286,11 @@ pub struct TapeBackupJobSetup { }, } )] -#[derive(Serialize,Deserialize,Clone)] +#[derive(Serialize,Deserialize,Clone,Updater)] #[serde(rename_all="kebab-case")] /// Tape Backup Job pub struct TapeBackupJobConfig { + #[updater(skip)] pub id: String, #[serde(flatten)] pub setup: TapeBackupJobSetup, diff --git a/src/api2/config/tape_backup_job.rs b/src/api2/config/tape_backup_job.rs index 7eb7c057..2eabed79 100644 --- a/src/api2/config/tape_backup_job.rs +++ b/src/api2/config/tape_backup_job.rs @@ -5,16 +5,8 @@ use ::serde::{Deserialize, Serialize}; use proxmox::api::{api, Router, RpcEnvironment, Permission}; use pbs_api_types::{ - Authid, - Userid, - TapeBackupJobConfig, - JOB_ID_SCHEMA, - DATASTORE_SCHEMA, - DRIVE_NAME_SCHEMA, - PROXMOX_CONFIG_DIGEST_SCHEMA, - SINGLE_LINE_COMMENT_SCHEMA, - MEDIA_POOL_NAME_SCHEMA, - SYNC_SCHEDULE_SCHEMA, + Authid, TapeBackupJobConfig, TapeBackupJobConfigUpdater, + JOB_ID_SCHEMA, PROXMOX_CONFIG_DIGEST_SCHEMA, }; use crate::{ @@ -156,44 +148,9 @@ pub enum DeletableProperty { id: { schema: JOB_ID_SCHEMA, }, - store: { - schema: DATASTORE_SCHEMA, - optional: true, - }, - pool: { - schema: MEDIA_POOL_NAME_SCHEMA, - optional: true, - }, - drive: { - schema: DRIVE_NAME_SCHEMA, - optional: true, - }, - "eject-media": { - description: "Eject media upon job completion.", - type: bool, - optional: true, - }, - "export-media-set": { - description: "Export media set upon job completion.", - type: bool, - optional: true, - }, - "latest-only": { - description: "Backup latest snapshots only.", - type: bool, - optional: true, - }, - "notify-user": { - optional: true, - type: Userid, - }, - comment: { - optional: true, - schema: SINGLE_LINE_COMMENT_SCHEMA, - }, - schedule: { - optional: true, - schema: SYNC_SCHEDULE_SCHEMA, + update: { + type: TapeBackupJobConfigUpdater, + flatten: true, }, delete: { description: "List of properties to delete.", @@ -216,15 +173,7 @@ pub enum DeletableProperty { /// Update the tape backup job pub fn update_tape_backup_job( id: String, - store: Option, - pool: Option, - drive: Option, - eject_media: Option, - export_media_set: Option, - latest_only: Option, - notify_user: Option, - comment: Option, - schedule: Option, + update: TapeBackupJobConfigUpdater, delete: Option>, digest: Option, ) -> Result<(), Error> { @@ -252,19 +201,19 @@ pub fn update_tape_backup_job( } } - if let Some(store) = store { data.setup.store = store; } - if let Some(pool) = pool { data.setup.pool = pool; } - if let Some(drive) = drive { data.setup.drive = drive; } + if let Some(store) = update.setup.store { data.setup.store = store; } + if let Some(pool) = update.setup.pool { data.setup.pool = pool; } + if let Some(drive) = update.setup.drive { data.setup.drive = drive; } - if eject_media.is_some() { data.setup.eject_media = eject_media; }; - if export_media_set.is_some() { data.setup.export_media_set = export_media_set; } - if latest_only.is_some() { data.setup.latest_only = latest_only; } - if notify_user.is_some() { data.setup.notify_user = notify_user; } + if update.setup.eject_media.is_some() { data.setup.eject_media = update.setup.eject_media; }; + if update.setup.export_media_set.is_some() { data.setup.export_media_set = update.setup.export_media_set; } + if update.setup.latest_only.is_some() { data.setup.latest_only = update.setup.latest_only; } + if update.setup.notify_user.is_some() { data.setup.notify_user = update.setup.notify_user; } - let schedule_changed = data.schedule != schedule; - if schedule.is_some() { data.schedule = schedule; } + let schedule_changed = data.schedule != update.schedule; + if update.schedule.is_some() { data.schedule = update.schedule; } - if let Some(comment) = comment { + if let Some(comment) = update.comment { let comment = comment.trim(); if comment.is_empty() { data.comment = None;