Files
kured/tests/kind/testfiles/node-stays-as-cordonned.sh
Jean-Philippe Evrard 608abc6e89 Increase CI coverage and provide new dev tool (#982)
* Move to stable kind cluster filenames

Without this, we have to rename files at every version.
This is really unnecessary, we should only change the files
and be done with it.

This is a problem, as if we move to programmatic test running,
the tests would need to be mutatated at every k8s version.

With this model, we know that only the kind-cluster files
need to be modified for the tests to ba automatically
adapted.

Signed-off-by: Jean-Philippe Evrard <open-source@a.spamming.party>

* Create e2e from go tests interface

Without this, e2e tests need tons of manual work to
test locally, and the results are not easily exposed.

People are less likely to use the e2e tests if they
are tough to use outside the CI.

This commit makes it easier to run tests locally,
and ensures the CI is closer to the Makefile.

At the same time, this removes debt in the github
worfklows: By switching to newer versions of kind,
we can remove the very old workaround for the
failed to attach pid 1.

Signed-off-by: Jean-Philippe Evrard <open-source@a.spamming.party>

* Add node stays as cordonned test

Without this, impossible to prove that the node stays as cordonned
after a reboot by kured.

This refactor also adds the test in the CI, and makes sure the
CI is a bit simpler, by using matrix more extensively.

Signed-off-by: Jean-Philippe Evrard <open-source@a.spamming.party>

* Use hack dir instead of .tmp

This is more idiomatic.

Signed-off-by: Jean-Philippe Evrard <open-source@a.spamming.party>

---------

Signed-off-by: Jean-Philippe Evrard <open-source@a.spamming.party>
2024-10-15 13:16:45 -07:00

59 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
kubectl_flags=( )
[[ "$1" != "" ]] && kubectl_flags=("${kubectl_flags[@]}" --context "$1")
cordon() {
kubectl "${kubectl_flags[@]}" cordon "${precordonned_node}"
}
create_sentinel() {
docker exec "${precordonned_node}" touch "${SENTINEL_FILE:-/var/run/reboot-required}"
docker exec "${notcordonned_node}" touch "${SENTINEL_FILE:-/var/run/reboot-required}"
}
check_reboot_required() {
while true;
do
docker exec "${precordonned_node}" stat /var/run/reboot-required > /dev/null && echo "Reboot still required" || return 0
sleep 3
done
}
check_node_back_online_as_cordonned() {
sleep 5 # For safety, wait for 5 seconds, so that the kubectl command succeeds.
# This test might be giving us false positive until we work on reliability of the
# test.
while true;
do
result=$(kubectl "${kubectl_flags[@]}" get node "${precordonned_node}" --no-headers | awk '{print $2;}')
test "${result}" != "Ready,SchedulingDisabled" && echo "Node ${precordonned_node} in state ${result}" || return 0
sleep 3
done
}
check_node_back_online_as_uncordonned() {
while true;
do
result=$(kubectl "${kubectl_flags[@]}" get node "${notcordonned_node}" --no-headers | awk '{print $2;}')
test "${result}" != "Ready" && echo "Node ${notcordonned_node} in state ${result}" || return 0
sleep 3
done
}
### Start main
worker_nodes=$(${KUBECTL_CMD:-kubectl} "${kubectl_flags[@]}" get nodes -o custom-columns=name:metadata.name --no-headers | grep worker)
precordonned_node=$(echo "$worker_nodes" | head -n 1)
notcordonned_node=$(echo "$worker_nodes" | tail -n 1)
# Wait for kured to install correctly
sleep 15
cordon
create_sentinel
check_reboot_required
echo "Node has rebooted, but may take time to come back ready"
check_node_back_online_as_cordonned
check_node_back_online_as_uncordonned
echo "Showing final node state"
${KUBECTL_CMD:-kubectl} "${kubectl_flags[@]}" get nodes
echo "Test successful"