如何获取Oracle Cloud Infrastructure所有compartments的实例总数?
如何统计Oracle Cloud Infrastructure(OCI)所有Compartments的实例总数
可以通过OCI CLI结合Shell脚本实现批量遍历所有Compartments(包括嵌套子Compartment)并汇总实例总数,具体步骤如下:
1. 准备工作
确保你已经配置好OCI CLI的身份验证(本地配置文件或环境变量),并且安装了jq工具(用于解析JSON输出)。
2. 获取所有Compartment ID
首先获取根Compartment的ID,再递归拉取所有层级的Compartment ID:
# 获取根Compartment ID ROOT_COMPARTMENT_ID=$(oci iam compartment list --query 'data[?name == `root`].id' | jq -r '.[]') # 递归获取所有Compartment ID(包括子Compartment) COMPARTMENT_IDS=$(oci iam compartment list --compartment-id $ROOT_COMPARTMENT_ID --all --query 'data[*].id' | jq -r '.[]')
3. 遍历统计并汇总实例数
编写Shell脚本遍历每个Compartment,统计实例数并累加总数:
TOTAL_INSTANCES=0 for ID in $COMPARTMENT_IDS; do # 用你习惯的list-vnics命令统计实例数(每个实例至少对应一个VNIC) INSTANCE_COUNT=$(oci compute instance list-vnics --compartment-id $ID --query 'length(data)' | jq -r '.') # 也可以直接用instance list命令更精准: # INSTANCE_COUNT=$(oci compute instance list --compartment-id $ID --query 'length(data)' | jq -r '.') echo "Compartment $ID: $INSTANCE_COUNT 个实例" TOTAL_INSTANCES=$((TOTAL_INSTANCES + INSTANCE_COUNT)) done echo "所有Compartment的实例总数: $TOTAL_INSTANCES"
注意事项
- 权限要求:执行脚本的OCI用户需要具备
读取Compartment和读取实例的权限,否则会返回权限错误或空结果。 - 速率限制:如果你的租户有大量Compartment,建议在循环中加入
sleep 1避免触发OCI API的速率限制。 - 无重复统计:每个实例仅归属于一个Compartment,因此该脚本不会出现重复计数的问题。
内容的提问来源于stack exchange,提问作者Siva
相关产品推荐
相关产品推荐

