mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-03 04:12:31 +01:00
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:
parent
631b561d9c
commit
f0189ac3c3
@ -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
|
||||
|
||||
@ -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..
|
||||
|
||||
@ -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());
|
||||
|
||||
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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 {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user