Skip to content

Instantly share code, notes, and snippets.

@greatwolf
Last active September 2, 2024 02:46
Show Gist options
  • Save greatwolf/f61722476ad65cb25d7a36fe24c141d0 to your computer and use it in GitHub Desktop.
Save greatwolf/f61722476ad65cb25d7a36fe24c141d0 to your computer and use it in GitHub Desktop.
Notes and cmd snippets on how to use OCI-CLI.

Setting up OCI-CLI API key

  1. Log into cloud.oracle.com
  2. From upper-right corner click Profile -> My Profile
  3. From lower-left section find Resources -> API keys
  4. Click 'Add API key' and paste public key in PEM format
  5. Copy and save displayed configuration into ~/.oci/config

Note: Get a suitable public key PEM for step 4 from an existing private key with:

ssh-keygen -e -m PKCS8 -f oci_api_privkey.pem

Creating new Ampere compute instance

Useful for automating script retries since Ampere A1 is usually 'out of capacity' under free-tier.

oci compute instance launch --no-retry \
--compartment-id ocid1.tenancy.oc1..aaaaaaaasp7dsmvw3jxm5qzk7i5e4tjx7v3os36lshkdjragdyjgj5h53mrq \
--availability-domain yvnv:US-ASHBURN-AD-1 \
--subnet-id ocid1.subnet.oc1.iad.aaaaaaaaj4c6vgrtt7e6sxkpesduef6bkavbgvpd2gxig72xnhqto5knla5q \
--image-id ocid1.image.oc1.iad.aaaaaaaai42i6avvfxqawj3bjl5uzhlyq5lqkqhbeg4lpo5corvwqgnvrloq \
--shape VM.Standard.A1.Flex --shape-config '{"memoryInGBs":16.0,"ocpus":4.0}'

Get a shape-config json with:

oci compute instance launch --generate-param-json-input shape-config

Relevant fields used are memoryInGBs and ocpus. Others can be removed. eg. baselineOcpuUtilization, nvmes, vcpus etc.

Releasing and renewing public-ip

Get compartment-id & availability-domain

oci iam availability-domain list

Get publicip ocid + address & privateip ocid

oci network public-ip list \
--compartment-id ocid1.tenancy.oc1..aaaaaaaagyi66dc4o2cawmj4fclkpffuc6igwpx5aqh34mrcyx6qof6trs7a \
--scope AVAILABILITY_DOMAIN \
--availability-domain bgcw:AP-OSAKA-1-AD-1 --lifetime EPHEMERAL

Unassign current publicip w/o prompting

The API has an annoying asymmetry. When releasing publicip it needs the public-ip-id but renewing needs private-ip-id.

oci network public-ip delete --force \
--public-ip-id ocid1.publicip.oc1.ap-osaka-1.amaaaaaawl5wgbqaor6wq2a3ukag4cyvuta4xypphsk4ipxmol7367vkjqpq

Reassign new publicip

Note this must be done on a different machine or host. The VM instance cannot renew itself because OCI-CLI needs to make external API call.

oci network public-ip create \
--compartment-id ocid1.tenancy.oc1..aaaaaaaagyi66dc4o2cawmj4fclkpffuc6igwpx5aqh34mrcyx6qof6trs7a \
--private-ip-id ocid1.privateip.oc1.ap-osaka-1.abvwsljrnpnujpkuzbdmem22noq6ik4bhhvoxi3xemisl6f2mji6xisk3qna \
--lifetime EPHEMERAL --debug
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment