openStack 网络安全组增删改查

/**
 * @Description: 网络安全组与openStack同步的工具类
 * @version: v1.0.0
 * @author: lihaiyong
 * @date: 2018年1月31日 上午9:41:11
 */
public class NetSecurityGroup2OpenStackUtils {

/**
* @Description: 创建安全组
* @param nsg
* @return SecurityGroup
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年4月12日
*/
public static SecurityGroup createSecurityGroup(NetSecurityGroup nsg) throws Exception{
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
SecurityGroupService securitygroupSer = networkingService.securitygroup();
SecurityGroup build = Builders.securityGroup().name(nsg.getName()).tenantId(AccountUtis.getOpenstackCurrentTenantId()).description(nsg.getRemark()).build();
SecurityGroup create = securitygroupSer.create(build);
return create;
}

/**
* @Description: 删除安全组
* @param nsg
* @return SecurityGroup
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年4月12日
*/
public static ActionResponse deleteSecurityGroup(NetSecurityGroup nsg)  throws Exception{
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
SecurityGroupService securitygroupSer = networkingService.securitygroup();
ActionResponse delete = securitygroupSer.delete(nsg.getOpenstackId());
return delete;
}

/**
* @Description: 修改安全组
* @param nsg
* @return SecurityGroup
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年4月12日
*/
public static SecurityGroup updateSecurityGroup(NetSecurityGroup nsg) throws Exception{
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
SecurityGroupService securitygroupSer = networkingService.securitygroup();
SecurityGroup securityGroup = securitygroupSer.get(nsg.getOpenstackId());
SecurityGroupUpdate build = null;
if(securityGroup!=null) {
build = Builders.securityGroupUpdate().description(nsg.getRemark()).name(nsg.getName()).build();
}
SecurityGroup update = securitygroupSer.update(securityGroup.getId(), build);
return update;
}

/**
* @Description: 查询安全组
* @param id
* @return
* @throws Exception SecurityGroup
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年4月13日
*/
public static SecurityGroup getSecurityGroup(String id) throws Exception{
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
SecurityGroupService securitygroupSer = networkingService.securitygroup();
SecurityGroup securityGroup = securitygroupSer.get(id);
return securityGroup;
}

/**
* @Description: 获取安全组的所有规则
* @param groupId
* @return
* @throws Exception List<? extends SecurityGroupRule>
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年4月13日
*/
public static List<? extends SecurityGroupRule>  getSecurityRulesByGroupId(String groupId) throws Exception{
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
SecurityGroupService securitygroupSer = networkingService.securitygroup();
SecurityGroup securityGroup = securitygroupSer.get(groupId);
List<? extends SecurityGroupRule> rules = securityGroup.getRules();
return rules;
}

/**

* @Description: 创建安全规则
* @param netSecurityRule
* @param netSecurityGroup
* @param remoteGroupOpenId
* @return SecurityGroupRule
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年4月12日
*/
public static SecurityGroupRule createSecurityIngressRule(NetSecurityRule  nsr, NetSecurityGroup nsg, String remoteGroupOpenId) throws Exception{
SecurityGroupRule create = null;
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
SecurityGroupRuleService securityruleSer = networkingService.securityrule();
NetSecurityGroupRuleBuilder builder = Builders.securityGroupRule().protocol(nsr.getProtocol()).direction(nsr.getDirection())
.securityGroupId(nsg.getOpenstackId()).tenantId(AccountUtis.getOpenstackCurrentTenantId()).ethertype(nsr.getEthertype());
if(StringUtil.isBlank(nsr.getRemoteGroupId())) {
builder = builder.remoteIpPrefix(nsr.getRemoteIpPrefix());
if(nsr.getPortRangeMax()!=null&&nsr.getPortRangeMin()!=null) {
builder.portRangeMax(nsr.getPortRangeMax()).portRangeMin(nsr.getPortRangeMin());
}
create = builder.build();
}else {
create = builder.remoteGroupId(nsr.getRemoteGroupId()).build();
}
create = securityruleSer.create(create);
return create;
}

/**

* @Description: 删除安全规则(第一个参数不传,则删除该组全部规则)
* @param securityRuleOpenId
* @param netSecurityGroup
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年4月12日
*/
public static void deleteSecurityRule(String  securityRuleOpenId, NetSecurityGroup netSecurityGroup) throws Exception{
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
SecurityGroupRuleService ruleSer = networkingService.securityrule();
SecurityGroupService groupSer = networkingService.securitygroup();

if(StringUtil.isBlank(securityRuleOpenId)&&netSecurityGroup!=null) {
SecurityGroup group = groupSer.get(netSecurityGroup.getOpenstackId());
List<? extends SecurityGroupRule> rules = group.getRules();
for (SecurityGroupRule securityGroupRule : rules) {
ruleSer.delete(securityGroupRule.getId());
}
}else {
ruleSer.delete(securityRuleOpenId);
}
}

/**

* @Description: 修改安全规则
* @param securityRuleOpenId
* @param netSecurityGroup
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年4月12日
*/
public static SecurityGroupRule updateSecurityIngressRule(NetSecurityRule nsr, NetSecurityGroup nsg) throws Exception{
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
SecurityGroupRuleService ruleSer = networkingService.securityrule();
SecurityGroupRule create = null;
if(nsr!=null&&!StringUtil.isBlank(nsr.getOpenstackId())) {
//删除旧规则
ruleSer.delete(nsr.getOpenstackId());
//新建新规则
NetSecurityGroupRuleBuilder builder = Builders.securityGroupRule().protocol(nsr.getProtocol()).direction(nsr.getDirection())
.securityGroupId(nsg.getOpenstackId()).tenantId(AccountUtis.getOpenstackCurrentTenantId()).ethertype(nsr.getEthertype());
if(StringUtil.isBlank(nsr.getRemoteGroupId())) {
builder = builder.remoteIpPrefix(nsr.getRemoteIpPrefix());
if(nsr.getPortRangeMax()!=null&&nsr.getPortRangeMin()!=null) {
builder.portRangeMax(nsr.getPortRangeMax()).portRangeMin(nsr.getPortRangeMin());
}
create = builder.build();
}else {
create = builder.remoteGroupId(nsr.getRemoteGroupId()).build();
}
create = ruleSer.create(create);
}
return create;
}

/**
* @Description: 获取安全组规则
* @param securityRuleOpenId
* @param netSecurityGroup
* @throws Exception void
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年4月13日
*/
public static SecurityGroupRule getSecurityRule(String ruleId) throws Exception{
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
SecurityGroupRuleService ruleSer = networkingService.securityrule();
SecurityGroupRule securityGroupRule = ruleSer.get(ruleId);
return securityGroupRule;
}

/**
* @Description: 克隆安全组(只在openStack保存数据,不在数据库保存)
* @param groupOpenId
* @param newName
* @return SecurityGroup
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @throws Exception 
* @date:2018年4月13日
*/
@Deprecated
public static SecurityGroup cloneSecurityGroup(String groupOpenId, String newName) throws Exception {
NetworkingService networkingService = ConnOpenstackUtil.getNetworkingService();
SecurityGroupService securitygroupSer = networkingService.securitygroup();
SecurityGroupRuleService ruleSer = networkingService.securityrule();
SecurityGroup group = securitygroupSer.get(groupOpenId);
if(group==null) {
return null;
}
NetSecurityGroupBuilder tempGroup = Builders.securityGroup().name(newName);
SecurityGroup newGroup = null;
try {
if(group.getDescription()!=null) {
tempGroup = tempGroup.description(group.getDescription());
}
if(group.getTenantId()!=null) {
tempGroup = tempGroup.tenantId(AccountUtis.getOpenstackCurrentTenantId());
}
newGroup = securitygroupSer.create(tempGroup.build());
List<? extends SecurityGroupRule> rules2 = newGroup.getRules();
for (SecurityGroupRule securityGroupRule : rules2) {
NetSecurityGroup2OpenStackUtils.deleteSecurityRule(securityGroupRule.getId(), null);
}
List<? extends SecurityGroupRule> rules = group.getRules();
for (SecurityGroupRule rule : rules) {
NetSecurityGroupRuleBuilder tempRule = Builders.securityGroupRule().securityGroupId(newGroup.getId());
if(rule.getDirection()!=null) {
tempRule.direction(rule.getDirection());
}
if(rule.getEtherType()!=null) {
tempRule.ethertype(rule.getEtherType());
}
if(rule.getPortRangeMax()!=null) {
tempRule.portRangeMax(rule.getPortRangeMax());
}
if(rule.getPortRangeMin()!=null) {
tempRule.portRangeMin(rule.getPortRangeMin());
}
if(rule.getProtocol()!=null) {
tempRule.protocol(rule.getProtocol());
}
if(rule.getRemoteGroupId()!=null) {
tempRule.remoteGroupId(rule.getRemoteGroupId());
}
if(rule.getRemoteIpPrefix()!=null) {
tempRule.remoteIpPrefix(rule.getRemoteIpPrefix());
}
if(rule.getTenantId()!=null) {
tempRule.tenantId(rule.getTenantId());
}
ruleSer.create(tempRule.build());
}
} catch (Exception e) {
e.printStackTrace();
if(newGroup!=null) {
securitygroupSer.delete(newGroup.getId());
}
throw e;
}
return newGroup;
}

/**

* @Description:  给云主机绑定安全组
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年4月17日
*/
public static ActionResponse addSecurityGroup4Server(String serverOpenId, String groupName)  throws Exception{
ServerService serverService = ConnOpenstackUtil.getServerService();
ActionResponse addSecurityGroup = null;
try {
addSecurityGroup = serverService.addSecurityGroup(serverOpenId, groupName);
} catch (Exception e) {
addSecurityGroup = serverService.removeSecurityGroup(serverOpenId, groupName);
throw e;
}
return addSecurityGroup;
}

/**

* @Description:  解除云主机绑定安全组
* @throws:
* @version: v1.0.0
* @author: lihaiyong
* @date:2018年4月17日
*/
public static ActionResponse removeSecurityGroup4Server(String serverOpenId, String groupName) {
ServerService serverService = ConnOpenstackUtil.getServerService();
ActionResponse addSecurityGroup = serverService.removeSecurityGroup(serverOpenId, groupName);
return addSecurityGroup;
}



}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值