Службы gcloud включить / отключить --asyn c --format = json возвращает пустой массив - PullRequest
0 голосов
/ 22 января 2020

gcloud поддерживает сценарии с параметром --format и gcloud services enable --async возвращает команду, которую можно использовать для ожидания завершения операции.

Например, следующий вызов gcloud services disable servicenetworking.googleapis.com --async может вернуть что-то вроде:

Asynchronous operation is in progress... Use the following command to wait for its completion:
 gcloud beta services operations wait operations/acf.<UID>

Проблема здесь в том, что вывод возвращается в виде 2 строк, и его не так просто включить в автоматизированные сценарии. Первая идея состоит в том, чтобы использовать опцию --format с чем-то вроде --format=json и потом использовать jq, но --format=json просто ничего не делает для gcloud services enable/disable, он всегда возвращает [].

1 Ответ

1 голос
/ 23 января 2020

Итак, я обнаружил, что gcloud services enable/disable не имеет фактического вывода, но вместо этого вывод, который мы получаем с --async, идет в поток ошибок.

Итак, я создал этот небольшой скрипт, который позволяет получить идентификатор операции из вывода, сохранить его в файле и затем обработать любым способом, который мы хотим:

wait_operation_id_file="$(mktemp /tmp/enable_service_operation.XXXXXXX)"
gcloud services enable "servicenetworking.googleapis.com" --async 2>&1 \
  | grep 'gcloud beta services operations wait' \
  | sed 's/.*wait //' \
  >> "${wait_operation_id_file}"
wait_id="$(cat "${wait_operation_id_file}")"
gcloud services operations wait "${wait_id}"
rm --force "${wait_operation_id_file}"
...