diff --git a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
index 902026a63bf..ffd5eec15d5 100644
--- a/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
+++ b/server/resources/META-INF/cloudstack/core/spring-server-core-managers-context.xml
@@ -182,6 +182,7 @@
+
diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java
index eee4892b66e..efc044bb3c8 100755
--- a/server/src/com/cloud/network/element/VirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VirtualRouterElement.java
@@ -125,6 +125,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
LoadBalancingRulesManager _lbMgr;
@Inject
NetworkOfferingDao _networkOfferingDao;
+
@Inject
VpcVirtualNetworkApplianceManager _routerMgr;
@Inject
diff --git a/server/src/com/cloud/network/router/NetworkGeneralHelper.java b/server/src/com/cloud/network/router/NetworkGeneralHelper.java
index db6f4bc0f35..dab3c66e369 100644
--- a/server/src/com/cloud/network/router/NetworkGeneralHelper.java
+++ b/server/src/com/cloud/network/router/NetworkGeneralHelper.java
@@ -147,7 +147,7 @@ public class NetworkGeneralHelper {
}
-// @Override
+ // @Override
public boolean sendCommandsToRouter(final VirtualRouter router, final Commands cmds) throws AgentUnavailableException {
if(!checkRouterVersion(router)){
s_logger.debug("Router requires upgrade. Unable to send command to router:" + router.getId() + ", router template version : " + router.getTemplateVersion()
@@ -184,14 +184,14 @@ public class NetworkGeneralHelper {
}
-// @Override
- public NicTO getNicTO(final VirtualRouter router, Long networkId, String broadcastUri) {
+ // @Override
+ public NicTO getNicTO(final VirtualRouter router, final Long networkId, final String broadcastUri) {
NicProfile nicProfile = _networkModel.getNicProfile(router, networkId, broadcastUri);
return _itMgr.toNicTO(nicProfile, router.getHypervisorType());
}
-// @Override
+ // @Override
public VirtualRouter destroyRouter(final long routerId, final Account caller, final Long callerUserId) throws ResourceUnavailableException, ConcurrentOperationException {
if (s_logger.isDebugEnabled()) {
@@ -216,7 +216,7 @@ public class NetworkGeneralHelper {
* @param router
* @return
*/
-// @Override
+ // @Override
public boolean checkRouterVersion(final VirtualRouter router) {
if(!VirtualNetworkApplianceManagerImpl.routerVersionCheckEnabled.value()){
//Router version check is disabled.
@@ -252,11 +252,12 @@ public class NetworkGeneralHelper {
return _routerDao.findById(router.getId());
}
- protected DomainRouterVO waitRouter(DomainRouterVO router) {
+ protected DomainRouterVO waitRouter(final DomainRouterVO router) {
DomainRouterVO vm = _routerDao.findById(router.getId());
- if (s_logger.isDebugEnabled())
+ if (s_logger.isDebugEnabled()) {
s_logger.debug("Router " + router.getInstanceName() + " is not fully up yet, we will wait");
+ }
while (vm.getState() == State.Starting) {
try {
Thread.sleep(1000);
@@ -268,8 +269,9 @@ public class NetworkGeneralHelper {
}
if (vm.getState() == State.Running) {
- if (s_logger.isDebugEnabled())
+ if (s_logger.isDebugEnabled()) {
s_logger.debug("Router " + router.getInstanceName() + " is now fully up");
+ }
return router;
}
@@ -279,7 +281,7 @@ public class NetworkGeneralHelper {
}
-// @Override
+ // @Override
public List startRouters(final Map params, final List routers) throws StorageUnavailableException,
InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException {
List runningRouters = null;
@@ -309,13 +311,13 @@ public class NetworkGeneralHelper {
return runningRouters;
}
-// @Override
- public DomainRouterVO startVirtualRouter(DomainRouterVO router, User user, Account caller, Map params)
+ // @Override
+ public DomainRouterVO startVirtualRouter(final DomainRouterVO router, final User user, final Account caller, final Map params)
throws StorageUnavailableException, InsufficientCapacityException,
- ConcurrentOperationException, ResourceUnavailableException {
+ ConcurrentOperationException, ResourceUnavailableException {
if (router.getRole() != Role.VIRTUAL_ROUTER || !router.getIsRedundantRouter()) {
- return this.start(router, user, caller, params, null);
+ return start(router, user, caller, params, null);
}
if (router.getState() == State.Running) {
@@ -355,7 +357,7 @@ public class NetworkGeneralHelper {
}
}
if (routerToBeAvoid == null) {
- return this.start(router, user, caller, params, null);
+ return start(router, user, caller, params, null);
}
// We would try best to deploy the router to another place
final int retryIndex = 5;
@@ -380,7 +382,7 @@ public class NetworkGeneralHelper {
}
plan.setAvoids(avoids[i]);
try {
- result = this.start(router, user, caller, params, plan);
+ result = start(router, user, caller, params, plan);
} catch (final InsufficientServerCapacityException ex) {
result = null;
}
@@ -392,14 +394,14 @@ public class NetworkGeneralHelper {
}
-// @Override
+ // @Override
public DomainRouterVO deployRouter(final RouterDeploymentDefinition routerDeploymentDefinition,
- VirtualRouterProvider vrProvider, long svcOffId,
- LinkedHashMap> networks,
- boolean startRouter, List supportedHypervisors)
- throws InsufficientAddressCapacityException,
- InsufficientServerCapacityException, InsufficientCapacityException,
- StorageUnavailableException, ResourceUnavailableException {
+ final VirtualRouterProvider vrProvider, final long svcOffId,
+ final LinkedHashMap> networks,
+ final boolean startRouter, final List supportedHypervisors)
+ throws InsufficientAddressCapacityException,
+ InsufficientServerCapacityException, InsufficientCapacityException,
+ StorageUnavailableException, ResourceUnavailableException {
final ServiceOfferingVO routerOffering = _serviceOfferingDao.findById(svcOffId);
final DeployDestination dest = routerDeploymentDefinition.getDest();
@@ -422,23 +424,23 @@ public class NetworkGeneralHelper {
String templateName = null;
switch (hType) {
- case XenServer:
- templateName = VirtualNetworkApplianceManager.RouterTemplateXen.valueIn(dest.getDataCenter().getId());
- break;
- case KVM:
- templateName = VirtualNetworkApplianceManager.RouterTemplateKvm.valueIn(dest.getDataCenter().getId());
- break;
- case VMware:
- templateName = VirtualNetworkApplianceManager.RouterTemplateVmware.valueIn(dest.getDataCenter().getId());
- break;
- case Hyperv:
- templateName = VirtualNetworkApplianceManager.RouterTemplateHyperV.valueIn(dest.getDataCenter().getId());
- break;
- case LXC:
- templateName = VirtualNetworkApplianceManager.RouterTemplateLxc.valueIn(dest.getDataCenter().getId());
- break;
- default:
- break;
+ case XenServer:
+ templateName = VirtualNetworkApplianceManager.RouterTemplateXen.valueIn(dest.getDataCenter().getId());
+ break;
+ case KVM:
+ templateName = VirtualNetworkApplianceManager.RouterTemplateKvm.valueIn(dest.getDataCenter().getId());
+ break;
+ case VMware:
+ templateName = VirtualNetworkApplianceManager.RouterTemplateVmware.valueIn(dest.getDataCenter().getId());
+ break;
+ case Hyperv:
+ templateName = VirtualNetworkApplianceManager.RouterTemplateHyperV.valueIn(dest.getDataCenter().getId());
+ break;
+ case LXC:
+ templateName = VirtualNetworkApplianceManager.RouterTemplateLxc.valueIn(dest.getDataCenter().getId());
+ break;
+ default:
+ break;
}
final VMTemplateVO template = _templateDao.findRoutingTemplate(hType, templateName);
@@ -453,10 +455,14 @@ public class NetworkGeneralHelper {
offerHA = false;
}
+ // routerDeploymentDefinition.getVpc().getId() ==> do not use VPC because it is not a VPC offering.
+ Long vpcId = routerDeploymentDefinition.getVpc() != null ? routerDeploymentDefinition.getVpc().getId() : null;
+
router = new DomainRouterVO(id, routerOffering.getId(), vrProvider.getId(),
VirtualMachineName.getRouterName(id, VirtualNwStatus.instance), template.getId(), template.getHypervisorType(),
template.getGuestOSId(), owner.getDomainId(), owner.getId(), routerDeploymentDefinition.isRedundant(), 0,
- false, RedundantState.UNKNOWN, offerHA, false, routerDeploymentDefinition.getVpc().getId());
+ false, RedundantState.UNKNOWN, offerHA, false, vpcId);
+
router.setDynamicallyScalable(template.isDynamicallyScalable());
router.setRole(Role.VIRTUAL_ROUTER);
router = _routerDao.persist(router);
@@ -565,21 +571,21 @@ public class NetworkGeneralHelper {
final String errMsg =
new StringBuilder("Cannot find an available cluster in Pod ")
- .append(podId)
- .append(" to start domain router for Ovm. \n Ovm won't support any system vm including domain router, ")
- .append("please make sure you have a cluster with hypervisor type of any of xenserver/KVM/Vmware in the same pod")
- .append(" with Ovm cluster. And there is at least one host in UP status in that cluster.")
- .toString();
+ .append(podId)
+ .append(" to start domain router for Ovm. \n Ovm won't support any system vm including domain router, ")
+ .append("please make sure you have a cluster with hypervisor type of any of xenserver/KVM/Vmware in the same pod")
+ .append(" with Ovm cluster. And there is at least one host in UP status in that cluster.")
+ .toString();
throw new CloudRuntimeException(errMsg);
}
-// @Override
+ // @Override
public LinkedHashMap> createRouterNetworks(
final RouterDeploymentDefinition routerDeploymentDefinition,
- Network guestNetwork, Pair publicNetwork)
- throws ConcurrentOperationException,
- InsufficientAddressCapacityException {
+ final Network guestNetwork, final Pair publicNetwork)
+ throws ConcurrentOperationException,
+ InsufficientAddressCapacityException {
boolean setupPublicNetwork = false;
if (publicNetwork != null) {
diff --git a/server/src/com/cloud/network/router/RouterDeploymentDefinition.java b/server/src/com/cloud/network/router/RouterDeploymentDefinition.java
index 6a147e0929e..ed7310d1523 100644
--- a/server/src/com/cloud/network/router/RouterDeploymentDefinition.java
+++ b/server/src/com/cloud/network/router/RouterDeploymentDefinition.java
@@ -1,3 +1,19 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
package com.cloud.network.router;
import java.util.Map;
@@ -19,9 +35,9 @@ public class RouterDeploymentDefinition {
protected boolean isRedundant;
protected DeploymentPlan plan;
- public RouterDeploymentDefinition(Vpc vpc, DeployDestination dest,
- Account owner, Map params,
- boolean isRedundant) {
+ public RouterDeploymentDefinition(final Vpc vpc, final DeployDestination dest,
+ final Account owner, final Map params,
+ final boolean isRedundant) {
this.vpc = vpc;
this.dest = dest;
@@ -30,8 +46,8 @@ public class RouterDeploymentDefinition {
this.isRedundant = isRedundant;
}
- public RouterDeploymentDefinition(Network guestNetwork, DeployDestination dest,
- Account owner, Map params, boolean isRedundant) {
+ public RouterDeploymentDefinition(final Network guestNetwork, final DeployDestination dest,
+ final Account owner, final Map params, final boolean isRedundant) {
this.guestNetwork = guestNetwork;
this.dest = dest;
@@ -43,51 +59,50 @@ public class RouterDeploymentDefinition {
public Vpc getVpc() {
return vpc;
}
- public void setVpc(Vpc vpc) {
+ public void setVpc(final Vpc vpc) {
this.vpc = vpc;
}
public Network getGuestNetwork() {
return guestNetwork;
}
- public void setGuestNetwork(Network guestNetwork) {
+ public void setGuestNetwork(final Network guestNetwork) {
this.guestNetwork = guestNetwork;
}
public DeployDestination getDest() {
return dest;
}
- public void setDest(DeployDestination dest) {
+ public void setDest(final DeployDestination dest) {
this.dest = dest;
}
public Account getOwner() {
return owner;
}
- public void setOwner(Account owner) {
+ public void setOwner(final Account owner) {
this.owner = owner;
}
public Map getParams() {
return params;
}
- public void setParams(Map params) {
+ public void setParams(final Map params) {
this.params = params;
}
public boolean isRedundant() {
return isRedundant;
}
- public void setRedundant(boolean isRedundant) {
+ public void setRedundant(final boolean isRedundant) {
this.isRedundant = isRedundant;
}
public DeploymentPlan getPlan() {
return plan;
}
- public void setPlan(DeploymentPlan plan) {
+ public void setPlan(final DeploymentPlan plan) {
this.plan = plan;
}
public boolean isVpcRouter() {
- return this.vpc != null;
+ return vpc != null;
}
public Long getPodId() {
- return this.plan.getPodId();
+ return plan.getPodId();
}
-
-}
+}
\ No newline at end of file
diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
index afa64c7e5f3..df8dfc908f3 100644
--- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
@@ -176,7 +176,13 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
public List deployVirtualRouter(final RouterDeploymentDefinition routerDeploymentDefinition)
throws InsufficientCapacityException,
ConcurrentOperationException, ResourceUnavailableException {
- return routerDeploymentManager.deployVirtualRouterInVpc(routerDeploymentDefinition);
+
+ Vpc vpc = routerDeploymentDefinition.getVpc();
+ if (vpc != null) {
+ return routerDeploymentManager.deployVirtualRouterInVpc(routerDeploymentDefinition);
+ } else {
+ return super.deployVirtualRouter(routerDeploymentDefinition);
+ }
}
@Override