[pbs-devel] [PATCH 2/2 proxmox-backup] add versions command to proxmox-backup-manager

Mira Limbeck m.limbeck at proxmox.com
Tue Nov 10 13:33:54 CET 2020


Add the versions command to proxmox-backup-manager with a similar output
to pveversion [-v]. It prints the packages line by line with only the
package name, followed by the version and, for proxmox-backup and
proxmox-backup-server, some additional information (running kernel,
running version).

In addition it supports the optional output-format parameter which can
be used to print the complete data in either json, json-pretty or text
format. If output-format is specified, the --verbose parameter is
ignored and the detailed list of packages is printed.

With the addition of the versions command, the report is extended as
well.

Signed-off-by: Mira Limbeck <m.limbeck at proxmox.com>
---
When using --output-format text the table requires a wide terminal to
look correct, otherwise the output is garbled and does not look like a
table.

 src/bin/proxmox-backup-manager.rs | 76 +++++++++++++++++++++++++++++++
 src/server/report.rs              |  1 +
 2 files changed, 77 insertions(+)

diff --git a/src/bin/proxmox-backup-manager.rs b/src/bin/proxmox-backup-manager.rs
index e52c2f76..7a165a38 100644
--- a/src/bin/proxmox-backup-manager.rs
+++ b/src/bin/proxmox-backup-manager.rs
@@ -363,6 +363,79 @@ async fn report() -> Result<Value, Error> {
     Ok(Value::Null)
 }
 
+#[api(
+    input: {
+        properties: {
+            verbose: {
+                type: Boolean,
+                optional: true,
+                default: false,
+                description: "Output verbose package information. It is ignored if output-format is specified.",
+            },
+            "output-format": {
+                schema: OUTPUT_FORMAT,
+                optional: true,
+            }
+        }
+    }
+)]
+/// List package versions for important Proxmox Backup Server packages.
+async fn get_versions(verbose: bool, param: Value) -> Result<Value, Error> {
+    let output_format = param.get("output-format");
+
+    if !verbose && output_format.is_none() {
+        let pkg_version = format!(
+            "{}.{}",
+            crate::api2::version::PROXMOX_PKG_VERSION,
+            crate::api2::version::PROXMOX_PKG_RELEASE
+        );
+        let running_kernel = nix::sys::utsname::uname().release().to_owned();
+
+        println!(
+            "proxmox-backup-server/{} (running kernel: {})",
+            pkg_version, running_kernel
+        );
+        return Ok(Value::Null);
+    }
+
+    let mut packages = crate::api2::node::apt::get_versions()?;
+    if let Some(output_format) = output_format {
+        if let Some(output_format) = output_format.as_str() {
+            let options = TableFormatOptions::default();
+            format_and_print_result_full(
+                &mut packages,
+                &crate::api2::node::apt::API_RETURN_SCHEMA_GET_VERSIONS,
+                output_format,
+                &options,
+            );
+        }
+    } else {
+        // pveversion style print
+        let packages: Vec<APTUpdateInfo> = serde_json::from_value(packages)?;
+        for pkg in packages {
+            if &pkg.package == "proxmox-backup" {
+                println!(
+                    "{}: {} (running kernel: {})",
+                    pkg.package,
+                    pkg.old_version,
+                    pkg.additional_info.unwrap() // always set in get_versions()
+                );
+            } else if &pkg.package == "proxmox-backup-server" {
+                println!(
+                    "{}: {} (running version: {})",
+                    pkg.package,
+                    pkg.old_version,
+                    pkg.additional_info.unwrap() // always set in get_versions()
+                );
+            } else {
+                println!("{}: {}", pkg.package, pkg.old_version);
+            }
+        }
+    }
+
+    Ok(Value::Null)
+}
+
 fn main() {
 
     proxmox_backup::tools::setup_safe_path_env();
@@ -396,6 +469,9 @@ fn main() {
         )
         .insert("report",
             CliCommand::new(&API_METHOD_REPORT)
+        )
+        .insert("versions",
+            CliCommand::new(&API_METHOD_GET_VERSIONS)
         );
 
 
diff --git a/src/server/report.rs b/src/server/report.rs
index 9c6e2406..22e16a14 100644
--- a/src/server/report.rs
+++ b/src/server/report.rs
@@ -20,6 +20,7 @@ fn files() -> Vec<&'static str> {
 fn commands() -> Vec<(&'static str, Vec<&'static str>)> {
     vec![
     //  ("<command>", vec![<arg [, arg]>])
+        ("proxmox-backup-manager", vec!["versions", "--verbose"]),
         ("df", vec!["-h"]),
         ("lsblk", vec!["--ascii"]),
         ("zpool", vec!["status"]),
-- 
2.20.1






More information about the pbs-devel mailing list