-
-
Notifications
You must be signed in to change notification settings - Fork 154
Expand file tree
/
Copy pathhelper.bash
More file actions
129 lines (104 loc) · 3.73 KB
/
helper.bash
File metadata and controls
129 lines (104 loc) · 3.73 KB
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
GIT_ROOT="$(git rev-parse --show-toplevel)"
TEST_DIR="${GIT_ROOT}/tests"
HELM_SECRETS_DRIVER="${HELM_SECRETS_DRIVER:-"sops"}"
HELM_CACHE="${TEST_DIR}/.tmp/cache/$(uname)/helm"
REAL_HOME="${HOME}"
_shasum() {
# MacOS have shasum, others have sha1sum
if command -v shasum >/dev/null; then
shasum "$@"
else
sha1sum "$@"
fi
}
_sed_i() {
# MacOS syntax is different for in-place
if [ "$(uname)" = "Darwin" ]; then
sed -i "" "$@"
else
sed -i "$@"
fi
}
initiate() {
{
mkdir -p "${HELM_CACHE}/home"
if [ ! -d "${HELM_CACHE}/chart" ]; then
helm create "${HELM_CACHE}/chart"
fi
} >&2
}
setup() {
# https://github.com/bats-core/bats-core/issues/39
if [[ ${BATS_TEST_NAME:?} == "${BATS_TEST_NAMES[0]:?}" ]]; then
initiate
fi
SEED="${RANDOM}"
TEST_TEMP_DIR="$(mktemp -d)"
HOME="${TEST_TEMP_DIR}/home"
# shellcheck disable=SC2016
SPECIAL_CHAR_DIR="${TEST_TEMP_DIR}/$(printf '%s' 'a@b§c!d\$e\f(g)h=i^j😀')"
mkdir "${HOME}" "${TEST_TEMP_DIR}/chart" "${SPECIAL_CHAR_DIR}"
# install helm plugin
helm plugin install "${GIT_ROOT}"
# copy .kube from real home
if [ -d "${REAL_HOME}/.kube" ]; then
cp -r "${REAL_HOME}/.kube" "${HOME}"
fi
# copy assets
cp -r "${TEST_DIR}/assets/values" "${TEST_TEMP_DIR}"
cp -r "${TEST_DIR}/assets/values" "$(printf '%s' "${SPECIAL_CHAR_DIR}")"
cp -r "${TEST_DIR}/assets/values/sops/.sops.yaml" "${TEST_TEMP_DIR}"
# import default gpg key
gpg --batch --import "${TEST_DIR}/assets/gpg/private.gpg"
case "${HELM_SECRETS_DRIVER}" in
sops) ;;
vault)
if [ -f .dockerenv ]; then
# If we run inside docker, we expect vault on this location
export VAULT_ADDR=${VAULT_ADDR:-'http://vault:8200'}
else
export VAULT_ADDR=${VAULT_ADDR:-'http://127.0.0.1:8200'}
fi
vault login token=test
_sed_i "s!put secret/!put secret/${SEED}/!g" "$(printf '%s/values/vault/seed.sh' "${TEST_TEMP_DIR}")"
_sed_i "s!vault secret/!vault secret/${SEED}/!g" "$(printf '%s/values/vault/secrets.yaml' "${TEST_TEMP_DIR}")"
_sed_i "s!vault secret/!vault secret/${SEED}/!g" "$(printf '%s/values/vault/secrets.yaml' "${SPECIAL_CHAR_DIR}")"
_sed_i "s!vault secret/!vault secret/${SEED}/!g" "$(printf '%s/values/vault/some-secrets.yaml' "${TEST_TEMP_DIR}")"
_sed_i "s!vault secret/!vault secret/${SEED}/!g" "$(printf '%s/values/vault/some-secrets.yaml' "${SPECIAL_CHAR_DIR}")"
sh "${TEST_TEMP_DIR}/values/vault/seed.sh"
;;
esac
}
teardown() {
# https://stackoverflow.com/a/13864829/8087167
if [ -n "${RELEASE+x}" ]; then
helm del "${RELEASE}"
fi
# https://github.com/bats-core/bats-file/pull/29
chmod -R 777 "${TEST_TEMP_DIR}"
# rm: cannot remove '/tmp/tmp.11dcSX0g8Q/home/.gnupg/S.gpg-agent.browser': No such file or directory
rm -rf "${TEST_TEMP_DIR}/home/.gnupg/"
temp_del "${TEST_TEMP_DIR}"
}
create_chart() {
{
cp -r "${HELM_CACHE}/chart" "${1}"
cp -r "${TEST_TEMP_DIR}/values" "${1}/chart"
cp "${TEST_TEMP_DIR}/values/${HELM_SECRETS_DRIVER}/secrets.yaml" "${1}/chart"
} >&2
}
helm_plugin_install() {
{
if ! env HOME="${HELM_CACHE}/home/" helm plugin list | grep -q "${1}"; then
case "${1}" in
kubeval)
env HOME="${HELM_CACHE}/home/" helm plugin install https://github.com/instrumenta/helm-kubeval
;;
diff)
env HOME="${HELM_CACHE}/home/" helm plugin install https://github.com/databus23/helm-diff
;;
esac
fi
cp -r "${HELM_CACHE}/home/." "${HOME}"
} >&2
}