Launch, manage, and scale OCI compute instances with capacity retry logic.
Use when provisioning VMs, selecting instance shapes, or handling "out of capacity" errors.
Trigger with "oci compute", "launch instance", "out of capacity", "instance shapes".
Launch, manage, and scale OCI compute instances with capacity retry logic.
Use when provisioning VMs, selecting instance shapes, or handling "out of capacity" errors.
Trigger with "oci compute", "launch instance", "out of capacity", "instance shapes".
allowed-tools
Read, Write, Edit, Bash(pip:*), Grep
version
1.7.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
tags
["saas","oraclecloud","oci"]
compatibility
Designed for Claude Code
OCI Compute — Launch, Manage & Scale
Overview
Provision and manage OCI compute instances using the Python SDK. Compute is the entry point for most OCI workloads, but "out of host capacity" errors, shape selection confusion (Flex vs Standard, AMD vs ARM vs Intel), and boot volume management make it harder than AWS EC2. This skill covers shape selection, launch with capacity retry across availability domains, instance lifecycle actions, and boot volume management.
Purpose: Launch reliable compute instances with retry logic that survives capacity shortages.
Prerequisites
OCI Python SDK — pip install oci
Config file at ~/.oci/config with fields: user, fingerprint, tenancy, region, key_file
IAM policy — Allow group Developers to manage instances in compartment <name>
Python 3.8+
A VCN with at least one subnet (see oraclecloud-core-workflow-b)
Instructions
Step 1: Understand Shape Options
Shape
Arch
Flex?
OCPUs
Use Case
VM.Standard.A1.Flex
ARM (Ampere)
Yes
1-80
Always Free eligible, best price/perf
VM.Standard.E5.Flex
AMD
Yes
1-94
General purpose, broadest availability
VM.Standard3.Flex
Intel
Yes
1-32
Intel-specific workloads
VM.Standard.E4.Flex
AMD
Yes
1-64
Previous gen, still available
Key rule: Always use Flex shapes. They let you set exact OCPU and memory. Standard (non-Flex) shapes have fixed sizes and are being phased out.
Step 2: List Available Shapes and Images
import oci
config = oci.config.from_file("~/.oci/config")
compute = oci.core.ComputeClient(config)
identity = oci.identity.IdentityClient(config)
# Get availability domains
ads = identity.list_availability_domains(compartment_id=config["tenancy"]).data
# List shapes in each ADfor ad in ads:
shapes = compute.list_shapes(
compartment_id=config["tenancy"],
availability_domain=ad.name
).data
flex_shapes = [s for s in shapes if"Flex"in s.shape]
print(f"\n{ad.name}:")
for s in flex_shapes:
print(f" {s.shape} | OCPUs: {s.ocpu_options.min}-{s.ocpu_options.max}")
Step 3: Launch with Capacity Retry
The most common OCI error is 500 InternalError with message "Out of host capacity." The fix is to retry across availability domains.
import oci
import time
config = oci.config.from_file("~/.oci/config")
compute = oci.core.ComputeClient(config)
identity = oci.identity.IdentityClient(config)
ads = identity.list_availability_domains(compartment_id=config["tenancy"]).data
launch_details = oci.core.models.LaunchInstanceDetails(
compartment_id=config["tenancy"],
display_name="my-app-server",
shape="VM.Standard.A1.Flex",
shape_config=oci.core.models.LaunchInstanceShapeConfigDetails(
ocpus=2, memory_in_gbs=12
),
source_details=oci.core.models.InstanceSourceViaImageDetails(
image_id="ocid1.image.oc1...", # Oracle Linux 8 image OCID
boot_volume_size_in_gbs=50
),
create_vnic_details=oci.core.models.CreateVnicDetails(
subnet_id="ocid1.subnet.oc1..."
),
metadata={"ssh_authorized_keys": open("/home/user/.ssh/id_rsa.pub").read()},
)
# Retry across all ADs on capacity errorsfor ad in ads:
launch_details.availability_domain = ad.name
try:
response = compute.launch_instance(launch_details)
print(f"Launched in {ad.name}: {response.data.id}")
breakexcept oci.exceptions.ServiceError as e:
if e.status == 500and"capacity"instr(e.message).lower():
print(f"No capacity in {ad.name}, trying next AD...")
time.sleep(2)
continueraiseelse:
print("ERROR: No capacity in any AD. Try a different shape or region.")
After launching instances, proceed to oraclecloud-core-workflow-b to build the networking layer (VCN, subnets, security rules), or see oraclecloud-data-handling for Object Storage operations.