Изменение метки существующих функций GCP Cloud - PullRequest
0 голосов
/ 13 июля 2020

Я использую команду ниже, чтобы обновить метку уже развернутой функции GCP Cloud.

   $ gcloud functions deploy GCFunction --update-labels env=dev,app=myapp
     Deploying function (may take a while - up to 2 minutes)...failed.

Похоже, что развертывание выполняется, когда мы пытаемся изменить метку для существующих функций. Можем ли мы изменить метку, не выполняя развертывания, как любой другой API или облачная функция для выполнения той же задачи.

1 Ответ

1 голос
/ 13 июля 2020

Это работает.

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

ПРИМЕЧАНИЕ Вам необходимо продублировать ярлыки, которые вы sh должны сохранить. В моем примере я не дублировал app, и он удаляется PATCH.

ПРИМЕЧАНИЕ Тело ответа - asyn c Операция , поэтому вам нужно будет проверить ее завершение.

Обновление: Операции

Если у вас установлена ​​самая лучшая 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 реализовано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...