mirror of
https://git.proxmox.com/git/proxmox-perl-rs
synced 2025-05-22 21:51:38 +00:00
pve-rs: common: send apt update notification via proxmox-notify
For PMG we for now only provide an empty stub and warn to syslog - we need basic notification system integration there first. On PMG, we still use a pure Perl implementation at the moment, so this should not be an issue unless we change that. Signed-off-by: Lukas Wagner <l.wagner@proxmox.com>
This commit is contained in:
parent
89d9debadb
commit
6789b14986
@ -63,8 +63,9 @@ pub mod export {
|
||||
proxmox_apt::update_database(
|
||||
apt_state_file,
|
||||
&options,
|
||||
|_updates: &[&APTUpdateInfo]| -> Result<(), Error> {
|
||||
|updates: &[&APTUpdateInfo]| -> Result<(), Error> {
|
||||
// fixme: howto send notifgications?
|
||||
crate::send_updates_available(updates)?;
|
||||
Ok(())
|
||||
},
|
||||
)
|
||||
|
@ -19,6 +19,7 @@ env_logger = "0.10"
|
||||
hex = "0.4"
|
||||
http = "0.2.7"
|
||||
libc = "0.2"
|
||||
log = "0.4.17"
|
||||
nix = "0.26"
|
||||
openssl = "0.10.40"
|
||||
serde = "1.0"
|
||||
|
@ -6,6 +6,10 @@ pub mod apt;
|
||||
pub mod csr;
|
||||
pub mod tfa;
|
||||
|
||||
use anyhow::Error;
|
||||
|
||||
use proxmox_apt_api_types::APTUpdateInfo;
|
||||
|
||||
#[perlmod::package(name = "Proxmox::Lib::PMG", lib = "pmg_rs")]
|
||||
mod export {
|
||||
use crate::common;
|
||||
@ -23,3 +27,9 @@ mod export {
|
||||
perlmod::ffi::use_safe_putenv(true);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn send_updates_available(_updates: &[&APTUpdateInfo]) -> Result<(), Error> {
|
||||
log::warn!("update notifications are not implemented for PMG yet");
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
@ -8,6 +8,14 @@ pub mod openid;
|
||||
pub mod resource_scheduling;
|
||||
pub mod tfa;
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
||||
use anyhow::Error;
|
||||
|
||||
use proxmox_apt_api_types::APTUpdateInfo;
|
||||
use proxmox_notify::{Config, Notification, Severity};
|
||||
use serde_json::json;
|
||||
|
||||
#[perlmod::package(name = "Proxmox::Lib::PVE", lib = "pve_rs")]
|
||||
mod export {
|
||||
use proxmox_notify::context::pve::PVE_CONTEXT;
|
||||
@ -20,3 +28,59 @@ mod export {
|
||||
proxmox_notify::context::set_context(&PVE_CONTEXT);
|
||||
}
|
||||
}
|
||||
|
||||
fn send_notification(notification: &Notification) -> Result<(), Error> {
|
||||
let config = proxmox_sys::fs::file_read_optional_string("/etc/pve/notifications.cfg")?
|
||||
.unwrap_or_default();
|
||||
let private_config =
|
||||
proxmox_sys::fs::file_read_optional_string("/etc/pve/priv/notifications.cfg")?
|
||||
.unwrap_or_default();
|
||||
|
||||
let config = Config::new(&config, &private_config)?;
|
||||
|
||||
proxmox_notify::api::common::send(&config, notification)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn send_updates_available(updates: &[&APTUpdateInfo]) -> Result<(), Error> {
|
||||
let hostname = proxmox_sys::nodename().to_string();
|
||||
|
||||
let metadata = HashMap::from([
|
||||
("hostname".into(), hostname.clone()),
|
||||
("type".into(), "package-updates".into()),
|
||||
]);
|
||||
|
||||
// The template uses the `table` handlebars helper, so
|
||||
// we need to form the approriate data structure first.
|
||||
let update_table = json!({
|
||||
"schema": {
|
||||
"columns": [
|
||||
{
|
||||
"label": "Package",
|
||||
"id": "Package",
|
||||
},
|
||||
{
|
||||
"label": "Old Version",
|
||||
"id": "OldVersion",
|
||||
},
|
||||
{
|
||||
"label": "New Version",
|
||||
"id": "Version",
|
||||
}
|
||||
],
|
||||
},
|
||||
"data": updates,
|
||||
});
|
||||
|
||||
let template_data = json!({
|
||||
"hostname": hostname,
|
||||
"updates": update_table,
|
||||
});
|
||||
|
||||
let notification =
|
||||
Notification::from_template(Severity::Info, "package-updates", template_data, metadata);
|
||||
|
||||
send_notification(¬ification)?;
|
||||
Ok(())
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user