About OCI Utilities

Instances created in Oracle Cloud Infrastructure using Oracle-Provided Images based on Oracle Linux include a pre-installed set of utilities that are designed to make it easier to work with Oracle Linux images. This is a quick blog post to demonstrate how the oci-metadata command included in OCI Utilities make quick work of accessing instance metadata.

Update – March 4th, 2019: This post was updated to include the --value-only option

As of this writing, the following components are included. You can read more about each of the utilities in the OCI Utilities documentation.

  • ocid
  • oci-growfs
  • oci-iscsi-config
  • oci-metadata
  • oci-network-config
  • oci-network-inspector
  • oci-network-inspector
  • oci-public-ip

Working With Instance Metadata Using oci-metadata

Display all instance metadata

To display all metadata in human-readable format, simply run oci-metadata

$ oci-metadata
Instance details:
  Display Name: autonomous blog
  Region: iad - us-ashburn-1 (Ashburn, VA, USA)
  Canonical Region Name: us-ashburn-1
  Availability Domain: PDkt:US-ASHBURN-AD-3
  Fault domain: FAULT-DOMAIN-2
  OCID: ocid1.instance.oc1.iad.abuwcl.................7crrhz2g......aq
  Compartment OCID: ocid1.tenancy.oc1..aaaaaaaa5............qok3lunzc6.....jw7q
  Instance shape: VM.Standard2.1
  Image ID: ocid1.image.oc1.iad.aaaaaaaawuf..............zjc7klojix6vmk42va
  Created at: 1548877740674
  state: Running
  Instance Metadata:
    user_data: dW5kZWZpbmVk
    ssh_authorized_keys: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAxxxxxxxxxxVMheESQgRukanNBmLxaXA0kZw4DxaCispcEjTgAmBmHpUWQBsG7Y/s3zVQDUZ5irMKr2Rtc5DAkH+y6SsNw+xxxxxx+Zix85RClbmu3vl6Mf1++15VoxxxxxEP16mPZl+Cfk/T9LVIlMtV+brph8AQACxFxxxxxxWSNTj1tE8DTml2QnSA6F6MtP6OvOQ0KzQViNm1kN9MaarGOoNxxxxxxNyJGayh8YA6+n8Y07A3fr870H bmc
Networking details:
  VNIC OCID: ocid1.vnic.oc1.iad.abuwcljsrul..............................hioysuicdmzcq
  VLAN Tag: 804
  MAC address: 02:00:17:01:78:09
  Subnet CIDR block: 10.0.2.0/24
  Virtual router IP address: 10.0.2.1
  Private IP address: 10.0.2.3
 

To display all metadata in JSON format:

$ oci-metadata -j 
oci-metadata -j
{
  "instance": {
    "compartmentId": "ocid1.tenancy.oc1..aaaaaaaa5............qok3lunzc6.....jw7q", 
    "displayName": "autonomous blog", 
    "timeCreated": 1548877740674, 
    "state": "Running", 
    "image": "ocid1.image.oc1.iad.aaaaaaaawufnve5jxze4xf7orejupw5iq3pms6cuadzjc7klojix6vmk42va", 
    "canonicalRegionName": "us-ashburn-1", 
    "metadata": {
...

Display a specific metadata key value

The following command displays the value of the canonicalRegionName key, trimming the path to the last component only using the --trim option.

$ oci-metadata -g canonicalRegionName --trim
Canonical Region Name: us-ashburn-1

Exporting metadata values as environment variables

Using eval

To set an environment with the name and value from instance metadata:

$ eval $(oci-metadata --get compartmentId --export)
$ echo $compartmentId
ocid1.tenancy.oc1..aaaaaaaa5............qok3lunzc6.....jw7q

Using the --value-only option

The --value-only option, as the name implies, outputs only the key value without a label. For example:

$ oci-metadata -g "CanonicalRegionName" --value-only
us-phoenix-1

Or, to assign the compartment ID to an environment variable:

$ export MYCOMPARTMENT=`oci-metadata -g "compartmentID" --value-only`
$ echo MYCOMPARTMENT
ocid1.tenancy.oc1..aaaaaaaa5............qok3lunzc6.....jw7q

Using jq

To set an environment variable you name yourself, you can extract the raw value of a key using the jq JSON processor:

$ export MYCOMPARTMENT=`oci-metadata -j --trim -g /instance/compartmentID | jq -r .[]`
$ echo MYCOMPARTMENT
ocid1.tenancy.oc1..aaaaaaaa5............qok3lunzc6.....jw7q

Display the Instance’s Public IP Address

To display the instance’s public IP address

$ oci-public-ip
Public IP address: 129.xxx.yyy.175
 

And to extract just the IP address:

oci-public-ip -j | jq -r .[]
129.xxx.yyy.175