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.
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": { ...
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
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
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
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
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