mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-02 20:02:29 +01:00
Replacing the old [Vpc}VirtualNetworkApplianceManager by the new ones;
Implement the missing commands related to DHCP PV Lan and DHCP SubNet Conflicts: server/src/com/cloud/network/element/VirtualRouterElement.java server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java server/src/com/cloud/network/rules/DhcpRules.java server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java server/src/org/apache/cloudstack/network/topology/NetworkTopologyVisitor.java
This commit is contained in:
parent
a83f5790eb
commit
12b0d188cb
@ -186,9 +186,6 @@
|
||||
<bean id="vpcVirtualNetworkApplianceManagerImpl"
|
||||
class="com.cloud.network.router.VpcVirtualNetworkApplianceManagerImpl" />
|
||||
|
||||
<bean id="newVirtualNetworkApplianceManagerImpl"
|
||||
class="com.cloud.network.router.NEWVirtualNetworkApplianceManagerImpl" />
|
||||
|
||||
<bean id="virtualNetworkApplianceFactory"
|
||||
class="com.cloud.network.rules.VirtualNetworkApplianceFactory" />
|
||||
|
||||
|
||||
@ -42,6 +42,7 @@ import com.cloud.configuration.ConfigurationManager;
|
||||
import com.cloud.dc.DataCenter;
|
||||
import com.cloud.dc.DataCenter.NetworkType;
|
||||
import com.cloud.dc.DataCenterVO;
|
||||
import com.cloud.dc.dao.DataCenterDao;
|
||||
import com.cloud.deploy.DeployDestination;
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.InsufficientCapacityException;
|
||||
@ -154,6 +155,8 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
OvsProviderDao _ovsProviderDao;
|
||||
@Inject
|
||||
IPAddressDao _ipAddressDao;
|
||||
@Inject
|
||||
DataCenterDao _dcDao;
|
||||
|
||||
@Inject
|
||||
NetworkTopologyContext networkTopologyContext;
|
||||
@ -291,7 +294,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
if (endChar != null) {
|
||||
boolean matchedEndChar = false;
|
||||
if (str.length() < 2) {
|
||||
return false; // atleast one numeric and one char. example:
|
||||
return false; // at least one numeric and one char. example:
|
||||
}
|
||||
// 3h
|
||||
char strEnd = str.toCharArray()[str.length() - 1];
|
||||
@ -712,7 +715,6 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
return true;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
VirtualMachineProfile uservm = vm;
|
||||
|
||||
// If any router is running then send save password command otherwise
|
||||
@ -750,7 +752,6 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
return true;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
VirtualMachineProfile uservm = vm;
|
||||
|
||||
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
|
||||
@ -770,7 +771,6 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
return true;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
VirtualMachineProfile uservm = vm;
|
||||
|
||||
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
|
||||
@ -913,7 +913,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
if (vm.getType() != VirtualMachine.Type.User) {
|
||||
return false;
|
||||
}
|
||||
@SuppressWarnings("unchecked")
|
||||
|
||||
VirtualMachineProfile uservm = vm;
|
||||
|
||||
List<DomainRouterVO> routers = getRouters(network, dest);
|
||||
@ -922,7 +922,10 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
throw new ResourceUnavailableException("Can't find at least one router!", DataCenter.class, network.getDataCenterId());
|
||||
}
|
||||
|
||||
return _routerMgr.configDhcpForSubnet(network, nic, uservm, dest, routers);
|
||||
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
|
||||
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
|
||||
|
||||
return networkTopology.configDhcpForSubnet(network, nic, uservm, dest, routers);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -951,7 +954,6 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
return false;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
VirtualMachineProfile uservm = vm;
|
||||
|
||||
List<DomainRouterVO> routers = getRouters(network, dest);
|
||||
@ -963,7 +965,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
|
||||
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
|
||||
|
||||
return _routerMgr.applyDhcpEntry(network, nic, uservm, dest, routers);
|
||||
return networkTopology.applyDhcpEntry(network, nic, uservm, dest, routers);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -981,7 +983,6 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
return true;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
VirtualMachineProfile uservm = vm;
|
||||
|
||||
List<DomainRouterVO> routers = getRouters(network, dest);
|
||||
@ -1122,7 +1123,15 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
if (vm.getType() == VirtualMachine.Type.DomainRouter) {
|
||||
assert vm instanceof DomainRouterVO;
|
||||
DomainRouterVO router = (DomainRouterVO) vm.getVirtualMachine();
|
||||
_routerMgr.setupDhcpForPvlan(false, router, router.getHostId(), nic);
|
||||
|
||||
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
|
||||
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
|
||||
|
||||
try {
|
||||
networkTopology.setupDhcpForPvlan(false, router, router.getHostId(), nic);
|
||||
} catch (ResourceUnavailableException e) {
|
||||
s_logger.warn("Timed Out", e);
|
||||
}
|
||||
} else if (vm.getType() == VirtualMachine.Type.User) {
|
||||
assert vm instanceof UserVmVO;
|
||||
UserVmVO userVm = (UserVmVO) vm.getVirtualMachine();
|
||||
@ -1139,7 +1148,15 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
if (vm.getType() == VirtualMachine.Type.DomainRouter) {
|
||||
assert vm instanceof DomainRouterVO;
|
||||
DomainRouterVO router = (DomainRouterVO) vm.getVirtualMachine();
|
||||
_routerMgr.setupDhcpForPvlan(true, router, router.getHostId(), nic);
|
||||
|
||||
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
|
||||
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
|
||||
|
||||
try {
|
||||
networkTopology.setupDhcpForPvlan(true, router, router.getHostId(), nic);
|
||||
} catch (ResourceUnavailableException e) {
|
||||
s_logger.warn("Timed Out", e);
|
||||
}
|
||||
} else if (vm.getType() == VirtualMachine.Type.User) {
|
||||
assert vm instanceof UserVmVO;
|
||||
UserVmVO userVm = (UserVmVO) vm.getVirtualMachine();
|
||||
@ -1155,7 +1172,15 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
|
||||
if (vm.getType() == VirtualMachine.Type.DomainRouter) {
|
||||
assert vm instanceof DomainRouterVO;
|
||||
DomainRouterVO router = (DomainRouterVO) vm.getVirtualMachine();
|
||||
_routerMgr.setupDhcpForPvlan(true, router, router.getHostId(), nic);
|
||||
|
||||
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
|
||||
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
|
||||
|
||||
try {
|
||||
networkTopology.setupDhcpForPvlan(true, router, router.getHostId(), nic);
|
||||
} catch (ResourceUnavailableException e) {
|
||||
s_logger.warn("Timed Out", e);
|
||||
}
|
||||
} else if (vm.getType() == VirtualMachine.Type.User) {
|
||||
assert vm instanceof UserVmVO;
|
||||
UserVmVO userVm = (UserVmVO) vm.getVirtualMachine();
|
||||
|
||||
@ -1,301 +0,0 @@
|
||||
// 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.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.ejb.Local;
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd;
|
||||
import org.apache.cloudstack.api.command.admin.router.UpgradeRouterTemplateCmd;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.manager.Commands;
|
||||
import com.cloud.deploy.DeployDestination;
|
||||
import com.cloud.exception.AgentUnavailableException;
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.InsufficientCapacityException;
|
||||
import com.cloud.exception.OperationTimedoutException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.maint.Version;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.network.RemoteAccessVpn;
|
||||
import com.cloud.network.VirtualNetworkApplianceService;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.user.User;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.vm.DomainRouterVO;
|
||||
import com.cloud.vm.VirtualMachineProfile.Param;
|
||||
|
||||
|
||||
/**
|
||||
* NetworkManager manages the network for the different end users.
|
||||
*
|
||||
*/
|
||||
@Local(value = { NEWVirtualNetworkApplianceManager.class, VirtualNetworkApplianceService.class })
|
||||
public class NEWVirtualNetworkApplianceManagerImpl implements NEWVirtualNetworkApplianceManager {
|
||||
|
||||
private static final Logger s_logger = Logger.getLogger(NEWVirtualNetworkApplianceManagerImpl.class);
|
||||
|
||||
static final ConfigKey<Boolean> routerVersionCheckEnabled = new ConfigKey<Boolean>("Advanced", Boolean.class, "router.version.check", "true",
|
||||
"If true, router minimum required version is checked before sending command", false);
|
||||
|
||||
@Inject
|
||||
private AgentManager _agentMgr;
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(final String name) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConfigParams(final Map<String, Object> params) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getConfigParams() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRunLevel() {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRunLevel(final int level) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean configure(final String name, final Map<String, Object> params)
|
||||
throws ConfigurationException {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean start() {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean stop() {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualRouter startRouter(final long routerId, final boolean reprogramNetwork)
|
||||
throws ConcurrentOperationException, ResourceUnavailableException,
|
||||
InsufficientCapacityException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualRouter rebootRouter(final long routerId, final boolean reprogramNetwork)
|
||||
throws ConcurrentOperationException, ResourceUnavailableException,
|
||||
InsufficientCapacityException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualRouter upgradeRouter(final UpgradeRouterCmd cmd) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualRouter stopRouter(final long routerId, final boolean forced)
|
||||
throws ResourceUnavailableException, ConcurrentOperationException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualRouter startRouter(final long id)
|
||||
throws ResourceUnavailableException, InsufficientCapacityException,
|
||||
ConcurrentOperationException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualRouter destroyRouter(final long routerId, final Account caller,
|
||||
final Long callerUserId) throws ResourceUnavailableException,
|
||||
ConcurrentOperationException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualRouter findRouter(final long routerId) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> upgradeRouterTemplate(final UpgradeRouterTemplateCmd cmd) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DomainRouterVO> deployVirtualRouterInGuestNetwork(
|
||||
final Network guestNetwork, final DeployDestination dest, final Account owner,
|
||||
final Map<Param, Object> params, final boolean isRedundant)
|
||||
throws InsufficientCapacityException, ResourceUnavailableException,
|
||||
ConcurrentOperationException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean startRemoteAccessVpn(final Network network, final RemoteAccessVpn vpn,
|
||||
final List<? extends VirtualRouter> routers)
|
||||
throws ResourceUnavailableException {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteRemoteAccessVpn(final Network network, final RemoteAccessVpn vpn,
|
||||
final List<? extends VirtualRouter> routers)
|
||||
throws ResourceUnavailableException {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VirtualRouter> getRoutersForNetwork(final long networkId) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualRouter stop(final VirtualRouter router, final boolean forced,
|
||||
final User callingUser, final Account callingAccount)
|
||||
throws ConcurrentOperationException, ResourceUnavailableException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDnsBasicZoneUpdate() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeDhcpSupportForSubnet(final Network network,
|
||||
final List<DomainRouterVO> routers) throws ResourceUnavailableException {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareAggregatedExecution(final Network network,
|
||||
final List<DomainRouterVO> routers) throws AgentUnavailableException {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean completeAggregatedExecution(final Network network,
|
||||
final List<DomainRouterVO> routers) throws AgentUnavailableException {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cleanupAggregatedExecution(final Network network,
|
||||
final List<DomainRouterVO> routers) throws AgentUnavailableException {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@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()
|
||||
+ ", minimal required version : " + MinVRVersion);
|
||||
throw new CloudRuntimeException("Unable to send command. Upgrade in progress. Please contact administrator.");
|
||||
}
|
||||
Answer[] answers = null;
|
||||
try {
|
||||
answers = _agentMgr.send(router.getHostId(), cmds);
|
||||
} catch (final OperationTimedoutException e) {
|
||||
s_logger.warn("Timed Out", e);
|
||||
throw new AgentUnavailableException("Unable to send commands to virtual router ", router.getHostId(), e);
|
||||
}
|
||||
|
||||
if (answers == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (answers.length != cmds.size()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// FIXME: Have to return state for individual command in the future
|
||||
boolean result = true;
|
||||
if (answers.length > 0) {
|
||||
for (final Answer answer : answers) {
|
||||
if (!answer.getResult()) {
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Checks if the router is at the required version
|
||||
// Compares MS version and router version
|
||||
protected boolean checkRouterVersion(final VirtualRouter router) {
|
||||
if(!routerVersionCheckEnabled.value()){
|
||||
//Router version check is disabled.
|
||||
return true;
|
||||
}
|
||||
if(router.getTemplateVersion() == null){
|
||||
return false;
|
||||
}
|
||||
final String trimmedVersion = Version.trimRouterVersion(router.getTemplateVersion());
|
||||
return (Version.compare(trimmedVersion, MinVRVersion) >= 0);
|
||||
}
|
||||
}
|
||||
@ -20,26 +20,22 @@ import java.util.List;
|
||||
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
|
||||
import com.cloud.deploy.DeployDestination;
|
||||
import com.cloud.exception.AgentUnavailableException;
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.network.RemoteAccessVpn;
|
||||
import com.cloud.network.VirtualNetworkApplianceService;
|
||||
import com.cloud.network.VpnUser;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.user.User;
|
||||
import com.cloud.utils.component.Manager;
|
||||
import com.cloud.vm.DomainRouterVO;
|
||||
import com.cloud.vm.NicProfile;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
|
||||
/**
|
||||
* NetworkManager manages the network for the different end users.
|
||||
*
|
||||
*/
|
||||
public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkApplianceService {
|
||||
|
||||
static final String RouterTemplateXenCK = "router.template.xenserver";
|
||||
static final String RouterTemplateKvmCK = "router.template.kvm";
|
||||
static final String RouterTemplateVmwareCK = "router.template.vmware";
|
||||
@ -75,8 +71,11 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA
|
||||
* @param hostId
|
||||
* @param pubKey
|
||||
* @param prvKey
|
||||
*
|
||||
* NOT USED IN THE VIRTUAL NET APPLIANCE
|
||||
*
|
||||
*/
|
||||
boolean sendSshKeysToHost(Long hostId, String pubKey, String prvKey);
|
||||
//boolean sendSshKeysToHost(Long hostId, String pubKey, String prvKey):
|
||||
|
||||
boolean startRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List<? extends VirtualRouter> routers) throws ResourceUnavailableException;
|
||||
|
||||
@ -84,19 +83,12 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA
|
||||
|
||||
List<VirtualRouter> getRoutersForNetwork(long networkId);
|
||||
|
||||
String[] applyVpnUsers(Network network, List<? extends VpnUser> users, List<DomainRouterVO> routers) throws ResourceUnavailableException;
|
||||
|
||||
VirtualRouter stop(VirtualRouter router, boolean forced, User callingUser, Account callingAccount) throws ConcurrentOperationException, ResourceUnavailableException;
|
||||
|
||||
String getDnsBasicZoneUpdate();
|
||||
|
||||
boolean configDhcpForSubnet(Network network, NicProfile nic, VirtualMachineProfile uservm, DeployDestination dest, List<DomainRouterVO> routers)
|
||||
throws ResourceUnavailableException;
|
||||
|
||||
boolean removeDhcpSupportForSubnet(Network network, List<DomainRouterVO> routers) throws ResourceUnavailableException;
|
||||
|
||||
boolean setupDhcpForPvlan(boolean add, DomainRouterVO router, Long hostId, NicProfile nic);
|
||||
|
||||
public boolean prepareAggregatedExecution(Network network, List<DomainRouterVO> routers) throws AgentUnavailableException;
|
||||
|
||||
public boolean completeAggregatedExecution(Network network, List<DomainRouterVO> routers) throws AgentUnavailableException;
|
||||
|
||||
350
server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
Executable file → Normal file
350
server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
Executable file → Normal file
@ -56,6 +56,8 @@ import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.cloudstack.framework.jobs.AsyncJobManager;
|
||||
import org.apache.cloudstack.framework.jobs.impl.AsyncJobVO;
|
||||
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
|
||||
import org.apache.cloudstack.network.topology.NetworkTopology;
|
||||
import org.apache.cloudstack.network.topology.NetworkTopologyContext;
|
||||
import org.apache.cloudstack.utils.identity.ManagementServerNode;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder;
|
||||
@ -74,10 +76,8 @@ import com.cloud.agent.api.Command;
|
||||
import com.cloud.agent.api.GetDomRVersionAnswer;
|
||||
import com.cloud.agent.api.GetDomRVersionCmd;
|
||||
import com.cloud.agent.api.GetRouterAlertsAnswer;
|
||||
import com.cloud.agent.api.ModifySshKeysCommand;
|
||||
import com.cloud.agent.api.NetworkUsageAnswer;
|
||||
import com.cloud.agent.api.NetworkUsageCommand;
|
||||
import com.cloud.agent.api.PvlanSetupCommand;
|
||||
import com.cloud.agent.api.StartupCommand;
|
||||
import com.cloud.agent.api.check.CheckSshCommand;
|
||||
import com.cloud.agent.api.routing.AggregationControlCommand;
|
||||
@ -92,7 +92,6 @@ import com.cloud.agent.api.routing.IpAssocCommand;
|
||||
import com.cloud.agent.api.routing.LoadBalancerConfigCommand;
|
||||
import com.cloud.agent.api.routing.NetworkElementCommand;
|
||||
import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand;
|
||||
import com.cloud.agent.api.routing.SavePasswordCommand;
|
||||
import com.cloud.agent.api.routing.SetFirewallRulesCommand;
|
||||
import com.cloud.agent.api.routing.SetMonitorServiceCommand;
|
||||
import com.cloud.agent.api.routing.SetPortForwardingRulesCommand;
|
||||
@ -120,9 +119,6 @@ import com.cloud.dc.DataCenter;
|
||||
import com.cloud.dc.DataCenter.NetworkType;
|
||||
import com.cloud.dc.DataCenterVO;
|
||||
import com.cloud.dc.HostPodVO;
|
||||
import com.cloud.dc.Pod;
|
||||
import com.cloud.dc.Vlan;
|
||||
import com.cloud.dc.VlanVO;
|
||||
import com.cloud.dc.dao.ClusterDao;
|
||||
import com.cloud.dc.dao.DataCenterDao;
|
||||
import com.cloud.dc.dao.HostPodDao;
|
||||
@ -133,7 +129,6 @@ import com.cloud.event.EventTypes;
|
||||
import com.cloud.exception.AgentUnavailableException;
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.ConnectionException;
|
||||
import com.cloud.exception.InsufficientAddressCapacityException;
|
||||
import com.cloud.exception.InsufficientCapacityException;
|
||||
import com.cloud.exception.InsufficientVirtualNetworkCapacityException;
|
||||
import com.cloud.exception.InvalidParameterValueException;
|
||||
@ -228,7 +223,6 @@ import com.cloud.user.dao.UserStatisticsDao;
|
||||
import com.cloud.user.dao.UserStatsLogDao;
|
||||
import com.cloud.uservm.UserVm;
|
||||
import com.cloud.utils.NumbersUtil;
|
||||
import com.cloud.utils.PasswordGenerator;
|
||||
import com.cloud.utils.StringUtils;
|
||||
import com.cloud.utils.component.ComponentContext;
|
||||
import com.cloud.utils.component.ManagerBase;
|
||||
@ -390,6 +384,9 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> {
|
||||
@Inject
|
||||
OpRouterMonitorServiceDao _opRouterMonitorServiceDao;
|
||||
|
||||
@Inject
|
||||
NetworkTopologyContext networkTopologyContext;
|
||||
|
||||
@Inject
|
||||
protected NetworkGeneralHelper nwHelper;
|
||||
@Inject
|
||||
@ -426,18 +423,6 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> {
|
||||
|
||||
BlockingQueue<Long> _vrUpdateQueue = null;
|
||||
|
||||
@Override
|
||||
public boolean sendSshKeysToHost(final Long hostId, final String pubKey, final String prvKey) {
|
||||
final ModifySshKeysCommand cmd = new ModifySshKeysCommand(pubKey, prvKey);
|
||||
final Answer answer = _agentMgr.easySend(hostId, cmd);
|
||||
|
||||
if (answer != null) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualRouter destroyRouter(final long routerId, final Account caller, final Long callerUserId) throws ResourceUnavailableException, ConcurrentOperationException {
|
||||
return nwHelper.destroyRouter(routerId, caller, callerUserId);
|
||||
@ -1713,37 +1698,6 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> {
|
||||
return dhcpRange;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setupDhcpForPvlan(final boolean add, final DomainRouterVO router, final Long hostId, final NicProfile nic) {
|
||||
if (!nic.getBroadCastUri().getScheme().equals("pvlan")) {
|
||||
return false;
|
||||
}
|
||||
String op = "add";
|
||||
if (!add) {
|
||||
op = "delete";
|
||||
}
|
||||
final Network network = _networkDao.findById(nic.getNetworkId());
|
||||
final String networkTag = _networkModel.getNetworkTag(router.getHypervisorType(), network);
|
||||
final PvlanSetupCommand cmd = PvlanSetupCommand.createDhcpSetup(op, nic.getBroadCastUri(), networkTag, router.getInstanceName(), nic.getMacAddress(), nic.getIp4Address());
|
||||
// In fact we send command to the host of router, we're not programming
|
||||
// router but the host
|
||||
Answer answer = null;
|
||||
try {
|
||||
answer = _agentMgr.send(hostId, cmd);
|
||||
} catch (final OperationTimedoutException e) {
|
||||
s_logger.warn("Timed Out", e);
|
||||
return false;
|
||||
} catch (final AgentUnavailableException e) {
|
||||
s_logger.warn("Agent Unavailable ", e);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (answer == null || !answer.getResult()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean finalizeDeployment(final Commands cmds, final VirtualMachineProfile profile, final DeployDestination dest, final ReservationContext context)
|
||||
throws ResourceUnavailableException {
|
||||
@ -2160,11 +2114,20 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> {
|
||||
final List<? extends Nic> routerNics = _nicDao.listByVmId(profile.getId());
|
||||
for (final Nic nic : routerNics) {
|
||||
final Network network = _networkModel.getNetwork(nic.getNetworkId());
|
||||
|
||||
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
|
||||
|
||||
if (network.getTrafficType() == TrafficType.Guest) {
|
||||
guestNetworks.add(network);
|
||||
if (nic.getBroadcastUri().getScheme().equals("pvlan")) {
|
||||
final NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), 0, false, "pvlan-nic");
|
||||
result = setupDhcpForPvlan(true, router, router.getHostId(), nicProfile);
|
||||
|
||||
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
|
||||
try {
|
||||
result = networkTopology.setupDhcpForPvlan(true, router, router.getHostId(), nicProfile);
|
||||
} catch (final ResourceUnavailableException e) {
|
||||
s_logger.debug("ERROR in finalizeStart: ", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2187,9 +2150,17 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> {
|
||||
final List<? extends Nic> routerNics = _nicDao.listByVmId(profile.getId());
|
||||
for (final Nic nic : routerNics) {
|
||||
final Network network = _networkModel.getNetwork(nic.getNetworkId());
|
||||
final DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
|
||||
|
||||
if (network.getTrafficType() == TrafficType.Guest && nic.getBroadcastUri() != null && nic.getBroadcastUri().getScheme().equals("pvlan")) {
|
||||
final NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), 0, false, "pvlan-nic");
|
||||
setupDhcpForPvlan(false, domR, domR.getHostId(), nicProfile);
|
||||
|
||||
final NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
|
||||
try {
|
||||
networkTopology.setupDhcpForPvlan(false, domR, domR.getHostId(), nicProfile);
|
||||
} catch (final ResourceUnavailableException e) {
|
||||
s_logger.debug("ERROR in finalizeStop: ", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2278,96 +2249,6 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean configDhcpForSubnet(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest,
|
||||
final List<DomainRouterVO> routers) throws ResourceUnavailableException {
|
||||
final UserVmVO vm = _userVmDao.findById(profile.getId());
|
||||
_userVmDao.loadDetails(vm);
|
||||
|
||||
// Asuming we have only one router per network For Now.
|
||||
final DomainRouterVO router = routers.get(0);
|
||||
if (router.getState() != State.Running) {
|
||||
s_logger.warn("Failed to configure dhcp: router not in running state");
|
||||
throw new ResourceUnavailableException("Unable to assign ip addresses, domR is not in right state " + router.getState(), DataCenter.class, network.getDataCenterId());
|
||||
}
|
||||
// check if this is not the primary subnet.
|
||||
final NicVO domr_guest_nic = _nicDao.findByInstanceIdAndIpAddressAndVmtype(router.getId(), _nicDao.getIpAddress(nic.getNetworkId(), router.getId()),
|
||||
VirtualMachine.Type.DomainRouter);
|
||||
// check if the router ip address and the vm ip address belong to same
|
||||
// subnet.
|
||||
// if they do not belong to same netwoek check for the alias ips. if not
|
||||
// create one.
|
||||
// This should happen only in case of Basic and Advanced SG enabled
|
||||
// networks.
|
||||
if (!NetUtils.sameSubnet(domr_guest_nic.getIp4Address(), nic.getIp4Address(), nic.getNetmask())) {
|
||||
final List<NicIpAliasVO> aliasIps = _nicIpAliasDao.listByNetworkIdAndState(domr_guest_nic.getNetworkId(), NicIpAlias.state.active);
|
||||
boolean ipInVmsubnet = false;
|
||||
for (final NicIpAliasVO alias : aliasIps) {
|
||||
// check if any of the alias ips belongs to the Vm's subnet.
|
||||
if (NetUtils.sameSubnet(alias.getIp4Address(), nic.getIp4Address(), nic.getNetmask())) {
|
||||
ipInVmsubnet = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
PublicIp routerPublicIP = null;
|
||||
String routerAliasIp = null;
|
||||
final DataCenter dc = _dcDao.findById(router.getDataCenterId());
|
||||
if (ipInVmsubnet == false) {
|
||||
try {
|
||||
if (network.getTrafficType() == TrafficType.Guest && network.getGuestType() == GuestType.Shared) {
|
||||
_podDao.findById(vm.getPodIdToDeployIn());
|
||||
final Account caller = CallContext.current().getCallingAccount();
|
||||
final List<VlanVO> vlanList = _vlanDao.listVlansByNetworkIdAndGateway(network.getId(), nic.getGateway());
|
||||
final List<Long> vlanDbIdList = new ArrayList<Long>();
|
||||
for (final VlanVO vlan : vlanList) {
|
||||
vlanDbIdList.add(vlan.getId());
|
||||
}
|
||||
if (dc.getNetworkType() == NetworkType.Basic) {
|
||||
routerPublicIP = _ipAddrMgr.assignPublicIpAddressFromVlans(router.getDataCenterId(), vm.getPodIdToDeployIn(), caller, Vlan.VlanType.DirectAttached,
|
||||
vlanDbIdList, nic.getNetworkId(), null, false);
|
||||
} else {
|
||||
routerPublicIP = _ipAddrMgr.assignPublicIpAddressFromVlans(router.getDataCenterId(), null, caller, Vlan.VlanType.DirectAttached, vlanDbIdList,
|
||||
nic.getNetworkId(), null, false);
|
||||
}
|
||||
|
||||
routerAliasIp = routerPublicIP.getAddress().addr();
|
||||
}
|
||||
} catch (final InsufficientAddressCapacityException e) {
|
||||
s_logger.info(e.getMessage());
|
||||
s_logger.info("unable to configure dhcp for this VM.");
|
||||
return false;
|
||||
}
|
||||
// this means we did not create a ip alis on the router.
|
||||
final NicIpAliasVO alias = new NicIpAliasVO(domr_guest_nic.getId(), routerAliasIp, router.getId(), CallContext.current().getCallingAccountId(),
|
||||
network.getDomainId(), nic.getNetworkId(), nic.getGateway(), nic.getNetmask());
|
||||
alias.setAliasCount(routerPublicIP.getIpMacAddress());
|
||||
_nicIpAliasDao.persist(alias);
|
||||
final List<IpAliasTO> ipaliasTo = new ArrayList<IpAliasTO>();
|
||||
ipaliasTo.add(new IpAliasTO(routerAliasIp, alias.getNetmask(), alias.getAliasCount().toString()));
|
||||
final Commands cmds = new Commands(Command.OnError.Stop);
|
||||
createIpAlias(router, ipaliasTo, alias.getNetworkId(), cmds);
|
||||
// also add the required configuration to the dnsmasq for
|
||||
// supporting dhcp and dns on the new ip.
|
||||
configDnsMasq(router, network, cmds);
|
||||
final boolean result = sendCommandsToRouter(router, cmds);
|
||||
if (result == false) {
|
||||
final NicIpAliasVO ipAliasVO = _nicIpAliasDao.findByInstanceIdAndNetworkId(network.getId(), router.getId());
|
||||
final PublicIp routerPublicIPFinal = routerPublicIP;
|
||||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(final TransactionStatus status) {
|
||||
_nicIpAliasDao.expunge(ipAliasVO.getId());
|
||||
_ipAddressDao.unassignIpAddress(routerPublicIPFinal.getId());
|
||||
}
|
||||
});
|
||||
throw new CloudRuntimeException("failed to configure ip alias on the router as a part of dhcp config");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeDhcpSupportForSubnet(final Network network, final List<DomainRouterVO> routers) throws ResourceUnavailableException {
|
||||
if (routers == null || routers.isEmpty()) {
|
||||
@ -2478,45 +2359,6 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> {
|
||||
cmds.addCommand("users", cmd);
|
||||
}
|
||||
|
||||
@Override
|
||||
// FIXME add partial success and STOP state support
|
||||
public String[] applyVpnUsers(final Network network, final List<? extends VpnUser> users, final List<DomainRouterVO> routers) throws ResourceUnavailableException {
|
||||
if (routers == null || routers.isEmpty()) {
|
||||
s_logger.warn("Failed to add/remove VPN users: no router found for account and zone");
|
||||
throw new ResourceUnavailableException("Unable to assign ip addresses, domR doesn't exist for network " + network.getId(), DataCenter.class, network.getDataCenterId());
|
||||
}
|
||||
|
||||
boolean agentResults = true;
|
||||
|
||||
for (final DomainRouterVO router : routers) {
|
||||
if (router.getState() != State.Running) {
|
||||
s_logger.warn("Failed to add/remove VPN users: router not in running state");
|
||||
throw new ResourceUnavailableException("Unable to assign ip addresses, domR is not in right state " + router.getState(), DataCenter.class,
|
||||
network.getDataCenterId());
|
||||
}
|
||||
|
||||
final Commands cmds = new Commands(Command.OnError.Continue);
|
||||
createApplyVpnUsersCommand(users, router, cmds);
|
||||
|
||||
// Currently we receive just one answer from the agent. In the
|
||||
// future we have to parse individual answers and set
|
||||
// results accordingly
|
||||
final boolean agentResult = sendCommandsToRouter(router, cmds);
|
||||
agentResults = agentResults && agentResult;
|
||||
}
|
||||
|
||||
final String[] result = new String[users.size()];
|
||||
for (int i = 0; i < result.length; i++) {
|
||||
if (agentResults) {
|
||||
result[i] = null;
|
||||
} else {
|
||||
result[i] = String.valueOf(agentResults);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ActionEvent(eventType = EventTypes.EVENT_ROUTER_START, eventDescription = "starting router Vm", async = true)
|
||||
public VirtualRouter startRouter(final long id) throws ResourceUnavailableException, InsufficientCapacityException, ConcurrentOperationException {
|
||||
@ -2814,25 +2656,6 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> {
|
||||
cmds.addCommand("startVpn", startVpnCmd);
|
||||
}
|
||||
|
||||
private void createPasswordCommand(final VirtualRouter router, final VirtualMachineProfile profile, final NicVO nic, final Commands cmds) {
|
||||
final String password = (String) profile.getParameter(VirtualMachineProfile.Param.VmPassword);
|
||||
final DataCenterVO dcVo = _dcDao.findById(router.getDataCenterId());
|
||||
|
||||
// password should be set only on default network element
|
||||
if (password != null && nic.isDefaultNic()) {
|
||||
final String encodedPassword = PasswordGenerator.rot13(password);
|
||||
final SavePasswordCommand cmd = new SavePasswordCommand(encodedPassword, nic.getIp4Address(), profile.getVirtualMachine().getHostName(),
|
||||
_networkModel.getExecuteInSeqNtwkElmtCmd());
|
||||
cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(router.getId()));
|
||||
cmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, getRouterIpInNetwork(nic.getNetworkId(), router.getId()));
|
||||
cmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName());
|
||||
cmd.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString());
|
||||
|
||||
cmds.addCommand("password", cmd);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void createVmDataCommand(final VirtualRouter router, final UserVm vm, final NicVO nic, final String publicKey, final Commands cmds) {
|
||||
final String serviceOffering = _serviceOfferingDao.findByIdIncludingRemoved(vm.getId(), vm.getServiceOfferingId()).getDisplayText();
|
||||
final String zoneName = _dcDao.findById(router.getDataCenterId()).getName();
|
||||
@ -2954,7 +2777,8 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> {
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean sendCommandsToRouter(final VirtualRouter router, final Commands cmds) throws AgentUnavailableException {
|
||||
@Override
|
||||
public boolean sendCommandsToRouter(final VirtualRouter router, final Commands cmds) throws AgentUnavailableException {
|
||||
if (!nwHelper.checkRouterVersion(router)) {
|
||||
s_logger.debug("Router requires upgrade. Unable to send command to router:" + router.getId() + ", router template version : " + router.getTemplateVersion()
|
||||
+ ", minimal required version : " + MinVRVersion);
|
||||
@ -3039,24 +2863,6 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> {
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean sendLBRules(final VirtualRouter router, final List<LoadBalancingRule> rules, final long guestNetworkId) throws ResourceUnavailableException {
|
||||
final Commands cmds = new Commands(Command.OnError.Continue);
|
||||
createApplyLoadBalancingRulesCommands(rules, router, cmds, guestNetworkId);
|
||||
return sendCommandsToRouter(router, cmds);
|
||||
}
|
||||
|
||||
protected boolean sendPortForwardingRules(final VirtualRouter router, final List<PortForwardingRule> rules, final long guestNetworkId) throws ResourceUnavailableException {
|
||||
final Commands cmds = new Commands(Command.OnError.Continue);
|
||||
createApplyPortForwardingRulesCommands(rules, router, cmds, guestNetworkId);
|
||||
return sendCommandsToRouter(router, cmds);
|
||||
}
|
||||
|
||||
protected boolean sendStaticNatRules(final VirtualRouter router, final List<StaticNatRule> rules, final long guestNetworkId) throws ResourceUnavailableException {
|
||||
final Commands cmds = new Commands(Command.OnError.Continue);
|
||||
createApplyStaticNatRulesCommands(rules, router, cmds, guestNetworkId);
|
||||
return sendCommandsToRouter(router, cmds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<VirtualRouter> getRoutersForNetwork(final long networkId) {
|
||||
final List<DomainRouterVO> routers = _routerDao.findByNetwork(networkId);
|
||||
@ -3110,110 +2916,11 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> {
|
||||
cmds.addCommand(cmd);
|
||||
}
|
||||
|
||||
protected boolean sendFirewallRules(final VirtualRouter router, final List<FirewallRule> rules, final long guestNetworkId) throws ResourceUnavailableException {
|
||||
final Commands cmds = new Commands(Command.OnError.Continue);
|
||||
createFirewallRulesCommands(rules, router, cmds, guestNetworkId);
|
||||
return sendCommandsToRouter(router, cmds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDnsBasicZoneUpdate() {
|
||||
return _dnsBasicZoneUpdates;
|
||||
}
|
||||
|
||||
protected interface RuleApplier {
|
||||
boolean execute(Network network, VirtualRouter router) throws ResourceUnavailableException;
|
||||
}
|
||||
|
||||
protected boolean applyRules(final Network network, final List<? extends VirtualRouter> routers, final String typeString, final boolean isPodLevelException, final Long podId,
|
||||
final boolean failWhenDisconnect, final RuleApplier applier) throws ResourceUnavailableException {
|
||||
if (routers == null || routers.isEmpty()) {
|
||||
s_logger.warn("Unable to apply " + typeString + ", virtual router doesn't exist in the network " + network.getId());
|
||||
throw new ResourceUnavailableException("Unable to apply " + typeString, DataCenter.class, network.getDataCenterId());
|
||||
}
|
||||
|
||||
final DataCenter dc = _dcDao.findById(network.getDataCenterId());
|
||||
final boolean isZoneBasic = dc.getNetworkType() == NetworkType.Basic;
|
||||
|
||||
// isPodLevelException and podId is only used for basic zone
|
||||
assert !(!isZoneBasic && isPodLevelException || isZoneBasic && isPodLevelException && podId == null);
|
||||
|
||||
final List<VirtualRouter> connectedRouters = new ArrayList<VirtualRouter>();
|
||||
final List<VirtualRouter> disconnectedRouters = new ArrayList<VirtualRouter>();
|
||||
boolean result = true;
|
||||
final String msg = "Unable to apply " + typeString + " on disconnected router ";
|
||||
for (final VirtualRouter router : routers) {
|
||||
if (router.getState() == State.Running) {
|
||||
s_logger.debug("Applying " + typeString + " in network " + network);
|
||||
|
||||
if (router.isStopPending()) {
|
||||
if (_hostDao.findById(router.getHostId()).getState() == Status.Up) {
|
||||
throw new ResourceUnavailableException("Unable to process due to the stop pending router " + router.getInstanceName()
|
||||
+ " haven't been stopped after it's host coming back!", DataCenter.class, router.getDataCenterId());
|
||||
}
|
||||
s_logger.debug("Router " + router.getInstanceName() + " is stop pending, so not sending apply " + typeString + " commands to the backend");
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
result = applier.execute(network, router);
|
||||
connectedRouters.add(router);
|
||||
} catch (final AgentUnavailableException e) {
|
||||
s_logger.warn(msg + router.getInstanceName(), e);
|
||||
disconnectedRouters.add(router);
|
||||
}
|
||||
|
||||
// If rules fail to apply on one domR and not due to
|
||||
// disconnection, no need to proceed with the rest
|
||||
if (!result) {
|
||||
if (isZoneBasic && isPodLevelException) {
|
||||
throw new ResourceUnavailableException("Unable to apply " + typeString + " on router ", Pod.class, podId);
|
||||
}
|
||||
throw new ResourceUnavailableException("Unable to apply " + typeString + " on router ", DataCenter.class, router.getDataCenterId());
|
||||
}
|
||||
|
||||
} else if (router.getState() == State.Stopped || router.getState() == State.Stopping) {
|
||||
s_logger.debug("Router " + router.getInstanceName() + " is in " + router.getState() + ", so not sending apply " + typeString + " commands to the backend");
|
||||
} else {
|
||||
s_logger.warn("Unable to apply " + typeString + ", virtual router is not in the right state " + router.getState());
|
||||
if (isZoneBasic && isPodLevelException) {
|
||||
throw new ResourceUnavailableException("Unable to apply " + typeString + ", virtual router is not in the right state", Pod.class, podId);
|
||||
}
|
||||
throw new ResourceUnavailableException("Unable to apply " + typeString + ", virtual router is not in the right state", DataCenter.class, router.getDataCenterId());
|
||||
}
|
||||
}
|
||||
|
||||
if (!connectedRouters.isEmpty()) {
|
||||
if (!isZoneBasic && !disconnectedRouters.isEmpty() && disconnectedRouters.get(0).getIsRedundantRouter()) {
|
||||
// These disconnected redundant virtual routers are out of sync
|
||||
// now, stop them for synchronization
|
||||
handleSingleWorkingRedundantRouter(connectedRouters, disconnectedRouters, msg);
|
||||
}
|
||||
} else if (!disconnectedRouters.isEmpty()) {
|
||||
for (final VirtualRouter router : disconnectedRouters) {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug(msg + router.getInstanceName() + "(" + router.getId() + ")");
|
||||
}
|
||||
}
|
||||
if (isZoneBasic && isPodLevelException) {
|
||||
throw new ResourceUnavailableException(msg, Pod.class, podId);
|
||||
}
|
||||
throw new ResourceUnavailableException(msg, DataCenter.class, disconnectedRouters.get(0).getDataCenterId());
|
||||
}
|
||||
|
||||
result = true;
|
||||
if (failWhenDisconnect) {
|
||||
result = !connectedRouters.isEmpty();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
protected boolean applyStaticNat(final VirtualRouter router, final List<? extends StaticNat> rules, final long guestNetworkId) throws ResourceUnavailableException {
|
||||
final Commands cmds = new Commands(Command.OnError.Continue);
|
||||
createApplyStaticNatCommands(rules, router, cmds, guestNetworkId);
|
||||
return sendCommandsToRouter(router, cmds);
|
||||
}
|
||||
|
||||
private void createApplyStaticNatCommands(final List<? extends StaticNat> rules, final VirtualRouter router, final Commands cmds, final long guestNetworkId) {
|
||||
final List<StaticNatRuleTO> rulesTO = new ArrayList<StaticNatRuleTO>();
|
||||
if (rules != null) {
|
||||
@ -3578,4 +3285,9 @@ Configurable, StateListener<State, VirtualMachine.Event, VirtualMachine> {
|
||||
public boolean completeAggregatedExecution(final Network network, final List<DomainRouterVO> routers) throws AgentUnavailableException {
|
||||
return aggregationExecution(Action.Finish, network, routers);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean cleanupAggregatedExecution(final Network network, final List<DomainRouterVO> routers) throws AgentUnavailableException {
|
||||
return aggregationExecution(Action.Cleanup, network, routers);
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,43 +19,44 @@ package com.cloud.network.rules;
|
||||
|
||||
import org.apache.cloudstack.network.topology.NetworkTopologyVisitor;
|
||||
|
||||
import com.cloud.deploy.DeployDestination;
|
||||
import com.cloud.agent.api.PvlanSetupCommand;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
import com.cloud.vm.NicProfile;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
|
||||
public class DhcpRules extends RuleApplier {
|
||||
|
||||
private final NicProfile nic;
|
||||
private final VirtualMachineProfile profile;
|
||||
private final DeployDestination destination;
|
||||
private final boolean _isAddPvlan;
|
||||
private final NicProfile _nic;
|
||||
|
||||
public DhcpRules(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination destination) {
|
||||
super(network);
|
||||
private PvlanSetupCommand _setupCommand;
|
||||
|
||||
this.nic = nic;
|
||||
this.profile = profile;
|
||||
this.destination = destination;
|
||||
public DhcpPvlanRules(final boolean isAddPvlan, final NicProfile nic) {
|
||||
super(null);
|
||||
|
||||
_isAddPvlan = isAddPvlan;
|
||||
_nic = nic;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(final NetworkTopologyVisitor visitor, final VirtualRouter router) throws ResourceUnavailableException {
|
||||
this._router = router;
|
||||
_router = router;
|
||||
|
||||
String op = "add";
|
||||
if (!_isAddPvlan) {
|
||||
op = "delete";
|
||||
}
|
||||
|
||||
final Network network = _networkDao.findById(_nic.getNetworkId());
|
||||
final String networkTag = _networkModel.getNetworkTag(router.getHypervisorType(), network);
|
||||
|
||||
_setupCommand = PvlanSetupCommand.createDhcpSetup(op, _nic.getBroadCastUri(), networkTag, router.getInstanceName(), _nic.getMacAddress(), _nic.getIp4Address());
|
||||
|
||||
return visitor.visit(this);
|
||||
}
|
||||
|
||||
public NicProfile getNic() {
|
||||
return nic;
|
||||
}
|
||||
|
||||
public VirtualMachineProfile getProfile() {
|
||||
return profile;
|
||||
}
|
||||
|
||||
public DeployDestination getDestination() {
|
||||
return destination;
|
||||
public PvlanSetupCommand getSetupCommand() {
|
||||
return _setupCommand;
|
||||
}
|
||||
}
|
||||
@ -17,45 +17,196 @@
|
||||
|
||||
package com.cloud.network.rules;
|
||||
|
||||
import org.apache.cloudstack.network.topology.NetworkTopologyVisitor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.cloud.deploy.DeployDestination;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.cloudstack.network.topology.NetworkTopologyVisitor;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.agent.api.routing.CreateIpAliasCommand;
|
||||
import com.cloud.agent.api.routing.DnsMasqConfigCommand;
|
||||
import com.cloud.agent.api.routing.IpAliasTO;
|
||||
import com.cloud.agent.api.routing.NetworkElementCommand;
|
||||
import com.cloud.agent.api.to.DhcpTO;
|
||||
import com.cloud.agent.manager.Commands;
|
||||
import com.cloud.dc.DataCenter;
|
||||
import com.cloud.dc.DataCenter.NetworkType;
|
||||
import com.cloud.dc.DataCenterVO;
|
||||
import com.cloud.dc.Vlan;
|
||||
import com.cloud.dc.VlanVO;
|
||||
import com.cloud.exception.InsufficientAddressCapacityException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.network.Network.GuestType;
|
||||
import com.cloud.network.Networks.TrafficType;
|
||||
import com.cloud.network.addr.PublicIp;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.db.TransactionCallbackNoReturn;
|
||||
import com.cloud.utils.db.TransactionStatus;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.net.NetUtils;
|
||||
import com.cloud.vm.NicIpAlias;
|
||||
import com.cloud.vm.NicProfile;
|
||||
import com.cloud.vm.NicVO;
|
||||
import com.cloud.vm.UserVmVO;
|
||||
import com.cloud.vm.VirtualMachine;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.cloud.vm.dao.NicIpAliasVO;
|
||||
|
||||
public class DhcpSubNetRules extends RuleApplier {
|
||||
|
||||
private final NicProfile nic;
|
||||
private final VirtualMachineProfile profile;
|
||||
private final DeployDestination destination;
|
||||
private static final Logger s_logger = Logger.getLogger(DhcpSubNetRules.class);
|
||||
|
||||
public DhcpSubNetRules(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination destination) {
|
||||
private final NicProfile _nic;
|
||||
private final VirtualMachineProfile _profile;
|
||||
|
||||
private NicIpAliasVO _nicAlias;
|
||||
private String _routerAliasIp;
|
||||
|
||||
public DhcpSubNetRules(final Network network, final NicProfile nic, final VirtualMachineProfile profile) {
|
||||
super(network);
|
||||
|
||||
this.nic = nic;
|
||||
this.profile = profile;
|
||||
this.destination = destination;
|
||||
_nic = nic;
|
||||
_profile = profile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(final NetworkTopologyVisitor visitor, final VirtualRouter router) throws ResourceUnavailableException {
|
||||
this._router = router;
|
||||
_router = router;
|
||||
|
||||
final UserVmVO vm = _userVmDao.findById(_profile.getId());
|
||||
_userVmDao.loadDetails(vm);
|
||||
|
||||
//check if this is not the primary subnet.
|
||||
final NicVO domr_guest_nic =
|
||||
_nicDao.findByInstanceIdAndIpAddressAndVmtype(router.getId(), _nicDao.getIpAddress(_nic.getNetworkId(), router.getId()), VirtualMachine.Type.DomainRouter);
|
||||
//check if the router ip address and the vm ip address belong to same subnet.
|
||||
//if they do not belong to same netwoek check for the alias ips. if not create one.
|
||||
// This should happen only in case of Basic and Advanced SG enabled networks.
|
||||
if (!NetUtils.sameSubnet(domr_guest_nic.getIp4Address(), _nic.getIp4Address(), _nic.getNetmask())) {
|
||||
final List<NicIpAliasVO> aliasIps = _nicIpAliasDao.listByNetworkIdAndState(domr_guest_nic.getNetworkId(), NicIpAlias.state.active);
|
||||
boolean ipInVmsubnet = false;
|
||||
for (final NicIpAliasVO alias : aliasIps) {
|
||||
//check if any of the alias ips belongs to the Vm's subnet.
|
||||
if (NetUtils.sameSubnet(alias.getIp4Address(), _nic.getIp4Address(), _nic.getNetmask())) {
|
||||
ipInVmsubnet = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
PublicIp routerPublicIP = null;
|
||||
final DataCenter dc = _dcDao.findById(router.getDataCenterId());
|
||||
if (ipInVmsubnet == false) {
|
||||
try {
|
||||
if (_network.getTrafficType() == TrafficType.Guest && _network.getGuestType() == GuestType.Shared) {
|
||||
_podDao.findById(vm.getPodIdToDeployIn());
|
||||
final Account caller = CallContext.current().getCallingAccount();
|
||||
final List<VlanVO> vlanList = _vlanDao.listVlansByNetworkIdAndGateway(_network.getId(), _nic.getGateway());
|
||||
final List<Long> vlanDbIdList = new ArrayList<Long>();
|
||||
for (final VlanVO vlan : vlanList) {
|
||||
vlanDbIdList.add(vlan.getId());
|
||||
}
|
||||
if (dc.getNetworkType() == NetworkType.Basic) {
|
||||
routerPublicIP =
|
||||
_ipAddrMgr.assignPublicIpAddressFromVlans(router.getDataCenterId(), vm.getPodIdToDeployIn(), caller, Vlan.VlanType.DirectAttached,
|
||||
vlanDbIdList, _nic.getNetworkId(), null, false);
|
||||
} else {
|
||||
routerPublicIP =
|
||||
_ipAddrMgr.assignPublicIpAddressFromVlans(router.getDataCenterId(), null, caller, Vlan.VlanType.DirectAttached, vlanDbIdList,
|
||||
_nic.getNetworkId(), null, false);
|
||||
}
|
||||
|
||||
_routerAliasIp = routerPublicIP.getAddress().addr();
|
||||
}
|
||||
} catch (final InsufficientAddressCapacityException e) {
|
||||
s_logger.info(e.getMessage());
|
||||
s_logger.info("unable to configure dhcp for this VM.");
|
||||
return false;
|
||||
}
|
||||
//this means we did not create an IP alias on the router.
|
||||
_nicAlias = new NicIpAliasVO(domr_guest_nic.getId(), _routerAliasIp, router.getId(), CallContext.current().getCallingAccountId(), _network.getDomainId(),
|
||||
_nic.getNetworkId(), _nic.getGateway(), _nic.getNetmask());
|
||||
_nicAlias.setAliasCount((routerPublicIP.getIpMacAddress()));
|
||||
_nicIpAliasDao.persist(_nicAlias);
|
||||
|
||||
final boolean result = visitor.visit(this);
|
||||
|
||||
// Clean the routerAliasIp just to make sure it will keep an older value.
|
||||
// The rules classes area created every time a command is issued, but I want to make 100% sure
|
||||
// that the routerAliasIp won't float around.
|
||||
_routerAliasIp = null;
|
||||
|
||||
if (result == false) {
|
||||
final NicIpAliasVO ipAliasVO = _nicIpAliasDao.findByInstanceIdAndNetworkId(_network.getId(), router.getId());
|
||||
final PublicIp routerPublicIPFinal = routerPublicIP;
|
||||
Transaction.execute(new TransactionCallbackNoReturn() {
|
||||
@Override
|
||||
public void doInTransactionWithoutResult(final TransactionStatus status) {
|
||||
_nicIpAliasDao.expunge(ipAliasVO.getId());
|
||||
_ipAddressDao.unassignIpAddress(routerPublicIPFinal.getId());
|
||||
}
|
||||
});
|
||||
throw new CloudRuntimeException("failed to configure ip alias on the router as a part of dhcp config");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return visitor.visit(this);
|
||||
}
|
||||
|
||||
public NicProfile getNic() {
|
||||
return nic;
|
||||
public NicIpAliasVO getNicAlias() {
|
||||
return _nicAlias;
|
||||
}
|
||||
|
||||
public VirtualMachineProfile getProfile() {
|
||||
return profile;
|
||||
public String getRouterAliasIp() {
|
||||
return _routerAliasIp;
|
||||
}
|
||||
|
||||
public DeployDestination getDestination() {
|
||||
return destination;
|
||||
public void createIpAlias(final VirtualRouter router, final List<IpAliasTO> ipAliasTOs, final Long networkid, final Commands cmds) {
|
||||
|
||||
final String routerip = _routerControlHelper.getRouterIpInNetwork(networkid, router.getId());
|
||||
final DataCenterVO dcVo = _dcDao.findById(router.getDataCenterId());
|
||||
final CreateIpAliasCommand ipaliasCmd = new CreateIpAliasCommand(routerip, ipAliasTOs);
|
||||
ipaliasCmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, _routerControlHelper.getRouterControlIp(router.getId()));
|
||||
ipaliasCmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName());
|
||||
ipaliasCmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, routerip);
|
||||
ipaliasCmd.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString());
|
||||
|
||||
cmds.addCommand("ipalias", ipaliasCmd);
|
||||
}
|
||||
|
||||
public void configDnsMasq(final VirtualRouter router, final Network network, final Commands cmds) {
|
||||
final DataCenterVO dcVo = _dcDao.findById(router.getDataCenterId());
|
||||
final List<NicIpAliasVO> ipAliasVOList = _nicIpAliasDao.listByNetworkIdAndState(network.getId(), NicIpAlias.state.active);
|
||||
final List<DhcpTO> ipList = new ArrayList<DhcpTO>();
|
||||
|
||||
final NicVO router_guest_nic = _nicDao.findByNtwkIdAndInstanceId(network.getId(), router.getId());
|
||||
final String cidr = NetUtils.getCidrFromGatewayAndNetmask(router_guest_nic.getGateway(), router_guest_nic.getNetmask());
|
||||
final String[] cidrPair = cidr.split("\\/");
|
||||
final String cidrAddress = cidrPair[0];
|
||||
final long cidrSize = Long.parseLong(cidrPair[1]);
|
||||
final String startIpOfSubnet = NetUtils.getIpRangeStartIpFromCidr(cidrAddress, cidrSize);
|
||||
|
||||
ipList.add(new DhcpTO(router_guest_nic.getIp4Address(), router_guest_nic.getGateway(), router_guest_nic.getNetmask(), startIpOfSubnet));
|
||||
for (final NicIpAliasVO ipAliasVO : ipAliasVOList) {
|
||||
final DhcpTO DhcpTO = new DhcpTO(ipAliasVO.getIp4Address(), ipAliasVO.getGateway(), ipAliasVO.getNetmask(), ipAliasVO.getStartIpOfSubnet());
|
||||
if (s_logger.isTraceEnabled()) {
|
||||
s_logger.trace("configDnsMasq : adding ip {" + DhcpTO.getGateway() + ", " + DhcpTO.getNetmask() + ", " + DhcpTO.getRouterIp() + ", " +
|
||||
DhcpTO.getStartIpOfSubnet() + "}");
|
||||
}
|
||||
ipList.add(DhcpTO);
|
||||
ipAliasVO.setVmId(router.getId());
|
||||
}
|
||||
_dcDao.findById(router.getDataCenterId());
|
||||
final DnsMasqConfigCommand dnsMasqConfigCmd = new DnsMasqConfigCommand(ipList);
|
||||
dnsMasqConfigCmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, _routerControlHelper.getRouterControlIp(router.getId()));
|
||||
dnsMasqConfigCmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName());
|
||||
dnsMasqConfigCmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, _routerControlHelper.getRouterIpInNetwork(network.getId(), router.getId()));
|
||||
dnsMasqConfigCmd.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString());
|
||||
cmds.addCommand("dnsMasqConfig", dnsMasqConfigCmd);
|
||||
}
|
||||
}
|
||||
@ -26,16 +26,20 @@ import com.cloud.agent.manager.Commands;
|
||||
import com.cloud.dc.DataCenter.NetworkType;
|
||||
import com.cloud.dc.DataCenterVO;
|
||||
import com.cloud.dc.dao.DataCenterDao;
|
||||
import com.cloud.dc.dao.HostPodDao;
|
||||
import com.cloud.dc.dao.VlanDao;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.network.IpAddressManager;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.network.NetworkModel;
|
||||
import com.cloud.network.dao.FirewallRulesDao;
|
||||
import com.cloud.network.dao.IPAddressDao;
|
||||
import com.cloud.network.dao.LoadBalancerDao;
|
||||
import com.cloud.network.dao.NetworkDao;
|
||||
import com.cloud.network.lb.LoadBalancingRulesManager;
|
||||
import com.cloud.network.router.NEWVirtualNetworkApplianceManager;
|
||||
import com.cloud.network.router.NetworkGeneralHelper;
|
||||
import com.cloud.network.router.RouterControlHelper;
|
||||
import com.cloud.network.router.VirtualNetworkApplianceManager;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
import com.cloud.network.vpc.VpcManager;
|
||||
import com.cloud.network.vpc.dao.VpcDao;
|
||||
@ -49,11 +53,12 @@ import com.cloud.vm.NicVO;
|
||||
import com.cloud.vm.VirtualMachineManager;
|
||||
import com.cloud.vm.dao.DomainRouterDao;
|
||||
import com.cloud.vm.dao.NicDao;
|
||||
import com.cloud.vm.dao.NicIpAliasDao;
|
||||
import com.cloud.vm.dao.UserVmDao;
|
||||
|
||||
public abstract class RuleApplier {
|
||||
|
||||
protected NEWVirtualNetworkApplianceManager _applianceManager;
|
||||
protected VirtualNetworkApplianceManager _applianceManager;
|
||||
|
||||
protected NetworkModel _networkModel;
|
||||
|
||||
@ -85,10 +90,20 @@ public abstract class RuleApplier {
|
||||
|
||||
protected VpcDao _vpcDao;
|
||||
|
||||
protected NicIpAliasDao _nicIpAliasDao;
|
||||
|
||||
protected HostPodDao _podDao;
|
||||
|
||||
protected VlanDao _vlanDao;
|
||||
|
||||
protected IPAddressDao _ipAddressDao;
|
||||
|
||||
protected VpcManager _vpcMgr;
|
||||
|
||||
protected VirtualMachineManager _itMgr;
|
||||
|
||||
protected IpAddressManager _ipAddrMgr;
|
||||
|
||||
protected Network _network;
|
||||
|
||||
protected VirtualRouter _router;
|
||||
@ -111,7 +126,7 @@ public abstract class RuleApplier {
|
||||
return _router;
|
||||
}
|
||||
|
||||
public NEWVirtualNetworkApplianceManager getApplianceManager() {
|
||||
public VirtualNetworkApplianceManager getApplianceManager() {
|
||||
return _applianceManager;
|
||||
}
|
||||
|
||||
|
||||
@ -23,18 +23,23 @@ import javax.inject.Inject;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
|
||||
import com.cloud.dc.dao.DataCenterDao;
|
||||
import com.cloud.dc.dao.HostPodDao;
|
||||
import com.cloud.dc.dao.VlanDao;
|
||||
import com.cloud.deploy.DeployDestination;
|
||||
import com.cloud.network.IpAddressManager;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.network.NetworkModel;
|
||||
import com.cloud.network.PublicIpAddress;
|
||||
import com.cloud.network.VpnUser;
|
||||
import com.cloud.network.dao.FirewallRulesDao;
|
||||
import com.cloud.network.dao.IPAddressDao;
|
||||
import com.cloud.network.dao.LoadBalancerDao;
|
||||
import com.cloud.network.dao.NetworkDao;
|
||||
import com.cloud.network.lb.LoadBalancingRule;
|
||||
import com.cloud.network.lb.LoadBalancingRulesManager;
|
||||
import com.cloud.network.router.NetworkGeneralHelper;
|
||||
import com.cloud.network.router.RouterControlHelper;
|
||||
import com.cloud.network.router.VirtualNetworkApplianceManager;
|
||||
import com.cloud.network.vpc.NetworkACLItem;
|
||||
import com.cloud.network.vpc.VpcManager;
|
||||
import com.cloud.network.vpc.dao.VpcDao;
|
||||
@ -47,6 +52,7 @@ import com.cloud.vm.VirtualMachineManager;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.cloud.vm.dao.DomainRouterDao;
|
||||
import com.cloud.vm.dao.NicDao;
|
||||
import com.cloud.vm.dao.NicIpAliasDao;
|
||||
import com.cloud.vm.dao.UserVmDao;
|
||||
|
||||
public class VirtualNetworkApplianceFactory {
|
||||
@ -102,9 +108,27 @@ public class VirtualNetworkApplianceFactory {
|
||||
@Inject
|
||||
protected FirewallRulesDao _rulesDao;
|
||||
|
||||
@Inject
|
||||
protected NicIpAliasDao _nicIpAliasDao;
|
||||
|
||||
@Inject
|
||||
protected HostPodDao _podDao;
|
||||
|
||||
@Inject
|
||||
protected VlanDao _vlanDao;
|
||||
|
||||
@Inject
|
||||
protected IPAddressDao _ipAddressDao;
|
||||
|
||||
@Inject
|
||||
protected RouterControlHelper _routerControlHelper;
|
||||
|
||||
@Inject
|
||||
protected VirtualNetworkApplianceManager _applianceManager;
|
||||
|
||||
@Inject
|
||||
protected IpAddressManager _ipAddrMgr;
|
||||
|
||||
@Inject
|
||||
protected NetworkGeneralHelper _networkHelper;
|
||||
|
||||
@ -254,4 +278,30 @@ public class VirtualNetworkApplianceFactory {
|
||||
|
||||
return networkAclsRules;
|
||||
}
|
||||
|
||||
public DhcpSubNetRules createDhcpSubNetRules(final Network network, final NicProfile nic, final VirtualMachineProfile profile) {
|
||||
DhcpSubNetRules subNetRules = new DhcpSubNetRules(network, nic, profile);
|
||||
|
||||
initBeans(subNetRules);
|
||||
|
||||
subNetRules._vpcDao = _vpcDao;
|
||||
subNetRules._userVmDao = _userVmDao;
|
||||
subNetRules._podDao = _podDao;
|
||||
subNetRules._vlanDao = _vlanDao;
|
||||
subNetRules._nicIpAliasDao = _nicIpAliasDao;
|
||||
subNetRules._ipAddrMgr = _ipAddrMgr;
|
||||
subNetRules._ipAddressDao = _ipAddressDao;
|
||||
|
||||
return subNetRules;
|
||||
}
|
||||
|
||||
public DhcpPvlanRules createDhcpPvlanRules(final boolean isAddPvlan, final NicProfile nic) {
|
||||
DhcpPvlanRules pvlanRules = new DhcpPvlanRules(isAddPvlan, nic);
|
||||
|
||||
initBeans(pvlanRules);
|
||||
|
||||
pvlanRules._networkDao = _networkDao;
|
||||
|
||||
return pvlanRules;
|
||||
}
|
||||
}
|
||||
@ -36,6 +36,7 @@ import com.cloud.network.Network;
|
||||
import com.cloud.network.PublicIpAddress;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
import com.cloud.network.rules.DhcpEntryRules;
|
||||
import com.cloud.network.rules.DhcpSubNetRules;
|
||||
import com.cloud.network.rules.NetworkAclsRules;
|
||||
import com.cloud.network.rules.NicPlugInOutRules;
|
||||
import com.cloud.network.rules.RuleApplier;
|
||||
@ -57,6 +58,36 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
|
||||
@Qualifier("advancedNetworkVisitor")
|
||||
protected AdvancedNetworkVisitor _advancedVisitor;
|
||||
|
||||
@Override
|
||||
public boolean setupDhcpForPvlan(final boolean isAddPvlan, final DomainRouterVO router, final Long hostId, final NicProfile nic) throws ResourceUnavailableException {
|
||||
|
||||
if (!nic.getBroadCastUri().getScheme().equals("pvlan")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
DhcpPvlanRules pvlanRules = _virtualNetworkApplianceFactory.createDhcpPvlanRules(isAddPvlan, nic);
|
||||
|
||||
return pvlanRules.accept(_advancedVisitor, router);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean configDhcpForSubnet(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest,
|
||||
final List<DomainRouterVO> routers) throws ResourceUnavailableException {
|
||||
|
||||
s_logger.debug("CONFIG DHCP FOR SUBNETS RULES");
|
||||
|
||||
// Asuming we have only one router per network For Now.
|
||||
final DomainRouterVO router = routers.get(0);
|
||||
if (router.getState() != State.Running) {
|
||||
s_logger.warn("Failed to configure dhcp: router not in running state");
|
||||
throw new ResourceUnavailableException("Unable to assign ip addresses, domR is not in right state " + router.getState(), DataCenter.class, network.getDataCenterId());
|
||||
}
|
||||
|
||||
DhcpSubNetRules subNetRules = _virtualNetworkApplianceFactory.createDhcpSubNetRules(network, nic, profile);
|
||||
|
||||
return subNetRules.accept(_advancedVisitor, router);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applyUserData(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final List<DomainRouterVO> routers)
|
||||
throws ResourceUnavailableException {
|
||||
@ -92,12 +123,13 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
|
||||
@Override
|
||||
public boolean associatePublicIP(final Network network, final List<? extends PublicIpAddress> ipAddresses, final List<? extends VirtualRouter> routers)
|
||||
throws ResourceUnavailableException {
|
||||
|
||||
if (ipAddresses == null || ipAddresses.isEmpty()) {
|
||||
s_logger.debug("No ip association rules to be applied for network " + network.getId());
|
||||
return true;
|
||||
}
|
||||
|
||||
//only one router is supported in VPC now
|
||||
// only one router is supported in VPC now
|
||||
VirtualRouter router = routers.get(0);
|
||||
|
||||
if (router.getVpcId() == null) {
|
||||
@ -127,6 +159,7 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
|
||||
@Override
|
||||
public boolean applyNetworkACLs(final Network network, final List<? extends NetworkACLItem> rules, final List<? extends VirtualRouter> routers, final boolean isPrivateGateway)
|
||||
throws ResourceUnavailableException {
|
||||
|
||||
if (rules == null || rules.isEmpty()) {
|
||||
s_logger.debug("No network ACLs to be applied for network " + network.getId());
|
||||
return true;
|
||||
@ -145,22 +178,21 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applyRules(final Network network, final List<? extends VirtualRouter> routers, final String typeString, final boolean isPodLevelException, final Long podId, final boolean failWhenDisconnect,
|
||||
final RuleApplierWrapper<RuleApplier> ruleApplierWrapper)
|
||||
throws ResourceUnavailableException {
|
||||
public boolean applyRules(final Network network, final List<? extends VirtualRouter> routers, final String typeString, final boolean isPodLevelException, final Long podId,
|
||||
final boolean failWhenDisconnect, final RuleApplierWrapper<RuleApplier> ruleApplierWrapper) throws ResourceUnavailableException {
|
||||
|
||||
if (routers == null || routers.isEmpty()) {
|
||||
s_logger.warn("Unable to apply " + typeString + ", virtual router doesn't exist in the network " + network.getId());
|
||||
throw new ResourceUnavailableException("Unable to apply " + typeString, DataCenter.class, network.getDataCenterId());
|
||||
}
|
||||
|
||||
RuleApplier ruleApplier = ruleApplierWrapper.getRuleType();
|
||||
RuleApplier ruleApplier = ruleApplierWrapper.getRuleType();
|
||||
|
||||
final DataCenter dc = _dcDao.findById(network.getDataCenterId());
|
||||
final boolean isZoneBasic = (dc.getNetworkType() == NetworkType.Basic);
|
||||
final boolean isZoneBasic = dc.getNetworkType() == NetworkType.Basic;
|
||||
|
||||
// isPodLevelException and podId is only used for basic zone
|
||||
assert !((!isZoneBasic && isPodLevelException) || (isZoneBasic && isPodLevelException && podId == null));
|
||||
assert !(!isZoneBasic && isPodLevelException || isZoneBasic && isPodLevelException && podId == null);
|
||||
|
||||
final List<VirtualRouter> connectedRouters = new ArrayList<VirtualRouter>();
|
||||
final List<VirtualRouter> disconnectedRouters = new ArrayList<VirtualRouter>();
|
||||
@ -172,8 +204,8 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
|
||||
|
||||
if (router.isStopPending()) {
|
||||
if (_hostDao.findById(router.getHostId()).getState() == Status.Up) {
|
||||
throw new ResourceUnavailableException("Unable to process due to the stop pending router " + router.getInstanceName() +
|
||||
" haven't been stopped after it's host coming back!", DataCenter.class, router.getDataCenterId());
|
||||
throw new ResourceUnavailableException("Unable to process due to the stop pending router " + router.getInstanceName()
|
||||
+ " haven't been stopped after it's host coming back!", DataCenter.class, router.getDataCenterId());
|
||||
}
|
||||
s_logger.debug("Router " + router.getInstanceName() + " is stop pending, so not sending apply " + typeString + " commands to the backend");
|
||||
continue;
|
||||
@ -188,7 +220,8 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
|
||||
disconnectedRouters.add(router);
|
||||
}
|
||||
|
||||
//If rules fail to apply on one domR and not due to disconnection, no need to proceed with the rest
|
||||
// If rules fail to apply on one domR and not due to
|
||||
// disconnection, no need to proceed with the rest
|
||||
if (!result) {
|
||||
if (isZoneBasic && isPodLevelException) {
|
||||
throw new ResourceUnavailableException("Unable to apply " + typeString + " on router ", Pod.class, podId);
|
||||
@ -203,15 +236,16 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology {
|
||||
if (isZoneBasic && isPodLevelException) {
|
||||
throw new ResourceUnavailableException("Unable to apply " + typeString + ", virtual router is not in the right state", Pod.class, podId);
|
||||
}
|
||||
throw new ResourceUnavailableException("Unable to apply " + typeString + ", virtual router is not in the right state", DataCenter.class,
|
||||
router.getDataCenterId());
|
||||
throw new ResourceUnavailableException("Unable to apply " + typeString + ", virtual router is not in the right state", DataCenter.class, router.getDataCenterId());
|
||||
}
|
||||
}
|
||||
|
||||
if (!connectedRouters.isEmpty()) {
|
||||
if (!isZoneBasic && !disconnectedRouters.isEmpty() && disconnectedRouters.get(0).getIsRedundantRouter()) {
|
||||
// These disconnected redundant virtual routers are out of sync now, stop them for synchronization
|
||||
//[FIXME] handleSingleWorkingRedundantRouter(connectedRouters, disconnectedRouters, msg);
|
||||
// These disconnected redundant virtual routers are out of sync
|
||||
// now, stop them for synchronization
|
||||
// [FIXME] handleSingleWorkingRedundantRouter(connectedRouters,
|
||||
// disconnectedRouters, msg);
|
||||
}
|
||||
} else if (!disconnectedRouters.isEmpty()) {
|
||||
for (final VirtualRouter router : disconnectedRouters) {
|
||||
|
||||
@ -17,12 +17,16 @@
|
||||
|
||||
package org.apache.cloudstack.network.topology;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
import com.cloud.agent.api.PvlanSetupCommand;
|
||||
import com.cloud.agent.api.routing.IpAliasTO;
|
||||
import com.cloud.agent.manager.Commands;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.network.Network;
|
||||
@ -39,10 +43,13 @@ import com.cloud.network.vpc.NetworkACLItem;
|
||||
import com.cloud.vm.NicVO;
|
||||
import com.cloud.vm.UserVmVO;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.cloud.vm.dao.NicIpAliasVO;
|
||||
|
||||
@Component
|
||||
public class AdvancedNetworkVisitor extends BasicNetworkVisitor {
|
||||
|
||||
private static final Logger s_logger = Logger.getLogger(AdvancedNetworkVisitor.class);
|
||||
|
||||
@Override
|
||||
public boolean visit(final UserdataPwdRules userdata) throws ResourceUnavailableException {
|
||||
final VirtualRouter router = userdata.getRouter();
|
||||
@ -119,11 +126,38 @@ public class AdvancedNetworkVisitor extends BasicNetworkVisitor {
|
||||
|
||||
@Override
|
||||
public boolean visit(final DhcpPvlanRules dhcp) throws ResourceUnavailableException {
|
||||
return false;
|
||||
final VirtualRouter router = dhcp.getRouter();
|
||||
final PvlanSetupCommand setupCommand = dhcp.getSetupCommand();
|
||||
|
||||
// In fact we send command to the host of router, we're not programming router but the host
|
||||
Commands cmds = new Commands(Command.OnError.Stop);
|
||||
cmds.addCommand(setupCommand);
|
||||
|
||||
try {
|
||||
return _applianceManager.sendCommandsToRouter(router, cmds);
|
||||
} catch (final ResourceUnavailableException e) {
|
||||
s_logger.warn("Timed Out", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(final DhcpSubNetRules subnet) throws ResourceUnavailableException {
|
||||
return false;
|
||||
final VirtualRouter router = subnet.getRouter();
|
||||
final Network network = subnet.getNetwork();
|
||||
final NicIpAliasVO nicAlias = subnet.getNicAlias();
|
||||
final String routerAliasIp = subnet.getRouterAliasIp();
|
||||
|
||||
final Commands cmds = new Commands(Command.OnError.Stop);
|
||||
|
||||
final List<IpAliasTO> ipaliasTo = new ArrayList<IpAliasTO>();
|
||||
ipaliasTo.add(new IpAliasTO(routerAliasIp, nicAlias.getNetmask(), nicAlias.getAliasCount().toString()));
|
||||
|
||||
subnet.createIpAlias(router, ipaliasTo, nicAlias.getNetworkId(), cmds);
|
||||
|
||||
//also add the required configuration to the dnsmasq for supporting dhcp and dns on the new ip.
|
||||
subnet.configDnsMasq(router, network, cmds);
|
||||
|
||||
return _applianceManager.sendCommandsToRouter(router, cmds);
|
||||
}
|
||||
}
|
||||
@ -109,10 +109,16 @@ public class BasicNetworkTopology implements NetworkTopology {
|
||||
throw new CloudRuntimeException("applyNetworkACLs not implemented in Basic Network Topology.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setupDhcpForPvlan(final boolean add, final DomainRouterVO router, final Long hostId, final NicProfile nic) throws ResourceUnavailableException {
|
||||
throw new CloudRuntimeException("setupDhcpForPvlan not implemented in Basic Network Topology.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean configDhcpForSubnet(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest,
|
||||
final List<DomainRouterVO> routers) throws ResourceUnavailableException {
|
||||
return false;
|
||||
|
||||
throw new CloudRuntimeException("configDhcpForSubnet not implemented in Basic Network Topology.");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -32,8 +32,10 @@ import com.cloud.network.Network;
|
||||
import com.cloud.network.PublicIpAddress;
|
||||
import com.cloud.network.VpnUser;
|
||||
import com.cloud.network.lb.LoadBalancingRule;
|
||||
import com.cloud.network.router.VirtualNetworkApplianceManager;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
import com.cloud.network.rules.DhcpEntryRules;
|
||||
import com.cloud.network.rules.DhcpSubNetRules;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.network.rules.FirewallRule.Purpose;
|
||||
import com.cloud.network.rules.FirewallRules;
|
||||
@ -68,7 +70,7 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor {
|
||||
}
|
||||
|
||||
@Inject
|
||||
protected NEWVirtualNetworkApplianceManager _applianceManager;
|
||||
protected VirtualNetworkApplianceManager _applianceManager;
|
||||
|
||||
@Override
|
||||
public boolean visit(final StaticNatRules nat) throws ResourceUnavailableException {
|
||||
@ -242,12 +244,12 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor {
|
||||
|
||||
@Override
|
||||
public boolean visit(final DhcpPvlanRules vpn) throws ResourceUnavailableException {
|
||||
return false;
|
||||
throw new CloudRuntimeException("DhcpPvlanRules not implemented in Basic Network Topology.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(final VpnRules userdata) throws ResourceUnavailableException {
|
||||
return false;
|
||||
public boolean visit(final DhcpSubNetRules vpn) throws ResourceUnavailableException {
|
||||
throw new CloudRuntimeException("DhcpSubNetRules not implemented in Basic Network Topology.");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -44,19 +44,22 @@ public interface NetworkTopology {
|
||||
|
||||
NicProfile retrieveControlNic(final VirtualMachineProfile profile);
|
||||
|
||||
boolean configDhcpForSubnet(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final List<DomainRouterVO> routers)
|
||||
throws ResourceUnavailableException;
|
||||
|
||||
boolean applyDhcpEntry(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final List<DomainRouterVO> routers)
|
||||
throws ResourceUnavailableException;
|
||||
|
||||
// ====== USER FOR VPC ONLY ====== //
|
||||
|
||||
boolean setupDhcpForPvlan(final boolean add, final DomainRouterVO router, final Long hostId, final NicProfile nic) throws ResourceUnavailableException;
|
||||
|
||||
boolean configDhcpForSubnet(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final List<DomainRouterVO> routers)
|
||||
throws ResourceUnavailableException;
|
||||
|
||||
boolean applyNetworkACLs(final Network network, final List<? extends NetworkACLItem> rules, final List<? extends VirtualRouter> routers, final boolean isPrivateGateway)
|
||||
throws ResourceUnavailableException;
|
||||
|
||||
// ====== USER FOR GUEST NETWORK AND VCP ====== //
|
||||
|
||||
boolean applyDhcpEntry(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final List<DomainRouterVO> routers)
|
||||
throws ResourceUnavailableException;
|
||||
|
||||
boolean applyUserData(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final List<DomainRouterVO> routers)
|
||||
throws ResourceUnavailableException;
|
||||
|
||||
|
||||
@ -19,6 +19,7 @@ package org.apache.cloudstack.network.topology;
|
||||
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.network.rules.DhcpRules;
|
||||
import com.cloud.network.rules.DhcpSubNetRules;
|
||||
import com.cloud.network.rules.FirewallRules;
|
||||
import com.cloud.network.rules.IpAssociationRules;
|
||||
import com.cloud.network.rules.LoadBalancingRules;
|
||||
@ -69,6 +70,7 @@ public abstract class NetworkTopologyVisitor {
|
||||
|
||||
public abstract boolean visit(DhcpPvlanRules vpn) throws ResourceUnavailableException;
|
||||
|
||||
public abstract boolean visit(DhcpSubNetRules vpn) throws ResourceUnavailableException;
|
||||
public abstract boolean visit(DhcpSubNetRules subnet) throws ResourceUnavailableException;
|
||||
|
||||
public abstract boolean visit(NicPlugInOutRules nicPlugInOutRules) throws ResourceUnavailableException;
|
||||
}
|
||||
@ -27,7 +27,7 @@ import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd;
|
||||
import org.apache.cloudstack.api.command.admin.router.UpgradeRouterTemplateCmd;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.cloud.deploy.DeployDestination;
|
||||
import com.cloud.agent.manager.Commands;
|
||||
import com.cloud.exception.AgentUnavailableException;
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.InsufficientCapacityException;
|
||||
@ -45,22 +45,12 @@ import com.cloud.user.Account;
|
||||
import com.cloud.user.User;
|
||||
import com.cloud.utils.component.ManagerBase;
|
||||
import com.cloud.vm.DomainRouterVO;
|
||||
import com.cloud.vm.NicProfile;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
|
||||
@Component
|
||||
@Local(value = {VpcVirtualNetworkApplianceManager.class, VpcVirtualNetworkApplianceService.class})
|
||||
public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implements VpcVirtualNetworkApplianceManager, VpcVirtualNetworkApplianceService {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see com.cloud.network.router.VirtualNetworkApplianceManager#sendSshKeysToHost(java.lang.Long, java.lang.String, java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public boolean sendSshKeysToHost(final Long hostId, final String pubKey, final String prvKey) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see com.cloud.network.router.VirtualNetworkApplianceManager#startRemoteAccessVpn(com.cloud.network.Network, com.cloud.network.RemoteAccessVpn, java.util.List)
|
||||
*/
|
||||
@ -88,15 +78,6 @@ public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implement
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see com.cloud.network.router.VirtualNetworkApplianceManager#applyVpnUsers(com.cloud.network.Network, java.util.List, java.util.List)
|
||||
*/
|
||||
@Override
|
||||
public String[] applyVpnUsers(final Network network, final List<? extends VpnUser> users, final List<DomainRouterVO> routers) throws ResourceUnavailableException {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see com.cloud.network.router.VirtualNetworkApplianceManager#stop(com.cloud.network.router.VirtualRouter, boolean, com.cloud.user.User, com.cloud.user.Account)
|
||||
*/
|
||||
@ -115,12 +96,6 @@ public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implement
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean configDhcpForSubnet(final Network network, final NicProfile nic, final VirtualMachineProfile uservm, final DeployDestination dest, final List<DomainRouterVO> routers)
|
||||
throws ResourceUnavailableException {
|
||||
return false; //To change body of implemented methods use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeDhcpSupportForSubnet(final Network network, final List<DomainRouterVO> routers) throws ResourceUnavailableException {
|
||||
return false; //To change body of implemented methods use File | Settings | File Templates.
|
||||
@ -296,12 +271,6 @@ public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implement
|
||||
return null; //To change body of implemented methods use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setupDhcpForPvlan(final boolean add, final DomainRouterVO router, final Long hostId, final NicProfile nic) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean prepareAggregatedExecution(final Network network, final List<DomainRouterVO> routers) throws AgentUnavailableException {
|
||||
return true; //To change body of implemented methods use File | Settings | File Templates.
|
||||
@ -329,4 +298,11 @@ public class MockVpcVirtualNetworkApplianceManager extends ManagerBase implement
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean sendCommandsToRouter(final VirtualRouter router, final Commands cmds)
|
||||
throws AgentUnavailableException {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user