Google cloud platform gcloud sdk(ubuntu)上的筛选器通配符问题
我试图解析实例组中GCP计算实例的外部IP地址,然后用逗号将它们分开,以插入到软件的配置文件中 我已经在Mac 10.14.6上创建了一个成功执行此操作的命令:Google cloud platform gcloud sdk(ubuntu)上的筛选器通配符问题,google-cloud-platform,gcloud,google-cloud-sdk,Google Cloud Platform,Gcloud,Google Cloud Sdk,我试图解析实例组中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/.$// 它会立即输出一个列表
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脚本中,该脚本将在运行ubuntu1604lts的计算实例上运行。
但是,当我在测试实例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*不允许为=表达式使用通配符,因此它到处都会失败
我无法判断这是否是gcloudsdk中的一个bug,或者我是否遗漏了一些关于过滤器如何在GCP计算实例上工作的信息
使用通配符时Ubuntu1604LTS的预期结果:
x、 x.x.x,y.y.y.y,z.z.z与Mac上的相同
使用通配符时的实际结果:
结果表明,为了在Ubuntu中实现这一功能,需要删除密钥对和括号之间的空格:
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/.$//
同意的答案,但根据gcp:冒号支持已被弃用,不久将被放弃
因此,根据下面的示例,应该可以:
gcloud compute instances list --filter="name~instance-name" \
--format="get(networkInterfaces[0].accessConfigs[0].natIP)" \
| tr '\n' ',' | sed s/.$//
同意的答案,但根据gcp:冒号支持已被弃用,不久将被放弃
因此,根据下面的示例,应该可以:
gcloud compute instances list --filter="name~instance-name" \
--format="get(networkInterfaces[0].accessConfigs[0].natIP)" \
| tr '\n' ',' | sed s/.$//
也许试着避开星号。。。看,也许试着避开星号。。。看见