我正在尝试在实例组中解析GCP计算实例的外部IP地址,然后用逗号分隔它们,以将其注入软件的配置文件中。
我已经创建了一个在我的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计算实例上的工作的信息。
使用通配符时在Ubuntu1604LT上的预期结果:
x.x.x.x,y.y.y.y,z.z.z.z
(与Mac相同(
使用通配符时的实际结果:
同意Amanda的答案,但根据GCP文档 :( COLON(支持已被弃用,并将很快删除。
因此,按照下面的示例应起作用:
gcloud compute instances list --filter="name~instance-name"
--format="get(networkInterfaces[0].accessConfigs[0].natIP)"
| tr 'n' ',' | sed s/.$//
发现需要删除密钥对和括号之间的空间以在Ubuntu中进行此工作:
gcloud compute instances list --filter="name:instance-name*"
--format="get(networkInterfaces[0].accessConfigs[0].natIP)"
| tr 'n' ',' | sed s/.$//