def apply_updates_templates()

in 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