-
Notifications
You must be signed in to change notification settings - Fork 0
/
konfig.sh
executable file
·155 lines (130 loc) · 2.88 KB
/
konfig.sh
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
#!/bin/bash
REPOS_PATH=${REPOS_PATH:-"/usr/local/konfigrepo"}
help="
Usage: konfig.sh [save|log|revert|restart|refresh|list|clone] ['descrizione commit']
save 'descrizione commit' : Salva i file di configurazione ed aggiorna il versioning
log : Mostra la lista dei commit effettuati
revert: Esegue il rollback all'ultima configurazione salvata
restart: Effettua il restart del servizio
reload: Effettua il reload della configurazione del servizio
refresh: Sincronizza le configurazioni del server centrale, viene eseguito automaticamente
ad ogni operazione, ma è consogliabile lanciarlo prima di iniziare la modifica
delle configurazioni
list: mostra i servizi gestibili tramite konfig.sh
clone: clona uno dei repository gestiti
"
go_to_gitroot()
{
#while [[ $(pwd) != '/' && ! -d ".git" ]]; do
# cd ..
#done
cd "$(git rev-parse --show-toplevel)"
}
init_git_config()
{
username=$(git config --global --get user.name)
useremail=$(git config --global --get user.email)
if [ -z "$username" -o -z "$useremail" ]; then
echo "Setup global git user.name and user.email"
git config --global user.name "$USER"
git config --global user.email "$USER@$HOSTNAME"
fi
}
log()
{
git log --pretty=format:"%h - %an, %ar : %s"
}
list()
{
ls $REPOS_PATH
}
clone()
{
git clone "$REPOS_PATH/$@"
}
refresh_and_rebase()
{
git pull --rebase
}
# Verifica dove si trovano gli script di riavvio del servizio
# aprendo il file di configurazione Konfigfile nella root del
# repo.
get_restart_scripts()
{
go_to_gitroot
if [ ! -f "Konfigfile" ]; then
echo "A file named \"Konfigfile\" must be present"
exit 1
fi
. Konfigfile
[ -z "$service" ] && echo "Unable to find configuration to restart service" && exit 1
echo "$service"
}
exec_script()
{
sudo $1
ret=$?
if [ "$ret" != 0 ];
then
echo "Errore nell'esecuzione di: $1 !"
exit 1
fi
}
exec_service_scripts()
{
local reload_or_restart=$1
#esiste il file per il controllo della sintassi?
restart_scripts_dir=$(get_restart_scripts)
for file in $restart_scripts_dir/[0-9]*.sh; do
[ -x "$file" ] && echo "Executing $file" && exec_script "$file"
done
exec_script "$restart_scripts_dir/$reload_or_restart.sh"
}
save()
{
msg="$@" # metto tra virgolette così gli argomenti vengono preservati anche se non ci sono virgolette nel comando
if [ -z "$msg" ];
then
msg='Messaggio non definito'
fi
git add . && git commit -a -m "$msg" && refresh_and_rebase && git push
}
revert()
{
git revert --no-edit HEAD && git push
}
if [ -z "$1" ]; then
echo "$help"
exit 1
fi
init_git_config
case $1 in
log)
log
;;
list)
list
;;
clone)
shift
clone $@
;;
refresh)
refresh_and_rebase
;;
save)
shift # passo tutti gli argomenti dal due in poi alla funzione save
save $@
;;
revert)
revert
;;
restart)
exec_service_scripts "restart"
;;
reload)
exec_service_scripts "reload"
;;
*) echo "$help"
;;
esac