@@ -8,10 +8,19 @@ TMP_DOCKER_COMPOSE_YML=./.tmp/docker-compose.tmp.yml
8
8
DOCKER_COMPOSE_YML=./docker-compose.yml
9
9
DOCKER_COMPOSE_OVERRIDE_YML=./compose-override.yml
10
10
11
+ # Minimum Software Versions
11
12
COMPOSE_VERSION=" 3.6"
12
- DOCKER_VERSION_MAJOR=18
13
- DOCKER_VERSION_MINOR=2
14
- DOCKER_VERSION_BUILD=0
13
+ REQ_DOCKER_VERSION_MAJOR=18
14
+ REQ_DOCKER_VERSION_MINOR=2
15
+ REQ_DOCKER_VERSION_BUILD=0
16
+
17
+ REQ_PYTHON_VERSION_MAJOR=3
18
+ REQ_PYTHON_VERSION_MINOR=6
19
+ REQ_PYTHON_VERSION_BUILD=9
20
+
21
+ REQ_PYYAML_VERSION_MAJOR=5
22
+ REQ_PYYAML_VERSION_MINOR=3
23
+ REQ_PYYAML_VERSION_BUILD=1
15
24
16
25
declare -A cont_array=(
17
26
[portainer]=" Portainer"
@@ -109,9 +118,68 @@ password_dialog() {
109
118
# test=$( password_dialog )
110
119
111
120
function command_exists() {
112
- command -v " $@ " > /dev/null 2>&1
121
+ command -v " $@ " > /dev/null 2>&1
122
+ }
123
+
124
+ function install_python3_and_deps() {
125
+ if (whiptail --title " Python 3 and Dependencies" --yesno " Python 3 (v3.6.9) or later, PyYaml 5.3.1 and pip3 is required for compose-overrides.yml file to merge into the docker-compose.yml file. Install now?" 20 78); then
126
+ sudo apt install -y python3-pip python3-dev
127
+ if [ $? -eq 0 ]; then
128
+ PYTHON_VERSION_GOOD=" true"
129
+ else
130
+ echo " Failed to install Python"
131
+ exit 1
132
+ fi
133
+ pip3 install -U pyyaml==5.3.1
134
+ if [ $? -eq 0 ]; then
135
+ PYYAML_VERSION_GOOD=" true"
136
+ else
137
+ echo " Failed to install Python"
138
+ exit 1
139
+ fi
140
+ fi
141
+ }
142
+
143
+ function do_python3_pip() {
144
+ PYTHON_VERSION_GOOD=" false"
145
+ PYYAML_VERSION_GOOD=" false"
146
+
147
+ if command_exists python3 && command_exists pip3; then
148
+ PYTHON_VERSION=$( python3 --version)
149
+ echo " Python Version: $PYTHON_VERSION "
150
+ PYTHON_VERSION_MAJOR=$( echo " $PYTHON_VERSION " | cut -d' ' -f 2 | cut -d' .' -f 1)
151
+ PYTHON_VERSION_MINOR=$( echo " $PYTHON_VERSION " | cut -d' .' -f 2)
152
+ PYTHON_VERSION_BUILD=$( echo " $PYTHON_VERSION " | cut -d' .' -f 3)
153
+
154
+ if [ " ${PYTHON_VERSION_MAJOR} " -eq $REQ_PYTHON_VERSION_MAJOR ] && \
155
+ [ " ${PYTHON_VERSION_MINOR} " -eq $REQ_PYTHON_VERSION_MINOR ] && \
156
+ [ " ${PYTHON_VERSION_BUILD} " -ge $REQ_PYTHON_VERSION_BUILD ]; then
157
+ PYTHON_VERSION_GOOD=" true"
158
+ else
159
+ echo " Python is outdated."
160
+ install_python3_and_deps
161
+ fi
162
+
163
+ PYYAML_VERSION=$( python3 ./scripts/yaml_merge.py --pyyaml-version)
164
+ echo " PyYaml Version: $PYYAML_VERSION "
165
+ PYYAML_VERSION_MAJOR=$( echo " $PYYAML_VERSION " | cut -d' ' -f 2 | cut -d' .' -f 1)
166
+ PYYAML_VERSION_MINOR=$( echo " $PYYAML_VERSION " | cut -d' .' -f 2)
167
+ PYYAML_VERSION_BUILD=$( echo " $PYYAML_VERSION " | cut -d' .' -f 3)
168
+
169
+ if [ " ${PYYAML_VERSION_MAJOR} " -ge $REQ_PYYAML_VERSION_MAJOR ] && \
170
+ [ " ${PYYAML_VERSION_MINOR} " -ge $REQ_PYYAML_VERSION_MINOR ] && \
171
+ [ " ${PYYAML_VERSION_BUILD} " -ge $REQ_PYYAML_VERSION_BUILD ]; then
172
+ PYYAML_VERSION_GOOD=" true"
173
+ else
174
+ echo " PyYaml is outdated."
175
+ install_python3_and_deps
176
+ fi
177
+ else
178
+ install_python3_and_deps
179
+ fi
113
180
}
114
181
182
+
115
183
# function copies the template yml file to the local service folder and appends to the docker-compose.yml file
116
184
function yml_builder() {
117
185
@@ -205,9 +273,9 @@ SERVER_VERSION_MAJOR=$(echo "$SERVER_VERSION"| cut -d'.' -f 1)
205
273
SERVER_VERSION_MINOR=$( echo " $SERVER_VERSION " | cut -d' .' -f 2)
206
274
SERVER_VERSION_BUILD=$( echo " $SERVER_VERSION " | cut -d' .' -f 3)
207
275
208
- if [ " ${SERVER_VERSION_MAJOR} " -ge $DOCKER_VERSION_MAJOR ] && \
209
- [ " ${SERVER_VERSION_MINOR} " -ge $DOCKER_VERSION_MINOR ] && \
210
- [ " ${SERVER_VERSION_BUILD} " -ge $DOCKER_VERSION_BUILD ]; then
276
+ if [ " ${SERVER_VERSION_MAJOR} " -ge $REQ_DOCKER_VERSION_MAJOR ] && \
277
+ [ " ${SERVER_VERSION_MINOR} " -ge $REQ_DOCKER_VERSION_MINOR ] && \
278
+ [ " ${SERVER_VERSION_BUILD} " -ge $REQ_DOCKER_VERSION_BUILD ]; then
211
279
echo " Docker version >= 18.2.0. You are good to go."
212
280
else
213
281
echo " "
@@ -291,11 +359,11 @@ case $mainmenu_selection in
291
359
# if no container is selected then dont overwrite the docker-compose.yml file
292
360
if [ -n " $container_selection " ]; then
293
361
touch $TMP_DOCKER_COMPOSE_YML
294
- echo " services:" > $TMP_DOCKER_COMPOSE_YML
362
+ # echo "services:" > $TMP_DOCKER_COMPOSE_YML
295
363
296
364
# Uncomment once sort_keys is available in Pyton->yaml
297
- # echo "version: '$COMPOSE_VERSION'" > $TMP_DOCKER_COMPOSE_YML
298
- # echo "services:" >> $TMP_DOCKER_COMPOSE_YML
365
+ echo " version: '$COMPOSE_VERSION '" > $TMP_DOCKER_COMPOSE_YML
366
+ echo " services:" >> $TMP_DOCKER_COMPOSE_YML
299
367
300
368
# set the ACL for the stack
301
369
# docker_setfacl
@@ -313,15 +381,22 @@ case $mainmenu_selection in
313
381
done
314
382
315
383
if [ -f " $DOCKER_COMPOSE_OVERRIDE_YML " ]; then
316
- echo " merging docker overrides with docker-compose.yaml"
317
- python ./scripts/yaml_merge.py $TMP_DOCKER_COMPOSE_YML $DOCKER_COMPOSE_OVERRIDE_YML $DOCKER_COMPOSE_YML
384
+ do_python3_pip
385
+
386
+ if [ " $PYTHON_VERSION_GOOD " == " true" ] && [ " $PYYAML_VERSION_GOOD " == " true" ]; then
387
+ echo " merging docker overrides with docker-compose.yml"
388
+ python3 ./scripts/yaml_merge.py $TMP_DOCKER_COMPOSE_YML $DOCKER_COMPOSE_OVERRIDE_YML $DOCKER_COMPOSE_YML
389
+ else
390
+ echo " incorrect python or dependency versions, aborting override and using docker-compose.yml"
391
+ cp $TMP_DOCKER_COMPOSE_YML $DOCKER_COMPOSE_YML
392
+ fi
318
393
else
319
- echo " no override found, using docker-compose.yaml "
394
+ echo " no override found, using docker-compose.yml "
320
395
cp $TMP_DOCKER_COMPOSE_YML $DOCKER_COMPOSE_YML
321
396
fi
322
397
323
398
# Prepend compose version after merging/copying, so that merging doesn't move it to the bottom (alphabetically ordered).
324
- echo -e " version: '$COMPOSE_VERSION '\n$( cat $DOCKER_COMPOSE_YML ) " > $DOCKER_COMPOSE_YML # Remove once sort_keys works in Python->yaml.
399
+ # echo -e "version: '$COMPOSE_VERSION'\n$(cat $DOCKER_COMPOSE_YML)" > $DOCKER_COMPOSE_YML # Remove once sort_keys works in Python->yaml.
325
400
326
401
echo " docker-compose successfully created"
327
402
echo " run 'docker-compose up -d' to start the stack"
0 commit comments