[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