[IMP] script todo: offer ERPLibre install on single VM + run make targets

"Deploy a new VM" now asks, after a successful deploy, whether to
install ERPLibre into ~/git/erplibre (pick a branch), just like the
infra command.

Installing ERPLibre no longer only clones the repo: after the clone it
runs "make install_os" then "make install_odoo_18" over SSH (the
erplibre user has passwordless sudo from cloud-init). The Odoo target is
a constant (ERPLIBRE_ODOO_TARGET) and both the single-VM and infra flows
use the same install path.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Mathieu Benoit 2026-07-28 03:48:56 +00:00
parent 6ac7624950
commit 65a0d6f907
2 changed files with 50 additions and 10 deletions

View file

@ -1019,9 +1019,20 @@ class TODO:
print(f"\n{t('Deployment failed (see the error above).')}")
return
if dry_run:
return
# Option : installer ERPLibre (clone + make install_os + install_odoo).
if self._is_yes(
input(
t("Install ERPLibre into ~/git/erplibre on this VM? (y/N): ")
)
):
branch = self._qemu_pick_branch()
self._qemu_install_erplibre_vm(name, ssh_key, branch)
# Proposer d'enregistrer la VM dans ~/.ssh/config (après le 1er boot).
if not dry_run:
self._qemu_offer_ssh_config(name, "erplibre")
self._qemu_offer_ssh_config(name, "erplibre")
def _qemu_download_image(self):
script_path = self._qemu_script_path()
@ -1624,27 +1635,38 @@ class TODO:
return sel
return default
# Cible d'installation Odoo exécutée dans la VM (défaut ERPLibre 1.6.0).
ERPLIBRE_ODOO_TARGET = "install_odoo_18"
def _qemu_install_erplibre_vm(self, name, ssh_key, branch):
"""Clone ERPLibre (branche donnée) dans ~/git/erplibre de la VM."""
"""Clone ERPLibre (branche donnée) dans ~/git/erplibre de la VM puis
exécute « make install_os » et « make install_odoo_18 »."""
ip = self._qemu_vm_ip(name)
if not ip:
print(f" {name}: {t('no IP obtained, ERPLibre clone skipped.')}")
print(
f" {name}: {t('no IP obtained, ERPLibre install skipped.')}"
)
return
remote = (
"set -e; mkdir -p ~/git; "
"command -v git >/dev/null 2>&1 || "
"{ sudo apt-get install -y git || sudo dnf install -y git; }; "
"if [ -d ~/git/erplibre/.git ]; then "
"echo 'ERPLibre already present'; else "
"if [ ! -d ~/git/erplibre/.git ]; then "
f"git clone --branch {shlex.quote(branch)} "
f"{self.ERPLIBRE_GIT_URL} ~/git/erplibre; fi"
f"{self.ERPLIBRE_GIT_URL} ~/git/erplibre; fi; "
# Installation : dépendances système puis Odoo.
"cd ~/git/erplibre && make install_os && "
f"make {self.ERPLIBRE_ODOO_TARGET}"
)
ssh_opts = (
"-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "
"-o ConnectTimeout=15"
)
cmd = f"ssh {ssh_opts} erplibre@{ip} {shlex.quote(remote)}"
print(f"\n 📦 {name} ({ip}): {t('cloning ERPLibre')} ({branch})")
print(
f"\n 📦 {name} ({ip}): {t('installing ERPLibre')} "
f"({branch}, make install_os + {self.ERPLIBRE_ODOO_TARGET})"
)
print(f" {t('Will execute:')} {cmd}")
self.execute.exec_command_live(cmd, source_erplibre=False)
@ -1827,9 +1849,11 @@ class TODO:
if ip:
self._write_ssh_config_entry(name, "erplibre", ip)
# 7) Installation ERPLibre (clone) si demandée.
# 7) Installation ERPLibre (clone + make) si demandée.
if install_branch:
print(f"\n{t('Cloning ERPLibre on each VM')} ({install_branch})…")
print(
f"\n{t('Installing ERPLibre on each VM')} ({install_branch})…"
)
for name in deployed:
self._qemu_install_erplibre_vm(name, ssh_key, install_branch)

View file

@ -1383,6 +1383,22 @@ TRANSLATIONS = {
"fr": "Clonage d'ERPLibre sur chaque VM",
"en": "Cloning ERPLibre on each VM",
},
"Installing ERPLibre on each VM": {
"fr": "Installation d'ERPLibre sur chaque VM",
"en": "Installing ERPLibre on each VM",
},
"Install ERPLibre into ~/git/erplibre on this VM? (y/N): ": {
"fr": "Installer ERPLibre dans ~/git/erplibre sur cette VM ? (o/N) : ",
"en": "Install ERPLibre into ~/git/erplibre on this VM? (y/N): ",
},
"installing ERPLibre": {
"fr": "installation d'ERPLibre",
"en": "installing ERPLibre",
},
"no IP obtained, ERPLibre install skipped.": {
"fr": "aucune IP obtenue, installation ERPLibre ignorée.",
"en": "no IP obtained, ERPLibre install skipped.",
},
"Parallel deployments (default:": {
"fr": "Déploiements en parallèle (défaut :",
"en": "Parallel deployments (default:",