磁盘
更新时间:2023-05-31
创建CDS磁盘
支持新建空白CDS磁盘或者从CDS数据盘快照创建CDS磁盘,参考以下代码可以创建CDS磁盘:
// 新建CDS磁盘
args := &api.CreateCDSVolumeArgs{
// 创建一个CDS磁盘,若要同时创建多个相同配置的磁盘,可以修改此参数
PurchaseCount: 1,
// 磁盘空间大小
CdsSizeInGB: 40,
// 设置磁盘存储介质
StorageType: api.StorageTypeSSD,
// 设置磁盘付费模式为后付费
Billing: &api.Billing{
PaymentTiming: api.PaymentTimingPostPaid,
},
// 设置磁盘名称
Name: "sdkCreate",
// 设置磁盘描述
Description: "sdk test",
// 快照ID
SnapshotId string "snapshotId"
// 可用区
ZoneName string "zoneName"
// 设置磁盘加密密钥
EncryptKey string "encryptKey"
}
result, err := client.CreateCDSVolume(args)
if err != nil {
fmt.Println("create CDS volume failed:", err)
} else {
fmt.Println("create CDS volume success: ", result)
}
提示:
查询磁盘列表
以下代码可以查询所有的磁盘列表,支持分页查询以及通过次磁盘所挂载的BCC实例id进行过滤筛选:
args := &api.ListCDSVolumeArgs{}
// 设置查询绑定了特定实例的CDS磁盘
args.InstanceId = instanceId
result, err := client.ListCDSVolume(args)
if err != nil {
fmt.Println("list CDS volume failed:", err)
} else {
fmt.Println("list CDS volume success: ", result)
}
查询磁盘详情
通过磁盘id可以获取对应磁盘的详细信息,以下代码可以查询磁盘详情:
result, err := client.GetCDSVolumeDetail(volumeId)
if err != nil {
fmt.Println("get CDS volume detail failed:", err)
} else {
fmt.Println("get CDS volume detail success: ", result)
}
挂载CDS磁盘
可以将未挂载的磁盘挂载在对应的BCC虚机下,以下代码将一个CDS挂载在对应的BCC虚机下:
args := &api.AttachVolumeArgs{
InstanceId: instanceId,
}
result, err := client.AttachCDSVolume(volumeId, args)
if err != nil {
fmt.Println("attach CDS volume to instance failed:", err)
} else {
fmt.Println("attach CDS volume to instance success: ", result)
}
提示:
- CDS磁盘需要挂载在与其处在相同zone下的虚机实例上,否则将返回403错误。
- 只有磁盘状态为 Available 且实例状态为 Running 或 Stopped 时才允许挂载,否则调用此接口将返回 409 错误。
卸载CDS磁盘
可以将已挂载的磁盘从对应的BCC虚机上卸载下来,以下代码卸载CDS磁盘:
args := &api.DetachVolumeArgs{
InstanceId: instanceId,
}
err := client.DetachCDSVolume(volumeId, args)
if err != nil {
fmt.Println("detach CDS volume from instance failed:", err)
} else {
fmt.Println("detach CDS volume from instance success")
}
提示:
- 只有实例状态为 Running 或 Stopped 时,磁盘才可以执行此操作,否则将提示 409 错误。
- 如果 volumeId 的磁盘不挂载在 instanceId 的实例上,该操作失败,提示 404 错误。
释放CDS磁盘
用于释放未挂载的CDS磁盘,可指定是否删除磁盘关联的快照,缺省情况下,该磁盘的所有快照将保留,但会删除与磁盘的关联关系:
err = client.DeleteCDSVolume(volumeId)
if err != nil {
fmt.Println("delete CDS volume failed:", err)
} else {
fmt.Println("delete CDS volume success")
}
提示:
- 已挂载的CDS磁盘不能释放,系统盘不能释放。
- 磁盘释放后不可恢复。缺省情况下,该磁盘的所有快照将保留,但会删除与磁盘的关联关系。
- 只有磁盘状态为 Available 或 Expired 或 Error 时才可以执行此操作,否则将提示 409 错误。
释放磁盘(POST)
使用以下代码可以释放磁盘:
deleteCDSVolumeArgs := &DeleteCDSVolumeArgs{
// 设置关联释放手动快照,取值为"on"时,会删除磁盘关联的手动快照
ManualSnapshot string "on"
// 设置关联释放自动快照,取值为"on"时,会删除磁盘关联的自动快照
AutoSnapshot string "on"
}
// 设置你要操作的volumeId
volumeId := "your-choose-volume-id"
if err := bccClient.DeleteCDSVolumeNew(volumeId, deleteCDSVolumeArgs); err != nil {
fmt.Println("DeleteCDSVolumeNew failed: ", err)
} else {
fmt.Println("DeleteCDSVolumeNew success")
}
磁盘重命名
如下代码可以给一个CDS磁盘重命名
args := &api.RenameCSDVolumeArgs{
Name: "testVolume",
}
err := client.RenameCDSVolume(volumeId, args)
if err != nil {
fmt.Println("rename CDS volume failed", err)
} else {
fmt.Println("rename CDS volume success")
}
修改磁盘属性
可以使用以下代码修改指定磁盘名称、描述信息:
args := &api.ModifyCSDVolumeArgs{
CdsName: "aaa",
Desc: "desc",
}
err := client.ModifyCDSVolume(volumeId, args)
if err != nil {
fmt.Println("modify CDS volume failed: ", err)
} else {
fmt.Println("modify CDS volume success")
}
磁盘计费变更
可以使用以下代码变更磁盘计费方式,仅支持后付费转预付费、预付费转后付费两种方式。变更为预付费需要指定购买时长。
args := &api.ModifyChargeTypeCSDVolumeArgs{
Billing: &api.Billing{
PaymentTiming: api.PaymentTimingPrePaid,
Reservation: &api.Reservation{
ReservationLength: 1,
ReservationTimeUnit: "month",
}
}
}
err := client.ModifyChargeTypeCDSVolume(volumeId, args)
if err != nil {
fmt.Println("modify CDS volume charge type failed:", err)
} else {
fmt.Println("modify CDS volume charge type success")
}
磁盘开通自动续费
通过以下代码可以开通磁盘自动续费
// 设置要开通自动续费的磁盘id
volumeId := "your-volume-id"
// 设置按月付费或者按年付费 月是"month",年是"year"
renewTimeUnit := "your-renew-time-unit"
// 设置自动续费的时间 按月是1-9 按年是 1-3
renewTime := 3
args := &api.AutoRenewCDSVolumeArgs{
VolumeId: volumeId,
RenewTimeUnit: renewTimeUnit,
RenewTime: renewTime,
}
if err := bccClient.AutoRenewCDSVolume(args); err != nil {
fmt.Println("Auto renew cds volume failed: ", err)
} else {
fmt.Println("Auto renew cds volume success")
}
- 注意数据盘才能进行自动续费操作
- 注意过期状态磁盘不能进行自动续费操作
- 异步接口,可通过查询磁盘详情接口查询磁盘到期时间
磁盘取消自动续费
通过以下代码可以取消磁盘自动续费
// 设置要取消自动续费的磁盘id
volumeId := "your-volume-id"
args := &api.CancelAutoRenewCDSVolumeArgs{
VolumeId: volumeId,
}
if err := bccClient.CancelAutoRenewCDSVolume(args); err != nil {
fmt.Println("Cancel auto renew cds volume failed: ", err)
} else {
fmt.Println("Cancel auto renew cds volume success")
}
- 注意数据盘才能取消进行自动续费操作
- 异步接口,可通过查询磁盘详情接口查询磁盘到期时间
磁盘扩容
使用以下代码可以对磁盘进行扩大容量操作:
args := &api.ResizeCSDVolumeArgs{
// 磁盘容量GB
NewCdsSizeInGB int `json:"newCdsSizeInGB"`
// 磁盘类型
NewVolumeType StorageType `json:"newVolumeType"`
}
err := client.ResizeCDSVolume(volumeId, args)
if err != nil {
fmt.Println("resize CDS volume failed:", err)
} else {
fmt.Println("resize CDS volume success")
}
提示:
- 磁盘只能进行扩大容量,不支持缩小容量。
- 只有Available状态的磁盘,才能进行扩容操作
- 磁盘扩容是一个异步接口,可通过查询磁盘详情接口查询磁盘扩容状态。
回滚磁盘
可以使用指定磁盘自身的快照回滚磁盘内容,使用以下代码可以对磁盘进行回滚:
args := &api.RollbackCSDVolumeArgs{
SnapshotId: snapshotId
}
err := client.RollbackCDSVolume(volumeId, args)
if err != nil {
fmt.Println("rollback CDS volume failed:", err)
} else {
fmt.Println("rollback CDS volume success")
}
提示:
- 磁盘状态必须为 Available 才可以执行回滚磁盘操作。
- 指定快照id必须是由该磁盘id创建的快照。
- 若是回滚系统盘,实例状态必须为 Running 或 Stopped 才可以执行此操作。
- 回滚系统盘快照,自本次快照以来的系统盘数据将全部丢失,不可恢复。
磁盘续费
对磁盘的续费操作,可以延长过期时长,以下代码可以对磁盘进行续费:
args := &api.PurchaseReservedCSDVolumeArgs{
Billing: &api.Billing{
PaymentTiming: api.PaymentTimingPrePaid,
Reservation: &api.Reservation{
ReservationLength: 1,
ReservationTimeUnit: "month",
}
}
}
err := client.PurchaseReservedCDSVolume(volumeId, args)
if err != nil {
fmt.Println("purchase reserve CDS volume failed:", err)
} else {
fmt.Println("purchase reserve CDS volume success")
}
释放CDS磁盘(新)
如下代码可以释放一个CDS磁盘及相关联的快照
args := &api.DeleteCDSVolumeArgs{
// 删除与磁盘关联的手动快照
ManualSnapshot: "on",
// 删除与磁盘关联的自动快照
AutoSnapshot: "on",
}
err := client.DeleteCDSVolumeNew(volumeId, args)
if err != nil {
fmt.Println("create instance failed:", err)
} else {
fmt.Println("create instance ", )
}
提示:
- 该接口用于释放未挂载的CDS磁盘,系统盘不能释放。
- 与老接口功能上的区别在于,可以控制是否删除与磁盘关联的快照。
查询可用区的磁盘信息
使用以下代码可以查询指定可用区的磁盘信息
// 设置你要操作的zoneName
zoneName := "cn-bj-a"
if res, err := bccClient.GetAvailableDiskInfo(zoneName); err != nil {
fmt.Println("Get the specific zone flavor failed: ", err)
} else {
fmt.Println("Get the specific zone flavor success, result: ", res)
}
磁盘绑定标签
使用以下代码可以给指定磁盘绑定标签
tagArgs := &api.TagVolumeArgs{
ChangeTags: []api.Tag{
{
TagKey: "go-SDK-Tag-Key3",
TagValue: "go_SDK-Tag-Value2",
},
},
}
BCC_CLIENT.TagVolume("v-SKy***", tagArgs)
磁盘解绑标签
使用以下代码可以给指定磁盘绑定标签
tagArgs := &api.TagVolumeArgs{
ChangeTags: []api.Tag{
{
TagKey: "go-SDK-Tag-Key3",
TagValue: "go_SDK-Tag-Value2",
},
},
}
BCC_CLIENT.UntagVolume("v-Crt***", tagArgs)