如果你想等待一个可能还不存在的资源,你可以尝试这样的事情:
{ grep -q -m 1 "crontabs.stable.example.com"; kill $!; } < <(kubectl get crd -w)
或者
{ sed -n /crontabs.stable.example.com/q; kill $!; } < <(kubectl get crd -w)
我理解这个问题更愿意只使用kubectl
,但是这个答案对我来说有帮助。这种方法的缺点是必须以不同的方式设置超时,并且条件本身并没有被实际检查。
为了更彻底地检查情况,我做了以下工作:
#!/bin/bash
condition-established() {
local name="crontabs.stable.example.com"
local condition="Established"
jq --arg NAME $name --arg CONDITION $condition -n \
'first(inputs | if (.metadata.name==$NAME) and (.status.conditions[]?.type==$CONDITION) then
null | halt_error else empty end)'
# This is similar to the first, but the full condition is sent to stdout
#jq --arg NAME $name --arg CONDITION $condition -n \
# 'first(inputs | if (.metadata.name==$NAME) and (.status.conditions[]?.type==$CONDITION) then
# .status.conditions[] | select(.type==$CONDITION) else empty end)'
}
{ condition-established; kill $!; } < <(kubectl get crd -w -o json)
echo Complete
要解释发生了什么,$!
指的是 bash 的进程替换运行的命令。我不确定这在其他 shell 中效果如何。
我使用kubernetes 官方文档中的CRD进行了测试。