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 CE8999B19F for ; Wed, 24 May 2023 15:58:05 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id AB4761F831 for ; Wed, 24 May 2023 15:57:42 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (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 firstgate.proxmox.com (Proxmox) with ESMTPS for ; Wed, 24 May 2023 15:57:40 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id B132646E1A for ; Wed, 24 May 2023 15:57:35 +0200 (CEST) From: Lukas Wagner To: pve-devel@lists.proxmox.com Date: Wed, 24 May 2023 15:56:49 +0200 Message-Id: <20230524135649.934881-43-l.wagner@proxmox.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524135649.934881-1-l.wagner@proxmox.com> References: <20230524135649.934881-1-l.wagner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.154 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy 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 T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [PATCH v2 pve-ha-manager 42/42] manager: send notifications via new notification module X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 May 2023 13:58:05 -0000 ... instead of using sendmail directly Signed-off-by: Lukas Wagner --- src/PVE/HA/Env.pm | 6 ++--- src/PVE/HA/Env/PVE2.pm | 27 ++++++++++++++++++--- src/PVE/HA/NodeStatus.pm | 52 ++++++++++++++++++++++++---------------- src/PVE/HA/Sim/Env.pm | 10 ++++++-- 4 files changed, 66 insertions(+), 29 deletions(-) diff --git a/src/PVE/HA/Env.pm b/src/PVE/HA/Env.pm index 16603ec..b7060a4 100644 --- a/src/PVE/HA/Env.pm +++ b/src/PVE/HA/Env.pm @@ -144,10 +144,10 @@ sub log { return $self->{plug}->log($level, @args); } -sub sendmail { - my ($self, $subject, $text) = @_; +sub send_notification { + my ($self, $subject, $text, $properties) = @_; - return $self->{plug}->sendmail($subject, $text); + return $self->{plug}->send_notification($subject, $text, $properties); } # acquire a cluster wide manager lock diff --git a/src/PVE/HA/Env/PVE2.pm b/src/PVE/HA/Env/PVE2.pm index f6ebfeb..d818812 100644 --- a/src/PVE/HA/Env/PVE2.pm +++ b/src/PVE/HA/Env/PVE2.pm @@ -13,6 +13,7 @@ use PVE::Cluster qw(cfs_register_file cfs_read_file cfs_write_file cfs_lock_file use PVE::DataCenterConfig; use PVE::INotify; use PVE::RPCEnvironment; +use PVE::Notify; use PVE::HA::Tools ':exit_codes'; use PVE::HA::Env; @@ -219,8 +220,8 @@ sub log { syslog($level, $msg); } -sub sendmail { - my ($self, $subject, $text) = @_; +sub send_notification { + my ($self, $subject, $text, $properties) = @_; # Leave it to postfix to append the correct hostname my $mailfrom = 'root'; @@ -228,7 +229,27 @@ sub sendmail { # mail to the address configured in the datacenter my $mailto = 'root'; - PVE::Tools::sendmail($mailto, $subject, $text, undef, $mailfrom); + # Add ephemeral sendmail endpoint/channel for backwards compatibility + # TODO: Make notification channel configurable, then the + # temporary endpoint/channel should not be necessary any more. + my $notification_config = PVE::Notify::read_config(); + $notification_config->add_sendmail_endpoint( + 'anonymous-ha-manager-sendmail', + [$mailto], + $mailfrom, + undef + ); + my $channel = 'mail'; + + $notification_config->add_channel($channel, ['anonymous-ha-manager-sendmail']); + + PVE::Notify::warning( + $channel, + $subject, + $text, + $properties, + $notification_config + ); } my $last_lock_status_hash = {}; diff --git a/src/PVE/HA/NodeStatus.pm b/src/PVE/HA/NodeStatus.pm index ee5be8e..b264a36 100644 --- a/src/PVE/HA/NodeStatus.pm +++ b/src/PVE/HA/NodeStatus.pm @@ -188,35 +188,45 @@ sub update { } } -# assembles a commont text for fence emails -my $send_fence_state_email = sub { - my ($self, $subject_prefix, $subject, $node) = @_; - - my $haenv = $self->{haenv}; - - my $mail_text = <{haenv}; my $status = $haenv->read_manager_status(); - my $data = { manager_status => $status, node_status => $self->{status} }; - - $mail_text .= to_json($data, { pretty => 1, canonical => 1}); - $haenv->sendmail($mail_subject, $mail_text); + my $notification_properties = { + "status-data" => { + manager_status => $status, + node_status => $self->{status} + }, + "node" => $node, + "subject-prefix" => $subject_prefix, + "subject" => $subject, + }; + + $haenv->send_notification( + $subject_template, + $body_template, + $notification_properties + ); }; diff --git a/src/PVE/HA/Sim/Env.pm b/src/PVE/HA/Sim/Env.pm index c6ea73c..d3aea8d 100644 --- a/src/PVE/HA/Sim/Env.pm +++ b/src/PVE/HA/Sim/Env.pm @@ -288,8 +288,14 @@ sub log { printf("%-5s %5d %12s: $msg\n", $level, $time, "$self->{nodename}/$self->{log_id}"); } -sub sendmail { - my ($self, $subject, $text) = @_; +sub send_notification { + my ($self, $subject, $text, $properties) = @_; + + # The template for the subject is "{{subject-prefix}}: {{subject}}" + # We have to perform poor-man's template rendering to pass the test cases. + + $subject = $subject =~ s/\{\{subject-prefix}}/$properties->{"subject-prefix"}/r; + $subject = $subject =~ s/\{\{subject}}/$properties->{"subject"}/r; # only log subject, do not spam the logs $self->log('email', $subject); -- 2.30.2