{% extends "base.html" %} {% block title %}Patch #{{ execution.id }} - {{ execution.server_name }}{% endblock %} {% block head %}{% if is_active %}{% endif %}{% endblock %} {% block heading %}Patch Execution #{{ execution.id }}: {{ execution.server_name }}{% endblock %} {% block header_actions %}
Approved Report History
{% endblock %} {% block content %} {% set ex = execution %}

{% if ex.error_title %}{{ ex.error_title }}{% else %}{{ patch_labels.get(ex.state, ex.state) }}{% endif %}

{{ ex.state }}
Server Name
{{ ex.server_name }}
{% if ex.display_name %}
Display Name
{{ ex.display_name }}
{% endif %}
IP
{{ ex.ip_address or "-" }}
Decision
{{ ex.decision }} · {{ ex.decided_at|timestamp }}
{% if ex.started_at %}
Started
{{ ex.started_at|timestamp }}
{% endif %} {% if ex.finished_at %}
Finished
{{ ex.finished_at|timestamp }}
{% endif %} {% if ex.local_staging_path %}
Local Staging
{{ ex.local_staging_path }}
{% endif %} {% if ex.remote_staging_path %}
Remote Staging
{{ ex.remote_staging_path }}
{% endif %}
Expected Reboot (analysis)
{% if ex.expected_reboot is none %}unknown{% elif ex.expected_reboot %}YES EXPECTED{% else %}NO{% endif %}
Reboot Required After Patch
{% if ex.reboot_required_after is none %}not checked{% elif ex.reboot_required_after %}YES{% if ex.reboot_required_packages %} ({{ ex.reboot_required_packages|join(", ") }}){% endif %}{% else %}NO{% endif %}
{% if ex.reboot_status %}
Reboot
{{ reboot_labels.get(ex.reboot_status, ex.reboot_status) }} {% if ex.reboot_detail %}
{{ ex.reboot_detail }}
{% endif %}
{% if ex.reboot_requested_at %}
Reboot Requested
{{ ex.reboot_requested_at|timestamp }}{% if ex.reboot_finished_at %} · finished {{ ex.reboot_finished_at|timestamp }}{% endif %}
{% endif %} {% if ex.post_reboot_uptime or ex.post_reboot_kernel %}
After Reboot
Uptime: {{ ex.post_reboot_uptime or "-" }} · Kernel: {{ ex.post_reboot_kernel or "-" }}
{% endif %} {% endif %} {% if ex.queue_id %}
Patch All
Patch All #{{ ex.queue_id }}
{% endif %} {% if ex.cleanup_status %}
Cleanup
{{ {"DELETED": "Local and remote staging deleted", "WARNING": "CLEANUP WARNING", "PRESERVED": "Temporary files preserved", "NOT_NEEDED": "Nothing to clean up", "NOT_STARTED": "Not started"}.get(ex.cleanup_status, ex.cleanup_status) }} {% if ex.cleanup_detail %}
{{ ex.cleanup_detail }}
{% endif %}
{% endif %}
{% if is_active %}

{% if ex.state in patch_labels and ex.state not in ("SUCCESS", "SUCCESS_WITH_CLEANUP_WARNING") %}{{ patch_labels[ex.state] }}{% else %}{{ reboot_labels.get(ex.reboot_status, "Reboot") }}{% endif %}… (this page refreshes automatically)

{% endif %}
{% if ex.state in ("FAILED", "UNKNOWN", "INTERRUPTED") %}

{{ ex.error_title or "PATCH FAILED" }}

Stage
{{ patch_labels.get(ex.failure_stage, ex.failure_stage or "-") }}
Server
{{ ex.server_name }}
{% if ex.error_package %}
Package
{{ ex.error_package }}
{% endif %}
Reason
{{ ex.error_summary }}
{% if ex.partial_state_possible %}
Current State
Partial state possible. See the detected versions below. No rollback or retry was attempted.
{% endif %}
{% if ex.cleanup_status in ("DELETED", "WARNING") %}

Temporary files cleaned up: {% if ex.cleanup_status == "DELETED" %}local and remote staging deleted.{% else %}{{ ex.cleanup_detail }}{% endif %}

{% endif %} {% if ex.cleanup_status == "PRESERVED" %}

Temporary files preserved for troubleshooting.

{% endif %}

Run a new analysis before retrying.

{% endif %} {% if ex.state == "ALREADY_PATCHED" %}
ALREADY PATCHED — every approved package was already installed at its target version when the server was revalidated. Nothing was downloaded, transferred or installed.
{% endif %} {% if ex.transfer_attempts %}

File Transfer (scp)

{% for t in ex.transfer_attempts %} {% endfor %}
FileAttemptResultExit Codescp stderr
{{ t.filename }} {{ t.attempt }} {% if t.ok %}OK{% else %}FAILED{% if t.error %}
{{ t.error }}
{% endif %}{% endif %}
{{ t.exit_code if t.exit_code is not none else "-" }} {% if t.stderr %}
{{ t.stderr }}
{% else %}-{% endif %}
{% endif %} {% if ex.state == "SUCCESS_WITH_CLEANUP_WARNING" %}
CLEANUP WARNING — the patch succeeded but temporary files could not be fully removed. Local: {{ ex.local_staging_path }}, Remote: {{ ex.remote_staging_path }}. {{ ex.cleanup_detail or "" }}
{% endif %} {% if steps %}

Progress

{% endif %} {% if ex.packages %}

Packages

{% for p in ex.packages %} {% endfor %}
PackageBeforeTargetAfterDownloadTransferInstallResult
{{ p.binary_package }} {{ p.architecture }}
{{ p.deb_filename }}
{{ p.before_version or "not installed" }} {{ p.target_version }} {{ p.after_version or "-" }} {{ p.download_result or "-" }}{% if p.checksum_result %}
checksum {{ p.checksum_result }}
{% endif %}
{{ p.transfer_result or "-" }} {{ p.install_result or "-" }} {% if p.verification_result == "VERIFIED" %}VERIFIED{% elif p.verification_result %}{{ p.verification_result }}{% else %}-{% endif %} {% if p.detail %}
{{ p.detail }}
{% endif %}
{% endif %} {% if ex.cves %}

CVE Verification

{{ ex.cves_verified }} of {{ ex.cves|length }} CVE check(s) verified against Canonical fixed versions.

{% for c in ex.cves %} {% endfor %}
CVESource PackageFixed VersionResulting VersionResult
{{ c.cve }}{{ c.source_package or "-" }} {{ c.fixed_version or "-" }}{{ c.resulting_version or "-" }} {{ c.result }} {% if c.detail %}
{{ c.detail }}
{% endif %}
{% endif %} {% if ex.notes or ex.audit_ok is not none or ex.install_output or ex.simulation_output %}
Diagnostics (install result, dpkg health, APT output) {% if ex.notes %}{% endif %}
Install Exit Status
{{ ex.install_exit_status if ex.install_exit_status is not none else "-" }}
dpkg --audit
{% if ex.audit_ok is none %}not run{% elif ex.audit_ok %}healthy{% else %}problems reported{% endif %}
{% if ex.audit_output %}
{{ ex.audit_output }}
{% endif %} {% if ex.simulation_output %}

Install simulation output:

{{ ex.simulation_output }}
{% endif %} {% if ex.install_output %}

Install output:

{{ ex.install_output }}
{% endif %}
{% endif %} {% endblock %}