Skh*_*haz 2 gcloud google-cloud-pubsub gcloud-cli
我有一个简单的脚本来部署 pubsub 应用程序。
该脚本将在我的 Cloud Run 服务的每次部署上运行,并且我有一行:
gcloud pubsub topics create some-topic
Run Code Online (Sandbox Code Playgroud)
如果主题已经存在,我想改进我的脚本,目前如果我运行我的脚本,输出将是:
错误:无法创建主题 [projects/project-id/topics/some-topic]:项目中已存在资源 (resource=some-topic)。
错误:(gcloud.pubsub.topics.create)无法创建以下内容:[some-topic]。
我尝试了标志--no-user-output-enabled但没有成功。
有没有办法忽略资源是否已存在,或者在创建之前进行检查?
是的。
您可以重复该操作,因为您知道,如果该主题之前不存在,那么如果该命令成功,该主题就会存在。
你可以吞掉 stderr(用2>/dev/null),然后检查前面的命令($?)是否成功(0):
gcloud pubsub topic create do-something 2>/dev/null
if [ $? -eq 0 ]
then
# Command succeeded, topic did not exist
echo "Topic ${TOPIC} did not exist, created."
else
# Command did not succeed, topic may (!) not have existed
echo "Failure"
fi
Run Code Online (Sandbox Code Playgroud)
注意这种方法忽略了这样一个事实:命令可能会失败并且主题不存在(即其他一些问题)。
或者(更准确且更昂贵!)您可以首先枚举主题,然后尝试(!)创建它(如果它不存在):
TOPIC="some-topic"
RESULT=$(\
gcloud pubsub topics list \
--filter="name.scope(topics)=${TOPIC}" \
--format="value(name)" 2>/dev/null)
if [ "${RESULT}" == "" ]
then
echo "Topic ${TOPIC} does not exist, creating..."
gcloud pubsub topics create ${TOPIC}
if [ $? -eq 0 ]
then
# Command succeeded, topic created
else
# Command did not succeed, topic was not created
fi
fi
Run Code Online (Sandbox Code Playgroud)
根据您需求的复杂性,您可以自动化使用:
| 归档时间: |
|
| 查看次数: |
1615 次 |
| 最近记录: |