diff --git a/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java b/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java index 0299c9ec20f..d493b8bc291 100644 --- a/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java +++ b/api/src/com/cloud/api/commands/CreatePrivateGatewayCmd.java @@ -129,7 +129,7 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { @Override public void execute() throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException, ResourceUnavailableException { - PrivateGateway result = _vpcService.applyVpcGateway(getEntityId()); + PrivateGateway result = _vpcService.applyVpcPrivateGateway(getEntityId()); if (result != null) { PrivateGatewayResponse response = _responseGenerator.createPrivateGatewayResponse(result); response.setResponseName(getCommandName()); diff --git a/api/src/com/cloud/api/commands/CreateStaticRouteCmd.java b/api/src/com/cloud/api/commands/CreateStaticRouteCmd.java index af6fc000b20..4be141b3cd3 100644 --- a/api/src/com/cloud/api/commands/CreateStaticRouteCmd.java +++ b/api/src/com/cloud/api/commands/CreateStaticRouteCmd.java @@ -31,6 +31,7 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.vpc.PrivateGateway; import com.cloud.network.vpc.StaticRoute; +import com.cloud.network.vpc.VpcGateway; import com.cloud.user.UserContext; /** @@ -122,7 +123,7 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ @Override public long getEntityOwnerId() { - PrivateGateway gateway = _vpcService.getVpcPrivateGateway(gatewayId); + VpcGateway gateway = _vpcService.getVpcGateway(gatewayId); if (gateway == null) { throw new InvalidParameterValueException("Invalid gateway id is specified"); } @@ -136,11 +137,11 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ @Override public Long getSyncObjId() { - PrivateGateway privateGateway = _vpcService.getVpcPrivateGateway(gatewayId); - if (privateGateway == null) { + VpcGateway gateway = _vpcService.getVpcGateway(gatewayId); + if (gateway == null) { throw new InvalidParameterValueException("Invalid id is specified for the gateway"); } - return privateGateway.getVpcId(); + return gateway.getVpcId(); } @Override diff --git a/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java b/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java index 89b941daa02..83714582b1d 100644 --- a/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java +++ b/api/src/com/cloud/api/commands/DeletePrivateGatewayCmd.java @@ -93,7 +93,7 @@ public class DeletePrivateGatewayCmd extends BaseAsyncCmd { @Override public String getSyncObjType() { - return BaseAsyncCmd.networkSyncObject; + return BaseAsyncCmd.vpcSyncObject; } @Override diff --git a/api/src/com/cloud/network/vpc/PrivateGateway.java b/api/src/com/cloud/network/vpc/PrivateGateway.java index 3ecc75a90db..d23b1b4c5b1 100644 --- a/api/src/com/cloud/network/vpc/PrivateGateway.java +++ b/api/src/com/cloud/network/vpc/PrivateGateway.java @@ -16,8 +16,5 @@ package com.cloud.network.vpc; * @author Alena Prokharchyk */ public interface PrivateGateway extends VpcGateway{ - String getVlanTag(); - String getGateway(); - String getNetmask(); long getPhysicalNetworkId(); } diff --git a/api/src/com/cloud/network/vpc/StaticRouteProfile.java b/api/src/com/cloud/network/vpc/StaticRouteProfile.java index 073621d7321..75bfe751a94 100644 --- a/api/src/com/cloud/network/vpc/StaticRouteProfile.java +++ b/api/src/com/cloud/network/vpc/StaticRouteProfile.java @@ -17,7 +17,7 @@ package com.cloud.network.vpc; */ public class StaticRouteProfile implements StaticRoute{ private long id; - private String cidr; + private String targetCidr; private long accountId; private long domainId; private long gatewayId; @@ -29,9 +29,9 @@ public class StaticRouteProfile implements StaticRoute{ String ipAddress; - public StaticRouteProfile(StaticRoute staticRoute, PrivateGateway gateway) { + public StaticRouteProfile(StaticRoute staticRoute, VpcGateway gateway) { this.id = staticRoute.getId(); - this.cidr = staticRoute.getCidr(); + this.targetCidr = staticRoute.getCidr(); this.accountId = staticRoute.getAccountId(); this.domainId = staticRoute.getDomainId(); this.gatewayId = staticRoute.getVpcGatewayId(); @@ -60,7 +60,7 @@ public class StaticRouteProfile implements StaticRoute{ @Override public String getCidr() { - return cidr; + return targetCidr; } @Override diff --git a/api/src/com/cloud/network/vpc/VpcGateway.java b/api/src/com/cloud/network/vpc/VpcGateway.java index e3b532a1cb5..1ebaffc6734 100644 --- a/api/src/com/cloud/network/vpc/VpcGateway.java +++ b/api/src/com/cloud/network/vpc/VpcGateway.java @@ -50,4 +50,19 @@ public interface VpcGateway extends Identity { * @return */ Long getNetworkId(); + + /** + * @return + */ + String getGateway(); + + /** + * @return + */ + String getNetmask(); + + /** + * @return + */ + String getVlanTag(); } diff --git a/api/src/com/cloud/network/vpc/VpcService.java b/api/src/com/cloud/network/vpc/VpcService.java index a4e1a1a3451..fec908083fc 100644 --- a/api/src/com/cloud/network/vpc/VpcService.java +++ b/api/src/com/cloud/network/vpc/VpcService.java @@ -164,7 +164,7 @@ public interface VpcService { * @throws ResourceUnavailableException * @throws ConcurrentOperationException */ - public PrivateGateway applyVpcGateway(Long gatewayId) throws ConcurrentOperationException, ResourceUnavailableException; + public PrivateGateway applyVpcPrivateGateway(Long gatewayId) throws ConcurrentOperationException, ResourceUnavailableException; /** * @param id @@ -213,4 +213,10 @@ public interface VpcService { */ public List listStaticRoutes(ListStaticRoutesCmd cmd); + /** + * @param id + * @return + */ + VpcGateway getVpcGateway(long id); + } diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index 1bff8002e9e..458ec3da9bb 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -83,6 +83,7 @@ import com.cloud.network.vpc.PrivateGateway; import com.cloud.network.vpc.StaticRoute; import com.cloud.network.vpc.StaticRouteProfile; import com.cloud.network.vpc.Vpc; +import com.cloud.network.vpc.VpcGateway; import com.cloud.network.vpc.VpcManager; import com.cloud.network.vpc.Dao.StaticRouteDao; import com.cloud.network.vpc.Dao.VpcDao; @@ -819,11 +820,11 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian //3) RE-APPLY ALL STATIC ROUTE RULES List routes = _staticRouteDao.listByVpcId(router.getVpcId()); List staticRouteProfiles = new ArrayList(routes.size()); - Map gatewayMap = new HashMap(); + Map gatewayMap = new HashMap(); for (StaticRoute route : routes) { - PrivateGateway gateway = gatewayMap.get(route.getVpcGatewayId()); + VpcGateway gateway = gatewayMap.get(route.getVpcGatewayId()); if (gateway == null) { - gateway = _vpcMgr.getVpcPrivateGateway(route.getVpcGatewayId()); + gateway = _vpcMgr.getVpcGateway(route.getVpcGatewayId()); gatewayMap.put(gateway.getId(), gateway); } staticRouteProfiles.add(new StaticRouteProfile(route, gateway)); diff --git a/server/src/com/cloud/network/vpc/PrivateGatewayProfile.java b/server/src/com/cloud/network/vpc/PrivateGatewayProfile.java index 912a14325d5..0ec3883f4e8 100644 --- a/server/src/com/cloud/network/vpc/PrivateGatewayProfile.java +++ b/server/src/com/cloud/network/vpc/PrivateGatewayProfile.java @@ -17,24 +17,15 @@ package com.cloud.network.vpc; */ public class PrivateGatewayProfile implements PrivateGateway{ VpcGateway vpcGateway; - String vlanTag; - String gateway; - String netmask; long physicalNetworkId; /** * @param vpcGateway - * @param vlanTag - * @param gateway - * @param netmask * @param physicalNetworkId TODO */ - public PrivateGatewayProfile(VpcGateway vpcGateway, String vlanTag, String gateway, String netmask, long physicalNetworkId) { + public PrivateGatewayProfile(VpcGateway vpcGateway, long physicalNetworkId) { super(); this.vpcGateway = vpcGateway; - this.vlanTag = vlanTag; - this.gateway = gateway; - this.netmask = netmask; this.physicalNetworkId = physicalNetworkId; } @@ -75,17 +66,17 @@ public class PrivateGatewayProfile implements PrivateGateway{ @Override public String getVlanTag() { - return vlanTag; + return vpcGateway.getVlanTag(); } @Override public String getGateway() { - return gateway; + return vpcGateway.getGateway(); } @Override public String getNetmask() { - return netmask; + return vpcGateway.getNetmask(); } @Override diff --git a/server/src/com/cloud/network/vpc/VpcGatewayVO.java b/server/src/com/cloud/network/vpc/VpcGatewayVO.java index 35a17384fd3..58a283ce773 100644 --- a/server/src/com/cloud/network/vpc/VpcGatewayVO.java +++ b/server/src/com/cloud/network/vpc/VpcGatewayVO.java @@ -42,6 +42,15 @@ public class VpcGatewayVO implements VpcGateway{ @Column(name = "ip4_address") String ip4Address; + @Column(name="gateway") + String gateway; + + @Column(name="netmask") + String netmask; + + @Column(name="vlan_tag") + String vlanTag; + @Column(name = "type") @Enumerated(value = EnumType.STRING) VpcGateway.Type type; @@ -74,15 +83,20 @@ public class VpcGatewayVO implements VpcGateway{ * @param vpcId * @param zoneId * @param networkId + * @param vlanTag TODO + * @param gateway TODO + * @param netmask TODO * @param account_id */ - public VpcGatewayVO(String ip4Address, Type type, Long vpcId, long zoneId, Long networkId) { - super(); + public VpcGatewayVO(String ip4Address, Type type, Long vpcId, long zoneId, Long networkId, String vlanTag, String gateway, String netmask) { this.ip4Address = ip4Address; this.type = type; this.vpcId = vpcId; this.zoneId = zoneId; this.networkId = networkId; + this.vlanTag = vlanTag; + this.gateway = gateway; + this.netmask = netmask; this.uuid = UUID.randomUUID().toString(); } @@ -127,4 +141,19 @@ public class VpcGatewayVO implements VpcGateway{ buf.append(id).append("|").append(ip4Address.toString()).append("|").append(vpcId).append("]"); return buf.toString(); } + + @Override + public String getGateway() { + return gateway; + } + + @Override + public String getNetmask() { + return netmask; + } + + @Override + public String getVlanTag() { + return vlanTag; + } } diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index b4323a75669..bb4774d7a1f 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -994,12 +994,15 @@ public class VpcManagerImpl implements VpcManager, Manager{ } return getPrivateGatewayProfile(gateway); } + + @Override + public VpcGateway getVpcGateway(long id) { + return _vpcGatewayDao.findById(id); + } protected PrivateGateway getPrivateGatewayProfile(VpcGateway gateway) { Network network = _ntwkMgr.getNetwork(gateway.getNetworkId()); - String vlanTag = network.getBroadcastUri().getHost(); - String netmask = NetUtils.getCidrNetmask(network.getCidr()); - return new PrivateGatewayProfile(gateway, vlanTag, network.getGateway(),netmask, network.getPhysicalNetworkId()); + return new PrivateGatewayProfile(gateway, network.getPhysicalNetworkId()); } @Override @@ -1042,7 +1045,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ //2) create gateway entry gatewayVO = new VpcGatewayVO(ipAddress, VpcGateway.Type.Private, vpcId, privateNtwk.getDataCenterId(), - privateNtwk.getId()); + privateNtwk.getId(), vlan, gateway, netmask); _vpcGatewayDao.persist(gatewayVO); s_logger.debug("Created vpc gateway entry " + gatewayVO); @@ -1054,7 +1057,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ @Override - public PrivateGateway applyVpcGateway(Long gatewayId) throws ConcurrentOperationException, ResourceUnavailableException { + public PrivateGateway applyVpcPrivateGateway(Long gatewayId) throws ConcurrentOperationException, ResourceUnavailableException { PrivateGateway gateway = getVpcPrivateGateway(gatewayId); if (getVpcElement().createPrivateGateway(gateway)) { s_logger.debug("Private gateway " + gateway + " was applied succesfully on the backend"); @@ -1183,11 +1186,11 @@ public class VpcManagerImpl implements VpcManager, Manager{ protected boolean applyStaticRoutes(List routes, Account caller, boolean updateRoutesInDB) throws ResourceUnavailableException { boolean success = true; List staticRouteProfiles = new ArrayList(routes.size()); - Map gatewayMap = new HashMap(); + Map gatewayMap = new HashMap(); for (StaticRoute route : routes) { - PrivateGateway gateway = gatewayMap.get(route.getVpcGatewayId()); + VpcGateway gateway = gatewayMap.get(route.getVpcGatewayId()); if (gateway == null) { - gateway = getVpcPrivateGateway(route.getVpcGatewayId()); + gateway = _vpcGatewayDao.findById(route.getVpcGatewayId()); gatewayMap.put(gateway.getId(), gateway); } staticRouteProfiles.add(new StaticRouteProfile(route, gateway)); @@ -1275,7 +1278,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ Account caller = UserContext.current().getCaller(); //parameters validation - PrivateGateway gateway = getVpcPrivateGateway(gatewayId); + VpcGateway gateway = _vpcGatewayDao.findById(gatewayId); if (gateway == null) { throw new InvalidParameterValueException("Invalid gateway id is given"); } diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 0b3bf262b66..2519c103143 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -2255,6 +2255,9 @@ CREATE TABLE `cloud`.`vpc_gateways` ( `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id', `uuid` varchar(40), `ip4_address` char(40) COMMENT 'ip4 address of the gateway', + `netmask` varchar(15) COMMENT 'netmask of the gateway', + `gateway` varchar(15) COMMENT 'gateway', + `vlan_tag` varchar(255), `type` varchar(32) COMMENT 'type of gateway; can be Public/Private/Vpn', `network_id` bigint unsigned NOT NULL COMMENT 'network id vpc gateway belongs to', `vpc_id` bigint unsigned NOT NULL COMMENT 'id of the vpc the gateway belongs to',