diff --git a/roles/libvirt_manager/templates/domain.xml.j2 b/roles/libvirt_manager/templates/domain.xml.j2 index d52bfb4f9e..f67695b4e7 100644 --- a/roles/libvirt_manager/templates/domain.xml.j2 +++ b/roles/libvirt_manager/templates/domain.xml.j2 @@ -16,7 +16,36 @@ - + +{% if vm_data.numa is defined and vm_data.numa|int > 1 %} + + + {% set base_cpu = (vm_data.cpus|int / vm_data.numa|int)|int %} + {% set cpu_rem = vm_data.cpus|int % vm_data.numa|int %} + {% set base_mem = (vm_data.memory|int / vm_data.numa|int)|int %} + {% set mem_rem = vm_data.memory|int % vm_data.numa|int %} + + {# Use a namespace to persist cpu_start across loop iterations #} + {% set tracker = namespace(cpu_start=0) %} + + {% for i in range(vm_data.numa|int) %} + {% set current_cores = base_cpu + (1 if i < cpu_rem else 0) %} + {% set current_mem = base_mem + (1 if i < mem_rem else 0) %} + {% set cpu_end = tracker.cpu_start + current_cores - 1 %} + + + + {# Update the tracker for the next iteration #} + {% set tracker.cpu_start = cpu_end + 1 %} + {% endfor %} + +{% endif %} + +{% if vm_data.numa is defined and vm_data.numa|int > 1 %} + + + +{% endif %}