mirror of https://github.com/apache/cloudstack.git
InternalLb: create internal lb vm specific service offering
This commit is contained in:
parent
408ee59d1f
commit
4f9c47ce54
|
|
@ -30,6 +30,7 @@ public interface ServiceOffering extends InfrastructureEntity, InternalIdentity,
|
|||
public static final String ssvmDefaultOffUniqueName = "Cloud.com-SecondaryStorage";
|
||||
public static final String routerDefaultOffUniqueName = "Cloud.Com-SoftwareRouter";
|
||||
public static final String elbVmDefaultOffUniqueName = "Cloud.Com-ElasticLBVm";
|
||||
public static final String internalLbVmDefaultOffUniqueName = "Cloud.Com-InternalLBVm";
|
||||
|
||||
public enum StorageType {
|
||||
local,
|
||||
|
|
|
|||
|
|
@ -32,6 +32,9 @@ import com.cloud.utils.net.Ip;
|
|||
import com.cloud.vm.VirtualMachineProfile.Param;
|
||||
|
||||
public interface InternalLoadBalancerVMManager extends Manager, InternalLoadBalancerVMService{
|
||||
public static final int DEFAULT_INTERNALLB_VM_RAMSIZE = 128; // 128 MB
|
||||
public static final int DEFAULT_INTERNALLB_VM_CPU_MHZ = 256; // 256 MHz
|
||||
|
||||
/**
|
||||
* Destroys Internal LB vm instance
|
||||
* @param vmId
|
||||
|
|
|
|||
|
|
@ -79,7 +79,6 @@ import com.cloud.network.lb.LoadBalancingRule.LbDestination;
|
|||
import com.cloud.network.lb.LoadBalancingRule.LbHealthCheckPolicy;
|
||||
import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy;
|
||||
import com.cloud.network.lb.LoadBalancingRulesManager;
|
||||
import com.cloud.network.router.VirtualNetworkApplianceManager;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
import com.cloud.network.router.VirtualRouter.RedundantState;
|
||||
import com.cloud.network.router.VirtualRouter.Role;
|
||||
|
|
@ -95,7 +94,6 @@ import com.cloud.storage.dao.VMTemplateDao;
|
|||
import com.cloud.user.Account;
|
||||
import com.cloud.user.AccountManager;
|
||||
import com.cloud.user.User;
|
||||
import com.cloud.utils.NumbersUtil;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.component.ManagerBase;
|
||||
import com.cloud.utils.db.DB;
|
||||
|
|
@ -123,15 +121,15 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements
|
|||
InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
||||
private static final Logger s_logger = Logger
|
||||
.getLogger(InternalLoadBalancerVMManagerImpl.class);
|
||||
static final private String _internalLbVmNamePrefix = "b";
|
||||
|
||||
private String _instance;
|
||||
private String _mgmtHost;
|
||||
private String _mgmtCidr;
|
||||
int _internalLbVmRamSize;
|
||||
int _internalLbVmCpuMHz;
|
||||
private ServiceOfferingVO _internalLbVmOffering;
|
||||
private long _internalLbVmOfferingId;
|
||||
|
||||
@Inject VirtualMachineManager _itMgr;
|
||||
@Inject DomainRouterDao _routerDao;
|
||||
@Inject DomainRouterDao _internalLbVmDao;
|
||||
@Inject ConfigurationDao _configDao;
|
||||
@Inject AgentManager _agentMgr;
|
||||
@Inject DataCenterDao _dcDao;
|
||||
|
|
@ -151,21 +149,21 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
|
||||
@Override
|
||||
public DomainRouterVO findByName(String name) {
|
||||
if (!VirtualMachineName.isValidRouterName(name)) {
|
||||
if (!VirtualMachineName.isValidSystemVmName(name, _instance, _internalLbVmNamePrefix)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return _routerDao.findById(VirtualMachineName.getRouterId(name));
|
||||
return _internalLbVmDao.findById(VirtualMachineName.getRouterId(name));
|
||||
}
|
||||
|
||||
@Override
|
||||
public DomainRouterVO findById(long id) {
|
||||
return _routerDao.findById(id);
|
||||
return _internalLbVmDao.findById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DomainRouterVO persist(DomainRouterVO vm) {
|
||||
DomainRouterVO virtualRouter = _routerDao.persist(vm);
|
||||
DomainRouterVO virtualRouter = _internalLbVmDao.persist(vm);
|
||||
return virtualRouter;
|
||||
}
|
||||
|
||||
|
|
@ -173,6 +171,10 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
public boolean finalizeVirtualMachineProfile(VirtualMachineProfile<DomainRouterVO> profile,
|
||||
DeployDestination dest, ReservationContext context) {
|
||||
|
||||
//Internal LB vm starts up with 2 Nics
|
||||
//Nic #1 - Guest Nic with IP address that would act as the LB entry point
|
||||
//Nic #2 - Control/Management Nic
|
||||
|
||||
StringBuilder buf = profile.getBootArgsBuilder();
|
||||
buf.append(" template=domP");
|
||||
buf.append(" name=").append(profile.getHostName());
|
||||
|
|
@ -257,7 +259,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
internalLbVm.setPrivateMacAddress(nic.getMacAddress());
|
||||
}
|
||||
}
|
||||
_routerDao.update(internalLbVm.getId(), internalLbVm);
|
||||
_internalLbVmDao.update(internalLbVm.getId(), internalLbVm);
|
||||
|
||||
finalizeCommandsOnStart(cmds, profile);
|
||||
return true;
|
||||
|
|
@ -285,9 +287,9 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
|
||||
//Get guest network info
|
||||
List<Network> guestNetworks = new ArrayList<Network>();
|
||||
List<? extends Nic> internalLbNics = _nicDao.listByVmId(profile.getId());
|
||||
for (Nic routerNic : internalLbNics) {
|
||||
Network network = _ntwkModel.getNetwork(routerNic.getNetworkId());
|
||||
List<? extends Nic> internalLbVmNics = _nicDao.listByVmId(profile.getId());
|
||||
for (Nic internalLbVmNic : internalLbVmNics) {
|
||||
Network network = _ntwkModel.getNetwork(internalLbVmNic.getNetworkId());
|
||||
if (network.getTrafficType() == TrafficType.Guest) {
|
||||
guestNetworks.add(network);
|
||||
}
|
||||
|
|
@ -303,7 +305,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
} else {
|
||||
internalLbVm.setTemplateVersion(versionAnswer.getTemplateVersion());
|
||||
internalLbVm.setScriptsVersion(versionAnswer.getScriptsVersion());
|
||||
internalLbVm = _routerDao.persist(internalLbVm, guestNetworks);
|
||||
internalLbVm = _internalLbVmDao.persist(internalLbVm, guestNetworks);
|
||||
}
|
||||
} else {
|
||||
result = false;
|
||||
|
|
@ -359,7 +361,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
|
||||
@Override
|
||||
public Long convertToId(String vmName) {
|
||||
if (!VirtualMachineName.isValidRouterName(vmName, _instance)) {
|
||||
if (!VirtualMachineName.isValidSystemVmName(vmName, _instance, _internalLbVmNamePrefix)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -392,17 +394,19 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
}
|
||||
|
||||
_mgmtHost = configs.get("host");
|
||||
|
||||
_mgmtCidr = _configDao.getValue(Config.ManagementNetwork.key());
|
||||
|
||||
_internalLbVmRamSize = NumbersUtil.parseInt(configs.get("router.ram.size"), VirtualNetworkApplianceManager.DEFAULT_ROUTER_VM_RAMSIZE);
|
||||
_internalLbVmCpuMHz = NumbersUtil.parseInt(configs.get("router.cpu.mhz"), VirtualNetworkApplianceManager.DEFAULT_ROUTER_CPU_MHZ);
|
||||
|
||||
boolean useLocalStorage = Boolean.parseBoolean(configs.get(Config.SystemVMUseLocalStorage.key()));
|
||||
_internalLbVmOffering = new ServiceOfferingVO("System Offering For Software Router", 1, _internalLbVmRamSize, _internalLbVmCpuMHz, null,
|
||||
null, true, null, useLocalStorage, true, null, true, VirtualMachine.Type.DomainRouter, true);
|
||||
_internalLbVmOffering.setUniqueName(ServiceOffering.routerDefaultOffUniqueName);
|
||||
_internalLbVmOffering = _serviceOfferingDao.persistSystemServiceOffering(_internalLbVmOffering);
|
||||
String offIdStr = configs.get(Config.InternalLbVmServiceOfferingId.key());
|
||||
if (offIdStr != null && !offIdStr.isEmpty()) {
|
||||
_internalLbVmOfferingId = Long.parseLong(offIdStr);
|
||||
} else {
|
||||
boolean useLocalStorage = Boolean.parseBoolean(configs.get(Config.SystemVMUseLocalStorage.key()));
|
||||
ServiceOfferingVO newOff = new ServiceOfferingVO("System Offering For Internal LB VM", 1, InternalLoadBalancerVMManager.DEFAULT_INTERNALLB_VM_RAMSIZE, InternalLoadBalancerVMManager.DEFAULT_INTERNALLB_VM_CPU_MHZ, null,
|
||||
null, true, null, useLocalStorage, true, null, true, VirtualMachine.Type.InternalLoadBalancerVm, true);
|
||||
newOff.setUniqueName(ServiceOffering.internalLbVmDefaultOffUniqueName);
|
||||
newOff = _serviceOfferingDao.persistSystemServiceOffering(newOff);
|
||||
_internalLbVmOfferingId = newOff.getId();
|
||||
}
|
||||
|
||||
_itMgr.registerGuru(VirtualMachine.Type.InternalLoadBalancerVm, this);
|
||||
|
||||
|
|
@ -516,7 +520,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
|
||||
if(controlIpAddress == null) {
|
||||
s_logger.warn("Unable to find Internal LB control ip in its attached NICs!. Internal LB vm: " + internalLbVmId);
|
||||
DomainRouterVO internalLbVm = _routerDao.findById(internalLbVmId);
|
||||
DomainRouterVO internalLbVm = _internalLbVmDao.findById(internalLbVmId);
|
||||
return internalLbVm.getPrivateIpAddress();
|
||||
}
|
||||
|
||||
|
|
@ -530,7 +534,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
s_logger.debug("Attempting to destroy Internal LB vm " + vmId);
|
||||
}
|
||||
|
||||
DomainRouterVO internalLbVm = _routerDao.findById(vmId);
|
||||
DomainRouterVO internalLbVm = _internalLbVmDao.findById(vmId);
|
||||
if (internalLbVm == null) {
|
||||
return true;
|
||||
}
|
||||
|
|
@ -544,7 +548,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
@Override
|
||||
public VirtualRouter stopInternalLbVm(long vmId, boolean forced, Account caller, long callerUserId) throws ConcurrentOperationException,
|
||||
ResourceUnavailableException {
|
||||
DomainRouterVO internalLbVm = _routerDao.findById(vmId);
|
||||
DomainRouterVO internalLbVm = _internalLbVmDao.findById(vmId);
|
||||
if (internalLbVm == null || internalLbVm.getRole() != Role.INTERNAL_LB_VM) {
|
||||
throw new InvalidParameterValueException("Can't find internal lb vm by id");
|
||||
}
|
||||
|
|
@ -556,7 +560,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
s_logger.debug("Stopping internal lb vm " + internalLbVm);
|
||||
try {
|
||||
if (_itMgr.advanceStop((DomainRouterVO) internalLbVm, forced, _accountMgr.getActiveUser(callerUserId), caller)) {
|
||||
return _routerDao.findById(internalLbVm.getId());
|
||||
return _internalLbVmDao.findById(internalLbVm.getId());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
|
@ -631,11 +635,6 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
+ guestNetwork;
|
||||
assert guestNetwork.getTrafficType() == TrafficType.Guest;
|
||||
|
||||
Long offeringId = _networkOfferingDao.findById(guestNetwork.getNetworkOfferingId()).getServiceOfferingId();
|
||||
if (offeringId == null) {
|
||||
offeringId = _internalLbVmOffering.getId();
|
||||
}
|
||||
|
||||
// 3) deploy internal lb vm
|
||||
Pair<DeploymentPlan, List<DomainRouterVO>> planAndInternalLbVms = getDeploymentPlanAndInternalLbVms(dest, guestNetwork.getId(), requestedGuestIp);
|
||||
internalLbs = planAndInternalLbVms.second();
|
||||
|
|
@ -648,10 +647,10 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
|
||||
List<Pair<NetworkVO, NicProfile>> networks = createInternalLbVmNetworks(guestNetwork, plan, requestedGuestIp);
|
||||
//don't start the internal lb as we are holding the network lock that needs to be released at the end of router allocation
|
||||
DomainRouterVO internalLbVm = deployInternalLbVm(owner, dest, plan, params, internalLbProvider, offeringId, guestNetwork.getVpcId(),
|
||||
DomainRouterVO internalLbVm = deployInternalLbVm(owner, dest, plan, params, internalLbProvider, _internalLbVmOfferingId, guestNetwork.getVpcId(),
|
||||
networks, false);
|
||||
if (internalLbVm != null) {
|
||||
_routerDao.addRouterToGuestNetwork(internalLbVm, guestNetwork);
|
||||
_internalLbVmDao.addRouterToGuestNetwork(internalLbVm, guestNetwork);
|
||||
internalLbs.add(internalLbVm);
|
||||
}
|
||||
} finally {
|
||||
|
|
@ -713,7 +712,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
|
||||
@Override
|
||||
public List<DomainRouterVO> findInternalLbVms(long guestNetworkId, Ip requestedGuestIp) {
|
||||
List<DomainRouterVO> internalLbVms = _routerDao.listByNetworkAndRole(guestNetworkId, Role.INTERNAL_LB_VM);
|
||||
List<DomainRouterVO> internalLbVms = _internalLbVmDao.listByNetworkAndRole(guestNetworkId, Role.INTERNAL_LB_VM);
|
||||
if (requestedGuestIp != null) {
|
||||
Iterator<DomainRouterVO> it = internalLbVms.iterator();
|
||||
while (it.hasNext()) {
|
||||
|
|
@ -734,7 +733,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
InsufficientAddressCapacityException, InsufficientServerCapacityException, InsufficientCapacityException,
|
||||
StorageUnavailableException, ResourceUnavailableException {
|
||||
|
||||
long id = _routerDao.getNextInSequence(Long.class, "id");
|
||||
long id = _internalLbVmDao.getNextInSequence(Long.class, "id");
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Creating the internal lb vm " + id + " in datacenter " + dest.getDataCenter());
|
||||
}
|
||||
|
|
@ -760,7 +759,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
}
|
||||
|
||||
internalLbVm = new DomainRouterVO(id, routerOffering.getId(), internalLbProvider.getId(),
|
||||
VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(),
|
||||
VirtualMachineName.getSystemVmName(id, _instance, _internalLbVmNamePrefix), template.getId(), template.getHypervisorType(),
|
||||
template.getGuestOSId(), owner.getDomainId(), owner.getId(), false, 0, false,
|
||||
RedundantState.UNKNOWN, false, false, VirtualMachine.Type.InternalLoadBalancerVm, vpcId);
|
||||
internalLbVm.setRole(Role.INTERNAL_LB_VM);
|
||||
|
|
@ -811,9 +810,9 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
if (internalLbVm.isStopPending()) {
|
||||
s_logger.info("Clear the stop pending flag of Internal LB VM " + internalLbVm.getHostName() + " after start router successfully!");
|
||||
internalLbVm.setStopPending(false);
|
||||
internalLbVm = _routerDao.persist(internalLbVm);
|
||||
internalLbVm = _internalLbVmDao.persist(internalLbVm);
|
||||
}
|
||||
return _routerDao.findById(internalLbVm.getId());
|
||||
return _internalLbVmDao.findById(internalLbVm.getId());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
|
@ -914,7 +913,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO> {
|
|||
throws StorageUnavailableException, InsufficientCapacityException,
|
||||
ConcurrentOperationException, ResourceUnavailableException {
|
||||
|
||||
DomainRouterVO internalLbVm = _routerDao.findById(internalLbVmId);
|
||||
DomainRouterVO internalLbVm = _internalLbVmDao.findById(internalLbVmId);
|
||||
if (internalLbVm == null || internalLbVm.getRole() != Role.INTERNAL_LB_VM) {
|
||||
throw new InvalidParameterValueException("Can't find internal lb vm by id specified");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -403,7 +403,10 @@ public enum Config {
|
|||
CloudDnsName("Advanced", ManagementServer.class, String.class, "cloud.dns.name", "default", " DNS name of the cloud", null),
|
||||
|
||||
BlacklistedRoutes("Advanced", VpcManager.class, String.class, "blacklisted.routes", null, "Routes that are blacklisted, can not be used for Static Routes creation for the VPC Private Gateway",
|
||||
"routes", ConfigurationParameterScope.zone.toString());
|
||||
"routes", ConfigurationParameterScope.zone.toString()),
|
||||
|
||||
InternalLbVmServiceOfferingId("Advanced", ManagementServer.class, Long.class, "internallbvm.service.offering", null, "Uuid of the service offering used by internal lb vm; if NULL - default system internal lb offering will be used", null);
|
||||
|
||||
|
||||
|
||||
private final String _category;
|
||||
|
|
|
|||
|
|
@ -1857,6 +1857,8 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||
vmType = VirtualMachine.Type.ConsoleProxy;
|
||||
} else if (VirtualMachine.Type.SecondaryStorageVm.toString().toLowerCase().equals(vmTypeString)) {
|
||||
vmType = VirtualMachine.Type.SecondaryStorageVm;
|
||||
} else if (VirtualMachine.Type.InternalLoadBalancerVm.toString().toLowerCase().equals(vmTypeString)) {
|
||||
vmType = VirtualMachine.Type.InternalLoadBalancerVm;
|
||||
} else {
|
||||
throw new InvalidParameterValueException("Invalid systemVmType. Supported types are: " + VirtualMachine.Type.DomainRouter + ", " + VirtualMachine.Type.ConsoleProxy + ", "
|
||||
+ VirtualMachine.Type.SecondaryStorageVm);
|
||||
|
|
|
|||
|
|
@ -1243,4 +1243,7 @@ ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `internal_lb` int(1) unsigned
|
|||
ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `public_lb` int(1) unsigned NOT NULL DEFAULT '0' COMMENT 'true if the network offering supports Public lb service';
|
||||
UPDATE `cloud`.`network_offerings` SET public_lb=1 where id IN (SELECT DISTINCT network_offering_id FROM `cloud`.`ntwk_offering_service_map` WHERE service='Lb');
|
||||
|
||||
alter table `cloud_usage`.`usage_network_offering` add column nic_id bigint(20) unsigned NOT NULL;
|
||||
alter table `cloud_usage`.`usage_network_offering` add column nic_id bigint(20) unsigned NOT NULL;
|
||||
|
||||
INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'internallbvm.service.offering', null, 'Uuid of the service offering used by internal lb vm; if NULL - default system internal lb offering will be used');
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue