we have to check if VPC is null bfore calling it. VPC is not used in gest networks, so deploying a new VM was broken.

This commit is contained in:
Wilder Rodrigues 2014-07-15 09:23:26 +02:00 committed by wilderrodrigues
parent fb8973f1e2
commit 7e98e3e132
5 changed files with 95 additions and 66 deletions

View File

@ -182,6 +182,7 @@
<bean id="vpcManagerImpl" class="com.cloud.network.vpc.VpcManagerImpl" >
<property name="vpcElements" value="#{vpcProvidersRegistry.registered}"></property>
</bean>
<bean id="vpcVirtualNetworkApplianceManagerImpl"
class="com.cloud.network.router.VpcVirtualNetworkApplianceManagerImpl" />

View File

@ -125,6 +125,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
LoadBalancingRulesManager _lbMgr;
@Inject
NetworkOfferingDao _networkOfferingDao;
@Inject
VpcVirtualNetworkApplianceManager _routerMgr;
@Inject

View File

@ -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<DomainRouterVO> startRouters(final Map<Param, Object> params, final List<DomainRouterVO> routers) throws StorageUnavailableException,
InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException {
List<DomainRouterVO> runningRouters = null;
@ -309,13 +311,13 @@ public class NetworkGeneralHelper {
return runningRouters;
}
// @Override
public DomainRouterVO startVirtualRouter(DomainRouterVO router, User user, Account caller, Map<Param, Object> params)
// @Override
public DomainRouterVO startVirtualRouter(final DomainRouterVO router, final User user, final Account caller, final Map<Param, Object> 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<Network, List<? extends NicProfile>> networks,
boolean startRouter, List<HypervisorType> supportedHypervisors)
throws InsufficientAddressCapacityException,
InsufficientServerCapacityException, InsufficientCapacityException,
StorageUnavailableException, ResourceUnavailableException {
final VirtualRouterProvider vrProvider, final long svcOffId,
final LinkedHashMap<Network, List<? extends NicProfile>> networks,
final boolean startRouter, final List<HypervisorType> 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<Network, List<? extends NicProfile>> createRouterNetworks(
final RouterDeploymentDefinition routerDeploymentDefinition,
Network guestNetwork, Pair<Boolean, PublicIp> publicNetwork)
throws ConcurrentOperationException,
InsufficientAddressCapacityException {
final Network guestNetwork, final Pair<Boolean, PublicIp> publicNetwork)
throws ConcurrentOperationException,
InsufficientAddressCapacityException {
boolean setupPublicNetwork = false;
if (publicNetwork != null) {

View File

@ -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<Param, Object> params,
boolean isRedundant) {
public RouterDeploymentDefinition(final Vpc vpc, final DeployDestination dest,
final Account owner, final Map<Param, Object> 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<Param, Object> params, boolean isRedundant) {
public RouterDeploymentDefinition(final Network guestNetwork, final DeployDestination dest,
final Account owner, final Map<Param, Object> 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<Param, Object> getParams() {
return params;
}
public void setParams(Map<Param, Object> params) {
public void setParams(final Map<Param, Object> 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();
}
}
}

View File

@ -176,7 +176,13 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
public List<DomainRouterVO> 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