4. 开始使用
4.1 导入依赖模块
Copied!
import (
"fmt"
"log"
coreConfig "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/config"
evsModel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/evs/v2/model"
evs "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/evs/v2"
coreBasic "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
)
4.2 初始化认证信息
Copied!
credentials := coreBasic.NewCredentialsBuilder().WithAk("${ak}").WithSk("${sk}").WithProjectId("${project_id}").Build()
相关参数说明如下所示:
- ${ak}:华为云账号Access Key。
- ${sk}:华为云账号Secret Access Key。
- ${project_id}:EVS服务对应区域的项目ID。
4.3 初始化EVS服务的客户端
Copied!
config := coreConfig.DefaultHttpConfig()
config.WithIgnoreSSLVerification(true)
evsClient := *evs.NewEvsClient(evs.EvsClientBuilder().
WithCredential(credentials).
WithEndpoint("${evs_endpoint}").
WithHttpConfig(config).
Build())
相关参数说明如下所示:
Credential: 用户认证信息,见4.2的初始化认证信息
Endpoint: EVS服务域名,当前EVS服务支持的region信息见 地区和终端节点信息
HttpConfig: 客户端属性
4.4 配置请求参数
以创建包周期云硬盘为例:
Copied!
createVolumeRequestBodyVolumeParam := a.GenerateVolumeOption()
requestBody := evsModel.CreateVolumeRequestBody{
Volume: &createVolumeRequestBodyVolumeParam,
}
request := evsModel.CreateVolumeRequest{
Body: &requestBody,
}
相关demo见 5. SDK demo代码解析
4.5 发送请求
以创建包周期云硬盘为例:
Copied!
response, err := evsClient.CreateVolume(&request)
5. SDK demo代码解析
5.1 创建按需云硬盘接口
demo请见Application.createDemandVolume()方法
5.1.1 请求参数说明
Copied!
func (a *Application) GenerateVolumeOption() evsModel.CreateVolumeOption {
createVolumeOptionVolumeTypeParam := evsModel.GetCreateVolumeOptionVolumeTypeEnum().SSD
return evsModel.CreateVolumeOption{
AvailabilityZone: "${availabilityZone}",
VolumeType: createVolumeOptionVolumeTypeParam,
Size: 40,
}
}
createVolumeRequestBodyVolumeParam := a.GenerateVolumeOption()
requestBody := evsModel.CreateVolumeRequestBody{
Volume: &createVolumeRequestBodyVolumeParam,
}
request := evsModel.CreateVolumeRequest{
Body: &requestBody,
}
5.1.2 发送请求
Copied!
response, err := evsClient.CreateVolume(&request)
5.1.3 接口及参数说明
请见 创建云硬盘接口
5.2 创建包周期云硬盘
创建包周期云硬盘,除了需要传云硬盘相关的参数,还需要传计费相关的参数,具体demo见Application.createVolume()方法
5.2.1 构造请求参数
Copied!
func (a *Application) GenerateBssParam() evsModel.BssParamForCreateVolume {
bssParamForCreateVolumeChargingModeParam := evsModel.GetBssParamForCreateVolumeChargingModeEnum().PRE_PAID
bssParamForCreateVolumeIsAutoPayParam := evsModel.GetBssParamForCreateVolumeIsAutoPayEnum().TRUE
bssParamForCreateVolumeIsAutoRenewParam := evsModel.GetBssParamForCreateVolumeIsAutoRenewEnum().FALSE
bssParamForCreateVolumePeriodNumParam := int32(1)
bssParamForCreateVolumePeriodTypeParam := evsModel.GetBssParamForCreateVolumePeriodTypeEnum().MONTH
return evsModel.BssParamForCreateVolume{
ChargingMode: &bssParamForCreateVolumeChargingModeParam,
IsAutoPay: &bssParamForCreateVolumeIsAutoPayParam,
IsAutoRenew: &bssParamForCreateVolumeIsAutoRenewParam,
PeriodNum: &bssParamForCreateVolumePeriodNumParam,
PeriodType: &bssParamForCreateVolumePeriodTypeParam,
}
}
createVolumeRequestBodyVolumeParam := a.GenerateVolumeOption()
requestBody := evsModel.CreateVolumeRequestBody{
Volume: &createVolumeRequestBodyVolumeParam,
}
request := evsModel.CreateVolumeRequest{
Body: &requestBody,
}
5.2.2 发送请求
Copied!
response, err := evsClient.CreateVolume(&request)
5.2.3 接口及参数说明
请见 创建云硬盘接口
5.3 通过数据源创建云硬盘
EVS服务除了提供创建空白云硬盘的能力,也提供了通过数据源创建云硬盘的能力。EVS服务支持通过备份,镜像和快照三种数据源来创建云硬盘。具体方法见Application.createVolumeByDataSource()方法
注意使用快照创建云硬盘,云硬盘类型需与快照源云硬盘保持一致,云硬盘大小也需要大于数据源的云硬盘大小。
5.3.1 构造请求参数
Copied!
volumeOption := a.GenerateVolumeOption()
createVolumeSchedulerHints := evsModel.CreateVolumeSchedulerHints{}
createVolumeSchedulerHintsDedicatedStorageIdParam2 := "${dss_id}"
createVolumeSchedulerHints.DedicatedStorageId = &createVolumeSchedulerHintsDedicatedStorageIdParam2
requestBody := evsModel.CreateVolumeRequestBody{
Volume: &volumeOption,
}
request := evsModel.CreateVolumeRequest{
Body: &requestBody,
}
5.3.2 发送请求
Copied!
response, err := evsClient.CreateVolume(&request)
5.3.3 接口及参数说明
请见 创建云硬盘接口
5.4 扩容云硬盘
具体demo见Application.extendVolume()方法
5.4.1 构造请求参数
Copied!
extend := evsModel.OsExtend{
NewSize: 50,
}
bssParamForResizeVolumeIsAutoPayParam := evsModel.GetBssParamForResizeVolumeIsAutoPayEnum().FALSE
bssParam := evsModel.BssParamForResizeVolume{
IsAutoPay: &bssParamForResizeVolumeIsAutoPayParam,
}
requestBody := evsModel.ResizeVolumeRequestBody{
OsExtend: &extend,
BssParam: &bssParam,
}
request := evsModel.ResizeVolumeRequest{
Body: &requestBody,
VolumeId: "${volume_id}",
}
5.4.2 发送请求
Copied!
response, err := evsClient.ResizeVolume(&request)
5.4.3 接口及参数说明
请见 扩容云硬盘接口
5.5 查询单个云硬盘详情
具体demo见Application.getVolume()方法
5.5.1 构造请求参数
Copied!
request := evsModel.ShowVolumeRequest{
VolumeId: "${volume_id}",
}
5.5.2 发送请求
Copied!
response, err := evsClient.ShowVolume(&request)
5.5.3 接口及参数说明
请见 查询单个云硬盘详情接口
5.6 查询所有云硬盘详情
具体demo见Application.listVolume()方法
5.6.1 构造请求参数
Copied!
request := evsModel.ListVolumesRequest{}
.withMarker("${volume_id}")
.withLimit(5);
.withOffset(0);
.withSortKey("")
.withAvailabilityZone("${availabilityZone}");
.withDedicatedStorageId("${dss_id}")
.withDedicatedStorageName("${dss_name}")
.withEnterpriseProjectId("${enterprise_project_id}")
.withId("${volume_id}")
.withIds("${volume_ids}")
.withMetadata("${metadata}")
.withMultiattach(true);
.withName("${name}");
.withServerId("${server_id}");
.withServiceType("${service_type}")
.withStatus("${status}")
.withVolumeTypeId(CreateVolumeOption.VolumeTypeEnum.SSD);
5.6.2 发送请求
Copied!
response, err := evsClient.ListVolumes(&request)
5.6.3 接口及参数说明
请见 查询所有云硬盘详情接口
5.7 删除云硬盘
具体demo见Application.deleteVolume()方法
5.7.1 构造请求参数
Copied!
request := evsModel.DeleteVolumeRequest{
VolumeId: "${volume_id}",
}
5.7.2 发送请求
Copied!
response, err := evsClient.DeleteVolume(&request)
5.7.3 接口及参数说明
请见 删除云硬盘接口
EVS服务云硬盘管理示例
1. 简介
华为云提供了EVS服务端SDK,您可以直接集成服务端SDK来调用EVS的相关API,从而实现对EVS服务的快速操作。该示例展示了如何通过go版SDK对云硬盘进行管理,其中包括增(创建云硬盘),删(删除云硬盘),改(扩容云硬盘),查(查询云硬盘)。
2. 开发前准备
3. 安装SDK
您可以通过加入相应的依赖项获取和安装SDK。
4. 开始使用
4.1 导入依赖模块
import ( "fmt" "log" coreConfig "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/config" evsModel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/evs/v2/model" evs "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/evs/v2" coreBasic "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" )
4.2 初始化认证信息
// 初始化认证信息 credentials := coreBasic.NewCredentialsBuilder().WithAk("${ak}").WithSk("${sk}").WithProjectId("${project_id}").Build()
相关参数说明如下所示:
4.3 初始化EVS服务的客户端
// 初始化客户端 config := coreConfig.DefaultHttpConfig() config.WithIgnoreSSLVerification(true) evsClient := *evs.NewEvsClient(evs.EvsClientBuilder(). WithCredential(credentials). WithEndpoint("${evs_endpoint}"). WithHttpConfig(config). Build())
相关参数说明如下所示:
Credential: 用户认证信息,见4.2的初始化认证信息
Endpoint: EVS服务域名,当前EVS服务支持的region信息见 地区和终端节点信息
HttpConfig: 客户端属性
4.4 配置请求参数
以创建包周期云硬盘为例:
// 配置请求参数,创建按需云硬盘不需要传计费策略参数BssParamForCreateVolume createVolumeRequestBodyVolumeParam := a.GenerateVolumeOption() requestBody := evsModel.CreateVolumeRequestBody{ Volume: &createVolumeRequestBodyVolumeParam, } // 以下参数为创建云硬盘可选参数,可以根据实际需要进行添加 // .withServerId("${server_id}") ; //虚拟机id,选填参数,指定了该id,会将创建好的云硬盘挂载到该目标主机上 // .withOsSCHHNTSchedulerHints(createVolumeSchedulerHints); request := evsModel.CreateVolumeRequest{ Body: &requestBody, }
相关demo见 5. SDK demo代码解析
4.5 发送请求
以创建包周期云硬盘为例:
5. SDK demo代码解析
5.1 创建按需云硬盘接口
demo请见Application.createDemandVolume()方法
5.1.1 请求参数说明
func (a *Application) GenerateVolumeOption() evsModel.CreateVolumeOption { createVolumeOptionVolumeTypeParam := evsModel.GetCreateVolumeOptionVolumeTypeEnum().SSD return evsModel.CreateVolumeOption{ AvailabilityZone: "${availabilityZone}", VolumeType: createVolumeOptionVolumeTypeParam, Size: 40, } // 以下参数为可选参数,可以根据实际需要进行添加 // .withName("${name}") //云硬盘名称 // .withCount(1) //云硬盘数量 // .withEnterpriseProjectId("${enterpriseProjectId}") //企业项目id // .withMultiattach(false) //是否创建共享盘 // .withTags(new HashMap<String, String>(){{put("tag_key", "tag_value");}}) //云硬盘标签 // .withMetadata(new HashMap<String, String>(){{put("hw:passthrough", "false");}}); //云硬盘元数据 } // 配置请求参数,创建按需云硬盘不需要传计费策略参数BssParamForCreateVolume createVolumeRequestBodyVolumeParam := a.GenerateVolumeOption() requestBody := evsModel.CreateVolumeRequestBody{ Volume: &createVolumeRequestBodyVolumeParam, } // 以下参数为创建云硬盘可选参数,可以根据实际需要进行添加 // .withServerId("${server_id}") ; //虚拟机id,选填参数,指定了该id,会将创建好的云硬盘挂载到该目标主机上 // .withOsSCHHNTSchedulerHints(createVolumeSchedulerHints); request := evsModel.CreateVolumeRequest{ Body: &requestBody, }
5.1.2 发送请求
5.1.3 接口及参数说明
请见 创建云硬盘接口
5.2 创建包周期云硬盘
创建包周期云硬盘,除了需要传云硬盘相关的参数,还需要传计费相关的参数,具体demo见Application.createVolume()方法
5.2.1 构造请求参数
func (a *Application) GenerateBssParam() evsModel.BssParamForCreateVolume { bssParamForCreateVolumeChargingModeParam := evsModel.GetBssParamForCreateVolumeChargingModeEnum().PRE_PAID bssParamForCreateVolumeIsAutoPayParam := evsModel.GetBssParamForCreateVolumeIsAutoPayEnum().TRUE bssParamForCreateVolumeIsAutoRenewParam := evsModel.GetBssParamForCreateVolumeIsAutoRenewEnum().FALSE bssParamForCreateVolumePeriodNumParam := int32(1) bssParamForCreateVolumePeriodTypeParam := evsModel.GetBssParamForCreateVolumePeriodTypeEnum().MONTH return evsModel.BssParamForCreateVolume{ ChargingMode: &bssParamForCreateVolumeChargingModeParam, IsAutoPay: &bssParamForCreateVolumeIsAutoPayParam, IsAutoRenew: &bssParamForCreateVolumeIsAutoRenewParam, PeriodNum: &bssParamForCreateVolumePeriodNumParam, PeriodType: &bssParamForCreateVolumePeriodTypeParam, } } // 配置请求参数,创建按需云硬盘不需要传计费策略参数BssParamForCreateVolume createVolumeRequestBodyVolumeParam := a.GenerateVolumeOption() requestBody := evsModel.CreateVolumeRequestBody{ Volume: &createVolumeRequestBodyVolumeParam, } // 以下参数为创建云硬盘可选参数,可以根据实际需要进行添加 // .withServerId("${server_id}") ; //虚拟机id,选填参数,指定了该id,会将创建好的云硬盘挂载到该目标主机上 // .withOsSCHHNTSchedulerHints(createVolumeSchedulerHints); request := evsModel.CreateVolumeRequest{ Body: &requestBody, }
5.2.2 发送请求
5.2.3 接口及参数说明
请见 创建云硬盘接口
5.3 通过数据源创建云硬盘
EVS服务除了提供创建空白云硬盘的能力,也提供了通过数据源创建云硬盘的能力。EVS服务支持通过备份,镜像和快照三种数据源来创建云硬盘。具体方法见Application.createVolumeByDataSource()方法 注意使用快照创建云硬盘,云硬盘类型需与快照源云硬盘保持一致,云硬盘大小也需要大于数据源的云硬盘大小。
5.3.1 构造请求参数
/// 配置数据源信息, EVS服务支持备份,镜像和快照三种数据源创建云硬盘,只支持使用一种数据源创建云硬盘 volumeOption := a.GenerateVolumeOption() // 配置备份数据源 // volumeOption.setBackupId("${backup_id}"); // 配置镜像数据源 // volumeOption.setImageRef("${image_id}"); // 配置快照数据源 // volumeOption.setSnapshotId("${snapshot_id}"); // 存储池id,选填参数,指定了该id,会将创建在指定的存储池 createVolumeSchedulerHints := evsModel.CreateVolumeSchedulerHints{} createVolumeSchedulerHintsDedicatedStorageIdParam2 := "${dss_id}" createVolumeSchedulerHints.DedicatedStorageId = &createVolumeSchedulerHintsDedicatedStorageIdParam2 requestBody := evsModel.CreateVolumeRequestBody{ Volume: &volumeOption, } // 以下参数为创建云硬盘可选参数,可以根据实际需要进行添加 // .withBssParam(generateBssParam()); //计费策略参数,包周期云硬盘必填 // .withServerId("${server_id}") //虚拟机id,选填参数,指定了该id,会将创建好的云硬盘挂载到该目标主机上 // .withOsSCHHNTSchedulerHints(createVolumeSchedulerHints); request := evsModel.CreateVolumeRequest{ Body: &requestBody, }
5.3.2 发送请求
5.3.3 接口及参数说明
请见 创建云硬盘接口
5.4 扩容云硬盘
具体demo见Application.extendVolume()方法
5.4.1 构造请求参数
// 扩容参数 extend := evsModel.OsExtend{ NewSize: 50, } // 扩容后云硬盘大小 // 计费相关参数 bssParamForResizeVolumeIsAutoPayParam := evsModel.GetBssParamForResizeVolumeIsAutoPayEnum().FALSE bssParam := evsModel.BssParamForResizeVolume{ IsAutoPay: &bssParamForResizeVolumeIsAutoPayParam, } // 创建请求体 requestBody := evsModel.ResizeVolumeRequestBody{ OsExtend: &extend, BssParam: &bssParam, } // 选填参数,该参数只有在云硬盘为包周期的情况下有意义。默认值为false // 创建请求 request := evsModel.ResizeVolumeRequest{ Body: &requestBody, VolumeId: "${volume_id}", } // 进行扩容的云硬盘id
5.4.2 发送请求
5.4.3 接口及参数说明
请见 扩容云硬盘接口
5.5 查询单个云硬盘详情
具体demo见Application.getVolume()方法
5.5.1 构造请求参数
// 创建请求 request := evsModel.ShowVolumeRequest{ VolumeId: "${volume_id}", }
5.5.2 发送请求
5.5.3 接口及参数说明
请见 查询单个云硬盘详情接口
5.6 查询所有云硬盘详情
具体demo见Application.listVolume()方法
5.6.1 构造请求参数
// 创建请求 request := evsModel.ListVolumesRequest{} .withMarker("${volume_id}") // 分页参数,通过云硬盘ID进行分页查询 .withLimit(5); // 通过云硬盘ID进行分页查询 .withOffset(0); // 偏移量 .withSortKey("") // 返回结果按该关键字排序,默认为"created_at" // 下面为过滤参数,根据需要进行填写 .withAvailabilityZone("${availabilityZone}"); .withDedicatedStorageId("${dss_id}") .withDedicatedStorageName("${dss_name}") .withEnterpriseProjectId("${enterprise_project_id}") .withId("${volume_id}") .withIds("${volume_ids}") .withMetadata("${metadata}") .withMultiattach(true); .withName("${name}"); .withServerId("${server_id}"); .withServiceType("${service_type}") .withStatus("${status}") .withVolumeTypeId(CreateVolumeOption.VolumeTypeEnum.SSD);
5.6.2 发送请求
5.6.3 接口及参数说明
请见 查询所有云硬盘详情接口
5.7 删除云硬盘
具体demo见Application.deleteVolume()方法
5.7.1 构造请求参数
// 创建请求 request := evsModel.DeleteVolumeRequest{ VolumeId: "${volume_id}", }
5.7.2 发送请求
5.7.3 接口及参数说明
请见 删除云硬盘接口
6. FAQ
暂无
7. 参考
更多信息请参考 EVS服务文档