From cd7e86503020f653369258c7b450ae9f1b7c0074 Mon Sep 17 00:00:00 2001 From: Bartosz Bezak Date: Tue, 17 Mar 2026 15:23:17 +0100 Subject: nova-cell: parallelize libvirt version check The previous code used `run_once`, `delegate_to`, and `loop`, so one host ran `kolla_container_facts` and `libvirtd --version` for every compute host in sequence. This is slow on large deployments. Run these checks on the compute hosts directly so Ansible can use normal per-host concurrency. Set `any_errors_fatal: true` on the libvirt version-check tasks so a failure on one host fails the play. Closes-bug: #2144664 Change-Id: Ic9564c84c0a6c1cef1f77ed115d860f819eec67b Signed-off-by: Bartosz Bezak --- ansible/roles/nova-cell/tasks/version-check.yml | 27 ++++++++----------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/ansible/roles/nova-cell/tasks/version-check.yml b/ansible/roles/nova-cell/tasks/version-check.yml index 2626aada7..8b9461451 100644 --- a/ansible/roles/nova-cell/tasks/version-check.yml +++ b/ansible/roles/nova-cell/tasks/version-check.yml @@ -46,32 +46,25 @@ name: - "{{ service.container_name }}" register: container_facts_per_host - run_once: true - delegate_to: "{{ item }}" - loop: "{{ groups[service.group] }}" - loop_control: - label: "{{ item }}" + when: inventory_hostname in groups[service.group] - name: Get current Libvirt version + any_errors_fatal: true become: true command: "{{ kolla_container_engine }} exec {{ service.container_name }} libvirtd --version" register: libvirt_version_current_results changed_when: false - run_once: true - delegate_to: "{{ item.item }}" - loop: "{{ container_facts_per_host.results }}" - loop_control: - label: "{{ item.item }}" when: - - item.containers[service.container_name] is defined - - item.containers[service.container_name].State.Running + - container_facts_per_host is not skipped + - container_facts_per_host.containers[service.container_name] is defined - (hostvars[groups[service.group] | first].service_image_info.images | default([]) | length) > 0 - - item.containers[service.container_name].Image + - container_facts_per_host.containers[service.container_name].Image != hostvars[groups[service.group] | first].service_image_info.images[0].Id - name: Check that the new Libvirt version is >= current + any_errors_fatal: true vars: - current_version: "{{ item.stdout | regex_search('[0-9]+\\.[0-9]+\\.[0-9]+') }}" + current_version: "{{ libvirt_version_current_results.stdout | regex_search('[0-9]+\\.[0-9]+\\.[0-9]+') }}" new_version: "{{ hostvars[groups[service.group] | first].libvirt_new_version }}" assert: that: "{{ new_version is version(current_version, '>=', strict=true) }}" @@ -81,8 +74,4 @@ that you want to do this, please skip the tag `nova-libvirt-version-check`. success_msg: > Libvirt version check successful: target {{ new_version }} >= current {{ current_version }}. - run_once: true - loop: "{{ libvirt_version_current_results.results }}" - loop_control: - label: "{{ item.item }}" - when: item.stdout is defined + when: libvirt_version_current_results is not skipped -- cgit v1.2.3