如何在 OCI 中列出 public 所有计算实例的 IP?

How to list public IPs of all compute instances in OCI?

我需要获取我的 OCI 租户的所有实例的 public IP。

我在这里看到了一个 python 脚本来从 OCI 控制台云 Shell 执行此操作:https://medium.com/oracledevs/writing-python-scripts-to-run-from-the-oci-console-cloud-shell-a0be1091384c

但我想创建一个 bash 脚本,它使用 OCI CLI 命令来获取所需的数据。

如何使用 OCI CLI 命令实现此目的?

OCI CLI structured-searchquery 功能可用于获取实例的 OCID,并且 instance 命令可用于获取实例详细信息。

输出默认为json格式。 您可以使用 jq 从输出中过滤所需的数据 json 并使用它创建一个数组。

(OCI工具支持JMESPath查询)

这是来自 bash 脚本的片段,它使用 OCI CLI 命令获取隔离区中所有计算实例的 public IP:

先决条件:应正确安装和配置 OCI CLI 以使用正确的租户和隔离区进行身份验证

# Fetch the OCID of all the running instances in OCI and store to an array
instance_ocids=$(oci search resource structured-search --query-text "QUERY instance resources where lifeCycleState='RUNNING'"  --query 'data.items[*].identifier' --raw-output | jq -r '.[]' ) 

# Iterate through the array to fetch details of each instance one by one
for val in ${instance_ocids[@]} ; do

   echo $val

   # Get name of the instance
   instance_name=$(oci compute instance get --instance-id $val --raw-output --query 'data."display-name"')
   echo $instance_name


   # Get Public Ip of the instance
   public_ip=$(oci compute instance list-vnics --instance-id $val --raw-output --query 'data[0]."public-ip"')
   echo $public_ip

done

参考资料:

https://blogs.oracle.com/cloud-infrastructure/post/exploring-the-search-and-query-features-of-oracle-cloud-infrastructure-command-line-interface

https://docs.oracle.com/en-us/iaas/tools/oci-cli/2.9.9/oci_cli_docs/cmdref/compute/instance.html