镜像
更新时间:2023-08-01
创建自定义镜像
- 该接口用于创建自定义镜像,默认配额20个每账号,创建后的镜像可用于创建实例。
- 支持通过实例创建和通过快照创建两种方式。
- 当通过实例创建时,只有 Running 或 Stopped 状态的实例才可以执行成功,否则会提示 409 错误。
- 仅限通过系统盘快照创建自定义镜像。
- 当通过快照创建时,只有 Available 状态的快照才可以执行成功,否则会提示 409 错误
// 待创建的自定义镜像名称,支持大小写字母、数字、中文以及-_ /.特殊字符,必须以字母开头,长度1-65。
imageName := "your-imageName"
// 当从实例创建镜像时,此参数是指用于创建镜像的实例ID。可选参数,与 snapshotId 不同时存在,同时存在时只取instanceId
instanceId := "your-instanceId"
// 当从快照创建镜像时,此参数是指用于创建镜像的快照ID。可选参数,与 instanceId 不同时存在,同时存在时只取instanceId
snapshotId := "your-snapshotId"
// 是否关联CDS,默认为false
relateCds := true or false
args := &api.CreateImageArgs{
ImageName: imageName,
InstanceId: instanceId,
SnapshotId: snapshotId,
RelateCds: relateCds,
}
if res, err := bccClient.CreateImage(args); err != nil {
fmt.Println("create image failed: ", err)
} else {
fmt.Println("create image success:", res)
}
注意,创建自定义镜像,默认配额20个每账号。
查询镜像列表
- 使用以下代码可以查询有权限的镜像列表。
- 查询的镜像信息中包括系统镜像、自定义镜像和服务集成镜像。
- 支持按 imageType 来过滤查询,此参数非必需,缺省为 All,即查询所有类型的镜像。
- 支持按 imageName 来过滤查询自定义镜像,返回名称中包含该字符串的镜像。此参数非必需,设定ImageName时,必须同时指定ImageType为'Custom'。
// 批量获取列表的查询的起始位置,是一个由系统生成的字符串,可选参数
marker := "your-marker"
// 每页包含的最大数量,最大数量通常不超过1000。缺省值为1000,可选参数
maxKeys := your-maxKeys
// 指定要查询何种类型的镜像,包括All(所有),System(系统镜像/公共镜像),Custom(自定义镜像),Integration(服务集成镜像),Sharing(共享镜像),GpuBccSystem(GPU专用公共镜像),GpuBccCustom(GPU专用自定义镜像),FpgaBccSystem(FPGA专用公共镜像),FpgaBccCustom(FPGA专用自定义镜像),缺省值为All
imageType := "your-imageType"
args := &api.ListImageArgs{
Marker: marker,
MaxKeys: maxKeys,
ImageType: imageType,
}
// 指定过滤查询的自定义镜像名称
imageName := "your-imageName"
args := &api.ListImageArgs{
Marker: marker,
MaxKeys: maxKeys,
ImageType: "Custom",
ImageName: imageName,
}
if res, err := bccClient.ListImage(args); err != nil {
fmt.Println("get image list failed: ", err)
} else {
fmt.Println("get image list success,res: ", res)
}
具体的镜像类型可详细参考BCC API文档查询镜像列表
查询镜像详情
以下代码可以查询镜像详细信息:
result, err := client.GetImageDetail(imageId)
if err != nil {
fmt.Println("get image detail failed:", err)
} else {
fmt.Println("get image detail success: ", result.Image)
}
删除自定义镜像
- 该接口用于删除用户自己的指定的自定义镜像,仅限自定义镜像,系统镜像和服务集成镜像不能删除。
- imageId 所指定的镜像不存在,提示404错误。
- 镜像删除后无法恢复,不能再用于创建、重置实例。
以下代码可以删除一个自定义镜像:
err := client.DeleteImage(imageId)
if err != nil {
fmt.Println("delete image failed:", err)
} else {
fmt.Println("delete image success")
}
跨区域复制自定义镜像
- 用于用户跨区域复制自定义镜像,仅限自定义镜像,系统镜像和服务集成镜像不能复制
- regions如北京"bj",广州"gz",苏州"su",可多选:
args := &api.RemoteCopyImageArgs{
Name: "test2",
DestRegion: []string{"gz"},
}
err := client.RemoteCopyImage(imageId, args)
if err != nil {
fmt.Println("remote copy image failed:", err)
} else {
fmt.Println("remote copy image success")
}
跨区域复制自定义镜像并返回目的region的镜像镜像id
- 用于用户跨区域复制自定义镜像,仅限自定义镜像,系统镜像和服务集成镜像不能复制
- regions如北京"bj",广州"gz",苏州"su",可多选:
args := &api.RemoteCopyImageArgs{
Name: "test2",
DestRegion: []string{"gz"},
}
result, err := client.RemoteCopyImageReturnImageIds(imageId, args)
if err != nil {
fmt.Println("remote copy image failed:", err)
} else {
fmt.Println("remote copy image success")
}
取消跨区域复制自定义镜像
用于取消跨区域复制自定义镜像,仅限自定义镜像,系统镜像和服务集成镜像不能复制:
err := client.CancelRemoteCopyImage(imageId)
if err != nil {
fmt.Println("cancel remote copy image failed:", err)
} else {
fmt.Println("cancel remote copy image success")
}
共享自定义镜像
- 该接口用于共享用户自己的指定的自定义镜像,仅限自定义镜像,系统镜像和服务集成镜像不能共享。
- imageId 所指定的镜像不存在,提示404错误。
- 镜像共享后,被共享的用户可以使用此镜像创建、重置实例。
- 请求参数中的account和accountId均为可选参数,但不能全部为空,当两个参数同时出现时,服务端会自动去重。
// 待共享的用户id
accountId := "your-accountId"
//待共享的用户名
account := "your-account"
// 待共享的镜像ID
imageId := "your-imageId"
args := &api.SharedUser{
AccountId: accountId,
Account: account,
}
if err := bccClient.ShareImage(imageId,args); err != nil {
fmt.Println("ShareImage failed: ", err)
} else {
fmt.Println("ShareImage success")
}
取消共享自定义镜像
- 该接口用于取消共享用户自己的指定的自定义镜像,仅限自定义镜像,系统镜像和服务集成镜像不能共享。
- imageId 所指定的镜像不存在,提示404错误。
- 镜像取消共享后,被取消共享的用户不能再使用此镜像创建、重置实例。
- 请求参数中的account和accountId均为可选参数,但不能全部为空,当两个参数同时出现时,服务端会自动去重。
// 待共享的用户id
accountId := "your-accountId"
//待共享的用户名
account := "your-account"
// 待共享的镜像ID
imageId := "your-imageId"
args := &api.SharedUser{
AccountId: accountId,
Account: account,
}
if err := bccClient.UnShareImage(imageId,args); err != nil {
fmt.Println("UnShareImage failed: ", err)
} else {
fmt.Println("UnShareImage success")
}
查询镜像已共享用户列表
- mageId 所指定的镜像不存在,提示404错误。 用于查询镜像已共享的用户列表:
result, err := client.GetImageSharedUser(imageId)
if err != nil {
fmt.Println("get image shared user list failed: ", err)
} else {
fmt.Println("get image shared user list success: ", result)
}
根据实例ID批量查询OS信息
如下代码可以根据实例的ID来查询相应OS的信息
args := &api.GetImageOsArgs{
InstanceIds: []string{instanceId},
}
result, err := client.GetImageOS(args)
if err != nil {
fmt.Println("get image os failed:", err)
} else {
fmt.Println("get image os success: ", result)
}
镜像链绑定标签
使用以下代码可以给指定镜像绑定标签
args := &api.BindTagsRequest{
ChangeTags: []model.TagModel{
{
TagKey: "TagKey",
TagValue: "TagValue",
},
},
}
BCC_CLIENT.BindImageToTags("your-image-id", args)
镜像解绑标签
使用以下代码可以给指定镜像绑定标签
args := &api.BindTagsRequest{
ChangeTags: []model.TagModel{
{
TagKey: "go-SDK-Tag-Key3",
TagValue: "go_SDK-Tag-Value2",
},
},
}
BCC_CLIENT.UnBindImageToTags("your-image-id", args)
导入镜像
使用以下代码可以导入个镜像
args := &api.ImportCustomImageArgs{
OsName: "Centos",
OsArch: "32",
OsType: "linux",
OsVersion: "6.5",
Name: "import_image_test",
BosURL: "http://cloud.baidu.com/testurl",
}
result, _ := BCC_CLIENT.ImportCustomImage(args)
fmt.Println(result)