govc pool.info对不存在资源池也返回0,如何校验资源池是否存在
目前govc的pool.info命令设计逻辑是:无论指定资源池是否存在,命令退出码都返回0,因此不能直接通过退出码判断资源池是否存在,可通过以下两种方案实现校验:
方案1:基于命令输出判空(最简实现)
存在的资源池执行govc pool.info一定会返回非空内容,不存在时输出为空,直接判断输出长度即可,适合快速脚本场景使用:
POOL_NAME="待校验的资源池名称" # 捕获命令输出 POOL_INFO=$(govc pool.info "${POOL_NAME}") if [ -n "${POOL_INFO}" ]; then echo "资源池 ${POOL_NAME} 已存在" else echo "资源池 ${POOL_NAME} 不存在,可正常创建" fi
方案2:基于JSON结构化输出判断(生产环境推荐)
搭配govc内置的-json参数输出结构化结果,用jq解析结果,可完全规避输出格式变化、特殊字符等异常场景的误判,可靠性更高:
POOL_NAME="待校验的资源池名称" # 用jq的-e参数将判断结果转为命令退出码 if govc pool.info -json "${POOL_NAME}" | jq -e '.ResourcePools | length > 0' > /dev/null 2>&1; then echo "资源池 ${POOL_NAME} 已存在" else echo "资源池 ${POOL_NAME} 不存在,可正常创建" fi
如果需要避免不同集群下重名的误判,可以在资源池名称前拼接完整资源路径,例如/数据中心名称/host/集群名称/Resources/资源池名称,校验范围更精准。
内容的提问来源于stack exchange,提问作者Erik
相关产品推荐
相关产品推荐

