blob: eaad5f641014fd7a265afdcde1ac437161575a93 (
plain)
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
|
#!/usr/bin/env bash
# Offline render tests: each case renders a role with state=rendered and
# compares the commands with tests/render/cases/<role>/<case>/expected/<host>.txt.
#
# tests/render/run.sh # all cases
# tests/render/run.sh ha_vrrp # cases whose "<role>/<case>" starts with this
# UPDATE_GOLDEN=true tests/render/run.sh edge_nat # regenerate golden files
#
# A case directory may contain vars.yml (shared inputs, passed as extra vars),
# inventory.yml (multi-node cases; per-host inputs live there) and roles (a
# comma-separated role list, for blueprints that combine several roles; such
# cases live under cases/blueprints/).
set -euo pipefail
here="$(cd "$(dirname "$0")" && pwd)"
update="${UPDATE_GOLDEN:-false}"
filter="${1:-}"
rc=0
for case_dir in "$here"/cases/*/*/; do
case_dir="${case_dir%/}"
role="$(basename "$(dirname "$case_dir")")"
name="$(basename "$case_dir")"
[[ -n "$filter" && "$role/$name" != "$filter"* ]] && continue
inventory="$case_dir/inventory.yml"
[[ -f "$inventory" ]] || inventory="$here/inventory.yml"
args=(-i "$inventory" "$here/render.yml"
-e "role=$role" -e "case_dir=$case_dir" -e "update_golden=$update")
[[ -f "$case_dir/vars.yml" ]] && args+=(-e "@$case_dir/vars.yml")
# Blueprints that combine roles list them, comma-separated, in a "roles" file.
[[ -f "$case_dir/roles" ]] && args+=(-e "roles=$(tr -d '[:space:]' < "$case_dir/roles")")
mkdir -p "$case_dir/expected"
echo "=== $role/$name"
if ! ansible-playbook "${args[@]}"; then
echo "FAILED: $role/$name" >&2
rc=1
fi
done
exit "$rc"
|