{# SPDX-License-Identifier: Apache-2.0 #} {# Copyright (C) 2025 Marcin Zieba #} {# Lazy-loaded fragment: Nokia L2 services (M37 P2a) — paginated from last-synced state. #}
{% include "netbox_nso_plugin/categories/_adapter_error.html" %}
{% include "netbox_nso_plugin/categories/_cat_search.html" with placeholder=placeholder q=q %} {% if l2_sap_states %}

Service and SAP ID form the structural identity. The SAP ID includes its port and interface-local dot1q encapsulation (not a VLAN). Accept makes NetBox the source of truth and writes the SAP on Apply; epipe and vpls are supported.

{% for sap in l2_sap_states %} {% endfor %}
ServiceSAP endpointStatusLast Synced
{{ sap.service_name }}
{% if sap.service_type == "vpls" %}vpls{% elif sap.service_type == "epipe" %}epipe{% else %}{{ sap.service_type|default:"unknown" }}{% endif %} {% if sap.l2vpn %} · L2VPN{% endif %}
{{ sap.sap_id }} {% if sap.port %}
port: {% if sap.port_url %}{{ sap.port }}{% else %}{{ sap.port }}{% endif %}
{% endif %}
{% include "netbox_nso_plugin/categories/_state_badge.html" with status=sap.status residue=sap.residue_survivor residue_job=sap.residue_job_id %} {% if sap.last_sync_at %}{{ sap.last_sync_at|date:"Y-m-d H:i" }}{% else %}—{% endif %} {% if sap.service_type == "epipe" or sap.service_type == "vpls" %} {% url 'plugins:netbox_nso_plugin:l2_accept_sap' pk=sap.pk as accept_url %}{% include "netbox_nso_plugin/categories/_accept_cell.html" with accept_url=accept_url status=sap.status form_class="nso-row-form" title="Make NetBox the source of truth for this SAP (written to the device on Apply)" %} {% else %} read-only {% endif %}
{% include "netbox_nso_plugin/categories/_cat_pager.html" with page=page %} {% else %}

No L2 services{% if q %} matching “{{ q }}”{% else %} reported for this device{% endif %}.

{% endif %}