Merge pull request #122994 from ardaguclu/wait-non-existed-resources
kubectl wait: Introduce --wait-for-creation flag
This commit is contained in:
@@ -1036,6 +1036,7 @@ runTests() {
|
||||
####################
|
||||
|
||||
record_command run_wait_tests
|
||||
record_command run_wait_with_non_existence_check_tests
|
||||
|
||||
####################
|
||||
# kubectl debug #
|
||||
|
||||
103
test/cmd/wait.sh
103
test/cmd/wait.sh
@@ -117,3 +117,106 @@ EOF
|
||||
set +o nounset
|
||||
set +o errexit
|
||||
}
|
||||
|
||||
run_wait_with_non_existence_check_tests() {
|
||||
set -o nounset
|
||||
set -o errexit
|
||||
|
||||
kube::log::status "Testing kubectl wait"
|
||||
|
||||
create_and_use_new_namespace
|
||||
|
||||
### Wait for deletion using --all flag
|
||||
|
||||
# create test data
|
||||
kubectl create deployment test-1 --image=busybox
|
||||
kubectl create deployment test-2 --image=busybox
|
||||
|
||||
# Post-Condition: deployments exists
|
||||
kube::test::get_object_assert "deployments" "{{range .items}}{{.metadata.name}},{{end}}" 'test-1,test-2,'
|
||||
|
||||
# wait with jsonpath will timout for busybox deployment
|
||||
set +o errexit
|
||||
# Command: Wait with jsonpath support fields not exist in the first place
|
||||
output_message=$(kubectl wait --wait-for-creation --for=jsonpath=.status.readyReplicas=1 deploy/test-1 2>&1)
|
||||
set -o errexit
|
||||
|
||||
# Post-Condition: Wait failed
|
||||
kube::test::if_has_string "${output_message}" 'timed out'
|
||||
|
||||
# Delete all deployments async to kubectl wait
|
||||
( sleep 2 && kubectl delete deployment --all ) &
|
||||
|
||||
# Command: Wait for all deployments to be deleted
|
||||
output_message=$(kubectl wait deployment --for=delete --all)
|
||||
|
||||
# Post-Condition: Wait was successful
|
||||
kube::test::if_has_string "${output_message}" 'test-1 condition met'
|
||||
kube::test::if_has_string "${output_message}" 'test-2 condition met'
|
||||
|
||||
# create test data to test timeout error is occurred in correct time
|
||||
kubectl apply -f - <<EOF
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
labels:
|
||||
app: dtest
|
||||
name: dtest
|
||||
spec:
|
||||
replicas: 3
|
||||
selector:
|
||||
matchLabels:
|
||||
app: dtest
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: dtest
|
||||
spec:
|
||||
containers:
|
||||
- name: bb
|
||||
image: busybox
|
||||
command: ["/bin/sh", "-c", "sleep infinity"]
|
||||
EOF
|
||||
|
||||
set +o errexit
|
||||
# wait timeout error because condition is invalid
|
||||
start_sec=$(date +"%s")
|
||||
output_message=$(time kubectl wait pod --wait-for-creation --selector=app=dtest --for=condition=InvalidCondition --timeout=1s 2>&1)
|
||||
end_sec=$(date +"%s")
|
||||
len_sec=$((end_sec-start_sec))
|
||||
set -o errexit
|
||||
kube::test::if_has_string "${output_message}" 'timed out waiting for the condition '
|
||||
test $len_sec -ge 1 && test $len_sec -le 2
|
||||
|
||||
# Clean deployment
|
||||
kubectl delete deployment dtest
|
||||
|
||||
# create test data
|
||||
kubectl create deployment test-3 --image=busybox
|
||||
|
||||
# wait with jsonpath without value to succeed
|
||||
set +o errexit
|
||||
# Command: Wait with jsonpath without value
|
||||
output_message_0=$(kubectl wait --wait-for-creation --for=jsonpath='{.status.replicas}' deploy/test-3 2>&1)
|
||||
# Command: Wait with relaxed jsonpath and filter expression
|
||||
output_message_1=$(kubectl wait \
|
||||
--for='jsonpath=spec.template.spec.containers[?(@.name=="busybox")].image=busybox' \
|
||||
deploy/test-3)
|
||||
set -o errexit
|
||||
|
||||
# Post-Condition: Wait succeed
|
||||
kube::test::if_has_string "${output_message_0}" 'deployment.apps/test-3 condition met'
|
||||
kube::test::if_has_string "${output_message_1}" 'deployment.apps/test-3 condition met'
|
||||
|
||||
# Clean deployment
|
||||
kubectl delete deployment test-3
|
||||
|
||||
( sleep 3 && kubectl create deployment test-4 --image=busybox ) &
|
||||
output_message=$(kubectl wait --wait-for-creation --for=jsonpath=.status.replicas=1 deploy/test-4 2>&1)
|
||||
kube::test::if_has_string "${output_message}" 'test-4 condition met'
|
||||
|
||||
kubectl delete deployment test-4
|
||||
|
||||
set +o nounset
|
||||
set +o errexit
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user