Repository navigation
AI instance count
DevWithNehaCloud edited this page Sep 15, 2026
·
1 revision
import oci
import csv
# OCI authentication
config = oci.config.from_file()
identity = oci.identity.IdentityClient(config)
compute = oci.core.ComputeClient(config)
virtual_network = oci.core.VirtualNetworkClient(config)
tenancy_id = config["tenancy"]
# Get all compartments
compartments = [
tenancy_id
]
compartment_response = oci.pagination.list_call_get_all_results(
identity.list_compartments,
tenancy_id,
compartment_id_in_subtree=True,
access_level="ANY"
)
for compartment in compartment_response.data:
if compartment.lifecycle_state == "ACTIVE":
compartments.append(compartment.id)
print(f"Total compartments scanned: {len(compartments)}")
# CSV file
csv_file = "oci_compute_inventory.csv"
rows = []
total_instances = 0
public_instances = 0
private_instances = 0
for compartment_id in compartments:
# Get compartment name
if compartment_id == tenancy_id:
compartment_name = "Tenancy Root"
else:
compartment = identity.get_compartment(compartment_id).data
compartment_name = compartment.name
# Get all instances
instances = oci.pagination.list_call_get_all_results(
compute.list_instances,
compartment_id
).data
for instance in instances:
if instance.lifecycle_state != "RUNNING":
continue
total_instances += 1
public_ip = ""
private_ip = ""
# Get VNIC attachments for the instance
vnic_attachments = oci.pagination.list_call_get_all_results(
compute.list_vnic_attachments,
compartment_id,
instance_id=instance.id
).data
for attachment in vnic_attachments:
vnic = virtual_network.get_vnic(
attachment.vnic_id
).data
private_ip = vnic.private_ip
if vnic.public_ip:
public_ip = vnic.public_ip
break
if public_ip:
access_type = "Public"
public_instances += 1
else:
access_type = "Private"
private_instances += 1
rows.append([
compartment_name,
instance.display_name,
instance.lifecycle_state,
access_type,
private_ip,
public_ip
])
# Write CSV
with open(csv_file, "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow([
"Compartment",
"Instance Name",
"Status",
"Access Type",
"Private IP",
"Public IP"
])
writer.writerows(rows)
print("\n===== OCI COMPUTE INVENTORY =====")
print(f"Total Running Instances : {total_instances}")
print(f"Public Instances : {public_instances}")
print(f"Private Instances : {private_instances}")
print(f"CSV Report : {csv_file}")
open code editor in OCI console and create a file inventory.py, paste the above script and save this
Now open in integrated terminal and run the script
python --version
python inventory.py
import oci
import csv
# OCI authentication
config = oci.config.from_file()
identity = oci.identity.IdentityClient(config)
compute = oci.core.ComputeClient(config)
virtual_network = oci.core.VirtualNetworkClient(config)
tenancy_id = config["tenancy"]
# --------------------------------------------------
# Get all compartments including root tenancy
# --------------------------------------------------
compartments = [
{
"id": tenancy_id,
"name": "Tenancy Root"
}
]
compartment_response = oci.pagination.list_call_get_all_results(
identity.list_compartments,
tenancy_id,
compartment_id_in_subtree=True,
access_level="ANY"
)
for compartment in compartment_response.data:
if compartment.lifecycle_state == "ACTIVE":
compartments.append({
"id": compartment.id,
"name": compartment.name
})
print(f"Total compartments scanned: {len(compartments)}")
# --------------------------------------------------
# Counters
# --------------------------------------------------
total_instances = 0
running_instances = 0
stopped_instances = 0
public_instances = 0
private_instances = 0
rows = []
# --------------------------------------------------
# Scan all compartments
# --------------------------------------------------
for compartment in compartments:
compartment_id = compartment["id"]
compartment_name = compartment["name"]
print(f"Scanning compartment: {compartment_name}")
instances = oci.pagination.list_call_get_all_results(
compute.list_instances,
compartment_id
).data
for instance in instances:
# Do NOT filter only RUNNING instances
# We want RUNNING + STOPPED + other non-terminated states
lifecycle_state = instance.lifecycle_state
# Skip terminated instances
if lifecycle_state == "TERMINATED":
continue
total_instances += 1
if lifecycle_state == "RUNNING":
running_instances += 1
elif lifecycle_state == "STOPPED":
stopped_instances += 1
public_ip = ""
private_ip = ""
# --------------------------------------------------
# Find VNIC and check public/private IP
# --------------------------------------------------
vnic_attachments = oci.pagination.list_call_get_all_results(
compute.list_vnic_attachments,
compartment_id,
instance_id=instance.id
).data
for attachment in vnic_attachments:
vnic = virtual_network.get_vnic(
attachment.vnic_id
).data
private_ip = vnic.private_ip
if vnic.public_ip:
public_ip = vnic.public_ip
break
# --------------------------------------------------
# Classify Public / Private
# --------------------------------------------------
if public_ip:
access_type = "Public"
public_instances += 1
else:
access_type = "Private"
private_instances += 1
# --------------------------------------------------
# Add data to CSV
# --------------------------------------------------
rows.append([
compartment_name,
instance.display_name,
lifecycle_state,
access_type,
private_ip,
public_ip
])
# --------------------------------------------------
# Create CSV
# --------------------------------------------------
csv_file = "oci_compute_inventory.csv"
with open(csv_file, "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow([
"Compartment",
"Instance Name",
"Status",
"Access Type",
"Private IP",
"Public IP"
])
writer.writerows(rows)
# --------------------------------------------------
# Final Summary
# --------------------------------------------------
print("\n======================================")
print(" OCI COMPUTE INVENTORY")
print("======================================")
print(f"Total Instances : {total_instances}")
print(f"Running Instances: {running_instances}")
print(f"Stopped Instances: {stopped_instances}")
print(f"Public Instances : {public_instances}")
print(f"Private Instances: {private_instances}")
print("\nCSV Report Generated:")
print(csv_file)
run the script
check the downloaded csv file