mirror of https://github.com/apache/cloudstack.git
Fix zone creation issue for internal load balancer
This commit is contained in:
parent
8e3bb7e612
commit
b9fb24d7f6
|
|
@ -56,6 +56,7 @@ import com.cloud.utils.Pair;
|
|||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.vm.Nic;
|
||||
import com.cloud.vm.NicSecondaryIp;
|
||||
import org.apache.cloudstack.network.element.InternalLoadBalancerElementService;
|
||||
|
||||
/**
|
||||
* The NetworkService interface is the "public" api to entities that make requests to the orchestration engine
|
||||
|
|
@ -257,4 +258,9 @@ public interface NetworkService {
|
|||
PublicIpQuarantine updatePublicIpAddressInQuarantine(UpdateQuarantinedIpCmd cmd);
|
||||
|
||||
void removePublicIpAddressFromQuarantine(RemoveQuarantinedIpCmd cmd);
|
||||
|
||||
InternalLoadBalancerElementService getInternalLoadBalancerElementByType(VirtualRouterProvider.Type type);
|
||||
InternalLoadBalancerElementService getInternalLoadBalancerElementByNetworkServiceProviderId(long networkProviderId);
|
||||
InternalLoadBalancerElementService getInternalLoadBalancerElementById(long providerId);
|
||||
List<InternalLoadBalancerElementService> getInternalLoadBalancerElements();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ import org.apache.cloudstack.affinity.AffinityGroupService;
|
|||
import org.apache.cloudstack.alert.AlertService;
|
||||
import org.apache.cloudstack.annotation.AnnotationService;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.cloudstack.network.element.InternalLoadBalancerElementService;
|
||||
import org.apache.cloudstack.network.lb.ApplicationLoadBalancerService;
|
||||
import org.apache.cloudstack.network.lb.InternalLoadBalancerVMService;
|
||||
import org.apache.cloudstack.query.QueryService;
|
||||
|
|
@ -200,8 +199,6 @@ public abstract class BaseCmd {
|
|||
@Inject
|
||||
public AffinityGroupService _affinityGroupService;
|
||||
@Inject
|
||||
public InternalLoadBalancerElementService _internalLbElementSvc;
|
||||
@Inject
|
||||
public InternalLoadBalancerVMService _internalLbSvc;
|
||||
@Inject
|
||||
public NetworkModel _ntwkModel;
|
||||
|
|
|
|||
|
|
@ -17,10 +17,6 @@
|
|||
|
||||
package org.apache.cloudstack.api.command.admin.internallb;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import org.apache.cloudstack.api.APICommand;
|
||||
|
|
@ -49,9 +45,6 @@ import com.cloud.user.Account;
|
|||
public class ConfigureInternalLoadBalancerElementCmd extends BaseAsyncCmd {
|
||||
public static final Logger s_logger = Logger.getLogger(ConfigureInternalLoadBalancerElementCmd.class.getName());
|
||||
|
||||
@Inject
|
||||
private List<InternalLoadBalancerElementService> _service;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
//////////////// API parameters /////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -100,7 +93,8 @@ public class ConfigureInternalLoadBalancerElementCmd extends BaseAsyncCmd {
|
|||
@Override
|
||||
public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException {
|
||||
CallContext.current().setEventDetails("Internal load balancer element: " + id);
|
||||
VirtualRouterProvider result = _service.get(0).configureInternalLoadBalancerElement(getId(), getEnabled());
|
||||
InternalLoadBalancerElementService service = _networkService.getInternalLoadBalancerElementById(id);
|
||||
VirtualRouterProvider result = service.configureInternalLoadBalancerElement(getId(), getEnabled());
|
||||
if (result != null) {
|
||||
InternalLoadBalancerElementResponse routerResponse = _responseGenerator.createInternalLbElementResponse(result);
|
||||
routerResponse.setResponseName(getCommandName());
|
||||
|
|
|
|||
|
|
@ -16,10 +16,6 @@
|
|||
// under the License.
|
||||
package org.apache.cloudstack.api.command.admin.internallb;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import org.apache.cloudstack.api.APICommand;
|
||||
|
|
@ -47,9 +43,6 @@ import com.cloud.user.Account;
|
|||
public class CreateInternalLoadBalancerElementCmd extends BaseAsyncCreateCmd {
|
||||
public static final Logger s_logger = Logger.getLogger(CreateInternalLoadBalancerElementCmd.class.getName());
|
||||
|
||||
@Inject
|
||||
private List<InternalLoadBalancerElementService> _service;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
//////////////// API parameters /////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -85,7 +78,8 @@ public class CreateInternalLoadBalancerElementCmd extends BaseAsyncCreateCmd {
|
|||
@Override
|
||||
public void execute() {
|
||||
CallContext.current().setEventDetails("Virtual router element Id: " + getEntityId());
|
||||
VirtualRouterProvider result = _service.get(0).getInternalLoadBalancerElement(getEntityId());
|
||||
InternalLoadBalancerElementService service = _networkService.getInternalLoadBalancerElementByNetworkServiceProviderId(getNspId());
|
||||
VirtualRouterProvider result = service.getInternalLoadBalancerElement(getEntityId());
|
||||
if (result != null) {
|
||||
InternalLoadBalancerElementResponse response = _responseGenerator.createInternalLbElementResponse(result);
|
||||
response.setResponseName(getCommandName());
|
||||
|
|
@ -97,7 +91,8 @@ public class CreateInternalLoadBalancerElementCmd extends BaseAsyncCreateCmd {
|
|||
|
||||
@Override
|
||||
public void create() throws ResourceAllocationException {
|
||||
VirtualRouterProvider result = _service.get(0).addInternalLoadBalancerElement(getNspId());
|
||||
InternalLoadBalancerElementService service = _networkService.getInternalLoadBalancerElementByNetworkServiceProviderId(getNspId());
|
||||
VirtualRouterProvider result = service.addInternalLoadBalancerElement(getNspId());
|
||||
if (result != null) {
|
||||
setEntityId(result.getId());
|
||||
setEntityUuid(result.getUuid());
|
||||
|
|
|
|||
|
|
@ -17,10 +17,9 @@
|
|||
package org.apache.cloudstack.api.command.admin.internallb;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import org.apache.cloudstack.api.APICommand;
|
||||
|
|
@ -48,9 +47,6 @@ import com.cloud.network.VirtualRouterProvider;
|
|||
public class ListInternalLoadBalancerElementsCmd extends BaseListCmd {
|
||||
public static final Logger s_logger = Logger.getLogger(ListInternalLoadBalancerElementsCmd.class.getName());
|
||||
|
||||
@Inject
|
||||
private InternalLoadBalancerElementService _service;
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
//////////////// API parameters /////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
|
|
@ -88,12 +84,21 @@ public class ListInternalLoadBalancerElementsCmd extends BaseListCmd {
|
|||
@Override
|
||||
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
|
||||
ResourceAllocationException {
|
||||
List<? extends VirtualRouterProvider> providers = _service.searchForInternalLoadBalancerElements(getId(), getNspId(), getEnabled());
|
||||
List<InternalLoadBalancerElementService> services;
|
||||
if (id == null && nspId == null) {
|
||||
services = _networkService.getInternalLoadBalancerElements();
|
||||
} else {
|
||||
InternalLoadBalancerElementService elementService = id != null ? _networkService.getInternalLoadBalancerElementById(id) : _networkService.getInternalLoadBalancerElementByNetworkServiceProviderId(nspId);
|
||||
services = Collections.singletonList(elementService);
|
||||
}
|
||||
ListResponse<InternalLoadBalancerElementResponse> response = new ListResponse<InternalLoadBalancerElementResponse>();
|
||||
List<InternalLoadBalancerElementResponse> providerResponses = new ArrayList<InternalLoadBalancerElementResponse>();
|
||||
for (VirtualRouterProvider provider : providers) {
|
||||
InternalLoadBalancerElementResponse providerResponse = _responseGenerator.createInternalLbElementResponse(provider);
|
||||
providerResponses.add(providerResponse);
|
||||
for (InternalLoadBalancerElementService service : services) {
|
||||
List<? extends VirtualRouterProvider> providers = service.searchForInternalLoadBalancerElements(getId(), getNspId(), getEnabled());
|
||||
for (VirtualRouterProvider provider : providers) {
|
||||
InternalLoadBalancerElementResponse providerResponse = _responseGenerator.createInternalLbElementResponse(provider);
|
||||
providerResponses.add(providerResponse);
|
||||
}
|
||||
}
|
||||
response.setResponses(providerResponses);
|
||||
response.setResponseName(getCommandName());
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ import com.cloud.utils.component.PluggableService;
|
|||
|
||||
public interface InternalLoadBalancerElementService extends PluggableService {
|
||||
/**
|
||||
* Configures existing Internal Load Balancer Element (enables or disables it)
|
||||
* Configures existing Internal Load Balancer Element (eInternalLoadBalancerElementServicenables or disables it)
|
||||
* @param id
|
||||
* @param enable
|
||||
* @return
|
||||
|
|
@ -52,4 +52,6 @@ public interface InternalLoadBalancerElementService extends PluggableService {
|
|||
* @return
|
||||
*/
|
||||
List<? extends VirtualRouterProvider> searchForInternalLoadBalancerElements(Long id, Long ntwkSvsProviderId, Boolean enabled);
|
||||
|
||||
VirtualRouterProvider.Type getProviderType();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -350,4 +350,12 @@
|
|||
<bean id="clusterDrsAlgorithmRegistry"
|
||||
class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
|
||||
</bean>
|
||||
|
||||
<bean id="internalLoadBalancerElementServiceRegistry" class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
|
||||
<property name="preRegistered">
|
||||
<list>
|
||||
<ref bean="InternalLbVm" />
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
</beans>
|
||||
|
|
|
|||
|
|
@ -103,4 +103,9 @@
|
|||
<property name="typeClass"
|
||||
value="org.apache.cloudstack.region.gslb.GslbServiceProvider" />
|
||||
</bean>
|
||||
|
||||
<bean class="org.apache.cloudstack.spring.lifecycle.registry.RegistryLifecycle">
|
||||
<property name="registry" ref="internalLoadBalancerElementServiceRegistry" />
|
||||
<property name="typeClass" value="org.apache.cloudstack.network.element.InternalLoadBalancerElementService" />
|
||||
</bean>
|
||||
</beans>
|
||||
|
|
|
|||
|
|
@ -84,7 +84,9 @@ import com.cloud.vm.VirtualMachine;
|
|||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.cloud.vm.dao.DomainRouterDao;
|
||||
import com.cloud.network.router.NetworkHelper;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class InternalLoadBalancerElement extends AdapterBase implements LoadBalancingServiceProvider, InternalLoadBalancerElementService, IpDeployer {
|
||||
private static final Logger s_logger = Logger.getLogger(InternalLoadBalancerElement.class);
|
||||
protected static final Map<Service, Map<Capability, String>> capabilities = setCapabilities();
|
||||
|
|
@ -114,14 +116,7 @@ public class InternalLoadBalancerElement extends AdapterBase implements LoadBala
|
|||
@Qualifier("networkHelper")
|
||||
protected NetworkHelper _networkHelper;
|
||||
|
||||
protected InternalLoadBalancerElement() {
|
||||
}
|
||||
|
||||
public static InternalLoadBalancerElement getInstance() {
|
||||
if (internalLbElement == null) {
|
||||
internalLbElement = new InternalLoadBalancerElement();
|
||||
}
|
||||
return internalLbElement;
|
||||
public InternalLoadBalancerElement() {
|
||||
}
|
||||
|
||||
private boolean canHandle(Network config, Scheme lbScheme) {
|
||||
|
|
@ -519,6 +514,11 @@ public class InternalLoadBalancerElement extends AdapterBase implements LoadBala
|
|||
return sc.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getProviderType() {
|
||||
return Type.InternalLbVm;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applyIps(Network network, List<? extends PublicIpAddress> ipAddress, Set<Service> services) throws ResourceUnavailableException {
|
||||
//do nothing here; this element just has to extend the ip deployer
|
||||
|
|
|
|||
|
|
@ -889,6 +889,11 @@ public class NsxElement extends AdapterBase implements DhcpServiceProvider, Dns
|
|||
return sc.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualRouterProvider.Type getProviderType() {
|
||||
return VirtualRouterProvider.Type.Nsx;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Class<?>> getCommands() {
|
||||
List<Class<?>> cmdList = new ArrayList<Class<?>>();
|
||||
|
|
|
|||
|
|
@ -46,7 +46,9 @@ import com.cloud.dc.VlanDetailsVO;
|
|||
import com.cloud.dc.dao.VlanDetailsDao;
|
||||
import com.cloud.network.dao.NsxProviderDao;
|
||||
import com.cloud.network.dao.PublicIpQuarantineDao;
|
||||
import com.cloud.network.dao.VirtualRouterProviderDao;
|
||||
import com.cloud.network.element.NsxProviderVO;
|
||||
import com.cloud.network.element.VirtualRouterProviderVO;
|
||||
import com.cloud.offering.ServiceOffering;
|
||||
import com.cloud.service.dao.ServiceOfferingDao;
|
||||
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
|
||||
|
|
@ -84,6 +86,7 @@ import org.apache.cloudstack.network.NetworkPermissionVO;
|
|||
import org.apache.cloudstack.network.dao.NetworkPermissionDao;
|
||||
import org.apache.cloudstack.network.element.InternalLoadBalancerElementService;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.apache.commons.lang3.EnumUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
|
@ -358,8 +361,6 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||
@Inject
|
||||
HostDao _hostDao;
|
||||
@Inject
|
||||
InternalLoadBalancerElementService _internalLbElementSvc;
|
||||
@Inject
|
||||
DataCenterVnetDao _dcVnetDao;
|
||||
@Inject
|
||||
AccountGuestVlanMapDao _accountGuestVlanMapDao;
|
||||
|
|
@ -415,6 +416,10 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||
PublicIpQuarantineDao publicIpQuarantineDao;
|
||||
@Inject
|
||||
NsxProviderDao nsxProviderDao;
|
||||
@Inject
|
||||
private VirtualRouterProviderDao virtualRouterProviderDao;
|
||||
List<InternalLoadBalancerElementService> internalLoadBalancerElementServices = new ArrayList<>();
|
||||
Map<String, InternalLoadBalancerElementService> internalLoadBalancerElementServiceMap = new HashMap<>();
|
||||
|
||||
@Autowired
|
||||
@Qualifier("networkHelper")
|
||||
|
|
@ -822,9 +827,19 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||
|
||||
@Override
|
||||
public boolean start() {
|
||||
initializeInternalLoadBalancerElementsMap();
|
||||
return true;
|
||||
}
|
||||
|
||||
private void initializeInternalLoadBalancerElementsMap() {
|
||||
if (MapUtils.isEmpty(internalLoadBalancerElementServiceMap) && CollectionUtils.isNotEmpty(internalLoadBalancerElementServices)) {
|
||||
for (InternalLoadBalancerElementService service : internalLoadBalancerElementServices) {
|
||||
internalLoadBalancerElementServiceMap.put(service.getProviderType().name(), service);
|
||||
}
|
||||
s_logger.debug(String.format("Discovered internal loadbalancer elements configured on NetworkServiceImpl"));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean stop() {
|
||||
return true;
|
||||
|
|
@ -5422,7 +5437,8 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||
throw new CloudRuntimeException("Unable to find the Network Element implementing the " + Network.Provider.InternalLbVm.getName() + " Provider");
|
||||
}
|
||||
|
||||
_internalLbElementSvc.addInternalLoadBalancerElement(nsp.getId());
|
||||
InternalLoadBalancerElementService service = getInternalLoadBalancerElementByNetworkServiceProviderId(nsp.getId());
|
||||
service.addInternalLoadBalancerElement(nsp.getId());
|
||||
|
||||
return nsp;
|
||||
}
|
||||
|
|
@ -5743,6 +5759,10 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||
_networkGurus = networkGurus;
|
||||
}
|
||||
|
||||
public void setInternalLoadBalancerElementServices(List<InternalLoadBalancerElementService> services) {
|
||||
this.internalLoadBalancerElementServices = services;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ActionEvent(eventType = EventTypes.EVENT_NET_IP_UPDATE, eventDescription = "updating public ip address", async = true)
|
||||
public IpAddress updateIP(Long id, String customId, Boolean displayIp) {
|
||||
|
|
@ -6084,6 +6104,34 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||
_ipAddrMgr.removePublicIpAddressFromQuarantine(publicIpQuarantine.getId(), removalReason);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InternalLoadBalancerElementService getInternalLoadBalancerElementByType(Type type) {
|
||||
return internalLoadBalancerElementServiceMap.getOrDefault(type.name(), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InternalLoadBalancerElementService getInternalLoadBalancerElementByNetworkServiceProviderId(long networkProviderId) {
|
||||
PhysicalNetworkServiceProviderVO provider = _pNSPDao.findById(networkProviderId);
|
||||
if (provider == null) {
|
||||
String msg = String.format("Cannot find a network service provider with ID %s", networkProviderId);
|
||||
s_logger.error(msg);
|
||||
throw new CloudRuntimeException(msg);
|
||||
}
|
||||
Type type = provider.getProviderName().equalsIgnoreCase("nsx") ? Type.Nsx : Type.InternalLbVm;
|
||||
return getInternalLoadBalancerElementByType(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InternalLoadBalancerElementService getInternalLoadBalancerElementById(long providerId) {
|
||||
VirtualRouterProviderVO provider = virtualRouterProviderDao.findById(providerId);
|
||||
return getInternalLoadBalancerElementByType(provider.getType());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<InternalLoadBalancerElementService> getInternalLoadBalancerElements() {
|
||||
return new ArrayList<>(this.internalLoadBalancerElementServiceMap.values());
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the active quarantine for the given public IP address. It can find by the ID of the quarantine or the address of the public IP.
|
||||
* @throws CloudRuntimeException if it does not find an active quarantine for the given public IP.
|
||||
|
|
|
|||
|
|
@ -165,6 +165,7 @@
|
|||
|
||||
<bean id="networkServiceImpl" class="com.cloud.network.NetworkServiceImpl" >
|
||||
<property name="networkGurus" value="#{networkGurusRegistry.registered}" />
|
||||
<property name="internalLoadBalancerElementServices" value="#{internalLoadBalancerElementServiceRegistry.registered}" />
|
||||
</bean>
|
||||
|
||||
<bean id="networkUsageManagerImpl" class="com.cloud.network.NetworkUsageManagerImpl" />
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import javax.naming.ConfigurationException;
|
|||
|
||||
import com.cloud.dc.DataCenter;
|
||||
import com.cloud.network.PublicIpQuarantine;
|
||||
import com.cloud.network.VirtualRouterProvider;
|
||||
import com.cloud.utils.fsm.NoTransitionException;
|
||||
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
|
||||
import org.apache.cloudstack.api.command.admin.address.ReleasePodIpCmdByAdmin;
|
||||
|
|
@ -46,6 +47,7 @@ import org.apache.cloudstack.api.command.user.network.UpdateNetworkCmd;
|
|||
import org.apache.cloudstack.api.command.user.vm.ListNicsCmd;
|
||||
import org.apache.cloudstack.api.response.AcquirePodIpCmdResponse;
|
||||
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
|
||||
import org.apache.cloudstack.network.element.InternalLoadBalancerElementService;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
|
@ -1088,4 +1090,24 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkOrches
|
|||
public void removePublicIpAddressFromQuarantine(RemoveQuarantinedIpCmd cmd) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public InternalLoadBalancerElementService getInternalLoadBalancerElementByType(VirtualRouterProvider.Type type) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InternalLoadBalancerElementService getInternalLoadBalancerElementByNetworkServiceProviderId(long networkProviderId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InternalLoadBalancerElementService getInternalLoadBalancerElementById(long providerId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<InternalLoadBalancerElementService> getInternalLoadBalancerElements() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue