mirror of
https://github.com/kubereboot/kured.git
synced 2026-08-28 05:47:23 +00:00
* 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>
59 lines
1.9 KiB
Bash
Executable File
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" |