adding password to router rules; moving the advance code to the advance net topology.

Conflicts:
	server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
	server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
This commit is contained in:
Wilder Rodrigues 2014-07-15 15:56:02 +02:00
parent 514beef30e
commit b14f42665e
7 changed files with 104 additions and 32 deletions

View File

@ -727,7 +727,11 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
userVmVO.setUpdateParameters(true);
_userVmDao.update(userVmVO.getId(), userVmVO);
return true;
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
return networkTopology.savePasswordToRouter(network, nic, uservm, routers);
}
@Override

View File

@ -19,10 +19,16 @@ package com.cloud.network.rules;
import org.apache.cloudstack.network.topology.NetworkTopologyVisitor;
import com.cloud.agent.api.routing.NetworkElementCommand;
import com.cloud.agent.api.routing.SavePasswordCommand;
import com.cloud.agent.manager.Commands;
import com.cloud.dc.DataCenterVO;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.Network;
import com.cloud.network.router.VirtualRouter;
import com.cloud.utils.PasswordGenerator;
import com.cloud.vm.NicProfile;
import com.cloud.vm.NicVO;
import com.cloud.vm.VirtualMachineProfile;
public class PasswordToRouterRules extends RuleApplier {
@ -30,6 +36,8 @@ public class PasswordToRouterRules extends RuleApplier {
private final NicProfile nic;
private final VirtualMachineProfile profile;
private NicVO nicVo;
public PasswordToRouterRules(final Network network, final NicProfile nic, final VirtualMachineProfile profile) {
super(network);
@ -40,15 +48,36 @@ public class PasswordToRouterRules extends RuleApplier {
@Override
public boolean accept(final NetworkTopologyVisitor visitor, final VirtualRouter router) throws ResourceUnavailableException {
this.router = router;
// for basic zone, send vm data/password information only to the router in the same pod
nicVo = nicDao.findById(nic.getId());
return visitor.visit(this);
}
public NicProfile getNic() {
return nic;
public 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, routerControlHelper.getRouterControlIp(router.getId()));
cmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, routerControlHelper.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);
}
}
public VirtualMachineProfile getProfile() {
return profile;
}
public NicVO getNicVo() {
return nicVo;
}
}

View File

@ -35,7 +35,9 @@ import com.cloud.network.lb.LoadBalancingRulesManager;
import com.cloud.network.router.NEWVirtualNetworkApplianceManager;
import com.cloud.network.router.RouterControlHelper;
import com.cloud.offerings.dao.NetworkOfferingDao;
import com.cloud.vm.NicProfile;
import com.cloud.vm.VirtualMachineManager;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.dao.DomainRouterDao;
import com.cloud.vm.dao.NicDao;
@ -142,4 +144,12 @@ public class VirtualNetworkApplianceFactory {
return vpnRules;
}
public PasswordToRouterRules createPasswordToRouterRules(final Network network, final NicProfile nic, final VirtualMachineProfile profile) {
PasswordToRouterRules routerRules = new PasswordToRouterRules(network, nic, profile);
initBeans(routerRules);
return routerRules;
}
}

View File

