[pve-devel] [PATCH many 00/27] overhaul notification system, use matchers instead of filters

Lukas Wagner l.wagner at proxmox.com
Tue Nov 7 11:18:00 CET 2023


This series replaces notification filters and groups with notification
matchers. Instead of having a per-notification event target/policy 
setting (at the moment stored in datacenter.cfg and jobs.cfg), this 
shifts the routing part into the matcher completely.

Config example, I think this demonstrates the principle quite nicely:

sendmail: default-target
  mailto-user root at pam

matcher: fencing-for-node
  mode all       # all match-directives have to match, default
  match-field exact:hostname=pve.example.com
  match-field exact:type=fencing
  target default-target


--> Send all fencing notifications for a certain host to a certain 
target.

Right now, there are three different match-directives:
  - match-field: exact/regex match for notification metadata fields
  - match-severity: match notification severities (info,notice,warning,error)
  - match-calender: match notification timestamp
    example: match-calendar mon..fri 8-12

The old target/policy based notification was already in the pvetest repository.
Thus we take special care that there is no breakage when the notification
system encounters old settings/configuration keys. It will clean them
out/migrate them if possible.

These changes also modify pve-manager's postinst hook. It will now 
create a default config if /etc/pve/notifications.cfg does not exist yet.

What I tested:
  - Made sure existing notifications continue to work
    (replication/fencing in a cluster setup, backups, system updates)
  - Made sure that the 'legacy' mailto parameter for backups also works
  - Tested the new UI for notification matchers
  - Tested postinst hook for pve-manager
  - Tested whether old config keys for filters and groups break anything

@TESTERS:
I have built packages for these changes to ease testing, they are 
on nasi: packages/notifications

Followup work in the near future:
  - Adapt documentation, this will follow asap
  - UI code for notification matcher config is a bit messy, I will
    send a cleanup-patch - main focus right now was to get it working
  - Mark 'mailto' in backup jobs as deprecated in UI - while also
    migrating automatically to the new system (create an endpoint/matcher
    when creating/updating a backup job)



proxmox:

Lukas Wagner (6):
  notify: introduce Error::Generic
  notify: factor out notification content into its own type
  notify: replace filters and groups with matcher-based system
  notify: add calendar matcher
  notify: matcher: introduce common trait for match directives
  notify: let a matcher always match if it has no matching directives

 proxmox-notify/Cargo.toml                |   2 +
 proxmox-notify/examples/render.rs        |   4 +-
 proxmox-notify/src/api/common.rs         |   6 +-
 proxmox-notify/src/api/filter.rs         | 231 -----------
 proxmox-notify/src/api/gotify.rs         |  16 -
 proxmox-notify/src/api/group.rs          | 259 ------------
 proxmox-notify/src/api/matcher.rs        | 260 ++++++++++++
 proxmox-notify/src/api/mod.rs            | 115 +-----
 proxmox-notify/src/api/sendmail.rs       |  15 -
 proxmox-notify/src/config.rs             |  34 +-
 proxmox-notify/src/endpoints/gotify.rs   |  41 +-
 proxmox-notify/src/endpoints/sendmail.rs |  76 ++--
 proxmox-notify/src/filter.rs             | 193 +--------
 proxmox-notify/src/group.rs              |  40 +-
 proxmox-notify/src/lib.rs                | 387 ++++++++----------
 proxmox-notify/src/matcher.rs            | 484 +++++++++++++++++++++++
 proxmox-notify/src/renderer/mod.rs       |  15 +-
 proxmox-notify/src/schema.rs             |  11 +-
 18 files changed, 1046 insertions(+), 1143 deletions(-)
 delete mode 100644 proxmox-notify/src/api/filter.rs
 delete mode 100644 proxmox-notify/src/api/group.rs
 create mode 100644 proxmox-notify/src/api/matcher.rs
 create mode 100644 proxmox-notify/src/matcher.rs


