api: apt: factor out and improve calling apt update
apt changes some of its state/cache also if it errors out, most of the time, so we actually want to print both, stderr and stdout. Further, only warn if its exit code is non-zero, for the same rationale, it may bring updates available even if it errors (e.g., because a future pbs-enterprise repo is additionally configured but not accessible). Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
e6513bd5de
commit
b282557563
@ -39,6 +39,36 @@ fn apt_update_available(_param: Value) -> Result<Value, Error> {
|
|||||||
Ok(json!(all_upgradeable))
|
Ok(json!(all_upgradeable))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn do_apt_update(worker: &WorkerTask, quiet: bool) -> Result<(), Error> {
|
||||||
|
if !quiet { worker.log("starting apt-get update") }
|
||||||
|
|
||||||
|
// TODO: set proxy /etc/apt/apt.conf.d/76pbsproxy like PVE
|
||||||
|
|
||||||
|
let mut command = std::process::Command::new("apt-get");
|
||||||
|
command.arg("update");
|
||||||
|
|
||||||
|
// apt "errors" quite easily, and run_command is a bit rigid, so handle this inline for now.
|
||||||
|
let output = command.output()
|
||||||
|
.map_err(|err| format_err!("failed to execute {:?} - {}", command, err))?;
|
||||||
|
|
||||||
|
if !quiet {
|
||||||
|
worker.log(String::from_utf8(output.stdout)?);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: improve run_command to allow outputting both, stderr and stdout
|
||||||
|
if !output.status.success() {
|
||||||
|
if output.status.code().is_some() {
|
||||||
|
let msg = String::from_utf8(output.stderr)
|
||||||
|
.map(|m| if m.is_empty() { String::from("no error message") } else { m })
|
||||||
|
.unwrap_or_else(|_| String::from("non utf8 error message (suppressed)"));
|
||||||
|
worker.warn(msg);
|
||||||
|
} else {
|
||||||
|
bail!("terminated by signal");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[api(
|
#[api(
|
||||||
protected: true,
|
protected: true,
|
||||||
input: {
|
input: {
|
||||||
@ -72,18 +102,7 @@ pub fn apt_update_database(
|
|||||||
let quiet = quiet.unwrap_or(API_METHOD_APT_UPDATE_DATABASE_PARAM_DEFAULT_QUIET);
|
let quiet = quiet.unwrap_or(API_METHOD_APT_UPDATE_DATABASE_PARAM_DEFAULT_QUIET);
|
||||||
|
|
||||||
let upid_str = WorkerTask::new_thread("aptupdate", None, auth_id, to_stdout, move |worker| {
|
let upid_str = WorkerTask::new_thread("aptupdate", None, auth_id, to_stdout, move |worker| {
|
||||||
if !quiet { worker.log("starting apt-get update") }
|
do_apt_update(&worker, quiet)?;
|
||||||
|
|
||||||
// TODO: set proxy /etc/apt/apt.conf.d/76pbsproxy like PVE
|
|
||||||
|
|
||||||
let mut command = std::process::Command::new("apt-get");
|
|
||||||
command.arg("update");
|
|
||||||
|
|
||||||
let output = crate::tools::run_command(command, None)?;
|
|
||||||
if !quiet { worker.log(output) }
|
|
||||||
|
|
||||||
// TODO: add mail notify for new updates like PVE
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user