adding userdata to router and ssh pub key to router rules.

Conflicts:
	server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
	server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java
This commit is contained in:
Wilder Rodrigues 2014-07-16 07:38:33 +02:00 committed by wilderrodrigues
parent 631b561d9c
commit f0189ac3c3
10 changed files with 285 additions and 67 deletions

View File

@ -748,7 +748,10 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@SuppressWarnings("unchecked")
VirtualMachineProfile uservm = vm;
return _routerMgr.saveSSHPublicKeyToRouter(network, nic, uservm, routers, sshPublicKey);
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
return networkTopology.saveSSHPublicKeyToRouter(network, nic, uservm, routers, sshPublicKey);
}
@Override
@ -765,7 +768,10 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
@SuppressWarnings("unchecked")
VirtualMachineProfile uservm = vm;
return _routerMgr.saveUserDataToRouter(network, nic, uservm, routers);
DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
NetworkTopology networkTopology = networkTopologyContext.retrieveNetworkTopology(dcVO);
return networkTopology.saveUserDataToRouter(network, nic, uservm, routers);
}
@Override

View File

@ -26,7 +26,6 @@ import java.util.Map;
import org.apache.cloudstack.network.topology.NetworkTopologyVisitor;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.routing.IpAssocCommand;
import com.cloud.agent.api.routing.NetworkElementCommand;
import com.cloud.agent.api.to.IpAddressTO;
@ -46,8 +45,6 @@ public class IpAssociationRules extends RuleApplier {
private final List<? extends PublicIpAddress> ipAddresses;
private Commands commands;
public IpAssociationRules(final Network network, final List<? extends PublicIpAddress> ipAddresses) {
super(network);
this.ipAddresses = ipAddresses;
@ -56,7 +53,6 @@ public class IpAssociationRules extends RuleApplier {
@Override
public boolean accept(final NetworkTopologyVisitor visitor, final VirtualRouter router) throws ResourceUnavailableException {
this.router = router;
commands = new Commands(Command.OnError.Continue);
return visitor.visit(this);
}
@ -65,10 +61,6 @@ public class IpAssociationRules extends RuleApplier {
return ipAddresses;
}
public Commands getCommands() {
return commands;
}
public void createAssociateIPCommands(final VirtualRouter router, final List<? extends PublicIpAddress> ips, final Commands cmds, final long vmId) {
// Ensure that in multiple vlans case we first send all ip addresses of vlan1, then all ip addresses of vlan2, etc..

View File

@ -29,6 +29,7 @@ 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.UserVmVO;
import com.cloud.vm.VirtualMachineProfile;
public class PasswordToRouterRules extends RuleApplier {
@ -48,6 +49,8 @@ public class PasswordToRouterRules extends RuleApplier {
@Override
public boolean accept(final NetworkTopologyVisitor visitor, final VirtualRouter router) throws ResourceUnavailableException {
this.router = router;
userVmDao.loadDetails((UserVmVO)profile.getVirtualMachine());
// for basic zone, send vm data/password information only to the router in the same pod
nicVo = nicDao.findById(nic.getId());

View File

@ -20,6 +20,11 @@ package com.cloud.network.rules;
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
import org.apache.cloudstack.network.topology.NetworkTopologyVisitor;
import com.cloud.agent.api.routing.NetworkElementCommand;
import com.cloud.agent.api.routing.VmDataCommand;
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.exception.ResourceUnavailableException;
import com.cloud.network.Network;
@ -32,9 +37,15 @@ import com.cloud.network.router.NEWVirtualNetworkApplianceManager;
import com.cloud.network.router.RouterControlHelper;
import com.cloud.network.router.VirtualRouter;
import com.cloud.offerings.dao.NetworkOfferingDao;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.uservm.UserVm;
import com.cloud.utils.StringUtils;
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.UserVmDao;
public abstract class RuleApplier {
@ -56,6 +67,12 @@ public abstract class RuleApplier {
protected DomainRouterDao routerDao;
protected UserVmDao userVmDao;
protected ServiceOfferingDao serviceOfferingDao;
protected VMTemplateDao templateDao;
protected NetworkDao networkDao;
protected FirewallRulesDao rulesDao;
@ -85,4 +102,68 @@ public abstract class RuleApplier {
public NEWVirtualNetworkApplianceManager getApplianceManager() {
return applianceManager;
}
public 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();
cmds.addCommand(
"vmdata",
generateVmDataCommand(router, nic.getIp4Address(), vm.getUserData(), serviceOffering, zoneName, nic.getIp4Address(), vm.getHostName(), vm.getInstanceName(),
vm.getId(), vm.getUuid(), publicKey, nic.getNetworkId()));
}
public VmDataCommand generateVmDataCommand(final VirtualRouter router, final String vmPrivateIpAddress, final String userData, final String serviceOffering, final String zoneName,
final String guestIpAddress, final String vmName, final String vmInstanceName, final long vmId, final String vmUuid, final String publicKey, final long guestNetworkId) {
final VmDataCommand cmd = new VmDataCommand(vmPrivateIpAddress, vmName, networkModel.getExecuteInSeqNtwkElmtCmd());
cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, routerControlHelper.getRouterControlIp(router.getId()));
cmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, routerControlHelper.getRouterIpInNetwork(guestNetworkId, router.getId()));
cmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName());
final DataCenterVO dcVo = dcDao.findById(router.getDataCenterId());
cmd.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString());
cmd.addVmData("userdata", "user-data", userData);
cmd.addVmData("metadata", "service-offering", StringUtils.unicodeEscape(serviceOffering));
cmd.addVmData("metadata", "availability-zone", StringUtils.unicodeEscape(zoneName));
cmd.addVmData("metadata", "local-ipv4", guestIpAddress);
cmd.addVmData("metadata", "local-hostname", StringUtils.unicodeEscape(vmName));
if (dcVo.getNetworkType() == NetworkType.Basic) {
cmd.addVmData("metadata", "public-ipv4", guestIpAddress);
cmd.addVmData("metadata", "public-hostname", StringUtils.unicodeEscape(vmName));
} else {
if (router.getPublicIpAddress() == null) {
cmd.addVmData("metadata", "public-ipv4", guestIpAddress);
} else {
cmd.addVmData("metadata", "public-ipv4", router.getPublicIpAddress());
}
cmd.addVmData("metadata", "public-hostname", router.getPublicIpAddress());
}
if (vmUuid == null) {
setVmInstanceId(vmInstanceName, vmId, cmd);
} else {
setVmInstanceId(vmUuid, cmd);
}
cmd.addVmData("metadata", "public-keys", publicKey);
String cloudIdentifier = configDao.getValue("cloud.identifier");
if (cloudIdentifier == null) {
cloudIdentifier = "";
} else {
cloudIdentifier = "CloudStack-{" + cloudIdentifier + "}";
}
cmd.addVmData("metadata", "cloud-identifier", cloudIdentifier);
return cmd;
}
private void setVmInstanceId(final String vmUuid, final VmDataCommand cmd) {
cmd.addVmData("metadata", "instance-id", vmUuid);
cmd.addVmData("metadata", "vm-id", vmUuid);
}
private void setVmInstanceId(final String vmInstanceName, final long vmId, final VmDataCommand cmd) {
cmd.addVmData("metadata", "instance-id", vmInstanceName);
cmd.addVmData("metadata", "vm-id", String.valueOf(vmId));
}
}

View File

@ -19,36 +19,87 @@ 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.storage.VMTemplateVO;
import com.cloud.utils.PasswordGenerator;
import com.cloud.vm.NicProfile;
import com.cloud.vm.NicVO;
import com.cloud.vm.UserVmVO;
import com.cloud.vm.VirtualMachineProfile;
public class SshKeyToRouterRules extends RuleApplier {
private final NicProfile nic;
private final VirtualMachineProfile profile;
private final String sshPublicKey;
public SshKeyToRouterRules(final Network network, final NicProfile nic, final VirtualMachineProfile profile) {
private NicVO nicVo;
private VMTemplateVO template;
private UserVmVO userVM;
public SshKeyToRouterRules(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final String sshPublicKey) {
super(network);
this.nic = nic;
this.profile = profile;
this.sshPublicKey = sshPublicKey;
}
@Override
public boolean accept(final NetworkTopologyVisitor visitor, final VirtualRouter router) throws ResourceUnavailableException {
this.router = router;
userVM = userVmDao.findById(profile.getVirtualMachine().getId());
userVmDao.loadDetails(userVM);
nicVo = nicDao.findById(nic.getId());
// for basic zone, send vm data/password information only to the router in the same pod
template = templateDao.findByIdIncludingRemoved(profile.getTemplateId());
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 String getSshPublicKey() {
return sshPublicKey;
}
public UserVmVO getUserVM() {
return userVM;
}
public NicVO getNicVo() {
return nicVo;
}
public VMTemplateVO getTemplate() {
return template;
}
}

View File

@ -19,12 +19,12 @@ package com.cloud.network.rules;
import org.apache.cloudstack.network.topology.NetworkTopologyVisitor;
import com.cloud.agent.api.Command;
import com.cloud.agent.manager.Commands;
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.NicVO;
import com.cloud.vm.UserVmVO;
import com.cloud.vm.VirtualMachineProfile;
public class UserdataToRouterRules extends RuleApplier {
@ -32,6 +32,9 @@ public class UserdataToRouterRules extends RuleApplier {
private final NicProfile nic;
private final VirtualMachineProfile profile;
private NicVO nicVo;
private UserVmVO userVM;
public UserdataToRouterRules(final Network network, final NicProfile nic, final VirtualMachineProfile profile) {
super(network);
@ -43,26 +46,20 @@ public class UserdataToRouterRules extends RuleApplier {
public boolean accept(final NetworkTopologyVisitor visitor, final VirtualRouter router) throws ResourceUnavailableException {
this.router = router;
userVM = userVmDao.findById(profile.getVirtualMachine().getId());
userVmDao.loadDetails(userVM);
// for basic zone, send vm data/password information only to the router in the same pod
final Commands cmds = new Commands(Command.OnError.Stop);
//final NicVO nicVo = _nicDao.findById(nic.getId());
//final String serviceOffering = _serviceOfferingDao.findByIdIncludingRemoved(vm.getId(), vm.getServiceOfferingId()).getDisplayText();
//final String zoneName = _dcDao.findById(router.getDataCenterId()).getName();
// cmds.addCommand(
// "vmdata",
// generateVmDataCommand(router, nic.getIp4Address(), vm.getUserData(), serviceOffering, zoneName, nic.getIp4Address(), vm.getHostName(), vm.getInstanceName(),
// vm.getId(), vm.getUuid(), null, nic.getNetworkId()));
nicVo = nicDao.findById(nic.getId());
return visitor.visit(this);
}
public NicProfile getNic() {
return nic;
public NicVO getNicVo() {
return nicVo;
}
public VirtualMachineProfile getProfile() {
return profile;
public UserVmVO getUserVM() {
return userVM;
}
}

View File

@ -35,11 +35,14 @@ 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.service.dao.ServiceOfferingDao;
import com.cloud.storage.dao.VMTemplateDao;
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;
import com.cloud.vm.dao.UserVmDao;
public class VirtualNetworkApplianceFactory {
@ -67,6 +70,15 @@ public class VirtualNetworkApplianceFactory {
@Inject
protected DataCenterDao dcDao;
@Inject
protected UserVmDao userVmDao;
@Inject
protected ServiceOfferingDao serviceOfferingDao;
@Inject
protected VMTemplateDao templateDao;
@Inject
protected DomainRouterDao routerDao;
@ -150,6 +162,32 @@ public class VirtualNetworkApplianceFactory {
initBeans(routerRules);
routerRules.userVmDao = userVmDao;
return routerRules;
}
public SshKeyToRouterRules createSshKeyToRouterRules(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final String sshKey) {
SshKeyToRouterRules sshKeyToRouterRules = new SshKeyToRouterRules(network, nic, profile, sshKey);
initBeans(sshKeyToRouterRules);
sshKeyToRouterRules.userVmDao = userVmDao;
sshKeyToRouterRules.templateDao = templateDao;
sshKeyToRouterRules.serviceOfferingDao = serviceOfferingDao;
return sshKeyToRouterRules;
}
public UserdataToRouterRules createUserdataToRouterRules(final Network network, final NicProfile nic, final VirtualMachineProfile profile) {
UserdataToRouterRules userdataRules = new UserdataToRouterRules(network, nic, profile);
initBeans(userdataRules);
userdataRules.userVmDao = userVmDao;
userdataRules.templateDao = templateDao;
userdataRules.serviceOfferingDao = serviceOfferingDao;
return userdataRules;
}
}

View File

@ -34,7 +34,6 @@ import com.cloud.dc.dao.DataCenterDao;
import com.cloud.deploy.DeployDestination;
import com.cloud.exception.AgentUnavailableException;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.host.Status;
import com.cloud.host.dao.HostDao;
@ -50,8 +49,10 @@ 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.SshKeyToRouterRules;
import com.cloud.network.rules.StaticNat;
import com.cloud.network.rules.StaticNatRules;
import com.cloud.network.rules.UserdataToRouterRules;
import com.cloud.network.rules.VirtualNetworkApplianceFactory;
import com.cloud.network.rules.VpnRules;
import com.cloud.user.Account;
@ -60,7 +61,6 @@ 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 {
@ -259,6 +259,36 @@ public class BasicNetworkTopology implements NetworkTopology {
return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(routerRules));
}
@Override
public boolean saveSSHPublicKeyToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final List<? extends VirtualRouter> routers,
final String sshPublicKey) throws ResourceUnavailableException {
s_logger.debug("SAVE SSH PUB KEY TO ROUTE RULES");
final String typeString = "save SSHkey entry";
final boolean isPodLevelException = false;
final boolean failWhenDisconnect = false;
final Long podId = null;
SshKeyToRouterRules keyToRouterRules = virtualNetworkApplianceFactory.createSshKeyToRouterRules(network, nic, profile, sshPublicKey);
return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(keyToRouterRules));
}
@Override
public boolean saveUserDataToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final List<? extends VirtualRouter> routers)
throws ResourceUnavailableException {
s_logger.debug("SAVE USERDATA TO ROUTE RULES");
final String typeString = "save userdata entry";
final boolean isPodLevelException = false;
final boolean failWhenDisconnect = false;
final Long podId = null;
UserdataToRouterRules userdataToRouterRules = virtualNetworkApplianceFactory.createUserdataToRouterRules(network, nic, profile);
return applyRules(network, routers, typeString, isPodLevelException, podId, failWhenDisconnect, new RuleApplierWrapper<RuleApplier>(userdataToRouterRules));
}
@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

@ -32,7 +32,7 @@ import com.cloud.network.PublicIpAddress;
import com.cloud.network.VpnUser;
import com.cloud.network.lb.LoadBalancingRule;
import com.cloud.network.router.VirtualRouter;
import com.cloud.network.rules.DhcpRules;
import com.cloud.network.rules.DhcpEntryRules;
import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.FirewallRule.Purpose;
import com.cloud.network.rules.FirewallRules;
@ -50,8 +50,10 @@ import com.cloud.network.rules.UserdataPwdRules;
import com.cloud.network.rules.UserdataToRouterRules;
import com.cloud.network.rules.VpcIpAssociationRules;
import com.cloud.network.rules.VpnRules;
import com.cloud.storage.VMTemplateVO;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.vm.NicVO;
import com.cloud.vm.UserVmVO;
import com.cloud.vm.VirtualMachineProfile;
@Component
@ -68,9 +70,9 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor {
@Override
public boolean visit(final StaticNatRules nat) throws ResourceUnavailableException {
Network network = nat.getNetwork();
VirtualRouter router = nat.getRouter();
List<? extends StaticNat> rules = nat.getRules();
final Network network = nat.getNetwork();
final VirtualRouter router = nat.getRouter();
final List<? extends StaticNat> rules = nat.getRules();
final Commands cmds = new Commands(Command.OnError.Continue);
nat.createApplyStaticNatCommands(rules, router, cmds, network.getId());
@ -80,9 +82,9 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor {
@Override
public boolean visit(final LoadBalancingRules loadbalancing) throws ResourceUnavailableException {
Network network = loadbalancing.getNetwork();
VirtualRouter router = loadbalancing.getRouter();
List<LoadBalancingRule> rules = loadbalancing.getRules();
final Network network = loadbalancing.getNetwork();
final VirtualRouter router = loadbalancing.getRouter();
final List<LoadBalancingRule> rules = loadbalancing.getRules();
final Commands cmds = new Commands(Command.OnError.Continue);
loadbalancing.createApplyLoadBalancingRulesCommands(rules, router, cmds, network.getId());
@ -93,12 +95,12 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor {
@SuppressWarnings("unchecked")
@Override
public boolean visit(final FirewallRules firewall) throws ResourceUnavailableException {
Network network = firewall.getNetwork();
VirtualRouter router = firewall.getRouter();
List<? extends FirewallRule> rules = firewall.getRules();
List<LoadBalancingRule> loadbalancingRules = firewall.getLoadbalancingRules();
final Network network = firewall.getNetwork();
final VirtualRouter router = firewall.getRouter();
final List<? extends FirewallRule> rules = firewall.getRules();
final List<LoadBalancingRule> loadbalancingRules = firewall.getLoadbalancingRules();
Purpose purpose = firewall.getPurpose();
final Purpose purpose = firewall.getPurpose();
final Commands cmds = new Commands(Command.OnError.Continue);
if (purpose == Purpose.LoadBalancing) {
@ -133,37 +135,53 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor {
@Override
public boolean visit(final IpAssociationRules ipRules) throws ResourceUnavailableException {
Network network = ipRules.getNetwork();
VirtualRouter router = ipRules.getRouter();
Commands commands = ipRules.getCommands();
List<? extends PublicIpAddress> ips = ipRules.getIpAddresses();
final Network network = ipRules.getNetwork();
final VirtualRouter router = ipRules.getRouter();
final Commands commands = new Commands(Command.OnError.Continue);
final List<? extends PublicIpAddress> ips = ipRules.getIpAddresses();
ipRules.createAssociateIPCommands(router, ips, commands, network.getId());
return applianceManager.sendCommandsToRouter(router, commands);
}
@Override
public boolean visit(final UserdataPwdRules nat) throws ResourceUnavailableException {
public boolean visit(final UserdataPwdRules userdata) throws ResourceUnavailableException {
return false;
}
@Override
public boolean visit(final DhcpRules nat) throws ResourceUnavailableException {
public boolean visit(final DhcpEntryRules dhcp) throws ResourceUnavailableException {
return false;
}
@Override
public boolean visit(final SshKeyToRouterRules nat) throws ResourceUnavailableException {
return false;
public boolean visit(final SshKeyToRouterRules sshkey) throws ResourceUnavailableException {
final VirtualRouter router = sshkey.getRouter();
final VirtualMachineProfile profile = sshkey.getProfile();
final String sshKeystr = sshkey.getSshPublicKey();
final UserVmVO userVM = sshkey.getUserVM();
final Commands commands = new Commands(Command.OnError.Stop);
final NicVO nicVo = sshkey.getNicVo();
final VMTemplateVO template = sshkey.getTemplate();
if (template != null && template.getEnablePassword()) {
sshkey.createPasswordCommand(router, profile, nicVo, commands);
}
sshkey.createVmDataCommand(router, userVM, nicVo, sshKeystr, commands);
return applianceManager.sendCommandsToRouter(router, commands);
}
@Override
public boolean visit(final PasswordToRouterRules passwd) throws ResourceUnavailableException {
VirtualRouter router = passwd.getRouter();
NicVO nicVo = passwd.getNicVo();
VirtualMachineProfile profile = passwd.getProfile();
final VirtualRouter router = passwd.getRouter();
final NicVO nicVo = passwd.getNicVo();
final VirtualMachineProfile profile = passwd.getProfile();
Commands cmds = new Commands(Command.OnError.Stop);
final Commands cmds = new Commands(Command.OnError.Stop);
passwd.createPasswordCommand(router, profile, nicVo, cmds);
return applianceManager.sendCommandsToRouter(router, cmds);
@ -181,11 +199,15 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor {
@Override
public boolean visit(final UserdataToRouterRules userdata) throws ResourceUnavailableException {
Network network = userdata.getNetwork();
VirtualRouter router = userdata.getRouter();
final VirtualRouter router = userdata.getRouter();
// return sendCommandsToRouter(router, cmds);
return false;
final UserVmVO userVM = userdata.getUserVM();
final NicVO nicVo = userdata.getNicVo();
final Commands commands = new Commands(Command.OnError.Stop);
userdata.createVmDataCommand(router, userVM, nicVo, null, commands);
return applianceManager.sendCommandsToRouter(router, commands);
}
@Override

View File

@ -18,12 +18,9 @@
package org.apache.cloudstack.network.topology;
import java.util.List;
import java.util.Map;
import com.cloud.dc.DataCenter;
import com.cloud.deploy.DeployDestination;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.Network;
import com.cloud.network.PublicIpAddress;
@ -34,17 +31,12 @@ import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.RuleApplier;
import com.cloud.network.rules.RuleApplierWrapper;
import com.cloud.network.rules.StaticNat;
import com.cloud.user.Account;
import com.cloud.vm.DomainRouterVO;
import com.cloud.vm.NicProfile;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.VirtualMachineProfile.Param;
public interface NetworkTopology {
List<DomainRouterVO> findOrDeployVirtualRouterInGuestNetwork(final Network guestNetwork, final DeployDestination dest, Account owner, final boolean isRedundant,
final Map<Param, Object> params) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException;
StringBuilder createGuestBootLoadArgs(final NicProfile guestNic, final String defaultDns1, final String defaultDns2, DomainRouterVO router);
String retrieveGuestDhcpRange(final NicProfile guestNic, final Network guestNetwork, final DataCenter dc);
@ -76,4 +68,10 @@ public interface NetworkTopology {
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;
boolean saveSSHPublicKeyToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final List<? extends VirtualRouter> routers,
final String sshPublicKey) throws ResourceUnavailableException;
boolean saveUserDataToRouter(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final List<? extends VirtualRouter> routers)
throws ResourceUnavailableException;
}