* [pve-devel] [PATCH proxmox-perl-rs] notify: rename PVE::RS::Notify to Proxmox::RS::Notify
@ 2023-07-24 11:26 Lukas Wagner
2023-07-24 11:26 ` [pve-devel] [PATCH cluster] notify: use renamed Proxmox::RS::Notify Lukas Wagner
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Lukas Wagner @ 2023-07-24 11:26 UTC (permalink / raw)
To: pve-devel; +Cc: Lukas Wagner, Wolfgang Bumiller
Also splitting PVE-specific context into its own file.
Suggested-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
common/pkg/Makefile | 1 +
common/src/mod.rs | 1 +
{pve-rs => common}/src/notify.rs | 123 +------------------------------
pve-rs/src/lib.rs | 6 +-
pve-rs/src/notify_context.rs | 117 +++++++++++++++++++++++++++++
5 files changed, 124 insertions(+), 124 deletions(-)
rename {pve-rs => common}/src/notify.rs (79%)
create mode 100644 pve-rs/src/notify_context.rs
diff --git a/common/pkg/Makefile b/common/pkg/Makefile
index 7232f0c..7bf669f 100644
--- a/common/pkg/Makefile
+++ b/common/pkg/Makefile
@@ -25,6 +25,7 @@ Proxmox/RS/CalendarEvent.pm:
$(PERLMOD_GENPACKAGE) \
Proxmox::RS::APT::Repositories \
Proxmox::RS::CalendarEvent \
+ Proxmox::RS::Notify \
Proxmox::RS::Subscription
all: Proxmox/RS/CalendarEvent.pm
diff --git a/common/src/mod.rs b/common/src/mod.rs
index 6c86ac0..c3574f4 100644
--- a/common/src/mod.rs
+++ b/common/src/mod.rs
@@ -1,4 +1,5 @@
pub mod apt;
mod calendar_event;
pub mod logger;
+pub mod notify;
mod subscription;
diff --git a/pve-rs/src/notify.rs b/common/src/notify.rs
similarity index 79%
rename from pve-rs/src/notify.rs
rename to common/src/notify.rs
index f6d70d0..c8ca533 100644
--- a/pve-rs/src/notify.rs
+++ b/common/src/notify.rs
@@ -1,123 +1,4 @@
-use std::path::Path;
-
-use log;
-
-use proxmox_notify::context::Context;
-
-// Some helpers borrowed and slightly adapted from `proxmox-mail-forward`
-
-fn normalize_for_return(s: Option<&str>) -> Option<String> {
- match s?.trim() {
- "" => None,
- s => Some(s.to_string()),
- }
-}
-
-fn attempt_file_read<P: AsRef<Path>>(path: P) -> Option<String> {
- match proxmox_sys::fs::file_read_optional_string(path) {
- Ok(contents) => contents,
- Err(err) => {
- log::error!("{err}");
- None
- }
- }
-}
-
-fn lookup_mail_address(content: &str, user: &str) -> Option<String> {
- normalize_for_return(content.lines().find_map(|line| {
- let fields: Vec<&str> = line.split(':').collect();
- #[allow(clippy::get_first)] // to keep expression style consistent
- match fields.get(0)?.trim() == "user" && fields.get(1)?.trim() == user {
- true => fields.get(6).copied(),
- false => None,
- }
- }))
-}
-
-fn lookup_datacenter_config_key(content: &str, key: &str) -> Option<String> {
- let key_prefix = format!("{key}:");
- normalize_for_return(
- content
- .lines()
- .find_map(|line| line.strip_prefix(&key_prefix)),
- )
-}
-
-#[derive(Debug)]
-struct PVEContext;
-
-impl Context for PVEContext {
- fn lookup_email_for_user(&self, user: &str) -> Option<String> {
- let content = attempt_file_read("/etc/pve/user.cfg");
- content.and_then(|content| lookup_mail_address(&content, user))
- }
-
- fn default_sendmail_author(&self) -> String {
- "Proxmox VE".into()
- }
-
- fn default_sendmail_from(&self) -> String {
- let content = attempt_file_read("/etc/pve/datacenter.cfg");
- content
- .and_then(|content| lookup_datacenter_config_key(&content, "mail_from"))
- .unwrap_or_else(|| String::from("root"))
- }
-
- fn http_proxy_config(&self) -> Option<String> {
- let content = attempt_file_read("/etc/pve/datacenter.cfg");
- content.and_then(|content| lookup_datacenter_config_key(&content, "http_proxy"))
- }
-}
-
-#[cfg(test)]
-mod tests {
- use crate::notify::{lookup_datacenter_config_key, lookup_mail_address};
-
- const USER_CONFIG: &str = "
-user:root@pam:1:0:::root@example.com:::
-user:test@pve:1:0:::test@example.com:::
-user:no-mail@pve:1:0::::::
- ";
-
- #[test]
- fn test_parse_mail() {
- assert_eq!(
- lookup_mail_address(USER_CONFIG, "root@pam"),
- Some("root@example.com".to_string())
- );
- assert_eq!(
- lookup_mail_address(USER_CONFIG, "test@pve"),
- Some("test@example.com".to_string())
- );
- assert_eq!(lookup_mail_address(USER_CONFIG, "no-mail@pve"), None);
- }
-
- const DC_CONFIG: &str = "
-email_from: user@example.com
-http_proxy: http://localhost:1234
-keyboard: en-us
-";
- #[test]
- fn test_parse_dc_config() {
- assert_eq!(
- lookup_datacenter_config_key(DC_CONFIG, "email_from"),
- Some("user@example.com".to_string())
- );
- assert_eq!(
- lookup_datacenter_config_key(DC_CONFIG, "http_proxy"),
- Some("http://localhost:1234".to_string())
- );
- assert_eq!(lookup_datacenter_config_key(DC_CONFIG, "foo"), None);
- }
-}
-
-static CONTEXT: PVEContext = PVEContext;
-
-pub fn init() {
- proxmox_notify::context::set_context(&CONTEXT)
-}
-
-#[perlmod::package(name = "PVE::RS::Notify")]
+#[perlmod::package(name = "Proxmox::RS::Notify")]
mod export {
use anyhow::{bail, Error};
use perlmod::Value;
@@ -141,7 +22,7 @@ mod export {
config: Mutex<Config>,
}
- perlmod::declare_magic!(Box<NotificationConfig> : &NotificationConfig as "PVE::RS::Notify");
+ perlmod::declare_magic!(Box<NotificationConfig> : &NotificationConfig as "Proxmox::RS::Notify");
/// Support `dclone` so this can be put into the `ccache` of `PVE::Cluster`.
#[export(name = "STORABLE_freeze", raw_return)]
diff --git a/pve-rs/src/lib.rs b/pve-rs/src/lib.rs
index 49483d7..d1915c9 100644
--- a/pve-rs/src/lib.rs
+++ b/pve-rs/src/lib.rs
@@ -4,18 +4,18 @@
pub mod common;
pub mod apt;
-pub mod notify;
+pub mod notify_context;
pub mod openid;
pub mod resource_scheduling;
pub mod tfa;
#[perlmod::package(name = "Proxmox::Lib::PVE", lib = "pve_rs")]
mod export {
- use crate::{common, notify};
+ use crate::{common, notify_context};
#[export]
pub fn init() {
common::logger::init("PVE_LOG", "info");
- notify::init();
+ notify_context::init();
}
}
diff --git a/pve-rs/src/notify_context.rs b/pve-rs/src/notify_context.rs
new file mode 100644
index 0000000..48623fd
--- /dev/null
+++ b/pve-rs/src/notify_context.rs
@@ -0,0 +1,117 @@
+use log;
+use std::path::Path;
+
+use proxmox_notify::context::Context;
+
+// Some helpers borrowed and slightly adapted from `proxmox-mail-forward`
+
+fn normalize_for_return(s: Option<&str>) -> Option<String> {
+ match s?.trim() {
+ "" => None,
+ s => Some(s.to_string()),
+ }
+}
+
+fn attempt_file_read<P: AsRef<Path>>(path: P) -> Option<String> {
+ match proxmox_sys::fs::file_read_optional_string(path) {
+ Ok(contents) => contents,
+ Err(err) => {
+ log::error!("{err}");
+ None
+ }
+ }
+}
+
+fn lookup_mail_address(content: &str, user: &str) -> Option<String> {
+ normalize_for_return(content.lines().find_map(|line| {
+ let fields: Vec<&str> = line.split(':').collect();
+ #[allow(clippy::get_first)] // to keep expression style consistent
+ match fields.get(0)?.trim() == "user" && fields.get(1)?.trim() == user {
+ true => fields.get(6).copied(),
+ false => None,
+ }
+ }))
+}
+
+fn lookup_datacenter_config_key(content: &str, key: &str) -> Option<String> {
+ let key_prefix = format!("{key}:");
+ normalize_for_return(
+ content
+ .lines()
+ .find_map(|line| line.strip_prefix(&key_prefix)),
+ )
+}
+
+#[derive(Debug)]
+struct PVEContext;
+
+impl Context for PVEContext {
+ fn lookup_email_for_user(&self, user: &str) -> Option<String> {
+ let content = attempt_file_read("/etc/pve/user.cfg");
+ content.and_then(|content| lookup_mail_address(&content, user))
+ }
+
+ fn default_sendmail_author(&self) -> String {
+ "Proxmox VE".into()
+ }
+
+ fn default_sendmail_from(&self) -> String {
+ let content = attempt_file_read("/etc/pve/datacenter.cfg");
+ content
+ .and_then(|content| lookup_datacenter_config_key(&content, "mail_from"))
+ .unwrap_or_else(|| String::from("root"))
+ }
+
+ fn http_proxy_config(&self) -> Option<String> {
+ let content = attempt_file_read("/etc/pve/datacenter.cfg");
+ content.and_then(|content| lookup_datacenter_config_key(&content, "http_proxy"))
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ const USER_CONFIG: &str = "
+user:root@pam:1:0:::root@example.com:::
+user:test@pve:1:0:::test@example.com:::
+user:no-mail@pve:1:0::::::
+ ";
+
+ #[test]
+ fn test_parse_mail() {
+ assert_eq!(
+ lookup_mail_address(USER_CONFIG, "root@pam"),
+ Some("root@example.com".to_string())
+ );
+ assert_eq!(
+ lookup_mail_address(USER_CONFIG, "test@pve"),
+ Some("test@example.com".to_string())
+ );
+ assert_eq!(lookup_mail_address(USER_CONFIG, "no-mail@pve"), None);
+ }
+
+ const DC_CONFIG: &str = "
+email_from: user@example.com
+http_proxy: http://localhost:1234
+keyboard: en-us
+";
+ #[test]
+ fn test_parse_dc_config() {
+ assert_eq!(
+ lookup_datacenter_config_key(DC_CONFIG, "email_from"),
+ Some("user@example.com".to_string())
+ );
+ assert_eq!(
+ lookup_datacenter_config_key(DC_CONFIG, "http_proxy"),
+ Some("http://localhost:1234".to_string())
+ );
+ assert_eq!(lookup_datacenter_config_key(DC_CONFIG, "foo"), None);
+ }
+}
+
+static CONTEXT: PVEContext = PVEContext;
+
+pub fn init() {
+ proxmox_notify::context::set_context(&CONTEXT)
+}
--
2.39.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [pve-devel] [PATCH cluster] notify: use renamed Proxmox::RS::Notify
2023-07-24 11:26 [pve-devel] [PATCH proxmox-perl-rs] notify: rename PVE::RS::Notify to Proxmox::RS::Notify Lukas Wagner
@ 2023-07-24 11:26 ` Lukas Wagner
2023-07-24 13:02 ` [pve-devel] partially-applied: " Wolfgang Bumiller
2023-07-24 11:26 ` [pve-devel] [PATCH manager] vzdump: use <name> as a convention for virtual endpoints/groups Lukas Wagner
2023-07-24 12:40 ` [pve-devel] partially-applied: [PATCH proxmox-perl-rs] notify: rename PVE::RS::Notify to Proxmox::RS::Notify Wolfgang Bumiller
2 siblings, 1 reply; 6+ messages in thread
From: Lukas Wagner @ 2023-07-24 11:26 UTC (permalink / raw)
To: pve-devel; +Cc: Lukas Wagner, Wolfgang Bugmiller
Suggested-by: Wolfgang Bugmiller <w.bumiller@proxmox.com>
Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
src/PVE/Notify.pm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/PVE/Notify.pm b/src/PVE/Notify.pm
index 48ef772..0464362 100644
--- a/src/PVE/Notify.pm
+++ b/src/PVE/Notify.pm
@@ -4,7 +4,7 @@ use strict;
use warnings;
use PVE::Cluster qw(cfs_register_file cfs_read_file cfs_lock_file cfs_write_file);
-use PVE::RS::Notify;
+use Proxmox::RS::Notify;
cfs_register_file(
'notifications.cfg',
@@ -46,7 +46,7 @@ sub read_config {
my $config = cfs_read_file('notifications.cfg');
my $priv_config = cfs_read_file('priv/notifications.cfg');
- my $notification_config = PVE::RS::Notify->parse_config($config, $priv_config);
+ my $notification_config = Proxmox::RS::Notify->parse_config($config, $priv_config);
eval {
# This target should always be available...
--
2.39.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [pve-devel] [PATCH manager] vzdump: use <name> as a convention for virtual endpoints/groups
2023-07-24 11:26 [pve-devel] [PATCH proxmox-perl-rs] notify: rename PVE::RS::Notify to Proxmox::RS::Notify Lukas Wagner
2023-07-24 11:26 ` [pve-devel] [PATCH cluster] notify: use renamed Proxmox::RS::Notify Lukas Wagner
@ 2023-07-24 11:26 ` Lukas Wagner
2023-07-26 9:55 ` Lukas Wagner
2023-07-24 12:40 ` [pve-devel] partially-applied: [PATCH proxmox-perl-rs] notify: rename PVE::RS::Notify to Proxmox::RS::Notify Wolfgang Bumiller
2 siblings, 1 reply; 6+ messages in thread
From: Lukas Wagner @ 2023-07-24 11:26 UTC (permalink / raw)
To: pve-devel; +Cc: Lukas Wagner, Wolfgang Bumiller
Virtual (or anonymous) endpoints/groups are used for sending
one-off notifications to a target that does not exist in the
config.
VZDump uses this to send out notification mails to those addresses
configured by the `mailto` parameter.
Suggested-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
---
PVE/VZDump.pm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/PVE/VZDump.pm b/PVE/VZDump.pm
index 7dc9f31e..2671e3b1 100644
--- a/PVE/VZDump.pm
+++ b/PVE/VZDump.pm
@@ -501,10 +501,10 @@ sub send_notification {
my $notification_config = PVE::Notify::read_config();
if ($mailto && scalar(@$mailto)) {
- # <, >, @ is not allowed in endpoint names, but only it is only
+ # <, >, @ are not allowed in endpoint names, but that is only
# verified once the config is serialized. That means that
# we can rely on that fact that no other endpoint with this name exists.
- my $endpoint_name = "mail-to-<" . join(",", @$mailto) . ">";
+ my $endpoint_name = "<mail-to-" . join(",", @$mailto) . ">";
$notification_config->add_sendmail_endpoint(
$endpoint_name,
$mailto,
@@ -520,7 +520,7 @@ sub send_notification {
push @$endpoints, $target;
}
- $target = "group-$endpoint_name";
+ $target = "<group-$endpoint_name>";
$notification_config->add_group(
$target,
$endpoints,
--
2.39.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [pve-devel] partially-applied: [PATCH proxmox-perl-rs] notify: rename PVE::RS::Notify to Proxmox::RS::Notify
2023-07-24 11:26 [pve-devel] [PATCH proxmox-perl-rs] notify: rename PVE::RS::Notify to Proxmox::RS::Notify Lukas Wagner
2023-07-24 11:26 ` [pve-devel] [PATCH cluster] notify: use renamed Proxmox::RS::Notify Lukas Wagner
2023-07-24 11:26 ` [pve-devel] [PATCH manager] vzdump: use <name> as a convention for virtual endpoints/groups Lukas Wagner
@ 2023-07-24 12:40 ` Wolfgang Bumiller
2 siblings, 0 replies; 6+ messages in thread
From: Wolfgang Bumiller @ 2023-07-24 12:40 UTC (permalink / raw)
To: Lukas Wagner; +Cc: pve-devel
applied perl-rs part
^ permalink raw reply [flat|nested] 6+ messages in thread
* [pve-devel] partially-applied: [PATCH cluster] notify: use renamed Proxmox::RS::Notify
2023-07-24 11:26 ` [pve-devel] [PATCH cluster] notify: use renamed Proxmox::RS::Notify Lukas Wagner
@ 2023-07-24 13:02 ` Wolfgang Bumiller
0 siblings, 0 replies; 6+ messages in thread
From: Wolfgang Bumiller @ 2023-07-24 13:02 UTC (permalink / raw)
To: Lukas Wagner; +Cc: pve-devel
applied this one as well now, thanks
Also updated the dependency versions in d/control (and added the
versioned libproxmox-rs-perl dependency since `Proxmox::RS::Notify`
comes from there).
On Mon, Jul 24, 2023 at 01:26:58PM +0200, Lukas Wagner wrote:
> Suggested-by: Wolfgang Bugmiller <w.bumiller@proxmox.com>
> Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
> ---
> src/PVE/Notify.pm | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/PVE/Notify.pm b/src/PVE/Notify.pm
> index 48ef772..0464362 100644
> --- a/src/PVE/Notify.pm
> +++ b/src/PVE/Notify.pm
> @@ -4,7 +4,7 @@ use strict;
> use warnings;
>
> use PVE::Cluster qw(cfs_register_file cfs_read_file cfs_lock_file cfs_write_file);
> -use PVE::RS::Notify;
> +use Proxmox::RS::Notify;
>
> cfs_register_file(
> 'notifications.cfg',
> @@ -46,7 +46,7 @@ sub read_config {
> my $config = cfs_read_file('notifications.cfg');
> my $priv_config = cfs_read_file('priv/notifications.cfg');
>
> - my $notification_config = PVE::RS::Notify->parse_config($config, $priv_config);
> + my $notification_config = Proxmox::RS::Notify->parse_config($config, $priv_config);
>
> eval {
> # This target should always be available...
> --
> 2.39.2
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [pve-devel] [PATCH manager] vzdump: use <name> as a convention for virtual endpoints/groups
2023-07-24 11:26 ` [pve-devel] [PATCH manager] vzdump: use <name> as a convention for virtual endpoints/groups Lukas Wagner
@ 2023-07-26 9:55 ` Lukas Wagner
0 siblings, 0 replies; 6+ messages in thread
From: Lukas Wagner @ 2023-07-26 9:55 UTC (permalink / raw)
To: pve-devel
Note, this commit has now been included in v5 of the original patch series.
On 7/24/23 13:26, Lukas Wagner wrote:
> Virtual (or anonymous) endpoints/groups are used for sending
> one-off notifications to a target that does not exist in the
> config.
>
> VZDump uses this to send out notification mails to those addresses
> configured by the `mailto` parameter.
>
--
- Lukas
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-07-26 9:55 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-24 11:26 [pve-devel] [PATCH proxmox-perl-rs] notify: rename PVE::RS::Notify to Proxmox::RS::Notify Lukas Wagner
2023-07-24 11:26 ` [pve-devel] [PATCH cluster] notify: use renamed Proxmox::RS::Notify Lukas Wagner
2023-07-24 13:02 ` [pve-devel] partially-applied: " Wolfgang Bumiller
2023-07-24 11:26 ` [pve-devel] [PATCH manager] vzdump: use <name> as a convention for virtual endpoints/groups Lukas Wagner
2023-07-26 9:55 ` Lukas Wagner
2023-07-24 12:40 ` [pve-devel] partially-applied: [PATCH proxmox-perl-rs] notify: rename PVE::RS::Notify to Proxmox::RS::Notify Wolfgang Bumiller
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal