From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id CB0026592B for ; Wed, 4 Nov 2020 11:32:59 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id BEE93C3B6 for ; Wed, 4 Nov 2020 11:32:29 +0100 (CET) Received: from elsa.proxmox.com (212-186-127-178.static.upcbusiness.at [212.186.127.178]) by firstgate.proxmox.com (Proxmox) with ESMTP id AF9BCC3AD for ; Wed, 4 Nov 2020 11:32:28 +0100 (CET) Received: by elsa.proxmox.com (Postfix, from userid 0) id 71ACDAE985C; Wed, 4 Nov 2020 11:32:28 +0100 (CET) From: Dietmar Maurer To: pbs-devel@lists.proxmox.com Date: Wed, 4 Nov 2020 11:32:14 +0100 Message-Id: <20201104103215.14262-1-dietmar@proxmox.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -1.083 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [datastore.rs, mod.rs] Subject: [pbs-devel] [PATCH proxmox-backup 1/2] config: allow to configure who receives job notify emails X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Nov 2020 10:32:59 -0000 --- src/api2/config/datastore.rs | 27 +++++++++++++++++++++++++++ src/api2/types/mod.rs | 13 +++++++++++++ src/config/datastore.rs | 14 ++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/src/api2/config/datastore.rs b/src/api2/config/datastore.rs index 1da82593..8848c1e3 100644 --- a/src/api2/config/datastore.rs +++ b/src/api2/config/datastore.rs @@ -68,6 +68,14 @@ pub fn list_datastores( optional: true, schema: SINGLE_LINE_COMMENT_SCHEMA, }, + "notify-user": { + optional: true, + type: Userid, + }, + "notify": { + optional: true, + type: Notify, + }, "gc-schedule": { optional: true, schema: GC_SCHEDULE_SCHEMA, @@ -187,6 +195,10 @@ pub enum DeletableProperty { keep_monthly, /// Delete the keep-yearly property keep_yearly, + /// Delete the notify-user property + notify_user, + /// Delete the notify property + notify, } #[api( @@ -200,6 +212,14 @@ pub enum DeletableProperty { optional: true, schema: SINGLE_LINE_COMMENT_SCHEMA, }, + "notify-user": { + optional: true, + type: Userid, + }, + "notify": { + optional: true, + type: Notify, + }, "gc-schedule": { optional: true, schema: GC_SCHEDULE_SCHEMA, @@ -262,6 +282,8 @@ pub fn update_datastore( keep_weekly: Option, keep_monthly: Option, keep_yearly: Option, + notify: Option, + notify_user: Option, delete: Option>, digest: Option, ) -> Result<(), Error> { @@ -290,6 +312,8 @@ pub fn update_datastore( DeletableProperty::keep_weekly => { data.keep_weekly = None; }, DeletableProperty::keep_monthly => { data.keep_monthly = None; }, DeletableProperty::keep_yearly => { data.keep_yearly = None; }, + DeletableProperty::notify => { data.notify = None; }, + DeletableProperty::notify_user => { data.notify_user = None; }, } } } @@ -322,6 +346,9 @@ pub fn update_datastore( if keep_monthly.is_some() { data.keep_monthly = keep_monthly; } if keep_yearly.is_some() { data.keep_yearly = keep_yearly; } + if notify.is_some() { data.notify = notify; } + if notify_user.is_some() { data.notify_user = notify_user; } + config.set_data(&name, "datastore", &data)?; datastore::save_config(&config)?; diff --git a/src/api2/types/mod.rs b/src/api2/types/mod.rs index 16c299bc..7ee89f57 100644 --- a/src/api2/types/mod.rs +++ b/src/api2/types/mod.rs @@ -1154,3 +1154,16 @@ pub struct APTUpdateInfo { /// URL under which the package's changelog can be retrieved pub change_log_url: String, } + +#[api()] +#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "lowercase")] +/// When do we send notifications +pub enum Notify { + /// Never send notification + Never, + /// Send notifications for failed and sucessful jobs + Always, + /// Send notifications for failed jobs only + Error, +} diff --git a/src/config/datastore.rs b/src/config/datastore.rs index ffc81276..7e38a783 100644 --- a/src/config/datastore.rs +++ b/src/config/datastore.rs @@ -32,6 +32,14 @@ pub const DIR_NAME_SCHEMA: Schema = StringSchema::new("Directory name").schema() path: { schema: DIR_NAME_SCHEMA, }, + "notify-user": { + optional: true, + type: Userid, + }, + "notify": { + optional: true, + type: Notify, + }, comment: { optional: true, schema: SINGLE_LINE_COMMENT_SCHEMA, @@ -101,6 +109,12 @@ pub struct DataStoreConfig { /// If enabled, all backups will be verified right after completion. #[serde(skip_serializing_if="Option::is_none")] pub verify_new: Option, + /// Send job email notification to this user + #[serde(skip_serializing_if="Option::is_none")] + pub notify_user: Option, + /// Send notification only for job errors + #[serde(skip_serializing_if="Option::is_none")] + pub notify: Option, } fn init() -> SectionConfig { -- 2.20.1