{% extends "generic/object_detail.html" %} {% load helpers %} {% block extra_buttons %} {% if perms.intent_networking.change_intent %} Resolve {% endif %} {% if perms.intent_networking.change_intent %} Preview {% endif %} {% if perms.intent_networking.deploy_intent %} Deploy Dry Run {% endif %} {% if perms.intent_networking.change_intent %} Verify {% endif %} {% if perms.intent_networking.rollback_intent %} Rollback {% endif %} {% endblock extra_buttons %} {% block content_left_page %} {# ── Identity ──────────────────────────────────────────────────────── #}
Intent Details
Intent ID {{ object.intent_id }}
Version {{ object.version }}
Type {{ object.get_intent_type_display }}
Status {% if object.status %}{{ object.status }}{% else %}—{% endif %}
Tenant {% if object.tenant %} {{ object.tenant }} {% else %} — {% endif %}
Change Ticket {{ object.change_ticket|default:"—" }}
Deployment Strategy {{ object.get_deployment_strategy_display|default:"All at once" }}
{# ── Approval Status (#2) ─────────────────────────────────────────── #}
Approval Status {% if object.is_approved %} ✅ Approved {% else %} ⏳ Pending Approval {% endif %}
{% if approvals %} {% for a in approvals %} {% endfor %}
Approver Decision Comment Date
{{ a.approver }} {{ a.get_decision_display }} {{ a.comment|default:"—" }} {{ a.decided_at }}
{% else %}
No approval decisions yet. Legacy: {{ object.approved_by|default:"—" }}
{% endif %} {% if perms.intent_networking.approve_intent %} {% endif %}
{# ── Timestamps ────────────────────────────────────────────────────── #}
Timestamps
Created {{ object.created }}
Last Updated {{ object.last_updated }}
Deployed At {{ object.deployed_at|default:"—" }}
Last Verified At {{ object.last_verified_at|default:"—" }}
Scheduled Deploy At {{ object.scheduled_deploy_at|default:"Not scheduled" }}
{# ── Raw Intent Data ───────────────────────────────────────────────── #}
Intent Data (JSON)
{{ object.intent_data|pprint }}
{# ── Rendered Config Preview (#1) ──────────────────────────────────── #} {% if rendered_configs %}
🔍 Config Preview (Dry-Run) Full Preview
{% for device_name, config in rendered_configs.items %}
{{ device_name }}
{{ config }}
{% endfor %}
{% endif %} {% endblock content_left_page %} {% block content_right_page %} {# ── Git Source ────────────────────────────────────────────────────── #}
Git Source
Repository {% if object.git_repository %} {{ object.git_repository.name }} {% else %} — {% endif %}
Branch {{ object.git_branch|default:"—" }}
Commit SHA {{ object.git_commit_sha|default:"—"|truncatechars:12 }}
PR # {{ object.git_pr_number|default:"—" }}
{# ── Latest Resolution Plan ────────────────────────────────────────── #}
Resolution Plans (latest 5)
{% if resolution_plans %} {% for plan in resolution_plans %} {% endfor %}
Version VRF Devices Affected Devices Primitives Resolved At
v{{ plan.intent_version }} {{ plan.vrf_name|default:"—" }} {{ plan.affected_devices.count }} {{ plan.affected_device_names|join:", "|default:"—" }} {{ plan.primitive_count }} {{ plan.resolved_at }}
{% else %}
No resolution plans yet.
{% endif %}
{# ── Verification History ──────────────────────────────────────────── #}
Verification History (latest 10)
{% if verifications %} {% for v in verifications %} {% endfor %}
Result Trigger Latency Verified At
{% if v.passed %}✅ Pass{% else %}❌ Fail{% endif %} {{ v.triggered_by }} {{ v.measured_latency_ms|default:"—" }} ms {{ v.verified_at }}
{% else %}
No verification runs yet.
{% endif %}
{# ── Audit Trail (#4) ─────────────────────────────────────────────── #}
🔍 Audit Trail (latest 20) View All
{% if audit_entries %} {% for e in audit_entries %} {% endfor %}
Action Actor Timestamp Commit
{{ e.action }} {{ e.actor }} {{ e.timestamp }} {{ e.git_commit_sha|default:"—"|truncatechars:8 }}
{% else %}
No audit entries yet.
{% endif %}
{% endblock content_right_page %}