-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathrun-chart-test.sh
executable file
·150 lines (122 loc) · 5.28 KB
/
run-chart-test.sh
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
145
146
147
148
149
150
#!/bin/bash
# Copyright 2020 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
KIND_LOG_LEVEL="1"
# generate unique group name
export NODE_GROUP_NAME="github-ingress-$(tr -dc A-Za-z0-9 </dev/urandom | head -c 12; echo)"
if [ -n "${DEBUG}" ]; then
set -x
KIND_LOG_LEVEL="6"
fi
set -o errexit
set -o nounset
set -o pipefail
cleanup() {
if [[ "${KUBETEST_IN_DOCKER:-}" == "true" ]]; then
kind "export" logs --name "${KIND_CLUSTER_NAME}" "${ARTIFACTS}/logs" || true
fi
if [[ "${CI:-}" == "true" ]]; then
kind delete cluster --name "${KIND_CLUSTER_NAME}"
fi
}
trap cleanup EXIT ERR
export KIND_CLUSTER_NAME=${KIND_CLUSTER_NAME:-ingress-nginx-dev}
if ! command -v kind --version &> /dev/null; then
echo "kind is not installed. Use the package manager or visit the official site https://kind.sigs.k8s.io/"
exit 1
fi
# Use 1.0.0-dev to make sure we use the latest configuration in the helm template
export TAG=1.0.0-dev
export ARCH=${ARCH:-amd64}
# Uses a custom chart-testing image to avoid timeouts waiting for namespace deletion.
CT_IMAGE="quay.io/dmitriev/chart-testing:3.7.1"
# This will prevent the secret for index.docker.io from being used if the DOCKERHUB_USER is not set.
DOCKERHUB_REGISTRY_SERVER="https://index.docker.io/v1/"
if [ "${DOCKERHUB_USER:-false}" = "false" ]; then
DOCKERHUB_REGISTRY_SERVER="fake_docker_registry_server"
fi
DOCKERHUB_SECRET_NAME="dockerhub-secret"
DOCKERHUB_USER="${DOCKERHUB_USER:-fake_user}"
DOCKERHUB_PASSWORD="${DOCKERHUB_PASSWORD:-fake_password}"
HELM_EXTRA_ARGS="--timeout 240s"
HELM_EXTRA_SET_ARGS="\
--set controller.wallarm.token=${WALLARM_API_TOKEN} \
--set controller.wallarm.nodeGroup=${NODE_GROUP_NAME} \
--set controller.wallarm.enabled=true \
--set controller.image.repository=wallarm/ingress-controller \
--set controller.image.tag=1.0.0-dev \
--set controller.terminationGracePeriodSeconds=0 \
--set controller.wallarm.tarantool.terminationGracePeriodSeconds=0 \
--set fullnameOverride=wallarm-ingress"
export KUBECONFIG="${KUBECONFIG:-$HOME/.kube/kind-config-$KIND_CLUSTER_NAME}"
if [ "${SKIP_CLUSTER_CREATION:-false}" = "false" ]; then
echo "[dev-env] creating Kubernetes cluster with kind"
export K8S_VERSION=${K8S_VERSION:-v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245}
# delete the cluster if it exists
if kind get clusters | grep "${KIND_CLUSTER_NAME}"; then
kind delete cluster --name "${KIND_CLUSTER_NAME}"
fi
kind create cluster \
--verbosity=${KIND_LOG_LEVEL} \
--name "${KIND_CLUSTER_NAME}" \
--config "${CURDIR}/test/e2e/kind.yaml" \
--retain \
--image "kindest/node:${K8S_VERSION}"
echo "Kubernetes cluster:"
kubectl get nodes -o wide
fi
if [ "${SKIP_IMAGE_CREATION:-false}" = "false" ]; then
if ! command -v ginkgo &> /dev/null; then
go install github.com/onsi/ginkgo/v2/[email protected]
fi
echo "[dev-env] building image"
make -C "${CURDIR}" clean-image build image
fi
KIND_WORKERS=$(kind get nodes --name="${KIND_CLUSTER_NAME}" | grep worker | awk '{printf (NR>1?",":"") $1}')
export KIND_WORKERS
echo "[dev-env] copying docker images to cluster..."
kind load docker-image --name="${KIND_CLUSTER_NAME}" --nodes="${KIND_WORKERS}" wallarm/ingress-controller:${TAG}
if [ "${SKIP_CERT_MANAGER_CREATION:-false}" = "false" ]; then
echo "[dev-env] deploying cert-manager..."
# Download cmctl. Cannot validate checksum as OS & platform may vary.
curl --fail --location "https://github.com/cert-manager/cmctl/releases/download/v2.1.1/cmctl_linux_amd64.tar.gz" | tar --extract --gzip cmctl
kubectl create namespace cert-manager
kubectl -n cert-manager create secret docker-registry ${DOCKERHUB_SECRET_NAME} \
--docker-server=${DOCKERHUB_REGISTRY_SERVER} \
--docker-username="${DOCKERHUB_USER}" \
--docker-password="${DOCKERHUB_PASSWORD}" \
[email protected] || true
echo "[dev-env] apply cert-manager ..."
./cmctl x install
echo "[dev-env] waiting for cert-manager components available ..."
kubectl wait --timeout=30s --for=condition=available deployment/cert-manager -n cert-manager
echo "[dev-env] getting validation webhook config ..."
kubectl get validatingwebhookconfigurations cert-manager-webhook -ojson | jq '.webhooks[].clientConfig'
echo "[dev-env] getting cert-manager endpoints ..."
kubectl get endpoints -n cert-manager cert-manager-webhook
./cmctl check api -n cert-manager --wait=2m
fi
echo "[dev-env] running helm chart e2e tests..."
docker run \
--rm \
--interactive \
--network host \
--name ct \
--volume "${KUBECONFIG}":/root/.kube/config \
--volume "${CURDIR}":/workdir \
--workdir /workdir \
${CT_IMAGE} ct install \
--charts charts/ingress-nginx \
--helm-extra-set-args "${HELM_EXTRA_SET_ARGS}" \
--helm-extra-args "${HELM_EXTRA_ARGS}"