You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python Connection在OpenStack中从快照创建卷

从OpenStack快照创建卷的Python SDK解决方案

嘿,我之前也踩过这个坑!其实你不用找专门的“从快照创建卷”方法——用你已经知道的create_volume方法就行,只需要传入快照的ID参数,文档里可能没专门高亮这个点,但它确实支持。

核心代码示例

先给你直接上能用的代码,里面关键就是snapshot_id这个参数:

from openstack import connection

# 先初始化OpenStack连接(替换成你的环境信息)
conn = connection.Connection(
    auth_url="https://your-openstack-auth-url:5000/v3",
    project_name="your-project-name",
    username="your-username",
    password="your-password",
    user_domain_id="default",
    project_domain_id="default"
)

# 替换成你要用来创建卷的快照ID
target_snapshot_id = "your-snapshot-uuid"

# 调用create_volume,指定snapshot_id而不是image_id
new_volume = conn.block_storage.create_volume(
    name="Snapshot-Based-Volume",
    description="Created from snapshot via OpenStack SDK",
    size=20,  # 注意:这里的大小不能小于快照的实际大小!
    snapshot_id=target_snapshot_id
)

# 可选:等待卷创建完成(避免后续操作时卷还在创建中)
conn.block_storage.wait_for_status(new_volume, status='available', wait=300)

print(f"Volume created successfully! ID: {new_volume.id}")

关键注意点

  • 参数优先级:如果同时传了image_id和snapshot_id,OpenStack会优先用快照来创建卷
  • 大小限制:卷的size参数必须大于等于快照的大小,否则API会返回错误
  • 快照状态:确保你的快照处于available状态,不然无法用来创建卷

如何获取快照ID(如果不知道的话)

如果你记不清快照的UUID,可以先查询所有快照:

# 列出当前项目下的所有快照
snapshots = conn.block_storage.snapshots()
for snap in snapshots:
    print(f"Snapshot Name: {snap.name}, ID: {snap.id}, Size: {snap.size}GB")

这样就能找到你需要的快照ID啦~

内容的提问来源于stack exchange,提问作者Xaver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 16:27:38