diff --git a/Makefile b/Makefile index fe25387..15dd2cf 100644 --- a/Makefile +++ b/Makefile @@ -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-' - +# 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= VMID= @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= ;; \ 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= @set -e; \