Search code examples
bashcommand-line-interfaceoracle-cloud-infrastructure

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


I need to get the public IPs of all instances of my OCI tenant.

Here i saw a python scripts to do this from OCI Console Cloud Shell : https://medium.com/oracledevs/writing-python-scripts-to-run-from-the-oci-console-cloud-shell-a0be1091384c

But I want to create a bash script, that uses OCI CLI commands to fetch the required data.

How can I achieve this using OCI CLI commands?


Solution

  • OCI CLI structured-search and query feature can be used to fetch the OCID of instances, and instance command can be used fetch the instance details.

    The output would be in json format by default. You can use jq to filter needed data from the output json and create an array with it.

    (OCI tool supports JMESPath queries)

    Here is the snippet from bash script that uses OCI CLI commands to get public IPs of all compute instances in the compartment :

    Pre-requisites: OCI CLI should be installed and configured properly to authenticate with the correct tenant and compartment

    # 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
    

    References :

    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