-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdeploy-modular.sh
More file actions
executable file
·77 lines (60 loc) · 1.77 KB
/
deploy-modular.sh
File metadata and controls
executable file
·77 lines (60 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TF_BIN="${TF_BIN:-terraform}"
require_bin() {
command -v "$1" >/dev/null 2>&1 || {
echo "ERROR: Required command not found: $1" >&2
exit 1
}
}
log() { printf '%s %s\n' "$(date '+%Y-%m-%dT%H:%M:%S%z')" "$*"; }
deploy_environment() {
local env="$1"
local env_dir="${ROOT_DIR}/environments/${env}"
local backend_config="${env_dir}/backend.config"
if [ ! -d "${env_dir}" ]; then
log "❌ Environnement ${env} non trouvé dans ${env_dir}"
exit 1
fi
log "🚀 Déploiement de l'environnement: ${env}"
cd "${ROOT_DIR}/terraform"
# Initialiser Terraform
log "🔧 Initialisation Terraform pour ${env}..."
"${TF_BIN}" init -backend-config="${backend_config}"
# Sélectionner l'espace de travail
if ! "${TF_BIN}" workspace select "${env}" >/dev/null 2>&1; then
log "📝 Création de l'espace de travail: ${env}"
"${TF_BIN}" workspace new "${env}" >/dev/null
fi
# Plan et Apply
log "📋 Plan d'exécution pour ${env}..."
"${TF_BIN}" plan -var-file="${env_dir}/terraform.tfvars"
log "🚀 Application des changements pour ${env}..."
"${TF_BIN}" apply -auto-approve -var-file="${env_dir}/terraform.tfvars"
log "✅ Déploiement de ${env} terminé"
}
main() {
require_bin "${TF_BIN}"
export TF_IN_AUTOMATION=1
if [ $# -eq 0 ]; then
log "Usage: $0 [dev|prd|all]"
exit 1
fi
case "$1" in
"dev"|"prd")
deploy_environment "$1"
;;
"all")
deploy_environment "dev"
deploy_environment "prd"
;;
*)
log "❌ Environnement non supporté: $1"
log "Environnements supportés: dev, prd, all"
exit 1
;;
esac
}
trap 'echo "ERROR: Script failed on line $LINENO" >&2' ERR
main "$@"