Add parent-child VM nesting support from infrastructure.conf
All checks were successful
Build-Publish / build (linux/amd64) (push) Successful in 5s
Build-Publish / build (linux/arm64) (push) Successful in 13s
Build-Publish / create-manifest (push) Successful in 2s
Build-Publish / publish-template (push) Successful in 8s

This commit is contained in:
j
2026-03-08 19:26:09 +13:00
parent f953eef8cf
commit be032e66d7
3 changed files with 120 additions and 4 deletions

View File

@@ -100,8 +100,19 @@
</div>
{% endif %}
</div>
{% if containers %}
{% set child_vms = children_map.get(server.hostname, []) %}
{% if containers or child_vms %}
<div class="ct-summary-list">
{% for vm in child_vms %}
<div class="ct-summary-item">
<span class="status-dot-sm {% if vm.is_online %}online{% else %}offline{% endif %}"></span>
<span class="ct-summary-name">{{ vm.details.get('system', {}).get('hostname', vm.hostname) if vm.details else vm.hostname }}</span>
<span class="ct-summary-type">VM</span>
{% set vm_os = vm.details.get('system', {}).get('os_pretty', '') if vm.details else '' %}
{% if vm_os %}<span class="ct-summary-os">{{ vm_os }}</span>{% endif %}
<span class="ct-summary-ip">{{ vm.primary_ip or vm.hostname }}</span>
</div>
{% endfor %}
{% for ct in containers %}
{% set ct_up = ct.get('status', '')|lower in ['running', 'started'] %}
<div class="ct-summary-item">
@@ -341,6 +352,63 @@
</div>
{% endif %}
<!-- Child VMs (from config) -->
{% if child_vms %}
<div class="detail-section wide">
<h4>Virtual Machines</h4>
<div class="container-grid">
{% for vm in child_vms %}
{% set vd = vm.details or {} %}
{% set vs = vd.get('system', {}) if vd.get('system') else {} %}
{% set vc = vd.get('cpu', {}) if vd.get('cpu') else {} %}
{% set vmem = vd.get('memory', {}) if vd.get('memory') else {} %}
<div class="container-card {% if not vm.is_online %}offline{% endif %}">
<div class="ct-header">
<span class="status-dot {% if vm.is_online %}online{% else %}offline{% endif %}"></span>
<span class="ct-name">{{ vs.get('hostname', vm.hostname) }}</span>
<span class="ct-type">VM</span>
</div>
{% if vs.get('os_pretty') %}
<div class="ct-image">{{ vs.get('os_pretty') }}</div>
{% endif %}
{% if vm.is_online %}
<div class="ct-details">
<span class="ct-ip">{{ vm.primary_ip or vm.hostname }}</span>
{% if vs.get('uptime_seconds') %}
<span class="ct-uptime">{{ vs.get('uptime_seconds', '')|format_uptime }}</span>
{% endif %}
</div>
{% set vm_cpu_pct = vc.get('usage_percent', '0')|float %}
{% set vm_mem_pct = vmem.get('usage_percent', '0')|float %}
{% if vm_cpu_pct > 0 or vm_mem_pct > 0 %}
<div class="usage-bars">
<div class="usage-row">
<span class="usage-label">CPU</span>
<div class="usage-bar-bg">
<div class="usage-bar-fill" style="width: {{ vm_cpu_pct }}%; background: {{ vm_cpu_pct|usage_color }};"></div>
</div>
<span class="usage-pct">{{ '%.0f'|format(vm_cpu_pct) }}%</span>
</div>
<div class="usage-row">
<span class="usage-label">RAM</span>
<div class="usage-bar-bg">
<div class="usage-bar-fill" style="width: {{ vm_mem_pct }}%; background: {{ vm_mem_pct|usage_color }};"></div>
</div>
<span class="usage-pct">{{ '%.0f'|format(vm_mem_pct) }}%</span>
</div>
</div>
{% endif %}
{% else %}
<div class="ct-details">
<span class="ct-status-label">offline</span>
</div>
{% endif %}
</div>
{% endfor %}
</div>
</div>
{% endif %}
{% if d.get('error') %}
<div class="detail-section wide">
<h4>Error</h4>