proxmox-perl-rs:

Lukas Wagner (1):
  notify: adapt to new matcher-based notification routing

 common/src/notify.rs | 167 +++++++++++++------------------------------
 1 file changed, 50 insertions(+), 117 deletions(-)


pve-cluster:

Lukas Wagner (1):
  notify: adapt to matcher based notification system

 src/PVE/Notify.pm | 101 +++++++++++++++++++++-------------------------
 1 file changed, 47 insertions(+), 54 deletions(-)


pve-guest-common:

Lukas Wagner (1):
  vzdump: deprecate mailto/mailnotification/notification-{target,policy}

 src/PVE/VZDump/Common.pm | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)


pve-ha-manager:

Lukas Wagner (1):
  env: switch to matcher-based notification system

 src/PVE/HA/Env/PVE2.pm   | 10 ++--------
 src/PVE/HA/NodeStatus.pm | 11 +++++++++--
 2 files changed, 11 insertions(+), 10 deletions(-)


pve-manager:

Lukas Wagner (10):
  api: notification: remove notification groups
  api: notification: add new matcher-based notification API
  ui: dc: remove unneeded notification events panel
  vzdump: adapt to new matcher based notification system
  api: apt: adapt to matcher-based notifications
  api: replication: adapt to matcher-based notification system
  debian: postinst: create notifications.cfg if it does not exist
  test: fix vzdump notification test
  ui: vzdump: remove left-overs from target/policy based notifications
  ui: dc: config: show notification panel again

 PVE/API2/APT.pm                               |  27 +-
 PVE/API2/Cluster/Notifications.pm             | 462 ++++--------------
 PVE/API2/Replication.pm                       |  25 +-
 PVE/API2/VZDump.pm                            |   8 +-
 PVE/VZDump.pm                                 |  40 +-
 debian/postinst                               |  28 ++
 test/vzdump_notification_test.pl              |   6 +-
 www/manager6/Makefile                         |   4 -
 www/manager6/dc/Backup.js                     |  81 +--
 www/manager6/dc/Config.js                     |  28 +-
 www/manager6/dc/NotificationEvents.js         | 276 -----------
 .../form/NotificationPolicySelector.js        |   1 -
 www/manager6/window/Backup.js                 |  35 +-
 13 files changed, 186 insertions(+), 835 deletions(-)
 delete mode 100644 www/manager6/dc/NotificationEvents.js


proxmox-widget-toolkit:

Lukas Wagner (7):
  notification ui: add target selector for matcher
  notification ui: remove filter setting for targets
  notification ui: remove notification groups
  notification ui: rename filter to matcher
  notification: matcher: add UI for matcher editing
  notification ui: unprotected mailto-root target
  noficiation: matcher edit: make 'field' an editable combobox

 src/Makefile                            |    4 +-
 src/Schema.js                           |    5 -
 src/data/model/NotificationConfig.js    |    2 +-
 src/form/NotificationFilterSelector.js  |   58 --
 src/panel/GotifyEditPanel.js            |    9 -
 src/panel/NotificationConfigView.js     |   36 +-
 src/panel/NotificationGroupEditPanel.js |  183 ----
 src/panel/SendmailEditPanel.js          |    9 -
 src/window/NotificationFilterEdit.js    |  109 ---
 src/window/NotificationMatcherEdit.js   | 1036 +++++++++++++++++++++++
 10 files changed, 1051 insertions(+), 400 deletions(-)
 delete mode 100644 src/form/NotificationFilterSelector.js
 delete mode 100644 src/panel/NotificationGroupEditPanel.js
 delete mode 100644 src/window/NotificationFilterEdit.js
 create mode 100644 src/window/NotificationMatcherEdit.js


Summary over all repositories:
  46 files changed, 2398 insertions(+), 2568 deletions(-)

-- 
murpp v0.4.0






More information about the pve-devel mailing list