磁盘
更新时间:2024-07-02
创建CDS磁盘
支持新建CDS云磁盘或者从CDS数据盘快照创建CDS磁盘,参考以下代码可以创建CDS磁盘:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
args := &api.CreateCDSVolumeArgs{
PurchaseCount: 2, // 购买数量
CdsSizeInGB: 5, // 磁盘大小
StorageType: api.StorageTypeHdd, // 存储类型
ChargeType: api.PaymentTimingPostPaid, // 付费方式
ZoneName: "cn-bj-c", // 可用区
Name: "test-create-cds", // 磁盘名称
Description: "test-desc", // 磁盘描述
Tags:[]model.TagModel{ // 绑定标签
{
// 标签key
TagKey: "Key-***",
// 标签value
TagValue: "Value***",
},
},
}
result, err := bccClient.CreateCDSVolume(args)
if err != nil {
fmt.Println("create CDS volume failed:", err)
} else {
fmt.Println("create CDS volume success: ", result)
}
}
提示:
查询磁盘列表
以下代码可以查询所有的磁盘列表,支持分页查询以及通过云磁盘所挂载的BCC实例ID进行过滤筛选:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 磁盘列表查询参数
queryArgs := &api.ListCDSVolumeArgs{
Marker: "v-3uIJ****", // 起始磁盘ID
MaxKeys: 10, // 返回结果的最大数量
InstanceId: "i-cVh8****", // 磁盘挂载的实例ID
ZoneName: "cn-bj-a", // 可用区
ClusterId: "DC-rWKx****", // 专属集群ID
}
res, err := bccClient.ListCDSVolume(queryArgs)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(res)
}
}
查询磁盘详情
通过磁盘ID可以获取对应磁盘的详细信息,以下代码可以查询磁盘详情:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 获取指定CDS卷的详细信息
res, err := bccClient.GetCDSVolumeDetail("v-3uIJ****") // 指定CDS磁盘ID
if err != nil {
fmt.Println(err)
} else {
fmt.Println(res)
}
}
挂载CDS磁盘
可以将未挂载的磁盘挂载在对应的BCC实例下,以下代码将一个CDS挂载在对应的BCC实例下:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
args := &api.AttachVolumeArgs{
// 设置要挂载的实例ID
InstanceId: "i-***",
}
result, err := bccClient.AttachCDSVolume(
// 设置要挂载的磁盘ID
"v-***",
args)
fmt.Println(result)
fmt.Println(err)
}
提示:
- CDS磁盘需要挂载在与其处在相同zone下的BCC实例上,否则将返回403错误。
- 只有磁盘状态为 Available 且实例状态为 Running 或 Stopped 时才允许挂载,否则调用此接口将返回 409 错误。
卸载CDS磁盘
可以将已挂载的磁盘从对应的BCC虚机上卸载下来,以下代码卸载CDS磁盘:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "http://bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
args := &api.DetachVolumeArgs{
// 设置要挂载的实例ID
InstanceId: "i-***",
}
err := bccClient.DetachCDSVolume(
// 设置要挂载的磁盘ID
"v-***",
args)
fmt.Println(err)
}
提示:
- 只有实例状态为 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)
提示:
- 该接口用于释放未挂载的CDS磁盘,系统盘不能释放。
- 用户可指定是否删除磁盘关联的快照,缺省情况下,该磁盘的所有快照将保留,但会删除与磁盘的关联关系。
- 用户可以指定是否将磁盘放入回收站
- 只有磁盘状态为 Available 或 Expired 或 Error 时才可以执行此操作,否则将提示 409 错误。
- 如果 volumeId 的磁盘不存在,将提示 404 错误 使用以下代码可以释放磁盘:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 磁盘ID
volumeId := "v-***"
args := &api.DeleteCDSVolumeArgs{
// 是否删除磁盘关联的自动快照
AutoSnapshot: "on",
// 是否删除磁盘关联的手动快照
ManualSnapshot: "on",
// 是否将磁盘回收至回收站,为off时直接释放,不进入回收站
Recycle: "off",
}
// 请求释放磁盘
err := bccClient.DeleteCDSVolumeNew(volumeId, args)
fmt.Println(err)
}
磁盘重命名
以下代码可以给一个CDS磁盘重命名:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
volumeId := "" // 待重命名的磁盘ID
args := &api.RenameCSDVolumeArgs{
Name: "testVolume", // 新的磁盘名称
}
err := bccClient.RenameCDSVolume(volumeId, args)
if err != nil {
fmt.Println("rename CDS volume failed", err)
} else {
fmt.Println("rename CDS volume success")
}
}
修改磁盘属性
可以使用以下代码修改指定磁盘名称、描述信息:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
args := &api.ModifyCSDVolumeArgs{
CdsName: "name", // 待修改的CDS名称
Desc: "desc", // 修改后的CDS描述
}
volumeId := "v-vG0z****" // 磁盘ID
err := bccClient.ModifyCDSVolume(volumeId, args)
if err != nil {
fmt.Println("modify CDS volume failed: ", err)
} else {
fmt.Println("modify CDS volume success")
}
}
磁盘计费变更
可以使用以下代码变更磁盘计费方式,仅支持按量付费(后付费)转包年包月(预付费)、包年包月(预付费)转按量付费(后付费)两种方式。变更为包年包月(预付费)需要指定购买时长。
- 使用以下代码可以完成将包年包月(预付费)磁盘计费变更为按量付费(后付费)。
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 磁盘ID
volumeId := "v-***"
args := &api.ModifyChargeTypeCSDVolumeArgs{
Billing: &api.Billing{
// 后付费标志, 可不填
PaymentTiming: api.PaymentTimingPostPaid,
},
}
// 请求将预付费磁盘变更为后付费
err := bccClient.ModifyChargeTypeCDSVolume(volumeId, args)
fmt.Println(err)
}
- 使用以下代码可以完成将按量付费(后付费)磁盘变更为包年包月(预付费):
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 磁盘ID
volumeId := "v-***"
args := &api.ModifyChargeTypeCSDVolumeArgs{
Billing: &api.Billing{
// 预付费标志, 可不填
PaymentTiming: api.PaymentTimingPrePaid,
Reservation: &api.Reservation{
// 预留时长,预留时长单位为month,取值范围[1,9]
ReservationLength: 1,
// 预留时长单位, 当前仅支持month,可不填
ReservationTimeUnit: "month",
},
},
}
// 请求将后付费磁盘变更为预付费
err := bccClient.ModifyChargeTypeCDSVolume(volumeId, args)
fmt.Println(err)
}
磁盘开通自动续费
通过以下代码可以开通磁盘自动续费:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
volumeId := "v-***"
renewTimeUnit := "month"
// 设置自动续费的时间 按月是1-9 按年是 1-3
renewTime := 4
args := &api.AutoRenewCDSVolumeArgs{
// 磁盘ID
VolumeId: volumeId,
// 续费时间单位, 当前支持取值为:month
RenewTimeUnit: renewTimeUnit,
// 续费时间, 以month为单位续费时支持取值为:1-9
RenewTime: renewTime,
}
err := bccClient.AutoRenewCDSVolume(args)
fmt.Println(err)
}
- 注意数据盘才能进行自动续费操作。
- 注意过期状态磁盘不能进行自动续费操作。
- 异步接口,可通过查询磁盘详情接口查询磁盘到期时间。
磁盘取消自动续费
通过以下代码可以取消磁盘自动续费:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
volumeId := "v-***"
args := &api.CancelAutoRenewCDSVolumeArgs{
// 磁盘ID
VolumeId: volumeId,
}
err := bccClient.CancelAutoRenewCDSVolume(args)
fmt.Println(err)
}
- 注意数据盘才能取消进行自动续费操作。
- 异步接口,可通过查询磁盘详情接口查询磁盘到期时间。
磁盘扩容
使用以下代码可以对磁盘进行扩大容量操作:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 磁盘ID
volumeId := "v-***"
// 请求扩容参数
args := &api.ResizeCSDVolumeArgs{
// 扩容大小,单位为GB
NewCdsSizeInGB: 60,
// 扩容类型
NewVolumeType: api.StorageTypeEnhancedPl1,
}
// 请求扩容cds盘,变更磁盘类型和大小
err := bccClient.ResizeCDSVolume(volumeId, args)
fmt.Println(err)
}
提示:
- 磁盘只能进行扩大容量,不支持缩小容量。
- 只有Available状态的磁盘,才能进行扩容操作
- 磁盘扩容是一个异步接口,可通过查询磁盘详情接口查询磁盘扩容状态。
回滚磁盘
可以使用指定磁盘自身的快照回滚磁盘内容,使用以下代码可以对磁盘进行回滚:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
volumeId := "v-zBms****" // 磁盘ID
args := &api.RollbackCSDVolumeArgs{
SnapshotId: "s-HkbJ****", // 快照ID
}
err := bccClient.RollbackCDSVolume(volumeId, args)
if err != nil {
fmt.Println(err)
}
}
提示:
- 磁盘状态必须为 Available 才可以执行回滚磁盘操作。
- 指定快照id必须是由该磁盘id创建的快照。
- 若是回滚系统盘,实例状态必须为 Running 或 Stopped 才可以执行此操作。
- 回滚系统盘快照,自本次快照以来的系统盘数据将全部丢失,不可恢复。
磁盘续费
对磁盘的续费操作,可以延长过期时长,以下代码可以对磁盘进行续费:
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 待变配的实例配置参数
args := &api.PurchaseReservedCSDVolumeArgs{
Billing: &api.Billing{
PaymentTiming: api.PaymentTimingPrePaid,
Reservation: &api.Reservation{
ReservationLength: 1, // 续费时长
ReservationTimeUnit: "month", // 续费时长单位
},
},
}
volumeId := "v-dj5Q****" // 磁盘ID
err := bccClient.PurchaseReservedCDSVolume(volumeId, args)
if err != nil {
fmt.Println("purchase reserve CDS volume failed:", err)
} else {
fmt.Println("purchase reserve CDS volume success")
}
}
释放CDS磁盘(新)
如下代码可以释放一个CDS磁盘及相关联的快照,并指定是否进入回收站
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 磁盘ID
volumeId := "v-***"
args := &api.DeleteCDSVolumeArgs{
// 是否删除磁盘关联的自动快照
AutoSnapshot: "on",
// 是否删除磁盘关联的手动快照
ManualSnapshot: "on",
// 是否将磁盘回收至回收站,为off时直接释放,不进入回收站
Recycle: "off",
}
// 请求释放磁盘
err := bccClient.DeleteCDSVolumeNew(volumeId, args)
fmt.Println(err)
}
提示:
- 该接口用于释放未挂载的CDS磁盘,系统盘不能释放。
- 与老接口功能上的区别在于,可以控制是否删除与磁盘关联的快照。
查询可用区可购买的磁盘信息
使用以下代码可以查询指定可用区可购买的磁盘信息
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 可用区名称;当传入zoneName为空串或为非法zone时,会返回全部可用区的可购买磁盘信息。
zoneName := "cn-bj-d"
// 请求查询可用区下可购买磁盘信息
result, err := bccClient.GetAvailableDiskInfo(zoneName)
fmt.Println(err)
fmt.Println(result)
}
磁盘绑定标签
使用以下代码可以给指定磁盘绑定标签
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 磁盘ID
volumeId := "v-***"
tagArgs := &api.TagVolumeArgs{
// 是否为关联资源绑定标签
RelationTag: false,
ChangeTags: []api.Tag{
{
// 标签key
TagKey: "Key-***",
// 标签value
TagValue: "Value***",
},
{
// 标签key
TagKey: "Key-***",
// 标签value
TagValue: "Value***",
},
},
}
// 请求为磁盘绑定标签
err := bccClient.TagVolume(volumeId, tagArgs)
fmt.Println(err)
}
磁盘解绑标签
使用以下代码可以给指定磁盘绑定标签
package main
import (
"fmt"
"github.com/baidubce/bce-sdk-go/services/bcc"
"github.com/baidubce/bce-sdk-go/services/bcc/api"
)
func main() {
// 设置您的ak、sk和要访问的endpoint
ak := "ak"
sk := "sk"
endpoint := "bcc.bj.baidubce.com"
// 创建bcc client
bccClient, _ := bcc.NewClient(ak, sk, endpoint)
// 磁盘ID
volumeId := "v-***"
tagArgs := &api.TagVolumeArgs{
// 是否为关联资源解绑标签
RelationTag: false,
ChangeTags: []api.Tag{
{
// 标签key
TagKey: "Key-***",
// 标签value
TagValue: "Value***",
},
{
// 标签key
TagKey: "Key-***",
// 标签value
TagValue: "Value***",
},
},
}
// 请求为磁盘解绑标签
err := bccClient.UntagVolume(volumeId, tagArgs)
fmt.Println(err)
}