如何用Python通过GCP API查询指定区域的未挂载磁盘?
如何用Python调用GCP API查询指定区域的孤立磁盘
前置准备
- 安装GCP Compute客户端库:
pip install google-cloud-compute - 完成身份认证:本地开发可通过
gcloud auth application-default login完成;生产环境可设置服务账号密钥环境变量GOOGLE_APPLICATION_CREDENTIALS。
实现步骤与代码示例
核心思路:先获取目标区域的所有磁盘,再提取该区域所有实例挂载的磁盘ID,最后对比筛选出未被挂载的孤立磁盘。
import google.cloud.compute_v1 as compute_v1 def find_unattached_disks(project_id: str, zone: str): # 初始化磁盘和实例客户端 disks_client = compute_v1.DisksClient() instances_client = compute_v1.InstancesClient() # 1. 获取指定区域的所有磁盘 all_disks = list(disks_client.list(project=project_id, zone=zone)) # 2. 收集所有实例挂载的磁盘ID attached_disk_ids = set() for instance in instances_client.list(project=project_id, zone=zone): for disk in instance.disks: # 从磁盘资源URL中提取ID(URL最后一段) disk_id = disk.source.split("/")[-1] attached_disk_ids.add(disk_id) # 3. 筛选出未被挂载的磁盘 unattached_disks = [disk for disk in all_disks if disk.id not in attached_disk_ids] # 输出结果 print(f"区域 {zone} 中的孤立磁盘:") for disk in unattached_disks: print(f"- 名称:{disk.name},ID:{disk.id},大小:{disk.size_gb}GB") return unattached_disks # 替换为你的项目ID和目标区域 PROJECT_ID = "your-project-id" ZONE = "us-central1-a" find_unattached_disks(PROJECT_ID, ZONE)
关键说明
- 磁盘ID匹配:实例挂载的磁盘信息中,
disk.source是完整资源URL,拆分后取最后一段即可得到磁盘ID,与磁盘对象的id字段完全匹配。 - 去重处理:用集合存储已挂载磁盘ID,避免同一磁盘被多个实例挂载时重复统计。
- 扩展支持:如果需要跨区域查询,可循环遍历目标区域列表,重复调用上述函数即可。
内容的提问来源于stack exchange,提问作者Orsan Awawdi
相关产品推荐
相关产品推荐

