Я пытаюсь проанализировать внешние IP-адреса вычислительных экземпляров GCP в группе экземпляров, а затем разделить их запятыми, чтобы вставить в файл конфигурации для программного обеспечения.
Я создал команду, которая успешно выполняет это на моем Mac (10.14.6):
gcloud compute instances list --filter="name :(name-of-instance*)" \
--format="get(networkInterfaces[0].accessConfigs[0].natIP)" \
| tr '\n' ',' | sed s/.$//
который сразу выводит список: x.x.x.x,y.y.y.y,z.z.z.z
затем эта команда помещается в сценарий bash, который будет выполняться на вычислительном экземпляре (под управлением Ubuntu 1604LTS). однако, когда я пробую тестовый экземпляр (Ubuntu 1604LTS), предыдущая команда с подстановочным знаком *
ничего не выводит.
Я проверил это, удалив подстановочный знак и указав полное имя одного из экземпляров, и он правильно выводит внешний IP-адрес этого экземпляра:
gcloud compute instances list --filter="name :(name-of-instance-full)" \
--format="get(networkInterfaces[0].accessConfigs[0].natIP)" \
| tr '\n' ',' | sed s/.$//
Я пробовал использовать несколько выражений фильтра, включая name : (instanceName*)
, name ~ ^instanceName*
, name = instanceName*
(Подстановочные знаки не допускаются для выражения =
, поэтому оно не работает везде).
Я не могу сказать, является ли это ошибкой в gcloud sdk или мне что-то не хватает о том, как фильтры работают на экземплярах вычислений GCP.
ожидаемый результат на Ubuntu1604LTS при использовании подстановочного знака: x.x.x.x,y.y.y.y,z.z.z.z
(такой же, как на Mac)
фактический результат при использовании подстановочного знака: