2
2
set -euxo pipefail
3
3
IFS=$' \n\t '
4
4
5
+ # Pretty colors.
6
+ red=' \033[0;31m'
7
+ green=' \033[0;32m'
8
+ neutral=' \033[0m'
9
+
5
10
declare -r OS=${1:- ${OS} }
6
11
declare -r PROCESS_CONTROL=${2:- ${PROCESS_CONTROL} }
7
12
declare -r SERVER=${3:- ${SERVER} }
@@ -25,25 +30,38 @@ function main() {
25
30
# Install role.
26
31
docker cp . " ${container} :${WORKSPACE} "
27
32
28
- docker exec -t " ${container} " mkdir " ${WORKSPACE} /tests/roles"
29
- docker exec -t " ${container} " ln -s " ${WORKSPACE} /" " ${WORKSPACE} /tests/roles/devops-coop.minecraft"
30
-
33
+ docker exec -t " ${container} " mkdir " ${WORKSPACE} /tests/roles"
34
+ docker exec -t " ${container} " ln -s " ${WORKSPACE} /" " ${WORKSPACE} /tests/roles/devops-coop.minecraft"
35
+
31
36
# Validate syntax
32
- docker exec -t " ${container} " ansible-playbook \
37
+ docker exec -t " ${container} " env ANSIBLE_FORCE_COLOR=1 ansible-playbook \
33
38
-i " ${WORKSPACE} /tests/inventory" \
34
39
--syntax-check \
35
40
-v \
36
41
--extra-vars=" minecraft_process_control=${PROCESS_CONTROL} minecraft_server=${SERVER} " \
37
42
" ${WORKSPACE} /tests/${SERVER} .yml"
38
43
39
44
# Install Minecraft.
40
- docker exec -t " ${container} " ansible-playbook \
45
+ docker exec -t " ${container} " env ANSIBLE_FORCE_COLOR=1 ansible-playbook \
41
46
-i " ${WORKSPACE} /tests/inventory" \
42
47
-c local \
43
48
-v \
44
49
--extra-vars=" minecraft_process_control=${PROCESS_CONTROL} minecraft_server=${SERVER} " \
45
50
" ${WORKSPACE} /tests/${SERVER} .yml"
46
51
52
+ # Run Ansible playbook again (idempotence test).
53
+ idempotence=$( mktemp)
54
+ docker exec -t " ${container} " env ANSIBLE_FORCE_COLOR=1 ansible-playbook \
55
+ -i " ${WORKSPACE} /tests/inventory" \
56
+ -c local \
57
+ -v \
58
+ --extra-vars=" minecraft_process_control=${PROCESS_CONTROL} minecraft_server=${SERVER} " \
59
+ " ${WORKSPACE} /tests/${SERVER} .yml" | tee -a $idempotence
60
+ tail $idempotence \
61
+ | grep -q ' changed=0.*failed=0' \
62
+ && (printf ${green} ' Idempotence test: pass' ${neutral} " \n" ) \
63
+ || (printf ${red} ' Idempotence test: fail' ${neutral} " \n" && exit 1)
64
+
47
65
# Sleep to allow Minecraft to boot.
48
66
# FIXME: A retry loop checking if it has launched yet would be better.
49
67
sleep 30
0 commit comments