2020# Expects following positional args:
2121# $1 : smoketest image tag
2222# $2 : max secs until test hard fails
23+ # $3 : flag indicating whether to delete pre-existing k8s objects
2324#
2425# e.g. usage
2526# smoketest_k8s.sh scalyr/scalyr-agent-ci-smoketest:3 300
3031smoketest_image=$1
3132
3233# Max seconds before the test hard fails
33- max_wait=$3
34+ max_wait=$2
3435
36+ # Flag indicating whether to delete pre-existing k8s objects
37+ delete_existing_objects=$3
3538
3639# Smoketest code (built into smoketest image)
37- smoketest_script=" /usr/bin/ python3 /tmp/smoketest.py"
40+ smoketest_script=" source ~/.bashrc && pyenv shell 3.7.3 && python3 /tmp/smoketest.py"
3841
42+
43+ # container names for all test containers
44+ # The suffixes MUST be one of (agent, uploader, verifier) to match verify_upload::DOCKER_CONTNAME_SUFFIXES
45+ contname_agent=" ci-agent-k8s-${CIRCLE_BUILD_NUM} -agent"
46+ contname_uploader=" ci-agent-k8s-${CIRCLE_BUILD_NUM} -uploader"
47+ contname_verifier=" ci-agent-k8s-${CIRCLE_BUILD_NUM} -verifier"
48+
49+
50+ # Delete existing resources
51+ if [[ " $delete_existing_objects " == " delete_existing_k8s_objs" ]]; then
52+ echo " "
53+ echo " =================================================="
54+ echo " Deleting existing k8s objects"
55+ echo " =================================================="
56+ kubectl delete deployment ${contname_verifier} || truepushd
57+ kubectl delete deployment ${contname_uploader} || true
58+ kubectl delete daemonset scalyr-agent-2 || true
59+ kubectl delete configmap scalyr-config || true
60+ kubectl delete secret scalyr-api-key || true
61+ kubectl delete -f https://raw.githubusercontent.com/scalyr/scalyr-agent-2/release/k8s/scalyr-service-account.yaml || true
62+ fi
63+
64+ echo " "
65+ echo " =================================================="
66+ echo " Creating k8s objects"
67+ echo " =================================================="
3968# Create service account
4069kubectl create -f https://raw.githubusercontent.com/scalyr/scalyr-agent-2/release/k8s/scalyr-service-account.yaml
4170
@@ -50,55 +79,71 @@ kubectl create configmap scalyr-config \
5079# The following line should be commented out for CircleCI, but it necessary for local debugging
5180# eval $(minikube docker-env)
5281
82+ echo " "
83+ echo " =================================================="
84+ echo " Building agent image"
85+ echo " =================================================="
5386# Build local image (add .ci.k8s to version)
54- TEMP_DIRECTORY=~ /temp_directory
55- mkdir $TEMP_DIRECTORY
5687perl -pi.bak -e ' s/\s*(\S+)/$1\.ci\.k8s/' VERSION
5788python build_package.py k8s_builder
5889TARBALL=$( ls scalyr-k8s-agent-* )
90+
91+ TEMP_DIRECTORY=~ /temp_directory
92+ mkdir $TEMP_DIRECTORY
5993mv $TARBALL $TEMP_DIRECTORY
94+
6095pushd $TEMP_DIRECTORY
6196./${TARBALL} --extract-packages
6297docker build -t local_k8s_image .
6398
99+ popd
64100
65- # container names for all test containers
66- # The suffixes MUST be one of (agent, uploader, verifier) to match verify_upload::DOCKER_CONTNAME_SUFFIXES
67- contname_agent=" ci-agent-k8s-${CIRCLE_BUILD_NUM} -agent"
68- contname_uploader=" ci-agent-k8s-${CIRCLE_BUILD_NUM} -uploader"
69- contname_verifier=" ci-agent-k8s-${CIRCLE_BUILD_NUM} -verifier"
70-
71-
101+ echo " "
102+ echo " =================================================="
103+ echo " Customizing daemonset YAML & starting agent"
104+ echo " =================================================="
72105# Create DaemonSet, referring to local image. Launch agent.
73- curl -Lo scalyr-agent-2-envfrom.yaml https://raw.githubusercontent.com/scalyr/scalyr-agent-2/release/k8s/scalyr-agent-2-envfrom.yaml
106+ # Use YAML from branch
107+ cp k8s/scalyr-agent-2-envfrom.yaml .
74108perl -pi.bak -e ' s/image\:\s+(\S+)/image: local_k8s_image/' scalyr-agent-2-envfrom.yaml
75109perl -pi.bak -e ' s/imagePullPolicy\:\s+(\S+)/imagePullPolicy: Never/' scalyr-agent-2-envfrom.yaml
76110kubectl create -f scalyr-agent-2-envfrom.yaml
77111# Capture agent pod
78112agent_hostname=$( kubectl get pods | fgrep scalyr-agent-2 | awk {' print $1' })
79113echo " Agent pod == ${agent_hostname} "
80114
81-
82115# Launch Uploader container (only writes to stdout, but needs to query Scalyr to verify agent liveness)
83116# You MUST provide scalyr server, api key and importantly, the agent_hostname container ID for the agent-liveness
84117# query to work (uploader container waits for agent to be alive before uploading data)
85- kubectl run ${contname_uploader} --image=${smoketest_image} -- ${smoketest_script} \
118+ echo " "
119+ echo " =================================================="
120+ echo " Starting uploader"
121+ echo " =================================================="
122+ kubectl run ${contname_uploader} --image=${smoketest_image} -- \
123+ bash -c " ${smoketest_script} \
86124${contname_uploader} ${max_wait} \
87125--mode uploader \
88126--scalyr_server ${SCALYR_SERVER} \
89127--read_api_key ${READ_API_KEY} \
90- --agent_hostname ${agent_hostname}
128+ --agent_hostname ${agent_hostname} "
129+
91130# Capture uploader pod
92131uploader_hostname=$( kubectl get pods | fgrep ${contname_uploader} | awk {' print $1' })
93132echo " Uploader pod == ${uploader_hostname} "
94133
95134
96135# Launch synchronous Verifier image (writes to stdout and also queries Scalyr)
97136# Like the Uploader, the Verifier also waits for agent to be alive before uploading data
98- kubectl run ${contname_verifier} --image=${smoketest_image} -- ${smoketest_script} \
137+ echo " "
138+ echo " =================================================="
139+ echo " Starting verifier"
140+ echo " =================================================="
141+ kubectl run -it --restart=Never ${contname_verifier} --image=${smoketest_image} -- \
142+ bash -c " ${smoketest_script} \
99143${contname_verifier} ${max_wait} \
100144--mode verifier \
101145--scalyr_server ${SCALYR_SERVER} \
102146--read_api_key ${READ_API_KEY} \
103147--agent_hostname ${agent_hostname} \
104- --uploader_hostname ${uploader_hostname}
148+ --uploader_hostname ${uploader_hostname} \
149+ --debug true"
0 commit comments