1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2026-11-08 19:26:48 +00:00

feat(instances): the Access tab splits the VM's screen from root's login

The tab put the console, a remote viewer address and two root forms at
one weight under "Access · Active · VNC", named buttons after their
implementation (VDI, Get console.vv), and repeated why the root forms
were disabled under each of them.

Now it has two sections. Screen: Open console with what it does, and
the remote viewer on a row of its own (address, Open, Download .vv
file). Log in as root: one line says how a password or key reaches the
guest now, written to the disk of a shut-off VM or sent through a
running VM's guest agent, or what to do when neither works; the
password and key rows follow with aligned labels. Ids, field names and
posts are unchanged.
This commit is contained in:
catborise 2026-11-03 20:33:39 +03:00
parent 4565221c5c
commit 4997950e75
6 changed files with 185 additions and 173 deletions

View file

@ -1,85 +1,85 @@
{% load i18n %}
{% load vm_states %}
<div class="tab-pane" id="access" role="tabpanel" aria-label="{% trans "Instance access options" %}">
{% vm_state instance.status as state %}
{# two ways into a VM: its screen, and root's login, which reaches the guest on its disk or through its agent #}
<div class="card">
<div class="card-body">
<p class="small text-body-secondary mb-2">{% trans "Access" %} · {{ state.0 }} · {{ instance.console_type|upper }}</p>
{% if not can_open_console %}
<p class="mb-0">{% trans "Only the owners of this instance and administrators can open its console." %}</p>
{% elif instance.status == 1 or instance.status == 3 %}
{# one window per VM: opening it again reloads it; a paused VM shows its last screen #}
<div class="row g-2 align-items-center">
<div class="col-12 col-md-auto">
<button type="button" class="btn btn-primary w-100" id="console_button"
data-url="{% url 'console' compute.id instance.uuid %}" data-window="console-{{ instance.uuid }}">{% trans "Console" %}</button>
<section aria-labelledby="access-screen-heading">
<h2 class="h6" id="access-screen-heading">{% trans "Screen" %}</h2>
{% if not can_open_console %}
<p class="mb-0">{% trans "Only the owners of this instance and administrators can open its console." %}</p>
{% elif instance.status == 1 or instance.status == 3 %}
{# one window per VM: opening it again reloads it; a paused VM shows its last screen #}
<div class="d-flex flex-wrap align-items-center gap-2 gap-sm-3">
<button type="button" class="btn btn-primary" id="console_button"
data-url="{% url 'console' compute.id instance.uuid %}" data-window="console-{{ instance.uuid }}">{% trans "Open console" %}</button>
<span class="small text-body-secondary">{% trans "Opens the VM's screen in a new window." %}</span>
</div>
{% if vdi_reachable %}
<div class="col-12 col-md">
<label for="vdi_url_input" class="visually-hidden">{% trans "Remote viewer address" %}</label>
<input id="vdi_url_input" class="form-control" type="text" readonly>
</div>
<div class="col-12 col-md-auto d-flex flex-wrap gap-2">
<a href="#" class="btn btn-secondary" id="vdi_url">{% trans "VDI" %}</a>
<a href="{% url 'instances:getvvfile' instance.id %}" class="btn btn-secondary">{% trans "Get console.vv" %}</a>
<div class="row g-2 align-items-center mt-2">
<label for="vdi_url_input" class="col-12 col-sm-3 col-lg-2 col-form-label">{% trans "Remote viewer" %}</label>
<div class="col-12 col-sm">
<input id="vdi_url_input" class="form-control" type="text" readonly aria-describedby="vdi-help">
</div>
<div class="col-12 col-sm-auto d-flex gap-2">
<a href="#" class="btn btn-outline-secondary" id="vdi_url">{% trans "Open" %}</a>
<a href="{% url 'instances:getvvfile' instance.id %}" class="btn btn-outline-secondary">{% trans "Download .vv file" %}</a>
</div>
</div>
<p class="small text-body-secondary mt-1 mb-0" id="vdi-help">{% trans "For virt-viewer or another VNC or SPICE client on your computer." %}</p>
{% else %}
<p class="small text-body-secondary mt-2 mb-0">{% trans "A remote viewer cannot reach this console: it listens on the host only, or it is a serial one." %}</p>
{% endif %}
</div>
<p class="small text-body-secondary mt-2 mb-0">
{% trans "Console opens a window here." %}
{% if vdi_reachable %}{% trans "VDI opens your remote viewer; console.vv sets up virt-viewer." %}
{% else %}{% trans "A remote viewer cannot reach this console: it listens on the host only, or it is a serial one." %}{% endif %}
</p>
{% else %}
<p class="mb-0">{% trans "Start the VM to open its console." %}</p>
{% endif %}
{% if can_change and app_settings.SHOW_ACCESS_ROOT_PASSWORD == 'True' %}
<form action="{% url 'instances:rootpasswd' instance.id %}" method="post" class="mt-3">{% csrf_token %}
<div class="row g-2 align-items-center">
<div class="col-12 col-lg-5">
<label for="root-passwd" class="form-label mb-0">{% trans "Reset root password" %}</label>
<p id="root-passwd-help" class="small text-body-secondary mb-0">
{% if guest_access_ready %}{% trans "The guest's root user gets this password." %}
{% elif instance.status == 1 %}{% trans "The guest agent is not connected: connect it, or shut the VM down." %}
{% else %}{% trans "Shut the VM down, or run it with its guest agent." %}{% endif %}
</p>
</div>
<div class="col-12 col-lg-7">
<fieldset aria-describedby="root-passwd-help"{% if not guest_access_ready %} disabled{% endif %}>
<div class="d-flex flex-column flex-sm-row gap-2">
<input id="root-passwd" name="passwd" type="password" class="form-control" autocomplete="new-password" required>
<button type="submit" name="rootpasswd" class="btn btn-secondary flex-shrink-0">{% trans "Reset Root Password" %}</button>
</div>
</fieldset>
</div>
</div>
</form>
{% endif %}
{% if can_change and app_settings.SHOW_ACCESS_SSH_KEYS == 'True' %}
<form action="{% url 'instances:add_public_key' instance.id %}" method="post" class="mt-3">{% csrf_token %}
<div class="row g-2 align-items-center">
<div class="col-12 col-lg-5">
<label for="root-sshkey" class="form-label mb-0">{% trans "Add SSH key for root" %}</label>
<p id="root-sshkey-help" class="small text-body-secondary mb-0">
{% if not publickeys %}{% trans "You have no saved public key." %} <a href="{% url 'accounts:profile' %}">{% trans "Add one in your profile." %}</a>
{% elif guest_access_ready %}{% trans "One of your public keys joins root's keys in the guest." %}
{% elif instance.status == 1 %}{% trans "The guest agent is not connected: connect it, or shut the VM down." %}
{% else %}{% trans "Shut the VM down, or run it with its guest agent." %}{% endif %}
</p>
</div>
<div class="col-12 col-lg-7">
<fieldset aria-describedby="root-sshkey-help"{% if not publickeys or not guest_access_ready %} disabled{% endif %}>
<div class="d-flex flex-column flex-sm-row gap-2">
<select id="root-sshkey" name="sshkeyid" class="form-select">
{% for key in publickeys %}<option value="{{ key.id }}">{{ key.keyname }}</option>{% endfor %}
</select>
<button type="submit" name="addpublickey" class="btn btn-secondary flex-shrink-0">{% trans "Add Public Key" %}</button>
</div>
</fieldset>
</div>
</div>
</form>
{% endif %}
{% else %}
<p class="mb-0">{% trans "Start the VM to open its console." %}</p>
{% endif %}
</section>
{% if can_change %}{% if app_settings.SHOW_ACCESS_ROOT_PASSWORD == 'True' or app_settings.SHOW_ACCESS_SSH_KEYS == 'True' %}
<section class="border-top mt-4 pt-3" aria-labelledby="access-root-heading">
<h2 class="h6" id="access-root-heading">{% trans "Log in as root" %}</h2>
<p class="d-flex align-items-center gap-2 small mb-3" id="access-root-route">
{% if instance.status == 5 %}
<span class="power-dot bg-success" aria-hidden="true"></span>{% trans "Written to the VM's disk while it is off." %}
{% elif guest_access_ready %}
<span class="power-dot bg-success" aria-hidden="true"></span>{% trans "Sent to the running VM through its guest agent." %}
{% elif instance.status == 1 %}
<span class="power-dot" aria-hidden="true"></span><span class="text-body-secondary">{% trans "The guest agent is not connected: connect it, or shut the VM down." %}</span>
{% else %}
<span class="power-dot" aria-hidden="true"></span><span class="text-body-secondary">{% trans "Shut the VM down, or run it with its guest agent." %}</span>
{% endif %}
</p>
{% if app_settings.SHOW_ACCESS_ROOT_PASSWORD == 'True' %}
<form action="{% url 'instances:rootpasswd' instance.id %}" method="post">{% csrf_token %}
<fieldset class="row g-2 align-items-center mb-2" aria-describedby="access-root-route"{% if not guest_access_ready %} disabled{% endif %}>
<label for="root-passwd" class="col-12 col-sm-3 col-lg-2 col-form-label">{% trans "Password" %}</label>
<div class="col-12 col-sm">
<input id="root-passwd" name="passwd" type="password" class="form-control" autocomplete="new-password" required>
</div>
<div class="col-12 col-sm-auto">
<button type="submit" name="rootpasswd" class="btn btn-outline-primary access-act">{% trans "Reset password" %}</button>
</div>
</fieldset>
</form>
{% endif %}
{% if app_settings.SHOW_ACCESS_SSH_KEYS == 'True' %}
<form action="{% url 'instances:add_public_key' instance.id %}" method="post">{% csrf_token %}
<fieldset class="row g-2 align-items-center" aria-describedby="access-root-route"{% if not publickeys or not guest_access_ready %} disabled{% endif %}>
<label for="root-sshkey" class="col-12 col-sm-3 col-lg-2 col-form-label">{% trans "SSH key" %}</label>
<div class="col-12 col-sm">
<select id="root-sshkey" name="sshkeyid" class="form-select">
{% for key in publickeys %}<option value="{{ key.id }}">{{ key.keyname }}</option>{% endfor %}
</select>
</div>
<div class="col-12 col-sm-auto">
<button type="submit" name="addpublickey" class="btn btn-outline-primary access-act">{% trans "Add key" %}</button>
</div>
</fieldset>
{% if not publickeys %}
<p class="small text-body-secondary mt-1 mb-0">{% trans "You have no saved public key." %} <a href="{% url 'accounts:profile' %}">{% trans "Add one in your profile." %}</a></p>
{% endif %}
</form>
{% endif %}
</section>
{% endif %}{% endif %}
</div>
</div>
</div>

Binary file not shown.

View file

@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-11-03 16:37+0000\n"
"POT-Creation-Date: 2026-11-03 17:31+0000\n"
"PO-Revision-Date: 2020-11-04 12:00+0000\n"
"Last-Translator: catborise <muhammetalisag@gmail.com>, 2020\n"
"Language-Team: Turkish (https://www.transifex.com/catborise/teams/110663/tr/)\n"
@ -361,6 +361,7 @@ msgstr "Kullanıcı adını girin"
#: accounts/templates/accounts/otp_login.html:37
#: accounts/templates/login.html:36 admin/templates/admin/user_form.html:106
#: console/templates/console-vnc.html:82 instances/forms.py:28
#: instances/templates/instances/access_tab.html:53
msgid "Password"
msgstr "Parola"
@ -1666,7 +1667,6 @@ msgstr "Klonlar"
#: appsettings/views.py:45 console/templates/console-base.html:10
#: console/templates/console-base.html:23
#: instances/templates/instance_actions.html:11
#: instances/templates/instances/access_tab.html:15
#: instances/templates/instances/settings_tab.html:32
#: instances/templates/instances/settings_tab.html:695
msgid "Console"
@ -3809,7 +3809,6 @@ msgid "Power"
msgstr "Güç"
#: instances/templates/instance.html:83
#: instances/templates/instances/access_tab.html:7
msgid "Access"
msgstr "Erişim"
@ -3895,37 +3894,46 @@ msgstr "Yeniden başlat"
msgid "more owners"
msgstr "sahip daha"
#: instances/templates/instances/access_tab.html:3
#: instances/templates/instances/access_tab.html:2
msgid "Instance access options"
msgstr "Sanal makine erişim seçenekleri"
#: instances/templates/instances/access_tab.html:7
msgid "Screen"
msgstr "Ekran"
#: instances/templates/instances/access_tab.html:9
msgid ""
"Only the owners of this instance and administrators can open its console."
msgstr ""
"Bu sanal makinenin konsolunu yalnızca sahipleri ve yöneticiler açabilir."
#: instances/templates/instances/access_tab.html:14
msgid "Open console"
msgstr "Konsolu aç"
#: instances/templates/instances/access_tab.html:15
msgid "Opens the VM's screen in a new window."
msgstr "Sanal makinenin ekranını yeni bir pencerede açar."
#: instances/templates/instances/access_tab.html:19
msgid "Remote viewer address"
msgstr "Uzak görüntüleyici adresi"
msgid "Remote viewer"
msgstr "Uzak görüntüleyici"
#: instances/templates/instances/access_tab.html:23
msgid "VDI"
msgstr "VDI"
#: instances/templates/instances/access_tab.html:24 networks/views.py:24
msgid "Open"
msgstr "Açık"
#: instances/templates/instances/access_tab.html:24
msgid "Get console.vv"
msgstr "console.vv dosyasını al"
#: instances/templates/instances/access_tab.html:25
msgid "Download .vv file"
msgstr ".vv dosyasını indir"
#: instances/templates/instances/access_tab.html:29
msgid "Console opens a window here."
msgstr "Konsol burada bir pencere açar."
#: instances/templates/instances/access_tab.html:28
msgid "For virt-viewer or another VNC or SPICE client on your computer."
msgstr ""
"Bilgisayarınızdaki virt-viewer ya da başka bir VNC veya SPICE istemcisi için."
#: instances/templates/instances/access_tab.html:30
msgid "VDI opens your remote viewer; console.vv sets up virt-viewer."
msgstr "VDI uzak görüntüleyicinizi açar; console.vv virt-viewer'ı ayarlar."
#: instances/templates/instances/access_tab.html:31
msgid ""
"A remote viewer cannot reach this console: it listens on the host only, or it"
" is a serial one."
@ -3933,53 +3941,50 @@ msgstr ""
"Uzak görüntüleyici bu konsola ulaşamaz: konsol yalnızca sunucuda dinliyor ya "
"da seri konsol."
#: instances/templates/instances/access_tab.html:34
#: instances/templates/instances/access_tab.html:33
msgid "Start the VM to open its console."
msgstr "Konsolunu açmak için sanal makineyi başlatın."
#: instances/templates/instances/access_tab.html:40 instances/views.py:1104
msgid "Reset root password"
msgstr "Root parolasını sıfırla"
#: instances/templates/instances/access_tab.html:38
msgid "Log in as root"
msgstr "Root olarak oturum açma"
#: instances/templates/instances/access_tab.html:42
msgid "The guest's root user gets this password."
msgstr "Konuk sistemin root kullanıcısı bu parolayı alır."
#: instances/templates/instances/access_tab.html:41
msgid "Written to the VM's disk while it is off."
msgstr "Sanal makine kapalıyken diskine yazılır."
#: instances/templates/instances/access_tab.html:43
#: instances/templates/instances/access_tab.html:66
msgid "Sent to the running VM through its guest agent."
msgstr "Çalışan sanal makineye konuk ajanı üzerinden gönderilir."
#: instances/templates/instances/access_tab.html:45
msgid "The guest agent is not connected: connect it, or shut the VM down."
msgstr "Konuk ajanı bağlı değil: bağlayın ya da sanal makineyi kapatın."
#: instances/templates/instances/access_tab.html:44
#: instances/templates/instances/access_tab.html:67
#: instances/templates/instances/access_tab.html:47
msgid "Shut the VM down, or run it with its guest agent."
msgstr "Sanal makineyi kapatın ya da konuk ajanıyla çalıştırın."
#: instances/templates/instances/access_tab.html:51
msgid "Reset Root Password"
msgstr "Kök parola sıfırla"
#: instances/templates/instances/access_tab.html:58
msgid "Reset password"
msgstr "Parolayı sıfırla"
#: instances/templates/instances/access_tab.html:62
msgid "Add SSH key for root"
msgstr "root için SSH anahtarı ekle"
#: instances/templates/instances/access_tab.html:66
msgid "SSH key"
msgstr "SSH anahtarı"
#: instances/templates/instances/access_tab.html:64
#: instances/templates/instances/access_tab.html:73
msgid "Add key"
msgstr "Anahtar ekle"
#: instances/templates/instances/access_tab.html:77
msgid "You have no saved public key."
msgstr "Kayıtlı açık anahtarınız yok."
#: instances/templates/instances/access_tab.html:64
#: instances/templates/instances/access_tab.html:77
msgid "Add one in your profile."
msgstr "Profilinizden bir tane ekleyin."
#: instances/templates/instances/access_tab.html:65
msgid "One of your public keys joins root's keys in the guest."
msgstr ""
"Açık anahtarlarınızdan biri konuk sistemdeki root anahtarlarına eklenir."
#: instances/templates/instances/access_tab.html:76
msgid "Add Public Key"
msgstr "Açık Anahtar Ekle"
#: instances/templates/instances/boot_device.html:9
msgid "empty"
msgstr "boş"
@ -5960,6 +5965,10 @@ msgstr ""
msgid "The change may still be made when the agent answers again."
msgstr "Ajan yeniden yanıt verdiğinde değişiklik yine de yapılabilir."
#: instances/views.py:1104
msgid "Reset root password"
msgstr "Root parolasını sıfırla"
#: instances/views.py:1108
msgid "Enter a password"
msgstr "Bir parola girin"
@ -7233,10 +7242,6 @@ msgstr ""
"Sunucu alt ağı yönlendirir; üst yönlendiricinin ona geri dönen bir rotası "
"olmalıdır."
#: networks/views.py:24
msgid "Open"
msgstr "Açık"
#: networks/views.py:24
msgid "The host routes the subnet and adds no firewall rules for it."
msgstr ""

Binary file not shown.

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-11-03 16:37+0000\n"
"POT-Creation-Date: 2026-11-03 17:31+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
@ -358,6 +358,7 @@ msgstr "输入用户名"
#: accounts/templates/accounts/otp_login.html:37
#: accounts/templates/login.html:36 admin/templates/admin/user_form.html:106
#: console/templates/console-vnc.html:82 instances/forms.py:28
#: instances/templates/instances/access_tab.html:53
msgid "Password"
msgstr "密码"
@ -1612,7 +1613,6 @@ msgstr "克隆"
#: appsettings/views.py:45 console/templates/console-base.html:10
#: console/templates/console-base.html:23
#: instances/templates/instance_actions.html:11
#: instances/templates/instances/access_tab.html:15
#: instances/templates/instances/settings_tab.html:32
#: instances/templates/instances/settings_tab.html:695
msgid "Console"
@ -3673,7 +3673,6 @@ msgid "Power"
msgstr "电源"
#: instances/templates/instance.html:83
#: instances/templates/instances/access_tab.html:7
msgid "Access"
msgstr "访问"
@ -3755,87 +3754,93 @@ msgstr "电源重置"
msgid "more owners"
msgstr "更多所有者"
#: instances/templates/instances/access_tab.html:3
#: instances/templates/instances/access_tab.html:2
msgid "Instance access options"
msgstr "虚拟机访问选项"
#: instances/templates/instances/access_tab.html:7
msgid "Screen"
msgstr "屏幕"
#: instances/templates/instances/access_tab.html:9
msgid ""
"Only the owners of this instance and administrators can open its console."
msgstr "只有此虚拟机的所有者和管理员可以打开其控制台。"
#: instances/templates/instances/access_tab.html:14
msgid "Open console"
msgstr "打开控制台"
#: instances/templates/instances/access_tab.html:15
msgid "Opens the VM's screen in a new window."
msgstr "在新窗口中打开虚拟机的屏幕。"
#: instances/templates/instances/access_tab.html:19
msgid "Remote viewer address"
msgstr "远程查看器地址"
msgid "Remote viewer"
msgstr "远程查看器"
#: instances/templates/instances/access_tab.html:23
msgid "VDI"
msgstr "VDI"
#: instances/templates/instances/access_tab.html:24 networks/views.py:24
msgid "Open"
msgstr "开放"
#: instances/templates/instances/access_tab.html:24
msgid "Get console.vv"
msgstr "获取 console.vv"
#: instances/templates/instances/access_tab.html:25
msgid "Download .vv file"
msgstr "下载 .vv 文件"
#: instances/templates/instances/access_tab.html:29
msgid "Console opens a window here."
msgstr "控制台在此处打开一个窗口。"
#: instances/templates/instances/access_tab.html:28
msgid "For virt-viewer or another VNC or SPICE client on your computer."
msgstr "用于您计算机上的 virt-viewer 或其他 VNC、SPICE 客户端。"
#: instances/templates/instances/access_tab.html:30
msgid "VDI opens your remote viewer; console.vv sets up virt-viewer."
msgstr "VDI 会打开你的远程查看器;console.vv 用于配置 virt-viewer。"
#: instances/templates/instances/access_tab.html:31
msgid ""
"A remote viewer cannot reach this console: it listens on the host only, or it"
" is a serial one."
msgstr "远程查看器无法连接此控制台:它只在主机上监听,或者是串口控制台。"
#: instances/templates/instances/access_tab.html:34
#: instances/templates/instances/access_tab.html:33
msgid "Start the VM to open its console."
msgstr "启动虚拟机后才能打开其控制台。"
#: instances/templates/instances/access_tab.html:40 instances/views.py:1104
msgid "Reset root password"
msgstr "重置 root 密码"
#: instances/templates/instances/access_tab.html:38
msgid "Log in as root"
msgstr "以 root 身份登录"
#: instances/templates/instances/access_tab.html:42
msgid "The guest's root user gets this password."
msgstr "客户机的 root 用户将使用此密码。"
#: instances/templates/instances/access_tab.html:41
msgid "Written to the VM's disk while it is off."
msgstr "在虚拟机关机时写入其磁盘。"
#: instances/templates/instances/access_tab.html:43
#: instances/templates/instances/access_tab.html:66
msgid "Sent to the running VM through its guest agent."
msgstr "通过客户机代理发送到正在运行的虚拟机。"
#: instances/templates/instances/access_tab.html:45
msgid "The guest agent is not connected: connect it, or shut the VM down."
msgstr "客户机代理未连接:请连接它,或将虚拟机关机。"
#: instances/templates/instances/access_tab.html:44
#: instances/templates/instances/access_tab.html:67
#: instances/templates/instances/access_tab.html:47
msgid "Shut the VM down, or run it with its guest agent."
msgstr "请将虚拟机关机,或在客户机代理运行时操作。"
#: instances/templates/instances/access_tab.html:51
msgid "Reset Root Password"
msgstr "重置 root 密码"
#: instances/templates/instances/access_tab.html:58
msgid "Reset password"
msgstr "重置密码"
#: instances/templates/instances/access_tab.html:62
msgid "Add SSH key for root"
msgstr "为 root 添加 SSH 密钥"
#: instances/templates/instances/access_tab.html:66
msgid "SSH key"
msgstr "SSH 密钥"
#: instances/templates/instances/access_tab.html:64
#: instances/templates/instances/access_tab.html:73
msgid "Add key"
msgstr "添加密钥"
#: instances/templates/instances/access_tab.html:77
msgid "You have no saved public key."
msgstr "你没有已保存的公钥。"
#: instances/templates/instances/access_tab.html:64
#: instances/templates/instances/access_tab.html:77
msgid "Add one in your profile."
msgstr "请在个人资料中添加。"
#: instances/templates/instances/access_tab.html:65
msgid "One of your public keys joins root's keys in the guest."
msgstr "你的一个公钥会加入客户机中 root 的密钥。"
#: instances/templates/instances/access_tab.html:76
msgid "Add Public Key"
msgstr "添加公钥"
#: instances/templates/instances/boot_device.html:9
msgid "empty"
msgstr "空"
@ -5655,6 +5660,10 @@ msgstr "请关闭虚拟机,或启动其 QEMU 客户机代理,然后重试"
msgid "The change may still be made when the agent answers again."
msgstr "当代理再次响应时,此更改仍可能生效。"
#: instances/views.py:1104
msgid "Reset root password"
msgstr "重置 root 密码"
#: instances/views.py:1108
msgid "Enter a password"
msgstr "请输入密码"
@ -6858,10 +6867,6 @@ msgid ""
"The host routes the subnet; the upstream router needs a route back to it."
msgstr "主机路由该子网;上游路由器需配置指向该子网的回程路由。"
#: networks/views.py:24
msgid "Open"
msgstr "开放"
#: networks/views.py:24
msgid "The host routes the subnet and adds no firewall rules for it."
msgstr "主机路由该子网,且不为其添加防火墙规则。"

View file

@ -129,6 +129,8 @@ th[aria-sort="ascending"]:not([data-sort-method="none"])::after {
border: 2px solid var(--bs-border-color);
}
.power-dot.bg-success, .power-dot.bg-warning, .power-dot.bg-secondary { border-color: transparent; }
/* the access tab's two login buttons line up */
.access-act { min-width: 9rem; }
/* the boot order: the devices the VM tries in turn, numbered and joined by a line */
.boot-chain { counter-reset: boot; }