@ -20,6 +20,10 @@ package org.apache.cloudstack.network.topology;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import com.cloud.dc.DataCenter;
import com.cloud.deploy.DeployDestination;
import com.cloud.exception.ConcurrentOperationException;
@ -38,23 +42,18 @@ import com.cloud.vm.VirtualMachineProfile.Param;
public class AdvancedNetworkTopology implements NetworkTopology {
@Override
public List<DomainRouterVO> findOrDeployVirtualRouterInGuestNetwork(
final Network guestNetwork, final DeployDestination dest, final Account owner,
final boolean isRedundant, final Map<Param, Object> params)
throws ConcurrentOperationException, InsufficientCapacityException,
ResourceUnavailableException {
public List<DomainRouterVO> findOrDeployVirtualRouterInGuestNetwork(final Network guestNetwork, final DeployDestination dest, final Account owner, final boolean isRedundant,
final Map<Param, Object> params) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
return null;
}
@Override
public StringBuilder createGuestBootLoadArgs(final NicProfile guestNic,
final String defaultDns1, final String defaultDns2, final DomainRouterVO router) {
public StringBuilder createGuestBootLoadArgs(final NicProfile guestNic, final String defaultDns1, final String defaultDns2, final DomainRouterVO router) {
return null;
}
@Override
public String retrieveGuestDhcpRange(final NicProfile guestNic,
final Network guestNetwork, final DataCenter dc) {
public String retrieveGuestDhcpRange(final NicProfile guestNic, final Network guestNetwork, final DataCenter dc) {
return null;
}
@ -64,32 +63,26 @@ public class AdvancedNetworkTopology implements NetworkTopology {
}
@Override
public boolean configDhcpForSubnet(final Network network, final NicProfile nic,
final VirtualMachineProfile profile, final DeployDestination dest,
public boolean configDhcpForSubnet(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest,
final List<DomainRouterVO> routers) throws ResourceUnavailableException {
return false;
}
@Override
public boolean applyDhcpEntry(final Network network, final NicProfile nic,
final VirtualMachineProfile profile, final DeployDestination dest,
public boolean applyDhcpEntry(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest,
final List<DomainRouterVO> routers) throws ResourceUnavailableException {
return false;
}
@Override
public boolean applyUserData(final Network network, final NicProfile nic,
final VirtualMachineProfile profile, final DeployDestination dest,
final List<DomainRouterVO> routers) throws ResourceUnavailableException {
public boolean applyUserData(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final List<DomainRouterVO> routers)
throws ResourceUnavailableException {
return false;
}
@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 RuleApplier applier)
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 RuleApplier applier) throws ResourceUnavailableException {
AdvancedNetworkVisitor visitor = new AdvancedNetworkVisitor(this);
applier.accept(visitor, null);
@ -98,10 +91,15 @@ public class AdvancedNetworkTopology implements NetworkTopology {
}
@Override
public boolean sendCommandsToRouter(VirtualRouter router,
List<LoadBalancingRule> rules, long id) {
public boolean sendCommandsToRouter(final VirtualRouter router, final List<LoadBalancingRule> rules, final long id) {
// TODO Auto-generated method stub
return false;
}
private static final Logger s_logger = Logger.getLogger(AdvancedNetworkTopology.class);
@Autowired
@Qualifier("advancedNetworkVisitor")
protected AdvancedNetworkVisitor advancedVisitor;
}

View File

@ -47,6 +47,7 @@ import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.FirewallRules;
import com.cloud.network.rules.IpAssociationRules;
import com.cloud.network.rules.LoadBalancingRules;
import com.cloud.network.rules.PasswordToRouterRules;
import com.cloud.network.rules.RuleApplier;
import com.cloud.network.rules.RuleApplierWrapper;
import com.cloud.network.rules.StaticNat;
@ -56,9 +57,11 @@ import com.cloud.network.rules.VpnRules;
import com.cloud.user.Account;
import com.cloud.vm.DomainRouterVO;
import com.cloud.vm.NicProfile;
import com.cloud.vm.UserVmVO;
import com.cloud.vm.VirtualMachine.State;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.VirtualMachineProfile.Param;
import com.cloud.vm.dao.UserVmDao;
public class BasicNetworkTopology implements NetworkTopology {
@ -71,16 +74,15 @@ public class BasicNetworkTopology implements NetworkTopology {
@Qualifier("basicNetworkVisitor")
protected BasicNetworkVisitor basicVisitor;
@Autowired
@Qualifier("advancedNetworkVisitor")
protected AdvancedNetworkVisitor advancedVisitor;
@Inject
protected DataCenterDao _dcDao;
@Inject
protected HostDao _hostDao;
@Inject
protected UserVmDao _userVmDao;
@Override
public List<DomainRouterVO> findOrDeployVirtualRouterInGuestNetwork(final Network guestNetwork, final DeployDestination dest, final Account owner, final boolean isRedundant,
final Map<Param, Object> params) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
@ -239,6 +241,24 @@ public class BasicNetworkTopology implements NetworkTopology {
return result;
}
@Override
public boolean savePasswordToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final List<? extends VirtualRouter> routers)
throws ResourceUnavailableException {
_userVmDao.loadDetails((UserVmVO) profile.getVirtualMachine());
s_logger.debug("SAVE PASSWORD TO ROUTE RULES");
final String typeString = "save password entry";
final boolean isPodLevelException = false;
final boolean failWhenDisconnect = false;
final Long podId = null;
PasswordToRouterRules routerRules = virtualNetworkApplianceFactory.createPasswordToRouterRules(network, nic, profile);
return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(routerRules));
}
@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 {

View File

@ -51,6 +51,8 @@ import com.cloud.network.rules.UserdataToRouterRules;
import com.cloud.network.rules.VpcIpAssociationRules;
import com.cloud.network.rules.VpnRules;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.vm.NicVO;
import com.cloud.vm.VirtualMachineProfile;
@Component
public class BasicNetworkVisitor extends NetworkTopologyVisitor {
@ -156,8 +158,15 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor {
}
@Override
public boolean visit(final PasswordToRouterRules nat) throws ResourceUnavailableException {
return false;
public boolean visit(final PasswordToRouterRules passwd) throws ResourceUnavailableException {
VirtualRouter router = passwd.getRouter();
NicVO nicVo = passwd.getNicVo();
VirtualMachineProfile profile = passwd.getProfile();
Commands cmds = new Commands(Command.OnError.Stop);
passwd.createPasswordCommand(router, profile, nicVo, cmds);
return applianceManager.sendCommandsToRouter(router, cmds);
}
@Override

View File

@ -74,4 +74,6 @@ public interface NetworkTopology {
boolean associatePublicIP(final Network network, final List<? extends PublicIpAddress> ipAddress, final List<? extends VirtualRouter> routers) throws ResourceUnavailableException;
String[] applyVpnUsers(final Network network, final List<? extends VpnUser> users, final List<DomainRouterVO> routers) throws ResourceUnavailableException;
boolean savePasswordToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final List<? extends VirtualRouter> routers) throws ResourceUnavailableException;
}