我正在使用以下命令更新已经部署的GCP Cloud函数的标签。
$ gcloud functions deploy GCFunction --update-labels env=dev,app=myapp
Deploying function (may take a while - up to 2 minutes)...failed.
当我们试图更改现有函数的标签时,它看起来是在进行部署。我们是否可以像任何其他API或Cloud函数一样,在不进行任何部署的情况下进行标签更改,以完成相同的任务。
它是有效的。
PROJECT=[[YOUR-PROJECT]]
REGION=[[YOUR-REGION]]
FUNCTION=[[YOUR-FUNCTION]]
ENDPOINT="https://cloudfunctions.googleapis.com/v1"
NAME="projects/${PROJECT}/locations/${REGION}/functions/${FUNCTION}"
URL="${ENDPOINT}/${NAME}"
gcloud functions describe ${FUNCTION}
--project=${PROJECT}
--region=${REGION}
--format="yaml(labels)"
labels:
app: myapp
deployment-tool: cli-gcloud
env: dev
curl
--request PATCH
--header "Authorization: Bearer $(gcloud auth print-access-token)"
--header "content-type: application/json"
--data "{"labels":{"env":"testing"}}"
${URL}?updateMask=labels
gcloud functions describe ${FUNCTION}
--project=${PROJECT}
--region=${REGION}
--format="yaml(labels)"
labels:
env: testing
注意您需要复制要保留的标签。在我的示例中,我没有复制
app
,它已被PATCH删除。
注意响应主体是异步操作,因此您需要检查其完成情况。
更新:操作
如果您安装了最优秀的jq
(或类似的JSON解析器(,那么您可以轮询操作的状态,直到它完成(更好的是,还可以为读取器设置超时…(。
ENDPOINT="https://cloudfunctions.googleapis.com/v1"
NAME="projects/${PROJECT}/locations/${REGION}/functions/${FUNCTION}"
URL="${ENDPOINT}/${NAME}"
TOKEN=$(gcloud auth print-access-token)
VALUE="full-testing"
DATA="{"labels":{"env":"${VALUE}"}}"
NAME=$(curl
--silent
--request PATCH
--header "Authorization: Bearer ${TOKEN}"
--header "content-type: application/json"
--data "${DATA}"
${URL}?updateMask=labels |
jq -r .name) && echo ${NAME}
URL="${ENDPOINT}/${NAME}"
while [ $(curl --silent --request GET --header "Authorization: Bearer ${TOKEN}" ${URL} | jq -r .done) != "true" ]
do
printf "."
sleep 15s
done
gcloud functions describe ${FUNCTION}
--project=${PROJECT}
--region=${REGION}
--format="yaml(labels)"
我找不到已实现的gcloud functions operations
。