clonage : serialise par stockage, le parallelisme reste par sequence

Proxmox tient un verrou PAR STOCKAGE pendant l allocation du disque. Les clones
partaient a quatre de front (`flotte-creer PARALLELE`), se le disputaient, et
celui qui attendait trop rendait « clone failed: can't lock file … - got
timeout » — un message qui nomme le verrou, jamais le parallelisme qui l a
provoque.

A deux VM rien ne paraissait ; a cinq, une creation sur cinq echouait et la
reconstruction s arretait. La cle du verrou porte le noeud ET le stockage : deux
stockages distincts clonent toujours de front, et seule la section qui contend
est prise une a la fois, dans l ordre ou la sequence du plan la demande.

Assisted-by: Claude Opus 5
This commit is contained in:
Mathieu Benoit 2026-09-29 06:00:55 -04:00
parent 1cb85094ea
commit a6907fed19

View file

@ -1456,6 +1456,18 @@ verifier-deploiement: ansible-runtime ## Verifie l'etat de la flotte apres deplo
ansible-playbook -i $(INVENTAIRE_PRODUCTION) "$$playbook" --limit "$(HOTE)" --check --diff; \
done
# LE CLONAGE SE SERIALISE PAR STOCKAGE, et c'est la granularite de Proxmox
# lui-meme : il tient un verrou PAR STOCKAGE pendant l'allocation du disque. Deux
# clones simultanes sur le meme stockage se le disputent, et celui qui attend trop
# rend « clone failed: can't lock file '/var/lock/pve-manager/pve-storage-<nom>' -
# got timeout » — un message qui nomme le verrou, jamais le parallelisme qui l'a
# provoque. A deux VM rien ne parait ; a cinq, une creation sur cinq echoue, et la
# reconstruction s'arrete sans que rien ne dise pourquoi elle tenait a deux.
#
# LA CLE PORTE LE NOEUD ET LE STOCKAGE, donc deux stockages distincts clonent
# TOUJOURS en parallele : `flotte-creer PARALLELE=n` garde tout son sens, et seule
# la section qui contend est prise un a la fois, dans l'ordre ou la sequence du
# plan la demande.
cloner-vm: ansible-runtime ## Clone une VM depuis le gabarit dore — HOTE=<nom> VMID=<id>
@if [[ -z "$(HOTE)" || -z "$(VMID)" ]]; then \
printf '%s\n' 'Refus: relancer avec HOTE=nom VMID=id_clone.'; \
@ -1530,7 +1542,8 @@ cloner-vm: ansible-runtime ## Clone une VM depuis le gabarit dore — HOTE=<nom>
;; \
esac; \
fi; \
ansible-playbook -i localhost, $(PLAYBOOK_PROXMOX_CLONER_VM) "$${vault_args[@]}" "$${extra_vars[@]}"
verrou="$${TMPDIR:-/tmp}/setops-clone-$$(printf '%s_%s' '$(NOEUD_PROXMOX)' '$(STOCKAGE_PROXMOX)' | tr -c 'A-Za-z0-9._-' '_').lock"; \
flock "$$verrou" ansible-playbook -i localhost, $(PLAYBOOK_PROXMOX_CLONER_VM) "$${vault_args[@]}" "$${extra_vars[@]}"
creer-vm: _instance-requise ## Cree une VM et attend qu'elle soit joignable — HOTE=<nom>
@set -e; \