in launcher/sdw_updater/Updater.py [0:0]
def apply_updates_templates(templates=current_templates, progress_callback=None):
"""
Apply updates to all TemplateVMs.
"""
sdlog.info(f"Applying all updates to VMs: {', '.join(templates)}")
try:
proc = _start_qubes_updater_proc(templates)
result_update_status = {}
stderr_thread = threading.Thread(
target=_qubes_updater_parse_progress,
args=(proc.stderr, result_update_status, templates, progress_callback),
)
stdout_thread = threading.Thread(target=_qubes_updater_parse_stdout, args=(proc.stdout,))
stderr_thread.start()
stdout_thread.start()
while proc.poll() is None or stderr_thread.is_alive() or stdout_thread.is_alive():
time.sleep(1)
stderr_thread.join()
stdout_thread.join()
proc.stderr.close()
proc.stdout.close()
update_status = overall_update_status(result_update_status)
if update_status == UpdateStatus.UPDATES_OK:
sdlog.info("Template updates successful")
else:
sdlog.info("Template updates failed")
return update_status
except subprocess.CalledProcessError as e:
sdlog.error(
"An error has occurred updating templates. Please contact your administrator."
f" See {DETAIL_LOG_FILE} for details."
)
sdlog.error(str(e))
return UpdateStatus.UPDATES_FAILED