[pve-devel] [PATCH v3 pve-manager 1/5] fix #5366: ui: ceph: services: parse and display build commit
Aaron Lauterer
a.lauterer at proxmox.com
Tue Nov 12 14:15:44 CET 2024
one very small nit inline at the end
On 2024-07-24 17:05, Max Carrara wrote:
> The build commit is displayed and taken into account when comparing
> monitor and manager versions in the client. Specifically, the
> shortened build commit is now displayed in parentheses next to the
> version for both monitors and managers like so:
>
> 18.2.2 (build: abcd1234)
>
> Should the build commit of the running service differ from the one
> that's installed on the host, the newer build commit will also be
> shown in parentheses:
>
> 18.2.2 (build: abcd1234 -> 5678fedc)
>
> The icon displayed for running a service with an outdated build is the
> same as for running an outdated version. The conditional display of
> icons related to cluster health remains the same otherwise.
>
> The Ceph summary view also displays the hash and will show a warning
> if a service is running with a build commit that doesn't match the one
> that's advertised by the host.
>
> This requires the introduction of two helper functions:
>
> 1. `PVE.Utils.parseCephBuildCommit`, which can be used to get the full
> hash "eccf199d..." in parentheses from a string like the following:
>
> ceph version 17.2.7 (eccf199d63457659c09677399928203b7903c888) quincy (stable)
>
> 2. `PVE.Utils.renderCephBuildCommit`, which is used to determine how
> to render a service's current build commit and which accompanying
> icon to choose.
>
> Signed-off-by: Max Carrara <m.carrara at proxmox.com>
> Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=5366
> ---
> Changes v2 --> v3:
> * add new `renderCephBuildCommit` helper function (thanks Thomas!)
> * add docstrings for helpers
> * use less ambiguous variable names (thanks Thomas!)
> * put 'build: ' in front of build commit when rendering (thanks Thomas!)
> * handle no rendered build commit being available in MGR / MON lists,
> returning the icon + version without the commit instead
> * make the modified logic in Services.js more readable
> * reword message about differing builds in the overview
> * reword commit title & message
> * add 'Fixes' trailer
> * remove outdated R-b and T-b trailers
>
> Changes v1 --> v2:
> * use camelCase instead of snake_case (thanks Lukas!)
> * use more descriptive variable names (thanks Lukas!)
> * use `let` instead of `const` for variables where applicable (thanks Lukas!)
>
> www/manager6/Utils.js | 107 +++++++++++++++++++++++++++++++
> www/manager6/ceph/ServiceList.js | 33 +++++++---
> www/manager6/ceph/Services.js | 19 +++++-
> 3 files changed, 148 insertions(+), 11 deletions(-)
>
> diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
> index db86fa9a..1d42be34 100644
> --- a/www/manager6/Utils.js
> +++ b/www/manager6/Utils.js
> @@ -128,6 +128,113 @@ Ext.define('PVE.Utils', {
> return undefined;
> },
>
> + /**
> + * Parses a Ceph build commit from its version string.
[...]
>
> getMaxVersions: function(store, records, success) {
> diff --git a/www/manager6/ceph/Services.js b/www/manager6/ceph/Services.js
> index dfafee43..ff6f80e9 100644
> --- a/www/manager6/ceph/Services.js
> +++ b/www/manager6/ceph/Services.js
> @@ -155,6 +155,7 @@ Ext.define('PVE.ceph.Services', {
> title: metadata[type][id].name || name,
> host: host,
> version: PVE.Utils.parse_ceph_version(metadata[type][id]),
> + buildcommit: PVE.Utils.parseCephBuildCommit(metadata[type][id]),
> service: metadata[type][id].service,
> addr: metadata[type][id].addr || metadata[type][id].addrs || Proxmox.Utils.unknownText,
> };
> @@ -181,7 +182,15 @@ Ext.define('PVE.ceph.Services', {
> }
>
> if (result.version) {
> - result.statuses.push(gettext('Version') + ": " + result.version);
> + let installedBuildCommit = metadata.node[host]?.buildcommit ?? '';
> + let runningBuildCommit = result.buildcommit ?? '';
> +
> + let statusLine = gettext('Version') + `: ${result.version}`;
> + if (runningBuildCommit) {
> + statusLine += ` (build: ${runningBuildCommit.substring(0, 9)})`;
> + }
> +
> + result.statuses.push(statusLine);
>
> if (PVE.Utils.compare_ceph_versions(result.version, maxversion) !== 0) {
> let host_version = metadata.node[host]?.version?.parts || metadata.version?.[host] || "";
> @@ -202,6 +211,14 @@ Ext.define('PVE.ceph.Services', {
> gettext('Other cluster members use a newer version of this service, please upgrade and restart'),
> );
> }
> + } else if (installedBuildCommit !== "" && runningBuildCommit !== installedBuildCommit) {
> + if (result.health > healthstates.HEALTH_OLD) {
> + result.health = healthstates.HEALTH_OLD;
> + }
> + result.messages.push(
> + PVE.Utils.get_ceph_icon_html('HEALTH_OLD', true) +
> + gettext('A newer build of this release was installed but old build still running, please restart'),
Maybe phrase it like:
A newer build of this release was installed, but the old build is still
running. Please restart the service.
But that is really just a nice to have thing.
> + );
> }
> }
>
More information about the pve-devel
mailing list