-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlocal_laptop.sh
More file actions
executable file
·156 lines (131 loc) · 3.58 KB
/
local_laptop.sh
File metadata and controls
executable file
·156 lines (131 loc) · 3.58 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/bin/bash
# Activer le mode strict pour bash
set -euo pipefail
# Internal Field Separator (IFS).
IFS=$'\n\t'
# Déterminer le répertoire du script
SCRIPT_DIR=$(dirname "${BASH_SOURCE[0]}")
# se positionner dans le rep de travail
cd "$SCRIPT_DIR"
# Chemin vers l'environnement virtuel
VENV_PATH="$SCRIPT_DIR/venv"
# Liste des tags valides
readonly VALID_TAGS=("update" "install" "configure")
# Version minimum de Python requise
readonly MIN_PYTHON_VERSION="3.8"
# Fonction pour vérifier la version de Python
check_python_version() {
local python_version
python_version=$(python3 -c 'import sys; print(".".join(map(str, sys.version_info[:2])))')
if ! awk -v ver="$python_version" -v min="$MIN_PYTHON_VERSION" 'BEGIN {exit (ver >= min)}'; then
echo "Erreur: Python $MIN_PYTHON_VERSION ou supérieur est requis (version actuelle: $python_version)" >&2
exit 1
fi
}
# Fonction pour vérifier si un tag est valide
is_valid_tag() {
local tag=$1
for valid_tag in "${VALID_TAGS[@]}"; do
if [[ $valid_tag == "$tag" ]]; then
return 0
fi
done
return 1
}
# Fonction pour afficher l'aide
show_help() {
cat <<EOF
Usage: $(basename "$0") [options] [tag]
Description:
Ce script configure un environnement virtuel Python, installe Ansible
si nécessaire, et exécute un playbook Ansible avec des tags optionnels.
Options:
-h, --help Affiche ce message d'aide
-v, --version Affiche la version du script
-d, --debug Active le mode debug
Arguments:
tag Tag pour filtrer l'exécution du playbook (tags valides: ${VALID_TAGS[*]})
Exemples:
$(basename "$0") update # Exécute le playbook avec le tag 'update'
$(basename "$0") # Exécute le playbook sans tags
Note:
Assurez-vous de bien comprendre ce que fait ce script avant de l'exécuter ;-)
EOF
}
# Fonction pour nettoyer à la sortie
cleanup() {
if [[ -n ${VIRTUAL_ENV:-} ]]; then
deactivate 2>/dev/null || true
fi
}
# Fonction pour gérer les erreurs
handle_error() {
local line=$1
local command=$2
echo "Erreur à la ligne $line lors de l'exécution de: $command" >&2
cleanup
exit 1
}
# Configuration du gestionnaire d'erreurs
trap 'handle_error ${LINENO} "$BASH_COMMAND"' ERR
trap cleanup EXIT
# Parsing des arguments
DEBUG=0
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
show_help
exit 0
;;
-v | --version)
echo "Version 1.0.0"
exit 0
;;
-d | --debug)
DEBUG=1
shift
;;
*)
TAG=$1
shift
;;
esac
done
# Activer le mode debug si demandé
[[ $DEBUG -eq 1 ]] && set -x
# Vérifier la version de Python
check_python_version
# Créer l'environnement virtuel s'il n'existe pas
if [ ! -d "$VENV_PATH" ]; then
echo "Création de l'environnement virtuel Python..."
python3 -m venv "$VENV_PATH"
fi
# Activer l'environnement virtuel
# shellcheck source=/dev/null
source "$VENV_PATH/bin/activate"
# Mettre à jour pip
pip install --upgrade pip
# Vérifier si Ansible est installé, l'installer si nécessaire
if ! command -v ansible-playbook &>/dev/null; then
echo "Ansible non trouvé, installation en cours..."
pip install ansible
fi
# Vérifier l'existence du playbook
PLAYBOOK="$SCRIPT_DIR/playbook.yml"
if [ ! -f "$PLAYBOOK" ]; then
echo "Erreur: Le fichier playbook.yml n'existe pas dans $SCRIPT_DIR" >&2
exit 1
fi
# Exécuter le playbook avec ou sans tags
if [ -n "${TAG:-}" ]; then
if is_valid_tag "$TAG"; then
echo "Exécution du playbook avec le tag: $TAG"
ansible-playbook "$PLAYBOOK" --tags "$TAG"
else
echo "Erreur: Tag invalide '$TAG'. Tags valides: ${VALID_TAGS[*]}" >&2
exit 1
fi
else
echo "Exécution du playbook sans tags"
ansible-playbook "$PLAYBOOK"
fi