-
Notifications
You must be signed in to change notification settings - Fork 0
/
docker-mgmt.sh
148 lines (141 loc) · 3.76 KB
/
docker-mgmt.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
#!/bin/bash
function prompt_command() {
clear
echo "Which command do you want to execute?"
echo "1. up -d"
echo "2. down"
echo "3. pull"
echo "4. pull && down && up -d"
echo "5. restart"
echo "6. down all projects"
echo "7. exit"
read command
}
prompt_command
while [[ $command -ne 7 ]]; do
# Decide on the command to run
case $command in
1)
cmd="up -d"
;;
2)
cmd="down"
;;
3)
cmd="pull"
;;
4)
cmd="pull"
cmd2="down"
cmd3="up -d"
;;
5)
cmd="restart"
;;
6)
cmd="down"
downAllProjects="true"
;;
*)
echo "Invalid option"
prompt_command
continue
;;
esac
function prompt_mode() {
clear
# Prompt for how to proceed
if [ "$downAllProjects" != "true" ]; then
echo "How do you want to proceed?"
echo "1. List mode"
echo "2. Prompt mode"
echo "3. back"
read mode
else
mode=1
fi
}
prompt_mode
while [[ $mode -ne 3 ]]; do
# Iterate through each directory in the current location
dirs=(*/)
case $mode in
1)
# List mode
if [ "$downAllProjects" = "true" ]; then
eval "docker compose -f swag/docker-compose.yml $cmd"
for dir in "${dirs[@]}"; do
if [ "$dir" != "swag/" ]; then
eval "docker compose -f ${dir}docker-compose.yml $cmd"
if [ "$command" -eq 4 ]; then
eval "docker compose -f ${dir}docker-compose.yml $cmd2"
eval "docker compose -f ${dir}docker-compose.yml $cmd3"
fi
fi
done
else
while true; do
echo "Select a project to execute:"
select dir in "${dirs[@]}" "Back" "Quit"; do
if [[ "${dir}" == "Back" ]]; then
break 2
elif [[ $REPLY = $(( ${#dirs[@]}+2 )) ]] || [[ "${dir}" == "Quit" ]]; then
clear
echo "Exiting."
exit
elif ((REPLY > 0 && REPLY <= ${#dirs[@]})); then
eval "docker compose -f ${dir}docker-compose.yml $cmd"
if [ "$command" -eq 4 ]; then
eval "docker compose -f ${dir}docker-compose.yml $cmd2"
eval "docker compose -f ${dir}docker-compose.yml $cmd3"
fi
break
else
echo "Invalid option"
fi
done
done
fi
break
;;
2)
# Prompt mode
for dir in "${dirs[@]}"; do
if [ "$cmd" == "up -d" ] && [ "$dir" == "swag/" ]; then
continue
fi
if [ "$cmd" == "down" ] && [ "$dir" == "swag/" ]; then
eval "docker compose -f ${dir}docker-compose.yml $cmd"
break
fi
echo "Do you want to execute the project $dir? (Y/n/back)"
read answer
# Default to "Yes" if no answer is given
if [ -z "$answer" ]; then
answer="y"
fi
if [ "$answer" = "back" ]; then
break 2
elif [ "$answer" = "y" ]; then
# Run docker compose on the yml file within the directory
eval "docker compose -f ${dir}docker-compose.yml $cmd"
if [ "$command" -eq 4 ]; then
eval "docker compose -f ${dir}docker-compose.yml $cmd2"
eval "docker compose -f ${dir}docker-compose.yml $cmd3"
fi
fi
done
if [ "$answer" != "back" ] && [ "$cmd" == "up -d" ]; then
eval "docker compose -f swag/docker-compose.yml $cmd"
fi
break
;;
*)
echo "Invalid option"
prompt_mode
continue
;;
esac
done
prompt_command
done