/**
* @Description: 路由与openStack同步的工具类
* @version: v1.0.0
* @author: lihaiyong
* @date: 2018年1月31日 上午9:41:11
*/
public class Router2OpenStackUtils {
/**
* @Description: 创建路由表,netOpenId不是必须字段,(关联外网的网络id,一般创建时没有外网端口)
*
* @param rtid
* @param tenantId
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static Router createRouter2OpenStack(RouterTableInfo rtid, String netOpenId, String tenantId) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
RouterBuilder builder = Builders.router().name(rtid.getName()).tenantId(AccountUtis.getOpenstackCurrentTenantId()).adminStateUp(true);
if(StringUtil.isNotBlank(netOpenId)) {
builder.externalGateway(netOpenId,true);
}
Router create = routerService.create(builder.build());
return create;
}
/**
* @Description: 关联路由表子网接口
* @param rtid
* @param tenantId
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static RouterInterface bindRouterSubnet2OpenStack(RouterTableInfo router, String netOpenId) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
RouterInterface attachInterface = routerService.attachInterface(router.getOpenstackId(), AttachInterfaceType.SUBNET, netOpenId);
return attachInterface;
}
/**
* @Description: 关联路由表端口
* @param rtid
* @param tenantId
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static RouterInterface bindRouterPort2OpenStack(RouterTableInfo router, String portId) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
RouterInterface attachInterface = routerService.attachInterface(router.getOpenstackId(), AttachInterfaceType.PORT, portId);
return attachInterface;
}
/**
* @Description: 解绑路由表子网接口
* @param rtid
* @param tenantId
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static RouterInterface unBindRouterSubnet2OpenStack(RouterTableInfo router, String netOpenId) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
RouterInterface attachInterface = routerService.detachInterface(router.getOpenstackId(), netOpenId, null);
return attachInterface;
}
/**
* @Description: 解绑路由表子网端口
* @param rtid
* @param tenantId
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static RouterInterface unBindRouterPort2OpenStack(RouterTableInfo router, String portId) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
RouterInterface attachInterface = routerService.detachInterface(router.getOpenstackId(), null, portId);
return attachInterface;
}
/**
* @Description: 关联路由表外网接口
* @param rtid
* @param tenantId
* @return Router
* @throws:.externalGateway(netOpenId)
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static Router createExternalGateway2OpenStack(RouterTableInfo router, String netOpenId) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
Router router2 = routerService.get(router.getOpenstackId());
router2.toBuilder().externalGateway(netOpenId,true).build();
routerService.update(router2);
return router2;
}
/**
* @Description: 创建路由策略
* @param rtsd
* @param routerService
* @param router
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static RouterTableStrategy createRouterStrategy2OpeenStack(RouterTableStrategy rtsd, Router router) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
RouterBuilder route = router.toBuilder().route(rtsd.getDestination(), rtsd.getNexthop());
routerService.update(route.build());
return rtsd;
}
/**
* @Description: 批量创建路由策略
* @param rtsd
* @param routerService
* @param router
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static List<RouterTableStrategyDTO> batchCreateRouterStrategy2OpeenStack(List<RouterTableStrategyDTO> rtsdList, RouterTableInfo router) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
Router router2 = routerService.get(router.getOpenstackId());
//创建策略
RouterBuilder route = router2.toBuilder();
if(rtsdList!=null&&rtsdList.size()>0) {
for (RouterTableStrategyDTO rtsd : rtsdList) {
rtsd.setRouterPk(router.getPk());
if(StringUtils.isNotBlank(rtsd.getDestination())&&StringUtils.isNotBlank(rtsd.getNexthop())&&(!"1".equals(rtsd.getNexthopType().toString()))) {
try {
Router build = route.route(rtsd.getDestination(), rtsd.getNexthop()).build();
routerService.update(build);
} catch (ClientResponseException e) {
e.printStackTrace();
throw e;
}
}
}
}
return rtsdList;
}
/**
* @Description: 删除路由表
* @param rtsd
* @param routerService
* @param router
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static ActionResponse deleteRouterStrategyFromOpeenStack(RouterTableInfo router) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
Router router2 = routerService.get(router.getOpenstackId());
if(router2!=null) {
Router build = router2.toBuilder().noRoutes().clearExternalGateway().build();
routerService.update(build);
ActionResponse actionResponse = routerService.delete(build.getId());
return actionResponse;
}else {
return null;
}
}
/**
* @Description: 更新路由表
* @param rtsd
* @param routerService
* @param router
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static void updateRouterInfo(RouterTableInfo router) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
Router router2 = routerService.get(router.getOpenstackId());
if(router2!=null) {
router2.setName(router.getName());
router2.setTenantId(AccountUtis.getOpenstackCurrentTenantId());
routerService.update(router2);
}
}
/**
* @Description: 删除路由策略(全部删除,然后重建)
* @param rtsd
* @param routerService
* @param router
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static void deleteRouterStrategy(RouterTableInfo router, List<RouterTableStrategyDTO> rtsdList) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
Router router2 = routerService.get(router.getOpenstackId());
if(router2!=null) {
Router build = router2.toBuilder().noRoutes().build();
Router2OpenStackUtils.batchCreateRouterStrategy2OpeenStack( rtsdList, router);
routerService.update(build);
}
}
* @Description: 路由与openStack同步的工具类
* @version: v1.0.0
* @author: lihaiyong
* @date: 2018年1月31日 上午9:41:11
*/
public class Router2OpenStackUtils {
/**
* @Description: 创建路由表,netOpenId不是必须字段,(关联外网的网络id,一般创建时没有外网端口)
*
* @param rtid
* @param tenantId
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static Router createRouter2OpenStack(RouterTableInfo rtid, String netOpenId, String tenantId) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
RouterBuilder builder = Builders.router().name(rtid.getName()).tenantId(AccountUtis.getOpenstackCurrentTenantId()).adminStateUp(true);
if(StringUtil.isNotBlank(netOpenId)) {
builder.externalGateway(netOpenId,true);
}
Router create = routerService.create(builder.build());
return create;
}
/**
* @Description: 关联路由表子网接口
* @param rtid
* @param tenantId
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static RouterInterface bindRouterSubnet2OpenStack(RouterTableInfo router, String netOpenId) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
RouterInterface attachInterface = routerService.attachInterface(router.getOpenstackId(), AttachInterfaceType.SUBNET, netOpenId);
return attachInterface;
}
/**
* @Description: 关联路由表端口
* @param rtid
* @param tenantId
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static RouterInterface bindRouterPort2OpenStack(RouterTableInfo router, String portId) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
RouterInterface attachInterface = routerService.attachInterface(router.getOpenstackId(), AttachInterfaceType.PORT, portId);
return attachInterface;
}
/**
* @Description: 解绑路由表子网接口
* @param rtid
* @param tenantId
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static RouterInterface unBindRouterSubnet2OpenStack(RouterTableInfo router, String netOpenId) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
RouterInterface attachInterface = routerService.detachInterface(router.getOpenstackId(), netOpenId, null);
return attachInterface;
}
/**
* @Description: 解绑路由表子网端口
* @param rtid
* @param tenantId
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static RouterInterface unBindRouterPort2OpenStack(RouterTableInfo router, String portId) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
RouterInterface attachInterface = routerService.detachInterface(router.getOpenstackId(), null, portId);
return attachInterface;
}
/**
* @Description: 关联路由表外网接口
* @param rtid
* @param tenantId
* @return Router
* @throws:.externalGateway(netOpenId)
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static Router createExternalGateway2OpenStack(RouterTableInfo router, String netOpenId) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
Router router2 = routerService.get(router.getOpenstackId());
router2.toBuilder().externalGateway(netOpenId,true).build();
routerService.update(router2);
return router2;
}
/**
* @Description: 创建路由策略
* @param rtsd
* @param routerService
* @param router
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static RouterTableStrategy createRouterStrategy2OpeenStack(RouterTableStrategy rtsd, Router router) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
RouterBuilder route = router.toBuilder().route(rtsd.getDestination(), rtsd.getNexthop());
routerService.update(route.build());
return rtsd;
}
/**
* @Description: 批量创建路由策略
* @param rtsd
* @param routerService
* @param router
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static List<RouterTableStrategyDTO> batchCreateRouterStrategy2OpeenStack(List<RouterTableStrategyDTO> rtsdList, RouterTableInfo router) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
Router router2 = routerService.get(router.getOpenstackId());
//创建策略
RouterBuilder route = router2.toBuilder();
if(rtsdList!=null&&rtsdList.size()>0) {
for (RouterTableStrategyDTO rtsd : rtsdList) {
rtsd.setRouterPk(router.getPk());
if(StringUtils.isNotBlank(rtsd.getDestination())&&StringUtils.isNotBlank(rtsd.getNexthop())&&(!"1".equals(rtsd.getNexthopType().toString()))) {
try {
Router build = route.route(rtsd.getDestination(), rtsd.getNexthop()).build();
routerService.update(build);
} catch (ClientResponseException e) {
e.printStackTrace();
throw e;
}
}
}
}
return rtsdList;
}
/**
* @Description: 删除路由表
* @param rtsd
* @param routerService
* @param router
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static ActionResponse deleteRouterStrategyFromOpeenStack(RouterTableInfo router) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
Router router2 = routerService.get(router.getOpenstackId());
if(router2!=null) {
Router build = router2.toBuilder().noRoutes().clearExternalGateway().build();
routerService.update(build);
ActionResponse actionResponse = routerService.delete(build.getId());
return actionResponse;
}else {
return null;
}
}
/**
* @Description: 更新路由表
* @param rtsd
* @param routerService
* @param router
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static void updateRouterInfo(RouterTableInfo router) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
Router router2 = routerService.get(router.getOpenstackId());
if(router2!=null) {
router2.setName(router.getName());
router2.setTenantId(AccountUtis.getOpenstackCurrentTenantId());
routerService.update(router2);
}
}
/**
* @Description: 删除路由策略(全部删除,然后重建)
* @param rtsd
* @param routerService
* @param router
* @return Router
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年3月28日
*/
public static void deleteRouterStrategy(RouterTableInfo router, List<RouterTableStrategyDTO> rtsdList) {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
RouterService routerService = networkingService.router();
Router router2 = routerService.get(router.getOpenstackId());
if(router2!=null) {
Router build = router2.toBuilder().noRoutes().build();
Router2OpenStackUtils.batchCreateRouterStrategy2OpeenStack( rtsdList, router);
routerService.update(build);
}
}