From 9d37b141a607b2e45888d3e5d0fd2bb9e55eb679 Mon Sep 17 00:00:00 2001 From: faten Date: Mon, 26 May 2025 15:07:58 +0000 Subject: [PATCH] run playboook --- run_playbook.sh | 86 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 run_playbook.sh diff --git a/run_playbook.sh b/run_playbook.sh new file mode 100644 index 0000000..a1e2d7f --- /dev/null +++ b/run_playbook.sh @@ -0,0 +1,86 @@ +#!/bin/bash +set -euo pipefail + +echo ">>>>>> DEBUG: Variables d'environnement <<<<<<" +env | sort +echo ">>>>>>>>>>>>>>>>>>>> FIN DEBUG <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" + +# --- Paramètres attendus --- +: "${ANSIBLE_ROLE_GIT:?Variable ANSIBLE_ROLE_GIT manquante (ex: git@git.repo.com:myroles/myrole.git)}" +: "${ROLE_NAME:?Nom du rôle Ansible manquant (ex: mongodb)}" +: "${EXECUTION_MODE:=remote}" # 'remote' ou 'local' +: "${TARGET_HOST:=}" # obligatoire si EXECUTION_MODE=remote +: "${USER_SSH:=ubuntu}" # utilisateur distant (remote) +: "${INVENTORY_GROUP:=vm_target}" # groupe inventaire (remote) +: "${HOST_VARS_JSON:=}" # JSON optionnel host vars +: "${GROUP_VARS_JSON:=}" # JSON optionnel group vars + +# --- Répertoire temporaire --- +WORKDIR=$(mktemp -d) +trap "rm -rf $WORKDIR" EXIT +cd "$WORKDIR" + +# --- Clonage du rôle --- +echo ">> Clonage du rôle depuis le dépôt Git : $ANSIBLE_ROLE_GIT" +git clone "$ANSIBLE_ROLE_GIT" "$ROLE_NAME" + +# --- Création de l’inventaire --- +mkdir -p inventory/group_vars inventory/host_vars + +if [[ "$EXECUTION_MODE" == "local" ]]; then + echo ">> Mode local : playbook s'exécutera dans le container" + cat > inventory/hosts.ini < "inventory/host_vars/localhost.yml" + fi + if [[ -n "$GROUP_VARS_JSON" ]]; then + echo "$GROUP_VARS_JSON" | jq -r 'to_entries[] | "\(.key): \(.value)"' > "inventory/group_vars/local.yml" + fi + +elif [[ "$EXECUTION_MODE" == "remote" ]]; then + echo ">> Mode distant : playbook s'exécutera sur $TARGET_HOST via SSH" + if [[ -z "$TARGET_HOST" ]]; then + echo "Erreur : TARGET_HOST doit être défini en mode remote" + exit 1 + fi + + cat > inventory/hosts.ini < "inventory/host_vars/$TARGET_HOST.yml" + fi + if [[ -n "$GROUP_VARS_JSON" ]]; then + echo "$GROUP_VARS_JSON" | jq -r 'to_entries[] | "\(.key): \(.value)"' > "inventory/group_vars/$INVENTORY_GROUP.yml" + fi + +else + echo "Erreur : EXECUTION_MODE doit être 'local' ou 'remote'" + exit 1 +fi + +# --- Création du playbook --- +cat > playbook.yml <> Lancement du playbook avec le rôle $ROLE_NAME sur $HOSTNAME" +ansible-playbook -i inventory/hosts.ini playbook.yml + +echo ">> Exécution terminée avec succès." +