From a3fa88d99d66124894fe15fc5b0e99ae92312261 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= <78488229+viktor138irk@users.noreply.github.com> Date: Thu, 7 May 2026 10:01:17 +0900 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B0=D1=82=D1=87=D0=B5=D1=80=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=80=D1=8F=D0=B4=D0=BA=D0=B0=20=D0=B7=D0=B0=D0=B3=D1=80?= =?UTF-8?q?=D1=83=D0=B7=D0=BA=D0=B8=20=D1=81=D1=83=D1=89=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D1=83=D1=8E=D1=89=D0=B8=D1=85=20VM=20=D0=B1=D1=8B=D0=BB?= =?UTF-8?q?=20=D0=B7=D0=B0=D1=89=D0=B8=D1=89=D1=91=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/patch_existing_vm_boot_order.py | 100 ++++++++++++++---------- 1 file changed, 58 insertions(+), 42 deletions(-) diff --git a/scripts/patch_existing_vm_boot_order.py b/scripts/patch_existing_vm_boot_order.py index 12f2414..e9aae63 100644 --- a/scripts/patch_existing_vm_boot_order.py +++ b/scripts/patch_existing_vm_boot_order.py @@ -9,6 +9,7 @@ if not app_path.exists(): app_dir = app_path.resolve().parent template_path = app_dir / 'templates' / 'vm_detail.html' changed = [] +warnings = [] text = app_path.read_text() @@ -94,7 +95,6 @@ def apply_vm_boot_order(name: str, boot_order: str) -> tuple[bool, str]: if os_node is None: os_node = ET.SubElement(root, "os") - # Remove only boot-order entries. Keep loader, nvram, type and firmware-related nodes intact. for boot in list(os_node.findall("boot")): os_node.remove(boot) @@ -122,20 +122,22 @@ def apply_vm_boot_order(name: str, boot_order: str) -> tuple[bool, str]: if 'def apply_vm_boot_order(name: str, boot_order: str)' not in text: marker = '\n\ndef vm_details(name: str) -> dict[str, Any]:' - if marker not in text: - raise SystemExit('vm_details marker not found') - text = text.replace(marker, helpers + marker, 1) - changed.append('existing VM boot order helpers added') + if marker in text: + text = text.replace(marker, helpers + marker, 1) + changed.append('existing VM boot order helpers added') + else: + warnings.append('vm_details marker not found, helpers skipped') else: changed.append('existing VM boot order helpers already present') old = '"host_ip": system_summary()["ip"]})' new = '"host_ip": system_summary()["ip"], "boot_options": vm_boot_order_options(), "current_boot_order": current_vm_boot_order(name), "boot_message": request.query_params.get("boot_message", ""), "boot_error": request.query_params.get("boot_error", "")})' if '"current_boot_order": current_vm_boot_order(name)' not in text: - if old not in text: - raise SystemExit('vm_detail context marker not found') - text = text.replace(old, new, 1) - changed.append('vm detail context gets boot order') + if old in text: + text = text.replace(old, new, 1) + changed.append('vm detail context gets boot order') + else: + warnings.append('vm_detail context marker not found, skipped') else: changed.append('vm detail context already has boot order') @@ -154,10 +156,11 @@ def vm_boot_order_apply(request: Request, name: str, boot_order: str = Form("aut if '@app.post("/vm/{name}/boot-order")' not in text: marker = '\n\n@app.post("/vm/{name}/{action}")' - if marker not in text: - raise SystemExit('generic vm action marker not found') - text = text.replace(marker, route + marker, 1) - changed.append('existing VM boot order route added') + if marker in text: + text = text.replace(marker, route + marker, 1) + changed.append('existing VM boot order route added') + else: + warnings.append('generic vm action marker not found, route skipped') else: changed.append('existing VM boot order route already present') @@ -169,40 +172,53 @@ if template_path.exists(): if 'action="/vm/{{ vm.name }}/boot-order"' not in tpl: block = r''' - {% if boot_message %} -
{{ boot_message }}
- {% endif %} - {% if boot_error %} -
{{ boot_error }}
- {% endif %} + {% if boot_message %} +
{{ boot_message }}
+ {% endif %} + {% if boot_error %} +
{{ boot_error }}
+ {% endif %} -
-
-

Порядок загрузки

- boot order -
-
- - -
-

Настройка меняет XML-конфигурацию VM через virsh define. Если машина сейчас запущена, новый порядок загрузки сработает после перезапуска.

-
+
+
+

Порядок загрузки

+ boot order +
+
+ + +
+

Настройка меняет XML-конфигурацию VM через virsh define. Если машина сейчас запущена, новый порядок загрузки сработает после перезапуска.

+
''' - marker = '\n\n
' - if marker not in tpl: - raise SystemExit('vm detail grid marker not found') - tpl = tpl.replace(marker, block + marker, 1) - changed.append('boot order card added to vm_detail.html') + markers = ['\n\n
', '\n\n
', '\n\n
'] + inserted = False + for marker in markers: + if marker in tpl: + tpl = tpl.replace(marker, block + marker, 1) + inserted = True + changed.append('boot order card added to vm_detail.html') + break + if not inserted: + warnings.append('vm detail insertion marker not found, boot order card skipped') + else: + changed.append('boot order card already present in vm_detail.html') if tpl != original: template_path.write_text(tpl) +else: + warnings.append(f'vm_detail.html not found: {template_path}') print('existing VM boot order patch applied:') for item in changed: print(f'- {item}') +if warnings: + print('Warnings:') + for item in warnings: + print(f'- {item}')