mirror of https://github.com/apache/cloudstack.git
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:
parent
514beef30e
commit
b14f42665e
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
Loading…
Reference in New Issue