{% extends 'generic/object_edit.html' %} {% load buttons %} {% load custom_links %} {% load form_helpers %} {% load helpers %} {% load perms %} {% load plugins %} {% load tabs %} {% load i18n %} {# Render the SAME object header the detail-style tabs use (generic/object.html), #} {# so switching between the object's tabs keeps identical header chrome — #} {# breadcrumb + identifier, object title, created/updated, Bookmark/Subscribe/ #} {# Edit/Delete, and the tab strip. Only the header blocks are overridden; the edit #} {# form (block form / content) is left to object_edit.html, so the save path is #} {# unchanged. The view supplies `tab` and `actions` (ObjectEditView injects #} {# neither). #} {% block page-header %}
{# Breadcrumbs #} {# Object identifier #} {% block object_identifier %} {{ object|meta:"app_label" }}.{{ object|meta:"model_name" }}:{{ object.pk }} {% if object.slug %}({{ object.slug }}){% endif %} {% endblock object_identifier %}
{{ block.super }} {% endblock page-header %} {% block title %}{{ object }}{% endblock %} {% block subtitle %}
{% endblock subtitle %} {% block controls %}
{% plugin_buttons object %} {# Add/edit/delete/etc. buttons #} {% block control-buttons %} {# Extra buttons #} {% block extra_controls %}{% endblock %} {# Default buttons #} {% if perms.extras.add_bookmark and object.bookmarks %} {% bookmark_button object %} {% endif %} {% if perms.extras.add_subscription and object.subscriptions %} {% subscribe_button object %} {% endif %} {% action_buttons actions object %} {% endblock control-buttons %}
{# Custom links #}
{% block custom-links %} {% custom_links object %} {% endblock custom-links %}
{% endblock controls %} {# Full object tab strip (primary detail tab + every registered ViewTab), matching #} {# generic/object.html; the current tab highlights via context['tab']. #} {% block tabs %} {% endblock tabs %} {% block form %} {% for field in form.hidden_fields %} {{ field }} {% endfor %}
{% trans "Endpoint access state" %}
{% trans "Proxmox-side writes" %} {% if object.allow_writes %} {% trans "Allowed" %} {% else %} {% trans "Disabled" %} {% endif %}
{% trans "Current SSH credential source" %} {{ object.get_ssh_credential_source_display }} {% if object.ssh_credential_source == 'reuse_endpoint' %} {% blocktrans trimmed with username=object.effective_ssh_username %} Effective SSH username: {{ username }} {% endblocktrans %} {% endif %}
{% trans "Endpoint SSH fallback" %}
{% render_field form.ssh_credential_source %} {% render_field form.ssh_username %} {% render_field form.ssh_port %} {% render_field form.ssh_auth_method %} {% render_field form.ssh_known_host_fingerprint %} {% if object.pk %}
{% trans "Scans the endpoint host and fills the pinned SHA-256 fingerprint above. Review it, then Save." %}
{% endif %} {% render_field form.ssh_password %} {% render_field form.ssh_private_key %} {% if form.clear_ssh_password %} {% render_field form.clear_ssh_password %} {% endif %} {% if form.clear_ssh_private_key %} {% render_field form.clear_ssh_private_key %} {% endif %}
{% if form.changelog_message %}
{% render_field form.changelog_message %}
{% endif %} {% endblock form %} {% block javascript %} {{ block.super }} {% endblock javascript %}