5、关键代码片段
该代码示例展示了企业路由器实例的增、删、改、查功能。由于创建、更新和删除操作是异步接口,在进行调试时,需要注释无关的代码。
Copied!
package com.huawei.demo;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.exception.ClientRequestException;
import com.huaweicloud.sdk.core.exception.ServerResponseException;
import com.huaweicloud.sdk.er.v3.ErClient;
import com.huaweicloud.sdk.er.v3.model.CreateEnterpriseRouterRequest;
import com.huaweicloud.sdk.er.v3.model.CreateEnterpriseRouterRequestBody;
import com.huaweicloud.sdk.er.v3.model.CreateEnterpriseRouterResponse;
import com.huaweicloud.sdk.er.v3.model.DeleteEnterpriseRouterRequest;
import com.huaweicloud.sdk.er.v3.model.DeleteEnterpriseRouterResponse;
import com.huaweicloud.sdk.er.v3.model.ListEnterpriseRoutersRequest;
import com.huaweicloud.sdk.er.v3.model.ListEnterpriseRoutersResponse;
import com.huaweicloud.sdk.er.v3.model.ShowEnterpriseRouterRequest;
import com.huaweicloud.sdk.er.v3.model.ShowEnterpriseRouterResponse;
import com.huaweicloud.sdk.er.v3.model.UpdateEnterpriseRouterRequest;
import com.huaweicloud.sdk.er.v3.model.UpdateEnterpriseRouterRequestBody;
import com.huaweicloud.sdk.er.v3.model.UpdateEnterpriseRouterResponse;
import com.huaweicloud.sdk.er.v3.region.ErRegion;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.function.Function;
public class EnterpriseRouterInstanceDemo {
private static final Logger LOGGER = LoggerFactory.getLogger(EnterpriseRouterInstanceDemo.class.getName());
public static void main(String[] args) {
String ak = System.getenv("HUAWEICLOUD_SDK_AK");
String sk = System.getenv("HUAWEICLOUD_SDK_SK");
String erId = "{er_id}";
ICredential auth = new BasicCredentials()
.withAk(ak)
.withSk(sk);
ErClient client = ErClient.newBuilder()
.withCredential(auth)
.withRegion(ErRegion.valueOf("cn-south-1"))
.build();
createEnterpriseRouter(client);
updateEnterpriseRouter(client, erId);
showEnterpriseRouter(client, erId);
deleteEnterpriseRouter(client, erId);
listEnterpriseRouters(client);
}
private static CreateEnterpriseRouterResponse createEnterpriseRouter(ErClient client) {
CreateEnterpriseRouterRequest request = new CreateEnterpriseRouterRequest();
CreateEnterpriseRouterRequestBody body = new CreateEnterpriseRouterRequestBody();
body.withInstance(instance -> {
instance.withName("<your enterprise router name>");
instance.withDescription("<your enterprise router description>");
instance.withAvailabilityZoneIds(azs -> azs.add("<availablility zone id>"));
instance.withEnableDefaultAssociation(false);
instance.withEnableDefaultPropagation(false);
instance.withAsn(64512L);
});
request.withBody(body);
Function<Void, CreateEnterpriseRouterResponse> task = (Void v) -> {
return client.createEnterpriseRouter(request);
};
return execute_instance(task);
}
private static ShowEnterpriseRouterResponse showEnterpriseRouter(ErClient client, String erId) {
ShowEnterpriseRouterRequest request = new ShowEnterpriseRouterRequest().withErId(erId);
Function<Void, ShowEnterpriseRouterResponse> task = (Void v) -> {
return client.showEnterpriseRouter(request);
};
return execute_instance(task);
}
private static UpdateEnterpriseRouterResponse updateEnterpriseRouter(ErClient client, String erId) {
UpdateEnterpriseRouterRequest request = new UpdateEnterpriseRouterRequest();
UpdateEnterpriseRouterRequestBody body = new UpdateEnterpriseRouterRequestBody();
body.withInstance(instance -> {
instance.withName("<your new enterprise router name>");
instance.withDescription("<your new enterprise router description>");
});
request.withErId(erId).withBody(body);
Function<Void, UpdateEnterpriseRouterResponse> task = (Void v) -> {
return client.updateEnterpriseRouter(request);
};
return execute_instance(task);
}
private static void deleteEnterpriseRouter(ErClient client, String erId) {
DeleteEnterpriseRouterRequest request = new DeleteEnterpriseRouterRequest().withErId(erId);
Function<Void, DeleteEnterpriseRouterResponse> task = (Void v) -> {
return client.deleteEnterpriseRouter(request);
};
execute_instance(task);
}
private static ListEnterpriseRoutersResponse listEnterpriseRouters(ErClient client) {
ListEnterpriseRoutersRequest request = new ListEnterpriseRoutersRequest();
Function<Void, ListEnterpriseRoutersResponse> task = (Void v) -> {
return client.listEnterpriseRouters(request);
};
return execute_instance(task);
}
private static <T> T execute_instance(Function<Void, T> task) {
T response_instance = null;
try {
response_instance = task.apply(null);
LOGGER.info(response_instance.toString());
} catch (ClientRequestException e) {
LOGGER.error(String.valueOf(e.getHttpStatusCode()));
LOGGER.error(e.toString());
} catch (ServerResponseException e) {
LOGGER.error(String.valueOf(e.getHttpStatusCode()));
LOGGER.error(e.getMessage());
}
return response_instance;
}
}
6、运行结果
6.1 创建企业路由器实例
Copied!
{
"instance": {
"id": "94c2b814-99dc-939a-e811-ae84c61ea3ff",
"name": "my_er",
"description": "this is my first enterprise router",
"asn": 64512,
"project_id": "08d5a9564a704afda6039ae2babbef3c",
"enable_default_association": true,
"enable_default_propagation": true,
"default_association_route_table_id": "7f7f738f-453c-40b1-be26-28e7b9e390c1",
"default_propagation_route_table_id": "7f7f738f-453c-40b1-be26-28e7b9e390c1",
"auto_accept_shared_attachments": false,
"created_at": "2019-09-06 02:11:13Z",
"updated_at": "2019-09-06 02:11:13Z",
"tags": [
{
"key": "key1",
"value": "value1"
}
],
"enterprise_project_id": 0,
"availability_zone_ids": [
"az1",
"az2"
]
},
"request_id": "14c2b814-99dc-939a-e811-ae84c61ea3f4"
}
6.2 更新企业路由器基本信息
Copied!
{
"instance": {
"id": "94c2b814-99dc-939a-e811-ae84c61ea3ff",
"name": "my_er",
"description": "this is my first enterprise router",
"project_id": "08d5a9564a704afda6039ae2babbef3c",
"state": "pending",
"asn": 64512,
"enable_default_association": true,
"enable_default_propagation": true,
"default_propagation_route_table_id": "94c2b814-99dc-939a-e811-ae84c61ea3ff",
"default_association_route_table_id": "94c2b814-99dc-939a-e811-ae84c61ea3ff",
"auto_accept_shared_attachments": false,
"availability_zone_ids": [
"az1"
],
"created_at": "2019-09-06 02:11:13Z",
"updated_at": "2019-09-06 02:11:13Z"
},
"request_id": "14c2b814-99dc-939b-e81c-ae84c61ea3f7"
}
6.3 查询企业路由器详情
Copied!
{
"instance": {
"id": "94c2b814-99dc-939a-e811-ae84c61ea3ff",
"name": "my_er",
"description": "this is my first enterprise router",
"project_id": "08d5a9564a704afda6039ae2babbef3c",
"state": "pending",
"asn": 64512,
"enable_default_association": true,
"enable_default_propagation": true,
"default_association_route_table_id": "7f7f738f-453c-40b1-be26-28e7b9e390c1",
"default_propagation_route_table_id": "7f7f738f-453c-40b1-be26-28e7b9e390c1",
"auto_accept_shared_attachments": false,
"availability_zone_ids": [
"az1"
],
"created_at": "2019-09-06 02:11:13Z",
"updated_at": "2019-09-06 02:11:13Z"
},
"request_id": "14c2b814-99dc-939b-e81c-ae84c61ea3f7"
}
6.4 删除企业路由器
Copied!
无返回体
6.5 查询企业路由器列表
Copied!
{
"instances": [
{
"id": "94c2b814-99dc-939a-e811-ae84c61ea3ff",
"name": "my_er",
"description": "this is my first enterprise router",
"asn": 64512,
"project_id": "08d5a9564a704afda6039ae2babbef3c",
"enable_default_association": true,
"enable_default_propagation": true,
"default_association_route_table_id": "7f7f738f-453c-40b1-be26-28e7b9e390c1",
"default_propagation_route_table_id": "7f7f738f-453c-40b1-be26-28e7b9e390c1",
"auto_accept_shared_attachments": false,
"created_at": "2019-09-06 02:11:13Z",
"updated_at": "2019-09-06 02:11:13Z",
"tags": [
{
"key": "key",
"value": "value"
}
],
"enterprise_project_id": 0,
"availability_zone_ids": [
"az1",
"az2"
]
}
],
"request_id": "915a14a6-867b-4af7-83d1-70efceb146f9",
"page_info": {
"next_marker": "2",
"current_count": 1
}
}
1、功能介绍
企业路由器(Enterprise Router, ER)可以连接虚拟私有云(Virtual Private Cloud, VPC)或本地网络来构建中心辐射型组网,是云上大规格、高带宽、高性能的集中路由器。企业路由器使用边界网关协议(Border Gateway Protocol, BGP),支持路由学习、动态选路以及链路切换,极大的提升网络的可扩展性及运维效率,从而保证业务的连续性。
本示例展示如何使用企业路由器实例(EnterpriseRouter)相关SDK
2、流程图
3、前置条件
4、SDK获取和安装
您可以通过Maven配置所依赖的企业路由器服务SDK
具体的SDK版本号请参见 SDK开发中心 (产品类别:企业路由器)
<dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-er</artifactId> <version>3.1.2</version> </dependency>
5、关键代码片段
该代码示例展示了企业路由器实例的增、删、改、查功能。由于创建、更新和删除操作是异步接口,在进行调试时,需要注释无关的代码。
package com.huawei.demo; import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.exception.ClientRequestException; import com.huaweicloud.sdk.core.exception.ServerResponseException; import com.huaweicloud.sdk.er.v3.ErClient; import com.huaweicloud.sdk.er.v3.model.CreateEnterpriseRouterRequest; import com.huaweicloud.sdk.er.v3.model.CreateEnterpriseRouterRequestBody; import com.huaweicloud.sdk.er.v3.model.CreateEnterpriseRouterResponse; import com.huaweicloud.sdk.er.v3.model.DeleteEnterpriseRouterRequest; import com.huaweicloud.sdk.er.v3.model.DeleteEnterpriseRouterResponse; import com.huaweicloud.sdk.er.v3.model.ListEnterpriseRoutersRequest; import com.huaweicloud.sdk.er.v3.model.ListEnterpriseRoutersResponse; import com.huaweicloud.sdk.er.v3.model.ShowEnterpriseRouterRequest; import com.huaweicloud.sdk.er.v3.model.ShowEnterpriseRouterResponse; import com.huaweicloud.sdk.er.v3.model.UpdateEnterpriseRouterRequest; import com.huaweicloud.sdk.er.v3.model.UpdateEnterpriseRouterRequestBody; import com.huaweicloud.sdk.er.v3.model.UpdateEnterpriseRouterResponse; import com.huaweicloud.sdk.er.v3.region.ErRegion; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.function.Function; public class EnterpriseRouterInstanceDemo { private static final Logger LOGGER = LoggerFactory.getLogger(EnterpriseRouterInstanceDemo.class.getName()); public static void main(String[] args) { // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 String ak = System.getenv("HUAWEICLOUD_SDK_AK"); String sk = System.getenv("HUAWEICLOUD_SDK_SK"); String erId = "{er_id}"; ICredential auth = new BasicCredentials() .withAk(ak) .withSk(sk); ErClient client = ErClient.newBuilder() .withCredential(auth) .withRegion(ErRegion.valueOf("cn-south-1")) .build(); // Create enterprise router createEnterpriseRouter(client); /* * the parameter erId can be extracted from response of the previous function */ // Update enterprise router updateEnterpriseRouter(client, erId); // Show enterprise router showEnterpriseRouter(client, erId); // Delete enterprise router deleteEnterpriseRouter(client, erId); // List enterprise routers listEnterpriseRouters(client); } private static CreateEnterpriseRouterResponse createEnterpriseRouter(ErClient client) { CreateEnterpriseRouterRequest request = new CreateEnterpriseRouterRequest(); CreateEnterpriseRouterRequestBody body = new CreateEnterpriseRouterRequestBody(); body.withInstance(instance -> { instance.withName("<your enterprise router name>"); instance.withDescription("<your enterprise router description>"); instance.withAvailabilityZoneIds(azs -> azs.add("<availablility zone id>")); instance.withEnableDefaultAssociation(false); instance.withEnableDefaultPropagation(false); instance.withAsn(64512L); // AS number }); request.withBody(body); Function<Void, CreateEnterpriseRouterResponse> task = (Void v) -> { return client.createEnterpriseRouter(request); }; return execute_instance(task); } private static ShowEnterpriseRouterResponse showEnterpriseRouter(ErClient client, String erId) { ShowEnterpriseRouterRequest request = new ShowEnterpriseRouterRequest().withErId(erId); Function<Void, ShowEnterpriseRouterResponse> task = (Void v) -> { return client.showEnterpriseRouter(request); }; return execute_instance(task); } private static UpdateEnterpriseRouterResponse updateEnterpriseRouter(ErClient client, String erId) { UpdateEnterpriseRouterRequest request = new UpdateEnterpriseRouterRequest(); UpdateEnterpriseRouterRequestBody body = new UpdateEnterpriseRouterRequestBody(); body.withInstance(instance -> { instance.withName("<your new enterprise router name>"); instance.withDescription("<your new enterprise router description>"); }); request.withErId(erId).withBody(body); Function<Void, UpdateEnterpriseRouterResponse> task = (Void v) -> { return client.updateEnterpriseRouter(request); }; return execute_instance(task); } private static void deleteEnterpriseRouter(ErClient client, String erId) { DeleteEnterpriseRouterRequest request = new DeleteEnterpriseRouterRequest().withErId(erId); Function<Void, DeleteEnterpriseRouterResponse> task = (Void v) -> { return client.deleteEnterpriseRouter(request); }; execute_instance(task); } private static ListEnterpriseRoutersResponse listEnterpriseRouters(ErClient client) { ListEnterpriseRoutersRequest request = new ListEnterpriseRoutersRequest(); Function<Void, ListEnterpriseRoutersResponse> task = (Void v) -> { return client.listEnterpriseRouters(request); }; return execute_instance(task); } private static <T> T execute_instance(Function<Void, T> task) { T response_instance = null; try { response_instance = task.apply(null); LOGGER.info(response_instance.toString()); } catch (ClientRequestException e) { LOGGER.error(String.valueOf(e.getHttpStatusCode())); LOGGER.error(e.toString()); } catch (ServerResponseException e) { LOGGER.error(String.valueOf(e.getHttpStatusCode())); LOGGER.error(e.getMessage()); } return response_instance; } }
6、运行结果
6.1 创建企业路由器实例
{ "instance": { "id": "94c2b814-99dc-939a-e811-ae84c61ea3ff", "name": "my_er", "description": "this is my first enterprise router", "asn": 64512, "project_id": "08d5a9564a704afda6039ae2babbef3c", "enable_default_association": true, "enable_default_propagation": true, "default_association_route_table_id": "7f7f738f-453c-40b1-be26-28e7b9e390c1", "default_propagation_route_table_id": "7f7f738f-453c-40b1-be26-28e7b9e390c1", "auto_accept_shared_attachments": false, "created_at": "2019-09-06 02:11:13Z", "updated_at": "2019-09-06 02:11:13Z", "tags": [ { "key": "key1", "value": "value1" } ], "enterprise_project_id": 0, "availability_zone_ids": [ "az1", "az2" ] }, "request_id": "14c2b814-99dc-939a-e811-ae84c61ea3f4" }
6.2 更新企业路由器基本信息
{ "instance": { "id": "94c2b814-99dc-939a-e811-ae84c61ea3ff", "name": "my_er", "description": "this is my first enterprise router", "project_id": "08d5a9564a704afda6039ae2babbef3c", "state": "pending", "asn": 64512, "enable_default_association": true, "enable_default_propagation": true, "default_propagation_route_table_id": "94c2b814-99dc-939a-e811-ae84c61ea3ff", "default_association_route_table_id": "94c2b814-99dc-939a-e811-ae84c61ea3ff", "auto_accept_shared_attachments": false, "availability_zone_ids": [ "az1" ], "created_at": "2019-09-06 02:11:13Z", "updated_at": "2019-09-06 02:11:13Z" }, "request_id": "14c2b814-99dc-939b-e81c-ae84c61ea3f7" }
6.3 查询企业路由器详情
{ "instance": { "id": "94c2b814-99dc-939a-e811-ae84c61ea3ff", "name": "my_er", "description": "this is my first enterprise router", "project_id": "08d5a9564a704afda6039ae2babbef3c", "state": "pending", "asn": 64512, "enable_default_association": true, "enable_default_propagation": true, "default_association_route_table_id": "7f7f738f-453c-40b1-be26-28e7b9e390c1", "default_propagation_route_table_id": "7f7f738f-453c-40b1-be26-28e7b9e390c1", "auto_accept_shared_attachments": false, "availability_zone_ids": [ "az1" ], "created_at": "2019-09-06 02:11:13Z", "updated_at": "2019-09-06 02:11:13Z" }, "request_id": "14c2b814-99dc-939b-e81c-ae84c61ea3f7" }
6.4 删除企业路由器
6.5 查询企业路由器列表
{ "instances": [ { "id": "94c2b814-99dc-939a-e811-ae84c61ea3ff", "name": "my_er", "description": "this is my first enterprise router", "asn": 64512, "project_id": "08d5a9564a704afda6039ae2babbef3c", "enable_default_association": true, "enable_default_propagation": true, "default_association_route_table_id": "7f7f738f-453c-40b1-be26-28e7b9e390c1", "default_propagation_route_table_id": "7f7f738f-453c-40b1-be26-28e7b9e390c1", "auto_accept_shared_attachments": false, "created_at": "2019-09-06 02:11:13Z", "updated_at": "2019-09-06 02:11:13Z", "tags": [ { "key": "key", "value": "value" } ], "enterprise_project_id": 0, "availability_zone_ids": [ "az1", "az2" ] } ], "request_id": "915a14a6-867b-4af7-83d1-70efceb146f9", "page_info": { "next_marker": "2", "current_count": 1 } }
7、参考
8、修订记录