mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-10-08 22:46:41 +00:00
fix(oci): call the editing of an application Modify everywhere
- The option that edits an installed application is Modify for one container and for a multi-container application, in the OCI menu and on the Monitor button. Recreate is only the rebuild of a multi-container application as it is. - A stack recreation says "Recreating" and "Recreated" in its steps instead of "Updating". - The notes of the GPU, Coral, disk and share menus no longer name the option. - Spanish for the new texts; the English copies of the stack texts are removed from de, fr, pt and sv so the bot translates them.
This commit is contained in:
@@ -27,10 +27,31 @@ def extracted_stack_manager(scope):
|
||||
|
||||
|
||||
class MonitorModifyContractTests(TestCase):
|
||||
def test_monitor_sends_modify_for_a_stack_and_recreate_for_a_single_instance(self):
|
||||
def test_monitor_sends_modify_for_every_instance(self):
|
||||
source = MONITOR.read_text(encoding='utf-8')
|
||||
self.assertIn('action: "update" | "modify" | "recreate" | "recover"', source)
|
||||
self.assertIn('action: ociInstance.stack ? "modify" : "recreate"', source)
|
||||
self.assertIn('action: "update" | "modify" | "recover"', source)
|
||||
self.assertIn('action: "modify",', source)
|
||||
self.assertNotIn('"recreate"', source)
|
||||
|
||||
def test_the_editor_has_one_name_for_one_container_and_for_several(self):
|
||||
menu = MENU.read_text(encoding='utf-8')
|
||||
self.assertIn("('modify', translate('Modify: edit resources, network, paths and GPU'))", menu)
|
||||
self.assertIn("('modify', translate('Modify extra paths and devices'))", menu)
|
||||
self.assertEqual(menu.count("('recreate', translate("), 1)
|
||||
self.assertIn("('recreate', translate('Recreate every container with its saved configuration'))", menu)
|
||||
|
||||
def test_recreate_on_a_single_instance_changes_nothing(self):
|
||||
node = next(item for item in ast.parse(MENU.read_text(encoding='utf-8')).body
|
||||
if isinstance(item, ast.FunctionDef) and item.name == 'manage_instance')
|
||||
row = {'vmid': 101, 'reason': 'matched', 'stack': None, 'pending': False, 'status': 'installed'}
|
||||
run_lifecycle = Mock()
|
||||
scope = {'carry_records': lambda *_, **__: {}, 'check_selected': lambda _project, selected: selected,
|
||||
'translate': lambda text: text, '_run_lifecycle': run_lifecycle, '_manage_stack': Mock()}
|
||||
exec(compile(ast.fix_missing_locations(ast.Module(body=[node], type_ignores=[])), str(MENU), 'exec'), scope)
|
||||
ui = Mock()
|
||||
self.assertFalse(scope['manage_instance'](Path('/inert'), ui, row, action='recreate'))
|
||||
self.assertEqual(ui.method_calls, [])
|
||||
run_lifecycle.assert_not_called()
|
||||
|
||||
def test_cli_and_monitor_wrapper_accept_the_modify_action(self):
|
||||
self.assertIn('choices=("update", "modify", "recreate")', CLI.read_text(encoding='utf-8'))
|
||||
|
||||
@@ -312,7 +312,7 @@ const CURRENT_VERSION_FEATURES = [
|
||||
{
|
||||
icon: <RefreshCw className="h-5 w-5" />,
|
||||
key: "releaseNotes.currentFeatures.ociUpdatesTab",
|
||||
text: "Updates for OCI containers — Update and Recreate open the same flow as the OCI menu, the backup taken before updating can be kept in a backup storage, and the image can be updated on a schedule.",
|
||||
text: "Updates for OCI containers — Update and Modify open the same flow as the OCI menu, the backup taken before updating can be kept in a backup storage, and the image can be updated on a schedule.",
|
||||
},
|
||||
{
|
||||
icon: <ScrollText className="h-5 w-5" />,
|
||||
|
||||
@@ -954,7 +954,7 @@ export function VirtualMachines() {
|
||||
// A container restored from a backup carries the mark of its installation
|
||||
// and has no record on this host until it is recovered from the menu.
|
||||
const [ociRestored, setOciRestored] = useState(false)
|
||||
const [ociAction, setOciAction] = useState<{ vmid: number; action: "update" | "modify" | "recreate" | "recover" } | null>(null)
|
||||
const [ociAction, setOciAction] = useState<{ vmid: number; action: "update" | "modify" | "recover" } | null>(null)
|
||||
|
||||
// Firewall log state — fetched only when the operator opens that tab
|
||||
// so a CT/VM without firewall use doesn't pay the pvesh cost on every
|
||||
@@ -5343,11 +5343,11 @@ const handleDownloadLogs = async (vmid: number, vmName: string) => {
|
||||
className={neutralBtnCls}
|
||||
onClick={() => setOciAction({
|
||||
vmid: selectedVM.vmid,
|
||||
action: ociInstance.stack ? "modify" : "recreate",
|
||||
action: "modify",
|
||||
})}
|
||||
>
|
||||
<RotateCcw className="h-4 w-4 mr-1.5" />
|
||||
{t("vmLxc.ociUpdates.recreate")}
|
||||
<Settings2 className="h-4 w-4 mr-1.5" />
|
||||
{t("vmLxc.ociUpdates.modify")}
|
||||
</Button>
|
||||
)}
|
||||
<Button
|
||||
@@ -7839,7 +7839,7 @@ const handleDownloadLogs = async (vmid: number, vmName: string) => {
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* Update or recreate an OCI instance: the same flow as OCI manager
|
||||
{/* Update or modify an OCI instance: the same flow as OCI manager
|
||||
Apps -> Manage installed OCI applications, for this container. */}
|
||||
{ociAction && (
|
||||
<ScriptTerminalModal
|
||||
@@ -7862,7 +7862,7 @@ const handleDownloadLogs = async (vmid: number, vmName: string) => {
|
||||
scriptName="oci_manage_instance"
|
||||
title={ociAction.action === "update" ? t("vmLxc.ociUpdates.terminalTitleUpdate")
|
||||
: ociAction.action === "recover" ? t("vmLxc.ociUpdates.terminalTitleRecover")
|
||||
: t("vmLxc.ociUpdates.terminalTitleRecreate")}
|
||||
: t("vmLxc.ociUpdates.terminalTitleModify")}
|
||||
description={t("vmLxc.ociUpdates.terminalDescription")}
|
||||
params={{
|
||||
VMID: String(ociAction.vmid),
|
||||
|
||||
@@ -1200,10 +1200,10 @@
|
||||
"openPrimary": "Haupt-CT öffnen",
|
||||
"pendingNote": "Ein Vorgang an diesem Container wurde unterbrochen; Wiederherstellen öffnet seine Wiederherstellung.",
|
||||
"update": "Aktualisieren",
|
||||
"recreate": "Neu erstellen",
|
||||
"modify": "Ändern",
|
||||
"recover": "Wiederherstellen",
|
||||
"terminalTitleUpdate": "OCI-Anwendung aktualisieren",
|
||||
"terminalTitleRecreate": "OCI-Anwendung neu erstellen",
|
||||
"terminalTitleModify": "OCI-Anwendung ändern",
|
||||
"terminalTitleRecover": "Wiederhergestellte OCI-Anwendung registrieren",
|
||||
"terminalDescription": "Derselbe Ablauf wie OCI manager Apps → Installierte OCI-Anwendungen verwalten.",
|
||||
"keepBackup": "Das vor dem Update erstellte Backup behalten",
|
||||
@@ -3387,7 +3387,7 @@
|
||||
"groupedAppUpdates": "Gruppierte Anwendungsaktualisierungsbenachrichtigungen — eine vollständige Nachricht pro Scan statt einer pro Anwendung, gruppiert nach LXC mit den installierten und verfügbaren Versionen.",
|
||||
"adminTokenScope": "Administrativer Umfang: Das Öffnen eines Monitor-Terminals und das Deaktivieren der Authentifizierung erfordern jetzt ein Full-Admin-Token, so dass ein schreibgeschütztes API-Token, das an eine Überwachungsintegration ausgegeben wird, schreibgeschützt bleibt (berichtet von @f3rs3n).",
|
||||
"ociAppTab": "OCI-Container in der App-Registerkarte — ein von OCI manager Apps installierter Container wird anhand seines Installationsdatensatzes erkannt: Anwendung und Image, ein neues Image per Digest erkannt und ein Link zum Image-Repository.",
|
||||
"ociUpdatesTab": "Updates für OCI-Container — Aktualisieren und Neu erstellen öffnen denselben Ablauf wie das OCI-Menü, das vor dem Update erstellte Backup kann in einem Backup-Speicher behalten werden und das Image lässt sich zeitgesteuert aktualisieren.",
|
||||
"ociUpdatesTab": "Updates für OCI-Container — Aktualisieren und Ändern öffnen denselben Ablauf wie das OCI-Menü, das vor dem Update erstellte Backup kann in einem Backup-Speicher behalten werden und das Image lässt sich zeitgesteuert aktualisieren.",
|
||||
"ociLogsTab": "Logs-Registerkarte für OCI-Container — die Konsolenausgabe der Anwendung, auf dem Host gespeichert und live verfolgt, mit Filter und Download. Die Proxmox-Konsole dieser Container öffnet eine Shell.",
|
||||
"appsUpdateShortcut": "Das Update-Symbol auf der Apps-Seite öffnet den Container direkt auf seiner Registerkarte Updates.",
|
||||
"webhookHttps": "Proxmox-Benachrichtigungen erreichen den Monitor auch mit aktiviertem HTTPS — sie werden über eine nur lokale Adresse zugestellt und scheitern nicht mehr an einem Zertifikatsfehler.",
|
||||
|
||||
@@ -1221,10 +1221,10 @@
|
||||
"openPrimary": "Open the main container",
|
||||
"pendingNote": "An operation on this container was interrupted; Recover opens its recovery.",
|
||||
"update": "Update",
|
||||
"recreate": "Recreate",
|
||||
"modify": "Modify",
|
||||
"recover": "Recover",
|
||||
"terminalTitleUpdate": "Update OCI application",
|
||||
"terminalTitleRecreate": "Recreate OCI application",
|
||||
"terminalTitleModify": "Modify OCI application",
|
||||
"terminalTitleRecover": "Recover restored OCI application",
|
||||
"terminalDescription": "The same flow as OCI manager Apps → Manage installed OCI applications.",
|
||||
"keepBackup": "Keep the backup taken before updating",
|
||||
@@ -3386,7 +3386,7 @@
|
||||
"groupedAppUpdates": "Grouped application update notifications — one complete message per scan instead of one per application, grouped by LXC with the installed and available versions.",
|
||||
"adminTokenScope": "Administrative scope — opening a Monitor terminal and disabling authentication now require a full-admin token, so a read-only API token issued to a monitoring integration stays read-only (reported by @f3rs3n).",
|
||||
"ociAppTab": "OCI containers in the App tab — a container installed by OCI manager Apps is recognised from its installation record: the application and its image, a new image detected by digest, and a link to the image repository.",
|
||||
"ociUpdatesTab": "Updates for OCI containers — Update and Recreate open the same flow as the OCI menu, the backup taken before updating can be kept in a backup storage, and the image can be updated on a schedule.",
|
||||
"ociUpdatesTab": "Updates for OCI containers — Update and Modify open the same flow as the OCI menu, the backup taken before updating can be kept in a backup storage, and the image can be updated on a schedule.",
|
||||
"ociLogsTab": "Logs tab for OCI containers — the console output of the application, kept on the host and followed live, with a filter and a download. The Proxmox console of these containers opens a shell.",
|
||||
"appsUpdateShortcut": "The update icon on the Apps page opens the container straight on its Updates tab.",
|
||||
"webhookHttps": "Proxmox notifications reach the Monitor with HTTPS enabled — they are delivered on a local-only address and no longer fail with a certificate error.",
|
||||
|
||||
@@ -1200,10 +1200,10 @@
|
||||
"openPrimary": "Abrir el contenedor principal",
|
||||
"pendingNote": "Una operación sobre este contenedor quedó interrumpida; Recuperar abre su recuperación.",
|
||||
"update": "Actualizar",
|
||||
"recreate": "Recrear",
|
||||
"modify": "Modificar",
|
||||
"recover": "Recuperar",
|
||||
"terminalTitleUpdate": "Actualizar aplicación OCI",
|
||||
"terminalTitleRecreate": "Recrear aplicación OCI",
|
||||
"terminalTitleModify": "Modificar aplicación OCI",
|
||||
"terminalTitleRecover": "Recuperar aplicación OCI restaurada",
|
||||
"terminalDescription": "El mismo recorrido que OCI manager Apps → Gestionar aplicaciones OCI instaladas.",
|
||||
"keepBackup": "Conservar el backup realizado antes de actualizar",
|
||||
@@ -3387,7 +3387,7 @@
|
||||
"groupedAppUpdates": "Notificaciones de actualización de aplicaciones agrupadas — un mensaje completo por escaneo en lugar de uno por aplicación, agrupado por LXC con las versiones instalada y disponible.",
|
||||
"adminTokenScope": "Ámbito administrativo — abrir un terminal del Monitor y desactivar la autenticación ahora requieren un token de administrador completo, así que un token de API de solo lectura se mantiene de solo lectura (reportado por @f3rs3n).",
|
||||
"ociAppTab": "Contenedores OCI en la pestaña App — un contenedor instalado por OCI manager Apps se reconoce desde su registro de instalación: la aplicación y su imagen, una imagen nueva detectada por digest y el enlace al repositorio de la imagen.",
|
||||
"ociUpdatesTab": "Actualizaciones de contenedores OCI — Actualizar y Recrear abren el mismo recorrido que el menú OCI, el backup realizado antes de actualizar puede conservarse en un almacenamiento de backups y la imagen puede actualizarse de forma programada.",
|
||||
"ociUpdatesTab": "Actualizaciones de contenedores OCI — Actualizar y Modificar abren el mismo recorrido que el menú OCI, el backup realizado antes de actualizar puede conservarse en un almacenamiento de backups y la imagen puede actualizarse de forma programada.",
|
||||
"ociLogsTab": "Pestaña Logs para contenedores OCI — la salida de consola de la aplicación, guardada en el host y seguida en directo, con filtro y descarga. La consola de Proxmox de estos contenedores abre un shell.",
|
||||
"appsUpdateShortcut": "El icono de actualización de la página Apps abre el contenedor directamente en su pestaña Actualizaciones.",
|
||||
"webhookHttps": "Las notificaciones de Proxmox llegan al Monitor con HTTPS activado — se entregan en una dirección solo local y ya no fallan por un error de certificado.",
|
||||
|
||||
@@ -1200,10 +1200,10 @@
|
||||
"openPrimary": "Ouvrir le CT principal",
|
||||
"pendingNote": "Une opération sur ce conteneur a été interrompue ; Récupérer ouvre sa récupération.",
|
||||
"update": "Mettre à jour",
|
||||
"recreate": "Recréer",
|
||||
"modify": "Modifier",
|
||||
"recover": "Récupérer",
|
||||
"terminalTitleUpdate": "Mettre à jour l'application OCI",
|
||||
"terminalTitleRecreate": "Recréer l'application OCI",
|
||||
"terminalTitleModify": "Modifier l'application OCI",
|
||||
"terminalTitleRecover": "Récupérer l'application OCI restaurée",
|
||||
"terminalDescription": "Le même parcours que OCI manager Apps → Gérer les applications OCI installées.",
|
||||
"keepBackup": "Conserver la sauvegarde prise avant la mise à jour",
|
||||
@@ -3387,7 +3387,7 @@
|
||||
"groupedAppUpdates": "Notifications groupées de mise à jour des applications — un message complet par balayage au lieu d'un message par application, groupé par LXC avec les versions installées et disponibles.",
|
||||
"adminTokenScope": "Champ d'application administratif — l'ouverture d'un terminal de monitoring et la désactivation de l'authentification nécessitent maintenant un jeton d'administration complet, de sorte qu'un jeton d'API en lecture seule émis à un monitoring intégré reste en lecture seule (rapporté par @f3rs3n).",
|
||||
"ociAppTab": "Conteneurs OCI dans l'onglet App — un conteneur installé par OCI manager Apps est reconnu à partir de son enregistrement d'installation : l'application et son image, une nouvelle image détectée par digest et un lien vers le dépôt de l'image.",
|
||||
"ociUpdatesTab": "Mises à jour des conteneurs OCI — Mettre à jour et Recréer ouvrent le même parcours que le menu OCI, la sauvegarde prise avant la mise à jour peut être conservée dans un stockage de sauvegardes et l'image peut être mise à jour de façon planifiée.",
|
||||
"ociUpdatesTab": "Mises à jour des conteneurs OCI — Mettre à jour et Modifier ouvrent le même parcours que le menu OCI, la sauvegarde prise avant la mise à jour peut être conservée dans un stockage de sauvegardes et l'image peut être mise à jour de façon planifiée.",
|
||||
"ociLogsTab": "Onglet Logs pour les conteneurs OCI — la sortie console de l'application, conservée sur l'hôte et suivie en direct, avec un filtre et un téléchargement. La console Proxmox de ces conteneurs ouvre un shell.",
|
||||
"appsUpdateShortcut": "L'icône de mise à jour de la page Apps ouvre directement le conteneur sur son onglet Mises à jour.",
|
||||
"webhookHttps": "Les notifications de Proxmox atteignent le Monitor avec HTTPS activé — elles sont livrées sur une adresse uniquement locale et n'échouent plus sur une erreur de certificat.",
|
||||
|
||||
@@ -1200,10 +1200,10 @@
|
||||
"openPrimary": "Apri il CT principale",
|
||||
"pendingNote": "Un’operazione su questo container è rimasta in sospeso; Recupera apre il menu per verificarne lo stato o avviare il ripristino.",
|
||||
"update": "Aggiorna",
|
||||
"recreate": "Ricrea",
|
||||
"modify": "Modifica",
|
||||
"recover": "Recupera",
|
||||
"terminalTitleUpdate": "Aggiorna applicazione OCI",
|
||||
"terminalTitleRecreate": "Ricrea applicazione OCI",
|
||||
"terminalTitleModify": "Modifica applicazione OCI",
|
||||
"terminalTitleRecover": "Recupera applicazione OCI ripristinata",
|
||||
"terminalDescription": "Lo stesso percorso di OCI manager Apps → Gestisci le applicazioni OCI installate.",
|
||||
"keepBackup": "Conserva il backup eseguito prima dell'aggiornamento",
|
||||
@@ -3387,7 +3387,7 @@
|
||||
"groupedAppUpdates": "Notifiche aggiornamenti app raggruppate: un messaggio completo per scansione, non uno per app, raggruppato per LXC con versioni installate e disponibili.",
|
||||
"adminTokenScope": "Permessi amministrativi: aprire un terminale Monitor e disabilitare l’autenticazione richiede ora un token con pieni privilegi. I token API in sola lettura delle integrazioni di monitoraggio restano in sola lettura (segnalato da @f3rs3n).",
|
||||
"ociAppTab": "Container OCI nella scheda App: un container installato da OCI manager Apps è riconosciuto dal record di installazione. Sono mostrati app e immagine, nuova immagine rilevata tramite digest e link al repository dell’immagine.",
|
||||
"ociUpdatesTab": "Aggiornamenti container OCI: Aggiorna e Ricrea aprono lo stesso flusso del menu OCI. Il backup prima dell’aggiornamento può restare in uno storage di backup e l’immagine si può aggiornare su pianificazione.",
|
||||
"ociUpdatesTab": "Aggiornamenti container OCI: Aggiorna e Modifica aprono lo stesso flusso del menu OCI. Il backup prima dell’aggiornamento può restare in uno storage di backup e l’immagine si può aggiornare su pianificazione.",
|
||||
"ociLogsTab": "Scheda Log per container OCI: output della console dell’app, conservato sull’host e seguito in tempo reale, con filtro e download. La console Proxmox di questi container apre una shell.",
|
||||
"appsUpdateShortcut": "L’icona di aggiornamento nella pagina App apre il container direttamente nella scheda Aggiornamenti.",
|
||||
"webhookHttps": "Le notifiche Proxmox raggiungono il Monitor con HTTPS attivo: consegnate su un indirizzo solo locale, non falliscono più per errori di certificato.",
|
||||
|
||||
@@ -1200,10 +1200,10 @@
|
||||
"openPrimary": "Abrir o CT principal",
|
||||
"pendingNote": "Uma operação neste contentor foi interrompida; Recuperar abre a sua recuperação.",
|
||||
"update": "Atualizar",
|
||||
"recreate": "Recriar",
|
||||
"modify": "Modificar",
|
||||
"recover": "Recuperar",
|
||||
"terminalTitleUpdate": "Atualizar aplicação OCI",
|
||||
"terminalTitleRecreate": "Recriar aplicação OCI",
|
||||
"terminalTitleModify": "Modificar aplicação OCI",
|
||||
"terminalTitleRecover": "Recuperar aplicação OCI restaurada",
|
||||
"terminalDescription": "O mesmo percurso de OCI manager Apps → Gerir aplicações OCI instaladas.",
|
||||
"keepBackup": "Manter o backup feito antes da atualização",
|
||||
@@ -3387,7 +3387,7 @@
|
||||
"groupedAppUpdates": "Notificações de atualização de aplicativos agrupadas — uma mensagem completa por digitalização em vez de uma por aplicação, agrupadas por LXC com as versões instaladas e disponíveis.",
|
||||
"adminTokenScope": "Âmbito administrativo — abrir um terminal Monitor e desativar a autenticação agora requer um token de administração completa, então um token API somente para leitura emitido para uma integração de monitoramento permanece somente para leitura (referido por @f3rs3n).",
|
||||
"ociAppTab": "Contentores OCI no separador App — um contentor instalado pelo OCI manager Apps é reconhecido a partir do seu registo de instalação: a aplicação e a sua imagem, uma nova imagem detetada por digest e uma ligação ao repositório da imagem.",
|
||||
"ociUpdatesTab": "Atualizações de contentores OCI — Atualizar e Recriar abrem o mesmo percurso do menu OCI, o backup feito antes da atualização pode ser mantido num armazenamento de backups e a imagem pode ser atualizada de forma agendada.",
|
||||
"ociUpdatesTab": "Atualizações de contentores OCI — Atualizar e Modificar abrem o mesmo percurso do menu OCI, o backup feito antes da atualização pode ser mantido num armazenamento de backups e a imagem pode ser atualizada de forma agendada.",
|
||||
"ociLogsTab": "Separador Logs para contentores OCI — a saída da consola da aplicação, guardada no host e acompanhada em direto, com filtro e transferência. A consola do Proxmox destes contentores abre uma shell.",
|
||||
"appsUpdateShortcut": "O ícone de atualização da página Apps abre o contentor diretamente no seu separador Atualizações.",
|
||||
"webhookHttps": "As notificações do Proxmox chegam ao Monitor com HTTPS ativo — são entregues num endereço apenas local e já não falham por um erro de certificado.",
|
||||
|
||||
@@ -1221,10 +1221,10 @@
|
||||
"openPrimary": "Otvoriť hlavný CT",
|
||||
"pendingNote": "Operácia na tomto kontajneri bola prerušená; tlačidlo Obnoviť spustí obnovenie.",
|
||||
"update": "Aktualizovať",
|
||||
"recreate": "Znovu vytvoriť",
|
||||
"modify": "Upraviť",
|
||||
"recover": "Obnoviť",
|
||||
"terminalTitleUpdate": "Aktualizovať OCI aplikáciu",
|
||||
"terminalTitleRecreate": "Znovu vytvoriť OCI aplikáciu",
|
||||
"terminalTitleModify": "Upraviť OCI aplikáciu",
|
||||
"terminalTitleRecover": "Obnoviť obnovenú OCI aplikáciu",
|
||||
"terminalDescription": "Použije sa rovnaký postup ako v ponuke Správca OCI aplikácií → Spravovať nainštalované OCI aplikácie.",
|
||||
"keepBackup": "Ponechať zálohu vytvorenú pred aktualizáciou",
|
||||
@@ -3386,7 +3386,7 @@
|
||||
"groupedAppUpdates": "Zoskupené upozornenia na aktualizácie aplikácií — po kontrole príde jedno prehľadné upozornenie namiesto samostatnej správy pre každú aplikáciu. Aplikácie sú zoskupené podľa LXC a zobrazia sa nainštalované aj dostupné verzie.",
|
||||
"adminTokenScope": "Prístup správcu — otvorenie terminálu Monitoru a vypnutie overovania teraz vyžadujú token s úplnými právami správcu. Token iba na čítanie, napríklad pre monitorovaciu integráciu, tak zostáva bezpečne obmedzený (nahlásil @f3rs3n).",
|
||||
"ociAppTab": "OCI kontajnery na karte Aplikácie — kontajner nainštalovaný cez Správcu OCI aplikácií sa rozpozná podľa záznamu o inštalácii: aplikácia a jej obraz, nový obraz zistený podľa digestu a odkaz na repozitár obrazu.",
|
||||
"ociUpdatesTab": "Aktualizácie OCI kontajnerov — Aktualizovať a Znovu vytvoriť otvoria rovnaký postup ako ponuka OCI, zálohu vytvorenú pred aktualizáciou možno ponechať v úložisku záloh a obraz možno aktualizovať podľa plánu.",
|
||||
"ociUpdatesTab": "Aktualizácie OCI kontajnerov — Aktualizovať a Upraviť otvoria rovnaký postup ako ponuka OCI, zálohu vytvorenú pred aktualizáciou možno ponechať v úložisku záloh a obraz možno aktualizovať podľa plánu.",
|
||||
"ociLogsTab": "Karta Logy pre OCI kontajnery — výstup konzoly aplikácie uložený na hostiteľovi a sledovaný naživo, s filtrom a stiahnutím. Konzola Proxmoxu týchto kontajnerov otvorí shell.",
|
||||
"appsUpdateShortcut": "Ikona aktualizácie na stránke Aplikácie otvorí kontajner priamo na jeho karte Aktualizácie.",
|
||||
"webhookHttps": "Upozornenia Proxmoxu sa dostanú do Monitora aj so zapnutým HTTPS — doručujú sa na výhradne lokálnu adresu a už nezlyhávajú na chybe certifikátu.",
|
||||
|
||||
@@ -1200,10 +1200,10 @@
|
||||
"openPrimary": "Öppna huvud-CT:n",
|
||||
"pendingNote": "En åtgärd på den här containern avbröts; Återställ öppnar dess återställning.",
|
||||
"update": "Uppdatera",
|
||||
"recreate": "Återskapa",
|
||||
"modify": "Ändra",
|
||||
"recover": "Återställ",
|
||||
"terminalTitleUpdate": "Uppdatera OCI-applikation",
|
||||
"terminalTitleRecreate": "Återskapa OCI-applikation",
|
||||
"terminalTitleModify": "Ändra OCI-applikation",
|
||||
"terminalTitleRecover": "Återställ återställd OCI-applikation",
|
||||
"terminalDescription": "Samma flöde som OCI manager Apps → Hantera installerade OCI-applikationer.",
|
||||
"keepBackup": "Behåll säkerhetskopian som tas före uppdateringen",
|
||||
@@ -3387,7 +3387,7 @@
|
||||
"groupedAppUpdates": "Grupperade programuppdateringsmeddelanden - ett komplett meddelande per skanning istället för en per applikation, grupperad av LXC med installerade och tillgängliga versioner.",
|
||||
"adminTokenScope": "Administrativa räckvidd - öppna en Monitor-terminal och inaktivera autentisering kräver nu en full-admin-token, så en lättläst API-token utfärdad till en övervakningsintegration förblir lättläst (rapporterad av @f3rs3n).",
|
||||
"ociAppTab": "OCI-containrar i fliken App — en container som installerats av OCI manager Apps känns igen från sin installationspost: applikationen och dess avbild, en ny avbild som upptäcks via digest och en länk till avbildens repository.",
|
||||
"ociUpdatesTab": "Uppdateringar för OCI-containrar — Uppdatera och Återskapa öppnar samma flöde som OCI-menyn, säkerhetskopian som tas före uppdateringen kan behållas i en lagring för säkerhetskopior och avbilden kan uppdateras enligt schema.",
|
||||
"ociUpdatesTab": "Uppdateringar för OCI-containrar — Uppdatera och Ändra öppnar samma flöde som OCI-menyn, säkerhetskopian som tas före uppdateringen kan behållas i en lagring för säkerhetskopior och avbilden kan uppdateras enligt schema.",
|
||||
"ociLogsTab": "Fliken Logs för OCI-containrar — applikationens konsolutdata, sparad på värden och följd i realtid, med filter och nedladdning. Proxmox-konsolen för dessa containrar öppnar ett skal.",
|
||||
"appsUpdateShortcut": "Uppdateringsikonen på sidan Appar öppnar containern direkt på dess flik Uppdateringar.",
|
||||
"webhookHttps": "Proxmox-aviseringar når Monitor med HTTPS aktiverat — de levereras till en adress som bara är lokal och misslyckas inte längre på grund av ett certifikatfel.",
|
||||
|
||||
@@ -337,7 +337,6 @@
|
||||
"All user-installed packages from the backup are present on this host": "Alle vom Benutzer installierten Pakete aus dem Backup sind auf diesem Host vorhanden",
|
||||
"All users with UID and GID": "Alle Benutzer mit UID und GID",
|
||||
"All {count} containers of the application are updated together (main CT: {vmid}). If there are new versions, all images are downloaded and verified, the application is stopped, each container is backed up and replaced with its new image. If anything fails, the backups are restored.": "Alle {count}-Container der Anwendung werden gemeinsam aktualisiert (Haupt-CT: {vmid}).Wenn es neue Versionen gibt, werden alle Images heruntergeladen und überprüft, die Anwendung wird gestoppt, jeder Container wird gesichert und durch sein neues Image ersetzt. Wenn etwas fehlschlägt, werden die Backups wiederhergestellt.",
|
||||
"All {count} containers of the application will be recreated from their saved image digests (main CT: {vmid}). The stack is stopped, every container is backed up and replaced, then checked. If anything fails, the backups are restored.": "All {count} containers of the application will be recreated from their saved image digests (main CT: {vmid}). The stack is stopped, every container is backed up and replaced, then checked. If anything fails, the backups are restored.",
|
||||
"Allocate CPU Cores": "Weisen Sie CPU-Kerne zu",
|
||||
"Allocate RAM in MiB": "Weisen Sie RAM in MiB zu",
|
||||
"Allow TCP port {port} from {subnet} through the host firewall? Existing firewall rules are not changed.": "TCP-Port {port} von {subnet} durch die Host-Firewall zulassen? Bestehende Firewall-Regeln werden nicht geändert.",
|
||||
@@ -409,7 +408,6 @@
|
||||
"Apply options from the current catalog template? New required paths and settings may be requested. Review the resulting configuration before recreating the CT.": "Optionen aus der aktuellen Katalogvorlage anwenden? Es können neue erforderliche Pfade und Einstellungen angefordert werden. Überprüfen Sie die resultierende Konfiguration, bevor Sie CT neu erstellen.",
|
||||
"Apply read+write access for 'others' on the host directory?": "Lese- und Schreibzugriff für „Andere“ auf das Hostverzeichnis anwenden?",
|
||||
"Apply the options from the current catalog template? Your data and configuration are kept.": "Wenden Sie die Optionen aus der aktuellen Katalogvorlage an? Ihre Daten und Konfiguration werden gespeichert.",
|
||||
"Apply these changes?": "Apply these changes?",
|
||||
"Applying AMD-specific fixes...": "Anwenden von AMD-spezifischen Korrekturen...",
|
||||
"Applying Changes": "Anwenden von Änderungen",
|
||||
"Applying Controller/NVMe passthrough to VM": "Anwenden von Controller/NVMe-Passthrough auf die VM",
|
||||
@@ -809,7 +807,6 @@
|
||||
"Checking the remote...": "Die Fernbedienung überprüfen...",
|
||||
"Checking the restored installation": "Überprüfung der wiederhergestellten Installation",
|
||||
"Checking the restored installation...": "Überprüfung der wiederhergestellten Installation...",
|
||||
"Checking the stack before recreating...": "Checking the stack before recreating...",
|
||||
"Checking the stack before the update...": "Überprüfen Sie den Stack vor dem Update ...",
|
||||
"Checking the updated stack...": "Überprüfen Sie den aktualisierten Stack...",
|
||||
"Checklist post-upgrade finished. Warnings:": "Checkliste nach dem Upgrade abgeschlossen. Warnungen:",
|
||||
@@ -3214,7 +3211,6 @@
|
||||
"Invalid resources": "Ungültige Mittel",
|
||||
"Invalid restored volume path": "Ungültiger wiederhergestellter Volumenpfad",
|
||||
"Invalid running state": "Invaliditätsstatus",
|
||||
"Invalid saved image digest": "Invalid saved image digest",
|
||||
"Invalid security.unprivileged value:": "Invalid security.unprivilegierter Wert:",
|
||||
"Invalid selection": "Ungültige Auswahl",
|
||||
"Invalid service alias": "Aliasname ungültiger Dienst",
|
||||
@@ -3601,8 +3597,6 @@
|
||||
"Model": "Modell",
|
||||
"Modern resource monitor (press q to exit)": "Moderner Ressourcenmonitor (zum Beenden q drücken)",
|
||||
"Modern, easy to use download automation for torrents and usenet.": "Moderne, einfach zu bedienende Download-Automatisierung für Torrents und Usenet.",
|
||||
"Modify OCI stack": "Modify OCI stack",
|
||||
"Modify extra paths and devices": "Modify extra paths and devices",
|
||||
"Modifying Fastfetch configuration...": "Fastfetch-Konfiguration wird geändert...",
|
||||
"Modules configuration updated.": "Modulkonfiguration aktualisiert.",
|
||||
"Modules loaded.": "Module geladen.",
|
||||
@@ -4879,13 +4873,9 @@
|
||||
"Recovery setup failed": "Die Wiederherstellungseinrichtung ist fehlgeschlagen",
|
||||
"Recreate": "Recreated",
|
||||
"Recreate OCI": "OCI neu erstellen",
|
||||
"Recreate OCI stack": "Recreate OCI stack",
|
||||
"Recreate every container with its saved configuration": "Recreate every container with its saved configuration",
|
||||
"Recreate the whole stack?": "Recreate the whole stack?",
|
||||
"Recreate with these options?": "Recreate mit diesen Optionen?",
|
||||
"Recreate: add or remove extra paths and devices": "Neu erstellen: Zusätzliche Pfade und Geräte hinzufügen oder entfernen",
|
||||
"Recreate: edit resources, network, paths and GPU": "Recreate: Ressourcen, Netzwerk, Pfade und GPU bearbeiten",
|
||||
"Recreating": "Recreating",
|
||||
"Recreating requires a confirmed proposal": "Recreating requires ein bestätigter Vorschlag",
|
||||
"Recreating the container...": "Den Container neu erstellen...",
|
||||
"Recreating the container:": "Wiederherstellen des Containers:",
|
||||
@@ -5744,7 +5734,6 @@
|
||||
"Stack records saved": "Speichern von Stack Records",
|
||||
"Stack records saved; no container was reinstalled.": "Speichern von Stapeldatensätzen; kein Container wurde neu installiert.",
|
||||
"Stack recovery completed; every member is back to its previous installation.": "Stack Recovery abgeschlossen; jedes Mitglied ist zurück zu seiner vorherigen Installation.",
|
||||
"Stack recreation completed. Data kept.": "Stack recreation completed. Data kept.",
|
||||
"Stack startup hook installed": "Stack Starthaken installiert",
|
||||
"Stack stopped": "Stack stoppt",
|
||||
"Stack update completed. Data kept.": "Stack-Update abgeschlossen. Vorgehaltene Daten.",
|
||||
@@ -6389,7 +6378,6 @@
|
||||
"The record or diagnosis could not be completed; no update was run.": "Die Aufzeichnung oder Diagnose konnte nicht abgeschlossen werden; kein Update wurde ausgeführt.",
|
||||
"The recovery did not complete. Review the log and choose \"Recover\" again for this container in the OCI management menu.": "Die Rückforderung war nicht abgeschlossen. Überprüfen Sie das Protokoll und wählen Sie erneut \"Wiederherstellen\" für diesen Container im OCI-Verwaltungsmenü.",
|
||||
"The recovery did not complete. Review the log and choose \"{choice}\" again for this container in the OCI management menu.": "Die Wiederherstellung wurde nicht abgeschlossen. Prüfen Sie das Protokoll und wählen Sie für diesen Container im OCI-Verwaltungsmenü erneut \"{choice}\".",
|
||||
"The registry did not return the saved image digest": "The registry did not return the saved image digest",
|
||||
"The remote does not exist; create and authorize it first in the WebUI:": "Die Fernbedienung existiert nicht; erstellen und autorisieren Sie sie zuerst in der WebUI:",
|
||||
"The remote installer must run as root on Proxmox VE": "Der Remote-Installer muss als root auf Proxmox VE ausgeführt werden",
|
||||
"The remote must already be created and authorized in the Rclone web UI. This operation restarts the CT and publishes two FUSE views on the host.": "Die Fernbedienung muss bereits im Rclone Web UI erstellt und autorisiert werden. Diese operation startet den CT neu und veröffentlicht zwei FUSE-Ansichten auf dem Host.",
|
||||
|
||||
+46
-45
@@ -84,7 +84,6 @@
|
||||
"A member stopped:": "Un miembro se detuvo:",
|
||||
"A member was modified after it was recovered": "Un miembro fue modificado después de su recuperación",
|
||||
"A modern wiki and knowledge base for teams": "Una wiki y base de conocimiento moderna para equipos",
|
||||
"A multi-container application is not recreated: its containers are updated together.": "Una aplicación multicontenedor no se recrea: sus contenedores se actualizan juntos.",
|
||||
"A new ProxMenux version is available:": "Una nueva versión de ProxMenux está disponible:",
|
||||
"A new kernel is staged for the next boot:": "Se prepara un nuevo kernel para el siguiente arranque:",
|
||||
"A newer version is available:": "Hay una versión más nueva disponible:",
|
||||
@@ -337,7 +336,7 @@
|
||||
"All user-installed packages from the backup are present on this host": "Todos los paquetes instalados por el usuario desde el backup están presentes en este host",
|
||||
"All users with UID and GID": "Todos los usuarios con UID y GID",
|
||||
"All {count} containers of the application are updated together (main CT: {vmid}). If there are new versions, all images are downloaded and verified, the application is stopped, each container is backed up and replaced with its new image. If anything fails, the backups are restored.": "Se actualizan juntos los {count} contenedores de la aplicación (CT principal: {vmid}). Si hay versiones nuevas, se descargan y verifican todas las imágenes, se detiene la aplicación, se hace un backup de cada contenedor y se sustituyen por las nuevas imágenes. Si algo falla, se restauran los backups.",
|
||||
"All {count} containers of the application will be recreated from their saved image digests (main CT: {vmid}). The stack is stopped, every container is backed up and replaced, then checked. If anything fails, the backups are restored.": "All {count} containers of the application will be recreated from their saved image digests (main CT: {vmid}). The stack is stopped, every container is backed up and replaced, then checked. If anything fails, the backups are restored.",
|
||||
"All {count} containers of the application will be recreated from their saved image digests (main CT: {vmid}). The stack is stopped, every container is backed up and replaced, then checked. If anything fails, the backups are restored.": "Los {count} contenedores de la aplicación se recrearán desde los digest de imagen guardados (CT principal: {vmid}). La pila se detiene, se hace un backup de cada contenedor, se sustituye y se comprueba. Si algo falla, se restauran los backups.",
|
||||
"Allocate CPU Cores": "Asignar núcleos de CPU",
|
||||
"Allocate RAM in MiB": "Asignar RAM en MiB",
|
||||
"Allow TCP port {port} from {subnet} through the host firewall? Existing firewall rules are not changed.": "¿Permitir el puerto TCP {port} desde {subnet} en el cortafuegos del host? Las reglas existentes no se modifican.",
|
||||
@@ -410,7 +409,7 @@
|
||||
"Apply options from the current catalog template? New required paths and settings may be requested. Review the resulting configuration before recreating the CT.": "¿Aplicar las opciones de la plantilla actual del catálogo? Puede que se pidan rutas y ajustes nuevos obligatorios. Revisa la configuración resultante antes de recrear el CT.",
|
||||
"Apply read+write access for 'others' on the host directory?": "¿Aplicar acceso de lectura+escritura para 'otros' en el directorio de host?",
|
||||
"Apply the options from the current catalog template? Your data and configuration are kept.": "¿Aplicar las opciones de la plantilla actual del catálogo? Sus datos y su configuración se mantienen.",
|
||||
"Apply these changes?": "Apply these changes?",
|
||||
"Apply these changes?": "¿Aplicar estos cambios?",
|
||||
"Applying AMD-specific fixes...": "Aplicando correcciones específicas de AMD...",
|
||||
"Applying Changes": "Aplicando cambios",
|
||||
"Applying Controller/NVMe passthrough to VM": "Aplicando el passthrough de controlador/NVMe a la VM",
|
||||
@@ -754,7 +753,9 @@
|
||||
"Change what runs recognition: CPU or GPU": "Cambiar qué ejecuta el reconocimiento: CPU o GPU",
|
||||
"Changedetection.io provides free, open-source web page monitoring, notification and change detection.": "Changedetection.io ofrece monitorización de páginas web, notificaciones y detección de cambios, gratis y de código abierto.",
|
||||
"Changes applied. A system reboot is recommended for them to take full effect.": "Se aplicaron cambios. Se recomienda reiniciar el sistema para que surtan efecto completo.",
|
||||
"Changes applied. Data kept.": "Cambios aplicados. Datos conservados.",
|
||||
"Changes have been applied to the configuration file.": "Se han aplicado cambios al archivo de configuración.",
|
||||
"Changes prepared": "Cambios preparados",
|
||||
"Changes will apply after reboot.": "Los cambios se aplicarán después del reinicio.",
|
||||
"Changing Release Channel": "Cambio de canal de release",
|
||||
"Changing the machine type on an existing installed VM is not safe: it changes the chipset and PCI slot layout, which typically prevents the guest OS from booting.": "Cambiar el tipo de máquina de una VM ya instalada no es seguro: cambia el chipset y la disposición de las ranuras PCI, lo que normalmente impide que arranque el sistema operativo de la VM.",
|
||||
@@ -790,7 +791,7 @@
|
||||
"Checking VFIO modules...": "Comprobando módulos VFIO...",
|
||||
"Checking VM virtual display model...": "Comprobando el modelo de pantalla virtual de VM...",
|
||||
"Checking ZFS autotrim configuration...": "Comprobando la configuración de recorte automático de ZFS...",
|
||||
"Checking and repairing old LVM PV headers (if needed)...": "Comprobación y reparación de cabezales fotovoltaicos LVM antiguos (si es necesario)...",
|
||||
"Checking and repairing old LVM PV headers (if needed)...": "Comprobando y reparando cabeceras antiguas de PV de LVM (si es necesario)...",
|
||||
"Checking conflicting drivers blacklist...": "Comprobando la lista negra de controladores en conflicto...",
|
||||
"Checking for updates...": "Buscando actualizaciones...",
|
||||
"Checking free space in /var/cache/apt/archives...": "Comprobando espacio libre en /var/cache/apt/archives...",
|
||||
@@ -801,18 +802,19 @@
|
||||
"Checking that the container keeps running...": "Comprobando que el contenedor sigue funcionando...",
|
||||
"Checking that this version builds against the running kernel...": "Comprobando que esta versión se compila con el kernel en ejecución...",
|
||||
"Checking the GPU of the machine learning container...": "Comprobando la GPU del contenedor Machine learning...",
|
||||
"Checking the container before recreating it...": "Revisando el contenedor antes de recrearlo...",
|
||||
"Checking the container before modifying it...": "Revisando el contenedor antes de modificarlo...",
|
||||
"Checking the container before the update...": "Revisando el contenedor antes de la actualización...",
|
||||
"Checking the device permissions for the application user...": "Verificación de los permisos del dispositivo para el usuario de la aplicación...",
|
||||
"Checking the image compatibility:": "Verificación de la compatibilidad de la imagen:",
|
||||
"Checking the device permissions for the application user...": "Comprobando los permisos del dispositivo para el usuario de la aplicación...",
|
||||
"Checking the image compatibility:": "Comprobando la compatibilidad de la imagen:",
|
||||
"Checking the image in the registry...": "Revisando la imagen en el registro...",
|
||||
"Checking the interrupted operation...": "Comprobando la operación interrumpida...",
|
||||
"Checking the interrupted stack operation...": "Revisando la operación de pila interrumpida...",
|
||||
"Checking the new image without starting it:": "Comprobando la nueva imagen sin comenzarla:",
|
||||
"Checking the remote...": "Revisando el control remoto...",
|
||||
"Checking the new image without starting it:": "Comprobando la nueva imagen sin iniciarla:",
|
||||
"Checking the recreated stack...": "Revisando la pila recreada...",
|
||||
"Checking the remote...": "Revisando el remoto...",
|
||||
"Checking the restored installation": "Comprobación de la instalación restaurada",
|
||||
"Checking the restored installation...": "Revisando la instalación restaurada...",
|
||||
"Checking the stack before recreating...": "Checking the stack before recreating...",
|
||||
"Checking the stack before recreating...": "Revisando la pila antes de recrearla...",
|
||||
"Checking the stack before the update...": "Revisando la pila antes de la actualización...",
|
||||
"Checking the updated stack...": "Revisando la pila actualizada...",
|
||||
"Checklist post-upgrade finished. Warnings:": "Lista de verificación posterior a la actualización finalizada. Advertencias:",
|
||||
@@ -1152,8 +1154,8 @@
|
||||
"Container:": "Contenedor:",
|
||||
"Containers & Docker": "Contenedores y Docker",
|
||||
"Containers created from an OCI image are not listed.": "Los contenedores creados desde una imagen OCI no aparecen en la lista.",
|
||||
"Containers created from an OCI image are not listed: their devices are changed in OCI manager Apps (Recreate).": "Los contenedores creados desde una imagen OCI no aparecen: sus dispositivos se cambian en OCI manager Apps (Recrear).",
|
||||
"Containers created from an OCI image are not listed: their paths are changed in OCI manager Apps (Recreate).": "Los contenedores creados desde una imagen OCI no aparecen: sus rutas se cambian en OCI manager Apps (Recrear).",
|
||||
"Containers created from an OCI image are not listed: their devices are changed in OCI manager Apps.": "Los contenedores creados desde una imagen OCI no aparecen: sus dispositivos se cambian en OCI manager Apps.",
|
||||
"Containers created from an OCI image are not listed: their paths are changed in OCI manager Apps.": "Los contenedores creados desde una imagen OCI no aparecen: sus rutas se cambian en OCI manager Apps.",
|
||||
"Containers returned to their previous state": "Los contenedores regresaron a su estado anterior",
|
||||
"Containers targeted for removal:": "Contenedores que se eliminarán:",
|
||||
"Containers that are removed:": "Contenedores que se eliminan:",
|
||||
@@ -1415,7 +1417,7 @@
|
||||
"Creating VM with the above configuration": "Creando VM con la configuración anterior",
|
||||
"Creating VM...": "Creando máquina virtual...",
|
||||
"Creating a backup in": "Creando un backup en",
|
||||
"Creating a backup of": "Crear un backup",
|
||||
"Creating a backup of": "Creando un backup de",
|
||||
"Creating a backup of the container...": "Creando un backup del contenedor...",
|
||||
"Creating backup job...": "Creando el trabajo de backup...",
|
||||
"Creating backup of configuration file...": "Creando backup del archivo de configuración...",
|
||||
@@ -3128,7 +3130,7 @@
|
||||
"Invalid NVIDIA device:": "Dispositivo NVIDIA inválido:",
|
||||
"Invalid Nextcloud volume": "Volumen inválido Nextcloud",
|
||||
"Invalid OCI Entrypoint": "Punto de entrada OCI inválido",
|
||||
"Invalid OCI digest": "Inválido OCI digest",
|
||||
"Invalid OCI digest": "Digest OCI no válido",
|
||||
"Invalid OCR language:": "Idioma OCR inválido:",
|
||||
"Invalid Option": "Opción no válida",
|
||||
"Invalid Path": "Ruta no válida",
|
||||
@@ -3211,14 +3213,14 @@
|
||||
"Invalid prlimit value": "Valor de primitivo inválido",
|
||||
"Invalid process limits format": "Inválido límites de proceso formato",
|
||||
"Invalid read-only option": "Opción de solo lectura no válida",
|
||||
"Invalid registry digest": "Registro inválido digest",
|
||||
"Invalid registry digest": "Digest del registro no válido",
|
||||
"Invalid remote name": "Nombre remoto inválido",
|
||||
"Invalid remote path": "Camino remoto inválido",
|
||||
"Invalid repair version:": "Versión de reparación inválida:",
|
||||
"Invalid resources": "Recursos inválidos",
|
||||
"Invalid restored volume path": "Camino de volumen restaurado inválido",
|
||||
"Invalid running state": "Estado de funcionamiento inválido",
|
||||
"Invalid saved image digest": "Invalid saved image digest",
|
||||
"Invalid saved image digest": "Digest de imagen guardado no válido",
|
||||
"Invalid security.unprivileged value:": "Seguridad inválida. valor no privilegiado:",
|
||||
"Invalid selection": "Selección no válida",
|
||||
"Invalid service alias": "Servicios inválidos",
|
||||
@@ -3605,8 +3607,11 @@
|
||||
"Model": "Modelo",
|
||||
"Modern resource monitor (press q to exit)": "Monitor de recursos moderno (presione q para salir)",
|
||||
"Modern, easy to use download automation for torrents and usenet.": "Automatización de descargas moderna y fácil de usar para torrents y usenet.",
|
||||
"Modify OCI stack": "Modify OCI stack",
|
||||
"Modify extra paths and devices": "Modify extra paths and devices",
|
||||
"Modify": "Modificar",
|
||||
"Modify OCI": "Modificar OCI",
|
||||
"Modify OCI stack": "Modificar la pila OCI",
|
||||
"Modify extra paths and devices": "Modificar rutas extra y dispositivos",
|
||||
"Modify: edit resources, network, paths and GPU": "Modificar: editar recursos, red, rutas y GPU",
|
||||
"Modifying Fastfetch configuration...": "Modificando la configuración de Fastfetch...",
|
||||
"Modules configuration updated.": "Configuración de módulos actualizada.",
|
||||
"Modules loaded.": "Módulos cargados.",
|
||||
@@ -4243,8 +4248,8 @@
|
||||
"Number of CPU cores (default: 2)": "Número de núcleos de CPU (predeterminado: 2)",
|
||||
"Nzbget is a usenet downloader, written in C++ and designed with performance in mind to achieve maximum download speed by using very little system resources.": "Nzbget es un descargador de Usenet escrito en C++ y diseñado pensando en el rendimiento, para lograr la máxima velocidad de descarga con muy pocos recursos del sistema.",
|
||||
"Nzbhydra2 is a meta search application for NZB indexers, the spiritual successor to NZBmegasearcH, and an evolution of the original application NZBHydra.": "Nzbhydra2 es una aplicación de metabúsqueda para indexadores NZB, sucesora espiritual de NZBmegasearcH y evolución de la aplicación original NZBHydra.",
|
||||
"OCI container, configuration kept. Remove its GPU from OCI manager Apps, with Recreate: CT": "Contenedor OCI, configuración conservada. Elimina su GPU desde OCI manager Apps, con Recrear: CT",
|
||||
"OCI containers keep their configuration: they are stopped and their Start on boot is disabled. Their GPU is removed from OCI manager Apps, with Recreate.": "Los contenedores OCI conservan su configuración: se detienen y se desactiva su inicio automático. Su GPU se elimina desde OCI manager Apps, con Recrear.",
|
||||
"OCI container, configuration kept. Remove its GPU from OCI manager Apps: CT": "Contenedor OCI, configuración conservada. Elimina su GPU desde OCI manager Apps: CT",
|
||||
"OCI containers keep their configuration: they are stopped and their Start on boot is disabled. Their GPU is removed from OCI manager Apps.": "Los contenedores OCI conservan su configuración: se detienen y se desactiva su inicio automático. Su GPU se elimina desde OCI manager Apps.",
|
||||
"OCI containers require Proxmox VE 9.1 or later.": "Los contenedores OCI requieren Proxmox VE 9.1 o posterior.",
|
||||
"OCI management": "Gestión OCI",
|
||||
"OCI management could not be completed. Check the backend status; no additional cleanup has been authorized.": "La gestión OCI no pudo completarse. Comprueba el estado del backend; no se ha autorizado ninguna limpieza adicional.",
|
||||
@@ -4613,8 +4618,8 @@
|
||||
"Preparing pending restore (network-safe)": "Preparando restauración pendiente (segura para la red)",
|
||||
"Preparing staging area...": "Preparando el área de preparación...",
|
||||
"Preparing the NVIDIA GPU...": "Preparando la GPU NVIDIA...",
|
||||
"Preparing the changes...": "Preparando los cambios...",
|
||||
"Preparing the machine learning container for the new choice...": "Preparando el contenedor Machine learning para la nueva opción...",
|
||||
"Preparing the recreation...": "Preparando la recreación...",
|
||||
"Preparing the update...": "Preparando la actualización...",
|
||||
"Preserving logs to /var/log.hdd before unmounting...": "Preservando logs en /var/log.hdd antes de desmontar...",
|
||||
"Press 'q' to exit": "Presione 'q' para salir",
|
||||
@@ -4882,19 +4887,15 @@
|
||||
"Recovery passphrase": "Frase de contraseña de recuperación",
|
||||
"Recovery setup failed": "Error en la configuración de recuperación",
|
||||
"Recreate": "Recrear",
|
||||
"Recreate OCI": "Recrear OCI",
|
||||
"Recreate OCI stack": "Recreate OCI stack",
|
||||
"Recreate every container with its saved configuration": "Recreate every container with its saved configuration",
|
||||
"Recreate the whole stack?": "Recreate the whole stack?",
|
||||
"Recreate with these options?": "¿Recrear con estas opciones?",
|
||||
"Recreate: add or remove extra paths and devices": "Recrear: añadir o eliminar rutas extra y dispositivos",
|
||||
"Recreate: edit resources, network, paths and GPU": "Recrear: editar recursos, red, rutas y GPU",
|
||||
"Recreating": "Recreating",
|
||||
"Recreating requires a confirmed proposal": "Recreando requires una propuesta confirmada",
|
||||
"Recreate OCI stack": "Recrear la pila OCI",
|
||||
"Recreate every container with its saved configuration": "Recrear todos los contenedores con su configuración guardada",
|
||||
"Recreate the whole stack?": "¿Recrear toda la pila?",
|
||||
"Recreated stack checked": "Pila recreada comprobada",
|
||||
"Recreated:": "Recreado:",
|
||||
"Recreating": "Recreando",
|
||||
"Recreating requires a confirmed proposal": "Recrear requiere una propuesta confirmada",
|
||||
"Recreating the container...": "Recreando el contenedor...",
|
||||
"Recreating the container:": "Recreando el contenedor:",
|
||||
"Recreation completed. Data kept.": "Recreación completada. Datos guardados.",
|
||||
"Recreation prepared": "Recreación preparada",
|
||||
"Refresh APT index and verify repositories:": "Actualizar el índice APT y verificar los repositorios:",
|
||||
"Refresh your browser (Ctrl+Shift+R) to see changes": "Actualiza tu navegador (Ctrl+Shift+R) para ver los cambios",
|
||||
"Refresh your browser to see changes (server restart may be required)": "Actualice su navegador para ver los cambios (es posible que sea necesario reiniciar el servidor)",
|
||||
@@ -5749,7 +5750,7 @@
|
||||
"Stack records saved": "Registros de la pila guardados",
|
||||
"Stack records saved; no container was reinstalled.": "Registros de la pila guardados; no se reinstaló ningún contenedor.",
|
||||
"Stack recovery completed; every member is back to its previous installation.": "Recuperación de la pila completada; cada miembro ha vuelto a su instalación anterior.",
|
||||
"Stack recreation completed. Data kept.": "Stack recreation completed. Data kept.",
|
||||
"Stack recreation completed. Data kept.": "Recreación de la pila completada. Datos conservados.",
|
||||
"Stack startup hook installed": "Hook de arranque de la pila instalado",
|
||||
"Stack stopped": "Pila detenida",
|
||||
"Stack update completed. Data kept.": "Actualización de la pila completada. Datos conservados.",
|
||||
@@ -6097,13 +6098,13 @@
|
||||
"The administrator user contains characters that are not allowed": "El usuario administrador contiene caracteres que no se permiten",
|
||||
"The all-in-one AI application.": "La aplicación de IA todo en uno.",
|
||||
"The application configuration needs a first start to complete.": "La configuración de la aplicación necesita un primer arranque para completarse.",
|
||||
"The application could not be modified:": "No se pudo modificar la aplicación:",
|
||||
"The application could not be recovered:": "No se pudo recuperar la aplicación:",
|
||||
"The application could not be recreated:": "No se pudo recrear la aplicación:",
|
||||
"The application did not complete its initial setup:": "La aplicación no completó su configuración inicial:",
|
||||
"The application did not get an address on the access network:": "La aplicación no obtuvo una dirección en la red de acceso:",
|
||||
"The application did not pass its HTTP check:": "La aplicación no superó la comprobación HTTP:",
|
||||
"The application did not respond in time:": "La aplicación no respondió a tiempo:",
|
||||
"The application has been recreated with the new options.": "La aplicación se ha recreado con las nuevas opciones.",
|
||||
"The application has been modified with the new options.": "La aplicación se ha modificado con las nuevas opciones.",
|
||||
"The application needs it for": "La aplicación lo necesita para",
|
||||
"The application stopped during its first start:": "La aplicación se detuvo durante su primer comienzo:",
|
||||
"The application was removed": "La aplicación se ha eliminado",
|
||||
@@ -6121,7 +6122,7 @@
|
||||
"The bind mount target escapes the rootfs:": "El destino del bind mount sale del rootfs:",
|
||||
"The block device does not exist:": "El dispositivo bloque no existe:",
|
||||
"The build could not be checked beforehand; continuing without that check.": "La compilación no se pudo comprobar de antemano; se continúa sin esa comprobación.",
|
||||
"The cached image does not match the current digest": "La imagen caché no coincide con el digesto actual",
|
||||
"The cached image does not match the current digest": "La imagen en caché no coincide con el digest actual",
|
||||
"The cached image is damaged; it will be downloaded again.": "La imagen en caché está dañada; se descargará de nuevo.",
|
||||
"The character device does not exist:": "El dispositivo de carácter no existe:",
|
||||
"The command asks for a password that is not echoed. After creating the users, the web interface asks for a user name and a password.": "El comando pide una contraseña que no se muestra al escribirla. Tras crear los usuarios, la interfaz web pide un nombre de usuario y una contraseña.",
|
||||
@@ -6283,7 +6284,7 @@
|
||||
"The installation stopped because of an unexpected error": "La instalación se detuvo debido a un error inesperado",
|
||||
"The installation/changes require a server restart to apply correctly. Do you want to reboot now?": "La instalación/los cambios requieren un reinicio del servidor para que se apliquen correctamente. ¿Quieres reiniciar ahora?",
|
||||
"The installer must run as root on Proxmox VE": "El instalador debe funcionar como root en Proxmox VE",
|
||||
"The instance changed while it was being edited; configure Recreate again": "El caso cambió mientras se estaba editando; configurar Recrear de nuevo",
|
||||
"The instance changed while it was being edited; open Modify again": "La instancia cambió mientras se editaba; abre Modificar de nuevo",
|
||||
"The instance does not use NVIDIA": "El caso no utiliza NVIDIA",
|
||||
"The instance has a pending operation": "El caso tiene una operación pendiente",
|
||||
"The instance identity or status must be reviewed before updating.": "La identidad o el estado de la instancia debe revisarse antes de actualizarse.",
|
||||
@@ -6304,7 +6305,7 @@
|
||||
"The main member must stop first and start last": "El miembro principal debe parar primero y comenzar el último",
|
||||
"The main member of the stack is missing": "Falta el miembro principal de la pila",
|
||||
"The managed host firewall rule could not be removed and was left unchanged.": "No se pudo eliminar la regla del cortafuegos del host gestionada por ProxMenux; se ha dejado sin cambios.",
|
||||
"The manifest does not match its digest": "El manifiesto no coincide con su digestión",
|
||||
"The manifest does not match its digest": "El manifiesto no coincide con su digest",
|
||||
"The member journal belongs to another stack operation": "El diario del miembro pertenece a otra operación de pila",
|
||||
"The member journal is outside the registry": "El diario del miembro está fuera del registro",
|
||||
"The mode of this job is stop: its guests are shut down during the backup.": "El modo de este trabajo es stop: sus VM y CT se apagan durante el backup.",
|
||||
@@ -6326,7 +6327,7 @@
|
||||
"The new image does not keep a required executable": "La nueva imagen no mantiene un ejecutable necesario",
|
||||
"The new image is more recent than the minimum age set for scheduled updates; it is not installed yet.": "La imagen nueva es más reciente que la antigüedad mínima fijada para las actualizaciones programadas; todavía no se instala.",
|
||||
"The new image requires additional persistent paths": "La nueva imagen requiere caminos persistentes adicionales",
|
||||
"The new image requires additional persistent paths; use Recreate": "La nueva imagen requiere caminos persistentes adicionales; uso Recrear",
|
||||
"The new image requires additional persistent paths; use Modify": "La nueva imagen necesita rutas persistentes adicionales; usa Modificar",
|
||||
"The new prompt will be used in new terminal sessions.": "El nuevo prompt se usará en las nuevas sesiones de terminal.",
|
||||
"The next visit to the dashboard will show the initial setup wizard.": "La próxima visita al panel mostrará el asistente de configuración inicial.",
|
||||
"The observed inventory differs from the validated runtime": "El inventario observado difiere del tiempo de funcionamiento validado",
|
||||
@@ -6394,7 +6395,7 @@
|
||||
"The record or diagnosis could not be completed; no update was run.": "El registro o el diagnóstico no se pudo completar; no se realizó ninguna actualización.",
|
||||
"The recovery did not complete. Review the log and choose \"Recover\" again for this container in the OCI management menu.": "La recuperación no terminó. Revise el log y elija \"Recuperar la instalación anterior\" de nuevo para este contenedor en el menú de gestión OCI.",
|
||||
"The recovery did not complete. Review the log and choose \"{choice}\" again for this container in the OCI management menu.": "La recuperación no terminó. Revisa el log y elige \"{choice}\" de nuevo para este contenedor en el menú de gestión OCI.",
|
||||
"The registry did not return the saved image digest": "The registry did not return the saved image digest",
|
||||
"The registry did not return the saved image digest": "El registro no devolvió el digest de imagen guardado",
|
||||
"The remote does not exist; create and authorize it first in the WebUI:": "El remoto no existe; crear y autorizar primero en el WebUI:",
|
||||
"The remote installer must run as root on Proxmox VE": "El instalador remoto debe funcionar como root en Proxmox VE",
|
||||
"The remote must already be created and authorized in the Rclone web UI. This operation restarts the CT and publishes two FUSE views on the host.": "El remoto ya debe estar creado y autorizado en la interfaz web de Rclone. Esta operación reinicia el CT y publica dos puntos de vista FUSE sobre el host.",
|
||||
@@ -6839,7 +6840,7 @@
|
||||
"Unsupported CPU allocation mode:": "Modo de asignación de CPU no compatible:",
|
||||
"Unsupported GID strategy:": "Estrategia GID sin apoyo:",
|
||||
"Unsupported NVIDIA mode:": "Modo NVIDIA sin soporte:",
|
||||
"Unsupported OCI digest:": "OCI sin soporte digestivo:",
|
||||
"Unsupported OCI digest:": "Digest OCI no admitido:",
|
||||
"Unsupported OCI-LXC AppArmor profile:": "Perfil OCI-LXC sin soporte:",
|
||||
"Unsupported OCI-LXC seccomp profile:": "Perfil sin soporte OCI-LXC seccomp:",
|
||||
"Unsupported Terminal": "Terminal no compatible",
|
||||
@@ -6904,14 +6905,14 @@
|
||||
"Update the whole stack?": "¿Actualizar toda la pila?",
|
||||
"Updated": "Actualizado",
|
||||
"Updated sharedfiles group to GID: 101000": "Grupo de archivos compartidos actualizado a GID: 101000",
|
||||
"Updated stack checked": "Se ha comprobado la pila actualizada",
|
||||
"Updated stack checked": "Pila actualizada comprobada",
|
||||
"Updated:": "Actualizado:",
|
||||
"Updates all Proxmox and Debian packages": "Actualiza todos los paquetes de Proxmox y Debian",
|
||||
"Updates and Packages Commands": "Comandos de actualizaciones y paquetes",
|
||||
"Updates are not available yet for this application in this beta": "Aún no hay actualizaciones para esta aplicación en este beta",
|
||||
"Updates are not available yet in this beta for applications that use a privileged container or advanced LXC settings": "Aún no se dispone de actualizaciones en esta beta para aplicaciones que utilizan un contenedor privilegiado o configuración avanzada LXC",
|
||||
"Updates file is empty or unreadable.": "El archivo de actualizaciones está vacío o es ilegible.",
|
||||
"Updating": "Actualización",
|
||||
"Updating": "Actualizando",
|
||||
"Updating APT package lists...": "Actualizando listas de paquetes APT...",
|
||||
"Updating Debian Bookworm → Trixie in sources.list...": "Actualizando Debian Bookworm → Trixie en sources.list...",
|
||||
"Updating Figurine binary...": "Actualizando el binario de Figurine...",
|
||||
@@ -7097,7 +7098,7 @@
|
||||
"Verifying Ceph packages availability...": "Verificando la disponibilidad de los paquetes de Ceph...",
|
||||
"Verifying all utilities status": "Comprobando el estado de todas las utilidades",
|
||||
"Verifying disk accessibility in CT": "Verificación de la accesibilidad del disco en CT",
|
||||
"Verifying the backups...": "Verificando los refuerzos...",
|
||||
"Verifying the backups...": "Verificando los backups...",
|
||||
"Verifying the image integrity...": "Verificando la integridad de la imagen...",
|
||||
"Version": "Versión",
|
||||
"Version Change Detected": "Cambio de versión detectado",
|
||||
@@ -7214,7 +7215,7 @@
|
||||
"What do you want to change?": "¿Qué desea cambiar?",
|
||||
"What do you want to do?": "¿Qué es lo que quieres hacer?",
|
||||
"What runs the recognition of Immich": "Qué ejecuta el reconocimiento de Immich",
|
||||
"What to recreate": "Qué recrear",
|
||||
"What to modify": "Qué modificar",
|
||||
"What would you like to do?": "¿Qué te gustaría hacer?",
|
||||
"When asked to select a disk, click Load Driver and load the VirtIO drivers.": "Cuando se le solicite seleccionar un disco, haga clic en Cargar controlador y cargue los controladores VirtIO.",
|
||||
"When this GPU is passed through to a VM, the Proxmox host will lose all video output on the physical monitor.": "Cuando esta GPU pasa a una VM, el host Proxmox perderá toda la salida de video en el monitor físico.",
|
||||
|
||||
@@ -337,7 +337,6 @@
|
||||
"All user-installed packages from the backup are present on this host": "Tous les packages installés par l'utilisateur à partir de la sauvegarde sont présents sur cet hôte",
|
||||
"All users with UID and GID": "Tous les utilisateurs avec UID et GID",
|
||||
"All {count} containers of the application are updated together (main CT: {vmid}). If there are new versions, all images are downloaded and verified, the application is stopped, each container is backed up and replaced with its new image. If anything fails, the backups are restored.": "Tous les conteneurs {count} de l'application sont mis à jour ensemble (CT principal : {vmid}).S'il existe de nouvelles versions, toutes les images sont téléchargées et vérifiées, l'application est arrêtée, chaque conteneur est sauvegardé et remplacé par sa nouvelle image. En cas d'échec, les sauvegardes sont restaurées.",
|
||||
"All {count} containers of the application will be recreated from their saved image digests (main CT: {vmid}). The stack is stopped, every container is backed up and replaced, then checked. If anything fails, the backups are restored.": "All {count} containers of the application will be recreated from their saved image digests (main CT: {vmid}). The stack is stopped, every container is backed up and replaced, then checked. If anything fails, the backups are restored.",
|
||||
"Allocate CPU Cores": "Allouer des cœurs de processeur",
|
||||
"Allocate RAM in MiB": "Allouer de la RAM en MiB",
|
||||
"Allow TCP port {port} from {subnet} through the host firewall? Existing firewall rules are not changed.": "Autoriser le port TCP {port} de {subnet} via le pare-feu hôte ?Les règles de pare-feu existantes ne sont pas modifiées.",
|
||||
@@ -409,7 +408,6 @@
|
||||
"Apply options from the current catalog template? New required paths and settings may be requested. Review the resulting configuration before recreating the CT.": "appliquer les options du modèle de catalogue actuel ?De nouveaux chemins et paramètres requis peuvent être demandés. Passez en revue la configuration résultante avant de recréer le CT.",
|
||||
"Apply read+write access for 'others' on the host directory?": "Appliquer un accès en lecture et en écriture aux « autres » sur le répertoire hôte ?",
|
||||
"Apply the options from the current catalog template? Your data and configuration are kept.": "Appliquer les options du modèle de catalogue actuel? Vos données et configurations sont conservées.",
|
||||
"Apply these changes?": "Apply these changes?",
|
||||
"Applying AMD-specific fixes...": "Application de correctifs spécifiques à AMD...",
|
||||
"Applying Changes": "Application des modifications",
|
||||
"Applying Controller/NVMe passthrough to VM": "Application du relais Controller/NVMe à la VM",
|
||||
@@ -809,7 +807,6 @@
|
||||
"Checking the remote...": "Vérification de la télécommande...",
|
||||
"Checking the restored installation": "Vérification de l'installation restaurée",
|
||||
"Checking the restored installation...": "Vérifier l'installation restaurée...",
|
||||
"Checking the stack before recreating...": "Checking the stack before recreating...",
|
||||
"Checking the stack before the update...": "Vérification de la pile avant la mise à jour...",
|
||||
"Checking the updated stack...": "Vérification de la pile mise à jour...",
|
||||
"Checklist post-upgrade finished. Warnings:": "Liste de contrôle après la mise à niveau terminée. Avertissements :",
|
||||
@@ -3214,7 +3211,6 @@
|
||||
"Invalid resources": "Ressources non valides",
|
||||
"Invalid restored volume path": "Voie de volume restaurée non valide",
|
||||
"Invalid running state": "État de fonctionnement non valide",
|
||||
"Invalid saved image digest": "Invalid saved image digest",
|
||||
"Invalid security.unprivileged value:": "Valeur de sécurité non valide.",
|
||||
"Invalid selection": "Sélection invalide",
|
||||
"Invalid service alias": "Alias de service non valide",
|
||||
@@ -3601,8 +3597,6 @@
|
||||
"Model": "Modèle",
|
||||
"Modern resource monitor (press q to exit)": "Moniteur de ressources moderne (appuyez sur q pour quitter)",
|
||||
"Modern, easy to use download automation for torrents and usenet.": "Moderne, facile à utiliser automatisation de téléchargement pour torrents et usernet.",
|
||||
"Modify OCI stack": "Modify OCI stack",
|
||||
"Modify extra paths and devices": "Modify extra paths and devices",
|
||||
"Modifying Fastfetch configuration...": "Modification de la configuration de Fastfetch...",
|
||||
"Modules configuration updated.": "Configuration des modules mise à jour.",
|
||||
"Modules loaded.": "Modules chargés.",
|
||||
@@ -4879,13 +4873,9 @@
|
||||
"Recovery setup failed": "La configuration de la récupération a échoué",
|
||||
"Recreate": "Recréer",
|
||||
"Recreate OCI": "Recréer OCI",
|
||||
"Recreate OCI stack": "Recreate OCI stack",
|
||||
"Recreate every container with its saved configuration": "Recreate every container with its saved configuration",
|
||||
"Recreate the whole stack?": "Recreate the whole stack?",
|
||||
"Recreate with these options?": "Recréer avec ces options ?",
|
||||
"Recreate: add or remove extra paths and devices": "Recréer : ajouter ou supprimer des chemins et des appareils supplémentaires",
|
||||
"Recreate: edit resources, network, paths and GPU": "Recréer: éditer ressources, réseau, chemins et GPU",
|
||||
"Recreating": "Recreating",
|
||||
"Recreating requires a confirmed proposal": "Recréer requires une proposition confirmée",
|
||||
"Recreating the container...": "Recréer le conteneur...",
|
||||
"Recreating the container:": "Recréation du réservoir:",
|
||||
@@ -5744,7 +5734,6 @@
|
||||
"Stack records saved": "Enregistrer les enregistrements",
|
||||
"Stack records saved; no container was reinstalled.": "Enregistrements de paquets enregistrés; aucun conteneur n'a été réinstallé.",
|
||||
"Stack recovery completed; every member is back to its previous installation.": "Récupération de la pile terminée; chaque membre est de retour à son installation précédente.",
|
||||
"Stack recreation completed. Data kept.": "Stack recreation completed. Data kept.",
|
||||
"Stack startup hook installed": "Crochet de démarrage Stack installé",
|
||||
"Stack stopped": "Stack arrêté",
|
||||
"Stack update completed. Data kept.": "Mise à jour de la pile terminée. Données conservées.",
|
||||
@@ -6388,7 +6377,6 @@
|
||||
"The record or diagnosis could not be completed; no update was run.": "Le dossier ou le diagnostic n'a pu être complété; aucune mise à jour n'a été effectuée.",
|
||||
"The recovery did not complete. Review the log and choose \"Recover\" again for this container in the OCI management menu.": "La récupération n'est pas terminée. Passez en revue le journal et choisissez « Recover » pour ce conteneur dans le menu de gestion OCI.",
|
||||
"The recovery did not complete. Review the log and choose \"{choice}\" again for this container in the OCI management menu.": "La restauration ne s'est pas terminée. Consultez le journal et choisissez de nouveau « {choice} » pour ce conteneur dans le menu de gestion OCI.",
|
||||
"The registry did not return the saved image digest": "The registry did not return the saved image digest",
|
||||
"The remote does not exist; create and authorize it first in the WebUI:": "La télécommande n'existe pas; créez et autorisez-la d'abord dans le WebUI:",
|
||||
"The remote installer must run as root on Proxmox VE": "L'installateur distant doit fonctionner comme root sur Proxmox VE",
|
||||
"The remote must already be created and authorized in the Rclone web UI. This operation restarts the CT and publishes two FUSE views on the host.": "La télécommande doit déjà être créée et autorisée dans l'interface web Rclone. Ce operation redémarre le CT et publie deux vues FUSE sur l'hôte.",
|
||||
|
||||
@@ -337,7 +337,6 @@
|
||||
"All user-installed packages from the backup are present on this host": "Todos os pacotes instalados pelo usuário do backup estão presentes neste host",
|
||||
"All users with UID and GID": "Todos os usuários com UID e GID",
|
||||
"All {count} containers of the application are updated together (main CT: {vmid}). If there are new versions, all images are downloaded and verified, the application is stopped, each container is backed up and replaced with its new image. If anything fails, the backups are restored.": "Todos os containers {count} da aplicação são atualizados juntos (CT principal: {vmid}).Se houver novas versões, todas as imagens são baixadas e verificadas, o aplicativo é interrompido, é feito backup de cada contêiner e substituído por sua nova imagem. Se algo falhar, os backups serão restaurados.",
|
||||
"All {count} containers of the application will be recreated from their saved image digests (main CT: {vmid}). The stack is stopped, every container is backed up and replaced, then checked. If anything fails, the backups are restored.": "All {count} containers of the application will be recreated from their saved image digests (main CT: {vmid}). The stack is stopped, every container is backed up and replaced, then checked. If anything fails, the backups are restored.",
|
||||
"Allocate CPU Cores": "Alocar núcleos de CPU",
|
||||
"Allocate RAM in MiB": "Alocar RAM em MiB",
|
||||
"Allow TCP port {port} from {subnet} through the host firewall? Existing firewall rules are not changed.": "Permitir porta TCP {port} de {subnet} através do firewall do host? As regras de firewall existentes não são alteradas.",
|
||||
@@ -409,7 +408,6 @@
|
||||
"Apply options from the current catalog template? New required paths and settings may be requested. Review the resulting configuration before recreating the CT.": "Aplicar opções do modelo de catálogo atual? Novos caminhos e configurações necessários podem ser solicitados. Revise a configuração resultante antes de recriar o CT.",
|
||||
"Apply read+write access for 'others' on the host directory?": "Aplicar acesso de leitura + gravação para 'outros' no diretório host?",
|
||||
"Apply the options from the current catalog template? Your data and configuration are kept.": "Aplicar as opções do modelo de catálogo atual? Seus dados e configuração são mantidos.",
|
||||
"Apply these changes?": "Apply these changes?",
|
||||
"Applying AMD-specific fixes...": "Aplicando correções específicas da AMD...",
|
||||
"Applying Changes": "Aplicando alterações",
|
||||
"Applying Controller/NVMe passthrough to VM": "Aplicando passagem de controlador/NVMe à VM",
|
||||
@@ -809,7 +807,6 @@
|
||||
"Checking the remote...": "A verificar o comando...",
|
||||
"Checking the restored installation": "Verificando a instalação restaurada",
|
||||
"Checking the restored installation...": "Verificando a instalação restaurada...",
|
||||
"Checking the stack before recreating...": "Checking the stack before recreating...",
|
||||
"Checking the stack before the update...": "Verificando a pilha antes da atualização...",
|
||||
"Checking the updated stack...": "Verificando a pilha atualizada...",
|
||||
"Checklist post-upgrade finished. Warnings:": "Lista de verificação pós-atualização concluída. Avisos:",
|
||||
@@ -3214,7 +3211,6 @@
|
||||
"Invalid resources": "Recursos inválidos",
|
||||
"Invalid restored volume path": "Caminho de volume restaurado inválido",
|
||||
"Invalid running state": "Estado de execução inválido",
|
||||
"Invalid saved image digest": "Invalid saved image digest",
|
||||
"Invalid security.unprivileged value:": "Título inválido. Valor não privilegiado:",
|
||||
"Invalid selection": "Seleção inválida",
|
||||
"Invalid service alias": "Apelido de serviço inválido",
|
||||
@@ -3601,8 +3597,6 @@
|
||||
"Model": "Modelo",
|
||||
"Modern resource monitor (press q to exit)": "Monitor de recursos moderno (pressione q para sair)",
|
||||
"Modern, easy to use download automation for torrents and usenet.": "Moderno, fácil de usar automação de download para torrentes e usenet.",
|
||||
"Modify OCI stack": "Modify OCI stack",
|
||||
"Modify extra paths and devices": "Modify extra paths and devices",
|
||||
"Modifying Fastfetch configuration...": "Modificando a configuração do Fastfetch...",
|
||||
"Modules configuration updated.": "Configuração dos módulos atualizada.",
|
||||
"Modules loaded.": "Módulos carregados.",
|
||||
@@ -4879,13 +4873,9 @@
|
||||
"Recovery setup failed": "Falha na configuração de recuperação",
|
||||
"Recreate": "Recriar",
|
||||
"Recreate OCI": "Recriar OCI",
|
||||
"Recreate OCI stack": "Recreate OCI stack",
|
||||
"Recreate every container with its saved configuration": "Recreate every container with its saved configuration",
|
||||
"Recreate the whole stack?": "Recreate the whole stack?",
|
||||
"Recreate with these options?": "Recriar com estas opções?",
|
||||
"Recreate: add or remove extra paths and devices": "Recriar: adicionar ou remover caminhos e dispositivos extras",
|
||||
"Recreate: edit resources, network, paths and GPU": "Recriar: editar recursos, rede, caminhos e GPU",
|
||||
"Recreating": "Recreating",
|
||||
"Recreating requires a confirmed proposal": "Recreando requires uma proposta confirmada",
|
||||
"Recreating the container...": "Recrear o contentor...",
|
||||
"Recreating the container:": "Recrear o recipiente:",
|
||||
@@ -5744,7 +5734,6 @@
|
||||
"Stack records saved": "Gravações de pilhas salvas",
|
||||
"Stack records saved; no container was reinstalled.": "Os registos da pilha foram salvos; nenhum contentor foi reinstalado.",
|
||||
"Stack recovery completed; every member is back to its previous installation.": "Stack recuperação concluída; cada membro está de volta à sua instalação anterior.",
|
||||
"Stack recreation completed. Data kept.": "Stack recreation completed. Data kept.",
|
||||
"Stack startup hook installed": "Gancho de inicialização da pilha instalado",
|
||||
"Stack stopped": "Pilha parada",
|
||||
"Stack update completed. Data kept.": "A actualização da pilha foi concluída. Dados guardados.",
|
||||
@@ -6389,7 +6378,6 @@
|
||||
"The record or diagnosis could not be completed; no update was run.": "O registro ou diagnóstico não pôde ser concluído; nenhuma atualização foi realizada.",
|
||||
"The recovery did not complete. Review the log and choose \"Recover\" again for this container in the OCI management menu.": "A recuperação não terminou. Reveja o log e escolha \"Recover\" novamente para este recipiente no menu de gerenciamento OCI.",
|
||||
"The recovery did not complete. Review the log and choose \"{choice}\" again for this container in the OCI management menu.": "A recuperação não foi concluída. Revise o log e escolha \"{choice}\" novamente para este contêiner no menu de gerenciamento OCI.",
|
||||
"The registry did not return the saved image digest": "The registry did not return the saved image digest",
|
||||
"The remote does not exist; create and authorize it first in the WebUI:": "O remoto não existe; crie e autorize-o primeiro na WebUI:",
|
||||
"The remote installer must run as root on Proxmox VE": "O instalador remoto deve correr como root no Proxmox VE",
|
||||
"The remote must already be created and authorized in the Rclone web UI. This operation restarts the CT and publishes two FUSE views on the host.": "O controle remoto já deve ser criado e autorizado na interface web Rclone. Esta operation reinicia o CT e publica duas visualizações FUSE no host.",
|
||||
|
||||
@@ -337,7 +337,6 @@
|
||||
"All user-installed packages from the backup are present on this host": "Alla användarinstallerade paket från säkerhetskopian finns på denna värd",
|
||||
"All users with UID and GID": "Alla användare med UID och GID",
|
||||
"All {count} containers of the application are updated together (main CT: {vmid}). If there are new versions, all images are downloaded and verified, the application is stopped, each container is backed up and replaced with its new image. If anything fails, the backups are restored.": "Alla {count}-behållare i applikationen uppdateras tillsammans (huvud CT: {vmid}).Om det finns nya versioner laddas alla bilder ner och verifieras, applikationen stoppas, varje behållare säkerhetskopieras och ersätts med sin nya bild. Om något misslyckas återställs säkerhetskopiorna.",
|
||||
"All {count} containers of the application will be recreated from their saved image digests (main CT: {vmid}). The stack is stopped, every container is backed up and replaced, then checked. If anything fails, the backups are restored.": "All {count} containers of the application will be recreated from their saved image digests (main CT: {vmid}). The stack is stopped, every container is backed up and replaced, then checked. If anything fails, the backups are restored.",
|
||||
"Allocate CPU Cores": "Tilldela CPU-kärnor",
|
||||
"Allocate RAM in MiB": "Tilldela RAM i MiB",
|
||||
"Allow TCP port {port} from {subnet} through the host firewall? Existing firewall rules are not changed.": "Vill du tillåta TCP-port {port} från {subnet} genom värdbrandväggen? Befintliga brandväggsregler ändras inte.",
|
||||
@@ -409,7 +408,6 @@
|
||||
"Apply options from the current catalog template? New required paths and settings may be requested. Review the resulting configuration before recreating the CT.": "Vill du använda alternativ från den aktuella katalogmallen? Nya nödvändiga sökvägar och inställningar kan begäras. Granska den resulterande konfigurationen innan du återskapar CT.",
|
||||
"Apply read+write access for 'others' on the host directory?": "Tillämpa läs+skrivbehörighet för \"andra\" på värdkatalogen?",
|
||||
"Apply the options from the current catalog template? Your data and configuration are kept.": "Applicera alternativen från den aktuella katalogmallen? Din data och konfiguration hålls.",
|
||||
"Apply these changes?": "Apply these changes?",
|
||||
"Applying AMD-specific fixes...": "Tillämpar AMD-specifika korrigeringar...",
|
||||
"Applying Changes": "Tillämpa ändringar",
|
||||
"Applying Controller/NVMe passthrough to VM": "Tillämpar styrenhets-/NVMe-passthrough på VM",
|
||||
@@ -809,7 +807,6 @@
|
||||
"Checking the remote...": "Kontrollera fjärrkontrollen...",
|
||||
"Checking the restored installation": "Kontrollera den återställda installationen",
|
||||
"Checking the restored installation...": "Kontrollera den restaurerade installationen...",
|
||||
"Checking the stack before recreating...": "Checking the stack before recreating...",
|
||||
"Checking the stack before the update...": "Kontrollera stacken innan uppdateringen...",
|
||||
"Checking the updated stack...": "Kontrollera den uppdaterade stacken...",
|
||||
"Checklist post-upgrade finished. Warnings:": "Checklista efter uppgradering avslutad. Varningar:",
|
||||
@@ -3214,7 +3211,6 @@
|
||||
"Invalid resources": "Ogiltiga resurser",
|
||||
"Invalid restored volume path": "Invalid återställd volymväg",
|
||||
"Invalid running state": "Ogiltig körstatus",
|
||||
"Invalid saved image digest": "Invalid saved image digest",
|
||||
"Invalid security.unprivileged value:": "Invalid security.oprivileged value:",
|
||||
"Invalid selection": "Ogiltigt val",
|
||||
"Invalid service alias": "Ogiltig service alias",
|
||||
@@ -3601,8 +3597,6 @@
|
||||
"Model": "Modell",
|
||||
"Modern resource monitor (press q to exit)": "Modern resursmonitor (tryck på q för att avsluta)",
|
||||
"Modern, easy to use download automation for torrents and usenet.": "Modern, lätt att använda nedladdningsautomation för torrents och Usenet.",
|
||||
"Modify OCI stack": "Modify OCI stack",
|
||||
"Modify extra paths and devices": "Modify extra paths and devices",
|
||||
"Modifying Fastfetch configuration...": "Ändrar Fastfetch-konfiguration...",
|
||||
"Modules configuration updated.": "Modulkonfigurationen uppdaterad.",
|
||||
"Modules loaded.": "Moduler laddade.",
|
||||
@@ -4879,13 +4873,9 @@
|
||||
"Recovery setup failed": "Återställningskonfigurationen misslyckades",
|
||||
"Recreate": "Återskapa",
|
||||
"Recreate OCI": "Återskapa OCI",
|
||||
"Recreate OCI stack": "Recreate OCI stack",
|
||||
"Recreate every container with its saved configuration": "Recreate every container with its saved configuration",
|
||||
"Recreate the whole stack?": "Recreate the whole stack?",
|
||||
"Recreate with these options?": "Återskapa med dessa alternativ?",
|
||||
"Recreate: add or remove extra paths and devices": "Återskapa: lägg till eller ta bort extra sökvägar och enheter",
|
||||
"Recreate: edit resources, network, paths and GPU": "Redigera: redigera resurser, nätverk, vägar och GPU",
|
||||
"Recreating": "Recreating",
|
||||
"Recreating requires a confirmed proposal": "Återskapa requires ett bekräftat förslag",
|
||||
"Recreating the container...": "Återskapa behållaren...",
|
||||
"Recreating the container:": "Återskapa behållaren:",
|
||||
@@ -5744,7 +5734,6 @@
|
||||
"Stack records saved": "Stack Records sparade",
|
||||
"Stack records saved; no container was reinstalled.": "Stack poster sparade; ingen behållare installerades.",
|
||||
"Stack recovery completed; every member is back to its previous installation.": "Stack återhämtning slutförd; varje medlem är tillbaka till sin tidigare installation.",
|
||||
"Stack recreation completed. Data kept.": "Stack recreation completed. Data kept.",
|
||||
"Stack startup hook installed": "Stack start hook installerad",
|
||||
"Stack stopped": "Stack stannade",
|
||||
"Stack update completed. Data kept.": "Stack update slutförd. Data hålls.",
|
||||
@@ -6389,7 +6378,6 @@
|
||||
"The record or diagnosis could not be completed; no update was run.": "Rekordet eller diagnosen kunde inte slutföras; ingen uppdatering kördes.",
|
||||
"The recovery did not complete. Review the log and choose \"Recover\" again for this container in the OCI management menu.": "Återhämtningen slutfördes inte. Granska loggen och välj \"Recover\" igen för den här behållaren i OCI-hanteringsmenyn.",
|
||||
"The recovery did not complete. Review the log and choose \"{choice}\" again for this container in the OCI management menu.": "Återställningen slutfördes inte. Granska loggen och välj \"{choice}\" igen för den här containern i OCI-hanteringsmenyn.",
|
||||
"The registry did not return the saved image digest": "The registry did not return the saved image digest",
|
||||
"The remote does not exist; create and authorize it first in the WebUI:": "Fjärrkontrollen finns inte; skapa och godkänna den först i WebUI:",
|
||||
"The remote installer must run as root on Proxmox VE": "Fjärrinstallatören måste köras som rot på Proxmox VE",
|
||||
"The remote must already be created and authorized in the Rclone web UI. This operation restarts the CT and publishes two FUSE views on the host.": "Fjärrkontrollen måste redan skapas och auktoriseras i Rclone webb-UI. Denna operation startar om CT och publicerar två FUSE-vyer på värden.",
|
||||
|
||||
@@ -354,7 +354,7 @@ def candidate_contract(record, operation, proposal=None):
|
||||
raise ValueError(translate('Recreating requires a confirmed proposal'))
|
||||
if (proposal.get('base_config_sha256') is not None
|
||||
and proposal['base_config_sha256'] != record['observed']['config_sha256']):
|
||||
raise ValueError(translate('The instance changed while it was being edited; configure Recreate again'))
|
||||
raise ValueError(translate('The instance changed while it was being edited; open Modify again'))
|
||||
candidate = proposal['candidate']
|
||||
if (candidate.get('vmid') != record['vmid']
|
||||
or candidate.get('installation_id') != record['installation_id']
|
||||
@@ -872,7 +872,7 @@ def apply(root, vmid, archive, operation, proposal=None, registry_digest=None, i
|
||||
if coordinated and backup_compression != 'zstd':
|
||||
raise ValueError(translate('Coordinated backups require zstd'))
|
||||
if show:
|
||||
msg_info(translate('Preparing the update...') if update else translate('Preparing the recreation...'))
|
||||
msg_info(translate('Preparing the update...') if update else translate('Preparing the changes...'))
|
||||
record = instances.read(root, vmid)
|
||||
if coordinated and any(coordinated.get(flag) for flag in
|
||||
('nextcloud_replay', 'paperless_replay', 'tandoor_replay', 'immich_replay')):
|
||||
@@ -910,7 +910,7 @@ def apply(root, vmid, archive, operation, proposal=None, registry_digest=None, i
|
||||
required = {m['container_path'] for m in candidate['deployment'].get('mounts', [])}
|
||||
if any(not any(p == target or p.startswith(target.rstrip('/') + '/') for target in required)
|
||||
for p in set(image['defaults'].get('Volumes') or {}) - non_persistent_image_volumes(candidate['template'])):
|
||||
raise ValueError(translate('The new image requires additional persistent paths; use Recreate'))
|
||||
raise ValueError(translate('The new image requires additional persistent paths; use Modify'))
|
||||
directory = instances.location(root, vmid).parent / 'transactions' / uuid.uuid4().hex
|
||||
private_directory(directory)
|
||||
open_log(directory)
|
||||
@@ -956,7 +956,7 @@ def apply(root, vmid, archive, operation, proposal=None, registry_digest=None, i
|
||||
gpu_devices.verify(original_gpu)
|
||||
gpu_devices.verify(desired_gpu)
|
||||
if show:
|
||||
msg_ok(translate('Update prepared') if update else translate('Recreation prepared'))
|
||||
msg_ok(translate('Update prepared') if update else translate('Changes prepared'))
|
||||
msg_info(translate('Stopping the container...'))
|
||||
stop(vmid)
|
||||
if show:
|
||||
@@ -1062,7 +1062,7 @@ def apply(root, vmid, archive, operation, proposal=None, registry_digest=None, i
|
||||
cleanup_error = exc
|
||||
log(f'cleanup: {exc}')
|
||||
msg_ok(translate('Update completed. Data kept.') if update
|
||||
else translate('Recreation completed. Data kept.'))
|
||||
else translate('Changes applied. Data kept.'))
|
||||
if freed:
|
||||
msg_ok(f"{translate('Unused images removed from the cache:')} {gib(freed)}")
|
||||
if cleanup_error is not None:
|
||||
@@ -1275,7 +1275,7 @@ def phase_label(phase):
|
||||
|
||||
|
||||
def show_status(path, state):
|
||||
operations = {'update': translate('Update'), 'recreate': translate('Recreate')}
|
||||
operations = {'update': translate('Update'), 'recreate': translate('Modify')}
|
||||
msg_info2(f"{translate('Interrupted operation:')} {operations.get(state.get('operation'), state.get('operation'))} (CT {state['vmid']})")
|
||||
msg_info2(f"{translate('Stopped at:')} {phase_label(state.get('phase'))}")
|
||||
if state.get('stage'):
|
||||
|
||||
@@ -254,9 +254,9 @@ def main():
|
||||
msg_error(translate('Another OCI operation is using the instance registry. Wait for it to finish.'))
|
||||
return 1
|
||||
except (OSError, ValueError, KeyError, RuntimeError, StopIteration, subprocess.TimeoutExpired) as error:
|
||||
msg_error(f"{translate('The application could not be recreated:')} {error}")
|
||||
msg_error(f"{translate('The application could not be modified:')} {error}")
|
||||
return 1
|
||||
msg_ok(translate('The application has been recreated with the new options.'))
|
||||
msg_ok(translate('The application has been modified with the new options.'))
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
@@ -120,6 +120,7 @@ def _apply(path, plan, adapter):
|
||||
running = {str(vmid): adapter.is_running(vmid) for vmid in plan['start_order']}
|
||||
if any(type(value) is not bool for value in running.values()):
|
||||
raise ValueError(translate('Invalid running state'))
|
||||
recreate = plan['operation'] == 'recreate'
|
||||
state = {'schema_version': 1, 'id': str(uuid.uuid4()),
|
||||
'plan': copy.deepcopy(plan), 'running': running,
|
||||
'prepared': {}, 'backups': {}, 'stop_intent': False,
|
||||
@@ -152,9 +153,9 @@ def _apply(path, plan, adapter):
|
||||
state['replacement_intent'] = True
|
||||
save(path, state, 'replacing')
|
||||
for vmid in plan['start_order']:
|
||||
msg_info(f"{translate('Updating')} {member(adapter, vmid)}...")
|
||||
msg_info(f"{translate('Recreating') if recreate else translate('Updating')} {member(adapter, vmid)}...")
|
||||
adapter.replace(vmid, state['prepared'][str(vmid)], state['id'])
|
||||
msg_ok(f"{translate('Updated:')} {member(adapter, vmid)}")
|
||||
msg_ok(f"{translate('Recreated:') if recreate else translate('Updated:')} {member(adapter, vmid)}")
|
||||
save(path, state, 'starting')
|
||||
for vmid in plan['start_order']:
|
||||
msg_info(f"{translate('Starting')} {member(adapter, vmid)}...")
|
||||
@@ -162,10 +163,10 @@ def _apply(path, plan, adapter):
|
||||
adapter.healthcheck(vmid)
|
||||
msg_ok(f"{translate('Service responding:')} {member(adapter, vmid)}")
|
||||
save(path, state, 'checking')
|
||||
msg_info(translate('Checking the updated stack...'))
|
||||
msg_info(translate('Checking the recreated stack...') if recreate else translate('Checking the updated stack...'))
|
||||
adapter.validate_candidates(state)
|
||||
adapter.restore_running_state(running, plan['start_order'])
|
||||
msg_ok(translate('Updated stack checked'))
|
||||
msg_ok(translate('Recreated stack checked') if recreate else translate('Updated stack checked'))
|
||||
save(path, state, 'publishing')
|
||||
msg_info(translate('Saving the stack records...'))
|
||||
adapter.publish(state)
|
||||
|
||||
@@ -159,7 +159,7 @@ def application_name(record, vmid):
|
||||
def update(vmid, acknowledge_external_data=False, proposal=None, keep_backup=None):
|
||||
operation = 'recreate' if proposal is not None else 'update'
|
||||
msg_info(translate('Checking the container before the update...') if operation == 'update'
|
||||
else translate('Checking the container before recreating it...'))
|
||||
else translate('Checking the container before modifying it...'))
|
||||
with instances.locked(instances.ROOT):
|
||||
record = instances.read(instances.ROOT, vmid)
|
||||
if record['status'] != 'installed' or record.get('pending_transaction') or record.get('pending_stack_transaction'):
|
||||
|
||||
@@ -285,7 +285,8 @@ def manage_instance(project, ui, row, action=None, lifecycle_args=()):
|
||||
return False
|
||||
if row['stack']:
|
||||
return _manage_stack(project, ui, row, action, lifecycle_args)
|
||||
if action == 'modify':
|
||||
# Rebuilding as it is exists only for a multi-container application.
|
||||
if action == 'recreate':
|
||||
return False
|
||||
if not row['pending']:
|
||||
if row['status'] != 'installed' or row['reason'] != 'matched':
|
||||
@@ -293,7 +294,7 @@ def manage_instance(project, ui, row, action=None, lifecycle_args=()):
|
||||
return False
|
||||
if action is None:
|
||||
action = ui.choose(translate('Manage OCI'), [('update', translate('Update the image with the saved configuration')),
|
||||
('recreate', translate('Recreate: edit resources, network, paths and GPU')),
|
||||
('modify', translate('Modify: edit resources, network, paths and GPU')),
|
||||
('remove', translate('Remove: delete the application and its containers'))], 'update')
|
||||
if action is None:
|
||||
return False
|
||||
@@ -323,7 +324,7 @@ def manage_instance(project, ui, row, action=None, lifecycle_args=()):
|
||||
ui.message(str(error), translate('Review external OCI changes'))
|
||||
return False
|
||||
proposal = None
|
||||
if action == 'recreate':
|
||||
if action == 'modify':
|
||||
from .recreation import edit_recreation
|
||||
from .cli import _deployment_summary_text
|
||||
from .ui import BacktrackUI, RestartWizard
|
||||
@@ -333,8 +334,8 @@ def manage_instance(project, ui, row, action=None, lifecycle_args=()):
|
||||
try:
|
||||
proposal = edit_recreation(record, wizard)
|
||||
approved = wizard.review(_deployment_summary_text(proposal['candidate']['template'],
|
||||
proposal['candidate']['deployment']), translate('Recreate OCI'),
|
||||
question=translate('Recreate with these options?'), default=True)
|
||||
proposal['candidate']['deployment']), translate('Modify OCI'),
|
||||
question=translate('Apply these changes?'), default=True)
|
||||
break
|
||||
except RestartWizard:
|
||||
wizard.restart()
|
||||
@@ -354,7 +355,7 @@ def manage_instance(project, ui, row, action=None, lifecycle_args=()):
|
||||
# outside the container and its backup.
|
||||
if '--acknowledge-external-data' not in command:
|
||||
command.append('--acknowledge-external-data')
|
||||
title = translate('Recreate OCI') if proposal else translate('Update OCI')
|
||||
title = translate('Modify OCI') if proposal else translate('Update OCI')
|
||||
if proposal is None:
|
||||
completed = _run_lifecycle(command, title)
|
||||
else:
|
||||
@@ -598,7 +599,7 @@ def _image_too_recent(project, vmid, min_age_days):
|
||||
|
||||
def direct_management(project, vmid, action, lifecycle_args=(), unattended=False, min_image_age_days=0):
|
||||
"""One operation on one instance, without the list of the menu: the entry
|
||||
ProxMenux Monitor uses for its Update and Recreate buttons and for
|
||||
ProxMenux Monitor uses for its Update and Modify buttons and for
|
||||
scheduled updates."""
|
||||
from .ui import interactive_ui
|
||||
ui = UnattendedUI() if unattended else interactive_ui()
|
||||
|
||||
@@ -180,12 +180,12 @@ def change_recognition(project, ui, primary, member, run_lifecycle):
|
||||
choices = recognition_choices(storage)
|
||||
if [tag for tag, _, _ in choices] == ['cpu'] and current == 'cpu':
|
||||
ui.message(translate('No usable GPU was found on this host. Recognition stays on the CPU.'),
|
||||
translate('Recreate OCI'))
|
||||
translate('Modify OCI stack'))
|
||||
return False
|
||||
selected = ui.choose(translate('What runs the recognition of Immich'),
|
||||
[(tag, label) for tag, label, _ in choices], current)
|
||||
if selected is None or selected == current:
|
||||
ui.message(translate('Nothing was changed.'), translate('Recreate OCI'))
|
||||
ui.message(translate('Nothing was changed.'), translate('Modify OCI stack'))
|
||||
return False
|
||||
details = next(extra for tag, _, extra in choices if tag == selected)
|
||||
if details.get('experimental') and not confirm_experimental_rocm(ui):
|
||||
@@ -196,7 +196,7 @@ def change_recognition(project, ui, primary, member, run_lifecycle):
|
||||
'cache, the library and the database are kept. The whole application is stopped and '
|
||||
'updated, as in an update; if anything fails, the previous containers and the previous '
|
||||
'choice are restored.'))
|
||||
if not ui.review(text, translate('Recreate OCI'), question=translate('Change the recognition now?'), default=True):
|
||||
if not ui.review(text, translate('Modify OCI stack'), question=translate('Change the recognition now?'), default=True):
|
||||
return False
|
||||
command = [sys.executable, str(project / 'remote/oci_immich_recognition.py'), str(primary['vmid']),
|
||||
'--acceleration', selected]
|
||||
@@ -204,13 +204,13 @@ def change_recognition(project, ui, primary, member, run_lifecycle):
|
||||
command += ['--render-device', details['render']]
|
||||
if details.get('override'):
|
||||
command += ['--gfx-override', details['override']]
|
||||
return run_lifecycle(command, translate('Recreate OCI'))
|
||||
return run_lifecycle(command, translate('Modify OCI stack'))
|
||||
|
||||
|
||||
def modify_stack(project, ui, primary, run_lifecycle):
|
||||
learning = immich_learning(primary)
|
||||
if learning is not None:
|
||||
what = ui.choose(translate('What to recreate'),
|
||||
what = ui.choose(translate('What to modify'),
|
||||
[('paths', translate('Add or remove extra paths and devices')),
|
||||
('recognition', translate('Change what runs recognition: CPU or GPU'))], 'paths')
|
||||
if what is None:
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
"""The steps of a coordinated operation name the operation that is running."""
|
||||
|
||||
from pathlib import Path
|
||||
import sys
|
||||
import unittest
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
sys.path.insert(0, str(ROOT / "remote"))
|
||||
|
||||
import oci_stack_transaction as transaction
|
||||
|
||||
|
||||
class StackOperationWording(unittest.TestCase):
|
||||
def steps(self, operation):
|
||||
plan = {"operation": operation, "primary_vmid": 138, "members": [{"vmid": 138}],
|
||||
"start_order": [138], "stop_order": [138]}
|
||||
adapter = MagicMock(spec=["validate", "is_running", "prepare", "stop", "backup", "verify_backups", "replace",
|
||||
"start", "healthcheck", "validate_candidates", "restore_running_state", "publish"])
|
||||
adapter.is_running.return_value = False
|
||||
adapter.prepare.return_value = {}
|
||||
adapter.backup.return_value = "backup"
|
||||
said = []
|
||||
with patch.object(transaction, "save"), patch.object(transaction, "translate", side_effect=lambda text: text), \
|
||||
patch.object(transaction, "msg_info", side_effect=said.append), \
|
||||
patch.object(transaction, "msg_ok", side_effect=said.append):
|
||||
transaction._apply(Path("/nonexistent/journal.json"), plan, adapter)
|
||||
return said
|
||||
|
||||
def test_a_recreation_never_says_it_is_updating(self):
|
||||
said = self.steps("recreate")
|
||||
self.assertIn("Recreating CT 138...", said)
|
||||
self.assertIn("Recreated: CT 138", said)
|
||||
self.assertIn("Recreated stack checked", said)
|
||||
self.assertEqual([line for line in said if "pdat" in line], [])
|
||||
|
||||
def test_an_update_keeps_its_wording(self):
|
||||
said = self.steps("update")
|
||||
self.assertIn("Updating CT 138...", said)
|
||||
self.assertIn("Updated: CT 138", said)
|
||||
self.assertIn("Updated stack checked", said)
|
||||
self.assertEqual([line for line in said if "ecreat" in line], [])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -454,7 +454,7 @@ select_lxc_container() {
|
||||
if [[ -n "$id" ]]; then
|
||||
if pmx_lxc_is_oci "$id"; then
|
||||
list_h=12
|
||||
oci_note="\n\n$(translate "Containers created from an OCI image are not listed: their paths are changed in OCI manager Apps (Recreate).")"
|
||||
oci_note="\n\n$(translate "Containers created from an OCI image are not listed: their paths are changed in OCI manager Apps.")"
|
||||
continue
|
||||
fi
|
||||
options+=("$id" "$name ($status)")
|
||||
|
||||
@@ -267,7 +267,7 @@ select_container() {
|
||||
done < <(pct list 2>/dev/null)
|
||||
|
||||
local oci_note="" list_h=12
|
||||
[[ $oci_hidden -gt 0 ]] && list_h=7 && oci_note="\n\n$(translate 'Containers created from an OCI image are not listed: their devices are changed in OCI manager Apps (Recreate).')"
|
||||
[[ $oci_hidden -gt 0 ]] && list_h=7 && oci_note="\n\n$(translate 'Containers created from an OCI image are not listed: their devices are changed in OCI manager Apps.')"
|
||||
|
||||
if [[ ${#menu_items[@]} -eq 0 ]]; then
|
||||
dialog --backtitle "ProxMenux" \
|
||||
|
||||
@@ -1417,7 +1417,7 @@ check_switch_mode() {
|
||||
fi
|
||||
msg+=" • CT ${LXC_AFFECTED_CTIDS[$i]} (${LXC_AFFECTED_NAMES[$i]}) [${status_txt}, ${onboot_txt}]\n"
|
||||
done
|
||||
[[ "$oci_count" -gt 0 ]] && msg+="\n$(translate 'OCI containers keep their configuration: they are stopped and their Start on boot is disabled. Their GPU is removed from OCI manager Apps, with Recreate.')\n"
|
||||
[[ "$oci_count" -gt 0 ]] && msg+="\n$(translate 'OCI containers keep their configuration: they are stopped and their Start on boot is disabled. Their GPU is removed from OCI manager Apps.')\n"
|
||||
msg+="\n$(translate 'VM passthrough requires exclusive VFIO binding of the GPU.')\n"
|
||||
msg+="$(translate 'Choose how to handle affected LXC containers before switching to VM mode.')\n\n"
|
||||
[[ "$running_count" -gt 0 ]] && \
|
||||
@@ -1957,7 +1957,7 @@ cleanup_lxc_configs() {
|
||||
local action="$LXC_SWITCH_ACTION"
|
||||
if pmx_lxc_is_oci "$ctid"; then
|
||||
action="keep_gpu_disable_onboot"
|
||||
msg_warn "$(translate 'OCI container, configuration kept. Remove its GPU from OCI manager Apps, with Recreate: CT') ${ctid}" | tee -a "$screen_capture"
|
||||
msg_warn "$(translate 'OCI container, configuration kept. Remove its GPU from OCI manager Apps: CT') ${ctid}" | tee -a "$screen_capture"
|
||||
fi
|
||||
|
||||
if [[ "$action" == "keep_gpu_disable_onboot" ]]; then
|
||||
|
||||
@@ -79,7 +79,7 @@ select_container() {
|
||||
done < <(pct list 2>/dev/null)
|
||||
|
||||
local oci_note="" list_h=12
|
||||
[[ $oci_hidden -gt 0 ]] && list_h=7 && oci_note="\n\n$(translate 'Containers created from an OCI image are not listed: their devices are changed in OCI manager Apps (Recreate).')"
|
||||
[[ $oci_hidden -gt 0 ]] && list_h=7 && oci_note="\n\n$(translate 'Containers created from an OCI image are not listed: their devices are changed in OCI manager Apps.')"
|
||||
|
||||
if [[ ${#menu_items[@]} -eq 0 ]]; then
|
||||
dialog --backtitle "ProxMenux" \
|
||||
|
||||
@@ -789,7 +789,7 @@ prompt_lxc_action_for_vm_mode() {
|
||||
fi
|
||||
msg+=" • CT ${LXC_AFFECTED_CTIDS[$i]} (${LXC_AFFECTED_NAMES[$i]}) [${st}, ${ob}]\n"
|
||||
done
|
||||
[[ "$oci_count" -gt 0 ]] && msg+="\n$(translate 'OCI containers keep their configuration: they are stopped and their Start on boot is disabled. Their GPU is removed from OCI manager Apps, with Recreate.')\n"
|
||||
[[ "$oci_count" -gt 0 ]] && msg+="\n$(translate 'OCI containers keep their configuration: they are stopped and their Start on boot is disabled. Their GPU is removed from OCI manager Apps.')\n"
|
||||
msg+="\n$(translate 'Switching to GPU -> VM mode requires exclusive VFIO binding.')\n"
|
||||
[[ "$running_count" -gt 0 ]] && msg+="\Z1$(translate 'Running containers detected'): ${running_count}\Zn\n"
|
||||
[[ "$onboot_count" -gt 0 ]] && msg+="\Z1\Zb$(translate 'Start on boot enabled'): ${onboot_count}\Zn\n"
|
||||
@@ -866,7 +866,7 @@ apply_lxc_action_for_vm_mode() {
|
||||
local action="$LXC_ACTION"
|
||||
if pmx_lxc_is_oci "$ctid"; then
|
||||
action="keep_gpu_disable_onboot"
|
||||
msg_warn "$(translate 'OCI container, configuration kept. Remove its GPU from OCI manager Apps, with Recreate: CT') ${ctid}" | tee -a "$screen_capture"
|
||||
msg_warn "$(translate 'OCI container, configuration kept. Remove its GPU from OCI manager Apps: CT') ${ctid}" | tee -a "$screen_capture"
|
||||
fi
|
||||
|
||||
if [[ "$action" == "keep_gpu_disable_onboot" && "${LXC_AFFECTED_ONBOOT[$i]}" == "1" ]]; then
|
||||
|
||||
@@ -615,7 +615,7 @@ prompt_lxc_action_for_vm_mode() {
|
||||
fi
|
||||
msg+=" - CT ${LXC_AFFECTED_CTIDS[$i]} (${LXC_AFFECTED_NAMES[$i]}) [${st}, ${ob}]\n"
|
||||
done
|
||||
[[ "$oci_count" -gt 0 ]] && msg+="\n$(translate 'OCI containers keep their configuration: they are stopped and their Start on boot is disabled. Their GPU is removed from OCI manager Apps, with Recreate.')\n"
|
||||
[[ "$oci_count" -gt 0 ]] && msg+="\n$(translate 'OCI containers keep their configuration: they are stopped and their Start on boot is disabled. Their GPU is removed from OCI manager Apps.')\n"
|
||||
msg+="\n$(translate 'Switching to GPU -> VM mode requires exclusive VFIO binding.')\n"
|
||||
[[ "$running_count" -gt 0 ]] && msg+="$(translate 'Running containers detected'): ${running_count}\n"
|
||||
[[ "$onboot_count" -gt 0 ]] && msg+="$(translate 'Start on boot enabled'): ${onboot_count}\n"
|
||||
@@ -690,7 +690,7 @@ apply_lxc_action_for_vm_mode() {
|
||||
local action="$LXC_ACTION"
|
||||
if pmx_lxc_is_oci "$ctid"; then
|
||||
action="keep_gpu_disable_onboot"
|
||||
msg_warn "$(translate 'OCI container, configuration kept. Remove its GPU from OCI manager Apps, with Recreate: CT') ${ctid}" | tee -a "$screen_capture"
|
||||
msg_warn "$(translate 'OCI container, configuration kept. Remove its GPU from OCI manager Apps: CT') ${ctid}" | tee -a "$screen_capture"
|
||||
fi
|
||||
|
||||
if [[ "$action" == "keep_gpu_disable_onboot" && "${LXC_AFFECTED_ONBOOT[$i]}" == "1" ]]; then
|
||||
|
||||
@@ -271,7 +271,7 @@ select_lxc_container() {
|
||||
[[ -n "$id" && "$id" =~ ^[0-9]+$ ]] || continue
|
||||
if pmx_lxc_is_oci "$id"; then
|
||||
list_h=12
|
||||
oci_note="\n\n$(translate "Containers created from an OCI image are not listed: their paths are changed in OCI manager Apps (Recreate).")"
|
||||
oci_note="\n\n$(translate "Containers created from an OCI image are not listed: their paths are changed in OCI manager Apps.")"
|
||||
continue
|
||||
fi
|
||||
options+=("$id" "${name:-unnamed} ($status)")
|
||||
|
||||
@@ -203,7 +203,7 @@ while read -r ct_id ct_name; do
|
||||
[[ -n "$ct_id" ]] || continue
|
||||
if pmx_lxc_is_oci "$ct_id"; then
|
||||
CT_LIST_H=$((UI_MENU_LIST_H - 2))
|
||||
OCI_NOTE="\n\n$(translate "Containers created from an OCI image are not listed: their paths are changed in OCI manager Apps (Recreate).")"
|
||||
OCI_NOTE="\n\n$(translate "Containers created from an OCI image are not listed: their paths are changed in OCI manager Apps.")"
|
||||
continue
|
||||
fi
|
||||
CT_LIST+="${CT_LIST:+ }$ct_id ${ct_name:-CT-$ct_id}"
|
||||
|
||||
Reference in New Issue
Block a user