[pve-devel] [PATCH installer 3/6] auto: log non-json low-level messages into separate file
Christoph Heiss
c.heiss at proxmox.com
Thu May 16 15:39:33 CEST 2024
Same as the TUI does, as introduced in [0].
[0] 22de6e5 ("tui: install_progress: write low-level non-JSON messages to separate file")
Signed-off-by: Christoph Heiss <c.heiss at proxmox.com>
---
.../src/bin/proxmox-auto-installer.rs | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/proxmox-auto-installer/src/bin/proxmox-auto-installer.rs b/proxmox-auto-installer/src/bin/proxmox-auto-installer.rs
index e607a9c..9fc328c 100644
--- a/proxmox-auto-installer/src/bin/proxmox-auto-installer.rs
+++ b/proxmox-auto-installer/src/bin/proxmox-auto-installer.rs
@@ -2,6 +2,7 @@ use anyhow::{bail, format_err, Result};
use log::{error, info, LevelFilter};
use std::{
env,
+ fs::File,
io::{BufRead, BufReader, Write},
path::PathBuf,
process::ExitCode,
@@ -136,15 +137,29 @@ fn run_installation(
.map_err(|err| format_err!("failed to serialize install config: {err}"))?;
writeln!(writer).map_err(|err| format_err!("failed to write install config: {err}"))?;
+ let mut lowlevel_log = File::create("/tmp/install-low-level.log")
+ .map_err(|err| format_err!("failed to open low-level installer logfile: {err}"))?;
+
for line in reader.lines() {
let line = match line {
Ok(line) => line,
Err(_) => break,
};
+
+ // The low-level installer also spews the output of any command it runs on its
+ // stdout. Use a very simple heuricstic to determine whether it is actually JSON
+ // or not.
+ if !line.starts_with('{') || !line.ends_with('}') {
+ let _ = writeln!(lowlevel_log, "{}", line);
+ continue;
+ }
+
let msg = match serde_json::from_str::<LowLevelMessage>(&line) {
Ok(msg) => msg,
- Err(_) => {
+ Err(err) => {
// Not a fatal error, so don't abort the installation by returning
+ eprintln!("low-level installer: error while parsing message: '{err}'");
+ eprintln!(" original message was: '{line}'");
continue;
}
};
--
2.44.0
More information about the pve-devel
mailing list