File: runme.sh

package info (click to toggle)
ansible-core 2.19.0~beta6-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 32,628 kB
  • sloc: python: 180,313; cs: 4,929; sh: 4,601; xml: 34; makefile: 21
file content (144 lines) | stat: -rwxr-xr-x 4,633 bytes parent folder | download | duplicates (2)
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
#!/usr/bin/env bash

set -eux
set -o pipefail

# http://unix.stackexchange.com/questions/30091/fix-or-alternative-for-mktemp-in-os-x
temp_dir=$(shell mktemp -d 2>/dev/null || mktemp -d -t 'ansible-testing-XXXXXXXXXX')
trap 'rm -rf "${temp_dir}"' EXIT

repo_dir="${temp_dir}/repo"
pull_dir="${temp_dir}/pull"
temp_log="${temp_dir}/pull.log"

ansible-playbook setup.yml -i ../../inventory

cleanup="$(pwd)/cleanup.yml"

trap 'ansible-playbook "${cleanup}" -i ../../inventory' EXIT

cp -av "pull-integration-test" "${repo_dir}"
cd "${repo_dir}"
(
    git init
    git config user.email "ansible@ansible.com"
    git config user.name  "Ansible Test Runner"
    git add .
    git commit -m "Initial commit."
)

function change_repo {
    cd "${repo_dir}"
    date > forced_change
    git add forced_change
    git commit -m "forced changed"
    cd -
}

function no_change_tests {
    # test for https://github.com/ansible/ansible/issues/13688
    if grep MAGICKEYWORD "${temp_log}"; then
        cat "${temp_log}"
        echo "Ran the playbook, found MAGICKEYWORD in output."
        exit 1
    fi
}

function pass_tests {
	# test for https://github.com/ansible/ansible/issues/13688
	if ! grep MAGICKEYWORD "${temp_log}"; then
	    cat "${temp_log}"
	    echo "Missing MAGICKEYWORD in output."
	    exit 1
	fi

	# test for https://github.com/ansible/ansible/issues/13681
	# match play default output stats, was matching limit + docker
	if grep -E '127\.0\.0\.1\s*: ok=' "${temp_log}"; then
	    cat "${temp_log}"
	    echo "Found host 127.0.0.1 in output. Only localhost should be present."
	    exit 1
	fi
	# make sure one host was run
	if ! grep -E 'localhost.*ok' "${temp_log}"; then
	    cat "${temp_log}"
	    echo "Did not find host localhost in output."
	    exit 1
	fi
}

function pass_tests_multi {
	# test for https://github.com/ansible/ansible/issues/72708
	if ! grep 'test multi_play_1' "${temp_log}"; then
		cat "${temp_log}"
		echo "Did not run multiple playbooks"
		exit 1
	fi
	if ! grep 'test multi_play_2' "${temp_log}"; then
		cat "${temp_log}"
		echo "Did not run multiple playbooks"
		exit 1
	fi
}

export ANSIBLE_INVENTORY
export ANSIBLE_HOST_PATTERN_MISMATCH

unset ANSIBLE_INVENTORY
unset ANSIBLE_HOST_PATTERN_MISMATCH

ANSIBLE_CONFIG='' ansible-pull -d "${pull_dir}" -U "${repo_dir}" "$@" | tee "${temp_log}"

pass_tests

# ensure complex extra vars work
PASSWORD='test'
USER=${USER:-'broken_docker'}
JSON_EXTRA_ARGS='{"docker_registries_login": [{ "docker_password": "'"${PASSWORD}"'", "docker_username": "'"${USER}"'", "docker_registry_url":"repository-manager.company.com:5001"}], "docker_registries_logout": [{ "docker_password": "'"${PASSWORD}"'", "docker_username": "'"${USER}"'", "docker_registry_url":"repository-manager.company.com:5001"}] }'

ANSIBLE_CONFIG='' ansible-pull -d "${pull_dir}" -U "${repo_dir}" -e "${JSON_EXTRA_ARGS}" "$@" --tags untagged,test_ev | tee "${temp_log}"

pass_tests

ANSIBLE_CONFIG='' ansible-pull -d "${pull_dir}" -U "${repo_dir}" "$@" multi_play_1.yml multi_play_2.yml | tee "${temp_log}"

pass_tests_multi

ANSIBLE_CONFIG='' ansible-pull -d "${pull_dir}" -U "${repo_dir}" conn_secret.yml --connection-password-file "${repo_dir}/secret_connection_password" "$@"

# fail if we try do delete /var/tmp
ANSIBLE_CONFIG='' ansible-pull -d var/tmp -U "${repo_dir}" --purge "$@"

# test flushing the fact cache
export ANSIBLE_CACHE_PLUGIN=jsonfile ANSIBLE_CACHE_PLUGIN_CONNECTION=./
ansible-pull -d "${pull_dir}" -U "${repo_dir}" "$@" gather_facts.yml
ansible-pull -d "${pull_dir}" -U "${repo_dir}" --flush-cache "$@" test_empty_facts.yml
unset ANSIBLE_CACHE_PLUGIN ANSIBLE_CACHE_PLUGIN_CONNECTION

#### CHACHCHCHANGES!
echo 'setup for change detection'
ORIG_CONFIG="${ANSIBLE_CONFIG}"
unset ANSIBLE_CONFIG

echo 'test no run on no changes'
ansible-pull -d "${pull_dir}" -U "${repo_dir}" --only-if-changed "$@" | tee "${temp_log}"
no_change_tests

echo 'test run on changes'
change_repo
ansible-pull -d "${pull_dir}" -U "${repo_dir}" --only-if-changed "$@" | tee "${temp_log}"
pass_tests

# test changed with non yaml result format, ensures we ignore callback or format changes for adhoc/change detection
echo 'test no run on no changes, yaml result format'
ANSIBLE_CALLBACK_RESULT_FORMAT='yaml' ansible-pull -d "${pull_dir}" -U "${repo_dir}" --only-if-changed "$@" | tee "${temp_log}"
no_change_tests

echo 'test run on changes, yaml result format'
change_repo
ANSIBLE_CALLBACK_RESULT_FORMAT='yaml' ansible-pull -d "${pull_dir}" -U "${repo_dir}" --only-if-changed "$@" | tee "${temp_log}"
pass_tests

if [ "${ORIG_CONFIG}" != "" ]; then
  export ANSIBLE_CONFIG="${ORIG_CONFIG}"
fi