示例代码
按照 API版本选择建议, 弹性云服务器所提供的接口分为ECS接口与OpenStack原生接口,推荐使用ECS接口。对于删除弹性云服务器实例的功能,相对OpenStack原生接口,ECS接口支持批量删除,还多了两个选项,分别代表是否同时删除弹性云服务器实例绑定的弹性公网IP和数据盘。本示例程序对两种接口都进行了调用,在用户选择同时删除弹性云服务器实例绑定的弹性公网IP和数据盘时,将调用ECS接口,反之则调用OpenStack原生接口。
Copied!
OSClientAKSK osclient = OSFactory.builderAKSK().credentials(ak, sk, region, projectId, cloud) .authenticate();
Map<String , String> filter = new HashMap<String, String>();
int MAX_ECS=10;
filter.put("limit", String.format("%d", MAX_ECS));
String ecsName = readUserInput("请输入 ECS 名称包含的字符串缩小查询范围,直接回车表示查询所有 ECS:");
if (ecsName.length()>0)
{
System.out.println(String.format("正在查询包含字符串(%s)的 ECS...", ecsName));
filter.put("name", ecsName);
}
else
{
System.out.println("正在查询所有 ECS...");
}
List<? extends Server> serverList = osclient.compute().servers().list(filter);
if (serverList.size() > 0)
{
if (serverList.size() >= MAX_ECS)
{
System.out.println(String.format("查询成功,下面是前 %d 个 ECS", MAX_ECS));
}
else
{
System.out.println(String.format("查询成功,共有 %d 个 ECS", serverList.size()));
}
System.out.println(String.format("%s\t%s\t%s", "序号", "ID", "名称"));
int i=0;
for (Server server : serverList) {
System.out.println(String.format("%d\t%s\t%s", i, server.getId(), server.getName()));
i++;
}
}
else {
System.out.println(String.format("未查询到符合条件的 ECS."));
return;
}
int i=readUserSelection(String.format("请输入要删除 ECS 的序号(0..%d), 无效输入将取消删除操作。", serverList.size()-1),
0, serverList.size()-1);
if (i<0)
{
System.out.println("取消删除");
return;
}
Server server=serverList.get(i);
System.out.println(String.format("正在删除 ECS %s, ID: %s...", server.getName(), server.getId()));
int selection=readUserSelection("请选择: \n0. 只删除 ECS\n1. 删除 ECS 且删除绑定的数据盘和弹性公网IP\n2. 放弃删除", 0, 1);
if (0==selection)
{
ActionResponse repDeleteServer = osclient.compute().servers().delete(server.getId());
if (repDeleteServer.isSuccess())
{
System.out.println("删除成功");
}
else
{
System.out.println(String.format("删除失败: %s", repDeleteServer.getFault()));
}
}
else if (1==selection)
{
ArrayList<String> serverIds = new ArrayList<String>();
serverIds.add(server.getId());
String deleteJobId = osclient.ecs().servers().delete(serverIds, true, true);
if (null != deleteJobId)
{
System.out.println(String.format("删除成功, Id=%s", deleteJobId));
Job job = osclient.ecs().jobs().get(deleteJobId);
if (null == job)
{
System.out.println("获取删除任务信息失败!");
return;
}
System.out.println(String.format("删除任务信息: %s", job));
}
else
{
System.out.println("删除失败");
}
}
运行示例
在命令行下,进入 pom.xml 文件所在目录,运行以下命令将执行 App 类的 main 方法。
Copied!
mvn package
mvn dependency:copy-dependencies -Dmdep.useRepositoryLayout=false
java -cp "target/sdkExample-1.0-SNAPSHOT.jar;target/dependency/*" cn.eaglesoftware.hwcloud.App
运行结果
程序执行过程中,首先会查询环境变量配置的区域下的 ECS, 以列表的形式向用户展现(最多10条,用户可输入 ECS 名称的一部分缩小查询范围),用户输入序号可选择其中的 1 个 ECS, 再次选择是否要删除绑定的数据盘和弹性公网IP后,执行删除操作,并将删除结果输出到控制台。
-----------------------样例----------------------------------------
Copied!
请输入 ECS 名称包含的字符串缩小查询范围,直接回车表示查询所有 ECS:
test
正在查询包含字符串(test)的 ECS...
查询成功,共有 6 个 ECS
序号 ID 名称
0 5e15b1c1-f191-421f-a9f6-72dcf83bcd58 ecs-test-0002
1 22858c35-7da0-4395-8429-ccc724d66ab9 ecs-test-0006
2 3085d0eb-7b7c-4d06-ae13-abd8e375fe93 ecs-test-0003
3 370707e2-86f1-4d7e-86da-3eca915472bc ecs-test-0005
4 6007a24b-2db6-4095-9bfb-c27fddd296d6 ecs-test-0001
5 3aa7f8de-f350-45ff-957a-b433886ac6a9 ecs-test-0004
请输入要删除 ECS 的序号(0..5), 无效输入将取消删除操作。
1
正在删除 ECS ecs-test-0006, ID: 22858c35-7da0-4395-8429-ccc724d66ab9...
请选择:
0. 只删除 ECS
1. 删除 ECS 且删除绑定的数据盘和弹性公网IP
2. 放弃删除
1
删除成功, Id=ff8080817395c20d0174539e00b74c0b
删除任务信息: Job(status=INIT, entities=JobEntities(subJobsTotal=null, subJobs=null), jobId=ff8080817395c20d0174539e00b74c0b, jobType=deleteVMs, beginTime=2020-09-03T10:58:17.909Z, endTime=, errorCode=null, failReason=null, message=null, code=null, subJobsTotal=null, subJobs=null)
版本说明
本示例基于华为云SDK V1.0版本开发,高版本示例正在开发中。
场景介绍
用户通过调用API可删除1个或多个弹性云服务器实例,并可指定是否同时删除弹性云服务器实例绑定的弹性公网IP和数据盘,帮助用户快速管理弹性云服务器实例,提升业务效率。批量删除弹性云服务器实例时,一次最多可以删除1000个。
前提条件
示例代码
按照 API版本选择建议, 弹性云服务器所提供的接口分为ECS接口与OpenStack原生接口,推荐使用ECS接口。对于删除弹性云服务器实例的功能,相对OpenStack原生接口,ECS接口支持批量删除,还多了两个选项,分别代表是否同时删除弹性云服务器实例绑定的弹性公网IP和数据盘。本示例程序对两种接口都进行了调用,在用户选择同时删除弹性云服务器实例绑定的弹性公网IP和数据盘时,将调用ECS接口,反之则调用OpenStack原生接口。
OSClientAKSK osclient = OSFactory.builderAKSK().credentials(ak, sk, region, projectId, cloud) .authenticate(); // 设置查询参数 Map<String , String> filter = new HashMap<String, String>(); int MAX_ECS=10; filter.put("limit", String.format("%d", MAX_ECS)); String ecsName = readUserInput("请输入 ECS 名称包含的字符串缩小查询范围,直接回车表示查询所有 ECS:"); if (ecsName.length()>0) { System.out.println(String.format("正在查询包含字符串(%s)的 ECS...", ecsName)); filter.put("name", ecsName); } else { System.out.println("正在查询所有 ECS..."); } // 调用查询虚拟机列表的接口 List<? extends Server> serverList = osclient.compute().servers().list(filter); if (serverList.size() > 0) { if (serverList.size() >= MAX_ECS) { System.out.println(String.format("查询成功,下面是前 %d 个 ECS", MAX_ECS)); } else { System.out.println(String.format("查询成功,共有 %d 个 ECS", serverList.size())); } System.out.println(String.format("%s\t%s\t%s", "序号", "ID", "名称")); int i=0; for (Server server : serverList) { System.out.println(String.format("%d\t%s\t%s", i, server.getId(), server.getName())); i++; } } else { System.out.println(String.format("未查询到符合条件的 ECS.")); return; } int i=readUserSelection(String.format("请输入要删除 ECS 的序号(0..%d), 无效输入将取消删除操作。", serverList.size()-1), 0, serverList.size()-1); if (i<0) { System.out.println("取消删除"); return; } Server server=serverList.get(i); System.out.println(String.format("正在删除 ECS %s, ID: %s...", server.getName(), server.getId())); int selection=readUserSelection("请选择: \n0. 只删除 ECS\n1. 删除 ECS 且删除绑定的数据盘和弹性公网IP\n2. 放弃删除", 0, 1); // delete server if (0==selection) { // https://github.com/huaweicloud/huaweicloud-sdk-java/blob/master/examples/ecs/ServerDemo.java ActionResponse repDeleteServer = osclient.compute().servers().delete(server.getId()); if (repDeleteServer.isSuccess()) { System.out.println("删除成功"); } else { System.out.println(String.format("删除失败: %s", repDeleteServer.getFault())); } } else if (1==selection) { // https://github.com/huaweicloud/huaweicloud-sdk-java/blob/master/examples/ecs/CloudServerV1.java ArrayList<String> serverIds = new ArrayList<String>(); serverIds.add(server.getId()); String deleteJobId = osclient.ecs().servers().delete(serverIds, true, true); if (null != deleteJobId) { System.out.println(String.format("删除成功, Id=%s", deleteJobId)); Job job = osclient.ecs().jobs().get(deleteJobId); if (null == job) { System.out.println("获取删除任务信息失败!"); return; } System.out.println(String.format("删除任务信息: %s", job)); } else { System.out.println("删除失败"); } }
运行示例
在命令行下,进入 pom.xml 文件所在目录,运行以下命令将执行 App 类的 main 方法。
# 打包 mvn package # 将依赖包复制到 target/dependency/ 目录下 mvn dependency:copy-dependencies -Dmdep.useRepositoryLayout=false # 执行 App 类的 main 方法,注意在 Linux 下,应将 ';' 更改为 ':' # java -cp "target/sdkExample-1.0-SNAPSHOT.jar;target/dependency/*" cn.eaglesoftware.hwcloud.App # Windows 命令行下 # java -cp "target/sdkExample-1.0-SNAPSHOT.jar:target/dependency/*" cn.eaglesoftware.hwcloud.App # Linux 命令行下 java -cp "target/sdkExample-1.0-SNAPSHOT.jar;target/dependency/*" cn.eaglesoftware.hwcloud.App
运行结果
程序执行过程中,首先会查询环境变量配置的区域下的 ECS, 以列表的形式向用户展现(最多10条,用户可输入 ECS 名称的一部分缩小查询范围),用户输入序号可选择其中的 1 个 ECS, 再次选择是否要删除绑定的数据盘和弹性公网IP后,执行删除操作,并将删除结果输出到控制台。
-----------------------样例----------------------------------------