diff --git a/api/src/com/cloud/exception/ErrorCode.java b/api/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java old mode 100755 new mode 100644 similarity index 51% rename from api/src/com/cloud/exception/ErrorCode.java rename to api/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java index 8f048b84800..3434b985aaa --- a/api/src/com/cloud/exception/ErrorCode.java +++ b/api/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java @@ -14,39 +14,27 @@ // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. -package com.cloud.exception; +package com.cloud.agent.api.storage; -import java.util.HashSet; +import com.cloud.agent.api.Answer; -/** - */ -public class ErrorCode { - String code; - private static HashSet s_codes = new HashSet(); +public class ResizeVolumeAnswer extends Answer { + private long newSize; + + protected ResizeVolumeAnswer() { - public ErrorCode(String code) { - this.code = code; - assert !s_codes.contains(this) : "There is already an error code registered for this code: " + code; - s_codes.add(this); } - public String getCode() { - return code; + public ResizeVolumeAnswer(ResizeVolumeCommand cmd, boolean result, String details, long newSize) { + super(cmd, result, details); + this.newSize = newSize; } - @Override - public int hashCode() { - return code.hashCode(); + public ResizeVolumeAnswer(ResizeVolumeCommand cmd, boolean result, String details) { + super(cmd, result, details); } - @Override - public boolean equals(Object that) { - if (!(that instanceof ErrorCode)) { - return false; - } - - return this.code.equals(((ErrorCode)that).code); + public long getNewSize() { + return newSize; } - - public final static ErrorCode UnableToReachResource = new ErrorCode("resource.unavailable"); } diff --git a/api/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java b/api/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java new file mode 100644 index 00000000000..8af23a0ab81 --- /dev/null +++ b/api/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java @@ -0,0 +1,86 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.agent.api.storage; + +import com.cloud.agent.api.Command; +import com.cloud.agent.api.to.StorageFilerTO; +import com.cloud.storage.StoragePool; + +public class ResizeVolumeCommand extends Command { + private String path; + private StorageFilerTO pool; + private String vmInstance; + private Long newSize; + private Long currentSize; + private boolean shrinkOk; + + protected ResizeVolumeCommand() { + + } + + public ResizeVolumeCommand(String path, + StorageFilerTO pool, + Long currentSize, + Long newSize, + boolean shrinkOk, + String vmInstance) + { + this.path = path; + this.pool = pool; + this.vmInstance = vmInstance; + this.currentSize = currentSize; + this.newSize = newSize; + this.shrinkOk = shrinkOk; + } + + public String getPath() { + return path; + } + + public String getPoolUuid() { + return pool.getUuid(); + } + + public StorageFilerTO getPool() { + return pool; + } + + public long getNewSize() { + return newSize; + } + + public long getCurrentSize() { + return currentSize; + } + + public boolean getShrinkOk() { + return shrinkOk; + } + + public String getInstanceName() { + return vmInstance; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean executeInSequence() { + return false; + } + +} diff --git a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java index 263f023b3e5..1cc20d78930 100644 --- a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java +++ b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java @@ -145,17 +145,17 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { } catch (InsufficientCapacityException ex){ s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } if (result != null) { this.setEntityId(result.getId()); this.setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a Private network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a Private network"); } } @@ -167,7 +167,7 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create private network"); } } diff --git a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java index 80269075744..e749f2210ce 100644 --- a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java +++ b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java @@ -84,7 +84,7 @@ public class DestroyConsoleProxyCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to destroy console proxy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to destroy console proxy"); } } } diff --git a/api/src/com/cloud/event/EventTypes.java b/api/src/com/cloud/event/EventTypes.java index 8c622252d17..87eddca5a69 100755 --- a/api/src/com/cloud/event/EventTypes.java +++ b/api/src/com/cloud/event/EventTypes.java @@ -108,6 +108,7 @@ public class EventTypes { public static final String EVENT_VOLUME_EXTRACT = "VOLUME.EXTRACT"; public static final String EVENT_VOLUME_UPLOAD = "VOLUME.UPLOAD"; public static final String EVENT_VOLUME_MIGRATE = "VOLUME.MIGRATE"; + public static final String EVENT_VOLUME_RESIZE = "VOLUME.RESIZE"; // Domains public static final String EVENT_DOMAIN_CREATE = "DOMAIN.CREATE"; diff --git a/api/src/com/cloud/exception/CloudAuthenticationException.java b/api/src/com/cloud/exception/CloudAuthenticationException.java index 2bba79bab1e..0bf114c0394 100644 --- a/api/src/com/cloud/exception/CloudAuthenticationException.java +++ b/api/src/com/cloud/exception/CloudAuthenticationException.java @@ -17,9 +17,9 @@ package com.cloud.exception; import com.cloud.utils.SerialVersionUID; -import com.cloud.utils.exception.RuntimeCloudException; +import com.cloud.utils.exception.CloudRuntimeException; -public class CloudAuthenticationException extends RuntimeCloudException { +public class CloudAuthenticationException extends CloudRuntimeException { private static final long serialVersionUID = SerialVersionUID.CloudAuthenticationException; public CloudAuthenticationException(String message) { diff --git a/api/src/com/cloud/exception/CloudException.java b/api/src/com/cloud/exception/CloudException.java index 036cb1b8adc..732670288f1 100644 --- a/api/src/com/cloud/exception/CloudException.java +++ b/api/src/com/cloud/exception/CloudException.java @@ -54,7 +54,6 @@ public class CloudException extends Exception { return; } - public ArrayList getIdProxyList() { return idList; } diff --git a/api/src/com/cloud/exception/CloudExecutionException.java b/api/src/com/cloud/exception/CloudExecutionException.java deleted file mode 100755 index d8d70f8ddb5..00000000000 --- a/api/src/com/cloud/exception/CloudExecutionException.java +++ /dev/null @@ -1,57 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.exception; - -import java.util.HashMap; -import com.cloud.utils.exception.RuntimeCloudException; - -import com.cloud.utils.SerialVersionUID; - -/** - * - */ -public class CloudExecutionException extends RuntimeCloudException { - private final static long serialVersionUID = SerialVersionUID.CloudExecutionException; - - private final ErrorCode code; - private final HashMap details; - - public CloudExecutionException(ErrorCode code, String message, Throwable cause) { - super(message, cause); - this.code = code; - details = new HashMap(); - } - - public ErrorCode getErrorCode() { - return code; - } - - public String getErrorMessage() { - return new StringBuilder("Error Code=").append(code).append("; Error Message=").append(super.toString()).toString(); - } - - @Override - public String toString() { - StringBuilder buff = new StringBuilder(); - buff.append("Error Code=").append(code); - buff.append("; Error Message=").append(super.toString()); - if (details.size() > 0) { - buff.append("; Error Details=").append(details.toString()); - } - return buff.toString(); - } -} diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index 39a0b26c76a..c91f6a9b80d 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -170,7 +170,6 @@ public interface Network extends ControlledEntity, InternalIdentity, Identity { public static final Capability AllowDnsSuffixModification = new Capability("AllowDnsSuffixModification"); public static final Capability RedundantRouter = new Capability("RedundantRouter"); public static final Capability ElasticIp = new Capability("ElasticIp"); - public static final Capability AssociatePublicIP = new Capability("AssociatePublicIP"); public static final Capability ElasticLb = new Capability("ElasticLb"); public static final Capability AutoScaleCounters = new Capability("AutoScaleCounters"); public static final Capability InlineMode = new Capability("InlineMode"); diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java new file mode 100644 index 00000000000..9baa0ec435c --- /dev/null +++ b/api/src/com/cloud/network/NetworkModel.java @@ -0,0 +1,252 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.cloud.dc.Vlan; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.Network.Capability; +import com.cloud.network.Network.Provider; +import com.cloud.network.Network.Service; +import com.cloud.network.Networks.TrafficType; +import com.cloud.network.element.NetworkElement; +import com.cloud.network.element.UserDataServiceProvider; +import com.cloud.offering.NetworkOffering; +import com.cloud.user.Account; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.VirtualMachine; + + +/** + * The NetworkModel presents a read-only view into the Network data such as L2 networks, + * Nics, PublicIps, NetworkOfferings, traffic labels, physical networks and the like + * The idea is that only the orchestration core should be able to modify the data, while other + * participants in the orchestration can use this interface to query the data. + */ +public interface NetworkModel { + + /** + * Lists IP addresses that belong to VirtualNetwork VLANs + * + * @param accountId + * - account that the IP address should belong to + * @param associatedNetworkId + * TODO + * @param sourceNat + * - (optional) true if the IP address should be a source NAT address + * @return - list of IP addresses + */ + List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat); + + List getSystemAccountNetworkOfferings(String... offeringNames); + + List getNics(long vmId); + + String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException; + + PublicIpAddress getPublicIpAddress(long ipAddressId); + + List listPodVlans(long podId); + + List listNetworksUsedByVm(long vmId, boolean isSystem); + + Nic getNicInNetwork(long vmId, long networkId); + + List getNicsForTraffic(long vmId, TrafficType type); + + Network getDefaultNetworkForVm(long vmId); + + Nic getDefaultNic(long vmId); + + UserDataServiceProvider getUserDataUpdateProvider(Network network); + + boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId); + + Map getNetworkServiceCapabilities(long networkId, Service service); + + boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services); + + Network getNetworkWithSecurityGroupEnabled(Long zoneId); + + String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId); + + List listNetworksForAccount(long accountId, long zoneId, Network.GuestType type); + + List listAllNetworksInAllZonesByType(Network.GuestType type); + + String getGlobalGuestDomainSuffix(); + + String getStartIpAddress(long networkId); + + String getIpInNetwork(long vmId, long networkId); + + String getIpInNetworkIncludingRemoved(long vmId, long networkId); + + Long getPodIdForVlan(long vlanDbId); + + List listNetworkOfferingsForUpgrade(long networkId); + + boolean isSecurityGroupSupportedInNetwork(Network network); + + boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider); + + boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName); + + String getNetworkTag(HypervisorType hType, Network network); + + List getElementServices(Provider provider); + + boolean canElementEnableIndividualServices(Provider provider); + + boolean areServicesSupportedInNetwork(long networkId, Service... services); + + boolean isNetworkSystem(Network network); + + Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service); + + Long getPhysicalNetworkId(Network network); + + boolean getAllowSubdomainAccessGlobal(); + + boolean isProviderForNetwork(Provider provider, long networkId); + + boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId); + + void canProviderSupportServices(Map> providersMap); + + List getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType); + + boolean canAddDefaultSecurityGroup(); + + List listNetworkOfferingServices(long networkOfferingId); + + boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services); + + Map> getIpToServices(List publicIps, boolean rulesRevoked, + boolean includingFirewall); + + Map> getProviderToIpList(Network network, Map> ipToServices); + + boolean checkIpForService(IpAddress ip, Service service, Long networkId); + + void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue); + + Provider getDefaultUniqueProviderForService(String serviceName); + + void checkNetworkPermissions(Account owner, Network network); + + String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType); + + String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType); + + String getDefaultPublicTrafficLabel(long dcId, HypervisorType vmware); + + String getDefaultGuestTrafficLabel(long dcId, HypervisorType vmware); + + /** + * @param providerName + * @return + */ + NetworkElement getElementImplementingProvider(String providerName); + + /** + * @param accountId + * @param zoneId + * @return + */ + String getAccountNetworkDomain(long accountId, long zoneId); + + /** + * @return + */ + String getDefaultNetworkDomain(); + + /** + * @param ntwkOffId + * @return + */ + List getNtwkOffDistinctProviders(long ntwkOffId); + + /** + * @param accountId + * @param dcId + * @param sourceNat + * @return + */ + List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat); + + /** + * @param zoneId + * @param trafficType + * @return + */ + List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType); + + /** + * @param guestNic + * @return + */ + boolean isPrivateGateway(Nic guestNic); + + Map> getNetworkCapabilities(long networkId); + + Network getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType); + + Long getDedicatedNetworkDomain(long networkId); + + Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId); + + List listSupportedNetworkServiceProviders(String serviceName); + + List listNetworksByVpc(long vpcId); + + boolean canUseForDeploy(Network network); + + Network getExclusiveGuestNetwork(long zoneId); + + long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType); + + Integer getNetworkRate(long networkId, Long vmId); + + boolean isVmPartOfNetwork(long vmId, long ntwkId); + + PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType); + + Network getNetwork(long networkId); + + IpAddress getIp(long sourceIpAddressId); + + boolean isNetworkAvailableInDomain(long networkId, long domainId); + + NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri); + + Set getAvailableIps(Network network, String requestedIp); + + String getDomainNetworkDomain(long domainId, long zoneId); + + PublicIpAddress getSourceNatIpAddressForGuestNetwork(Account owner, Network guestNetwork); + + boolean isNetworkInlineMode(Network network); + +} \ No newline at end of file diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index 39a746e6776..786afb1e107 100755 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -17,8 +17,6 @@ package com.cloud.network; import java.util.List; -import java.util.Map; -import java.util.Set; import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; @@ -29,19 +27,22 @@ import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.network.Network.Capability; -import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.utils.Pair; +/** + * The NetworkService interface is the "public" api to entities that make requests to the orchestration engine + * Such entities are usually the admin and end-user API. + * + */ public interface NetworkService { List getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner); - IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, + IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException; boolean releaseIpAddress(long ipAddressId) throws InsufficientAddressCapacityException; @@ -64,24 +65,12 @@ public interface NetworkService { IpAddress getIp(long id); - NetworkProfile convertNetworkToNetworkProfile(long networkId); - - Map> getNetworkCapabilities(long networkId); - - boolean isNetworkAvailableInDomain(long networkId, long domainId); - - Long getDedicatedNetworkDomain(long networkId); Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr); - Integer getNetworkRate(long networkId, Long vmId); - Network getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType); - - Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId); - - PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, + PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List isolationMethods, String broadcastDomainRange, Long domainId, List tags, String name); Pair, Integer> searchPhysicalNetworks(Long id, Long zoneId, String keyword, @@ -94,8 +83,6 @@ public interface NetworkService { List listNetworkServices(String providerName); - List listSupportedNetworkServiceProviders(String serviceName); - PhysicalNetworkServiceProvider addProviderToPhysicalNetwork(Long physicalNetworkId, String providerName, Long destinationPhysicalNetworkId, List enabledServices); @@ -127,17 +114,14 @@ public interface NetworkService { Pair, Integer> listTrafficTypes(Long physicalNetworkId); - PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType); Network getExclusiveGuestNetwork(long zoneId); List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd); List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner); - - List listNetworksByVpc(long vpcId); - - boolean isVmPartOfNetwork(long vmId, long ntwkId); + + /** * @param networkId @@ -170,9 +154,5 @@ public interface NetworkService { Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan, String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId) throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException; - /** - * @param network - * @return - */ - boolean canUseForDeploy(Network network); + } diff --git a/api/src/com/cloud/network/element/IpDeployer.java b/api/src/com/cloud/network/element/IpDeployer.java index 55b21abe9ab..c92d3e3cf2d 100644 --- a/api/src/com/cloud/network/element/IpDeployer.java +++ b/api/src/com/cloud/network/element/IpDeployer.java @@ -24,8 +24,9 @@ import com.cloud.network.Network; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.PublicIpAddress; +import com.cloud.utils.component.Adapter; -public interface IpDeployer { +public interface IpDeployer extends Adapter{ /** * Apply ip addresses to this network * @param network diff --git a/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java b/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java index 4625d22f6a5..4950ed92cab 100644 --- a/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java +++ b/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java @@ -22,8 +22,9 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; import com.cloud.network.RemoteAccessVpn; import com.cloud.network.VpnUser; +import com.cloud.utils.component.Adapter; -public interface RemoteAccessVPNServiceProvider extends NetworkElement, IpDeployingRequester { +public interface RemoteAccessVPNServiceProvider extends Adapter { String[] applyVpnUsers(RemoteAccessVpn vpn, List users) throws ResourceUnavailableException; boolean startVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException; diff --git a/api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java b/api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java index a61273a8159..dd451324a72 100644 --- a/api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java +++ b/api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java @@ -17,10 +17,10 @@ package com.cloud.network.element; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.network.Network; import com.cloud.network.Site2SiteVpnConnection; +import com.cloud.utils.component.Adapter; -public interface Site2SiteVpnServiceProvider extends NetworkElement { +public interface Site2SiteVpnServiceProvider extends Adapter { boolean startSite2SiteVpn(Site2SiteVpnConnection conn) throws ResourceUnavailableException; boolean stopSite2SiteVpn(Site2SiteVpnConnection conn) throws ResourceUnavailableException; diff --git a/api/src/com/cloud/offering/NetworkOffering.java b/api/src/com/cloud/offering/NetworkOffering.java index b69ad886eaa..f2c4de520a1 100644 --- a/api/src/com/cloud/offering/NetworkOffering.java +++ b/api/src/com/cloud/offering/NetworkOffering.java @@ -105,8 +105,6 @@ public interface NetworkOffering extends InfrastructureEntity, InternalIdentity, boolean getElasticIp(); - boolean getAssociatePublicIP(); - boolean getElasticLb(); boolean getSpecifyIpRanges(); diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index fb8af1a5b4b..5302daa493b 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -25,6 +25,7 @@ import java.util.Set; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd; +import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd; import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd; @@ -140,6 +141,14 @@ public interface ManagementService { */ Pair, Integer> searchForPods(ListPodsByCmd cmd); + /** + * Searches for servers by the specified search criteria Can search by: "name", "type", "state", "dataCenterId", + * "podId" + * + * @param cmd + * @return List of Hosts + */ + Pair, Integer> searchForServers(ListHostsCmd cmd); /** * Creates a new template @@ -384,7 +393,7 @@ public interface ManagementService { * @return Pair, List> List of all Hosts in VM's cluster and list of Hosts with * enough capacity */ - Pair, List> listHostsForMigrationOfVM(Long vmId, Long startIndex, Long pageSize); + Pair, Integer>, List> listHostsForMigrationOfVM(Long vmId, Long startIndex, Long pageSize); String[] listEventTypes(); diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java index ff8ec13e33b..a06f2138042 100644 --- a/api/src/com/cloud/storage/StorageService.java +++ b/api/src/com/cloud/storage/StorageService.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.command.admin.storage.CancelPrimaryStorageMaint import org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd; import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.PermissionDeniedException; @@ -70,6 +71,15 @@ public interface StorageService{ Volume createVolume(CreateVolumeCmd cmd); + /** + * Resizes the volume based on the given criteria + * + * @param cmd + * the API command wrapping the criteria + * @return the volume object + */ + Volume resizeVolume(ResizeVolumeCmd cmd); + /** * Delete the storage pool * diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java index e241851dbf5..5b92f4d85b0 100755 --- a/api/src/com/cloud/storage/Volume.java +++ b/api/src/com/cloud/storage/Volume.java @@ -36,6 +36,7 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba Ready("The volume is ready to be used."), Migrating("The volume is migrating to other storage pool"), Snapshotting("There is a snapshot created on this volume, not backed up to secondary storage yet"), + Resizing("The volume is being resized"), Expunging("The volume is being expunging"), Destroy("The volume is destroyed, and can't be recovered."), Destroying("The volume is destroying, and can't be recovered."), @@ -64,6 +65,9 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba s_fsm.addTransition(Creating, Event.OperationSucceeded, Ready); s_fsm.addTransition(Creating, Event.DestroyRequested, Destroy); s_fsm.addTransition(Creating, Event.CreateRequested, Creating); + s_fsm.addTransition(Ready, Event.ResizeRequested, Resizing); + s_fsm.addTransition(Resizing, Event.OperationSucceeded, Ready); + s_fsm.addTransition(Resizing, Event.OperationFailed, Ready); s_fsm.addTransition(Allocated, Event.UploadRequested, UploadOp); s_fsm.addTransition(UploadOp, Event.CopyRequested, Creating);// CopyRequested for volume from sec to primary storage s_fsm.addTransition(Creating, Event.CopySucceeded, Ready); @@ -93,7 +97,8 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba MigrationRequested, SnapshotRequested, DestroyRequested, - ExpungingRequested; + ExpungingRequested, + ResizeRequested; } /** diff --git a/api/src/com/cloud/user/UserContext.java b/api/src/com/cloud/user/UserContext.java index 54c01347097..daf30b4ac2a 100644 --- a/api/src/com/cloud/user/UserContext.java +++ b/api/src/com/cloud/user/UserContext.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.user; + public class UserContext { private static ThreadLocal s_currentContext = new ThreadLocal(); @@ -43,6 +44,10 @@ public class UserContext { return userId; } + public User getCallerUser() { + return _accountMgr.getActiveUser(userId); + } + public void setCallerUserId(long userId) { this.userId = userId; } diff --git a/api/src/org/apache/cloudstack/acl/APIChecker.java b/api/src/org/apache/cloudstack/acl/APIChecker.java index b14dfe101ba..0d0dfd1be4e 100644 --- a/api/src/org/apache/cloudstack/acl/APIChecker.java +++ b/api/src/org/apache/cloudstack/acl/APIChecker.java @@ -17,11 +17,14 @@ package org.apache.cloudstack.acl; import com.cloud.exception.PermissionDeniedException; -import org.apache.cloudstack.acl.RoleType; +import com.cloud.user.User; import com.cloud.utils.component.Adapter; // APIChecker checks the ownership and access control to API requests public interface APIChecker extends Adapter { // Interface for checking access for a role using apiname - boolean checkAccess(RoleType roleType, String apiCommandName) throws PermissionDeniedException; + // If true, apiChecker has checked the operation + // If false, apiChecker is unable to handle the operation or not implemented + // On exception, checkAccess failed don't allow + boolean checkAccess(User user, String apiCommandName) throws PermissionDeniedException; } diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java index d3bfcd66afc..58a78318fae 100644 --- a/api/src/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -387,6 +387,7 @@ public class ApiConstants { public static final String ESP_LIFETIME = "esplifetime"; public static final String DPD = "dpd"; public static final String FOR_VPC = "forvpc"; + public static final String SHRINK_OK = "shrinkok"; public static final String NICIRA_NVP_DEVICE_ID = "nvpdeviceid"; public static final String NICIRA_NVP_TRANSPORT_ZONE_UUID = "transportzoneuuid"; public static final String NICIRA_NVP_DEVICE_NAME = "niciradevicename"; diff --git a/api/src/org/apache/cloudstack/api/ApiErrorCode.java b/api/src/org/apache/cloudstack/api/ApiErrorCode.java new file mode 100644 index 00000000000..51671cd7ec2 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/ApiErrorCode.java @@ -0,0 +1,59 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api; + +/** + * Enum class for various API error code used in CloudStack + * @author minc + * + */ +public enum ApiErrorCode { + + MALFORMED_PARAMETER_ERROR(430), + PARAM_ERROR(431), + UNSUPPORTED_ACTION_ERROR(432), + API_LIMIT_EXCEED(429), + + INTERNAL_ERROR(530), + ACCOUNT_ERROR(531), + ACCOUNT_RESOURCE_LIMIT_ERROR(532), + INSUFFICIENT_CAPACITY_ERROR(533), + RESOURCE_UNAVAILABLE_ERROR(534), + RESOURCE_ALLOCATION_ERROR(534), + RESOURCE_IN_USE_ERROR(536), + NETWORK_RULE_CONFLICT_ERROR(537); + + private int httpCode; + + private ApiErrorCode(int httpStatusCode){ + httpCode = httpStatusCode; + } + + public int getHttpCode() { + return httpCode; + } + + public void setHttpCode(int httpCode) { + this.httpCode = httpCode; + } + + public String toString(){ + return String.valueOf(this.httpCode); + } + + +} diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java index fe976946614..a8f172095ea 100644 --- a/api/src/org/apache/cloudstack/api/BaseCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseCmd.java @@ -83,23 +83,6 @@ public abstract class BaseCmd { BOOLEAN, DATE, FLOAT, INTEGER, SHORT, LIST, LONG, OBJECT, MAP, STRING, TZDATE, UUID } - // FIXME: Extract these out into a separate file - // Client error codes - public static final int MALFORMED_PARAMETER_ERROR = 430; - public static final int PARAM_ERROR = 431; - public static final int UNSUPPORTED_ACTION_ERROR = 432; - public static final int PAGE_LIMIT_EXCEED = 433; - - // Server error codes - public static final int INTERNAL_ERROR = 530; - public static final int ACCOUNT_ERROR = 531; - public static final int ACCOUNT_RESOURCE_LIMIT_ERROR = 532; - public static final int INSUFFICIENT_CAPACITY_ERROR = 533; - public static final int RESOURCE_UNAVAILABLE_ERROR = 534; - public static final int RESOURCE_ALLOCATION_ERROR = 534; - public static final int RESOURCE_IN_USE_ERROR = 536; - public static final int NETWORK_RULE_CONFLICT_ERROR = 537; - public static final DateFormat INPUT_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); public static final DateFormat NEW_INPUT_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static Pattern newInputDateFormat = Pattern.compile("[\\d]+-[\\d]+-[\\d]+ [\\d]+:[\\d]+:[\\d]+"); @@ -200,7 +183,7 @@ public abstract class BaseCmd { int arrayStartIndex = key.indexOf('['); int arrayStartLastIndex = key.lastIndexOf('['); if (arrayStartIndex != arrayStartLastIndex) { - throw new ServerApiException(MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup"); } @@ -209,7 +192,7 @@ public abstract class BaseCmd { int arrayEndLastIndex = key.lastIndexOf(']'); if ((arrayEndIndex < arrayStartIndex) || (arrayEndIndex != arrayEndLastIndex)) { // malformed parameter - throw new ServerApiException(MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup"); } @@ -217,7 +200,7 @@ public abstract class BaseCmd { int fieldIndex = key.indexOf('.'); String fieldName = null; if (fieldIndex < arrayEndIndex) { - throw new ServerApiException(MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup"); } else { fieldName = key.substring(fieldIndex + 1); @@ -242,7 +225,7 @@ public abstract class BaseCmd { } if (!parsedIndex) { - throw new ServerApiException(MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup"); } diff --git a/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java b/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java old mode 100755 new mode 100644 diff --git a/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java old mode 100755 new mode 100644 index aacc6efa2e0..3222c710c5d --- a/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java @@ -119,7 +119,7 @@ public abstract class BaseUpdateTemplateOrIsoPermissionsCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update template/iso permissions"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update template/iso permissions"); } } } diff --git a/api/src/org/apache/cloudstack/api/ServerApiException.java b/api/src/org/apache/cloudstack/api/ServerApiException.java index 70fd34e5cf7..682e5b7e774 100644 --- a/api/src/org/apache/cloudstack/api/ServerApiException.java +++ b/api/src/org/apache/cloudstack/api/ServerApiException.java @@ -15,28 +15,51 @@ // specific language governing permissions and limitations // under the License. package org.apache.cloudstack.api; -import com.cloud.utils.exception.RuntimeCloudException; +import java.util.ArrayList; + +import com.cloud.exception.CloudException; +import com.cloud.utils.exception.CSExceptionErrorCode; +import com.cloud.utils.exception.CloudRuntimeException; @SuppressWarnings("serial") -public class ServerApiException extends RuntimeCloudException { - private int _errorCode; +public class ServerApiException extends CloudRuntimeException { + private ApiErrorCode _errorCode; private String _description; public ServerApiException() { - _errorCode = 0; + _errorCode = ApiErrorCode.INTERNAL_ERROR; _description = null; + setCSErrorCode(CSExceptionErrorCode.getCSErrCode(ServerApiException.class.getName())); } - public ServerApiException(int errorCode, String description) { + public ServerApiException(ApiErrorCode errorCode, String description) { _errorCode = errorCode; _description = description; + setCSErrorCode(CSExceptionErrorCode.getCSErrCode(ServerApiException.class.getName())); } - public int getErrorCode() { + // wrap a specific CloudRuntimeException to a ServerApiException + public ServerApiException(ApiErrorCode errorCode, String description, Throwable cause){ + super(description, cause); + _errorCode = errorCode; + _description = description; + if (cause instanceof CloudRuntimeException || cause instanceof CloudException ) { + CloudRuntimeException rt = (CloudRuntimeException) cause; + ArrayList idList = rt.getIdProxyList(); + if (idList != null) { + for (int i = 0; i < idList.size(); i++) { + addProxyObject(idList.get(i)); + } + } + setCSErrorCode(rt.getCSErrorCode()); + } + } + + public ApiErrorCode getErrorCode() { return _errorCode; } - public void setErrorCode(int errorCode) { + public void setErrorCode(ApiErrorCode errorCode) { _errorCode = errorCode; } diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java index f93787b7bc5..a13cf6253a7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java @@ -151,7 +151,7 @@ public class CreateAccountCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a user account"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a user account"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java index a1d9b6419cb..86ccb4ba20b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java @@ -91,7 +91,7 @@ public class DeleteAccountCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete user account and all corresponding users"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete user account and all corresponding users"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java index f0a5e7078b7..318dfda7ded 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java @@ -115,7 +115,7 @@ public class DisableAccountCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, lockRequested == true ? "Failed to lock account" : "Failed to disable account" ); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, lockRequested == true ? "Failed to lock account" : "Failed to disable account" ); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java index 4aa1e4fc1b9..2688ef1510a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.account; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -95,7 +96,7 @@ public class EnableAccountCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to enable account"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to enable account"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java index 34e9e53b84d..c67e8463228 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java @@ -84,7 +84,7 @@ public class LockAccountCmd extends BaseCmd { // response.setResponseName(getCommandName()); // this.setResponseObject(response); // } else { -// throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to lock account"); +// throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to lock account"); // } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java index f1340464d6b..ea6d9078ed6 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java @@ -22,6 +22,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -125,7 +126,7 @@ public class UpdateAccountCmd extends BaseCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update account"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update account"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java index a119d0f44bf..8c987228022 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java @@ -20,6 +20,7 @@ package org.apache.cloudstack.api.command.admin.autoscale; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -86,7 +87,7 @@ public class CreateCounterCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create Counter with name " + getName()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create Counter with name " + getName()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java index 9304eeb7b93..2fde0617693 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java @@ -20,6 +20,7 @@ package org.apache.cloudstack.api.command.admin.autoscale; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -56,7 +57,7 @@ public class DeleteCounterCmd extends BaseAsyncCmd { result = _autoScaleService.deleteCounter(getId()); } catch (ResourceInUseException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, ex.getMessage()); } if (result) { @@ -64,7 +65,7 @@ public class DeleteCounterCmd extends BaseAsyncCmd { this.setResponseObject(response); } else { s_logger.warn("Failed to delete counter with Id: " + getId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete counter."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete counter."); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java index 28bf72ddba7..c64883c16cf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java @@ -156,7 +156,7 @@ public class AddClusterCmd extends BaseCmd { clusterResponses.add(clusterResponse); } } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add cluster"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add cluster"); } response.setResponses(clusterResponses); @@ -165,10 +165,10 @@ public class AddClusterCmd extends BaseCmd { this.setResponseObject(response); } catch (DiscoveryException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (ResourceInUseException ex) { s_logger.warn("Exception: ", ex); - ServerApiException e = new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + ServerApiException e = new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); for (String proxyObj : ex.getIdProxyList()) { e.addProxyObject(proxyObj); } diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java index f0b40cb6b03..93103d3f60e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.cluster; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -70,7 +71,7 @@ public class DeleteClusterCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete cluster"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete cluster"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java index 03b43def3ca..d6ec7188d0b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.cluster; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -112,7 +113,7 @@ public class UpdateClusterCmd extends BaseCmd { clusterResponse.setResponseName(getCommandName()); this.setResponseObject(clusterResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update cluster"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update cluster"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java index 79693e76f84..1c435178efa 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.config; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -76,7 +77,7 @@ public class UpdateCfgCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update config"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update config"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java index 82880c1fbae..19587f4483c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.config; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -86,7 +87,7 @@ public class UpdateHypervisorCapabilitiesCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update hypervisor capabilities"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update hypervisor capabilities"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java index 0e6ae32583b..61614d171f0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java @@ -84,7 +84,7 @@ public class CreateDomainCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create domain"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create domain"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java index 7009e70ca32..3fda9608c13 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java @@ -93,7 +93,7 @@ public class DeleteDomainCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete domain"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete domain"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java index cc5926cace1..607120c1886 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java @@ -83,7 +83,7 @@ public class UpdateDomainCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update domain"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update domain"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java index 0a0a98c1c45..77296c72a4a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java @@ -22,6 +22,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -148,7 +149,7 @@ public class AddHostCmd extends BaseCmd { hostResponses.add(hostResponse); } } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add host"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add host"); } response.setResponses(hostResponses); @@ -157,7 +158,7 @@ public class AddHostCmd extends BaseCmd { this.setResponseObject(response); } catch (DiscoveryException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java index 579e286f884..3bcee811151 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java @@ -84,11 +84,11 @@ public class AddSecondaryStorageCmd extends BaseCmd { this.setResponseObject(hostResponse); } } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add secondary storage"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add secondary storage"); } } catch (DiscoveryException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java index 93dca9140f9..8c617c03c76 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.host; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -104,7 +105,7 @@ public class CancelMaintenanceCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to cancel host maintenance"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to cancel host maintenance"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java index 5103f986e10..c2b731b8407 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.HostResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -84,7 +85,7 @@ public class DeleteHostCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete host"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete host"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java index 82f329f4b7e..876da9a6bda 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java @@ -168,17 +168,16 @@ public class ListHostsCmd extends BaseListCmd { if (getVirtualMachineId() == null) { response = _queryService.searchForServers(this); } else { - List result = new ArrayList(); + Pair,Integer> result; List hostsWithCapacity = new ArrayList(); - Pair, List> hostsForMigration = _mgr.listHostsForMigrationOfVM(getVirtualMachineId(), - this.getStartIndex(), this.getPageSizeVal()); + Pair,Integer>, List> hostsForMigration = _mgr.listHostsForMigrationOfVM(getVirtualMachineId(), this.getStartIndex(), this.getPageSizeVal()); result = hostsForMigration.first(); hostsWithCapacity = hostsForMigration.second(); response = new ListResponse(); List hostResponses = new ArrayList(); - for (Host host : result) { + for (Host host : result.first()) { HostResponse hostResponse = _responseGenerator.createHostResponse(host, getDetails()); Boolean suitableForMigration = false; if (hostsWithCapacity.contains(host)) { @@ -189,7 +188,7 @@ public class ListHostsCmd extends BaseListCmd { hostResponses.add(hostResponse); } - response.setResponses(hostResponses); + response.setResponses(hostResponses, result.second()); } response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java index 385e2aef415..80b53aa1362 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.host; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -104,7 +105,7 @@ public class PrepareForMaintenanceCmd extends BaseAsyncCmd { response.setResponseName("host"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to prepare host for maintenance"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to prepare host for maintenance"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java index 99e867bbebd..f42ec4b4814 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.host; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -103,11 +104,11 @@ public class ReconnectHostCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to reconnect host"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to reconnect host"); } } catch (Exception ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java index 9ab27178838..c1e374e030b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -108,7 +109,7 @@ public class UpdateHostCmd extends BaseCmd { this.setResponseObject(hostResponse); } catch (Exception e) { s_logger.debug("Failed to update host:" + getId(), e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update host:" + getId() + "," + e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update host:" + getId() + "," + e.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java index 793c982d0f1..4983255389d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java @@ -22,6 +22,7 @@ import javax.inject.Inject; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -72,9 +73,9 @@ public class AddNetworkDeviceCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage()); } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java index 6d4b962d4a1..22802f936a0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -103,7 +104,7 @@ public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add service provider to physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add service provider to physical network"); } } @@ -114,7 +115,7 @@ public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { setEntityId(result.getId()); setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add service provider entity to physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add service provider entity to physical network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java index b97f85ec1ba..6733a35a5fd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java @@ -225,7 +225,7 @@ public class CreateNetworkOfferingCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create network offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create network offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java index f56ae7dbf50..1b83a9114e4 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -151,7 +152,7 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create physical network"); } } @@ -162,7 +163,7 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { setEntityId(result.getId()); setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create physical network entity"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create physical network entity"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java index ccd92e19d67..59db3eb17c5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -110,7 +111,7 @@ public class CreateStorageNetworkIpRangeCmd extends BaseAsyncCmd { this.setResponseObject(response); } catch (Exception e) { s_logger.warn("Create storage network IP range failed", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java index 38971c1f3a9..2ca618cd1ec 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java @@ -20,6 +20,7 @@ import javax.inject.Inject; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -64,12 +65,12 @@ public class DeleteNetworkDeviceCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network device:" + getId()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete network device:" + getId()); } } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage()); } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java index c13088f6123..69f24b419c0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -70,7 +71,7 @@ public class DeleteNetworkOfferingCmd extends BaseCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete service offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete service offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java index bc744399a33..f0d2a128acc 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -76,14 +77,14 @@ public class DeleteNetworkServiceProviderCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network service provider"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete network service provider"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java index 5f86efa9ad8..178ccb8e0b7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java @@ -70,7 +70,7 @@ public class DeletePhysicalNetworkCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete physical network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java index 1873fc7d6ef..5fa26f69a48 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java @@ -70,7 +70,7 @@ public class DeleteStorageNetworkIpRangeCmd extends BaseAsyncCmd { this.setResponseObject(response); } catch (Exception e) { s_logger.warn("Failed to delete storage network ip range " + getId(), e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java index 04a26af0781..25b9a8e382c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java @@ -24,6 +24,7 @@ import javax.inject.Inject; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Parameter; @@ -83,9 +84,9 @@ public class ListNetworkDeviceCmd extends BaseListCmd { listResponse.setResponseName(getCommandName()); this.setResponseObject(listResponse); } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage()); } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java index a301ac004ea..3331d48103a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; @@ -100,7 +101,7 @@ public class ListPhysicalNetworksCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to search for physical networks"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to search for physical networks"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java index 8fcaf4958b1..b5045bb99fd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java @@ -88,7 +88,7 @@ public class ListStorageNetworkIpRangeCmd extends BaseListCmd { this.setResponseObject(response); } catch (Exception e) { s_logger.warn("Failed to list storage network ip range for rangeId=" + getRangeId() + " podId=" + getPodId() + " zoneId=" + getZoneId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java index dc2f3099206..ca4709deb2b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java @@ -102,7 +102,7 @@ public class UpdateNetworkOfferingCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update network offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update network offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java index b770ea26c12..d64fd0796ee 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -88,7 +89,7 @@ public class UpdateNetworkServiceProviderCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update service provider"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update service provider"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java index d6d0b92e4b7..d49d3c4e911 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java @@ -96,7 +96,7 @@ public class UpdateStorageNetworkIpRangeCmd extends BaseAsyncCmd { this.setResponseObject(response); } catch (Exception e) { s_logger.warn("Update storage network IP range failed", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java index 08101dc4137..6c3630690f7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -115,7 +116,7 @@ public class CreateDiskOfferingCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create disk offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create disk offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java index f93c2a88ce2..54151fe13b9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -162,7 +163,7 @@ public class CreateServiceOfferingCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create service offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create service offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java index 85e034f6191..3f854637b8c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -70,7 +71,7 @@ public class DeleteDiskOfferingCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete disk offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete disk offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java index d1ea4de0504..0a8949b9071 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java @@ -68,7 +68,7 @@ public class DeleteServiceOfferingCmd extends BaseCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete service offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete service offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java index 8db731d3b31..734b18bfb93 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java @@ -18,6 +18,7 @@ package org.apache.cloudstack.api.command.admin.offering; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -91,7 +92,7 @@ public class UpdateDiskOfferingCmd extends BaseCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update disk offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update disk offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java index 38220b90673..9dddd7d6718 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java @@ -89,7 +89,7 @@ public class UpdateServiceOfferingCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update service offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update service offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java index 331968b00db..95d9e53be75 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java @@ -111,7 +111,7 @@ public class CreatePodCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create pod"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create pod"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java index 8c64a8dad33..4080a7c46ee 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.pod; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -70,7 +71,7 @@ public class DeletePodCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete pod"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete pod"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java index ca5e03953a3..c99da9d8199 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java @@ -110,7 +110,7 @@ public class UpdatePodCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update pod"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update pod"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java index 0e559189904..97ec1dcee45 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java @@ -99,7 +99,7 @@ public class UploadCustomCertificateCmd extends BaseAsyncCmd { response.setObjectName("customcertificate"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to upload custom certificate"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to upload custom certificate"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java index 4f57f135c44..da4f461943c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java @@ -23,6 +23,7 @@ import javax.inject.Inject; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -123,7 +124,7 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { routerResponse.setResponseName(getCommandName()); this.setResponseObject(routerResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to configure the virtual router provider"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to configure the virtual router provider"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java index ded7a782ff2..2cb3812f6fa 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java @@ -86,7 +86,7 @@ public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network"); } } @@ -97,7 +97,7 @@ public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { setEntityId(result.getId()); setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java index 1157aaa7b93..1645456bffb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.router; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -104,7 +105,7 @@ public class DestroyRouterCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to destroy router"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to destroy router"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java index 9c50d2ffb0f..a095fce9cb9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java @@ -98,7 +98,7 @@ public class RebootRouterCmd extends BaseAsyncCmd { response.setResponseName("router"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to reboot router"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to reboot router"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java index f1f3f681829..595afc76d12 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java @@ -102,7 +102,7 @@ public class StartRouterCmd extends BaseAsyncCmd { routerResponse.setResponseName(getCommandName()); this.setResponseObject(routerResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to start router"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to start router"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java index 2d1b609aa5d..571b2c19977 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.router; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -109,7 +110,7 @@ public class StopRouterCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to stop router"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to stop router"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java index e2b020e09f9..f8742a2cefb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java @@ -81,7 +81,7 @@ public class UpgradeRouterCmd extends BaseCmd { routerResponse.setResponseName(getCommandName()); this.setResponseObject(routerResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to upgrade router"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to upgrade router"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/AddS3Cmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/AddS3Cmd.java index 13f066a6e57..ec62858f597 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/AddS3Cmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/AddS3Cmd.java @@ -31,6 +31,7 @@ import static org.apache.cloudstack.api.BaseCmd.CommandType.STRING; import static org.apache.cloudstack.api.BaseCmd.CommandType.BOOLEAN; import static com.cloud.user.Account.ACCOUNT_ID_SYSTEM; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -93,12 +94,12 @@ public final class AddS3Cmd extends BaseCmd { result = _resourceService.discoverS3(this); if (result == null) { - throw new ServerApiException(INTERNAL_ERROR, "Failed to add S3."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add S3."); } } catch (DiscoveryException e) { - throw new ServerApiException(INTERNAL_ERROR, "Failed to add S3 due to " + e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add S3 due to " + e.getMessage()); } diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java index 24ef48be222..59a2164e4d6 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.storage; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -107,7 +108,7 @@ public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to cancel primary storage maintenance"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to cancel primary storage maintenance"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java index 78a142ac449..b5068115eb1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java @@ -122,17 +122,17 @@ public class CreateStoragePoolCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add storage pool"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add storage pool"); } } catch (ResourceUnavailableException ex1) { s_logger.warn("Exception: ", ex1); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex1.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex1.getMessage()); }catch (ResourceInUseException ex2) { s_logger.warn("Exception: ", ex2); - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, ex2.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, ex2.getMessage()); } catch (UnknownHostException ex3) { s_logger.warn("Exception: ", ex3); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex3.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex3.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java index 1510f7822f7..8cf4a4b7970 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java @@ -78,9 +78,9 @@ public class DeletePoolCmd extends BaseCmd { } else { StoragePool pool = _storageService.getStoragePool(id); if (pool != null && pool.getStatus() == StoragePoolStatus.Removed) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to finish storage pool removal. The storage pool will not be used but cleanup is needed"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to finish storage pool removal. The storage pool will not be used but cleanup is needed"); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete storage pool"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete storage pool"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java index 6a4175516cc..ab9c226909d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.storage; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -105,7 +106,7 @@ public class PreparePrimaryStorageForMaintenanceCmd extends BaseAsyncCmd { response.setResponseName("storagepool"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to prepare primary storage for maintenance"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to prepare primary storage for maintenance"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java index 806df561397..b60ed7f9767 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java @@ -78,7 +78,7 @@ public class UpdateStoragePoolCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update storage pool"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update storage pool"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java b/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java index 23a00ca04dc..61f903e9c3c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java @@ -92,12 +92,12 @@ public class AddSwiftCmd extends BaseCmd { swiftResponse.setObjectName("swift"); this.setResponseObject(swiftResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add Swift"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add Swift"); } } catch (DiscoveryException ex) { String errMsg = "Failed to add Swift due to " + ex.toString(); s_logger.warn(errMsg, ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, errMsg); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, errMsg); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java index ad0f09cba46..dc53ea751b4 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java @@ -95,7 +95,7 @@ public class DestroySystemVmCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Fail to destroy system vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Fail to destroy system vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java index dd844acd17f..909fe20f883 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.systemvm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -116,20 +117,20 @@ public class MigrateSystemVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to migrate the system vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to migrate the system vm"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } catch (ManagementServerException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } catch (VirtualMachineMigrationException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java index 49e895b22fe..2e7b5303395 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.systemvm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -105,7 +106,7 @@ public class RebootSystemVmCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Fail to reboot system vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Fail to reboot system vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java index 70ab5f38720..40f9d62aa64 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.systemvm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -109,7 +110,7 @@ public class StartSystemVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Fail to start system vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Fail to start system vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java index af2bd3ad64f..134043cb388 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java @@ -112,7 +112,7 @@ public class StopSystemVmCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Fail to stop system vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Fail to stop system vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java index 290c3603f1f..14046f39aaf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java @@ -94,7 +94,7 @@ public class UpgradeSystemVMCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Fail to reboot system vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Fail to reboot system vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java index 5dca9d2d4c1..a7336245366 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -123,7 +124,7 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add traffic type to physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add traffic type to physical network"); } } @@ -134,7 +135,7 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd { setEntityId(result.getId()); setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add traffic type to physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add traffic type to physical network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java index bb665fbfd58..526921830ec 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.TrafficTypeResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -73,7 +74,7 @@ public class DeleteTrafficTypeCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete traffic type"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete traffic type"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java index 279c2b858d3..fca07028160 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.usage; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -95,7 +96,7 @@ public class UpdateTrafficTypeCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update traffic type"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update traffic type"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java index 2045abf4e93..1f1e3abc1af 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -137,7 +138,7 @@ public class CreateUserCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a user"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java index a43501e7641..74a073c72d9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -76,7 +77,7 @@ public class DeleteUserCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete user"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java index f483e628928..6b59de5672d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -92,7 +93,7 @@ public class DisableUserCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to disable user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to disable user"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java index e444aa395d2..bcd0f43e03a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java @@ -76,7 +76,7 @@ public class EnableUserCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to enable user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to enable user"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java index 622b4e9a023..1b00bfd29ca 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -77,7 +78,7 @@ public class LockUserCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to lock user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to lock user"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java index 170d852ff58..00bfccc1038 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java @@ -132,7 +132,7 @@ public class UpdateUserCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update user"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java index c9717480e44..9ac1e253bfe 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java @@ -169,14 +169,14 @@ public class CreateVlanIpRangeCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create vlan ip range"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create vlan ip range"); } } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientCapacityException ex) { s_logger.info(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java index f12b2175aef..d45082a2ace 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.VlanIpRangeResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -70,7 +71,7 @@ public class DeleteVlanIpRangeCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete vlan ip range"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete vlan ip range"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java index 3482ec756fb..525e8d72f8f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java @@ -101,14 +101,14 @@ public class AssignVMCmd extends BaseCmd { try { UserVm userVm = _userVmService.moveVMToUser(this); if (userVm == null){ - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to move vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to move vm"); } UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", userVm).get(0); response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); }catch (Exception e){ e.printStackTrace(); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to move vm " + e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to move vm " + e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java index 5bb694da655..e1f20a8e9d3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java @@ -150,20 +150,20 @@ public class MigrateVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to migrate vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to migrate vm"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } catch (ManagementServerException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } catch (VirtualMachineMigrationException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java index f8308614b89..be4d10b8b5f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.vm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -77,7 +78,7 @@ public class RecoverVMCmd extends BaseCmd { recoverVmResponse.setResponseName(getCommandName()); this.setResponseObject(recoverVmResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to recover vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to recover vm"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java index 5bb76ab034b..392b6276bc9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; @@ -115,17 +116,17 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { } catch (InsufficientCapacityException ex){ s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } if (result != null) { this.setEntityId(result.getId()); this.setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create private gateway"); } } @@ -138,7 +139,7 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create private gateway"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java index 273f7c05233..8ccb9d5e68c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java @@ -72,7 +72,7 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{ this.setEntityId(vpcOff.getId()); this.setEntityUuid(vpcOff.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a VPC offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a VPC offering"); } } @@ -84,7 +84,7 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create VPC offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create VPC offering"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java index 4a1e8d05912..2b0e1a6a193 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.PrivateGatewayResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -87,7 +88,7 @@ public class DeletePrivateGatewayCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete private gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete private gateway"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java index 231f2ee2955..9a257c24c0c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.VpcOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -71,7 +72,7 @@ public class DeleteVPCOfferingCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete VPC offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete VPC offering"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java index 65df48e3e1f..c8fa77df1ff 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java @@ -90,7 +90,7 @@ public class UpdateVPCOfferingCmd extends BaseAsyncCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update VPC offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update VPC offering"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java index e49f2439288..ae57fae5a8d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.zone; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -156,7 +157,7 @@ public class CreateZoneCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a zone"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a zone"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java index d09c7fff891..e9a02accba1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java @@ -71,7 +71,7 @@ public class DeleteZoneCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete zone"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete zone"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java index 816befbd029..59a37c96a84 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.zone; import org.apache.log4j.Logger; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -109,7 +110,7 @@ public class MarkDefaultZoneForAccountCmd extends BaseAsyncCmd { this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to mark the account with the default zone"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to mark the account with the default zone"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java index 0bfd1a31a0f..143c8f7a892 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java @@ -164,7 +164,7 @@ public class UpdateZoneCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update zone; internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update zone; internal error."); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java index 889c3697515..f62be0bf8c3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java @@ -87,7 +87,7 @@ public class AddAccountToProjectCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add account to the project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add account to the project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java index f9e967ad4c2..ef14d1ae7aa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java @@ -76,7 +76,7 @@ public class DeleteAccountFromProjectCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete account from the project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete account from the project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java index 024ba74e8b4..4437191db37 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; @@ -213,21 +214,21 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { @Override public void create() throws ResourceAllocationException{ try { - IpAddress ip = _networkService.allocateIP(_accountService.getAccount(getEntityOwnerId()), getZoneId(), getNetworkId()); + IpAddress ip = _networkService.allocateIP(_accountService.getAccount(getEntityOwnerId()), false, getZoneId()); if (ip != null) { this.setEntityId(ip.getId()); this.setEntityUuid(ip.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to allocate ip address"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to allocate ip address"); } } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientAddressCapacityException ex) { s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } } @@ -249,7 +250,7 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { ipResponse.setResponseName(getCommandName()); this.setResponseObject(ipResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to assign ip address"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to assign ip address"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java index 20ccd89ba84..c208a1a3d92 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java @@ -75,7 +75,7 @@ public class DisassociateIPAddrCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to disassociate ip address"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to disassociate ip address"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java index e92721d77bf..987d305b4b0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java @@ -157,7 +157,7 @@ public class CreateAutoScalePolicyCmd extends BaseAsyncCreateCmd { this.setEntityId(result.getId()); this.setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create AutoScale Policy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create AutoScale Policy"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java index e3d47a09c7d..400be5db3f1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java @@ -159,7 +159,7 @@ public class CreateAutoScaleVmGroupCmd extends BaseAsyncCreateCmd { this.setEntityId(result.getId()); this.setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create Autoscale Vm Group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create Autoscale Vm Group"); } } @@ -182,7 +182,7 @@ public class CreateAutoScaleVmGroupCmd extends BaseAsyncCreateCmd { } finally { if (!success || vmGroup == null) { _autoScaleService.deleteAutoScaleVmGroup(getEntityId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create Autoscale Vm Group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create Autoscale Vm Group"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java index 25bb03b778f..39814e7b9ce 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java @@ -22,6 +22,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -231,7 +232,7 @@ public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd { this.setEntityId(result.getId()); this.setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create Autoscale Vm Profile"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create Autoscale Vm Profile"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java index 58926f2a4ff..89da2345134 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -74,7 +75,7 @@ public class CreateConditionCmd extends BaseAsyncCreateCmd { this.setEntityId(condition.getId()); this.setEntityUuid(condition.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create condition."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create condition."); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java index 483a87ac892..aa236ee082e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.AutoScalePolicyResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -92,7 +93,7 @@ public class DeleteAutoScalePolicyCmd extends BaseAsyncCmd { this.setResponseObject(response); } else { s_logger.warn("Failed to delete autoscale policy " + getId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete AutoScale Policy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete AutoScale Policy"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java index 1d78fe80395..54eb7462750 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -92,7 +93,7 @@ public class DeleteAutoScaleVmGroupCmd extends BaseAsyncCmd { this.setResponseObject(response); } else { s_logger.warn("Failed to delete autoscale vm group " + getId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete autoscale vm group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete autoscale vm group"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java index e49f0c862a3..726f006ef02 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -91,7 +92,7 @@ public class DeleteAutoScaleVmProfileCmd extends BaseAsyncCmd { this.setResponseObject(response); } else { s_logger.warn("Failed to delete autoscale vm profile " + getId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete autoscale vm profile"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete autoscale vm profile"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java index a1fba2e3725..5ce1ee27a73 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.ConditionResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -57,14 +58,14 @@ public class DeleteConditionCmd extends BaseAsyncCmd { result = _autoScaleService.deleteCondition(getId()); } catch (ResourceInUseException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, ex.getMessage()); } if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { s_logger.warn("Failed to delete condition " + getId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete condition."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete condition."); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java index 2aba82c2a93..f4f9212979e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java @@ -20,6 +20,7 @@ package org.apache.cloudstack.api.command.user.autoscale; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -56,7 +57,7 @@ public class DisableAutoScaleVmGroupCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to disable AutoScale Vm Group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to disable AutoScale Vm Group"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java index db7acdf5d98..80ac818d263 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java @@ -52,7 +52,7 @@ public class EnableAutoScaleVmGroupCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to enable AutoScale Vm Group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to enable AutoScale Vm Group"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java index 56d71078ece..6a55a4aa1e6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.ConditionResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -68,7 +69,7 @@ public class UpdateAutoScalePolicyCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update autoscale policy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update autoscale policy"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java index ea5b6a9f489..fc6a7c6b861 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java @@ -75,7 +75,7 @@ public class UpdateAutoScaleVmGroupCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update autoscale VmGroup"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update autoscale VmGroup"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java index c8ef8b11198..570ed0beb3d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java @@ -73,7 +73,7 @@ public class UpdateAutoScaleVmProfileCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update autoscale vm profile"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update autoscale vm profile"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java index 7039b417ced..0dcba5f4d5b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; @@ -134,7 +135,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal } finally { if (!success || rule == null) { _firewallService.revokeFirewallRule(getEntityId(), true); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create firewall rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create firewall rule"); } } } @@ -231,7 +232,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal if (getSourceCidrList() != null) { for (String cidr: getSourceCidrList()){ if (!NetUtils.isValidCIDR(cidr)){ - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Source cidrs formatting error " + cidr); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Source cidrs formatting error " + cidr); } } } @@ -243,7 +244,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " + ex.getMessage()); s_logger.trace("Network Rule Conflict: ", ex); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java index 1feefde9a1a..7d8dbb0bbdf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java @@ -185,7 +185,7 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P _rulesService.revokePortForwardingRule(getEntityId(), true); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to apply port forwarding rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to apply port forwarding rule"); } } } @@ -302,7 +302,7 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " , ex); s_logger.trace("Network Rule Conflict: ", ex); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java index 5655b5e430f..8b0a5c16e07 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java @@ -95,7 +95,7 @@ public class DeleteFirewallRuleCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete firewall rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete firewall rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java index 8f4d5996df8..e70bb1556df 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java @@ -97,7 +97,7 @@ public class DeletePortForwardingRuleCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete port forwarding rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete port forwarding rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java index a52ebb77257..2eafaaf7293 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java @@ -124,7 +124,7 @@ public class UpdatePortForwardingRuleCmd extends BaseAsyncCmd { // response.setResponseName(getName()); // this.setResponseObject(response); // } else { -// throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update port forwarding rule"); +// throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update port forwarding rule"); // } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java index 1e154e2a07d..2a0b2c61617 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -104,10 +105,10 @@ public class AttachIsoCmd extends BaseAsyncCmd { response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to attach iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to attach iso"); } } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to attach iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to attach iso"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java index 44efbf88f2c..4c370c70325 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.iso; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -112,7 +113,7 @@ public class DeleteIsoCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete iso"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java index eb1c6eed2d6..c8a87cbdb3e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -91,7 +92,7 @@ public class DetachIsoCmd extends BaseAsyncCmd { response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to detach iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to detach iso"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java index 5f8303ec320..7f893ccd06d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java @@ -126,11 +126,11 @@ public class ExtractIsoCmd extends BaseAsyncCmd { response.setObjectName("iso"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to extract iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to extract iso"); } } catch (InternalErrorException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java index 214d18de5cc..fbc09d8bd56 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java @@ -166,7 +166,7 @@ public class RegisterIsoCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to register iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to register iso"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java index f54f8a66daa..fd1ee3e22de 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.iso; import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd; import org.apache.log4j.Logger; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ServerApiException; @@ -72,7 +73,7 @@ public class UpdateIsoCmd extends BaseUpdateTemplateOrIsoCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update iso"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java index 972673f4954..72c317c89d2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -102,7 +103,7 @@ public class AssignToLoadBalancerRuleCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to assign load balancer rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to assign load balancer rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java index c01e138c1d1..90e89137bf9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -129,7 +130,7 @@ public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd { } } finally { if (!success || (policy == null)) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create stickiness policy "); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create stickiness policy "); } } } @@ -142,7 +143,7 @@ public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd { this.setEntityUuid(result.getUuid()); } catch (NetworkRuleConflictException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java index 4e76a6b676f..b42ff4cc5f1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -266,7 +267,7 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements // no need to apply the rule on the backend as it exists in the db only _lbService.deleteLoadBalancerRule(getEntityId(), false); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create load balancer rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create load balancer rule"); } } } @@ -283,10 +284,10 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements this.setEntityUuid(result.getUuid()); } catch (NetworkRuleConflictException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); } catch (InsufficientAddressCapacityException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java index 9329bd35aba..6405dca169b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.LBStickinessResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -91,7 +92,7 @@ public class DeleteLBStickinessPolicyCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete load balancer stickiness policy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete load balancer stickiness policy"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java index d53155f17b9..84ce225fa1e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java @@ -89,7 +89,7 @@ public class DeleteLoadBalancerRuleCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete load balancer"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete load balancer"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java index f56f06d15c5..54c136fae6d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java @@ -98,7 +98,7 @@ public class RemoveFromLoadBalancerRuleCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to remove instance from load balancer rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to remove instance from load balancer rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java index 8a86f74260d..dd2b360ec23 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java @@ -106,7 +106,7 @@ public class UpdateLoadBalancerRuleCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update load balancer rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update load balancer rule"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java index 1ce3458dde3..c3894c47f57 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; @@ -132,7 +133,7 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta _rulesService.revokeStaticNatRule(getEntityId(), true); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Error in creating ip forwarding rule on the domr"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Error in creating ip forwarding rule on the domr"); } } } @@ -151,7 +152,7 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta this.setEntityUuid(rule.getUuid()); } catch (NetworkRuleConflictException e) { s_logger.info("Unable to create Static Nat Rule due to ", e); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java index 6300a412d54..9879cf5011b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -78,7 +79,7 @@ public class DeleteIpForwardingRuleCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete ip forwarding rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete ip forwarding rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java index fbd0b5ce900..eded5a10742 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -86,7 +87,7 @@ public class DisableStaticNatCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to disable static nat"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to disable static nat"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java index 79a8e2bc9ff..f7cf5aad5d0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.nat; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -114,12 +115,12 @@ public class EnableStaticNatCmd extends BaseCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to enable static nat"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to enable static nat"); } } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " + ex.getMessage()); s_logger.trace("Network Rule Conflict: ", ex); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java index 16843b56d67..d1289b8ddc6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.NetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; @@ -164,7 +165,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR } finally { if (!success || rule == null) { _networkACLService.revokeNetworkACL(getEntityId(), true); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create network ACL"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create network ACL"); } } } @@ -250,7 +251,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR if (getSourceCidrList() != null) { for (String cidr: getSourceCidrList()){ if (!NetUtils.isValidCIDR(cidr)){ - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Source cidrs formatting error " + cidr); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Source cidrs formatting error " + cidr); } } } @@ -262,7 +263,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " + ex.getMessage()); s_logger.trace("Network Rule Conflict: ", ex); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java index 3b2608729a4..870a591bb36 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.network; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -233,7 +234,7 @@ public class CreateNetworkCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create network"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java index 4b078ed7fe3..798bd43aa0b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.network; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -99,7 +100,7 @@ public class DeleteNetworkACLCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network ACL"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete network ACL"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java index df070ff8ecb..2104501d9c2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java @@ -68,7 +68,7 @@ public class DeleteNetworkCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java index ee9af3b0009..c6b5690aeaf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java @@ -90,7 +90,7 @@ public class RestartNetworkCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to restart network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to restart network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java index 5ab8a6035ad..978c71b946c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.network; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -136,7 +137,7 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java index 6cc9387ac2b..8fd52753d77 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java @@ -79,7 +79,7 @@ public class ActivateProjectCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to activate a project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to activate a project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java index 865f7a0aa99..095cbfc49b8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java @@ -114,7 +114,7 @@ public class CreateProjectCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a project"); } } @@ -126,7 +126,7 @@ public class CreateProjectCmd extends BaseAsyncCreateCmd { this.setEntityId(project.getId()); this.setEntityUuid(project.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java index fb41a7f14ef..6f7467fadf8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -71,7 +72,7 @@ public class DeleteProjectCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java index 67c7cefc252..7ed857e575b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -72,7 +73,7 @@ public class DeleteProjectInvitationCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete the project invitation"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete the project invitation"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java index 120e4fe0c55..01e4082c193 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java @@ -69,7 +69,7 @@ public class SuspendProjectCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to suspend a project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to suspend a project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java index bad117727e0..01f56311d17 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.project; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -97,7 +98,7 @@ public class UpdateProjectCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update a project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update a project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java index 32e1a755484..637c6339521 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java @@ -92,7 +92,7 @@ public class UpdateProjectInvitationCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to join the project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to join the project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java index 0d62c18f55d..5799db26d7a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -74,7 +75,7 @@ public class GetCloudIdentifierCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to get cloud identifier"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to get cloud identifier"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java index d2b6870f0ca..4aa694b6857 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java @@ -123,7 +123,7 @@ public class UpdateResourceCountCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to recalculate resource counts"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to recalculate resource counts"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java index 262d12dc264..9b6359fcc4c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java @@ -100,7 +100,7 @@ public class UpdateResourceLimitCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update resource limit"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update resource limit"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java index acafcbe19a9..0551089f033 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java @@ -206,7 +206,7 @@ public class AuthorizeSecurityGroupEgressCmd extends BaseAsyncCmd { SecurityGroupResponse response = _responseGenerator.createSecurityGroupResponseFromSecurityGroupRule(egressRules); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to authorize security group egress rule(s)"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to authorize security group egress rule(s)"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java index abd20fcc81d..35939d36659 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java @@ -25,6 +25,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -210,7 +211,7 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd { if(cidrList != null){ for(String cidr : cidrList ){ if (!NetUtils.isValidCIDR(cidr)){ - throw new ServerApiException(BaseCmd.PARAM_ERROR, cidr + " is an Invalid CIDR "); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, cidr + " is an Invalid CIDR "); } } } @@ -219,7 +220,7 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd { SecurityGroupResponse response = _responseGenerator.createSecurityGroupResponseFromSecurityGroupRule(ingressRules); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to authorize security group ingress rule(s)"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to authorize security group ingress rule(s)"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java index c494355e15e..5dc49291426 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.securitygroup; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -116,7 +117,7 @@ public class CreateSecurityGroupCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create security group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create security group"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java index 15a00253b63..506dc53ff23 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.securitygroup; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -120,11 +121,11 @@ public class DeleteSecurityGroupCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete security group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete security group"); } } catch (ResourceInUseException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java index 53d8fcf59c7..27072fcb6c3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java @@ -88,7 +88,7 @@ public class RevokeSecurityGroupEgressCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to revoke security group egress rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to revoke security group egress rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java index 1f56dee9bca..70851cf1e41 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.securitygroup; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -92,7 +93,7 @@ public class RevokeSecurityGroupIngressCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to revoke security group ingress rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to revoke security group ingress rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java index 14f46540cc3..49158a64d17 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java @@ -152,7 +152,7 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd { this.setEntityId(snapshot.getId()); this.setEntityUuid(snapshot.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create snapshot"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create snapshot"); } } @@ -165,7 +165,7 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create snapshot due to an internal error creating snapshot for volume " + volumeId); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create snapshot due to an internal error creating snapshot for volume " + volumeId); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java index cafb79e0523..756a93aa8f4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java @@ -126,7 +126,7 @@ public class CreateSnapshotPolicyCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create snapshot policy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create snapshot policy"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java index 6def8730cbd..dc0b8ee8138 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java @@ -94,7 +94,7 @@ public class DeleteSnapshotCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete snapshot"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete snapshot"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java index 17f28d931ea..0207f3c3416 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -80,7 +81,7 @@ public class DeleteSnapshotPoliciesCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete snapshot policy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete snapshot policy"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java index 54338bd24e2..9c108b4904c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java @@ -26,6 +26,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -115,7 +116,7 @@ public class CreateTagsCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create tags"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create tags"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java index cf2ea9ec1cb..c142f141f86 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java @@ -26,6 +26,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -106,7 +107,7 @@ public class DeleteTagsCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete tags"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete tags"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java index c6461a75e28..406f32cc958 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -133,11 +134,11 @@ public class CopyTemplateCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to copy template"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to copy template"); } } catch (StorageUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java index e72b49b4e4d..9723f9a14a1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java @@ -247,7 +247,7 @@ import com.cloud.user.UserContext; this.setEntityId(template.getId()); this.setEntityUuid(template.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a template"); } } @@ -277,7 +277,7 @@ import com.cloud.user.UserContext; response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private template"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create private template"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java index 26f3e841f68..8ee3041713c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java @@ -109,7 +109,7 @@ public class DeleteTemplateCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete template"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete template"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java index 521293cb275..54f3e3782fb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java @@ -126,11 +126,11 @@ public class ExtractTemplateCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to extract template"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to extract template"); } } catch (InternalErrorException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java index b3677b9d3a1..cc4c52486e7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java @@ -24,6 +24,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -233,11 +234,11 @@ public class RegisterTemplateCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to register template"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to register template"); } } catch (URISyntaxException ex1) { s_logger.info(ex1); - throw new ServerApiException(BaseCmd.PARAM_ERROR, ex1.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ex1.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java index 01ea200293e..8893e8faeef 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.template; import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd; import org.apache.log4j.Logger; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ServerApiException; @@ -73,7 +74,7 @@ public class UpdateTemplateCmd extends BaseUpdateTemplateOrIsoCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update template"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update template"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java index e675c83dd6f..9d39f692eaf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -364,14 +364,14 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientCapacityException ex) { s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } } else { result = _userVmService.getUserVm(getEntityId()); @@ -382,7 +382,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to deploy vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to deploy vm"); } } @@ -454,18 +454,18 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { setEntityId(vm.getId()); setEntityUuid(vm.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to deploy vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to deploy vm"); } } catch (InsufficientCapacityException ex) { s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java index db830d1a188..381f5b744b8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java @@ -104,7 +104,7 @@ public class DestroyVMCmd extends BaseAsyncCmd { response.setResponseName("virtualmachine"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to destroy vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to destroy vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java index 45ebc287913..63319dc6853 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -107,7 +108,7 @@ public class RebootVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to reboot vm instance"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to reboot vm instance"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java index a4c2b3772e9..2ca94bf6a89 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -116,7 +117,7 @@ public class ResetVMPasswordCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to reset vm password"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to reset vm password"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java index 9b2452e355d..d906c7f6343 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -64,7 +65,7 @@ public class RestoreVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to restore vm " + getVmId()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to restore vm " + getVmId()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java index 36199d13c24..65391f7f8ff 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java @@ -125,17 +125,17 @@ public class StartVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to start a vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to start a vm"); } } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (StorageUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ExecutionException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java index 8e589060520..cfa89a54249 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java @@ -120,7 +120,7 @@ public class StopVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to stop vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to stop vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java index 7f1e7efdc1a..60b23389ddd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -126,7 +127,7 @@ public class UpdateVMCmd extends BaseCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java index f2c3882bd3c..6c2e0f1eb54 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java @@ -98,7 +98,7 @@ public class UpgradeVMCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to upgrade vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to upgrade vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java index 9c2c6027ac9..ea28497053d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java @@ -99,7 +99,7 @@ public class CreateVMGroupCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create vm instance group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create vm instance group"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java index 47c2f764db6..3e9d1a24afa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java @@ -73,7 +73,7 @@ public class DeleteVMGroupCmd extends BaseCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete vm group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete vm group"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java index 09313c0f797..eb0d747d54b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java @@ -80,7 +80,7 @@ public class UpdateVMGroupCmd extends BaseCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update vm instance group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update vm instance group"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java index e48e4e43093..e5652952a0f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -125,7 +126,7 @@ public class AttachVolumeCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to attach volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to attach volume"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java index 04541b9fda7..0a0ba54e04f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.*; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -153,7 +154,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { this.setEntityId(volume.getId()); this.setEntityUuid(volume.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create volume"); } } @@ -179,7 +180,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a volume"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java index 2b2e94cab6b..6e3b4e12f7f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -84,7 +85,7 @@ public class DeleteVolumeCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete volume"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java index c8ecddea699..db17f58e6e6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java @@ -132,7 +132,7 @@ public class DetachVolumeCmd extends BaseAsyncCmd { response.setResponseName("volume"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to detach volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to detach volume"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java index 43b25a83663..40e46fd6b88 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -148,11 +149,11 @@ public class ExtractVolumeCmd extends BaseAsyncCmd { response.setUrl(uploadInfo.getUploadUrl()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to extract volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to extract volume"); } } catch (URISyntaxException ex) { s_logger.info(ex); - throw new ServerApiException(BaseCmd.PARAM_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java index 30e672ada1b..88076dbfb8b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java @@ -17,6 +17,7 @@ package org.apache.cloudstack.api.command.user.volume; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -98,7 +99,7 @@ public class MigrateVolumeCmd extends BaseAsyncCmd { this.setResponseObject(response); } } catch (ConcurrentOperationException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to migrate volume: "); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to migrate volume: "); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java new file mode 100644 index 00000000000..ff004831516 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java @@ -0,0 +1,154 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.user.volume; + +import org.apache.cloudstack.api.response.*; +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; +import java.util.regex.Matcher; + +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.async.AsyncJob; +import com.cloud.event.EventTypes; +import com.cloud.projects.Project; +import com.cloud.storage.Volume; +import com.cloud.user.Account; +import com.cloud.user.UserContext; + + +@APICommand(name="resizeVolume", description="Resizes a volume", responseObject=VolumeResponse.class) +public class ResizeVolumeCmd extends BaseAsyncCmd { + public static final Logger s_logger = Logger.getLogger(ResizeVolumeCmd.class.getName()); + + private static final String s_name = "resizevolumeresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name=ApiConstants.ID, entityType=VolumeResponse.class, type=CommandType.UUID, description="the ID of the disk volume") + private Long id; + + @Parameter(name=ApiConstants.SIZE, type=CommandType.LONG, required=false, description="New volume size in G") + private Long size; + + @Parameter(name=ApiConstants.SHRINK_OK, type=CommandType.BOOLEAN, required=false, description="Verify OK to Shrink") + private boolean shrinkOk; + + @Parameter(name=ApiConstants.DISK_OFFERING_ID, entityType=DiskOfferingResponse.class, type=CommandType.UUID, required=false, description="new disk offering id") + private Long newDiskOfferingId; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getEntityId() { + return id; + } + + public Long getSize() { + return size; + } + + public boolean getShrinkOk() { + return shrinkOk; + } + + public Long getNewDiskOfferingId() { + return newDiskOfferingId; + } + + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public AsyncJob.Type getInstanceType() { + return AsyncJob.Type.Volume; + } + + public static String getResultObjectName() { + return "volume"; + } + + @Override + public long getEntityOwnerId() { + + Volume volume = _entityMgr.findById(Volume.class, getEntityId()); + if (volume == null) { + throw new InvalidParameterValueException("Unable to find volume by id=" + id); + } + + Account account = _accountService.getAccount(volume.getAccountId()); + //Can resize volumes for enabled projects/accounts only + if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) { + Project project = _projectService.findByProjectAccountId(volume.getAccountId()); + if (project.getState() != Project.State.Active) { + throw new PermissionDeniedException("Can't add resources to project id=" + project.getId() + " in state=" + project.getState() + " as it's no longer active"); + } + } else if (account.getState() == Account.State.disabled) { + throw new PermissionDeniedException("The owner of volume " + id + " is disabled: " + account); + } + + return volume.getAccountId(); + } + + + @Override + public String getEventType() { + return EventTypes.EVENT_VOLUME_RESIZE; + } + + @Override + public String getEventDescription() { + return "Volume Id: " + getEntityId() + " to size " + getSize() + "G" ; + } + + @Override + public void execute(){ + UserContext.current().setEventDetails("Volume Id: " + getEntityId() + " to size " + getSize() + "G"); + Volume volume = _storageService.resizeVolume(this); + if (volume != null) { + VolumeResponse response = _responseGenerator.createVolumeResponse(volume); + //FIXME - have to be moved to ApiResponseHelper + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to resize volume"); + } + } +} diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java index 4167ffd6460..e2c2c5b6d3a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java @@ -112,7 +112,7 @@ public class UploadVolumeCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to upload volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to upload volume"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java index 96de56a5be5..adeec0d0425 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vpc; import org.apache.cloudstack.api.response.PrivateGatewayResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; @@ -71,7 +72,7 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " + ex.getMessage()); s_logger.trace("Network rule conflict: ", ex); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); } } @@ -105,7 +106,7 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ } finally { if (!success || route == null) { _vpcService.revokeStaticRoute(getEntityId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create static route"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create static route"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java index 8a2e1f641fb..ccd8675e50d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java @@ -24,6 +24,7 @@ import org.apache.cloudstack.api.response.VpcOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -126,7 +127,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ this.setEntityId(vpc.getId()); this.setEntityUuid(vpc.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a VPC"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a VPC"); } } @@ -139,14 +140,14 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientCapacityException ex) { s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } if (vpc != null) { @@ -154,7 +155,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create VPC"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create VPC"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java index c9e4463db14..02d342e5c80 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java @@ -95,7 +95,7 @@ public class DeleteStaticRouteCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete static route"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete static route"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java index ed4e754f736..132556c87b7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java @@ -71,14 +71,14 @@ public class DeleteVPCCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete VPC"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete VPC"); } }catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java index 4a23e6e6595..f28c4cb55bb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java @@ -78,18 +78,18 @@ public class RestartVPCCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to restart VPC"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to restart VPC"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientCapacityException ex) { s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java index 2dc64dba267..d34f7bf7bf3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vpc; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -92,7 +93,7 @@ public class UpdateVPCCmd extends BaseAsyncCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update VPC"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update VPC"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java index f2d19a7cce6..479e990494d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -119,7 +120,7 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd { VpnUser vpnUser = _entityMgr.findById(VpnUser.class, getEntityId()); Account account = _entityMgr.findById(Account.class, vpnUser.getAccountId()); if (!_ravService.applyVpnUsers(vpnUser.getAccountId(), userName)) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add vpn user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add vpn user"); } VpnUsersResponse vpnResponse = new VpnUsersResponse(); @@ -144,7 +145,7 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd { VpnUser vpnUser = _ravService.addVpnUser(owner.getId(), userName, password); if (vpnUser == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add vpn user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add vpn user"); } setEntityId(vpnUser.getId()); setEntityUuid(vpnUser.getUuid()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java index b517af883c3..ae09ef79894 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java @@ -148,12 +148,12 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { this.setEntityUuid(ipAddr.getUuid()); } } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create remote access vpn"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create remote access vpn"); } } catch (NetworkRuleConflictException e) { s_logger.info("Network rule conflict: " + e.getMessage()); s_logger.trace("Network Rule Conflict: ", e); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); } } @@ -166,11 +166,11 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create remote access vpn"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create remote access vpn"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java index 3dc334d0e2a..327f35b6688 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java @@ -94,12 +94,12 @@ public class CreateVpnConnectionCmd extends BaseAsyncCreateCmd { this.setEntityId(conn.getId()); this.setEntityUuid(conn.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create site to site vpn connection"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create site to site vpn connection"); } } catch (NetworkRuleConflictException e) { s_logger.info("Network rule conflict: " + e.getMessage()); s_logger.trace("Network Rule Conflict: ", e); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); } } @@ -112,11 +112,11 @@ public class CreateVpnConnectionCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create site to site vpn connection"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create site to site vpn connection"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java index bde98b0b44b..a14a5ec820c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -160,7 +161,7 @@ public class CreateVpnCustomerGatewayCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create customer VPN gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create customer VPN gateway"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java index 4b405541a90..2d2150b89b4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -86,7 +87,7 @@ public class CreateVpnGatewayCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create VPN gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create VPN gateway"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java index 23a7793ef88..06521026bcb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java @@ -86,11 +86,11 @@ public class DeleteVpnConnectionCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete site to site VPN connection"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete site to site VPN connection"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java index 181ee3bbc68..854bb9b6ebf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java @@ -84,7 +84,7 @@ public class DeleteVpnCustomerGatewayCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete customer VPN gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete customer VPN gateway"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java index 9ac27d07664..6c89f7c9b93 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java @@ -85,7 +85,7 @@ public class DeleteVpnGatewayCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete customer VPN gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete customer VPN gateway"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java index bdad7e31dd9..11ca651f6a2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -110,11 +111,11 @@ public class RemoveVpnUserCmd extends BaseAsyncCmd { Account owner = _accountService.getAccount(getEntityOwnerId()); boolean result = _ravService.removeVpnUser(owner.getId(), userName, UserContext.current().getCaller()); if (!result) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to remove vpn user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to remove vpn user"); } if (!_ravService.applyVpnUsers(owner.getId(), userName)) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to apply vpn user removal"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to apply vpn user removal"); } SuccessResponse response = new SuccessResponse(getCommandName()); setResponseObject(response); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java index ed28ea5610f..14e2f8cd853 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java @@ -104,11 +104,11 @@ public class ResetVpnConnectionCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to reset site to site VPN connection"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to reset site to site VPN connection"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java index 7564129c38f..27b656d49da 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java @@ -155,7 +155,7 @@ public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update customer VPN gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update customer VPN gateway"); } } } diff --git a/api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java b/api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java new file mode 100644 index 00000000000..2d248b2f53a --- /dev/null +++ b/api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java @@ -0,0 +1,199 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package src.com.cloud.agent.api.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.junit.Test; + +import com.cloud.agent.api.storage.ResizeVolumeCommand; +import com.cloud.agent.api.to.StorageFilerTO; +import com.cloud.storage.StoragePool; +import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.StoragePoolStatus; + + +public class ResizeVolumeCommandTest { + + public StoragePool dummypool = new StoragePool() { + public long getId() { + return 1L; + }; + + public String getName() { + return "name"; + }; + + public String getUuid() { + return "bed9f83e-cac3-11e1-ac8a-0050568b007e"; + }; + + public StoragePoolType getPoolType() { + return StoragePoolType.Filesystem; + }; + + public Date getCreated() { + Date date = null; + try { + date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") + .parse("01/01/1970 12:12:12"); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } + + public Date getUpdateTime() { + return new Date(); + }; + + public long getDataCenterId() { + return 0L; + }; + + public long getCapacityBytes() { + return 0L; + }; + + public long getAvailableBytes() { + return 0L; + }; + + public Long getClusterId() { + return 0L; + }; + + public String getHostAddress() { + return "hostAddress"; + }; + + public String getPath() { + return "path"; + }; + + public String getUserInfo() { + return "userInfo"; + }; + + public boolean isShared() { + return false; + }; + + public boolean isLocal() { + return false; + }; + + public StoragePoolStatus getStatus() { + return StoragePoolStatus.Up; + }; + + public int getPort() { + return 25; + }; + + public Long getPodId() { + return 0L; + }; + }; + + Long newSize = 4194304L; + Long currentSize = 1048576L; + + ResizeVolumeCommand rv = new ResizeVolumeCommand("dummydiskpath", + new StorageFilerTO(dummypool), currentSize, newSize, false, + "vmName"); + + @Test + public void testExecuteInSequence() { + boolean b = rv.executeInSequence(); + assertFalse(b); + } + + @Test + public void testGetPath() { + String path = rv.getPath(); + assertTrue(path.equals("dummydiskpath")); + } + + @Test + public void testGetPoolUuid() { + String poolUuid = rv.getPoolUuid(); + assertTrue(poolUuid.equals("bed9f83e-cac3-11e1-ac8a-0050568b007e")); + } + + @Test + public void testGetPool() { + StorageFilerTO pool = rv.getPool(); + + Long id = pool.getId(); + Long expectedL = 1L; + assertEquals(expectedL, id); + + String uuid = pool.getUuid(); + assertTrue(uuid.equals("bed9f83e-cac3-11e1-ac8a-0050568b007e")); + + String host = pool.getHost(); + assertTrue(host.equals("hostAddress")); + + String path = pool.getPath(); + assertTrue(path.equals("path")); + + String userInfo = pool.getUserInfo(); + assertTrue(userInfo.equals("userInfo")); + + Integer port = pool.getPort(); + Integer expectedI = 25; + assertEquals(expectedI, port); + + StoragePoolType type = pool.getType(); + assertEquals(StoragePoolType.Filesystem, type); + + String str = pool.toString(); + assertTrue(str.equals("Pool[" + id.toString() + "|" + host + ":" + + port.toString() + "|" + path + "]")); + } + + @Test + public void testGetNewSize() { + long newSize = rv.getNewSize(); + assertTrue(newSize == 4194304L); + } + + @Test + public void testGetCurrentSize() { + long currentSize = rv.getCurrentSize(); + assertTrue(currentSize == 1048576L); + } + + @Test + public void testGetShrinkOk() { + assertFalse(rv.getShrinkOk()); + } + + @Test + public void testGetInstanceName() { + String vmName = rv.getInstanceName(); + assertTrue(vmName.equals("vmName")); + } + +} diff --git a/client/bindir/cloud-setup-management.in b/client/bindir/cloud-setup-management.in index 469c9614b41..ca1327ae725 100755 --- a/client/bindir/cloud-setup-management.in +++ b/client/bindir/cloud-setup-management.in @@ -16,8 +16,9 @@ # specific language governing permissions and limitations # under the License. +import sys from cloudutils.syscfg import sysConfigFactory -from cloudutils.utilities import initLoging +from cloudutils.utilities import initLoging, UnknownSystemException from cloudutils.cloudException import CloudRuntimeException, CloudInternalException from cloudutils.globalEnv import globalEnv from cloudutils.serviceConfigServer import cloudManagementConfig @@ -35,7 +36,12 @@ if __name__ == '__main__': glbEnv.mode = "Server" print "Starting to configure CloudStack Management Server:" - syscfg = sysConfigFactory.getSysConfigFactory(glbEnv) + try: + syscfg = sysConfigFactory.getSysConfigFactory(glbEnv) + except UnknownSystemException: + print >>sys.stderr, ("Error: CloudStack failed to detect your " + "operating system. Exiting.") + sys.exit(1) try: syscfg.registerService(cloudManagementConfig) syscfg.config() diff --git a/client/tomcatconf/cisconexusvsm_commands.properties.in b/client/tomcatconf/cisconexusvsm_commands.properties.in deleted file mode 100644 index 0427ba2d212..00000000000 --- a/client/tomcatconf/cisconexusvsm_commands.properties.in +++ /dev/null @@ -1,25 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### Cisco Nexus 1000v Virtual Supervisor Module (VSM) commands -deleteCiscoNexusVSM=1 -enableCiscoNexusVSM=1 -disableCiscoNexusVSM=1 -listCiscoNexusVSMs=1 diff --git a/client/tomcatconf/commands-ext.properties.in b/client/tomcatconf/commands-ext.properties.in deleted file mode 100644 index cd1d0eac066..00000000000 --- a/client/tomcatconf/commands-ext.properties.in +++ /dev/null @@ -1,28 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -#### usage commands -generateUsageRecords=com.cloud.api.commands.GenerateUsageRecordsCmd;1 -listUsageRecords=com.cloud.api.commands.GetUsageRecordsCmd;1 -listUsageTypes=com.cloud.api.commands.ListUsageTypesCmd;1 - -#### traffic monitor commands -addTrafficMonitor=com.cloud.api.commands.AddTrafficMonitorCmd;1 -deleteTrafficMonitor=com.cloud.api.commands.DeleteTrafficMonitorCmd;1 -listTrafficMonitors=com.cloud.api.commands.ListTrafficMonitorsCmd;1 - - diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 3872f2a8783..182cbd8cf3b 100644 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -255,6 +255,7 @@ deleteVolume=15 listVolumes=15 extractVolume=15 migrateVolume=15 +resizeVolume=15 #### registration command: FIXME -- this really should be something in management server that #### generates a new key for the user and they just have to @@ -424,3 +425,87 @@ resetVpnConnection=15 listVpnCustomerGateways=15 listVpnGateways=15 listVpnConnections=15 + +#### router commands +createVirtualRouterElement=7 +configureVirtualRouterElement=7 +listVirtualRouterElements=7 + +#### usage commands +generateUsageRecords=1 +listUsageRecords=1 +listUsageTypes=1 + +#### traffic monitor commands +addTrafficMonitor=1 +deleteTrafficMonitor=1 +listTrafficMonitors=1 + +#### Cisco Nexus 1000v Virtual Supervisor Module (VSM) commands +deleteCiscoNexusVSM=1 +enableCiscoNexusVSM=1 +disableCiscoNexusVSM=1 +listCiscoNexusVSMs=1 + +#### f5 big ip load balancer commands + +#Deprecated commands +addExternalLoadBalancer=1 +deleteExternalLoadBalancer=1 +listExternalLoadBalancers=1 + +addF5LoadBalancer=1 +configureF5LoadBalancer=1 +deleteF5LoadBalancer=1 +listF5LoadBalancers=1 +listF5LoadBalancerNetworks=1 + +#### juniper srx firewall commands +addExternalFirewall=1 +deleteExternalFirewall=1 +listExternalFirewalls=1 + +addSrxFirewall=1 +deleteSrxFirewall=1 +configureSrxFirewall=1 +listSrxFirewalls=1 +listSrxFirewallNetworks=1 + +####Netapp integration commands +createVolumeOnFiler=15 +destroyVolumeOnFiler=15 +listVolumesOnFiler=15 +createLunOnFiler=15 +destroyLunOnFiler=15 +listLunsOnFiler=15 +associateLun=15 +dissociateLun=15 +createPool=15 +deletePool=15 +modifyPool=15 +listPools=15 + +#### netscaler load balancer commands +addNetscalerLoadBalancer=1 +deleteNetscalerLoadBalancer=1 +configureNetscalerLoadBalancer=1 +listNetscalerLoadBalancers=1 +listNetscalerLoadBalancerNetworks=1 + +#### nicira nvp commands + +addNiciraNvpDevice=1 +deleteNiciraNvpDevice=1 +listNiciraNvpDevices=1 +listNiciraNvpDeviceNetworks=1 + +# Not implemented (yet) +#configureNiciraNvpDevice=1 + +#### host simulator commands + +configureSimulator=1 + +#### api discovery commands + +listApis=15 diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index bb39839c820..958757a3563 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -162,6 +162,59 @@ under the License. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client/tomcatconf/f5bigip_commands.properties.in b/client/tomcatconf/f5bigip_commands.properties.in deleted file mode 100644 index 8c3cc2a145a..00000000000 --- a/client/tomcatconf/f5bigip_commands.properties.in +++ /dev/null @@ -1,32 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### f5 big ip load balancer commands - -#Deprecated commands -addExternalLoadBalancer=1 -deleteExternalLoadBalancer=1 -listExternalLoadBalancers=1 - -addF5LoadBalancer=1 -configureF5LoadBalancer=1 -deleteF5LoadBalancer=1 -listF5LoadBalancers=1 -listF5LoadBalancerNetworks=1 diff --git a/client/tomcatconf/junipersrx_commands.properties.in b/client/tomcatconf/junipersrx_commands.properties.in deleted file mode 100644 index 2cadc62c57e..00000000000 --- a/client/tomcatconf/junipersrx_commands.properties.in +++ /dev/null @@ -1,30 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### juniper srx firewall commands -addExternalFirewall=1 -deleteExternalFirewall=1 -listExternalFirewalls=1 - -addSrxFirewall=1 -deleteSrxFirewall=1 -configureSrxFirewall=1 -listSrxFirewalls=1 -listSrxFirewallNetworks=1 diff --git a/client/tomcatconf/netapp_commands.properties.in b/client/tomcatconf/netapp_commands.properties.in deleted file mode 100644 index ea17ac0560b..00000000000 --- a/client/tomcatconf/netapp_commands.properties.in +++ /dev/null @@ -1,33 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -####Netapp integration commands -createVolumeOnFiler=15 -destroyVolumeOnFiler=15 -listVolumesOnFiler=15 -createLunOnFiler=15 -destroyLunOnFiler=15 -listLunsOnFiler=15 -associateLun=15 -dissociateLun=15 -createPool=15 -deletePool=15 -modifyPool=15 -listPools=15 diff --git a/client/tomcatconf/netscalerloadbalancer_commands.properties.in b/client/tomcatconf/netscalerloadbalancer_commands.properties.in deleted file mode 100644 index 9eeb8da9987..00000000000 --- a/client/tomcatconf/netscalerloadbalancer_commands.properties.in +++ /dev/null @@ -1,26 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### netscaler load balancer commands -addNetscalerLoadBalancer=1 -deleteNetscalerLoadBalancer=1 -configureNetscalerLoadBalancer=1 -listNetscalerLoadBalancers=1 -listNetscalerLoadBalancerNetworks=1 diff --git a/client/tomcatconf/nicira-nvp_commands.properties.in b/client/tomcatconf/nicira-nvp_commands.properties.in deleted file mode 100644 index 1b2b5253394..00000000000 --- a/client/tomcatconf/nicira-nvp_commands.properties.in +++ /dev/null @@ -1,29 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### nicira nvp commands - -addNiciraNvpDevice=1 -deleteNiciraNvpDevice=1 -listNiciraNvpDevices=1 -listNiciraNvpDeviceNetworks=1 - -# Not implemented (yet) -#configureNiciraNvpDevice=1 diff --git a/client/tomcatconf/simulator_commands.properties.in b/client/tomcatconf/simulator_commands.properties.in deleted file mode 100644 index b7213a28c05..00000000000 --- a/client/tomcatconf/simulator_commands.properties.in +++ /dev/null @@ -1,19 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - - -configureSimulator=1 diff --git a/client/tomcatconf/virtualrouter_commands.properties.in b/client/tomcatconf/virtualrouter_commands.properties.in deleted file mode 100644 index 169496b8f4d..00000000000 --- a/client/tomcatconf/virtualrouter_commands.properties.in +++ /dev/null @@ -1,24 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### router commands -createVirtualRouterElement=7 -configureVirtualRouterElement=7 -listVirtualRouterElements=7 diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java index 2dc7950b2b7..18a0426e2fa 100755 --- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java @@ -720,7 +720,7 @@ public class VirtualRoutingResource implements Manager { args += " -N "; args += cmd.getPeerGuestCidrList(); } - String result = routerProxy("ipsectunnel", cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP), args); + String result = routerProxy("ipsectunnel.sh", cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP), args); if (result != null) { return new Answer(cmd, false, "Configure site to site VPN failed due to " + result); } diff --git a/core/src/com/cloud/network/resource/TrafficSentinelResource.java b/core/src/com/cloud/network/resource/TrafficSentinelResource.java index a13e080b7e4..22deccffdd5 100644 --- a/core/src/com/cloud/network/resource/TrafficSentinelResource.java +++ b/core/src/com/cloud/network/resource/TrafficSentinelResource.java @@ -108,7 +108,7 @@ public class TrafficSentinelResource implements ServerResource { cmd.setPod(""); cmd.setPrivateIpAddress(_ip); cmd.setStorageIpAddress(""); - cmd.setVersion(""); + cmd.setVersion(TrafficSentinelResource.class.getPackage().getImplementationVersion()); cmd.setGuid(_guid); return new StartupCommand[]{cmd}; } diff --git a/patches/systemvm/debian/config/etc/init.d/cloud-early-config b/patches/systemvm/debian/config/etc/init.d/cloud-early-config index fe536cbb5a9..285a92fa0a6 100755 --- a/patches/systemvm/debian/config/etc/init.d/cloud-early-config +++ b/patches/systemvm/debian/config/etc/init.d/cloud-early-config @@ -660,7 +660,7 @@ EOF enable_svc dnsmasq 1 enable_svc haproxy 1 enable_svc cloud 0 - disable_rpfilter_domR + disable_rpfilter enable_fwding 1 cp /etc/iptables/iptables-vpcrouter /etc/iptables/rules setup_sshd $ETH0_IP "eth0" diff --git a/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh b/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh index d20ed5a05d2..c909cf796d1 100755 --- a/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh +++ b/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh @@ -134,6 +134,7 @@ create_guest_network() { sudo ip addr add dev $dev $ip/$mask brd + sudo ip link set $dev up sudo arping -c 3 -I $dev -A -U -s $ip $ip + echo 1 > /proc/sys/net/ipv4/conf/$dev/rp_filter # restore mark from connection mark local tableName="Table_$dev" sudo ip route add $subnet/$mask dev $dev table $tableName proto static diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index f51a63ac752..d4d73d1f77b 100644 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -16,11 +16,6 @@ // under the License. package org.apache.cloudstack.acl; -import static org.apache.cloudstack.acl.RoleType.Admin; -import static org.apache.cloudstack.acl.RoleType.DomainAdmin; -import static org.apache.cloudstack.acl.RoleType.ResourceAdmin; -import static org.apache.cloudstack.acl.RoleType.User; - import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -32,13 +27,13 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; -import com.cloud.server.ManagementServer; import com.cloud.exception.PermissionDeniedException; -import com.cloud.user.AccountManager; +import com.cloud.user.Account; +import com.cloud.user.AccountService; +import com.cloud.user.User; +import com.cloud.utils.PropertiesUtil; import com.cloud.utils.component.AdapterBase; -import com.cloud.utils.component.ComponentContext; import com.cloud.utils.component.PluggableService; // This is the default API access checker that grab's the user's account @@ -52,6 +47,7 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC new HashMap>(); @Inject List _services; + @Inject AccountService _accountService; protected StaticRoleBasedAPIAccessChecker() { super(); @@ -60,8 +56,14 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC } @Override - public boolean checkAccess(RoleType roleType, String commandName) + public boolean checkAccess(User user, String commandName) throws PermissionDeniedException { + Account account = _accountService.getAccount(user.getAccountId()); + if (account == null) { + throw new PermissionDeniedException("The account id=" + user.getAccountId() + "for user id=" + user.getId() + "is null"); + } + + RoleType roleType = _accountService.getRoleType(account); boolean isAllowed = s_roleBasedApisMap.get(roleType).contains(commandName); if (!isAllowed) { throw new PermissionDeniedException("The API does not exist or is blacklisted. Role type=" + roleType.toString() + " is not allowed to request the api: " + commandName); @@ -72,15 +74,13 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC @Override public boolean configure(String name, Map params) throws ConfigurationException { super.configure(name, params); - _services.add((PluggableService) ComponentContext.getComponent(ManagementServer.Name)); - for (PluggableService service : _services) { - processConfigFiles(service.getProperties(), service.getClass().toString()); - s_logger.info("Processed role based acl for: " + service.toString()); - } + + processMapping(PropertiesUtil.processConfigFile(new String[] + {"commands.properties"})); return true; } - private void processConfigFiles(Map configMap, String service) { + private void processMapping(Map configMap) { for (Map.Entry entry: configMap.entrySet()) { String apiName = entry.getKey(); String roleMask = entry.getValue(); @@ -91,8 +91,7 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC s_roleBasedApisMap.get(roleType).add(apiName); } } catch (NumberFormatException nfe) { - s_logger.info("Malformed getProperties() value for service: " + service - + " for entry: " + entry.toString()); + s_logger.info("Malformed key=value pair for entry: " + entry.toString()); } } } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java index f93e398892b..5de04f01e11 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java @@ -18,19 +18,20 @@ package org.apache.cloudstack.api.command.user.discovery; import javax.inject.Inject; -import com.cloud.user.UserContext; -import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; +import org.apache.cloudstack.api.response.ApiDiscoveryResponse; import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.discovery.ApiDiscoveryService; -import org.apache.cloudstack.api.response.ApiDiscoveryResponse; - import org.apache.log4j.Logger; +import com.cloud.user.User; +import com.cloud.user.UserContext; + @APICommand(name = "listApis", responseObject = ApiDiscoveryResponse.class, description = "lists all available apis on the server, provided by the Api Discovery plugin", since = "4.1.0") public class ListApisCmd extends BaseCmd { @@ -46,10 +47,10 @@ public class ListApisCmd extends BaseCmd { @Override public void execute() throws ServerApiException { if (_apiDiscoveryService != null) { - RoleType roleType = _accountService.getRoleType(UserContext.current().getCaller()); - ListResponse response = (ListResponse) _apiDiscoveryService.listApis(roleType, name); + User user = UserContext.current().getCallerUser(); + ListResponse response = (ListResponse) _apiDiscoveryService.listApis(user, name); if (response == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Api Discovery plugin was unable to find an api by that name or process any apis"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Api Discovery plugin was unable to find an api by that name or process any apis"); } response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java index 611493bfc08..6458c5619e8 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.discovery; +import com.cloud.user.User; import com.cloud.utils.component.PluggableService; -import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.response.ListResponse; public interface ApiDiscoveryService extends PluggableService { - ListResponse listApis(RoleType roleType, String apiName); + ListResponse listApis(User user, String apiName); } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java index 6ff4085b047..d10d9599c99 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@ -16,29 +16,6 @@ // under the License. package org.apache.cloudstack.discovery; -import com.cloud.serializer.Param; -import com.cloud.server.ManagementServer; -import com.cloud.utils.ReflectUtil; -import com.cloud.utils.StringUtils; -import com.cloud.utils.component.ComponentContext; -import com.cloud.utils.component.PluggableService; -import com.google.gson.annotations.SerializedName; -import org.apache.cloudstack.acl.RoleType; -import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseAsyncCreateCmd; -import org.apache.cloudstack.api.BaseResponse; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.response.ApiDiscoveryResponse; -import org.apache.cloudstack.api.response.ApiParameterResponse; -import org.apache.cloudstack.api.response.ApiResponseResponse; -import org.apache.cloudstack.api.response.ListResponse; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; - -import javax.ejb.Local; -import javax.inject.Inject; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; @@ -47,59 +24,58 @@ import java.util.List; import java.util.Map; import java.util.Set; +import javax.ejb.Local; +import javax.inject.Inject; + +import org.apache.cloudstack.acl.APIChecker; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseAsyncCreateCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseResponse; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.command.user.discovery.ListApisCmd; +import org.apache.cloudstack.api.response.ApiDiscoveryResponse; +import org.apache.cloudstack.api.response.ApiParameterResponse; +import org.apache.cloudstack.api.response.ApiResponseResponse; +import org.apache.cloudstack.api.response.ListResponse; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + +import com.cloud.serializer.Param; +import com.cloud.user.User; +import com.cloud.utils.ReflectUtil; +import com.cloud.utils.StringUtils; +import com.cloud.utils.component.PluggableService; +import com.google.gson.annotations.SerializedName; + @Component @Local(value = ApiDiscoveryService.class) public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { private static final Logger s_logger = Logger.getLogger(ApiDiscoveryServiceImpl.class); - private static Map> _roleTypeDiscoveryResponseListMap; - - private static Map _apiNameDiscoveryResponseMap = - new HashMap(); - - private static Map> _apiNameRoleTypeListMap = null; + @Inject List _apiAccessCheckers = null; + private Map _apiNameDiscoveryResponseMap = null; @Inject List _services; protected ApiDiscoveryServiceImpl() { super(); - if (_roleTypeDiscoveryResponseListMap == null) { + if (_apiNameDiscoveryResponseMap == null) { long startTime = System.nanoTime(); - _roleTypeDiscoveryResponseListMap = new HashMap>(); - for (RoleType roleType: RoleType.values()) - _roleTypeDiscoveryResponseListMap.put(roleType, new ArrayList()); + _apiNameDiscoveryResponseMap = new HashMap(); cacheResponseMap(); long endTime = System.nanoTime(); s_logger.info("Api Discovery Service: Annotation, docstrings, api relation graph processed in " + (endTime - startTime) / 1000000.0 + " ms"); } } - private Map> getApiNameRoleTypeListMap() { - Map> apiNameRoleTypeMap = new HashMap>(); - _services.add((PluggableService) ComponentContext.getComponent(ManagementServer.Name)); - for (PluggableService service : _services) { - for (Map.Entry entry: service.getProperties().entrySet()) { - String apiName = entry.getKey(); - String roleMask = entry.getValue(); - try { - short cmdPermissions = Short.parseShort(roleMask); - if (!apiNameRoleTypeMap.containsKey(apiName)) - apiNameRoleTypeMap.put(apiName, new ArrayList()); - for (RoleType roleType: RoleType.values()) { - if ((cmdPermissions & roleType.getValue()) != 0) - apiNameRoleTypeMap.get(apiName).add(roleType); - } - } catch (NumberFormatException nfe) { - } - } - } - return apiNameRoleTypeMap; - } - private void cacheResponseMap() { Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); + //TODO: Fix and use PluggableService to get the classes + Map> responseApiNameListMap = new HashMap>(); for(Class cmdClass: cmdClasses) { @@ -169,7 +145,7 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { _apiNameDiscoveryResponseMap.put(apiName, response); } - for (String apiName: _apiNameDiscoveryResponseMap.keySet()) { + for (String apiName : _apiNameDiscoveryResponseMap.keySet()) { ApiDiscoveryResponse response = _apiNameDiscoveryResponseMap.get(apiName); Set processedParams = new HashSet(); for (ApiParameterResponse param: response.getParams()) { @@ -195,41 +171,48 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { } @Override - public ListResponse listApis(RoleType roleType, String name) { - // Creates roles based response list cache the first time listApis is called - // Due to how adapters work, this cannot be done when mgmt loads - if (_apiNameRoleTypeListMap == null) { - long startTime = System.nanoTime(); - _apiNameRoleTypeListMap = getApiNameRoleTypeListMap(); - for (Map.Entry> entry: _apiNameRoleTypeListMap.entrySet()) { - String apiName = entry.getKey(); - for (RoleType roleTypeInList: entry.getValue()) { - _roleTypeDiscoveryResponseListMap.get(roleTypeInList).add( - _apiNameDiscoveryResponseMap.get(apiName)); - } - } - long endTime = System.nanoTime(); - s_logger.info("Api Discovery Service: List apis cached in " + (endTime - startTime) / 1000000.0 + " ms"); - } + public ListResponse listApis(User user, String name) { ListResponse response = new ListResponse(); + List responseList = new ArrayList(); + + if (user == null) + return null; + if (name != null) { if (!_apiNameDiscoveryResponseMap.containsKey(name)) return null; - List singleResponse = new ArrayList(); - singleResponse.add(_apiNameDiscoveryResponseMap.get(name)); - response.setResponses(singleResponse); + for (APIChecker apiChecker : _apiAccessCheckers) { + try { + apiChecker.checkAccess(user, name); + } catch (Exception ex) { + return null; + } + } + responseList.add(_apiNameDiscoveryResponseMap.get(name)); } else { - response.setResponses(_roleTypeDiscoveryResponseListMap.get(roleType)); + for (String apiName : _apiNameDiscoveryResponseMap.keySet()) { + boolean isAllowed = true; + for (APIChecker apiChecker : _apiAccessCheckers) { + try { + apiChecker.checkAccess(user, apiName); + } catch (Exception ex) { + isAllowed = false; + } + } + if (isAllowed) + responseList.add(_apiNameDiscoveryResponseMap.get(apiName)); + } } + response.setResponses(responseList); return response; } @Override - public Map getProperties() { - Map apiDiscoveryPropertyMap = new HashMap(); - apiDiscoveryPropertyMap.put("listApis", "15"); - return apiDiscoveryPropertyMap; + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(ListApisCmd.class); + return cmdList; } } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java index 64865bb0777..62c94cae9f3 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java @@ -21,6 +21,7 @@ import java.rmi.ServerException; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -85,9 +86,9 @@ public class AssociateLunCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (ServerException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java index c8d8d04e6f1..d94b7c991ad 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java @@ -21,6 +21,7 @@ import java.rmi.ServerException; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -76,9 +77,9 @@ public class CreateLunCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (ServerException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java index 72a9efae978..9480c8500e5 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java @@ -20,6 +20,7 @@ import java.net.UnknownHostException; import java.rmi.ServerException; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -122,11 +123,11 @@ public class CreateVolumeOnFilerCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (ServerException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (UnknownHostException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java index f7ff567e838..ae0e411de4f 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java @@ -19,6 +19,7 @@ package com.cloud.api.commands.netapp; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -64,7 +65,7 @@ public class CreateVolumePoolCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java index 7106c580125..f5da74af940 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java @@ -20,6 +20,7 @@ package com.cloud.api.commands.netapp; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -55,9 +56,9 @@ public class DeleteVolumePoolCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (ResourceInUseException e) { - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, e.toString()); } } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java index 8afd14342d4..d6a857cad0d 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java @@ -21,6 +21,7 @@ import java.rmi.ServerException; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -56,9 +57,9 @@ public class DestroyLunCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (ServerException e) { - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, e.toString()); } } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java index 730f1c0bb43..ab1e0df3de5 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java @@ -60,11 +60,11 @@ public class DestroyVolumeOnFilerCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (ResourceInUseException e) { - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, e.toString()); } catch (ServerException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java index 5061f497521..1fc42ea91b8 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java @@ -55,9 +55,9 @@ public class DissociateLunCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (ServerException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java index 7c2ed45ebc3..d1bf7ea35c6 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java @@ -22,6 +22,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -70,7 +71,7 @@ public class ListLunsCmd extends BaseCmd listResponse.setResponseName(getCommandName()); this.setResponseObject(listResponse); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java index 5857f4340af..6ab551ed267 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ServerApiException; @@ -64,7 +65,7 @@ public class ListVolumePoolsCmd extends BaseCmd { listResponse.setResponseName(getCommandName()); this.setResponseObject(listResponse); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java index 17548cd65be..7d26365500f 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java @@ -71,7 +71,7 @@ public class ListVolumesOnFilerCmd extends BaseCmd { listResponse.setResponseName(getCommandName()); this.setResponseObject(listResponse); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } } diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java index b4771cacb10..bd1573c9fa9 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java @@ -91,6 +91,8 @@ public class KVMGuestOsMapper { s_mapper.put("Fedora 10", "Fedora 10"); s_mapper.put("Fedora 9", "Fedora 9"); s_mapper.put("Fedora 8", "Fedora 8"); + s_mapper.put("Ubuntu 12.04 (32-bit)", "Ubuntu 12.04"); + s_mapper.put("Ubuntu 12.04 (64-bit)", "Ubuntu 12.04"); s_mapper.put("Ubuntu 10.04 (32-bit)", "Ubuntu 10.04"); s_mapper.put("Ubuntu 10.04 (64-bit)", "Ubuntu 10.04"); s_mapper.put("Ubuntu 10.10 (32-bit)", "Ubuntu 10.10"); diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index af5b2a4c33b..232806debda 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -159,6 +159,8 @@ import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; import com.cloud.agent.api.storage.DestroyCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; +import com.cloud.agent.api.storage.ResizeVolumeCommand; +import com.cloud.agent.api.storage.ResizeVolumeAnswer; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.StorageFilerTO; @@ -252,6 +254,7 @@ ServerResource { private String _patchdomrPath; private String _createvmPath; private String _manageSnapshotPath; + private String _resizeVolumePath; private String _createTmplPath; private String _heartBeatPath; private String _securityGroupPath; @@ -523,6 +526,12 @@ ServerResource { "Unable to find the managesnapshot.sh"); } + _resizeVolumePath = Script.findScript(storageScriptsDir, "resizevolume.sh"); + if (_resizeVolumePath == null) { + throw new ConfigurationException( + "Unable to find the resizevolume.sh"); + } + _createTmplPath = Script .findScript(storageScriptsDir, "createtmplt.sh"); if (_createTmplPath == null) { @@ -1051,6 +1060,8 @@ ServerResource { return execute((CleanupNetworkRulesCmd) cmd); } else if (cmd instanceof CopyVolumeCommand) { return execute((CopyVolumeCommand) cmd); + } else if (cmd instanceof ResizeVolumeCommand) { + return execute((ResizeVolumeCommand) cmd); } else if (cmd instanceof CheckNetworkCommand) { return execute((CheckNetworkCommand) cmd); } else { @@ -1257,6 +1268,72 @@ ServerResource { } } + private String getResizeScriptType (KVMStoragePool pool, KVMPhysicalDisk vol) { + StoragePoolType poolType = pool.getType(); + PhysicalDiskFormat volFormat = vol.getFormat(); + + if(pool.getType() == StoragePoolType.CLVM && volFormat == KVMPhysicalDisk.PhysicalDiskFormat.RAW) { + return "CLVM"; + } else if ((poolType == StoragePoolType.NetworkFilesystem + || poolType == StoragePoolType.SharedMountPoint + || poolType == StoragePoolType.Filesystem) + && volFormat == KVMPhysicalDisk.PhysicalDiskFormat.QCOW2 ) { + return "QCOW2"; + } + return null; + } + + /* uses a local script now, eventually support for virStorageVolResize() will maybe work on + qcow2 and lvm and we can do this in libvirt calls */ + public Answer execute(ResizeVolumeCommand cmd) { + String volid = cmd.getPath(); + long newSize = cmd.getNewSize(); + long currentSize = cmd.getCurrentSize(); + String vmInstanceName = cmd.getInstanceName(); + boolean shrinkOk = cmd.getShrinkOk(); + StorageFilerTO spool = cmd.getPool(); + + try { + KVMStoragePool pool = _storagePoolMgr.getStoragePool(spool.getType(), spool.getUuid()); + KVMPhysicalDisk vol = pool.getPhysicalDisk(volid); + String path = vol.getPath(); + String type = getResizeScriptType(pool, vol); + + if (type == null) { + return new ResizeVolumeAnswer(cmd, false, "Unsupported volume format: pool type '" + + pool.getType() + "' and volume format '" + vol.getFormat() + "'"); + } + + s_logger.debug("got to the stage where we execute the volume resize, params:" + + path + "," + currentSize + "," + newSize + "," + type + "," + vmInstanceName + "," + shrinkOk); + final Script resizecmd = new Script(_resizeVolumePath, + _cmdsTimeout, s_logger); + resizecmd.add("-s",String.valueOf(newSize)); + resizecmd.add("-c",String.valueOf(currentSize)); + resizecmd.add("-p",path); + resizecmd.add("-t",type); + resizecmd.add("-r",String.valueOf(shrinkOk)); + resizecmd.add("-v",vmInstanceName); + String result = resizecmd.execute(); + + if (result == null) { + + /* fetch new size as seen from libvirt, don't want to assume anything */ + pool = _storagePoolMgr.getStoragePool(spool.getType(), spool.getUuid()); + long finalSize = pool.getPhysicalDisk(volid).getVirtualSize(); + s_logger.debug("after resize, size reports as " + finalSize + ", requested " + newSize); + return new ResizeVolumeAnswer(cmd, true, "success", finalSize); + } + + return new ResizeVolumeAnswer(cmd, false, result); + } catch (CloudRuntimeException e) { + String error = "failed to resize volume: " + e; + s_logger.debug(error); + return new ResizeVolumeAnswer(cmd, false, error); + } + + } + public Answer execute(DestroyCommand cmd) { VolumeTO vol = cmd.getVolume(); @@ -2890,9 +2967,8 @@ ServerResource { NicTO[] nics = vmSpec.getNics(); for (NicTO nic : nics) { - if (nic.getIsolationUri() != null - && nic.getIsolationUri().getScheme() - .equalsIgnoreCase(IsolationType.Ec2.toString())) { + if (nic.isSecurityGroupEnabled() || ( nic.getIsolationUri() != null + && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString()))) { if (vmSpec.getType() != VirtualMachine.Type.User) { default_network_rules_for_systemvm(conn, vmName); break; @@ -3138,8 +3214,11 @@ ServerResource { } try { - //we use libvirt since we passed a libvirt connection to cleanupDisk - KVMStoragePool pool = _storagePoolMgr.getStoragePool(null, poolUuid); + // we use libvirt as storage adaptor since we passed a libvirt + // connection to cleanupDisk. We pass a storage type that maps + // to libvirt adaptor. + KVMStoragePool pool = _storagePoolMgr.getStoragePool( + StoragePoolType.Filesystem, poolUuid); if (pool != null) { pool.delete(); } diff --git a/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java b/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java index 205484dadd7..e982665965c 100755 --- a/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java +++ b/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java @@ -20,6 +20,7 @@ import javax.inject.Inject; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -63,7 +64,7 @@ public class ConfigureSimulator extends BaseCmd { public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException { boolean result = _simMgr.configureSimulator(zoneId, podId, clusterId, hostId, command, values); if (!result) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to configure simulator"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to configure simulator"); } SuccessResponse response = new SuccessResponse(getCommandName()); diff --git a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java index 44ab26a020a..c639a556cb7 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java @@ -17,16 +17,17 @@ package com.cloud.server; +import com.cloud.api.commands.ConfigureSimulator; import com.cloud.utils.PropertiesUtil; +import java.util.List; import java.util.Map; public class ManagementServerSimulatorImpl extends ManagementServerExtImpl { @Override - public Map getProperties() { - Map apiNameRoleMaskMapping = super.getProperties(); - apiNameRoleMaskMapping.putAll(PropertiesUtil.processConfigFile(new String[] - {"commands-simulator.properties"})); - return apiNameRoleMaskMapping; + public List> getCommands() { + List> cmdList = super.getCommands(); + cmdList.add(ConfigureSimulator.class); + return cmdList; } } diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java index 9891bc82556..9f24bbd0cfc 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java @@ -18,12 +18,12 @@ package com.cloud.simulator; import com.cloud.utils.SerialVersionUID; -import com.cloud.utils.exception.RuntimeCloudException; +import com.cloud.utils.exception.CloudRuntimeException; /** * wrap exceptions that you know there's no point in dealing with. */ -public class SimulatorRuntimeException extends RuntimeCloudException { +public class SimulatorRuntimeException extends CloudRuntimeException { private static final long serialVersionUID = SerialVersionUID.CloudRuntimeException; diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java index 6cb4e320ebc..8cbe75d7f6a 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java @@ -22,6 +22,7 @@ import javax.inject.Inject; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -71,7 +72,7 @@ public class DeleteCiscoNexusVSMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to delete Cisco Nexus VSM device"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete Cisco Nexus VSM device"); } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java index 1795512b98f..830f22e95a1 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java @@ -22,6 +22,7 @@ import javax.inject.Inject; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -71,7 +72,7 @@ public class DisableCiscoNexusVSMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to disable Cisco Nexus VSM device"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to disable Cisco Nexus VSM device"); } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java index 80a678a4e9d..2034aa35ad6 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java @@ -68,7 +68,7 @@ public class EnableCiscoNexusVSMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to enable Cisco Nexus VSM device"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to enable Cisco Nexus VSM device"); } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java index 2e647c291bf..1eb197f0a76 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -102,7 +103,7 @@ public class ListCiscoNexusVSMsCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseListCmd.INTERNAL_ERROR, "No VSM found."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "No VSM found."); } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java index bf57c09fd4b..b9d65069200 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java @@ -50,7 +50,7 @@ import com.cloud.hypervisor.HypervisorGuruBase; import com.cloud.hypervisor.vmware.VmwareCleanupMaid; import com.cloud.hypervisor.vmware.manager.VmwareManager; import com.cloud.hypervisor.vmware.mo.VirtualEthernetCardType; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.NetworkDao; @@ -86,7 +86,7 @@ public class VMwareGuru extends HypervisorGuruBase implements HypervisorGuru { @Inject VmwareManager _vmwareMgr; @Inject SecondaryStorageVmManager _secStorageMgr; @Inject CheckPointManager _checkPointMgr; - @Inject NetworkManager _networkMgr; + @Inject NetworkModel _networkMgr; protected VMwareGuru() { super(); diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java index 7286ada5798..b51e9df5f39 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java @@ -52,7 +52,7 @@ import com.cloud.hypervisor.vmware.mo.HostMO; import com.cloud.hypervisor.vmware.resource.VmwareContextFactory; import com.cloud.hypervisor.vmware.resource.VmwareResource; import com.cloud.hypervisor.vmware.util.VmwareContext; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.dao.CiscoNexusVSMDeviceDao; import com.cloud.resource.Discoverer; import com.cloud.resource.DiscovererBase; @@ -96,7 +96,7 @@ public class VmwareServerDiscoverer extends DiscovererBase implements @Inject CiscoNexusVSMDeviceDao _nexusDao; @Inject - NetworkManager _netmgr; + NetworkModel _netmgr; @Override public Map> find(long dcId, diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java index be3fe9f465b..e1ca6ccac03 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManager.java @@ -27,43 +27,41 @@ import com.cloud.utils.Pair; import com.vmware.vim25.ManagedObjectReference; public interface VmwareManager { - public final String CONTEXT_STOCK_NAME = "vmwareMgr"; - - // this limitation comes from the fact that we are using linked clone on shared VMFS storage, - // we need to limit the size of vCenter cluster, http://en.wikipedia.org/wiki/VMware_VMFS - public final int MAX_HOSTS_PER_CLUSTER = 8; + public final String CONTEXT_STOCK_NAME = "vmwareMgr"; + + // this limitation comes from the fact that we are using linked clone on shared VMFS storage, + // we need to limit the size of vCenter cluster, http://en.wikipedia.org/wiki/VMware_VMFS + public final int MAX_HOSTS_PER_CLUSTER = 8; + + String composeWorkerName(); - String composeWorkerName(); - String getSystemVMIsoFileNameOnDatastore(); String getSystemVMDefaultNicAdapterType(); - - void prepareSecondaryStorageStore(String strStorageUrl); - - void setupResourceStartupParams(Map params); - List addHostToPodCluster(VmwareContext serviceContext, long dcId, Long podId, Long clusterId, - String hostInventoryPath) throws Exception; - String getManagementPortGroupByHost(HostMO hostMo) throws Exception; - String getServiceConsolePortGroupName(); - String getManagementPortGroupName(); - - String getSecondaryStorageStoreUrl(long dcId); - - File getSystemVMKeyFile(); - - VmwareStorageManager getStorageManager(); - long pushCleanupCheckpoint(String hostGuid, String vmName); - void popCleanupCheckpoint(long checkpiont); - void gcLeftOverVMs(VmwareContext context); - - Pair getAddiionalVncPortRange(); - - int getMaxHostsPerCluster(); - int getRouterExtraPublicNics(); - - boolean beginExclusiveOperation(int timeOutSeconds); - void endExclusiveOperation(); + void prepareSecondaryStorageStore(String strStorageUrl); + + void setupResourceStartupParams(Map params); + List addHostToPodCluster(VmwareContext serviceContext, long dcId, Long podId, Long clusterId, + String hostInventoryPath) throws Exception; + + String getManagementPortGroupByHost(HostMO hostMo) throws Exception; + String getServiceConsolePortGroupName(); + String getManagementPortGroupName(); + + String getSecondaryStorageStoreUrl(long dcId); + + File getSystemVMKeyFile(); + + VmwareStorageManager getStorageManager(); + void gcLeftOverVMs(VmwareContext context); + + Pair getAddiionalVncPortRange(); + + int getMaxHostsPerCluster(); + int getRouterExtraPublicNics(); + + boolean beginExclusiveOperation(int timeOutSeconds); + void endExclusiveOperation(); boolean getNexusVSwitchGlobalParameter(); diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java index 618d996f955..1e941b76315 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -46,7 +46,6 @@ import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; -import com.cloud.cluster.CheckPointManager; import com.cloud.cluster.ClusterManager; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; @@ -61,10 +60,6 @@ import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.vmware.VmwareCleanupMaid; -import com.cloud.hypervisor.vmware.manager.VmwareManager; -import com.cloud.hypervisor.vmware.manager.VmwareStorageManager; -import com.cloud.hypervisor.vmware.manager.VmwareStorageManagerImpl; -import com.cloud.hypervisor.vmware.manager.VmwareStorageMount; import com.cloud.hypervisor.vmware.mo.DiskControllerType; import com.cloud.hypervisor.vmware.mo.HostFirewallSystemMO; import com.cloud.hypervisor.vmware.mo.HostMO; @@ -72,27 +67,27 @@ import com.cloud.hypervisor.vmware.mo.HypervisorHostHelper; import com.cloud.hypervisor.vmware.mo.TaskMO; import com.cloud.hypervisor.vmware.mo.VirtualEthernetCardType; import com.cloud.hypervisor.vmware.mo.VmwareHostType; -import com.cloud.utils.ssh.SshHelper; import com.cloud.hypervisor.vmware.util.VmwareContext; import com.cloud.network.CiscoNexusVSMDeviceVO; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.dao.CiscoNexusVSMDeviceDao; import com.cloud.org.Cluster.ClusterType; import com.cloud.secstorage.CommandExecLogDao; import com.cloud.serializer.GsonHelper; import com.cloud.server.ConfigurationServer; +import com.cloud.storage.JavaStorageLayer; import com.cloud.storage.StorageLayer; import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.utils.FileUtil; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; - import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; import com.cloud.utils.db.GlobalLock; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; +import com.cloud.utils.ssh.SshHelper; import com.cloud.vm.DomainRouterVO; import com.google.gson.Gson; import com.vmware.apputils.vim25.ServiceUtil; @@ -114,13 +109,13 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis private String _instance; @Inject AgentManager _agentMgr; - @Inject NetworkManager _netMgr; + @Inject + protected NetworkModel _netMgr; @Inject HostDao _hostDao; @Inject ClusterDao _clusterDao; @Inject ClusterDetailsDao _clusterDetailsDao; @Inject CommandExecLogDao _cmdExecLogDao; @Inject ClusterManager _clusterMgr; - @Inject CheckPointManager _checkPointMgr; @Inject SecondaryStorageVmManager _ssvmMgr; @Inject CiscoNexusVSMDeviceDao _nexusDao; @Inject ClusterVSMMapDao _vsmMapDao; @@ -142,15 +137,15 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis int _additionalPortRangeSize; int _maxHostsPerCluster; int _routerExtraPublicNics = 2; - + String _cpuOverprovisioningFactor = "1"; String _reserveCpu = "false"; - + String _memOverprovisioningFactor = "1"; String _reserveMem = "false"; - + String _rootDiskController = DiskControllerType.ide.toString(); - + Map _storageMounts = new HashMap(); Random _rand = new Random(System.currentTimeMillis()); @@ -199,27 +194,16 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis _storage = (StorageLayer)params.get(StorageLayer.InstanceConfigKey); if (_storage == null) { - value = (String)params.get(StorageLayer.ClassConfigKey); - if (value == null) { - value = "com.cloud.storage.JavaStorageLayer"; - } - - try { - Class clazz = Class.forName(value); - _storage = (StorageLayer)ComponentLocator.inject(clazz); - _storage.configure("StorageLayer", params); - } catch (ClassNotFoundException e) { - throw new ConfigurationException("Unable to find class " + value); - } + _storage = new JavaStorageLayer(); + _storage.configure("StorageLayer", params); } - value = _configDao.getValue(Config.VmwareUseNexusVSwitch.key()); if(value == null) { - _nexusVSwitchActive = false; + _nexusVSwitchActive = false; } else { - _nexusVSwitchActive = Boolean.parseBoolean(value); + _nexusVSwitchActive = Boolean.parseBoolean(value); } _privateNetworkVSwitchName = _configDao.getValue(Config.VmwarePrivateNetworkVSwitch.key()); @@ -256,55 +240,55 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis if(_serviceConsoleName == null) { _serviceConsoleName = "Service Console"; } - + _managemetPortGroupName = _configDao.getValue(Config.VmwareManagementPortGroup.key()); if(_managemetPortGroupName == null) { - _managemetPortGroupName = "Management Network"; + _managemetPortGroupName = "Management Network"; } - + _defaultSystemVmNicAdapterType = _configDao.getValue(Config.VmwareSystemVmNicDeviceType.key()); if(_defaultSystemVmNicAdapterType == null) _defaultSystemVmNicAdapterType = VirtualEthernetCardType.E1000.toString(); - + _additionalPortRangeStart = NumbersUtil.parseInt(_configDao.getValue(Config.VmwareAdditionalVncPortRangeStart.key()), 59000); if(_additionalPortRangeStart > 65535) { - s_logger.warn("Invalid port range start port (" + _additionalPortRangeStart + ") for additional VNC port allocation, reset it to default start port 59000"); - _additionalPortRangeStart = 59000; + s_logger.warn("Invalid port range start port (" + _additionalPortRangeStart + ") for additional VNC port allocation, reset it to default start port 59000"); + _additionalPortRangeStart = 59000; } - + _additionalPortRangeSize = NumbersUtil.parseInt(_configDao.getValue(Config.VmwareAdditionalVncPortRangeSize.key()), 1000); if(_additionalPortRangeSize < 0 || _additionalPortRangeStart + _additionalPortRangeSize > 65535) { - s_logger.warn("Invalid port range size (" + _additionalPortRangeSize + " for range starts at " + _additionalPortRangeStart); - _additionalPortRangeSize = Math.min(1000, 65535 - _additionalPortRangeStart); + s_logger.warn("Invalid port range size (" + _additionalPortRangeSize + " for range starts at " + _additionalPortRangeStart); + _additionalPortRangeSize = Math.min(1000, 65535 - _additionalPortRangeStart); } - + _routerExtraPublicNics = NumbersUtil.parseInt(_configDao.getValue(Config.RouterExtraPublicNics.key()), 2); - + _maxHostsPerCluster = NumbersUtil.parseInt(_configDao.getValue(Config.VmwarePerClusterHostMax.key()), VmwareManager.MAX_HOSTS_PER_CLUSTER); _cpuOverprovisioningFactor = _configDao.getValue(Config.CPUOverprovisioningFactor.key()); if(_cpuOverprovisioningFactor == null || _cpuOverprovisioningFactor.isEmpty()) - _cpuOverprovisioningFactor = "1"; + _cpuOverprovisioningFactor = "1"; _memOverprovisioningFactor = _configDao.getValue(Config.MemOverprovisioningFactor.key()); if(_memOverprovisioningFactor == null || _memOverprovisioningFactor.isEmpty()) - _memOverprovisioningFactor = "1"; - + _memOverprovisioningFactor = "1"; + _reserveCpu = _configDao.getValue(Config.VmwareReserveCpu.key()); if(_reserveCpu == null || _reserveCpu.isEmpty()) - _reserveCpu = "false"; + _reserveCpu = "false"; _reserveMem = _configDao.getValue(Config.VmwareReserveMem.key()); if(_reserveMem == null || _reserveMem.isEmpty()) - _reserveMem = "false"; - + _reserveMem = "false"; + _recycleHungWorker = _configDao.getValue(Config.VmwareRecycleHungWorker.key()); if(_recycleHungWorker == null || _recycleHungWorker.isEmpty()) _recycleHungWorker = "false"; - + _rootDiskController = _configDao.getValue(Config.VmwareRootDiskControllerType.key()); if(_rootDiskController == null || _rootDiskController.isEmpty()) - _rootDiskController = DiskControllerType.ide.toString(); - - s_logger.info("Additional VNC port allocation range is settled at " + _additionalPortRangeStart + " to " + (_additionalPortRangeStart + _additionalPortRangeSize)); + _rootDiskController = DiskControllerType.ide.toString(); + + s_logger.info("Additional VNC port allocation range is settled at " + _additionalPortRangeStart + " to " + (_additionalPortRangeStart + _additionalPortRangeSize)); value = _configDao.getValue("vmware.host.scan.interval"); _hostScanInterval = NumbersUtil.parseLong(value, DEFAULT_HOST_SCAN_INTERVAL); @@ -344,6 +328,7 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis return _name; } + @Override public boolean getNexusVSwitchGlobalParameter() { return _nexusVSwitchActive; } @@ -352,22 +337,22 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis public String composeWorkerName() { return UUID.randomUUID().toString().replace("-", ""); } - + @Override public String getPrivateVSwitchName(long dcId, HypervisorType hypervisorType) { return _netMgr.getDefaultManagementTrafficLabel(dcId, hypervisorType); } - + @Override public String getPublicVSwitchName(long dcId, HypervisorType hypervisorType) { return _netMgr.getDefaultPublicTrafficLabel(dcId, hypervisorType); } - + @Override public String getGuestVSwitchName(long dcId, HypervisorType hypervisorType) { return _netMgr.getDefaultGuestTrafficLabel(dcId, hypervisorType); } - + @Override public List addHostToPodCluster(VmwareContext serviceContext, long dcId, Long podId, Long clusterId, String hostInventoryPath) throws Exception { @@ -391,23 +376,23 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis HostMO hostMo = new HostMO(serviceContext, hosts[0]); HostFirewallSystemMO firewallMo = hostMo.getHostFirewallSystemMO(); if(firewallMo != null) { - if(hostMo.getHostType() == VmwareHostType.ESX) { - - firewallMo.enableRuleset("vncServer"); - firewallMo.refreshFirewall(); - } + if(hostMo.getHostType() == VmwareHostType.ESX) { + + firewallMo.enableRuleset("vncServer"); + firewallMo.refreshFirewall(); + } } // prepare at least one network on the vswitch to enable OVF importing String vlanId = null; if(privateTrafficLabel != null) { - String[] tokens = privateTrafficLabel.split(","); - if(tokens.length == 2) - vlanId = tokens[1]; + String[] tokens = privateTrafficLabel.split(","); + if(tokens.length == 2) + vlanId = tokens[1]; } if(!_nexusVSwitchActive) { - HypervisorHostHelper.prepareNetwork(_privateNetworkVSwitchName, "cloud.private", hostMo, vlanId, null, null, 180000, false); + HypervisorHostHelper.prepareNetwork(_privateNetworkVSwitchName, "cloud.private", hostMo, vlanId, null, null, 180000, false); } else { s_logger.info("Preparing Network on " + privateTrafficLabel); @@ -418,22 +403,22 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis } else if(mor.getType().equals("ClusterComputeResource")) { ManagedObjectReference[] hosts = (ManagedObjectReference[])serviceContext.getServiceUtil().getDynamicProperty(mor, "host"); assert(hosts != null); - + if(hosts.length > _maxHostsPerCluster) { - String msg = "vCenter cluster size is too big (current configured cluster size: " + _maxHostsPerCluster + ")"; - s_logger.error(msg); - throw new DiscoveredWithErrorException(msg); + String msg = "vCenter cluster size is too big (current configured cluster size: " + _maxHostsPerCluster + ")"; + s_logger.error(msg); + throw new DiscoveredWithErrorException(msg); } - + for(ManagedObjectReference morHost: hosts) { // For ESX host, we need to enable host firewall to allow VNC access HostMO hostMo = new HostMO(serviceContext, morHost); HostFirewallSystemMO firewallMo = hostMo.getHostFirewallSystemMO(); if(firewallMo != null) { - if(hostMo.getHostType() == VmwareHostType.ESX) { - firewallMo.enableRuleset("vncServer"); - firewallMo.refreshFirewall(); - } + if(hostMo.getHostType() == VmwareHostType.ESX) { + firewallMo.enableRuleset("vncServer"); + firewallMo.refreshFirewall(); + } } String vlanId = null; @@ -442,12 +427,12 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis if(tokens.length == 2) vlanId = tokens[1]; } - - + + s_logger.info("Calling prepareNetwork : " + hostMo.getContext().toString()); // prepare at least one network on the vswitch to enable OVF importing if(!_nexusVSwitchActive) { - HypervisorHostHelper.prepareNetwork(_privateNetworkVSwitchName, "cloud.private", hostMo, vlanId, null, null, 180000, false); + HypervisorHostHelper.prepareNetwork(_privateNetworkVSwitchName, "cloud.private", hostMo, vlanId, null, null, 180000, false); } else { s_logger.info("Preparing Network on " + privateTrafficLabel); @@ -461,10 +446,10 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis HostMO hostMo = new HostMO(serviceContext, mor); HostFirewallSystemMO firewallMo = hostMo.getHostFirewallSystemMO(); if(firewallMo != null) { - if(hostMo.getHostType() == VmwareHostType.ESX) { - firewallMo.enableRuleset("vncServer"); - firewallMo.refreshFirewall(); - } + if(hostMo.getHostType() == VmwareHostType.ESX) { + firewallMo.enableRuleset("vncServer"); + firewallMo.refreshFirewall(); + } } String vlanId = null; @@ -476,7 +461,7 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis // prepare at least one network on the vswitch to enable OVF importing if(!_nexusVSwitchActive) { - HypervisorHostHelper.prepareNetwork(_privateNetworkVSwitchName, "cloud.private", hostMo, vlanId, null, null, 180000, false); + HypervisorHostHelper.prepareNetwork(_privateNetworkVSwitchName, "cloud.private", hostMo, vlanId, null, null, 180000, false); } else { s_logger.info("Preparing Network on " + privateTrafficLabel); @@ -534,28 +519,30 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis @Override public String getSecondaryStorageStoreUrl(long dcId) { - List secStorageHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId); - if(secStorageHosts.size() > 0) - return secStorageHosts.get(0).getStorageUrl(); - + List secStorageHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId); + if(secStorageHosts.size() > 0) + return secStorageHosts.get(0).getStorageUrl(); + return null; } - public String getServiceConsolePortGroupName() { - return _serviceConsoleName; - } - - public String getManagementPortGroupName() { - return _managemetPortGroupName; - } - + @Override + public String getServiceConsolePortGroupName() { + return _serviceConsoleName; + } + + @Override + public String getManagementPortGroupName() { + return _managemetPortGroupName; + } + @Override public String getManagementPortGroupByHost(HostMO hostMo) throws Exception { - if(hostMo.getHostType() == VmwareHostType.ESXi) - return this._managemetPortGroupName; + if(hostMo.getHostType() == VmwareHostType.ESXi) + return this._managemetPortGroupName; return this._serviceConsoleName; } - + @Override public void setupResourceStartupParams(Map params) { params.put("private.network.vswitch.name", _privateNetworkVSwitchName); @@ -577,20 +564,10 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis return _storageMgr; } - + @Override - public long pushCleanupCheckpoint(String hostGuid, String vmName) { - return _checkPointMgr.pushCheckPoint(new VmwareCleanupMaid(hostGuid, vmName)); - } - - @Override - public void popCleanupCheckpoint(long checkpoint) { - _checkPointMgr.popCheckPoint(checkpoint); - } - - @Override - public void gcLeftOverVMs(VmwareContext context) { - VmwareCleanupMaid.gcLeftOverVMs(context); + public void gcLeftOverVMs(VmwareContext context) { + VmwareCleanupMaid.gcLeftOverVMs(context); } @Override @@ -615,19 +592,19 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis if(!destIso.exists()) { s_logger.info("Inject SSH key pairs before copying systemvm.iso into secondary storage"); _configServer.updateKeyPairs(); - - try { - FileUtil.copyfile(srcIso, destIso); - } catch(IOException e) { - s_logger.error("Unexpected exception ", e); - - String msg = "Unable to copy systemvm ISO on secondary storage. src location: " + srcIso.toString() + ", dest location: " + destIso; - s_logger.error(msg); - throw new CloudRuntimeException(msg); - } + + try { + FileUtil.copyfile(srcIso, destIso); + } catch(IOException e) { + s_logger.error("Unexpected exception ", e); + + String msg = "Unable to copy systemvm ISO on secondary storage. src location: " + srcIso.toString() + ", dest location: " + destIso; + s_logger.error(msg); + throw new CloudRuntimeException(msg); + } } else { - if(s_logger.isTraceEnabled()) - s_logger.trace("SystemVM ISO file " + destIso.getPath() + " already exists"); + if(s_logger.isTraceEnabled()) + s_logger.trace("SystemVM ISO file " + destIso.getPath() + " already exists"); } } finally { lock.unlock(); @@ -637,22 +614,22 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis lock.releaseRef(); } } - + @Override public String getSystemVMIsoFileNameOnDatastore() { - String version = ComponentLocator.class.getPackage().getImplementationVersion(); + String version = this.getClass().getPackage().getImplementationVersion(); String fileName = "systemvm-" + version + ".iso"; return fileName.replace(':', '-'); } - + @Override public String getSystemVMDefaultNicAdapterType() { return this._defaultSystemVmNicAdapterType; } - + private File getSystemVMPatchIsoFile() { // locate systemvm.iso - URL url = ComponentLocator.class.getProtectionDomain().getCodeSource().getLocation(); + URL url = this.getClass().getProtectionDomain().getCodeSource().getLocation(); File file = new File(url.getFile()); File isoFile = new File(file.getParent() + "/vms/systemvm.iso"); if (!isoFile.exists()) { @@ -666,7 +643,7 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis @Override public File getSystemVMKeyFile() { - URL url = ComponentLocator.class.getProtectionDomain().getCodeSource().getLocation(); + URL url = this.getClass().getProtectionDomain().getCodeSource().getLocation(); File file = new File(url.getFile()); File keyFile = new File(file.getParent(), "/scripts/vm/systemvm/id_rsa.cloud"); @@ -853,16 +830,6 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis _cmdExecLogDao.expunge(execId); } - - String checkPointIdStr = answer.getContextParam("checkpoint"); - if(checkPointIdStr != null) { - _checkPointMgr.popCheckPoint(Long.parseLong(checkPointIdStr)); - } - - checkPointIdStr = answer.getContextParam("checkpoint2"); - if(checkPointIdStr != null) { - _checkPointMgr.popCheckPoint(Long.parseLong(checkPointIdStr)); - } } } @@ -889,9 +856,9 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis } } } - + protected final int DEFAULT_DOMR_SSHPORT = 3922; - + protected boolean shutdownRouterVM(DomainRouterVO router) { if (s_logger.isDebugEnabled()) { s_logger.debug("Try to shutdown router VM " + router.getInstanceName() + " directly."); @@ -935,31 +902,31 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis public boolean processTimeout(long agentId, long seq) { return false; } - + @Override public boolean beginExclusiveOperation(int timeOutSeconds) { return _exclusiveOpLock.lock(timeOutSeconds); } - + @Override public void endExclusiveOperation() { _exclusiveOpLock.unlock(); } - + @Override - public Pair getAddiionalVncPortRange() { - return new Pair(_additionalPortRangeStart, _additionalPortRangeSize); + public Pair getAddiionalVncPortRange() { + return new Pair(_additionalPortRangeStart, _additionalPortRangeSize); } - + @Override public int getMaxHostsPerCluster() { - return this._maxHostsPerCluster; + return this._maxHostsPerCluster; } - + @Override - public int getRouterExtraPublicNics() { - return this._routerExtraPublicNics; - } + public int getRouterExtraPublicNics() { + return this._routerExtraPublicNics; + } @Override public Map getNexusVSMCredentialsByClusterId(Long clusterId) { diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 47fcb86b5c9..b10689f0993 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -138,8 +138,8 @@ import com.cloud.agent.api.routing.SetNetworkACLCommand; import com.cloud.agent.api.routing.SetPortForwardingRulesAnswer; import com.cloud.agent.api.routing.SetPortForwardingRulesCommand; import com.cloud.agent.api.routing.SetPortForwardingRulesVpcCommand; -import com.cloud.agent.api.routing.SetSourceNatCommand; import com.cloud.agent.api.routing.SetSourceNatAnswer; +import com.cloud.agent.api.routing.SetSourceNatCommand; import com.cloud.agent.api.routing.SetStaticNatRulesAnswer; import com.cloud.agent.api.routing.SetStaticNatRulesCommand; import com.cloud.agent.api.routing.Site2SiteVpnCfgCommand; @@ -200,7 +200,6 @@ import com.cloud.storage.template.TemplateInfo; import com.cloud.utils.DateUtil; import com.cloud.utils.Pair; import com.cloud.utils.StringUtils; - import com.cloud.utils.db.DB; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.ExceptionUtil; @@ -258,7 +257,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa protected final long _ops_timeout = 900000; // 15 minutes time out to time protected final int _shutdown_waitMs = 300000; // wait up to 5 minutes for shutdown - + // out an operation protected final int _retry = 24; protected final int _sleep = 10000; @@ -279,10 +278,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa protected String _guestNetworkVSwitchName; protected VirtualSwitchType _vSwitchType = VirtualSwitchType.StandardVirtualSwitch; protected boolean _nexusVSwitch = false; - + protected float _cpuOverprovisioningFactor = 1; protected boolean _reserveCpu = false; - + protected float _memOverprovisioningFactor = 1; protected boolean _reserveMem = false; protected boolean _recycleHungWorker = false; @@ -313,11 +312,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa @Override public Answer executeRequest(Command cmd) { - if(s_logger.isTraceEnabled()) - s_logger.trace("Begin executeRequest(), cmd: " + cmd.getClass().getSimpleName()); - + if(s_logger.isTraceEnabled()) + s_logger.trace("Begin executeRequest(), cmd: " + cmd.getClass().getSimpleName()); + Answer answer = null; - NDC.push(_hostName != null ? _hostName : _guid + "(" + ComponentLocator.class.getPackage().getImplementationVersion() + ")"); + NDC.push(_hostName != null ? _hostName : _guid + "(" + this.getClass().getPackage().getImplementationVersion() + ")"); try { long cmdSequence = _cmdSequence++; Date startTime = DateUtil.currentGMTTime(); @@ -423,7 +422,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } else if (clz == CheckRouterCommand.class) { answer = execute((CheckRouterCommand) cmd); } else if (clz == SetFirewallRulesCommand.class) { - answer = execute((SetFirewallRulesCommand)cmd); + answer = execute((SetFirewallRulesCommand)cmd); } else if (clz == BumpUpPriorityCommand.class) { answer = execute((BumpUpPriorityCommand)cmd); } else if (clz == GetDomRVersionCmd.class) { @@ -472,8 +471,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa JmxUtil.unregisterMBean("VMware " + _morHyperHost.get_value(), "Command " + mbeanToRemove.getProp("Sequence") + "-" + mbeanToRemove.getProp("Name")); } } catch (Exception e) { - if(s_logger.isTraceEnabled()) - s_logger.trace("Unable to register JMX monitoring due to exception " + ExceptionUtil.toString(e)); + if(s_logger.isTraceEnabled()) + s_logger.trace("Unable to register JMX monitoring due to exception " + ExceptionUtil.toString(e)); } } @@ -481,12 +480,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa NDC.pop(); } - if(s_logger.isTraceEnabled()) - s_logger.trace("End executeRequest(), cmd: " + cmd.getClass().getSimpleName()); - + if(s_logger.isTraceEnabled()) + s_logger.trace("End executeRequest(), cmd: " + cmd.getClass().getSimpleName()); + return answer; } - + protected Answer execute(CheckNetworkCommand cmd) { if (s_logger.isInfoEnabled()) { s_logger.info("Executing resource CheckNetworkCommand " + _gson.toJson(cmd)); @@ -495,9 +494,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa // TODO setup portgroup for private network needs to be done here now return new CheckNetworkAnswer(cmd, true , "Network Setup check by names is done"); } - + protected Answer execute(NetworkUsageCommand cmd) { - if ( cmd.isForVpc() ) { + if ( cmd.isForVpc() ) { return VPCNetworkUsage(cmd); } if (s_logger.isInfoEnabled()) { @@ -515,40 +514,40 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } protected NetworkUsageAnswer VPCNetworkUsage(NetworkUsageCommand cmd) { - String privateIp = cmd.getPrivateIP(); - String option = cmd.getOption(); - String publicIp = cmd.getGatewayIP(); + String privateIp = cmd.getPrivateIP(); + String option = cmd.getOption(); + String publicIp = cmd.getGatewayIP(); - String args = "-l " + publicIp+ " "; - if (option.equals("get")) { - args += "-g"; - } else if (option.equals("create")) { - args += "-c"; - String vpcCIDR = cmd.getVpcCIDR(); - args += " -v " + vpcCIDR; - } else if (option.equals("reset")) { - args += "-r"; - } else if (option.equals("vpn")) { - args += "-n"; - } else if (option.equals("remove")) { - args += "-d"; - } else { - return new NetworkUsageAnswer(cmd, "success", 0L, 0L); - } - try { - if (s_logger.isTraceEnabled()) { - s_logger.trace("Executing /opt/cloud/bin/vpc_netusage.sh " + args + " on DomR " + privateIp); - } - VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME); + String args = "-l " + publicIp+ " "; + if (option.equals("get")) { + args += "-g"; + } else if (option.equals("create")) { + args += "-c"; + String vpcCIDR = cmd.getVpcCIDR(); + args += " -v " + vpcCIDR; + } else if (option.equals("reset")) { + args += "-r"; + } else if (option.equals("vpn")) { + args += "-n"; + } else if (option.equals("remove")) { + args += "-d"; + } else { + return new NetworkUsageAnswer(cmd, "success", 0L, 0L); + } + try { + if (s_logger.isTraceEnabled()) { + s_logger.trace("Executing /opt/cloud/bin/vpc_netusage.sh " + args + " on DomR " + privateIp); + } + VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME); - Pair resultPair = SshHelper.sshExecute(privateIp, DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), null, "/opt/cloud/bin/vpc_netusage.sh " + args); + Pair resultPair = SshHelper.sshExecute(privateIp, DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), null, "/opt/cloud/bin/vpc_netusage.sh " + args); - if (!resultPair.first()) { + if (!resultPair.first()) { throw new Exception(" vpc network usage plugin call failed "); - } - - if (option.equals("get") || option.equals("vpn")) { + } + + if (option.equals("get") || option.equals("vpn")) { String result = resultPair.second(); if (result == null || result.isEmpty()) { throw new Exception(" vpc network usage get returns empty "); @@ -566,10 +565,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } return new NetworkUsageAnswer(cmd, "success", 0L, 0L); } catch (Throwable e) { - s_logger.error("Unable to execute NetworkUsage command on DomR (" + privateIp + "), domR may not be ready yet. failure due to " - + VmwareHelper.getExceptionMessage(e), e); - } - return new NetworkUsageAnswer(cmd, "success", 0L, 0L); + s_logger.error("Unable to execute NetworkUsage command on DomR (" + privateIp + "), domR may not be ready yet. failure due to " + + VmwareHelper.getExceptionMessage(e), e); + } + return new NetworkUsageAnswer(cmd, "success", 0L, 0L); } protected Answer execute(SetPortForwardingRulesCommand cmd) { @@ -581,7 +580,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String args = ""; String[] results = new String[cmd.getRules().length]; int i = 0; - + boolean endResult = true; for (PortForwardingRuleTO rule : cmd.getRules()) { args += rule.revoked() ? " -D " : " -A "; @@ -614,58 +613,58 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return new SetPortForwardingRulesAnswer(cmd, results, endResult); } - + protected SetFirewallRulesAnswer execute(SetFirewallRulesCommand cmd) { - String controlIp = getRouterSshControlIp(cmd); - String[] results = new String[cmd.getRules().length]; + String controlIp = getRouterSshControlIp(cmd); + String[] results = new String[cmd.getRules().length]; - String[][] rules = cmd.generateFwRules(); - String args = ""; - args += " -F "; - StringBuilder sb = new StringBuilder(); - String[] fwRules = rules[0]; - if (fwRules.length > 0) { - for (int i = 0; i < fwRules.length; i++) { - sb.append(fwRules[i]).append(','); - } - args += " -a " + sb.toString(); - } + String[][] rules = cmd.generateFwRules(); + String args = ""; + args += " -F "; + StringBuilder sb = new StringBuilder(); + String[] fwRules = rules[0]; + if (fwRules.length > 0) { + for (int i = 0; i < fwRules.length; i++) { + sb.append(fwRules[i]).append(','); + } + args += " -a " + sb.toString(); + } - try { - VmwareManager mgr = getServiceContext().getStockObject( - VmwareManager.CONTEXT_STOCK_NAME); - Pair result = SshHelper.sshExecute(controlIp, - DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), - null, "/root/firewall_rule.sh " + args); + try { + VmwareManager mgr = getServiceContext().getStockObject( + VmwareManager.CONTEXT_STOCK_NAME); + Pair result = SshHelper.sshExecute(controlIp, + DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), + null, "/root/firewall_rule.sh " + args); - if (s_logger.isDebugEnabled()) - s_logger.debug("Executing script on domain router " + controlIp - + ": /root/firewall_rule.sh " + args); + if (s_logger.isDebugEnabled()) + s_logger.debug("Executing script on domain router " + controlIp + + ": /root/firewall_rule.sh " + args); - if (!result.first()) { - s_logger.error("SetFirewallRulesCommand failure on setting one rule. args: " - + args); - //FIXME - in the future we have to process each rule separately; now we temporarily set every rule to be false if single rule fails - for (int i=0; i < results.length; i++) { - results[i] = "Failed"; - } - - return new SetFirewallRulesAnswer(cmd, false, results); - } - } catch (Throwable e) { - s_logger.error("SetFirewallRulesCommand(args: " + args - + ") failed on setting one rule due to " - + VmwareHelper.getExceptionMessage(e), e); - //FIXME - in the future we have to process each rule separately; now we temporarily set every rule to be false if single rule fails + if (!result.first()) { + s_logger.error("SetFirewallRulesCommand failure on setting one rule. args: " + + args); + //FIXME - in the future we have to process each rule separately; now we temporarily set every rule to be false if single rule fails + for (int i=0; i < results.length; i++) { + results[i] = "Failed"; + } + + return new SetFirewallRulesAnswer(cmd, false, results); + } + } catch (Throwable e) { + s_logger.error("SetFirewallRulesCommand(args: " + args + + ") failed on setting one rule due to " + + VmwareHelper.getExceptionMessage(e), e); + //FIXME - in the future we have to process each rule separately; now we temporarily set every rule to be false if single rule fails for (int i=0; i < results.length; i++) { results[i] = "Failed"; } - return new SetFirewallRulesAnswer(cmd, false, results); - } + return new SetFirewallRulesAnswer(cmd, false, results); + } - return new SetFirewallRulesAnswer(cmd, true, results); + return new SetFirewallRulesAnswer(cmd, true, results); } - + protected Answer execute(SetStaticNatRulesCommand cmd) { if (s_logger.isInfoEnabled()) { s_logger.info("Executing resource SetFirewallRuleCommand: " + _gson.toJson(cmd)); @@ -681,11 +680,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa args += " -l " + rule.getSrcIp(); args += " -r " + rule.getDstIp(); - + if (rule.getProtocol() != null) { args += " -P " + rule.getProtocol().toLowerCase(); } - + args += " -d " + rule.getStringSrcPortRange(); args += " -G "; @@ -719,7 +718,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); String controlIp = getRouterSshControlIp(cmd); - + assert(controlIp != null); LoadBalancerConfigurator cfgtr = new HAProxyConfigurator(); @@ -771,7 +770,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa args += " -s " + sb.toString(); } - + Pair result = SshHelper.sshExecute(controlIp, DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), null, "scp " + tmpCfgFilePath + " /etc/haproxy/haproxy.cfg.new"); if (!result.first()) { @@ -948,7 +947,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } Pair result = SshHelper.sshExecute(routerIp, DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), null, - "/opt/cloud/bin/vpc_guestnw.sh " + args); + "/opt/cloud/bin/vpc_guestnw.sh " + args); if (!result.first()) { String msg = "SetupGuestNetworkCommand on domain router " + routerIp + " failed. message: " + result.second(); @@ -1326,7 +1325,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (ip.isAdd()) { throw new InternalErrorException("Failed to find DomR VIF to associate/disassociate IP with."); } else { - s_logger.debug("VIF to deassociate IP with does not exist, return success"); + s_logger.debug("VIF to deassociate IP with does not exist, return success"); return; } } @@ -1421,7 +1420,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa args += " -c "; args += "eth" + publicNicInfo.first(); - + args += " -g "; args += vlanGateway; @@ -1438,11 +1437,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } if (removeVif) { - - String nicMasksStr = vmMo.getCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK); - int nicMasks = Integer.parseInt(nicMasksStr); - nicMasks &= ~(1 << publicNicInfo.first().intValue()); - vmMo.setCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK, String.valueOf(nicMasks)); + + String nicMasksStr = vmMo.getCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK); + int nicMasks = Integer.parseInt(nicMasksStr); + nicMasks &= ~(1 << publicNicInfo.first().intValue()); + vmMo.setCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK, String.valueOf(nicMasks)); HostMO hostMo = vmMo.getRunningHost(); List networks = vmMo.getNetworksWithDetails(); @@ -1463,7 +1462,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa private void plugPublicNic(VirtualMachineMO vmMo, final String vlanId, final String vifMacAddress) throws Exception { // TODO : probably need to set traffic shaping Pair networkInfo = null; - + if (!_nexusVSwitch) { networkInfo = HypervisorHostHelper.prepareNetwork(this._publicNetworkVSwitchName, "cloud.public", vmMo.getRunningHost(), vlanId, null, null, this._ops_timeout, true); @@ -1495,40 +1494,40 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa deviceConfigSpecArray[0] = new VirtualDeviceConfigSpec(); deviceConfigSpecArray[0].setDevice(device); deviceConfigSpecArray[0].setOperation(VirtualDeviceConfigSpecOperation.edit); - + vmConfigSpec.setDeviceChange(deviceConfigSpecArray); if(!vmMo.configureVm(vmConfigSpec)) { throw new Exception("Failed to configure devices when plugPublicNic"); } } catch(Exception e) { - - // restore allocation mask in case of exceptions - String nicMasksStr = vmMo.getCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK); - int nicMasks = Integer.parseInt(nicMasksStr); - nicMasks &= ~(1 << nicIndex); - vmMo.setCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK, String.valueOf(nicMasks)); - - throw e; + + // restore allocation mask in case of exceptions + String nicMasksStr = vmMo.getCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK); + int nicMasks = Integer.parseInt(nicMasksStr); + nicMasks &= ~(1 << nicIndex); + vmMo.setCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK, String.valueOf(nicMasks)); + + throw e; } } - + private int allocPublicNicIndex(VirtualMachineMO vmMo) throws Exception { - String nicMasksStr = vmMo.getCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK); - if(nicMasksStr == null || nicMasksStr.isEmpty()) { - throw new Exception("Could not find NIC allocation info"); - } - - int nicMasks = Integer.parseInt(nicMasksStr); - VirtualDevice[] nicDevices = vmMo.getNicDevices(); - for(int i = 3; i < nicDevices.length; i++) { - if((nicMasks & (1 << i)) == 0) { - nicMasks |= (1 << i); - vmMo.setCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK, String.valueOf(nicMasks)); - return i; - } - } - - throw new Exception("Could not allocate a free public NIC"); + String nicMasksStr = vmMo.getCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK); + if(nicMasksStr == null || nicMasksStr.isEmpty()) { + throw new Exception("Could not find NIC allocation info"); + } + + int nicMasks = Integer.parseInt(nicMasksStr); + VirtualDevice[] nicDevices = vmMo.getNicDevices(); + for(int i = 3; i < nicDevices.length; i++) { + if((nicMasks & (1 << i)) == 0) { + nicMasks |= (1 << i); + vmMo.setCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK, String.valueOf(nicMasks)); + return i; + } + } + + throw new Exception("Could not allocate a free public NIC"); } protected Answer execute(IpAssocCommand cmd) { @@ -1554,7 +1553,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if(vmMo == null) { if(hyperHost instanceof HostMO) { ClusterMO clusterMo = new ClusterMO(hyperHost.getContext(), - ((HostMO)hyperHost).getParentMor()); + ((HostMO)hyperHost).getParentMor()); vmMo = clusterMo.findVmOnHyperHost(routerName); } } @@ -1584,7 +1583,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa protected Answer execute(SavePasswordCommand cmd) { if (s_logger.isInfoEnabled()) { s_logger.info("Executing resource SavePasswordCommand. vmName: " + cmd.getVmName() + ", vmIp: " + cmd.getVmIpAddress() + ", password: " - + StringUtils.getMaskedPasswordForDisplay(cmd.getPassword())); + + StringUtils.getMaskedPasswordForDisplay(cmd.getPassword())); } String controlIp = getRouterSshControlIp(cmd); @@ -1597,7 +1596,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (s_logger.isDebugEnabled()) { s_logger.debug("Run command on domain router " + controlIp + ", /root/savepassword.sh " + args + " -p " + StringUtils.getMaskedPasswordForDisplay(cmd.getPassword())); } - + args += " -p " + password; @@ -1632,11 +1631,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String args = " " + cmd.getVmMac(); args += " " + cmd.getVmIpAddress(); args += " " + cmd.getVmName(); - + if (cmd.getDefaultRouter() != null) { args += " " + cmd.getDefaultRouter(); } - + if (cmd.getDefaultDns() != null) { args += " " + cmd.getDefaultDns(); } @@ -1644,7 +1643,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (cmd.getStaticRoutes() != null) { args += " " + cmd.getStaticRoutes(); } - + if (s_logger.isDebugEnabled()) { s_logger.debug("Run command on domR " + cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP) + ", /root/edithosts.sh " + args); } @@ -1673,7 +1672,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return new Answer(cmd); } - + protected CheckS2SVpnConnectionsAnswer execute(CheckS2SVpnConnectionsCommand cmd) { if (s_logger.isDebugEnabled()) { s_logger.debug("Executing resource CheckS2SVpnConnectionsCommand: " + _gson.toJson(cmd)); @@ -1736,7 +1735,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } return new CheckRouterAnswer(cmd, result.second(), true); } - + protected Answer execute(GetDomRVersionCmd cmd) { if (s_logger.isDebugEnabled()) { s_logger.debug("Executing resource GetDomRVersionCmd: " + _gson.toJson(cmd)); @@ -1770,7 +1769,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } return new GetDomRVersionAnswer(cmd, result.second(), lines[0], lines[1]); } - + protected Answer execute(BumpUpPriorityCommand cmd) { if (s_logger.isDebugEnabled()) { s_logger.debug("Executing resource BumpUpPriorityCommand: " + _gson.toJson(cmd)); @@ -1811,7 +1810,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String routerPrivateIpAddress = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); String controlIp = getRouterSshControlIp(cmd); - + String vmIpAddress = cmd.getVmIpAddress(); List vmData = cmd.getVmData(); String[] vmDataArgs = new String[vmData.size() * 2 + 4]; @@ -1937,7 +1936,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa VirtualMachineTO vmSpec = cmd.getVirtualMachine(); String vmName = vmSpec.getName(); - + State state = State.Stopped; VmwareContext context = getServiceContext(); try { @@ -1950,8 +1949,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa VirtualEthernetCardType nicDeviceType = VirtualEthernetCardType.valueOf(vmSpec.getDetails().get(VmDetailConstants.NIC_ADAPTER)); if(s_logger.isDebugEnabled()) - s_logger.debug("VM " + vmName + " will be started with NIC device type: " + nicDeviceType); - + s_logger.debug("VM " + vmName + " will be started with NIC device type: " + nicDeviceType); + VmwareHypervisorHost hyperHost = getHyperHost(context); VolumeTO[] disks = validateDisks(vmSpec.getDisks()); assert (disks.length > 0); @@ -1992,14 +1991,14 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa Pair rootDiskDataStoreDetails = null; for (VolumeTO vol : disks) { if (vol.getType() == Volume.Type.ROOT) { - rootDiskDataStoreDetails = dataStoresDetails.get(vol.getPoolUuid()); + rootDiskDataStoreDetails = dataStoresDetails.get(vol.getPoolUuid()); } } assert (vmSpec.getSpeed() != null) && (rootDiskDataStoreDetails != null); if (!hyperHost.createBlankVm(vmName, vmSpec.getCpus(), vmSpec.getSpeed().intValue(), - getReserveCpuMHz(vmSpec.getSpeed().intValue()), vmSpec.getLimitCpuUse(), ramMb, getReserveMemMB(ramMb), - translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs()).toString(), rootDiskDataStoreDetails.first(), false)) { + getReserveCpuMHz(vmSpec.getSpeed().intValue()), vmSpec.getLimitCpuUse(), ramMb, getReserveMemMB(ramMb), + translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs()).toString(), rootDiskDataStoreDetails.first(), false)) { throw new Exception("Failed to create VM. vmName: " + vmName); } } @@ -2030,9 +2029,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec(); int ramMb = (int) (vmSpec.getMinRam() / (1024 * 1024)); VmwareHelper.setBasicVmConfig(vmConfigSpec, vmSpec.getCpus(), vmSpec.getSpeed().intValue(), - getReserveCpuMHz(vmSpec.getSpeed().intValue()), ramMb, getReserveMemMB(ramMb), - translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs()).toString(), vmSpec.getLimitCpuUse()); - + getReserveCpuMHz(vmSpec.getSpeed().intValue()), ramMb, getReserveMemMB(ramMb), + translateGuestOsIdentifier(vmSpec.getArch(), vmSpec.getOs()).toString(), vmSpec.getLimitCpuUse()); + VirtualDeviceConfigSpec[] deviceConfigSpecArray = new VirtualDeviceConfigSpec[totalChangeDevices]; int i = 0; int ideControllerKey = vmMo.getIDEDeviceControllerKey(); @@ -2049,7 +2048,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa throw new Exception(msg); } mgr.prepareSecondaryStorageStore(secStoreUrl); - + ManagedObjectReference morSecDs = prepareSecondaryDatastoreOnHost(secStoreUrl); if (morSecDs == null) { String msg = "Failed to prepare secondary storage on host, secondary store url: " + secStoreUrl; @@ -2059,15 +2058,15 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa deviceConfigSpecArray[i] = new VirtualDeviceConfigSpec(); Pair isoInfo = VmwareHelper.prepareIsoDevice(vmMo, String.format("[%s] systemvm/%s", secDsMo.getName(), mgr.getSystemVMIsoFileNameOnDatastore()), - secDsMo.getMor(), true, true, i, i + 1); + secDsMo.getMor(), true, true, i, i + 1); deviceConfigSpecArray[i].setDevice(isoInfo.first()); if (isoInfo.second()) { - if(s_logger.isDebugEnabled()) - s_logger.debug("Prepare ISO volume at new device " + _gson.toJson(isoInfo.first())); + if(s_logger.isDebugEnabled()) + s_logger.debug("Prepare ISO volume at new device " + _gson.toJson(isoInfo.first())); deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add); } else { - if(s_logger.isDebugEnabled()) - s_logger.debug("Prepare ISO volume at existing device " + _gson.toJson(isoInfo.first())); + if(s_logger.isDebugEnabled()) + s_logger.debug("Prepare ISO volume at existing device " + _gson.toJson(isoInfo.first())); deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.edit); } i++; @@ -2082,12 +2081,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa Pair isoInfo = VmwareHelper.prepareIsoDevice(vmMo, isoDatastoreInfo.first(), isoDatastoreInfo.second(), true, true, i, i + 1); deviceConfigSpecArray[i].setDevice(isoInfo.first()); if (isoInfo.second()) { - if(s_logger.isDebugEnabled()) - s_logger.debug("Prepare ISO volume at new device " + _gson.toJson(isoInfo.first())); - deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add); + if(s_logger.isDebugEnabled()) + s_logger.debug("Prepare ISO volume at new device " + _gson.toJson(isoInfo.first())); + deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add); } else { - if(s_logger.isDebugEnabled()) - s_logger.debug("Prepare ISO volume at existing device " + _gson.toJson(isoInfo.first())); + if(s_logger.isDebugEnabled()) + s_logger.debug("Prepare ISO volume at existing device " + _gson.toJson(isoInfo.first())); deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.edit); } } else { @@ -2095,14 +2094,14 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa Pair isoInfo = VmwareHelper.prepareIsoDevice(vmMo, null, null, true, true, i, i + 1); deviceConfigSpecArray[i].setDevice(isoInfo.first()); if (isoInfo.second()) { - if(s_logger.isDebugEnabled()) - s_logger.debug("Prepare ISO volume at existing device " + _gson.toJson(isoInfo.first())); - + if(s_logger.isDebugEnabled()) + s_logger.debug("Prepare ISO volume at existing device " + _gson.toJson(isoInfo.first())); + deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add); } else { - if(s_logger.isDebugEnabled()) - s_logger.debug("Prepare ISO volume at existing device " + _gson.toJson(isoInfo.first())); - + if(s_logger.isDebugEnabled()) + s_logger.debug("Prepare ISO volume at existing device " + _gson.toJson(isoInfo.first())); + deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.edit); } } @@ -2116,15 +2115,15 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa controllerKey = ideControllerKey; } else { if(vol.getType() == Volume.Type.ROOT) { - if(vmSpec.getDetails() != null && vmSpec.getDetails().get(VmDetailConstants.ROOK_DISK_CONTROLLER) != null) - { - if(vmSpec.getDetails().get(VmDetailConstants.ROOK_DISK_CONTROLLER).equalsIgnoreCase("scsi")) - controllerKey = scsiControllerKey; - else - controllerKey = ideControllerKey; - } else { - controllerKey = scsiControllerKey; - } + if(vmSpec.getDetails() != null && vmSpec.getDetails().get(VmDetailConstants.ROOK_DISK_CONTROLLER) != null) + { + if(vmSpec.getDetails().get(VmDetailConstants.ROOK_DISK_CONTROLLER).equalsIgnoreCase("scsi")) + controllerKey = scsiControllerKey; + else + controllerKey = ideControllerKey; + } else { + controllerKey = scsiControllerKey; + } } else { // DATA volume always use SCSI device controllerKey = scsiControllerKey; @@ -2134,7 +2133,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (vol.getType() != Volume.Type.ISO) { Pair volumeDsDetails = dataStoresDetails.get(vol.getPoolUuid()); assert (volumeDsDetails != null); - VirtualDevice device; + VirtualDevice device; datastoreDiskPath = String.format("[%s] %s.vmdk", volumeDsDetails.second().getName(), vol.getPath()); String chainInfo = vol.getChainInfo(); @@ -2157,9 +2156,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa deviceConfigSpecArray[i].setDevice(device); deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add); - if(s_logger.isDebugEnabled()) - s_logger.debug("Prepare volume at new device " + _gson.toJson(device)); - + if(s_logger.isDebugEnabled()) + s_logger.debug("Prepare volume at new device " + _gson.toJson(device)); + i++; } } @@ -2183,18 +2182,18 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa s_logger.info("Preparing NIC device on network " + networkInfo.second()); nic = VmwareHelper.prepareNicDevice(vmMo, networkInfo.first(), nicDeviceType, networkInfo.second(), nicTo.getMac(), i, i + 1, true, true); } - + deviceConfigSpecArray[i] = new VirtualDeviceConfigSpec(); deviceConfigSpecArray[i].setDevice(nic); deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add); - - if(s_logger.isDebugEnabled()) - s_logger.debug("Prepare NIC at new device " + _gson.toJson(deviceConfigSpecArray[i])); - - // this is really a hacking for DomR, upon DomR startup, we will reset all the NIC allocation after eth3 + + if(s_logger.isDebugEnabled()) + s_logger.debug("Prepare NIC at new device " + _gson.toJson(deviceConfigSpecArray[i])); + + // this is really a hacking for DomR, upon DomR startup, we will reset all the NIC allocation after eth3 if(nicCount < 3) - nicMask |= (1 << nicCount); - + nicMask |= (1 << nicCount); + i++; nicCount++; } @@ -2202,34 +2201,34 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa vmConfigSpec.setDeviceChange(deviceConfigSpecArray); // pass boot arguments through machine.id & perform customized options to VMX - + Map vmDetailOptions = validateVmDetails(vmSpec.getDetails()); OptionValue[] extraOptions = new OptionValue[2 + vmDetailOptions.size()]; extraOptions[0] = new OptionValue(); extraOptions[0].setKey("machine.id"); extraOptions[0].setValue(vmSpec.getBootArgs()); - + extraOptions[1] = new OptionValue(); extraOptions[1].setKey("devices.hotplug"); extraOptions[1].setValue("true"); int j = 2; for(Map.Entry entry : vmDetailOptions.entrySet()) { - extraOptions[j] = new OptionValue(); - extraOptions[j].setKey(entry.getKey()); - extraOptions[j].setValue(entry.getValue()); - j++; + extraOptions[j] = new OptionValue(); + extraOptions[j].setKey(entry.getKey()); + extraOptions[j].setValue(entry.getValue()); + j++; } - + String keyboardLayout = null; if(vmSpec.getDetails() != null) - keyboardLayout = vmSpec.getDetails().get(VmDetailConstants.KEYBOARD); + keyboardLayout = vmSpec.getDetails().get(VmDetailConstants.KEYBOARD); vmConfigSpec.setExtraConfig(configureVnc(extraOptions, hyperHost, vmName, vmSpec.getVncPassword(), keyboardLayout)); if (!vmMo.configureVm(vmConfigSpec)) { throw new Exception("Failed to configure VM before start. vmName: " + vmName); } - + vmMo.setCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK, String.valueOf(nicMask)); if (!vmMo.powerOn()) { @@ -2257,47 +2256,47 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } } - + private Map validateVmDetails(Map vmDetails) { - Map validatedDetails = new HashMap(); - - if(vmDetails != null && vmDetails.size() > 0) { - for(Map.Entry entry : vmDetails.entrySet()) { - if("machine.id".equalsIgnoreCase(entry.getKey())) - continue; - else if("devices.hotplug".equalsIgnoreCase(entry.getKey())) - continue; - else if("RemoteDisplay.vnc.enabled".equalsIgnoreCase(entry.getKey())) - continue; - else if("RemoteDisplay.vnc.password".equalsIgnoreCase(entry.getKey())) - continue; - else if("RemoteDisplay.vnc.port".equalsIgnoreCase(entry.getKey())) - continue; - else if("RemoteDisplay.vnc.keymap".equalsIgnoreCase(entry.getKey())) - continue; - else - validatedDetails.put(entry.getKey(), entry.getValue()); - } - } - return validatedDetails; + Map validatedDetails = new HashMap(); + + if(vmDetails != null && vmDetails.size() > 0) { + for(Map.Entry entry : vmDetails.entrySet()) { + if("machine.id".equalsIgnoreCase(entry.getKey())) + continue; + else if("devices.hotplug".equalsIgnoreCase(entry.getKey())) + continue; + else if("RemoteDisplay.vnc.enabled".equalsIgnoreCase(entry.getKey())) + continue; + else if("RemoteDisplay.vnc.password".equalsIgnoreCase(entry.getKey())) + continue; + else if("RemoteDisplay.vnc.port".equalsIgnoreCase(entry.getKey())) + continue; + else if("RemoteDisplay.vnc.keymap".equalsIgnoreCase(entry.getKey())) + continue; + else + validatedDetails.put(entry.getKey(), entry.getValue()); + } + } + return validatedDetails; } private int getReserveCpuMHz(int cpuMHz) { - if(this._reserveCpu) { - return (int)(cpuMHz / this._cpuOverprovisioningFactor); - } - - return 0; + if(this._reserveCpu) { + return (int)(cpuMHz / this._cpuOverprovisioningFactor); + } + + return 0; } - + private int getReserveMemMB(int memMB) { - if(this._reserveMem) { - return (int)(memMB / this._memOverprovisioningFactor); - } - - return 0; + if(this._reserveMem) { + return (int)(memMB / this._memOverprovisioningFactor); + } + + return 0; } - + private NicTO[] sortNicsByDeviceId(NicTO[] nics) { List listForSort = new ArrayList(); @@ -2320,7 +2319,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return listForSort.toArray(new NicTO[0]); } - + private VolumeTO[] sortVolumesByDeviceId(VolumeTO[] volumes) { List listForSort = new ArrayList(); @@ -2384,38 +2383,38 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } private Pair prepareNetworkFromNicInfo(HostMO hostMo, NicTO nicTo) throws Exception { - + Pair switchName = getTargetSwitch(nicTo); String namePrefix = getNetworkNamePrefix(nicTo); Pair networkInfo = null; s_logger.info("Prepare network on vSwitch: " + switchName + " with name prefix: " + namePrefix); - + if(!_nexusVSwitch) { - networkInfo = HypervisorHostHelper.prepareNetwork(switchName.first(), namePrefix, hostMo, getVlanInfo(nicTo, switchName.second()), + networkInfo = HypervisorHostHelper.prepareNetwork(switchName.first(), namePrefix, hostMo, getVlanInfo(nicTo, switchName.second()), nicTo.getNetworkRateMbps(), nicTo.getNetworkRateMulticastMbps(), _ops_timeout, !namePrefix.startsWith("cloud.private")); } else { - networkInfo = HypervisorHostHelper.prepareNetwork(switchName.first(), namePrefix, hostMo, getVlanInfo(nicTo, switchName.second()), + networkInfo = HypervisorHostHelper.prepareNetwork(switchName.first(), namePrefix, hostMo, getVlanInfo(nicTo, switchName.second()), nicTo.getNetworkRateMbps(), nicTo.getNetworkRateMulticastMbps(), _ops_timeout); } - + return networkInfo; } - + // return Pair private Pair getTargetSwitch(NicTO nicTo) throws Exception { if(nicTo.getName() != null && !nicTo.getName().isEmpty()) { - String[] tokens = nicTo.getName().split(","); - - if(tokens.length == 2) { - return new Pair(tokens[0], tokens[1]); - } else { - return new Pair(nicTo.getName(), Vlan.UNTAGGED); - } + String[] tokens = nicTo.getName().split(","); + + if(tokens.length == 2) { + return new Pair(tokens[0], tokens[1]); + } else { + return new Pair(nicTo.getName(), Vlan.UNTAGGED); + } } - + if (nicTo.getType() == Networks.TrafficType.Guest) { return new Pair(this._guestNetworkVSwitchName, Vlan.UNTAGGED); } else if (nicTo.getType() == Networks.TrafficType.Control || nicTo.getType() == Networks.TrafficType.Management) { @@ -2430,7 +2429,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa throw new Exception("Unsupported traffic type: " + nicTo.getType().toString()); } } - + private String getNetworkNamePrefix(NicTO nicTo) throws Exception { if (nicTo.getType() == Networks.TrafficType.Guest) { return "cloud.guest"; @@ -2583,18 +2582,18 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (s_logger.isInfoEnabled()) { s_logger.info("Executing resource ReadyCommand: " + _gson.toJson(cmd)); } - + try { - VmwareContext context = getServiceContext(); - VmwareHypervisorHost hyperHost = getHyperHost(context); - if(hyperHost.isHyperHostConnected()) { + VmwareContext context = getServiceContext(); + VmwareHypervisorHost hyperHost = getHyperHost(context); + if(hyperHost.isHyperHostConnected()) { return new ReadyAnswer(cmd); - } else { - return new ReadyAnswer(cmd, "Host is not in connect state"); - } + } else { + return new ReadyAnswer(cmd, "Host is not in connect state"); + } } catch(Exception e) { - s_logger.error("Unexpected exception: ", e); - return new ReadyAnswer(cmd, VmwareHelper.getExceptionMessage(e)); + s_logger.error("Unexpected exception: ", e); + return new ReadyAnswer(cmd, VmwareHelper.getExceptionMessage(e)); } } @@ -2605,14 +2604,14 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa VmwareContext context = getServiceContext(); VmwareHypervisorHost hyperHost = getHyperHost(context); - + HostStatsEntry hostStats = new HostStatsEntry(cmd.getHostId(), 0, 0, 0, "host", 0, 0, 0, 0); Answer answer = new GetHostStatsAnswer(cmd, hostStats); try { HostStatsEntry entry = getHyperHostStats(hyperHost); if(entry != null) { - entry.setHostId(cmd.getHostId()); - answer = new GetHostStatsAnswer(cmd, entry); + entry.setHostId(cmd.getHostId()); + answer = new GetHostStatsAnswer(cmd, entry); } } catch (Exception e) { if (e instanceof RemoteException) { @@ -2646,9 +2645,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (requestedVmNames != null) { for (String vmName : requestedVmNames) { - if (newStates.get(vmName) != null) { - vmNames.add(vmName); - } + if (newStates.get(vmName) != null) { + vmNames.add(vmName); + } } } @@ -2712,9 +2711,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa try { vmMo.setCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK, "0"); - + if (getVmState(vmMo) != State.Stopped) { - + // before we stop VM, remove all possible snapshots on the VM to let // disk chain be collapsed s_logger.info("Remove all snapshot before stopping VM " + cmd.getVmName()); @@ -2723,8 +2722,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa state = State.Stopped; return new StopAnswer(cmd, "Stop VM " + cmd.getVmName() + " Succeed", 0, true); } else { - String msg = "Have problem in powering off VM " + cmd.getVmName() + ", let the process continue"; - s_logger.warn(msg); + String msg = "Have problem in powering off VM " + cmd.getVmName() + ", let the process continue"; + s_logger.warn(msg); return new StopAnswer(cmd, msg, 0, true); } } else { @@ -2896,7 +2895,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa throw new Exception(msg); } mgr.prepareSecondaryStorageStore(secStoreUrl); - + ManagedObjectReference morSecDs = prepareSecondaryDatastoreOnHost(secStoreUrl); if (morSecDs == null) { String msg = "Failed to prepare secondary storage on host, secondary store url: " + secStoreUrl; @@ -2974,9 +2973,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } private VmwareHypervisorHost getTargetHyperHost(DatacenterMO dcMo, String destIp) throws Exception { - + VmwareManager mgr = dcMo.getContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME); - + ObjectContent[] ocs = dcMo.getHostPropertiesOnDatacenterHostFolder(new String[] { "name", "parent" }); if (ocs != null && ocs.length > 0) { for (ObjectContent oc : ocs) { @@ -3011,8 +3010,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa ManagedObjectReference morDatastore = null; morDatastore = HypervisorHostHelper.findDatastoreWithBackwardsCompatibility(hyperHost, pool.getUuid()); if(morDatastore == null) - morDatastore = hyperHost.mountDatastore(pool.getType() == StoragePoolType.VMFS, pool.getHost(), - pool.getPort(), pool.getPath(), pool.getUuid().replace("-", "")); + morDatastore = hyperHost.mountDatastore(pool.getType() == StoragePoolType.VMFS, pool.getHost(), + pool.getPort(), pool.getPath(), pool.getUuid().replace("-", "")); assert (morDatastore != null); DatastoreSummary summary = new DatastoreMO(getServiceContext(), morDatastore).getSummary(); @@ -3040,9 +3039,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa StorageFilerTO pool = cmd.getPool(); try { - // We will leave datastore cleanup management to vCenter. Since for cluster VMFS datastore, it will always - // be mounted by vCenter. - + // We will leave datastore cleanup management to vCenter. Since for cluster VMFS datastore, it will always + // be mounted by vCenter. + // VmwareHypervisorHost hyperHost = this.getHyperHost(getServiceContext()); // hyperHost.unmountDatastore(pool.getUuid()); Answer answer = new Answer(cmd, true, "success"); @@ -3091,7 +3090,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (cmd.getAttach()) { vmMo.attachDisk(new String[] { datastoreVolumePath }, morDs); } else { - vmMo.removeAllSnapshots(); + vmMo.removeAllSnapshots(); vmMo.detachDisk(datastoreVolumePath, false); } @@ -3133,7 +3132,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa vmMo.mountToolsInstaller(); } else { try{ - vmMo.unmountToolsInstaller(); + vmMo.unmountToolsInstaller(); }catch(Throwable e){ vmMo.detachIso(null); } @@ -3176,13 +3175,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } if(cmd.isAttach()) { - String msg = "AttachIsoCommand(attach) failed due to " + VmwareHelper.getExceptionMessage(e); - s_logger.error(msg, e); - return new Answer(cmd, false, msg); + String msg = "AttachIsoCommand(attach) failed due to " + VmwareHelper.getExceptionMessage(e); + s_logger.error(msg, e); + return new Answer(cmd, false, msg); } else { - String msg = "AttachIsoCommand(detach) failed due to " + VmwareHelper.getExceptionMessage(e); - s_logger.warn(msg, e); - return new Answer(cmd, false, msg); + String msg = "AttachIsoCommand(detach) failed due to " + VmwareHelper.getExceptionMessage(e); + s_logger.warn(msg, e); + return new Answer(cmd, false, msg); } } } @@ -3387,7 +3386,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } String msg = "Unable to execute GetStorageStatsCommand(storageId : " + cmd.getStorageId() + ", localPath: " + cmd.getLocalPath() + ", poolType: " + cmd.getPooltype() + ") due to " - + VmwareHelper.getExceptionMessage(e); + + VmwareHelper.getExceptionMessage(e); s_logger.error(msg, e); return new GetStorageStatsAnswer(cmd, msg); } @@ -3416,7 +3415,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa throw new Exception("Unable to find VM in vSphere, vm: " + cmd.getName()); } } - + Pair portInfo = vmMo.getVncPort(mgr.getManagementPortGroupByHost((HostMO)hyperHost)); if (s_logger.isTraceEnabled()) { @@ -3461,7 +3460,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa VmwareManager mgr = getServiceContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME); Pair result = SshHelper.sshExecute(controlIp, DEFAULT_DOMR_SSHPORT, "root", mgr.getSystemVMKeyFile(), null, "/bin/ping" + args); if(result.first()) - return new Answer(cmd); + return new Answer(cmd); } catch (Exception e) { s_logger.error("Unable to execute ping command on DomR (" + controlIp + "), domR may not be ready yet. failure due to " + VmwareHelper.getExceptionMessage(e), e); @@ -3551,7 +3550,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa ManagedObjectReference morDc = hyperHost.getHyperHostDatacenter(); ManagedObjectReference morCluster = hyperHost.getHyperHostCluster(); ClusterMO clusterMo = new ClusterMO(context, morCluster); - + if (cmd.getVolume().getType() == Volume.Type.ROOT) { String vmName = cmd.getVmName(); if (vmName != null) { @@ -3563,13 +3562,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa HostMO hostMo = vmMo.getRunningHost(); List networks = vmMo.getNetworksWithDetails(); - + // tear down all devices first before we destroy the VM to avoid accidently delete disk backing files if (getVmState(vmMo) != State.Stopped) - vmMo.safePowerOff(_shutdown_waitMs); + vmMo.safePowerOff(_shutdown_waitMs); vmMo.tearDownDevices(new Class[] { VirtualDisk.class, VirtualEthernetCard.class }); vmMo.destroy(); - + for (NetworkDetails netDetails : networks) { if (netDetails.getGCTag() != null && netDetails.getGCTag().equalsIgnoreCase("true")) { if (netDetails.getVMMorsOnNetwork() == null || netDetails.getVMMorsOnNetwork().length == 1) { @@ -3578,14 +3577,14 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } } - + if (s_logger.isInfoEnabled()) s_logger.info("Destroy volume by original name: " + cmd.getVolume().getPath() + ".vmdk"); dsMo.deleteFile(cmd.getVolume().getPath() + ".vmdk", morDc, true); - + // root volume may be created via linked-clone, delete the delta disk as well if (s_logger.isInfoEnabled()) - s_logger.info("Destroy volume by derived name: " + cmd.getVolume().getPath() + "-delta.vmdk"); + s_logger.info("Destroy volume by derived name: " + cmd.getVolume().getPath() + "-delta.vmdk"); dsMo.deleteFile(cmd.getVolume().getPath() + "-delta.vmdk", morDc, true); return new Answer(cmd, true, "Success"); } @@ -3594,13 +3593,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa s_logger.info("Destroy root volume directly from datastore"); } } else { - // evitTemplate will be converted into DestroyCommand, test if we are running in this case + // evitTemplate will be converted into DestroyCommand, test if we are running in this case VirtualMachineMO vmMo = clusterMo.findVmOnHyperHost(cmd.getVolume().getPath()); if (vmMo != null) { if (s_logger.isInfoEnabled()) s_logger.info("Destroy template volume " + cmd.getVolume().getPath()); - - vmMo.destroy(); + + vmMo.destroy(); return new Answer(cmd, true, "Success"); } } @@ -3622,9 +3621,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa s_logger.info("Empty disk chain info, fall back to try to delete by original backing file name"); } dsMo.deleteFile(cmd.getVolume().getPath() + ".vmdk", morDc, true); - + if (s_logger.isInfoEnabled()) { - s_logger.info("Destroy volume by derived name: " + cmd.getVolume().getPath() + "-flat.vmdk"); + s_logger.info("Destroy volume by derived name: " + cmd.getVolume().getPath() + "-flat.vmdk"); } dsMo.deleteFile(cmd.getVolume().getPath() + "-flat.vmdk", morDc, true); } @@ -3633,9 +3632,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa s_logger.info("Destroy volume by original name: " + cmd.getVolume().getPath() + ".vmdk"); } dsMo.deleteFile(cmd.getVolume().getPath() + ".vmdk", morDc, true); - + if (s_logger.isInfoEnabled()) { - s_logger.info("Destroy volume by derived name: " + cmd.getVolume().getPath() + "-flat.vmdk"); + s_logger.info("Destroy volume by derived name: " + cmd.getVolume().getPath() + "-flat.vmdk"); } dsMo.deleteFile(cmd.getVolume().getPath() + "-flat.vmdk", morDc, true); } @@ -3744,7 +3743,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa s_logger.warn("Template host in vSphere is not in connected state, request template reload"); return new CreateAnswer(cmd, "Template host in vSphere is not in connected state, request template reload", true); } - + ManagedObjectReference morPool = hyperHost.getHyperHostOwnerResourcePool(); ManagedObjectReference morCluster = hyperHost.getHyperHostCluster(); ManagedObjectReference morBaseSnapshot = vmTemplate.getSnapshotMor("cloud.template.base"); @@ -3771,9 +3770,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa // to move files s_logger.info("Move volume out of volume-wrapper VM "); dsMo.moveDatastoreFile(String.format("[%s] %s/%s.vmdk", dsMo.getName(), vmdkName, vmdkName), - dcMo.getMor(), dsMo.getMor(), - String.format("[%s] %s.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true); - + dcMo.getMor(), dsMo.getMor(), + String.format("[%s] %s.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true); + dsMo.moveDatastoreFile(String.format("[%s] %s/%s-delta.vmdk", dsMo.getName(), vmdkName, vmdkName), dcMo.getMor(), dsMo.getMor(), String.format("[%s] %s-delta.vmdk", dsMo.getName(), vmdkName), dcMo.getMor(), true); @@ -3879,13 +3878,13 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa VmwareContext context = getServiceContext(); VmwareHypervisorHost hyperHost = getHyperHost(context); VmwareManager mgr = hyperHost.getContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME); - + if(hyperHost.isHyperHostConnected()) { mgr.gcLeftOverVMs(context); - + if(_recycleHungWorker) { s_logger.info("Scan hung worker VM to recycle"); - + // GC worker that has been running for too long ObjectContent[] ocs = hyperHost.getVmPropertiesOnHyperHost( new String[] {"name", "config.template", "runtime.powerState", "runtime.bootTime"}); @@ -3897,7 +3896,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa boolean template = false; VirtualMachinePowerState powerState = VirtualMachinePowerState.poweredOff; GregorianCalendar bootTime = null; - + for(DynamicProperty prop : props) { if(prop.getName().equals("name")) name = prop.getVal().toString(); @@ -3908,19 +3907,19 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa else if(prop.getName().equals("runtime.bootTime")) bootTime = (GregorianCalendar)prop.getVal(); } - + if(!template && name.matches("[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}")) { boolean recycle = false; - + // recycle stopped worker VM and VM that has been running for too long (hard-coded 10 hours for now) if(powerState == VirtualMachinePowerState.poweredOff) recycle = true; else if(bootTime != null && (new Date().getTime() - bootTime.getTimeInMillis() > 10*3600*1000)) recycle = true; - + if(recycle) { s_logger.info("Recycle pending worker VM: " + name); - + VirtualMachineMO vmMo = new VirtualMachineMO(hyperHost.getContext(), oc.getObj()); vmMo.powerOff(); vmMo.destroy(); @@ -3932,7 +3931,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } else { s_logger.error("Host is no longer connected."); - return null; + return null; } } catch (Throwable e) { if (e instanceof RemoteException) { @@ -3953,25 +3952,25 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa @Override public StartupCommand[] initialize() { String hostApiVersion = "4.1"; - VmwareContext context = getServiceContext(); + VmwareContext context = getServiceContext(); try { VmwareHypervisorHost hyperHost = getHyperHost(context); assert(hyperHost instanceof HostMO); if(!((HostMO)hyperHost).isHyperHostConnected()) { - s_logger.info("Host " + hyperHost.getHyperHostName() + " is not in connected state"); - return null; + s_logger.info("Host " + hyperHost.getHyperHostName() + " is not in connected state"); + return null; } - + AboutInfo aboutInfo = ((HostMO)hyperHost).getHostAboutInfo(); hostApiVersion = aboutInfo.getApiVersion(); - + } catch (Exception e) { String msg = "VmwareResource intialize() failed due to : " + VmwareHelper.getExceptionMessage(e); s_logger.error(msg); invalidateServiceContext(); return null; } - + StartupRoutingCommand cmd = new StartupRoutingCommand(); fillHostInfo(cmd); @@ -3984,7 +3983,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa cmd.setHypervisorType(HypervisorType.VMware); cmd.setStateChanges(changes); cmd.setCluster(_cluster); - cmd.setVersion(hostApiVersion); + cmd.setHypervisorVersion(hostApiVersion); List storageCmds = initializeLocalStorage(); StartupCommand[] answerCmds = new StartupCommand[1 + storageCmds.size()]; @@ -4097,10 +4096,10 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa try { VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext()); - + assert(hyperHost instanceof HostMO); VmwareManager mgr = hyperHost.getContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME); - + VmwareHypervisorHostNetworkSummary summary = hyperHost.getHyperHostNetworkSummary(mgr.getManagementPortGroupByHost((HostMO)hyperHost)); if (summary == null) { throw new Exception("No ESX(i) host found"); @@ -4200,12 +4199,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (s_logger.isDebugEnabled()) { s_logger.debug("VM " + vm + " is now missing from host report but we detected that it might be migrated to other host by vCenter"); } - + if(oldState != State.Starting && oldState != State.Migrating) { s_logger.debug("VM " + vm + " is now missing from host report and VM is not at starting/migrating state, remove it from host VM-sync map, oldState: " + oldState); - _vms.remove(vm); + _vms.remove(vm); } else { - s_logger.debug("VM " + vm + " is missing from host report, but we will ignore VM " + vm + " in transition state " + oldState); + s_logger.debug("VM " + vm + " is missing from host report, but we will ignore VM " + vm + " in transition state " + oldState); } continue; } @@ -4248,76 +4247,76 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } protected OptionValue[] configureVnc(OptionValue[] optionsToMerge, VmwareHypervisorHost hyperHost, String vmName, - String vncPassword, String keyboardLayout) throws Exception { - + String vncPassword, String keyboardLayout) throws Exception { + VirtualMachineMO vmMo = hyperHost.findVmOnHyperHost(vmName); VmwareManager mgr = hyperHost.getContext().getStockObject(VmwareManager.CONTEXT_STOCK_NAME); if(!mgr.beginExclusiveOperation(600)) - throw new Exception("Unable to begin exclusive operation, lock time out"); - - try { - int maxVncPorts = 64; - int vncPort = 0; - Random random = new Random(); - - HostMO vmOwnerHost = vmMo.getRunningHost(); - - ManagedObjectReference morParent = vmOwnerHost.getParentMor(); - HashMap portInfo; - if(morParent.getType().equalsIgnoreCase("ClusterComputeResource")) { - ClusterMO clusterMo = new ClusterMO(vmOwnerHost.getContext(), morParent); - portInfo = clusterMo.getVmVncPortsOnCluster(); - } else { - portInfo = vmOwnerHost.getVmVncPortsOnHost(); - } - - // allocate first at 5900 - 5964 range - Collection existingPorts = portInfo.values(); - int val = random.nextInt(maxVncPorts); - int startVal = val; - do { - if (!existingPorts.contains(5900 + val)) { - vncPort = 5900 + val; - break; - } - - val = (++val) % maxVncPorts; - } while (val != startVal); - - if(vncPort == 0) { - s_logger.info("we've run out of range for ports between 5900-5964 for the cluster, we will try port range at 59000-60000"); + throw new Exception("Unable to begin exclusive operation, lock time out"); - Pair additionalRange = mgr.getAddiionalVncPortRange(); - maxVncPorts = additionalRange.second(); - val = random.nextInt(maxVncPorts); - startVal = val; - do { - if (!existingPorts.contains(additionalRange.first() + val)) { - vncPort = additionalRange.first() + val; - break; - } - - val = (++val) % maxVncPorts; - } while (val != startVal); - } - - if (vncPort == 0) { - throw new Exception("Unable to find an available VNC port on host"); - } - - if (s_logger.isInfoEnabled()) { - s_logger.info("Configure VNC port for VM " + vmName + ", port: " + vncPort + ", host: " + vmOwnerHost.getHyperHostName()); - } - - return VmwareHelper.composeVncOptions(optionsToMerge, true, vncPassword, vncPort, keyboardLayout); + try { + int maxVncPorts = 64; + int vncPort = 0; + Random random = new Random(); + + HostMO vmOwnerHost = vmMo.getRunningHost(); + + ManagedObjectReference morParent = vmOwnerHost.getParentMor(); + HashMap portInfo; + if(morParent.getType().equalsIgnoreCase("ClusterComputeResource")) { + ClusterMO clusterMo = new ClusterMO(vmOwnerHost.getContext(), morParent); + portInfo = clusterMo.getVmVncPortsOnCluster(); + } else { + portInfo = vmOwnerHost.getVmVncPortsOnHost(); + } + + // allocate first at 5900 - 5964 range + Collection existingPorts = portInfo.values(); + int val = random.nextInt(maxVncPorts); + int startVal = val; + do { + if (!existingPorts.contains(5900 + val)) { + vncPort = 5900 + val; + break; + } + + val = (++val) % maxVncPorts; + } while (val != startVal); + + if(vncPort == 0) { + s_logger.info("we've run out of range for ports between 5900-5964 for the cluster, we will try port range at 59000-60000"); + + Pair additionalRange = mgr.getAddiionalVncPortRange(); + maxVncPorts = additionalRange.second(); + val = random.nextInt(maxVncPorts); + startVal = val; + do { + if (!existingPorts.contains(additionalRange.first() + val)) { + vncPort = additionalRange.first() + val; + break; + } + + val = (++val) % maxVncPorts; + } while (val != startVal); + } + + if (vncPort == 0) { + throw new Exception("Unable to find an available VNC port on host"); + } + + if (s_logger.isInfoEnabled()) { + s_logger.info("Configure VNC port for VM " + vmName + ", port: " + vncPort + ", host: " + vmOwnerHost.getHyperHostName()); + } + + return VmwareHelper.composeVncOptions(optionsToMerge, true, vncPassword, vncPort, keyboardLayout); } finally { - try { - mgr.endExclusiveOperation(); - } catch(Throwable e) { - assert(false); - s_logger.error("Unexpected exception ", e); - } + try { + mgr.endExclusiveOperation(); + } catch(Throwable e) { + assert(false); + s_logger.error("Unexpected exception ", e); + } } } @@ -4362,7 +4361,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa vlanId = tokens[2]; HypervisorHostHelper.prepareNetwork(this._privateNetworkVSwitchName, "cloud.private", - hostMo, vlanId, networkRateMbps, null, this._ops_timeout, false); + hostMo, vlanId, networkRateMbps, null, this._ops_timeout, false); } else { s_logger.info("Skip suspecious cloud network " + networkName); } @@ -4378,7 +4377,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa vlanId = tokens[2]; HypervisorHostHelper.prepareNetwork(this._publicNetworkVSwitchName, "cloud.public", - hostMo, vlanId, networkRateMbps, null, this._ops_timeout, false); + hostMo, vlanId, networkRateMbps, null, this._ops_timeout, false); } else { s_logger.info("Skip suspecious cloud network " + networkName); } @@ -4395,7 +4394,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa vlanId = tokens[2]; HypervisorHostHelper.prepareNetwork(this._guestNetworkVSwitchName, "cloud.guest", - hostMo, vlanId, networkRateMbps, null, this._ops_timeout, false); + hostMo, vlanId, networkRateMbps, null, this._ops_timeout, false); } else { s_logger.info("Skip suspecious cloud network " + networkName); } @@ -4404,7 +4403,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } } - + private HashMap getVmStates() throws Exception { VmwareHypervisorHost hyperHost = getHyperHost(getServiceContext()); ObjectContent[] ocs = hyperHost.getVmPropertiesOnHyperHost(new String[] { "name", "runtime.powerState", "config.template" }); @@ -4472,11 +4471,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa for (DynamicProperty objProp : objProps) { if (objProp.getName().equals("name")) { - name = objProp.getVal().toString(); + name = objProp.getVal().toString(); } else if (objProp.getName().equals("summary.config.numCpu")) { - numberCPUs = objProp.getVal().toString(); + numberCPUs = objProp.getVal().toString(); } else if (objProp.getName().equals("summary.quickStats.overallCpuUsage")) { - maxCpuUsage = objProp.getVal().toString(); + maxCpuUsage = objProp.getVal().toString(); } } @@ -4491,12 +4490,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa // get all the metrics from the available sample period PerfMetricId[] perfMetrics = service.queryAvailablePerfMetric(perfMgr, vmMor, null, null, null); if(perfMetrics != null) { - for(int index=0; index < perfMetrics.length; ++index) { - if ( ((rxPerfCounterInfo != null) && (perfMetrics[index].getCounterId() == rxPerfCounterInfo.getKey())) || - ((txPerfCounterInfo != null) && (perfMetrics[index].getCounterId() == txPerfCounterInfo.getKey())) ) { - vmNetworkMetrics.add(perfMetrics[index]); - } - } + for(int index=0; index < perfMetrics.length; ++index) { + if ( ((rxPerfCounterInfo != null) && (perfMetrics[index].getCounterId() == rxPerfCounterInfo.getKey())) || + ((txPerfCounterInfo != null) && (perfMetrics[index].getCounterId() == txPerfCounterInfo.getKey())) ) { + vmNetworkMetrics.add(perfMetrics[index]); + } + } } double networkReadKBs=0; @@ -4525,9 +4524,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (vals[vi].getId().getCounterId() == txPerfCounterInfo.getKey()) { networkWriteKBs = sampleDuration * perfValues[3];//get the average TX rate multiplied by sampled duration } - } + } } - } + } } vmResponseMap.put(name, new VmStatsEntry(Integer.parseInt(maxCpuUsage), networkReadKBs, networkWriteKBs, Integer.parseInt(numberCPUs), "vm")); } @@ -4568,7 +4567,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return result.second(); } catch (Throwable e) { s_logger.error("Unable to execute NetworkUsage command on DomR (" + privateIpAddress + "), domR may not be ready yet. failure due to " - + VmwareHelper.getExceptionMessage(e), e); + + VmwareHelper.getExceptionMessage(e), e); } return null; @@ -4657,8 +4656,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa private static HostStatsEntry getHyperHostStats(VmwareHypervisorHost hyperHost) throws Exception { ComputeResourceSummary hardwareSummary = hyperHost.getHyperHostHardwareSummary(); if(hardwareSummary == null) - return null; - + return null; + HostStatsEntry entry = new HostStatsEntry(); entry.setEntityType("host"); @@ -4669,22 +4668,22 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa return entry; } - + private static String getRouterSshControlIp(NetworkElementCommand cmd) { - String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); - String routerGuestIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP); - String zoneNetworkType = cmd.getAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE); - - if(routerGuestIp != null && zoneNetworkType != null && NetworkType.valueOf(zoneNetworkType) == NetworkType.Basic) { - if(s_logger.isDebugEnabled()) - s_logger.debug("In Basic zone mode, use router's guest IP for SSH control. guest IP : " + routerGuestIp); - - return routerGuestIp; - } - - if(s_logger.isDebugEnabled()) - s_logger.debug("Use router's private IP for SSH control. IP : " + routerIp); - return routerIp; + String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP); + String routerGuestIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP); + String zoneNetworkType = cmd.getAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE); + + if(routerGuestIp != null && zoneNetworkType != null && NetworkType.valueOf(zoneNetworkType) == NetworkType.Basic) { + if(s_logger.isDebugEnabled()) + s_logger.debug("In Basic zone mode, use router's guest IP for SSH control. guest IP : " + routerGuestIp); + + return routerGuestIp; + } + + if(s_logger.isDebugEnabled()) + s_logger.debug("Use router's private IP for SSH control. IP : " + routerIp); + return routerIp; } @Override @@ -4701,7 +4700,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa _dcId = (String) params.get("zone"); _pod = (String) params.get("pod"); _cluster = (String) params.get("cluster"); - + _guid = (String) params.get("guid"); String[] tokens = _guid.split("@"); _vCenterAddress = tokens[1]; @@ -4709,7 +4708,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String[] hostTokens = tokens[0].split(":"); _morHyperHost.setType(hostTokens[0]); _morHyperHost.set_value(hostTokens[1]); - + VmwareContext context = getServiceContext(); try { VmwareManager mgr = context.getStockObject(VmwareManager.CONTEXT_STOCK_NAME); @@ -4718,9 +4717,9 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa CustomFieldsManagerMO cfmMo = new CustomFieldsManagerMO(context, context.getServiceContent().getCustomFieldsManager()); cfmMo.ensureCustomFieldDef("Datastore", CustomFieldConstants.CLOUD_UUID); if (mgr.getNexusVSwitchGlobalParameter()) { - cfmMo.ensureCustomFieldDef("DistributedVirtualPortgroup", CustomFieldConstants.CLOUD_GC_DVP); + cfmMo.ensureCustomFieldDef("DistributedVirtualPortgroup", CustomFieldConstants.CLOUD_GC_DVP); } else { - cfmMo.ensureCustomFieldDef("Network", CustomFieldConstants.CLOUD_GC); + cfmMo.ensureCustomFieldDef("Network", CustomFieldConstants.CLOUD_GC); } cfmMo.ensureCustomFieldDef("VirtualMachine", CustomFieldConstants.CLOUD_UUID); @@ -4754,7 +4753,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if(_guestNetworkVSwitchName == null) { _guestNetworkVSwitchName = (String) params.get("guest.network.vswitch.name"); } - + String value = (String) params.get("cpu.overprovisioning.factor"); if(value != null) _cpuOverprovisioningFactor = Float.parseFloat(value); @@ -4762,7 +4761,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa value = (String) params.get("vmware.reserve.cpu"); if(value != null && value.equalsIgnoreCase("true")) _reserveCpu = true; - + value = (String) params.get("vmware.recycle.hung.wokervm"); if(value != null && value.equalsIgnoreCase("true")) _recycleHungWorker = true; @@ -4774,16 +4773,16 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa value = (String) params.get("vmware.reserve.mem"); if(value != null && value.equalsIgnoreCase("true")) _reserveMem = true; - + value = (String)params.get("vmware.root.disk.controller"); if(value != null && value.equalsIgnoreCase("scsi")) - _rootDiskController = DiskControllerType.scsi; + _rootDiskController = DiskControllerType.scsi; else - _rootDiskController = DiskControllerType.ide; + _rootDiskController = DiskControllerType.ide; value = params.get("vmware.use.nexus.vswitch").toString(); if(value != null && value.equalsIgnoreCase("true")) - _nexusVSwitch = true; + _nexusVSwitch = true; s_logger.info("VmwareResource network configuration info. private vSwitch: " + _privateNetworkVSwitchName + ", public vSwitch: " + _publicNetworkVSwitchName + ", guest network: " + _guestNetworkVSwitchName); @@ -4825,25 +4824,25 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa _serviceContext = VmwareContextFactory.create(_vCenterAddress, _username, _password); VmwareHypervisorHost hyperHost = getHyperHost(_serviceContext, cmd); assert(hyperHost instanceof HostMO); - + HostFirewallSystemMO firewallMo = ((HostMO)hyperHost).getHostFirewallSystemMO(); boolean bRefresh = false; if(firewallMo != null) { - HostFirewallInfo firewallInfo = firewallMo.getFirewallInfo(); - if(firewallInfo != null) { - for(HostFirewallRuleset rule : firewallInfo.getRuleset()) { - if("vncServer".equalsIgnoreCase(rule.getKey())) { - bRefresh = true; - firewallMo.enableRuleset("vncServer"); - } else if("gdbserver".equalsIgnoreCase(rule.getKey())) { - bRefresh = true; - firewallMo.enableRuleset("gdbserver"); - } - } - } - - if(bRefresh) - firewallMo.refreshFirewall(); + HostFirewallInfo firewallInfo = firewallMo.getFirewallInfo(); + if(firewallInfo != null) { + for(HostFirewallRuleset rule : firewallInfo.getRuleset()) { + if("vncServer".equalsIgnoreCase(rule.getKey())) { + bRefresh = true; + firewallMo.enableRuleset("vncServer"); + } else if("gdbserver".equalsIgnoreCase(rule.getKey())) { + bRefresh = true; + firewallMo.enableRuleset("gdbserver"); + } + } + } + + if(bRefresh) + firewallMo.refreshFirewall(); } } catch (Exception e) { s_logger.error("Unable to connect to vSphere server: " + _vCenterAddress, e); @@ -4864,7 +4863,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa @Override public VmwareHypervisorHost getHyperHost(VmwareContext context, Command cmd) { if (_morHyperHost.getType().equalsIgnoreCase("HostSystem")) { - return new HostMO(context, _morHyperHost); + return new HostMO(context, _morHyperHost); } return new ClusterMO(context, _morHyperHost); } @@ -4877,8 +4876,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa assert(cmd != null); VmwareManager vmwareMgr = context.getStockObject(VmwareManager.CONTEXT_STOCK_NAME); - long checkPointId = vmwareMgr.pushCleanupCheckpoint(this._guid, vmName); - cmd.setContextParam("checkpoint", String.valueOf(checkPointId)); + // TODO: Fix this? long checkPointId = vmwareMgr.pushCleanupCheckpoint(this._guid, vmName); + // TODO: Fix this? cmd.setContextParam("checkpoint", String.valueOf(checkPointId)); return vmName; } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java index f6a812deca4..60d9c96098f 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java @@ -17,6 +17,7 @@ package com.cloud.network.element; +import java.lang.Class; import java.lang.String; import java.util.List; import java.util.Map; @@ -241,8 +242,12 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "cisconexusvsm_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(ListCiscoNexusVSMsCmd.class); + cmdList.add(EnableCiscoNexusVSMCmd.class); + cmdList.add(DisableCiscoNexusVSMCmd.class); + cmdList.add(DeleteCiscoNexusVSMCmd.class); + return cmdList; } } diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index b30ef23732a..f224d7dc716 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -183,7 +183,8 @@ import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; import com.cloud.agent.api.storage.DestroyCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; -import com.cloud.agent.api.storage.StorageCommand; +import com.cloud.agent.api.storage.ResizeVolumeAnswer; +import com.cloud.agent.api.storage.ResizeVolumeCommand; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.PortForwardingRuleTO; @@ -474,6 +475,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return execute((DeleteStoragePoolCommand) cmd); } else if (clazz == CopyVolumeCommand.class) { return execute((CopyVolumeCommand) cmd); + } else if (clazz == ResizeVolumeCommand.class) { + return execute((ResizeVolumeCommand) cmd); } else if (clazz == AttachVolumeCommand.class) { return execute((AttachVolumeCommand) cmd); } else if (clazz == AttachIsoCommand.class) { @@ -596,7 +599,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return new XsLocalNetwork(Network.getByUuid(conn, _host.privateNetwork), null, PIF.getByUuid(conn, _host.privatePif), null); } else if (type == TrafficType.Public) { return new XsLocalNetwork(Network.getByUuid(conn, _host.publicNetwork), null, PIF.getByUuid(conn, _host.publicPif), null); - } else if (type == TrafficType.Storage) { + } else if (type == TrafficType.Storage) { /* TrafficType.Storage is for secondary storage, while storageNetwork1 is for primary storage, we need better name here */ return new XsLocalNetwork(Network.getByUuid(conn, _host.storageNetwork1), null, PIF.getByUuid(conn, _host.storagePif1), null); } @@ -623,28 +626,28 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe // Create a VIF unless there's not already another VIF Set dom0Vifs = dom0.getVIFs(conn); for (VIF vif:dom0Vifs) { - vif.getRecord(conn); - if (vif.getNetwork(conn).getUuid(conn) == nw.getUuid(conn)) { - dom0vif = vif; - s_logger.debug("A VIF for dom0 has already been found - No need to create one"); - } + vif.getRecord(conn); + if (vif.getNetwork(conn).getUuid(conn) == nw.getUuid(conn)) { + dom0vif = vif; + s_logger.debug("A VIF for dom0 has already been found - No need to create one"); + } } if (dom0vif == null) { - s_logger.debug("Create a vif on dom0 for " + networkDesc); - VIF.Record vifr = new VIF.Record(); - vifr.VM = dom0; - vifr.device = getLowestAvailableVIFDeviceNum(conn, dom0); - if (vifr.device == null) { - s_logger.debug("Failed to create " + networkDesc + ", no vif available"); - return; - } - Map config = new HashMap(); - config.put("nameLabel", vifNameLabel); - vifr.otherConfig = config; - vifr.MAC = "FE:FF:FF:FF:FF:FF"; - vifr.network = nw; - - dom0vif = VIF.create(conn, vifr); + s_logger.debug("Create a vif on dom0 for " + networkDesc); + VIF.Record vifr = new VIF.Record(); + vifr.VM = dom0; + vifr.device = getLowestAvailableVIFDeviceNum(conn, dom0); + if (vifr.device == null) { + s_logger.debug("Failed to create " + networkDesc + ", no vif available"); + return; + } + Map config = new HashMap(); + config.put("nameLabel", vifNameLabel); + vifr.otherConfig = config; + vifr.MAC = "FE:FF:FF:FF:FF:FF"; + vifr.network = nw; + + dom0vif = VIF.create(conn, vifr); } // At this stage we surely have a VIF dom0vif.plug(conn); @@ -718,64 +721,64 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe * This method creates a XenServer network and configures it for being used as a L2-in-L3 tunneled network */ private synchronized Network configureTunnelNetwork(Connection conn, long networkId, long hostId, int key) { - try { - Network nw = findOrCreateTunnelNetwork(conn, key); - String nwName = "OVSTunnel" + key; - //Invoke plugin to setup the bridge which will be used by this network - String bridge = nw.getBridge(conn); - Map nwOtherConfig = nw.getOtherConfig(conn); - String configuredHosts = nwOtherConfig.get("ovs-host-setup"); - boolean configured = false; - if (configuredHosts!=null) { - String hostIdsStr[] = configuredHosts.split(","); - for (String hostIdStr:hostIdsStr) { - if (hostIdStr.equals(((Long)hostId).toString())) { - configured = true; - break; - } - } - } - if (!configured) { - // Plug dom0 vif only if not done before for network and host - enableXenServerNetwork(conn, nw, nwName, "tunnel network for account " + key); - String result = callHostPlugin(conn, "ovstunnel", "setup_ovs_bridge", "bridge", bridge, - "key", String.valueOf(key), - "xs_nw_uuid", nw.getUuid(conn), - "cs_host_id", ((Long)hostId).toString()); - //Note down the fact that the ovs bridge has been setup - String[] res = result.split(":"); - if (res.length != 2 || !res[0].equalsIgnoreCase("SUCCESS")) { - //TODO: Should make this error not fatal? - throw new CloudRuntimeException("Unable to pre-configure OVS bridge " + bridge + " for network ID:" + networkId + - " - " + res); - } - } - return nw; + try { + Network nw = findOrCreateTunnelNetwork(conn, key); + String nwName = "OVSTunnel" + key; + //Invoke plugin to setup the bridge which will be used by this network + String bridge = nw.getBridge(conn); + Map nwOtherConfig = nw.getOtherConfig(conn); + String configuredHosts = nwOtherConfig.get("ovs-host-setup"); + boolean configured = false; + if (configuredHosts!=null) { + String hostIdsStr[] = configuredHosts.split(","); + for (String hostIdStr:hostIdsStr) { + if (hostIdStr.equals(((Long)hostId).toString())) { + configured = true; + break; + } + } + } + if (!configured) { + // Plug dom0 vif only if not done before for network and host + enableXenServerNetwork(conn, nw, nwName, "tunnel network for account " + key); + String result = callHostPlugin(conn, "ovstunnel", "setup_ovs_bridge", "bridge", bridge, + "key", String.valueOf(key), + "xs_nw_uuid", nw.getUuid(conn), + "cs_host_id", ((Long)hostId).toString()); + //Note down the fact that the ovs bridge has been setup + String[] res = result.split(":"); + if (res.length != 2 || !res[0].equalsIgnoreCase("SUCCESS")) { + //TODO: Should make this error not fatal? + throw new CloudRuntimeException("Unable to pre-configure OVS bridge " + bridge + " for network ID:" + networkId + + " - " + res); + } + } + return nw; } catch (Exception e) { s_logger.warn("createandConfigureTunnelNetwork failed", e); return null; } } - + private synchronized void destroyTunnelNetwork(Connection conn, int key) { - try { - Network nw = findOrCreateTunnelNetwork(conn, key); + try { + Network nw = findOrCreateTunnelNetwork(conn, key); String bridge = nw.getBridge(conn); String result = callHostPlugin(conn, "ovstunnel", "destroy_ovs_bridge", "bridge", bridge); String[] res = result.split(":"); if (res.length != 2 || !res[0].equalsIgnoreCase("SUCCESS")) { - //TODO: Should make this error not fatal? - //Can Concurrent VM shutdown/migration/reboot events can cause this method - //to be executed on a bridge which has already been removed? - throw new CloudRuntimeException("Unable to remove OVS bridge " + bridge + ":" + res); + //TODO: Should make this error not fatal? + //Can Concurrent VM shutdown/migration/reboot events can cause this method + //to be executed on a bridge which has already been removed? + throw new CloudRuntimeException("Unable to remove OVS bridge " + bridge + ":" + res); } return; - } catch (Exception e) { + } catch (Exception e) { s_logger.warn("destroyTunnelNetwork failed:", e); return; - } + } } - + protected Network getNetwork(Connection conn, NicTO nic) throws XenAPIException, XmlRpcException { String name = nic.getName(); XsLocalNetwork network = getNativeNetworkForTraffic(conn, nic.getType(), name); @@ -803,13 +806,13 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return findOrCreateTunnelNetwork(conn, vnetId); } } else if (nic.getBroadcastType() == BroadcastDomainType.Storage) { - URI broadcastUri = nic.getBroadcastUri(); - if (broadcastUri == null) { - return network.getNetwork(); - } else { - long vlan = Long.parseLong(broadcastUri.getHost()); - return enableVlanNetwork(conn, vlan, network); - } + URI broadcastUri = nic.getBroadcastUri(); + if (broadcastUri == null) { + return network.getNetwork(); + } else { + long vlan = Long.parseLong(broadcastUri.getHost()); + return enableVlanNetwork(conn, vlan, network); + } } else if (nic.getBroadcastType() == BroadcastDomainType.Lswitch) { // Nicira Logical Switch return network.getNetwork(); @@ -889,26 +892,26 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe protected VDI mount(Connection conn, String vmName, VolumeTO volume) throws XmlRpcException, XenAPIException { if (volume.getType() == Volume.Type.ISO) { - String isopath = volume.getPath(); - if (isopath == null) { - return null; - } - if (isopath.startsWith("xs-tools")) { - try { - Set vdis = VDI.getByNameLabel(conn, isopath); - if (vdis.isEmpty()) { - throw new CloudRuntimeException("Could not find ISO with URL: " + isopath); - } - return vdis.iterator().next(); + String isopath = volume.getPath(); + if (isopath == null) { + return null; + } + if (isopath.startsWith("xs-tools")) { + try { + Set vdis = VDI.getByNameLabel(conn, isopath); + if (vdis.isEmpty()) { + throw new CloudRuntimeException("Could not find ISO with URL: " + isopath); + } + return vdis.iterator().next(); + + } catch (XenAPIException e) { + throw new CloudRuntimeException("Unable to get pv iso: " + isopath + " due to " + e.toString()); + } catch (Exception e) { + throw new CloudRuntimeException("Unable to get pv iso: " + isopath + " due to " + e.toString()); + } + } - } catch (XenAPIException e) { - throw new CloudRuntimeException("Unable to get pv iso: " + isopath + " due to " + e.toString()); - } catch (Exception e) { - throw new CloudRuntimeException("Unable to get pv iso: " + isopath + " due to " + e.toString()); - } - } - int index = isopath.lastIndexOf("/"); String mountpoint = isopath.substring(0, index); @@ -1180,11 +1183,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe for ( VM vm : vms ) { Set vbds = vm.getVBDs(conn); for( VBD vbd : vbds ) { - if (vbd.getType(conn) == Types.VbdType.CD ) { - vbd.eject(conn); - vbd.destroy(conn); - break; - } + if (vbd.getType(conn) == Types.VbdType.CD ) { + vbd.eject(conn); + vbd.destroy(conn); + break; + } } } } catch (Exception e) { @@ -1287,7 +1290,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } } synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, State.Starting); + s_vms.put(_cluster, _name, vmName, State.Starting); } s_logger.debug("1. The VM " + vmName + " is in Starting state."); @@ -1309,7 +1312,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe startVM(conn, host, vm, vmName); if (_isOvs) { - // TODO(Salvatore-orlando): This code should go + // TODO(Salvatore-orlando): This code should go for (NicTO nic : vmSpec.getNics()) { if (nic.getBroadcastType() == Networks.BroadcastDomainType.Vswitch) { HashMap args = parseDefaultOvsRuleComamnd(nic.getBroadcastUri().toString().substring(Networks.BroadcastDomainType.Vswitch.scheme().length() + "://".length())); @@ -1332,7 +1335,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe NicTO[] nics = vmSpec.getNics(); boolean secGrpEnabled = false; for (NicTO nic : nics) { - if (nic.getIsolationUri() != null && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString())) { + if (nic.isSecurityGroupEnabled() || (nic.getIsolationUri() != null + && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString()))) { secGrpEnabled = true; break; } @@ -1350,7 +1354,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe //For user vm, program the rules for each nic if the isolation uri scheme is ec2 NicTO[] nics = vmSpec.getNics(); for (NicTO nic : nics) { - if (nic.getIsolationUri() != null && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString())) { + if ( nic.isSecurityGroupEnabled() || nic.getIsolationUri() != null + && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString())) { result = callHostPlugin(conn, "vmops", "default_network_rules", "vmName", vmName, "vmIP", nic.getIp(), "vmMAC", nic.getMac(), "vmID", Long.toString(vmSpec.getId())); if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) { @@ -1373,10 +1378,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe synchronized (_cluster.intern()) { if (state != State.Stopped) { s_vms.put(_cluster, _name, vmName, state); - s_logger.debug("2. The VM " + vmName + " is in " + state + " state."); + s_logger.debug("2. The VM " + vmName + " is in " + state + " state."); } else { s_vms.remove(_cluster, _name, vmName); - s_logger.debug("The VM is in stopped state, detected problem during startup : " + vmName); + s_logger.debug("The VM is in stopped state, detected problem during startup : " + vmName); } } } @@ -1761,11 +1766,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe if (cmd.getStaticRoutes() != null) { args += " -s " + cmd.getStaticRoutes(); } - + if (cmd.getDefaultDns() != null) { - args += " -N " + cmd.getDefaultDns(); + args += " -N " + cmd.getDefaultDns(); } - + String result = callHostPlugin(conn, "vmops", "saveDhcpEntry", "args", args); if (result == null || result.isEmpty()) { return new Answer(cmd, false, "DhcpEntry failed"); @@ -1941,10 +1946,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe args += " -c "; args += "eth" + correctVif.getDevice(conn); - + args += " -g "; args += vlanGateway; - + String result = callHostPlugin(conn, "vmops", "routerProxy", "args", args); if (result == null || result.isEmpty()) { @@ -1980,7 +1985,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe try { VM router = getVM(conn, vmName); - + VIF correctVif = getVifByMac(conn, router, ip.getVifMacAddress()); if (correctVif == null) { if (ip.isAdd()) { @@ -1990,7 +1995,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return; } } - + String args = "vpc_ipassoc.sh " + routerIp; if (ip.isAdd()) { @@ -2004,14 +2009,14 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe args += " -c "; args += "eth" + correctVif.getDevice(conn); - + args += " -g "; args += ip.getVlanGateway(); - + args += " -m "; args += Long.toString(NetUtils.getCidrSize(ip.getVlanNetmask())); - - + + args += " -n "; args += NetUtils.getSubNet(ip.getPublicIp(), ip.getVlanNetmask()); @@ -2025,7 +2030,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe throw new Exception(msg); } } - + protected String networkUsage(Connection conn, final String privateIpAddress, final String option, final String vif) { if (option.equals("get")) { @@ -2062,9 +2067,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe try { Set vms = VM.getByNameLabel(conn, cmd.getName()); if(vms.size() == 1) { - int vncport = getVncPort(conn, vms.iterator().next()); - String consoleurl; - consoleurl = "consoleurl=" +getVncUrl(conn, vms.iterator().next()) + "&" +"sessionref="+ conn.getSessionReference(); + int vncport = getVncPort(conn, vms.iterator().next()); + String consoleurl; + consoleurl = "consoleurl=" +getVncUrl(conn, vms.iterator().next()) + "&" +"sessionref="+ conn.getSessionReference(); return new GetVncPortAnswer(cmd, consoleurl, vncport); } else { return new GetVncPortAnswer(cmd, "There are " + vms.size() + " VMs named " + cmd.getName()); @@ -2540,7 +2545,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe synchronized (_cluster.intern()) { s_vms.put(_cluster, _name, vmName, State.Running); } - s_logger.debug("3. The VM " + vmName + " is in Running state"); + s_logger.debug("3. The VM " + vmName + " is in Running state"); } return new CheckVirtualMachineAnswer(cmd, state, vncPort); @@ -2562,7 +2567,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe getNetwork(conn, nic); } synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vm.getName(), State.Migrating); + s_vms.put(_cluster, _name, vm.getName(), State.Migrating); } s_logger.debug("4. The VM " + vm.getName() + " is in Migrating state"); @@ -2634,7 +2639,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe s_logger.warn(errMsg); throw new CloudRuntimeException(errMsg); } - + boolean killCopyProcess(Connection conn, String nameLabel) { String results = callHostPluginAsync(conn, "vmops", "kill_copy_process", 60, "namelabel", nameLabel); @@ -2827,9 +2832,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe State state = null; state = s_vms.getState(_cluster, vmName); - + synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, State.Stopping); + s_vms.put(_cluster, _name, vmName, State.Stopping); } s_logger.debug("5. The VM " + vmName + " is in Stopping state"); try { @@ -2869,10 +2874,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe s_logger.warn(msg, e); return new MigrateAnswer(cmd, false, msg, null); } finally { - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, state); - } - s_logger.debug("6. The VM " + vmName + " is in " + state + " state"); + synchronized (_cluster.intern()) { + s_vms.put(_cluster, _name, vmName, state); + } + s_logger.debug("6. The VM " + vmName + " is in " + state + " state"); } } @@ -2971,8 +2976,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe record = vm.getRecord(conn); Set consoles = record.consoles; if (consoles.isEmpty()) { - s_logger.warn("There are no Consoles available to the vm : " + record.nameDescription); - return -1; + s_logger.warn("There are no Consoles available to the vm : " + record.nameDescription); + return -1; } Iterator i = consoles.iterator(); } catch (XenAPIException e) { @@ -2997,23 +3002,23 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe vncport = vncport.replace("\n", ""); return NumbersUtil.parseInt(vncport, -1); } - + protected String getVncUrl(Connection conn, VM vm) { VM.Record record; Console c; try { record = vm.getRecord(conn); Set consoles = record.consoles; - + if (consoles.isEmpty()) { - s_logger.warn("There are no Consoles available to the vm : " + record.nameDescription); - return null; + s_logger.warn("There are no Consoles available to the vm : " + record.nameDescription); + return null; } Iterator i = consoles.iterator(); while(i.hasNext()) { - c = i.next(); - if(c.getProtocol(conn) == ConsoleProtocol.RFB) - return c.getLocation(conn); + c = i.next(); + if(c.getProtocol(conn) == ConsoleProtocol.RFB) + return c.getLocation(conn); } } catch (XenAPIException e) { String msg = "Unable to get console url due to " + e.toString(); @@ -3024,14 +3029,14 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe s_logger.warn(msg, e); return null; } - return null; + return null; } @Override public RebootAnswer execute(RebootCommand cmd) { Connection conn = getConnection(); synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, cmd.getVmName(), State.Starting); + s_vms.put(_cluster, _name, cmd.getVmName(), State.Starting); } s_logger.debug("7. The VM " + cmd.getVmName() + " is in Starting state"); try { @@ -3056,9 +3061,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } return new RebootAnswer(cmd, "reboot succeeded", true); } finally { - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, cmd.getVmName(), State.Running); - } + synchronized (_cluster.intern()) { + s_vms.put(_cluster, _name, cmd.getVmName(), State.Running); + } s_logger.debug("8. The VM " + cmd.getVmName() + " is in Running state"); } } @@ -3520,10 +3525,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } if (vms.size() == 0) { - synchronized (_cluster.intern()) { - s_logger.info("VM does not exist on XenServer" + _host.uuid); - s_vms.remove(_cluster, _name, vmName); - } + synchronized (_cluster.intern()) { + s_logger.info("VM does not exist on XenServer" + _host.uuid); + s_vms.remove(_cluster, _name, vmName); + } return new StopAnswer(cmd, "VM does not exist", 0 , true); } for (VM vm : vms) { @@ -3542,9 +3547,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } State state = s_vms.getState(_cluster, vmName); - + synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, State.Stopping); + s_vms.put(_cluster, _name, vmName, State.Stopping); } s_logger.debug("9. The VM " + vmName + " is in Stopping state"); @@ -3605,10 +3610,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe String msg = "VM destroy failed in Stop " + vmName + " Command due to " + e.getMessage(); s_logger.warn(msg, e); } finally { - synchronized (_cluster.intern()) { - s_vms.put(_cluster, _name, vmName, state); - } - s_logger.debug("10. The VM " + vmName + " is in " + state + " state"); + synchronized (_cluster.intern()) { + s_vms.put(_cluster, _name, vmName, state); + } + s_logger.debug("10. The VM " + vmName + " is in " + state + " state"); } } } @@ -3829,7 +3834,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return null; } - + protected VIF getCorrectVif(Connection conn, VM router, IpAddressTO ip) throws XmlRpcException, XenAPIException { NicTO nic = new NicTO(); nic.setType(ip.getTrafficType()); @@ -3852,7 +3857,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } return null; } - + protected VIF getVifByMac(Connection conn, VM router, String mac) throws XmlRpcException, XenAPIException { Set routerVIFs = router.getVIFs(conn); mac = mac.trim(); @@ -4235,7 +4240,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } Connection conn = getConnection(); if (!_canBridgeFirewall && !_isOvs) { - return new PingRoutingCommand(getType(), id, null); + return new PingRoutingCommand(getType(), id, null); } else if (_isOvs) { List>ovsStates = ovsFullSyncStates(); return new PingRoutingWithOvsCommand(getType(), id, null, ovsStates); @@ -4345,8 +4350,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe s_logger.warn("Unable to find storage network " + _storageNetworkName1 + " for host " + _host.ip); throw new IllegalArgumentException("Unable to find storage network " + _storageNetworkName1 + " for host " + _host.ip); } else { - _host.storageNetwork1 = storageNic1.getNetworkRecord(conn).uuid; - _host.storagePif1 = storageNic1.getPifRecord(conn).uuid; + _host.storageNetwork1 = storageNic1.getNetworkRecord(conn).uuid; + _host.storagePif1 = storageNic1.getPifRecord(conn).uuid; } XsLocalNetwork storageNic2 = null; @@ -4484,7 +4489,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe cmd.setHypervisorType(HypervisorType.XenServer); cmd.setCluster(_cluster); cmd.setPoolSync(false); - + Pool pool; try { pool = Pool.getByUuid(conn, _host.pool); @@ -4492,8 +4497,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe Host.Record hostr = poolr.master.getRecord(conn); if (_host.uuid.equals(hostr.uuid)) { - HashMap> allStates=fullClusterSync(conn); - cmd.setClusterVMStateChanges(allStates); + HashMap> allStates=fullClusterSync(conn); + cmd.setClusterVMStateChanges(allStates); } } catch (Throwable e) { s_logger.warn("Check for master failed, failing the FULL Cluster sync command"); @@ -5103,28 +5108,28 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return Boolean.valueOf(callHostPlugin(conn, "vmops", "can_bridge_firewall", "host_uuid", _host.uuid, "instance", _instance)); } - + private Answer execute(OvsSetupBridgeCommand cmd) { Connection conn = getConnection(); findOrCreateTunnelNetwork(conn, cmd.getKey()); configureTunnelNetwork(conn, cmd.getNetworkId(), cmd.getHostId(), cmd.getKey()); s_logger.debug("OVS Bridge configured"); - return new Answer(cmd, true, null); + return new Answer(cmd, true, null); } private Answer execute(OvsDestroyBridgeCommand cmd) { Connection conn = getConnection(); destroyTunnelNetwork(conn, cmd.getKey()); s_logger.debug("OVS Bridge destroyed"); - return new Answer(cmd, true, null); + return new Answer(cmd, true, null); } - + private Answer execute(OvsDestroyTunnelCommand cmd) { Connection conn = getConnection(); try { - Network nw = findOrCreateTunnelNetwork(conn, cmd.getNetworkId()); + Network nw = findOrCreateTunnelNetwork(conn, cmd.getNetworkId()); if (nw == null) { - s_logger.warn("Unable to find tunnel network for GRE key:" + cmd.getKey()); + s_logger.warn("Unable to find tunnel network for GRE key:" + cmd.getKey()); return new Answer(cmd, false, "No network found"); } @@ -5151,16 +5156,16 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe Connection conn = getConnection(); String bridge = "unknown"; try { - Network nw = findOrCreateTunnelNetwork(conn, cmd.getKey()); + Network nw = findOrCreateTunnelNetwork(conn, cmd.getKey()); if (nw == null) { - s_logger.debug("Error during bridge setup"); + s_logger.debug("Error during bridge setup"); return new OvsCreateTunnelAnswer(cmd, false, "Cannot create network", bridge); } - + configureTunnelNetwork(conn, cmd.getNetworkId(), cmd.getFrom(), cmd.getKey()); bridge = nw.getBridge(conn); String result = callHostPlugin(conn, "ovstunnel", "create_tunnel", "bridge", bridge, "remote_ip", cmd.getRemoteIp(), - "key", cmd.getKey().toString(), "from", cmd.getFrom().toString(), "to", cmd.getTo().toString()); + "key", cmd.getKey().toString(), "from", cmd.getFrom().toString(), "to", cmd.getTo().toString()); String[] res = result.split(":"); if (res.length == 2 && res[0].equalsIgnoreCase("SUCCESS")) { return new OvsCreateTunnelAnswer(cmd, true, result, res[1], bridge); @@ -5168,8 +5173,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return new OvsCreateTunnelAnswer(cmd, false, result, bridge); } } catch (Exception e) { - s_logger.debug("Error during tunnel setup"); - s_logger.warn("Caught execption when creating ovs tunnel", e); + s_logger.debug("Error during tunnel setup"); + s_logger.warn("Caught execption when creating ovs tunnel", e); return new OvsCreateTunnelAnswer(cmd, false, e.getMessage(), bridge); } } @@ -5255,9 +5260,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe private OvsFetchInterfaceAnswer execute(OvsFetchInterfaceCommand cmd) { - - String label = cmd.getLabel(); - s_logger.debug("Will look for network with name-label:" + label + " on host " + _host.ip); + + String label = cmd.getLabel(); + s_logger.debug("Will look for network with name-label:" + label + " on host " + _host.ip); Connection conn = getConnection(); try { XsLocalNetwork nw = this.getNetworkByName(conn, label); @@ -5266,17 +5271,17 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe Record pifRec = pif.getRecord(conn); s_logger.debug("PIF object:" + pifRec.uuid + "(" + pifRec.device + ")"); return new OvsFetchInterfaceAnswer(cmd, true, "Interface " + pifRec.device + " retrieved successfully", - pifRec.IP, pifRec.netmask, pifRec.MAC); + pifRec.IP, pifRec.netmask, pifRec.MAC); } catch (Exception e) { e.printStackTrace(); s_logger.error("An error occurred while fetching the interface for " + - label + " on host " + _host.ip + ":" + e.toString() + - "(" + e.getClass() + ")"); + label + " on host " + _host.ip + ":" + e.toString() + + "(" + e.getClass() + ")"); return new OvsFetchInterfaceAnswer(cmd, false, "EXCEPTION:" + e.getMessage()); } } - + private OvsCreateGreTunnelAnswer execute(OvsCreateGreTunnelCommand cmd) { _isOvs = true; @@ -5299,9 +5304,9 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } catch (Exception e) { e.printStackTrace(); s_logger.error("An error occurred while creating a GRE tunnel to " + - cmd.getRemoteIp() + " on host " + _host.ip + ":" + e.getMessage() + - "(" + e.getClass() + ")"); - + cmd.getRemoteIp() + " on host " + _host.ip + ":" + e.getMessage() + + "(" + e.getClass() + ")"); + } return new OvsCreateGreTunnelAnswer(cmd, false, "EXCEPTION", _host.ip, bridge); @@ -5316,10 +5321,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe if (!_canBridgeFirewall) { s_logger.warn("Host " + _host.ip + " cannot do bridge firewalling"); return new SecurityGroupRuleAnswer(cmd, false, - "Host " + _host.ip + " cannot do bridge firewalling", - SecurityGroupRuleAnswer.FailureReason.CANNOT_BRIDGE_FIREWALL); + "Host " + _host.ip + " cannot do bridge firewalling", + SecurityGroupRuleAnswer.FailureReason.CANNOT_BRIDGE_FIREWALL); } - + String result = callHostPlugin(conn, "vmops", "network_rules", "vmName", cmd.getVmName(), "vmIP", cmd.getGuestIp(), @@ -5338,7 +5343,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return new SecurityGroupRuleAnswer(cmd); } } - + protected Answer execute(DeleteStoragePoolCommand cmd) { Connection conn = getConnection(); StorageFilerTO poolTO = cmd.getPool(); @@ -5381,7 +5386,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe if( hr.softwareVersion.get("product_version_text_short") != null ) { details.put("product_version_text_short", hr.softwareVersion.get("product_version_text_short")); cmd.setHypervisorVersion(hr.softwareVersion.get("product_version_text_short")); - + cmd.setHypervisorVersion(_host.product_version); } if (_privateNetworkName != null) { @@ -5546,12 +5551,12 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } CheckXenHostInfo(); - + this.storageResource = getStorageResource(); return true; } - + protected XenServerStorageResource getStorageResource() { return new XenServerStorageResource(this); } @@ -5603,7 +5608,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe SR poolSr = getStorageRepository(conn, pool.getUuid()); if (cmd.getTemplateUrl() != null) { VDI tmpltvdi = null; - + tmpltvdi = getVDIbyUuid(conn, cmd.getTemplateUrl()); vdi = tmpltvdi.createClone(conn, new HashMap()); vdi.setNameLabel(conn, dskch.getName()); @@ -5630,6 +5635,23 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } } + public Answer execute(ResizeVolumeCommand cmd) { + Connection conn = getConnection(); + StorageFilerTO pool = cmd.getPool(); + String volid = cmd.getPath(); + long newSize = cmd.getNewSize(); + + try { + VDI vdi = getVDIbyUuid(conn, volid); + vdi.resize(conn, newSize); + return new ResizeVolumeAnswer(cmd, true, "success", newSize); + } catch (Exception e) { + s_logger.warn("Unable to resize volume",e); + String error = "failed to resize volume:" +e; + return new ResizeVolumeAnswer(cmd, false, error ); + } + } + protected SR getISOSRbyVmName(Connection conn, String vmName) { try { Set srs = SR.getByNameLabel(conn, vmName + "-ISO"); @@ -7262,12 +7284,12 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe synchronized (_cluster.intern()) { - HashMap> newStates = getAllVms(conn); - if (newStates == null) { - s_logger.warn("Unable to get the vm states so no state sync at this point."); - return null; - } - HashMap> oldStates = new HashMap>(s_vms.size(_cluster)); + HashMap> newStates = getAllVms(conn); + if (newStates == null) { + s_logger.warn("Unable to get the vm states so no state sync at this point."); + return null; + } + HashMap> oldStates = new HashMap>(s_vms.size(_cluster)); oldStates.putAll(s_vms.getClusterVmState(_cluster)); for (final Map.Entry> entry : newStates.entrySet()) { @@ -7282,7 +7304,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe if (!host_uuid.equals(oldState.first()) && newState != State.Stopped && newState != State.Stopping){ s_logger.warn("Detecting a change in host for " + vm); changes.put(vm, new Pair(host_uuid, newState)); - + s_logger.debug("11. The VM " + vm + " is in " + newState + " state"); s_vms.put(_cluster, host_uuid, vm, newState); continue; @@ -7292,7 +7314,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe if (newState == State.Stopped && oldState != null && oldState.second() != State.Stopping && oldState.second() != State.Stopped) { newState = getRealPowerState(conn, vm); } - + if (s_logger.isTraceEnabled()) { s_logger.trace("VM " + vm + ": xen has state " + newState + " and we have state " + (oldState != null ? oldState.toString() : "null")); } @@ -7307,7 +7329,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe changes.put(vm, new Pair(host_uuid, newState)); } else if (oldState.second() == State.Starting) { if (newState == State.Running) { - s_logger.debug("12. The VM " + vm + " is in " + State.Running + " state"); + s_logger.debug("12. The VM " + vm + " is in " + State.Running + " state"); s_vms.put(_cluster, host_uuid, vm, newState); } else if (newState == State.Stopped) { s_logger.warn("Ignoring vm " + vm + " because of a lag in starting the vm."); @@ -7319,13 +7341,13 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } } else if (oldState.second() == State.Stopping) { if (newState == State.Stopped) { - s_logger.debug("13. The VM " + vm + " is in " + State.Stopped + " state"); + s_logger.debug("13. The VM " + vm + " is in " + State.Stopped + " state"); s_vms.put(_cluster, host_uuid, vm, newState); } else if (newState == State.Running) { s_logger.warn("Ignoring vm " + vm + " because of a lag in stopping the vm. "); } } else if (oldState.second() != newState) { - s_logger.debug("14. The VM " + vm + " is in " + newState + " state was " + oldState.second()); + s_logger.debug("14. The VM " + vm + " is in " + newState + " state was " + oldState.second()); s_vms.put(_cluster, host_uuid, vm, newState); if (newState == State.Stopped) { /* @@ -7341,7 +7363,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe final String vm = entry.getKey(); final State oldState = entry.getValue().second(); String host_uuid = entry.getValue().first(); - + if (s_logger.isTraceEnabled()) { s_logger.trace("VM " + vm + " is now missing from xen so reporting stopped"); } @@ -7352,7 +7374,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } else if (oldState == State.Starting) { s_logger.warn("Ignoring VM " + vm + " in transition state starting."); } else if (oldState == State.Stopped) { - s_logger.debug("VM missing " + vm + " old state stopped so removing."); + s_logger.debug("VM missing " + vm + " old state stopped so removing."); s_vms.remove(_cluster, host_uuid, vm); } else if (oldState == State.Migrating) { s_logger.warn("Ignoring VM " + vm + " in migrating state."); @@ -7526,31 +7548,31 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe if (cmd.isCreate()) { args += " -A"; args += " -l "; - args += cmd.getLocalPublicIp(); + args += cmd.getLocalPublicIp(); args += " -n "; - args += cmd.getLocalGuestCidr(); + args += cmd.getLocalGuestCidr(); args += " -g "; - args += cmd.getLocalPublicGateway(); + args += cmd.getLocalPublicGateway(); args += " -r "; - args += cmd.getPeerGatewayIp(); + args += cmd.getPeerGatewayIp(); args += " -N "; - args += cmd.getPeerGuestCidrList(); + args += cmd.getPeerGuestCidrList(); args += " -e "; - args += "\"" + cmd.getEspPolicy() + "\""; + args += "\"" + cmd.getEspPolicy() + "\""; args += " -i "; - args += "\"" + cmd.getIkePolicy() + "\""; + args += "\"" + cmd.getIkePolicy() + "\""; args += " -t "; - args += Long.toString(cmd.getIkeLifetime()); + args += Long.toString(cmd.getIkeLifetime()); args += " -T "; - args += Long.toString(cmd.getEspLifetime()); + args += Long.toString(cmd.getEspLifetime()); args += " -s "; - args += "\"" + cmd.getIpsecPsk() + "\""; - args += " -d "; - if (cmd.getDpd()) { - args += "1"; - } else { - args += "0"; - } + args += "\"" + cmd.getIpsecPsk() + "\""; + args += " -d "; + if (cmd.getDpd()) { + args += "1"; + } else { + args += "0"; + } } else { args += " -D"; args += " -r "; @@ -7576,7 +7598,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe VM router = getVM(conn, routerName); VIF correctVif = getCorrectVif(conn, router, pubIp); - + String args = "vpc_snat.sh " + routerIp; args += " -A "; @@ -7585,7 +7607,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe args += " -c "; args += "eth" + correctVif.getDevice(conn); - + String result = callHostPlugin(conn, "vmops", "routerProxy", "args", args); if (result == null || result.isEmpty()) { throw new InternalErrorException("Xen plugin \"vpc_snat\" failed."); @@ -7609,11 +7631,11 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe String [][] rules = cmd.generateFwRules(); StringBuilder sb = new StringBuilder(); String[] aclRules = rules[0]; - + for (int i = 0; i < aclRules.length; i++) { sb.append(aclRules[i]).append(','); } - + NicTO nic = cmd.getNic(); VIF vif = getVifByMac(conn, router, nic.getMac()); String args = "vpc_acl.sh " + routerIp; @@ -7665,8 +7687,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } return new SetPortForwardingRulesAnswer(cmd, results, endResult); } - - + + private SetStaticRouteAnswer execute(SetStaticRouteCommand cmd) { String callResult; Connection conn = getConnection(); @@ -7696,4 +7718,5 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return new SetStaticRouteAnswer(cmd, false, null); } } + } diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java index 1271f4106c2..abb36c36963 100644 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java @@ -38,7 +38,7 @@ import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PublicIpAddress; @@ -58,7 +58,7 @@ import com.cloud.vm.VirtualMachineProfile; public class ElasticLoadBalancerElement extends AdapterBase implements LoadBalancingServiceProvider, IpDeployer { private static final Logger s_logger = Logger.getLogger(ElasticLoadBalancerElement.class); private static final Map> capabilities = setCapabilities(); - @Inject NetworkManager _networkManager; + @Inject NetworkModel _networkManager; @Inject ElasticLoadBalancerManager _lbMgr; @Inject ConfigurationDao _configDao; @Inject NetworkOfferingDao _networkOfferingDao; diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java index e6dc1e8ed6c..e0a211ab1f9 100644 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java @@ -81,6 +81,7 @@ import com.cloud.network.Network; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetworkServiceProvider; @@ -102,8 +103,8 @@ import com.cloud.network.router.VpcVirtualNetworkApplianceManager; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.LoadBalancer; +import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; -import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; @@ -149,6 +150,8 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { @Inject AgentManager _agentMgr; @Inject + NetworkModel _networkModel; + @Inject NetworkManager _networkMgr; @Inject LoadBalancerDao _loadBalancerDao = null; @@ -293,7 +296,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { String protocol = rule.getProtocol(); String algorithm = rule.getAlgorithm(); - String elbIp = _networkMgr.getIp(rule.getSourceIpAddressId()).getAddress() + String elbIp = _networkModel.getIp(rule.getSourceIpAddressId()).getAddress() .addr(); int srcPort = rule.getSourcePortStart(); String uuid = rule.getUuid(); @@ -474,7 +477,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { try { - if (_networkMgr.isNetworkSystem(guestNetwork) || guestNetwork.getGuestType() == Network.GuestType.Shared) { + if (_networkModel.isNetworkSystem(guestNetwork) || guestNetwork.getGuestType() == Network.GuestType.Shared) { owner = _accountService.getSystemAccount(); } @@ -496,8 +499,8 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { s_logger.debug("Creating the ELB vm " + id); } - List offerings = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork); - NetworkOfferingVO controlOffering = offerings.get(0); + List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork); + NetworkOffering controlOffering = offerings.get(0); NetworkVO controlConfig = _networkMgr.setupNetwork(_systemAcct, controlOffering, plan, null, null, false).get(0); List> networks = new ArrayList>(2); @@ -509,7 +512,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { VMTemplateVO template = _templateDao.findSystemVMTemplate(dcId); String typeString = "ElasticLoadBalancerVm"; - Long physicalNetworkId = _networkMgr.getPhysicalNetworkId(guestNetwork); + Long physicalNetworkId = _networkModel.getPhysicalNetworkId(guestNetwork); PhysicalNetworkServiceProvider provider = _physicalProviderDao.findByServiceProvider(physicalNetworkId, typeString); if (provider == null) { throw new CloudRuntimeException("Cannot find service provider " + typeString + " in physical network " + physicalNetworkId); @@ -595,7 +598,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { @DB public PublicIp allocDirectIp(Account account, long guestNetworkId) throws InsufficientAddressCapacityException { - Network frontEndNetwork = _networkMgr.getNetwork(guestNetworkId); + Network frontEndNetwork = _networkModel.getNetwork(guestNetworkId); Transaction txn = Transaction.currentTxn(); txn.start(); @@ -622,7 +625,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { @DB public LoadBalancer handleCreateLoadBalancerRule(CreateLoadBalancerRuleCmd lb, Account account, long networkId) throws InsufficientAddressCapacityException, NetworkRuleConflictException { //this part of code is executed when the LB provider is Elastic Load Balancer vm - if (!_networkMgr.isProviderSupportServiceInNetwork(lb.getNetworkId(), Service.Lb, Provider.ElasticLoadBalancerVm)) { + if (!_networkModel.isProviderSupportServiceInNetwork(lb.getNetworkId(), Service.Lb, Provider.ElasticLoadBalancerVm)) { return null; } @@ -661,7 +664,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { throw new NetworkRuleConflictException("ELB: Found existing load balancers matching requested new LB"); } - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); IPAddressVO ipAddr = _ipAddressDao.findById(ipId); LoadBalancer result = null; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java index 96a7efa9bee..1509936a81d 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -103,9 +104,9 @@ public class AddExternalLoadBalancerCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage()); } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage()); } } } diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java index 7e182890a12..dcfd72f0a29 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java @@ -101,12 +101,12 @@ public class AddF5LoadBalancerCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to add F5 Big IP load balancer due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add F5 Big IP load balancer due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java index b08062ef643..761352aa428 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java @@ -79,12 +79,12 @@ public class ConfigureF5LoadBalancerCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to configure F5 load balancer due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to configure F5 load balancer due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java index 5c85a3aba4f..e13afbf9a85 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java @@ -77,10 +77,10 @@ public class DeleteExternalLoadBalancerCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete external load balancer."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete external load balancer."); } } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Failed to delete external load balancer."); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Failed to delete external load balancer."); } } } diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java index 5e75cf0cfd6..691643d1370 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java @@ -24,6 +24,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -75,12 +76,12 @@ public class DeleteF5LoadBalancerCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete F5 load balancer."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete F5 load balancer."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java index b9200d5a0b9..ca2c2fe2f2d 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java @@ -25,6 +25,7 @@ import javax.inject.Inject; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; @@ -87,9 +88,9 @@ public class ListF5LoadBalancerNetworksCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java index 258fd71e995..270447d0a13 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java @@ -90,9 +90,9 @@ public class ListF5LoadBalancersCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index 177302660b5..36f0dad9aef 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -16,7 +16,6 @@ // under the License. package com.cloud.network.element; -import java.lang.String; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -26,9 +25,9 @@ import java.util.Set; import javax.ejb.Local; import javax.inject.Inject; -import com.cloud.utils.PropertiesUtil; +import org.apache.cloudstack.api.response.ExternalLoadBalancerResponse; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice; import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.AddExternalLoadBalancerCmd; @@ -60,13 +59,12 @@ import com.cloud.network.ExternalLoadBalancerDeviceManager; import com.cloud.network.ExternalLoadBalancerDeviceManagerImpl; import com.cloud.network.ExternalLoadBalancerDeviceVO; import com.cloud.network.ExternalLoadBalancerDeviceVO.LBDeviceState; -import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice; import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkExternalLoadBalancerVO; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetwork; @@ -83,8 +81,6 @@ import com.cloud.network.resource.F5BigIpResource; import com.cloud.network.rules.LbStickinessMethod; import com.cloud.network.rules.LbStickinessMethod.StickinessMethodType; import com.cloud.offering.NetworkOffering; -import com.cloud.resource.ServerResource; -import org.apache.cloudstack.api.response.ExternalLoadBalancerResponse; import com.cloud.utils.NumbersUtil; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.NicProfile; @@ -93,14 +89,13 @@ import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; import com.google.gson.Gson; -@Component -@Local(value = NetworkElement.class) +@Local(value = {NetworkElement.class, LoadBalancingServiceProvider.class, IpDeployer.class}) public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceManagerImpl implements LoadBalancingServiceProvider, IpDeployer, F5ExternalLoadBalancerElementService, ExternalLoadBalancerDeviceManager { private static final Logger s_logger = Logger.getLogger(F5ExternalLoadBalancerElement.class); @Inject - NetworkManager _networkManager; + NetworkModel _networkManager; @Inject ConfigurationManager _configMgr; @Inject @@ -123,7 +118,7 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan ConfigurationDao _configDao; private boolean canHandle(Network config) { - if ((config.getGuestType() != Network.GuestType.Isolated && config.getGuestType() != Network.GuestType.Shared) || config.getTrafficType() != TrafficType.Guest) { + if (config.getGuestType() != Network.GuestType.Isolated || config.getTrafficType() != TrafficType.Guest) { s_logger.trace("Not handling network with Type " + config.getGuestType() + " and traffic type " + config.getTrafficType()); return false; } @@ -133,7 +128,7 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan @Override public boolean implement(Network guestConfig, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws ResourceUnavailableException, ConcurrentOperationException, - InsufficientNetworkCapacityException { + InsufficientNetworkCapacityException { if (!canHandle(guestConfig)) { return false; @@ -148,7 +143,7 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan @Override public boolean prepare(Network config, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, - InsufficientNetworkCapacityException, ResourceUnavailableException { + InsufficientNetworkCapacityException, ResourceUnavailableException { return true; } @@ -213,8 +208,8 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan // Specifies that load balancing rules can only be made with public IPs that aren't source NAT IPs lbCapabilities.put(Capability.LoadBalancingSupportedIps, "additional"); - // Support inline mode with firewall - lbCapabilities.put(Capability.InlineMode, "true"); + // Support inline mode with firewall + lbCapabilities.put(Capability.InlineMode, "true"); LbStickinessMethod method; List methodList = new ArrayList(); @@ -253,7 +248,7 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan @Override public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException, - ResourceUnavailableException { + ResourceUnavailableException { // TODO Auto-generated method stub return true; } @@ -264,9 +259,17 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "f5bigip_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(AddExternalLoadBalancerCmd.class); + cmdList.add(AddF5LoadBalancerCmd.class); + cmdList.add(ConfigureF5LoadBalancerCmd.class); + cmdList.add(DeleteExternalLoadBalancerCmd.class); + cmdList.add(DeleteF5LoadBalancerCmd.class); + cmdList.add(ListExternalLoadBalancersCmd.class); + cmdList.add(ListF5LoadBalancerNetworksCmd.class); + cmdList.add(ListF5LoadBalancersCmd.class); + return cmdList; } @Override @@ -291,7 +294,7 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan pNetwork = physicalNetworks.get(0); String deviceType = NetworkDevice.F5BigIpLoadBalancer.getName(); - lbDeviceVO = addExternalLoadBalancer(pNetwork.getId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(), deviceType, (ServerResource) new F5BigIpResource()); + lbDeviceVO = addExternalLoadBalancer(pNetwork.getId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(), deviceType, new F5BigIpResource()); if (lbDeviceVO != null) { lbHost = _hostDao.findById(lbDeviceVO.getHostId()); @@ -344,7 +347,7 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan throw new InvalidParameterValueException("Invalid F5 load balancer device type"); } - return addExternalLoadBalancer(cmd.getPhysicalNetworkId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(), deviceName, (ServerResource) new F5BigIpResource()); + return addExternalLoadBalancer(cmd.getPhysicalNetworkId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(), deviceName, new F5BigIpResource()); } diff --git a/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java b/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java index c9c3711bfc1..80a7a85dc85 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java +++ b/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java @@ -196,7 +196,7 @@ public class F5BigIpResource implements ServerResource { cmd.setPod(""); cmd.setPrivateIpAddress(_ip); cmd.setStorageIpAddress(""); - cmd.setVersion(""); + cmd.setVersion(F5BigIpResource.class.getPackage().getImplementationVersion()); cmd.setGuid(_guid); return new StartupCommand[]{cmd}; } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java index 0a5b32f1dd6..d2d016950c7 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -102,9 +103,9 @@ public class AddExternalFirewallCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage()); } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage()); } } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java index c75ee178c16..2411f9c2d45 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -103,12 +104,12 @@ public class AddSrxFirewallCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to add SRX firewall due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add SRX firewall due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java index 94f96a694f6..0f2e14cf568 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java @@ -21,6 +21,7 @@ import javax.inject.Inject; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -82,12 +83,12 @@ public class ConfigureSrxFirewallCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to configure SRX firewall device due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to configure SRX firewall device due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java index 3fabd475b5d..a3a512f66e8 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.response.HostResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -78,10 +79,10 @@ public class DeleteExternalFirewallCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete external firewall."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete external firewall."); } } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Failed to delete external firewall."); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Failed to delete external firewall."); } } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java index d1e0f80ca19..ce804a71cd5 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java @@ -21,6 +21,7 @@ import javax.inject.Inject; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -73,12 +74,12 @@ public class DeleteSrxFirewallCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete SRX firewall device"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete SRX firewall device"); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java index ba2b90d02df..72caf09f39c 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java @@ -82,9 +82,9 @@ public class ListSrxFirewallNetworksCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java index 58842aae074..973ad146a33 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java @@ -90,9 +90,9 @@ public class ListSrxFirewallsCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 63781bb2339..d13b95d8c1a 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -16,7 +16,6 @@ // under the License. package com.cloud.network.element; -import java.lang.String; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -26,7 +25,8 @@ import java.util.Set; import javax.ejb.Local; import javax.inject.Inject; -import com.cloud.utils.PropertiesUtil; +import org.apache.cloudstack.api.response.ExternalFirewallResponse; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -60,13 +60,12 @@ import com.cloud.host.dao.HostDetailsDao; import com.cloud.network.ExternalFirewallDeviceManagerImpl; import com.cloud.network.ExternalFirewallDeviceVO; import com.cloud.network.ExternalFirewallDeviceVO.FirewallDeviceState; -import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice; import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkExternalFirewallVO; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.PhysicalNetwork; import com.cloud.network.PhysicalNetworkServiceProvider; @@ -85,8 +84,6 @@ import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.StaticNat; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.dao.NetworkOfferingDao; -import com.cloud.resource.ServerResource; -import org.apache.cloudstack.api.response.ExternalFirewallResponse; import com.cloud.utils.NumbersUtil; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.NicProfile; @@ -95,16 +92,18 @@ import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; @Component -@Local(value = NetworkElement.class) +@Local(value = {NetworkElement.class, FirewallServiceProvider.class, + PortForwardingServiceProvider.class, IpDeployer.class, + SourceNatServiceProvider.class, RemoteAccessVPNServiceProvider.class}) public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceManagerImpl implements SourceNatServiceProvider, FirewallServiceProvider, - PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer, JuniperSRXFirewallElementService, StaticNatServiceProvider { +PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer, JuniperSRXFirewallElementService, StaticNatServiceProvider { private static final Logger s_logger = Logger.getLogger(JuniperSRXExternalFirewallElement.class); private static final Map> capabilities = setCapabilities(); @Inject - NetworkManager _networkManager; + NetworkModel _networkManager; @Inject HostDao _hostDao; @Inject @@ -132,8 +131,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan private boolean canHandle(Network network, Service service) { DataCenter zone = _configMgr.getZone(network.getDataCenterId()); - if ((zone.getNetworkType() == NetworkType.Advanced && !(network.getGuestType() == Network.GuestType.Isolated || network.getGuestType() == Network.GuestType.Shared )) - || (zone.getNetworkType() == NetworkType.Basic && network.getGuestType() != Network.GuestType.Shared)) { + if ((zone.getNetworkType() == NetworkType.Advanced && network.getGuestType() != Network.GuestType.Isolated) || (zone.getNetworkType() == NetworkType.Basic && network.getGuestType() != Network.GuestType.Shared)) { s_logger.trace("Element " + getProvider().getName() + "is not handling network type = " + network.getGuestType()); return false; } @@ -155,7 +153,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan @Override public boolean implement(Network network, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws ResourceUnavailableException, ConcurrentOperationException, - InsufficientNetworkCapacityException { + InsufficientNetworkCapacityException { DataCenter zone = _configMgr.getZone(network.getDataCenterId()); // don't have to implement network is Basic zone @@ -180,7 +178,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan @Override public boolean prepare(Network config, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, - InsufficientNetworkCapacityException, ResourceUnavailableException { + InsufficientNetworkCapacityException, ResourceUnavailableException { return true; } @@ -329,7 +327,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan @Override public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException, - ResourceUnavailableException { + ResourceUnavailableException { // TODO Auto-generated method stub return true; } @@ -361,7 +359,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan pNetwork = physicalNetworks.get(0); String deviceType = NetworkDevice.JuniperSRXFirewall.getName(); - ExternalFirewallDeviceVO fwDeviceVO = addExternalFirewall(pNetwork.getId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(), deviceType, (ServerResource) new JuniperSrxResource()); + ExternalFirewallDeviceVO fwDeviceVO = addExternalFirewall(pNetwork.getId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(), deviceType, new JuniperSrxResource()); if (fwDeviceVO != null) { fwHost = _hostDao.findById(fwDeviceVO.getHostId()); } @@ -401,14 +399,23 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan return firewallHosts; } + @Override public ExternalFirewallResponse createExternalFirewallResponse(Host externalFirewall) { return super.createExternalFirewallResponse(externalFirewall); } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "junipersrx_commands.properties"}); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(AddExternalFirewallCmd.class); + cmdList.add(AddSrxFirewallCmd.class); + cmdList.add(ConfigureSrxFirewallCmd.class); + cmdList.add(DeleteExternalFirewallCmd.class); + cmdList.add(DeleteSrxFirewallCmd.class); + cmdList.add(ListExternalFirewallsCmd.class); + cmdList.add(ListSrxFirewallNetworksCmd.class); + cmdList.add(ListSrxFirewallsCmd.class); + return cmdList; } @Override @@ -418,7 +425,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan throw new InvalidParameterValueException("Invalid SRX firewall device type"); } return addExternalFirewall(cmd.getPhysicalNetworkId(), cmd.getUrl(), cmd.getUsername(), cmd.getPassword(), deviceName, - (ServerResource) new JuniperSrxResource()); + new JuniperSrxResource()); } @Override @@ -563,8 +570,8 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan return true; } - @Override - public boolean applyStaticNats(Network config, List rules) throws ResourceUnavailableException { + @Override + public boolean applyStaticNats(Network config, List rules) throws ResourceUnavailableException { if (!canHandle(config, Service.StaticNat)) { return false; } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java index f823ab8af4f..11ff2960e4b 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java @@ -447,7 +447,7 @@ public class JuniperSrxResource implements ServerResource { cmd.setPod(""); cmd.setPrivateIpAddress(_ip); cmd.setStorageIpAddress(""); - cmd.setVersion(""); + cmd.setVersion(JuniperSrxResource.class.getPackage().getImplementationVersion()); cmd.setGuid(_guid); return new StartupCommand[]{cmd}; } diff --git a/plugins/network-elements/midokura-midonet/src/com/cloud/network/element/MidokuraMidonetElement.java b/plugins/network-elements/midokura-midonet/src/com/cloud/network/element/MidokuraMidonetElement.java index 9954e800ab3..48833b31919 100644 --- a/plugins/network-elements/midokura-midonet/src/com/cloud/network/element/MidokuraMidonetElement.java +++ b/plugins/network-elements/midokura-midonet/src/com/cloud/network/element/MidokuraMidonetElement.java @@ -39,14 +39,10 @@ import org.apache.log4j.Logger; import org.springframework.stereotype.Component; import javax.ejb.Local; +import java.lang.Class; import java.util.Map; import java.util.Set; -/** - * User: tomoe - * Date: 8/8/12 - * Time: 1:38 PM - */ @Component @Local(value = NetworkElement.class) @@ -128,7 +124,7 @@ public class MidokuraMidonetElement extends AdapterBase implements ConnectivityP } @Override - public String getPropertiesFile() { + public List> getCommands() { // TODO: implement this. return null; } diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java index 3289295b13a..356cec53a4a 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java @@ -98,12 +98,12 @@ public class AddNetscalerLoadBalancerCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to add netscaler load balancer due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add netscaler load balancer due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java index 1733993808e..d4d1dd3a2d6 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java @@ -103,12 +103,12 @@ public class ConfigureNetscalerLoadBalancerCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to configure netscaler load balancer due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to configure netscaler load balancer due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java index 30be293e2c4..76f0273aecc 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java @@ -20,6 +20,7 @@ import javax.inject.Inject; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -73,12 +74,12 @@ public class DeleteNetscalerLoadBalancerCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete netscaler load balancer."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete netscaler load balancer."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java index 71c2a785cfe..f182b4e3f1f 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java @@ -22,6 +22,7 @@ import javax.inject.Inject; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; @@ -84,9 +85,9 @@ public class ListNetscalerLoadBalancerNetworksCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java index 7948fcc8db7..566ff7b12ea 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; @@ -92,9 +93,9 @@ public class ListNetscalerLoadBalancersCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index faff153084c..868c56a6af3 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -27,7 +27,8 @@ import java.util.Set; import javax.ejb.Local; import javax.inject.Inject; -import com.cloud.utils.PropertiesUtil; +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -38,8 +39,6 @@ import com.cloud.agent.api.routing.SetStaticNatRulesAnswer; import com.cloud.agent.api.routing.SetStaticNatRulesCommand; import com.cloud.agent.api.to.LoadBalancerTO; import com.cloud.agent.api.to.StaticNatRuleTO; -import org.apache.cloudstack.api.ApiConstants; - import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.AddNetscalerLoadBalancerCmd; import com.cloud.api.commands.ConfigureNetscalerLoadBalancerCmd; @@ -70,7 +69,6 @@ import com.cloud.network.ExternalLoadBalancerDeviceManager; import com.cloud.network.ExternalLoadBalancerDeviceManagerImpl; import com.cloud.network.ExternalLoadBalancerDeviceVO; import com.cloud.network.ExternalLoadBalancerDeviceVO.LBDeviceState; -import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice; import com.cloud.network.IpAddress; import com.cloud.network.NetScalerPodVO; import com.cloud.network.Network; @@ -78,7 +76,7 @@ import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkExternalLoadBalancerVO; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetwork; @@ -114,7 +112,7 @@ import com.cloud.vm.VirtualMachineProfile; import com.google.gson.Gson; @Component -@Local(value = NetworkElement.class) +@Local(value = {NetworkElement.class, StaticNatServiceProvider.class, LoadBalancingServiceProvider.class}) public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl implements LoadBalancingServiceProvider, NetscalerLoadBalancerElementService, ExternalLoadBalancerDeviceManager, IpDeployer, StaticNatServiceProvider { @@ -123,7 +121,7 @@ StaticNatServiceProvider { public static final AutoScaleCounterType AutoScaleCounterNetscaler = new AutoScaleCounterType("netscaler"); @Inject - NetworkManager _networkManager; + NetworkModel _networkManager; @Inject ConfigurationManager _configMgr; @Inject @@ -131,7 +129,7 @@ StaticNatServiceProvider { @Inject AgentManager _agentMgr; @Inject - NetworkManager _networkMgr; + NetworkModel _networkMgr; @Inject HostDao _hostDao; @Inject @@ -152,11 +150,10 @@ StaticNatServiceProvider { NetScalerPodDao _netscalerPodDao; @Inject DataCenterIpAddressDao _privateIpAddressDao; - + private boolean canHandle(Network config, Service service) { DataCenter zone = _dcDao.findById(config.getDataCenterId()); - boolean handleInAdvanceZone = (zone.getNetworkType() == NetworkType.Advanced && - (config.getGuestType() == Network.GuestType.Isolated || config.getGuestType() == Network.GuestType.Shared) && config.getTrafficType() == TrafficType.Guest); + boolean handleInAdvanceZone = (zone.getNetworkType() == NetworkType.Advanced && config.getGuestType() == Network.GuestType.Isolated && config.getTrafficType() == TrafficType.Guest); boolean handleInBasicZone = (zone.getNetworkType() == NetworkType.Basic && config.getGuestType() == Network.GuestType.Shared && config.getTrafficType() == TrafficType.Guest); if (!(handleInAdvanceZone || handleInBasicZone)) { @@ -174,7 +171,7 @@ StaticNatServiceProvider { @Override public boolean implement(Network guestConfig, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws ResourceUnavailableException, ConcurrentOperationException, - InsufficientNetworkCapacityException { + InsufficientNetworkCapacityException { if (!canHandle(guestConfig, Service.Lb)) { return false; @@ -195,7 +192,7 @@ StaticNatServiceProvider { @Override public boolean prepare(Network config, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, - InsufficientNetworkCapacityException, ResourceUnavailableException { + InsufficientNetworkCapacityException, ResourceUnavailableException { return true; } @@ -467,9 +464,14 @@ StaticNatServiceProvider { } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "netscalerloadbalancer_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(AddNetscalerLoadBalancerCmd.class); + cmdList.add(ConfigureNetscalerLoadBalancerCmd.class); + cmdList.add(DeleteNetscalerLoadBalancerCmd.class); + cmdList.add(ListNetscalerLoadBalancerNetworksCmd.class); + cmdList.add(ListNetscalerLoadBalancersCmd.class); + return cmdList; } @Override @@ -550,13 +552,13 @@ StaticNatServiceProvider { response.setProvider(lbDeviceVO.getProviderName()); response.setDeviceState(lbDeviceVO.getState().name()); response.setObjectName("netscalerloadbalancer"); - + List associatedPods = new ArrayList(); List currentPodVOs = _netscalerPodDao.listByNetScalerDeviceId(lbDeviceVO.getId()); if (currentPodVOs != null && currentPodVOs.size() > 0) { - for (NetScalerPodVO nsPodVo: currentPodVOs) { - associatedPods.add(nsPodVo.getPodId()); - } + for (NetScalerPodVO nsPodVo: currentPodVOs) { + associatedPods.add(nsPodVo.getPodId()); + } } response.setAssociatedPods(associatedPods); return response; @@ -585,7 +587,7 @@ StaticNatServiceProvider { @Override public boolean shutdownProviderInstances(PhysicalNetworkServiceProvider provider, ReservationContext context) throws ConcurrentOperationException, - ResourceUnavailableException { + ResourceUnavailableException { // TODO reset the configuration on all of the netscaler devices in this physical network return true; } @@ -614,13 +616,13 @@ StaticNatServiceProvider { // NetScaler can only act as Lb and Static Nat service provider if (services != null && !services.isEmpty() && !netscalerServices.containsAll(services)) { s_logger.warn("NetScaler network element can only support LB and Static NAT services and service combination " - + services + " is not supported."); + + services + " is not supported."); String servicesList = ""; for (Service service : services) { servicesList += service.getName() + " "; } s_logger.warn("NetScaler network element can only support LB and Static NAT services and service combination " - + servicesList + " is not supported."); + + servicesList + " is not supported."); s_logger.warn("NetScaler network element can only support LB and Static NAT services and service combination " + services + " is not supported."); return false; @@ -812,7 +814,7 @@ StaticNatServiceProvider { return lbDeviceVO; } } - } + } } return null; } diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java index afb01353e1e..ca8c8a71c7d 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java @@ -369,7 +369,7 @@ public class NetscalerResource implements ServerResource { cmd.setPod(""); cmd.setPrivateIpAddress(_ip); cmd.setStorageIpAddress(""); - cmd.setVersion(""); + cmd.setVersion(NetscalerResource.class.getPackage().getImplementationVersion()); cmd.setGuid(_guid); return new StartupCommand[]{cmd}; } diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java index 8457b44732b..5b2dacfe00f 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java @@ -106,12 +106,12 @@ public class AddNiciraNvpDeviceCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to add Nicira NVP device due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add Nicira NVP device due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java index 6ba14c09d70..8d21a55a65e 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java @@ -22,6 +22,7 @@ import com.cloud.api.response.NiciraNvpDeviceResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -73,12 +74,12 @@ public class DeleteNiciraNvpDeviceCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete Nicira device."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete Nicira device."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java index 6675385a170..e224cea7598 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java @@ -25,6 +25,7 @@ import com.cloud.api.response.NiciraNvpDeviceResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; @@ -86,9 +87,9 @@ public class ListNiciraNvpDeviceNetworksCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java index 32080fdb32e..81cbb23ff54 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java @@ -22,6 +22,7 @@ import java.util.List; import javax.inject.Inject; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Parameter; @@ -93,9 +94,9 @@ public class ListNiciraNvpDevicesCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java index cf8d43a70bc..2bc7a08ff3b 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java @@ -30,6 +30,7 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.network.ExternalNetworkDeviceManager.NetworkDevice; import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; import com.cloud.agent.AgentManager; import com.cloud.agent.api.ConfigurePortForwardingRulesOnLogicalRouterAnswer; @@ -78,6 +79,7 @@ import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks; import com.cloud.network.Networks.BroadcastDomainType; @@ -107,7 +109,6 @@ import com.cloud.resource.ResourceStateAdapter; import com.cloud.resource.ServerResource; import com.cloud.resource.UnableDeleteHostException; import com.cloud.user.Account; -import com.cloud.utils.PropertiesUtil; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.db.DB; import com.cloud.utils.db.Transaction; @@ -120,7 +121,10 @@ import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.dao.NicDao; -@Local(value = NetworkElement.class) +@Component +@Local(value = {NetworkElement.class, ConnectivityProvider.class, + SourceNatServiceProvider.class, StaticNatServiceProvider.class, + PortForwardingServiceProvider.class, IpDeployer.class} ) public class NiciraNvpElement extends AdapterBase implements ConnectivityProvider, SourceNatServiceProvider, PortForwardingServiceProvider, StaticNatServiceProvider, @@ -155,6 +159,8 @@ NiciraNvpElementService, ResourceStateAdapter, IpDeployer { @Inject NetworkManager _networkManager; @Inject + NetworkModel _networkModel; + @Inject ConfigurationManager _configMgr; @Inject NetworkServiceMapDao _ntwkSrvcDao; @@ -178,7 +184,7 @@ NiciraNvpElementService, ResourceStateAdapter, IpDeployer { return false; } - if (!_networkManager.isProviderForNetwork(getProvider(), + if (!_networkModel.isProviderForNetwork(getProvider(), network.getId())) { s_logger.debug("NiciraNvpElement is not a provider for network " + network.getDisplayText()); @@ -242,58 +248,50 @@ NiciraNvpElementService, ResourceStateAdapter, IpDeployer { * Lock the network as we might need to do multiple operations that * should be done only once. */ - Network lock = _networkDao.acquireInLockTable(network.getId(), - _networkManager.getNetworkLockTimeout()); - if (lock == null) { - throw new ConcurrentOperationException("Unable to lock network " - + network.getId()); - } - try { - // Implement SourceNat immediately as we have al the info already - if (_networkManager.isProviderSupportServiceInNetwork( - network.getId(), Service.SourceNat, Provider.NiciraNvp)) { - s_logger.debug("Apparently we are supposed to provide SourceNat on this network"); +// Network lock = _networkDao.acquireInLockTable(network.getId(), +// _networkModel.getNetworkLockTimeout()); +// if (lock == null) { +// throw new ConcurrentOperationException("Unable to lock network " +// + network.getId()); +// } - PublicIp sourceNatIp = _networkManager - .assignSourceNatIpAddressToGuestNetwork(owner, network); - String publicCidr = sourceNatIp.getAddress().addr() + "/" - + NetUtils.getCidrSize(sourceNatIp.getVlanNetmask()); - String internalCidr = network.getGateway() + "/" - + network.getCidr().split("/")[1]; - long vlanid = (Vlan.UNTAGGED.equals(sourceNatIp.getVlanTag())) ? 0 - : Long.parseLong(sourceNatIp.getVlanTag()); + // Implement SourceNat immediately as we have al the info already + if (_networkModel.isProviderSupportServiceInNetwork( + network.getId(), Service.SourceNat, Provider.NiciraNvp)) { + s_logger.debug("Apparently we are supposed to provide SourceNat on this network"); - CreateLogicalRouterCommand cmd = new CreateLogicalRouterCommand( - niciraNvpHost.getDetail("l3gatewayserviceuuid"), vlanid, - network.getBroadcastUri().getSchemeSpecificPart(), - "router-" + network.getDisplayText(), publicCidr, - sourceNatIp.getGateway(), internalCidr, context - .getDomain().getName() - + "-" - + context.getAccount().getAccountName()); - CreateLogicalRouterAnswer answer = (CreateLogicalRouterAnswer) _agentMgr - .easySend(niciraNvpHost.getId(), cmd); - if (answer.getResult() == false) { - s_logger.error("Failed to create Logical Router for network " - + network.getDisplayText()); - return false; - } + PublicIp sourceNatIp = _networkManager + .assignSourceNatIpAddressToGuestNetwork(owner, network); + String publicCidr = sourceNatIp.getAddress().addr() + "/" + + NetUtils.getCidrSize(sourceNatIp.getVlanNetmask()); + String internalCidr = network.getGateway() + "/" + + network.getCidr().split("/")[1]; + long vlanid = (Vlan.UNTAGGED.equals(sourceNatIp.getVlanTag())) ? 0 + : Long.parseLong(sourceNatIp.getVlanTag()); - // Store the uuid so we can easily find it during cleanup - NiciraNvpRouterMappingVO routermapping = - new NiciraNvpRouterMappingVO(answer.getLogicalRouterUuid(), network.getId()); - _niciraNvpRouterMappingDao.persist(routermapping); - } - } finally { - if (lock != null) { - _networkDao.releaseFromLockTable(lock.getId()); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Lock is released for network id " - + lock.getId() + " as a part of router startup in " - + dest); - } + CreateLogicalRouterCommand cmd = new CreateLogicalRouterCommand( + niciraNvpHost.getDetail("l3gatewayserviceuuid"), vlanid, + network.getBroadcastUri().getSchemeSpecificPart(), + "router-" + network.getDisplayText(), publicCidr, + sourceNatIp.getGateway(), internalCidr, context + .getDomain().getName() + + "-" + + context.getAccount().getAccountName()); + CreateLogicalRouterAnswer answer = (CreateLogicalRouterAnswer) _agentMgr + .easySend(niciraNvpHost.getId(), cmd); + if (answer.getResult() == false) { + s_logger.error("Failed to create Logical Router for network " + + network.getDisplayText()); + return false; } + + // Store the uuid so we can easily find it during cleanup + NiciraNvpRouterMappingVO routermapping = + new NiciraNvpRouterMappingVO(answer.getLogicalRouterUuid(), network.getId()); + _niciraNvpRouterMappingDao.persist(routermapping); } + + return true; } @@ -442,7 +440,7 @@ NiciraNvpElementService, ResourceStateAdapter, IpDeployer { NiciraNvpDeviceVO niciraNvpDevice = devices.get(0); HostVO niciraNvpHost = _hostDao.findById(niciraNvpDevice.getHostId()); - if (_networkManager.isProviderSupportServiceInNetwork(network.getId(), + if (_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.SourceNat, Provider.NiciraNvp)) { s_logger.debug("Apparently we were providing SourceNat on this network"); @@ -541,9 +539,13 @@ NiciraNvpElementService, ResourceStateAdapter, IpDeployer { } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "nicira-nvp_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(AddNiciraNvpDeviceCmd.class); + cmdList.add(DeleteNiciraNvpDeviceCmd.class); + cmdList.add(ListNiciraNvpDeviceNetworksCmd.class); + cmdList.add(ListNiciraNvpDevicesCmd.class); + return cmdList; } @Override @@ -888,7 +890,7 @@ NiciraNvpElementService, ResourceStateAdapter, IpDeployer { List staticNatRules = new ArrayList(); for (StaticNat rule : rules) { - IpAddress sourceIp = _networkManager.getIp(rule.getSourceIpAddressId()); + IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId()); // Force the nat rule into the StaticNatRuleTO, no use making a new TO object // we only need the source and destination ip. Unfortunately no mention if a rule // is new. @@ -936,7 +938,7 @@ NiciraNvpElementService, ResourceStateAdapter, IpDeployer { List portForwardingRules = new ArrayList(); for (PortForwardingRule rule : rules) { - IpAddress sourceIp = _networkManager.getIp(rule.getSourceIpAddressId()); + IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId()); Vlan vlan = _vlanDao.findById(sourceIp.getVlanId()); PortForwardingRuleTO ruleTO = new PortForwardingRuleTO(rule, vlan.getVlanTag(), sourceIp.getAddress().addr()); portForwardingRules.add(ruleTO); diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java index cdf8edfbfb5..090e5e3b354 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java @@ -42,7 +42,7 @@ import com.cloud.host.dao.HostDao; import com.cloud.host.dao.HostDetailsDao; import com.cloud.network.Network; import com.cloud.network.Network.Service; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkVO; import com.cloud.network.Network.GuestType; @@ -69,10 +69,9 @@ import com.cloud.vm.VirtualMachineProfile; public class NiciraNvpGuestNetworkGuru extends GuestNetworkGuru { private static final Logger s_logger = Logger.getLogger(NiciraNvpGuestNetworkGuru.class); + @Inject - NetworkManager _externalNetworkManager; - @Inject - NetworkManager _networkMgr; + NetworkModel _networkModel; @Inject NetworkDao _networkDao; @Inject @@ -152,7 +151,7 @@ public class NiciraNvpGuestNetworkGuru extends GuestNetworkGuru { long dcId = dest.getDataCenter().getId(); //get physical network id - long physicalNetworkId = _networkMgr.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); + long physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); NetworkVO implemented = new NetworkVO(network.getTrafficType(), network.getMode(), network.getBroadcastDomainType(), network.getNetworkOfferingId(), State.Allocated, network.getDataCenterId(), physicalNetworkId); diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java index 12ed72a1fd5..027f451b154 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java @@ -166,7 +166,7 @@ public class NiciraNvpResource implements ServerResource { sc.setPod(""); sc.setPrivateIpAddress(""); sc.setStorageIpAddress(""); - sc.setVersion(""); + sc.setVersion(NiciraNvpResource.class.getPackage().getImplementationVersion()); return new StartupCommand[] { sc }; } diff --git a/plugins/network-elements/nicira-nvp/test/com/cloud/network/element/NiciraNvpElementTest.java b/plugins/network-elements/nicira-nvp/test/com/cloud/network/element/NiciraNvpElementTest.java index acfd3bcdb9e..09d50a33a64 100644 --- a/plugins/network-elements/nicira-nvp/test/com/cloud/network/element/NiciraNvpElementTest.java +++ b/plugins/network-elements/nicira-nvp/test/com/cloud/network/element/NiciraNvpElementTest.java @@ -33,6 +33,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.NetworkServiceMapDao; @@ -48,6 +49,7 @@ public class NiciraNvpElementTest { NiciraNvpElement _element = new NiciraNvpElement(); NetworkManager _networkManager = mock(NetworkManager.class); + NetworkModel _networkModel = mock(NetworkModel.class); NetworkServiceMapDao _ntwkSrvcDao = mock (NetworkServiceMapDao.class); @Before @@ -55,9 +57,10 @@ public class NiciraNvpElementTest { _element._resourceMgr = mock(ResourceManager.class); _element._networkManager = _networkManager; _element._ntwkSrvcDao = _ntwkSrvcDao; + _element._networkModel = _networkModel; // Standard responses - when(_networkManager.isProviderForNetwork(Provider.NiciraNvp, 42L)).thenReturn(true); + when(_networkModel.isProviderForNetwork(Provider.NiciraNvp, 42L)).thenReturn(true); _element.configure("NiciraNvpTestElement", Collections. emptyMap()); } @@ -81,12 +84,12 @@ public class NiciraNvpElementTest { // No nvp provider in the network assertFalse(_element.canHandle(net, Service.Connectivity)); - when(_networkManager.isProviderForNetwork(Provider.NiciraNvp, 42L)).thenReturn(false); + when(_networkModel.isProviderForNetwork(Provider.NiciraNvp, 42L)).thenReturn(false); when(_ntwkSrvcDao.canProviderSupportServiceInNetwork(42L, Service.Connectivity, Provider.NiciraNvp)).thenReturn(true); // NVP provider does not provide Connectivity for this network assertFalse(_element.canHandle(net, Service.Connectivity)); - when(_networkManager.isProviderForNetwork(Provider.NiciraNvp, 42L)).thenReturn(true); + when(_networkModel.isProviderForNetwork(Provider.NiciraNvp, 42L)).thenReturn(true); // Only service Connectivity is supported assertFalse(_element.canHandle(net, Service.Dhcp)); diff --git a/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java b/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java index e37b2f42105..124e28f496a 100644 --- a/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java +++ b/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java @@ -44,6 +44,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Service; import com.cloud.network.Network.State; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.BroadcastDomainType; @@ -67,6 +68,8 @@ public class NiciraNvpGuestNetworkGuruTest { NetworkOfferingServiceMapDao nosd = mock(NetworkOfferingServiceMapDao.class); AgentManager agentmgr = mock (AgentManager.class); NetworkManager netmgr = mock (NetworkManager.class); + NetworkModel netmodel = mock (NetworkModel.class); + HostDao hostdao = mock (HostDao.class); NetworkDao netdao = mock(NetworkDao.class); NiciraNvpGuestNetworkGuru guru; @@ -80,7 +83,7 @@ public class NiciraNvpGuestNetworkGuruTest { guru._niciraNvpDao = nvpdao; guru._dcDao = dcdao; guru._ntwkOfferingSrvcDao = nosd; - guru._networkMgr = netmgr; + guru._networkModel = netmodel; guru._hostDao = hostdao; guru._agentMgr = agentmgr; guru._networkDao = netdao; @@ -261,7 +264,7 @@ public class NiciraNvpGuestNetworkGuruTest { when(niciraHost.getDetail("transportzoneisotype")).thenReturn("stt"); when(niciraHost.getId()).thenReturn(42L); - when(netmgr.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); + when(netmodel.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); Domain dom = mock(Domain.class); when(dom.getName()).thenReturn("domain"); Account acc = mock(Account.class); @@ -318,7 +321,7 @@ public class NiciraNvpGuestNetworkGuruTest { when(niciraHost.getDetail("transportzoneisotype")).thenReturn("stt"); when(niciraHost.getId()).thenReturn(42L); - when(netmgr.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); + when(netmodel.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); Domain dom = mock(Domain.class); when(dom.getName()).thenReturn("domain"); Account acc = mock(Account.class); @@ -374,7 +377,7 @@ public class NiciraNvpGuestNetworkGuruTest { when(niciraHost.getDetail("transportzoneisotype")).thenReturn("stt"); when(niciraHost.getId()).thenReturn(42L); - when(netmgr.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); + when(netmodel.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); Domain dom = mock(Domain.class); when(dom.getName()).thenReturn("domain"); Account acc = mock(Account.class); @@ -432,7 +435,7 @@ public class NiciraNvpGuestNetworkGuruTest { when(niciraHost.getDetail("transportzoneisotype")).thenReturn("stt"); when(niciraHost.getId()).thenReturn(42L); - when(netmgr.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); + when(netmodel.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); Domain dom = mock(Domain.class); when(dom.getName()).thenReturn("domain"); Account acc = mock(Account.class); diff --git a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java index ebae66061b3..40be5ff7b45 100644 --- a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java +++ b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java @@ -40,7 +40,7 @@ import com.cloud.vm.ReservationContext; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; -@Local(value = NetworkElement.class) +@Local(value = {NetworkElement.class}) public class OvsElement extends AdapterBase implements NetworkElement { @Inject OvsTunnelManager _ovsTunnelMgr; diff --git a/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java b/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java index 4591d9e6920..91efa751308 100644 --- a/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java +++ b/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java @@ -20,6 +20,7 @@ import javax.ejb.Local; import javax.inject.Inject; import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; @@ -30,31 +31,31 @@ import com.cloud.event.EventUtils; import com.cloud.event.EventVO; import com.cloud.exception.InsufficientVirtualNetworkCapcityException; import com.cloud.network.Network; -import com.cloud.network.NetworkManager; +import com.cloud.network.Network.GuestType; +import com.cloud.network.Network.State; import com.cloud.network.NetworkVO; +import com.cloud.network.Networks.BroadcastDomainType; +import com.cloud.network.PhysicalNetwork; +import com.cloud.network.PhysicalNetwork.IsolationMethod; import com.cloud.network.ovs.OvsTunnelManager; import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.vm.ReservationContext; -import com.cloud.network.Networks.BroadcastDomainType; -import com.cloud.network.Network.GuestType; -import com.cloud.network.Network.State; -import com.cloud.network.PhysicalNetwork; -import com.cloud.network.PhysicalNetwork.IsolationMethod; +@Component @Local(value=NetworkGuru.class) public class OvsGuestNetworkGuru extends GuestNetworkGuru { - private static final Logger s_logger = Logger.getLogger(OvsGuestNetworkGuru.class); - - @Inject NetworkManager _externalNetworkManager; - @Inject OvsTunnelManager _ovsTunnelMgr; + private static final Logger s_logger = Logger.getLogger(OvsGuestNetworkGuru.class); + + @Inject OvsTunnelManager _ovsTunnelMgr; OvsGuestNetworkGuru() { super(); _isolationMethods = new IsolationMethod[] { IsolationMethod.GRE, IsolationMethod.L3, IsolationMethod.VLAN }; } - + + @Override protected boolean canHandle(NetworkOffering offering, final NetworkType networkType, final PhysicalNetwork physicalNetwork) { // This guru handles only Guest Isolated network that supports Source @@ -71,26 +72,27 @@ public class OvsGuestNetworkGuru extends GuestNetworkGuru { return false; } } - - @Override + + @Override public Network design(NetworkOffering offering, DeploymentPlan plan, Network userSpecified, Account owner) { - - if (!_ovsTunnelMgr.isOvsTunnelEnabled()) { - return null; - } - + + if (!_ovsTunnelMgr.isOvsTunnelEnabled()) { + return null; + } + NetworkVO config = (NetworkVO) super.design(offering, plan, userSpecified, owner); if (config == null) { - return null; + return null; } - + config.setBroadcastDomainType(BroadcastDomainType.Vswitch); - + return config; - } - + } + + @Override protected void allocateVnet(Network network, NetworkVO implemented, long dcId, - long physicalNetworkId, String reservationId) throws InsufficientVirtualNetworkCapcityException { + long physicalNetworkId, String reservationId) throws InsufficientVirtualNetworkCapcityException { if (network.getBroadcastUri() == null) { String vnet = _dcDao.allocateVnet(dcId, physicalNetworkId, network.getAccountId(), reservationId); if (vnet == null) { @@ -102,15 +104,15 @@ public class OvsGuestNetworkGuru extends GuestNetworkGuru { implemented.setBroadcastUri(network.getBroadcastUri()); } } - - @Override - public Network implement(Network config, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapcityException { - assert (config.getState() == State.Implementing) : "Why are we implementing " + config; - if (!_ovsTunnelMgr.isOvsTunnelEnabled()) { - return null; - } - NetworkVO implemented = (NetworkVO)super.implement(config, offering, dest, context); - return implemented; - } - + + @Override + public Network implement(Network config, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapcityException { + assert (config.getState() == State.Implementing) : "Why are we implementing " + config; + if (!_ovsTunnelMgr.isOvsTunnelEnabled()) { + return null; + } + NetworkVO implemented = (NetworkVO)super.implement(config, offering, dest, context); + return implemented; + } + } diff --git a/pom.xml b/pom.xml index f8a099aa188..2caf5f072f7 100644 --- a/pom.xml +++ b/pom.xml @@ -374,8 +374,6 @@ dist/console-proxy/js/jquery.js scripts/vm/systemvm/id_rsa.cloud tools/devcloud/basebuild/puppet-devcloudinitial/files/network.conf - tools/devcloud/devcloud.cfg - tools/devcloud-kvm/devcloud-kvm.cfg ui/lib/flot/jquery.colorhelpers.js ui/lib/flot/jquery.flot.crosshair.js ui/lib/flot/jquery.flot.fillbetween.js diff --git a/python/lib/cloudutils/utilities.py b/python/lib/cloudutils/utilities.py index adf81fcbd4c..c9d1e339f72 100755 --- a/python/lib/cloudutils/utilities.py +++ b/python/lib/cloudutils/utilities.py @@ -96,6 +96,10 @@ def writeProgressBar(msg, result): output = "[%-6s]\n"%"Failed" sys.stdout.write(output) sys.stdout.flush() + +class UnknownSystemException(Exception): + "This Excption is raised if the current operating enviornment is unknown" + pass class Distribution: def __init__(self): @@ -106,7 +110,7 @@ class Distribution: self.distro = "Fedora" elif os.path.exists("/etc/redhat-release"): version = file("/etc/redhat-release").readline() - if version.find("Red Hat Enterprise Linux Server release 6") != -1 or version.find("Scientific Linux release 6") != -1 or version.find("CentOS Linux release 6") != -1 or version.find("CentOS release 6.2") or version.find("CentOS release 6.3") != -1: + if version.find("Red Hat Enterprise Linux Server release 6") != -1 or version.find("Scientific Linux release 6") != -1 or version.find("CentOS Linux release 6") != -1 or version.find("CentOS release 6.2") != -1 or version.find("CentOS release 6.3") != -1: self.distro = "RHEL6" elif version.find("CentOS release") != -1: self.distro = "CentOS" @@ -120,7 +124,7 @@ class Distribution: self.arch = bash("uname -m").getStdout() else: - self.distro = "Unknown" + raise UnknownSystemException def getVersion(self): return self.distro diff --git a/scripts/network/exdhcp/prepare_dhcpd.sh b/scripts/network/exdhcp/prepare_dhcpd.sh old mode 100644 new mode 100755 diff --git a/scripts/network/exdhcp/prepare_dnsmasq.sh b/scripts/network/exdhcp/prepare_dnsmasq.sh old mode 100644 new mode 100755 diff --git a/scripts/storage/qcow2/get_domr_kernel.sh b/scripts/storage/qcow2/get_domr_kernel.sh old mode 100644 new mode 100755 diff --git a/scripts/storage/qcow2/managevolume.sh b/scripts/storage/qcow2/managevolume.sh old mode 100644 new mode 100755 diff --git a/scripts/storage/qcow2/modifyvlan.sh b/scripts/storage/qcow2/modifyvlan.sh old mode 100644 new mode 100755 diff --git a/scripts/storage/qcow2/resizevolume.sh b/scripts/storage/qcow2/resizevolume.sh new file mode 100755 index 00000000000..2de1f9ec5ca --- /dev/null +++ b/scripts/storage/qcow2/resizevolume.sh @@ -0,0 +1,253 @@ +#!/usr/bin/env bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + + + +# resizevolume.sh -- resize a volume + +usage() { + printf "Usage: %s: -c -s -p -v -t -r \n" $(basename $0) >&2 +} + +getdevmappername() { + local path=$1 + local devmappername=`readlink -f $path |cut -d/ -f3` + if [[ $devmappername =~ "dm-" ]] + then + dmname=$devmappername + return 0 + else + return 1; + fi +} + +getdevmappersize() { + local dm=$1 + if [ ! -e "/sys/block/${dm}/size" ] + then + log "unable to find ${dm} in /sys/block" 1 + exit 1 + fi + actualsize=$((`cat /sys/block/${dm}/size`*512)); + + if [[ -z "$actualsize" ]] + then + log "unable to find actual size of ${dm}" 1 + exit 1 + fi + return 0 +} + +# log "message" 1 <-- prints to stdout as well as log, to pass error up to cloudstack +# log "message" prints only to log file +# variable shouldwelog controls whether we print to log file +log() { + local d=`date` + local msg=${1} + local stdout=${2} + + if [ ! -z "$stdout" ] + then + echo $1 + fi + + if [ $shouldwelog -eq 1 ] + then + echo "$d - $1" >> /var/log/cloud/agent/resizevolume.log + fi +} + +failshrink() { + # if this is a shrink operation, fail if commands will shrink the volume and we haven't signed of on shrinking + if [ $actualsize -gt $newsize ] + then + if [ "$shrink" == "false" ] + then + log "result would shrink the volume from $actualsize to $newsize, but confirmation to shrink wasn't passed. Shrink='$shrink'" 1 + exit 1 + fi + fi +} + +notifyqemu() { + #move this back into cloudstack libvirt calls once the libvirt java bindings support block resize + #we try to inform hypervisor of new size, but don't fail if we can't + if `virsh help 2>/dev/null | grep -q blockresize` + then + if `virsh domstate $vmname >/dev/null 2>&1` + then + sizeinkb=$(($newsize/1024)) + virsh blockresize --domain $vmname --path $path --size $sizeinkb >/dev/null 2>&1 + retval=$? + if [ -z $retval ] || [ $retval -ne 0 ] + then + log "failed to live resize $path to size of $sizeinkb kb" 1 + else + liveresize='true' + fi + fi + fi +} + +resizelvm() { + local dmname='' + local actualsize='' + local liveresize='false' + + ##### sanity checks ##### + if ! `lvresize --version > /dev/null 2>&1` + then + log "unable to resolve executable 'lvresize'" 1 + exit 1 + fi + + if ! `virsh --version > /dev/null 2>&1` + then + log "unable to resolve executable 'virsh'" 1 + exit 1 + fi + ##### end sanity ##### + + if ! getdevmappername $path + then + log "unable to resolve a device mapper dev from $path" 1 + exit 1 + fi + + getdevmappersize $dmname + + if [ $actualsize -ne $currentsize ] + then + log "disk isn't the size we think it is: cloudstack said $currentsize, disk said $actualsize." + fi + + # if this is a shrink operation, fail if commands will shrink the volume and we haven't signed of on shrinking + failshrink + + output=`lvresize -f -L ${newsize}B $path 2>&1` + retval=$? + + if [ -z $retval ] || [ $retval -ne 0 ] + then + log "lvresize failed: $output " 1 + exit 1 + fi + + #move this back into cloudstack libvirt calls once the libvirt java bindings support block resize + #we try to inform hypervisor of new size, but don't fail if we can't + notifyqemu + + log "performed successful resize - dm:$dmname currentsize:$currentsize newsize:$newsize path:$path type:$ptype vmname:$vmname live:$liveresize shrink:$shrink" +} + +resizeqcow2() { + + ##### sanity checks ##### + if [ ! -e "$path" ] + then + log "unable to find file $path" 1 + exit 1 + fi + + if ! `qemu-img info /dev/null > /dev/null 2>&1` + then + log "unable to resolve executable 'qemu-img'" 1 + exit 1 + fi + + if ! `virsh --version > /dev/null 2>&1` + then + log "unable to resolve executable 'virsh'" 1 + exit 1 + fi + ##### end sanity ##### + + $actualsize=`qemu-img info $path | grep "virtual size" | sed -re 's/^.*\(([0-9]+).*$/\1/g'` + + if [ $actualsize -ne $currentsize ] + then + log "disk isn't the size we think it is: cloudstack said $currentsize, disk said $actualsize." + fi + + # if this is a shrink operation, fail if commands will shrink the volume and we haven't signed of on shrinking + failshrink + + output=`qemu-img resize $path $newsize 2>&1` + retval=$? + + if [ -z $retval ] || [ $retval -ne 0 ] + then + log "qemu-img resize failed: $output" 1 + exit 1 + fi + + #move this back into cloudstack libvirt calls once the libvirt java bindings support block resize + #we try to inform hypervisor of new size, but don't fail if we can't + notifyqemu + + log "performed successful resize - currentsize:$currentsize newsize:$newsize path:$path type:$ptype vmname:$vmname live:$liveresize shrink:$shrink" +} + +sflag= +cflag= +pflag= +vflag= +tflag= +rflag= + +while getopts 'c:s:v:p:t:r:' OPTION +do + case $OPTION in + s) sflag=1 + newsize="$OPTARG" + ;; + c) cflag=1 + currentsize="$OPTARG" + ;; + v) vflag=1 + vmname="$OPTARG" + ;; + p) dflag=1 + path="$OPTARG" + ;; + t) tflag=1 + ptype="$OPTARG" + ;; + r) rflag=1 + shrink="$OPTARG" + ;; + ?) usage + exit 2 + ;; + esac +done + +shouldwelog=1 #set this to 1 while debugging to get output in /var/log/cloud/agent/resizevolume.log + +if [ "$ptype" == "CLVM" ] +then + resizelvm +elif [ "$ptype" == "QCOW2" ] +then + resizeqcow2 +else + echo "unsupported type $ptype" + exit 1; +fi + +exit 0 diff --git a/scripts/util/prepare_linmin.sh b/scripts/util/prepare_linmin.sh old mode 100644 new mode 100755 diff --git a/scripts/vm/hypervisor/xenserver/cloud-propagate-vlan.sh b/scripts/vm/hypervisor/xenserver/cloud-propagate-vlan.sh old mode 100644 new mode 100755 diff --git a/scripts/vm/hypervisor/xenserver/xcposs/copy_vhd_from_secondarystorage.sh b/scripts/vm/hypervisor/xenserver/xcposs/copy_vhd_from_secondarystorage.sh old mode 100644 new mode 100755 diff --git a/scripts/vm/hypervisor/xenserver/xcposs/copy_vhd_to_secondarystorage.sh b/scripts/vm/hypervisor/xenserver/xcposs/copy_vhd_to_secondarystorage.sh old mode 100644 new mode 100755 diff --git a/scripts/vm/hypervisor/xenserver/xcposs/create_privatetemplate_from_snapshot.sh b/scripts/vm/hypervisor/xenserver/xcposs/create_privatetemplate_from_snapshot.sh old mode 100644 new mode 100755 diff --git a/server/src/com/cloud/acl/DomainChecker.java b/server/src/com/cloud/acl/DomainChecker.java index 6166c1155ff..c778c501b82 100755 --- a/server/src/com/cloud/acl/DomainChecker.java +++ b/server/src/com/cloud/acl/DomainChecker.java @@ -29,7 +29,7 @@ import com.cloud.domain.Domain; import com.cloud.domain.dao.DomainDao; import com.cloud.exception.PermissionDeniedException; import com.cloud.network.Network; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.offering.DiskOffering; import com.cloud.offering.ServiceOffering; import com.cloud.projects.ProjectManager; @@ -46,18 +46,12 @@ import com.cloud.utils.component.AdapterBase; @Local(value = SecurityChecker.class) public class DomainChecker extends AdapterBase implements SecurityChecker { - @Inject - DomainDao _domainDao; - @Inject - AccountDao _accountDao; - @Inject - LaunchPermissionDao _launchPermissionDao; - @Inject - ProjectManager _projectMgr; - @Inject - ProjectAccountDao _projecAccountDao; - @Inject - NetworkManager _networkMgr; + @Inject DomainDao _domainDao; + @Inject AccountDao _accountDao; + @Inject LaunchPermissionDao _launchPermissionDao; + @Inject ProjectManager _projectMgr; + @Inject ProjectAccountDao _projecAccountDao; + @Inject NetworkModel _networkMgr; protected DomainChecker() { super(); diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index 77f131ad222..26370d75bff 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -28,6 +28,8 @@ import java.util.Random; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; @@ -95,6 +97,7 @@ import com.cloud.resource.Discoverer; import com.cloud.resource.ResourceManager; import com.cloud.resource.ResourceState; import com.cloud.resource.ServerResource; +import com.cloud.server.ManagementService; import com.cloud.storage.StorageManager; import com.cloud.storage.StorageService; import com.cloud.storage.dao.StoragePoolDao; @@ -220,6 +223,7 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { protected ExecutorService _executor; protected ThreadPoolExecutor _connectExecutor; + protected ScheduledExecutorService _directAgentExecutor; protected StateMachine2 _statusStateMachine = Status.getStateMachine(); @@ -276,8 +280,13 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { _connectExecutor.allowCoreThreadTimeOut(true); _connection = new NioServer("AgentManager", _port, workers + 10, this); - s_logger.info("Listening on " + _port + " with " + workers + " workers"); + + value = configs.get(Config.DirectAgentPoolSize.key()); + int size = NumbersUtil.parseInt(value, 500); + _directAgentExecutor = new ScheduledThreadPoolExecutor(size, new NamedThreadFactory("DirectAgent")); + s_logger.debug("Created DirectAgentAttache pool with size: " + size); + return true; } @@ -902,10 +911,16 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { s_logger.info("Investigating why host " + hostId + " has disconnected with event " + event); final Status determinedState = investigate(attache); + // if state cannot be determined do nothing and bail out + if (determinedState == null) { + s_logger.warn("Agent state cannot be determined, do nothing"); + return false; + } + final Status currentStatus = host.getStatus(); s_logger.info("The state determined is " + determinedState); - if (determinedState == null || determinedState == Status.Down) { + if (determinedState == Status.Down) { s_logger.error("Host is down: " + host.getId() + "-" + host.getName() + ". Starting HA on the VMs"); event = Status.Event.HostDown; } else if (determinedState == Status.Up) { @@ -1511,6 +1526,8 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { } } - + public ScheduledExecutorService getDirectAgentPool() { + return _directAgentExecutor; + } } diff --git a/server/src/com/cloud/agent/manager/DirectAgentAttache.java b/server/src/com/cloud/agent/manager/DirectAgentAttache.java index 848c7e6c624..9b7d69f1aba 100755 --- a/server/src/com/cloud/agent/manager/DirectAgentAttache.java +++ b/server/src/com/cloud/agent/manager/DirectAgentAttache.java @@ -18,14 +18,11 @@ package com.cloud.agent.manager; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.apache.log4j.Logger; -import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; import com.cloud.agent.api.CronCommand; @@ -37,13 +34,11 @@ import com.cloud.exception.AgentUnavailableException; import com.cloud.host.Status; import com.cloud.host.Status.Event; import com.cloud.resource.ServerResource; -import com.cloud.utils.concurrency.NamedThreadFactory; public class DirectAgentAttache extends AgentAttache { private final static Logger s_logger = Logger.getLogger(DirectAgentAttache.class); ServerResource _resource; - static ScheduledExecutorService s_executor = new ScheduledThreadPoolExecutor(500, new NamedThreadFactory("DirectAgent")); List> _futures = new ArrayList>(); AgentManagerImpl _mgr; long _seq = 0; @@ -94,15 +89,15 @@ public class DirectAgentAttache extends AgentAttache { if (answers != null && answers[0] instanceof StartupAnswer) { StartupAnswer startup = (StartupAnswer)answers[0]; int interval = startup.getPingInterval(); - _futures.add(s_executor.scheduleAtFixedRate(new PingTask(), interval, interval, TimeUnit.SECONDS)); + _futures.add(_agentMgr.getDirectAgentPool().scheduleAtFixedRate(new PingTask(), interval, interval, TimeUnit.SECONDS)); } } else { Command[] cmds = req.getCommands(); if (cmds.length > 0 && !(cmds[0] instanceof CronCommand)) { - s_executor.execute(new Task(req)); + _agentMgr.getDirectAgentPool().execute(new Task(req)); } else { CronCommand cmd = (CronCommand)cmds[0]; - _futures.add(s_executor.scheduleAtFixedRate(new Task(req), cmd.getInterval(), cmd.getInterval(), TimeUnit.SECONDS)); + _futures.add(_agentMgr.getDirectAgentPool().scheduleAtFixedRate(new Task(req), cmd.getInterval(), cmd.getInterval(), TimeUnit.SECONDS)); } } } @@ -113,7 +108,7 @@ public class DirectAgentAttache extends AgentAttache { StartupAnswer startup = (StartupAnswer)answers[0]; int interval = startup.getPingInterval(); s_logger.info("StartupAnswer received " + startup.getHostId() + " Interval = " + interval ); - _futures.add(s_executor.scheduleAtFixedRate(new PingTask(), interval, interval, TimeUnit.SECONDS)); + _futures.add(_agentMgr.getDirectAgentPool().scheduleAtFixedRate(new PingTask(), interval, interval, TimeUnit.SECONDS)); } } diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index af061b11cff..64effbe8cae 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -115,6 +115,7 @@ import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkDomainVO; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkRuleConfigVO; import com.cloud.network.NetworkVO; @@ -254,103 +255,105 @@ import com.cloud.vm.dao.VMInstanceDao; @Component public class ApiDBUtils { private static ManagementServer _ms; - @Inject static AsyncJobManager _asyncMgr; - @Inject static SecurityGroupManager _securityGroupMgr; - @Inject static StorageManager _storageMgr; - @Inject static UserVmManager _userVmMgr; - @Inject static NetworkManager _networkMgr; - @Inject static StatsCollector _statsCollector; + static AsyncJobManager _asyncMgr; + static SecurityGroupManager _securityGroupMgr; + static StorageManager _storageMgr; + static UserVmManager _userVmMgr; + static NetworkModel _networkModel; + static NetworkManager _networkMgr; + static StatsCollector _statsCollector; - @Inject static AccountDao _accountDao; - @Inject static AccountVlanMapDao _accountVlanMapDao; - @Inject static ClusterDao _clusterDao; - @Inject static CapacityDao _capacityDao; - @Inject static DiskOfferingDao _diskOfferingDao; - @Inject static DomainDao _domainDao; - @Inject static DomainRouterDao _domainRouterDao; - @Inject static DomainRouterJoinDao _domainRouterJoinDao; - @Inject static GuestOSDao _guestOSDao; - @Inject static GuestOSCategoryDao _guestOSCategoryDao; - @Inject static HostDao _hostDao; - @Inject static IPAddressDao _ipAddressDao; - @Inject static LoadBalancerDao _loadBalancerDao; - @Inject static SecurityGroupDao _securityGroupDao; - @Inject static SecurityGroupJoinDao _securityGroupJoinDao; - @Inject static NetworkRuleConfigDao _networkRuleConfigDao; - @Inject static HostPodDao _podDao; - @Inject static ServiceOfferingDao _serviceOfferingDao; - @Inject static SnapshotDao _snapshotDao; - @Inject static StoragePoolDao _storagePoolDao; - @Inject static VMTemplateDao _templateDao; - @Inject static VMTemplateDetailsDao _templateDetailsDao; - @Inject static VMTemplateHostDao _templateHostDao; - @Inject static VMTemplateSwiftDao _templateSwiftDao; - @Inject static VMTemplateS3Dao _templateS3Dao; - @Inject static UploadDao _uploadDao; - @Inject static UserDao _userDao; - @Inject static UserStatisticsDao _userStatsDao; - @Inject static UserVmDao _userVmDao; - @Inject static UserVmJoinDao _userVmJoinDao; - @Inject static VlanDao _vlanDao; - @Inject static VolumeDao _volumeDao; - @Inject static Site2SiteVpnGatewayDao _site2SiteVpnGatewayDao; - @Inject static Site2SiteCustomerGatewayDao _site2SiteCustomerGatewayDao; - @Inject static VolumeHostDao _volumeHostDao; - @Inject static DataCenterDao _zoneDao; - @Inject static NetworkOfferingDao _networkOfferingDao; - @Inject static NetworkDao _networkDao; - @Inject static PhysicalNetworkDao _physicalNetworkDao; - @Inject static ConfigurationService _configMgr; - @Inject static ConfigurationDao _configDao; - @Inject static ConsoleProxyDao _consoleProxyDao; - @Inject static FirewallRulesCidrsDao _firewallCidrsDao; - @Inject static VMInstanceDao _vmDao; - @Inject static ResourceLimitService _resourceLimitMgr; - @Inject static ProjectService _projectMgr; - @Inject static ResourceManager _resourceMgr; - @Inject static AccountDetailsDao _accountDetailsDao; - @Inject static NetworkDomainDao _networkDomainDao; - @Inject static HighAvailabilityManager _haMgr; - @Inject static VpcManager _vpcMgr; - @Inject static TaggedResourceService _taggedResourceService; - @Inject static UserVmDetailsDao _userVmDetailsDao; - @Inject static SSHKeyPairDao _sshKeyPairDao; + static AccountDao _accountDao; + static AccountVlanMapDao _accountVlanMapDao; + static ClusterDao _clusterDao; + static CapacityDao _capacityDao; + static DiskOfferingDao _diskOfferingDao; + static DomainDao _domainDao; + static DomainRouterDao _domainRouterDao; + static DomainRouterJoinDao _domainRouterJoinDao; + static GuestOSDao _guestOSDao; + static GuestOSCategoryDao _guestOSCategoryDao; + static HostDao _hostDao; + static IPAddressDao _ipAddressDao; + static LoadBalancerDao _loadBalancerDao; + static SecurityGroupDao _securityGroupDao; + static SecurityGroupJoinDao _securityGroupJoinDao; + static NetworkRuleConfigDao _networkRuleConfigDao; + static HostPodDao _podDao; + static ServiceOfferingDao _serviceOfferingDao; + static SnapshotDao _snapshotDao; + static StoragePoolDao _storagePoolDao; + static VMTemplateDao _templateDao; + static VMTemplateDetailsDao _templateDetailsDao; + static VMTemplateHostDao _templateHostDao; + static VMTemplateSwiftDao _templateSwiftDao; + static VMTemplateS3Dao _templateS3Dao; + static UploadDao _uploadDao; + static UserDao _userDao; + static UserStatisticsDao _userStatsDao; + static UserVmDao _userVmDao; + static UserVmJoinDao _userVmJoinDao; + static VlanDao _vlanDao; + static VolumeDao _volumeDao; + static Site2SiteVpnGatewayDao _site2SiteVpnGatewayDao; + static Site2SiteCustomerGatewayDao _site2SiteCustomerGatewayDao; + static VolumeHostDao _volumeHostDao; + static DataCenterDao _zoneDao; + static NetworkOfferingDao _networkOfferingDao; + static NetworkDao _networkDao; + static PhysicalNetworkDao _physicalNetworkDao; + static ConfigurationService _configMgr; + static ConfigurationDao _configDao; + static ConsoleProxyDao _consoleProxyDao; + static FirewallRulesCidrsDao _firewallCidrsDao; + static VMInstanceDao _vmDao; + static ResourceLimitService _resourceLimitMgr; + static ProjectService _projectMgr; + static ResourceManager _resourceMgr; + static AccountDetailsDao _accountDetailsDao; + static NetworkDomainDao _networkDomainDao; + static HighAvailabilityManager _haMgr; + static VpcManager _vpcMgr; + static TaggedResourceService _taggedResourceService; + static UserVmDetailsDao _userVmDetailsDao; + static SSHKeyPairDao _sshKeyPairDao; - @Inject static ConditionDao _asConditionDao; - @Inject static AutoScalePolicyConditionMapDao _asPolicyConditionMapDao; - @Inject static AutoScaleVmGroupPolicyMapDao _asVmGroupPolicyMapDao; - @Inject static AutoScalePolicyDao _asPolicyDao; - @Inject static AutoScaleVmProfileDao _asVmProfileDao; - @Inject static AutoScaleVmGroupDao _asVmGroupDao; - @Inject static CounterDao _counterDao; - @Inject static ResourceTagJoinDao _tagJoinDao; - @Inject static EventJoinDao _eventJoinDao; - @Inject static InstanceGroupJoinDao _vmGroupJoinDao; - @Inject static UserAccountJoinDao _userAccountJoinDao; - @Inject static ProjectJoinDao _projectJoinDao; - @Inject static ProjectAccountJoinDao _projectAccountJoinDao; - @Inject static ProjectInvitationJoinDao _projectInvitationJoinDao; - @Inject static HostJoinDao _hostJoinDao; - @Inject static VolumeJoinDao _volJoinDao; - @Inject static StoragePoolJoinDao _poolJoinDao; - @Inject static AccountJoinDao _accountJoinDao; - @Inject static AsyncJobJoinDao _jobJoinDao; + static ConditionDao _asConditionDao; + static AutoScalePolicyConditionMapDao _asPolicyConditionMapDao; + static AutoScaleVmGroupPolicyMapDao _asVmGroupPolicyMapDao; + static AutoScalePolicyDao _asPolicyDao; + static AutoScaleVmProfileDao _asVmProfileDao; + static AutoScaleVmGroupDao _asVmGroupDao; + static CounterDao _counterDao; + static ResourceTagJoinDao _tagJoinDao; + static EventJoinDao _eventJoinDao; + static InstanceGroupJoinDao _vmGroupJoinDao; + static UserAccountJoinDao _userAccountJoinDao; + static ProjectJoinDao _projectJoinDao; + static ProjectAccountJoinDao _projectAccountJoinDao; + static ProjectInvitationJoinDao _projectInvitationJoinDao; + static HostJoinDao _hostJoinDao; + static VolumeJoinDao _volJoinDao; + static StoragePoolJoinDao _poolJoinDao; + static AccountJoinDao _accountJoinDao; + static AsyncJobJoinDao _jobJoinDao; - @Inject static PhysicalNetworkTrafficTypeDao _physicalNetworkTrafficTypeDao; - @Inject static PhysicalNetworkServiceProviderDao _physicalNetworkServiceProviderDao; - @Inject static FirewallRulesDao _firewallRuleDao; - @Inject static StaticRouteDao _staticRouteDao; - @Inject static VpcGatewayDao _vpcGatewayDao; - @Inject static VpcDao _vpcDao; - @Inject static VpcOfferingDao _vpcOfferingDao; - @Inject static SnapshotPolicyDao _snapshotPolicyDao; - @Inject static AsyncJobDao _asyncJobDao; + static PhysicalNetworkTrafficTypeDao _physicalNetworkTrafficTypeDao; + static PhysicalNetworkServiceProviderDao _physicalNetworkServiceProviderDao; + static FirewallRulesDao _firewallRuleDao; + static StaticRouteDao _staticRouteDao; + static VpcGatewayDao _vpcGatewayDao; + static VpcDao _vpcDao; + static VpcOfferingDao _vpcOfferingDao; + static SnapshotPolicyDao _snapshotPolicyDao; + static AsyncJobDao _asyncJobDao; @Inject private ManagementServer ms; @Inject public AsyncJobManager asyncMgr; @Inject private SecurityGroupManager securityGroupMgr; @Inject private StorageManager storageMgr; @Inject private UserVmManager userVmMgr; + @Inject private NetworkModel networkModel; @Inject private NetworkManager networkMgr; @Inject private StatsCollector statsCollector; @@ -408,7 +411,7 @@ public class ApiDBUtils { @Inject private TaggedResourceService taggedResourceService; @Inject private UserVmDetailsDao userVmDetailsDao; @Inject private SSHKeyPairDao sshKeyPairDao; - + @Inject private ConditionDao asConditionDao; @Inject private AutoScalePolicyConditionMapDao asPolicyConditionMapDao; @Inject private AutoScaleVmGroupPolicyMapDao asVmGroupPolicyMapDao; @@ -438,7 +441,7 @@ public class ApiDBUtils { @Inject private VpcOfferingDao vpcOfferingDao; @Inject private SnapshotPolicyDao snapshotPolicyDao; @Inject private AsyncJobDao asyncJobDao; - + @PostConstruct void init() { _ms = ms; @@ -446,6 +449,7 @@ public class ApiDBUtils { _securityGroupMgr = securityGroupMgr; _storageMgr = storageMgr; _userVmMgr = userVmMgr; + _networkModel = networkModel; _networkMgr = networkMgr; _configMgr = configMgr; @@ -574,7 +578,7 @@ public class ApiDBUtils { } public static Long getPodIdForVlan(long vlanDbId) { - return _networkMgr.getPodIdForVlan(vlanDbId); + return _networkModel.getPodIdForVlan(vlanDbId); } public static String getVersion() { @@ -941,11 +945,11 @@ public class ApiDBUtils { } public static Map> getNetworkCapabilities(long networkId, long zoneId) { - return _networkMgr.getNetworkCapabilities(networkId); + return _networkModel.getNetworkCapabilities(networkId); } public static long getPublicNetworkIdByZone(long zoneId) { - return _networkMgr.getSystemNetworkByZoneAndTrafficType(zoneId, TrafficType.Public).getId(); + return _networkModel.getSystemNetworkByZoneAndTrafficType(zoneId, TrafficType.Public).getId(); } public static Long getVlanNetworkId(long vlanId) { @@ -975,7 +979,7 @@ public class ApiDBUtils { } public static Long getDedicatedNetworkDomain(long networkId) { - return _networkMgr.getDedicatedNetworkDomain(networkId); + return _networkModel.getDedicatedNetworkDomain(networkId); } public static float getCpuOverprovisioningFactor() { @@ -1028,25 +1032,25 @@ public class ApiDBUtils { } public static Map> listNetworkOfferingServices(long networkOfferingId) { - return _networkMgr.getNetworkOfferingServiceProvidersMap(networkOfferingId); + return _networkModel.getNetworkOfferingServiceProvidersMap(networkOfferingId); } public static List getElementServices(Provider provider) { - return _networkMgr.getElementServices(provider); + return _networkModel.getElementServices(provider); } public static List getProvidersForService(Service service) { - return _networkMgr.listSupportedNetworkServiceProviders(service.getName()); + return _networkModel.listSupportedNetworkServiceProviders(service.getName()); } public static boolean canElementEnableIndividualServices(Provider serviceProvider) { - return _networkMgr.canElementEnableIndividualServices(serviceProvider); + return _networkModel.canElementEnableIndividualServices(serviceProvider); } public static Pair getDomainNetworkDetails(long networkId) { NetworkDomainVO map = _networkDomainDao.getDomainNetworkMapByNetworkId(networkId); - boolean subdomainAccess = (map.isSubdomainAccess() != null) ? map.isSubdomainAccess() : _networkMgr.getAllowSubdomainAccessGlobal(); + boolean subdomainAccess = (map.isSubdomainAccess() != null) ? map.isSubdomainAccess() : _networkModel.getAllowSubdomainAccessGlobal(); return new Pair(map.getDomainId(), subdomainAccess); } @@ -1073,11 +1077,11 @@ public class ApiDBUtils { } public static List listVpcNetworks(long vpcId) { - return _networkMgr.listNetworksByVpc(vpcId); + return _networkModel.listNetworksByVpc(vpcId); } public static boolean canUseForDeploy(Network network) { - return _networkMgr.canUseForDeploy(network); + return _networkModel.canUseForDeploy(network); } public static String getUuid(String resourceId, TaggedResourceType resourceType) { diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 1ab6ee24114..91ffd87f1d8 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -95,46 +95,13 @@ public class ApiDispatcher { _createSnapshotQueueSizeLimit = snapshotLimit; } - public void dispatchCreateCmd(BaseAsyncCreateCmd cmd, Map params) { + public void dispatchCreateCmd(BaseAsyncCreateCmd cmd, Map params) throws Exception { processParameters(cmd, params); - try { UserContext ctx = UserContext.current(); ctx.setAccountId(cmd.getEntityOwnerId()); cmd.create(); - } catch (Throwable t) { - if (t instanceof InvalidParameterValueException || t instanceof IllegalArgumentException) { - s_logger.info(t.getMessage()); - throw new ServerApiException(BaseCmd.PARAM_ERROR, t.getMessage()); - } else if (t instanceof PermissionDeniedException) { - s_logger.info("PermissionDenied: " + t.getMessage()); - throw new ServerApiException(BaseCmd.ACCOUNT_ERROR, t.getMessage()); - } else if (t instanceof AccountLimitException) { - s_logger.info(t.getMessage()); - throw new ServerApiException(BaseCmd.ACCOUNT_RESOURCE_LIMIT_ERROR, t.getMessage()); - } else if (t instanceof InsufficientCapacityException) { - s_logger.info(t.getMessage()); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, t.getMessage()); - } else if (t instanceof ResourceAllocationException) { - s_logger.info(t.getMessage()); - throw new ServerApiException(BaseCmd.RESOURCE_ALLOCATION_ERROR, t.getMessage()); - } else if (t instanceof ResourceUnavailableException) { - s_logger.warn("Exception: ", t); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, t.getMessage()); - } else if (t instanceof AsyncCommandQueued) { - throw (AsyncCommandQueued) t; - } else if (t instanceof ServerApiException) { - s_logger.warn(t.getClass() + " : " + ((ServerApiException) t).getDescription()); - throw (ServerApiException) t; - } else { - s_logger.error("Exception while executing " + cmd.getClass().getSimpleName() + ":", t); - if (UserContext.current().getCaller().getType() == Account.ACCOUNT_TYPE_ADMIN) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, t.getMessage()); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, BaseCmd.USER_ERROR_MESSAGE); - } - } - } + } private void doAccessChecks(BaseCmd cmd, List entitiesToAccess) { @@ -160,8 +127,7 @@ public class ApiDispatcher { } } - public void dispatch(BaseCmd cmd, Map params) { - try { + public void dispatch(BaseCmd cmd, Map params) throws Exception { processParameters(cmd, params); UserContext ctx = UserContext.current(); ctx.setAccountId(cmd.getEntityOwnerId()); @@ -181,8 +147,8 @@ public class ApiDispatcher { } if (queueSizeLimit != null) { - _asyncMgr.syncAsyncJobExecution(asyncCmd.getJob(), asyncCmd.getSyncObjType(), - asyncCmd.getSyncObjId().longValue(), queueSizeLimit); + _asyncMgr + .syncAsyncJobExecution(asyncCmd.getJob(), asyncCmd.getSyncObjType(), asyncCmd.getSyncObjId().longValue(), queueSizeLimit); } else { s_logger.trace("The queue size is unlimited, skipping the synchronizing"); } @@ -191,133 +157,6 @@ public class ApiDispatcher { cmd.execute(); - } catch (Throwable t) { - if (t instanceof InvalidParameterValueException) { - // earlier, we'd log the db id as part of the log message, but now since we've pushed - // the id into a IdentityProxy object, we would need to dump that object alongwith the - // message. - InvalidParameterValueException ref = (InvalidParameterValueException) t; - ServerApiException ex = new ServerApiException(BaseCmd.PARAM_ERROR, t.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - ex.addProxyObject(idList.get(i)); - s_logger.info(t.getMessage() + " uuid: " + idList.get(i)); - } - } else { - s_logger.info(t.getMessage()); - } - // Also copy over the cserror code. - ex.setCSErrorCode(ref.getCSErrorCode()); - throw ex; - } else if(t instanceof IllegalArgumentException) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, t.getMessage()); - } else if (t instanceof PermissionDeniedException) { - PermissionDeniedException ref = (PermissionDeniedException)t; - ServerApiException ex = new ServerApiException(BaseCmd.ACCOUNT_ERROR, t.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - ex.addProxyObject(idList.get(i)); - s_logger.info("PermissionDenied: " + t.getMessage() + "uuid: " + idList.get(i)); - } - } else { - s_logger.info("PermissionDenied: " + t.getMessage()); - } - // Also copy over the cserror code. - ex.setCSErrorCode(ref.getCSErrorCode()); - throw ex; - } else if (t instanceof AccountLimitException) { - AccountLimitException ref = (AccountLimitException)t; - ServerApiException ex = new ServerApiException(BaseCmd.ACCOUNT_RESOURCE_LIMIT_ERROR, t.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - ex.addProxyObject(idList.get(i)); - s_logger.info(t.getMessage() + "uuid: " + idList.get(i)); - } - } else { - s_logger.info(t.getMessage()); - } - // Also copy over the cserror code. - ex.setCSErrorCode(ref.getCSErrorCode()); - throw ex; - } else if (t instanceof InsufficientCapacityException) { - InsufficientCapacityException ref = (InsufficientCapacityException)t; - ServerApiException ex = new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, t.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - ex.addProxyObject(idList.get(i)); - s_logger.info(t.getMessage() + "uuid: " + idList.get(i)); - } - } else { - s_logger.info(t.getMessage()); - } - // Also copy over the cserror code - ex.setCSErrorCode(ref.getCSErrorCode()); - throw ex; - } else if (t instanceof ResourceAllocationException) { - ResourceAllocationException ref = (ResourceAllocationException)t; - ServerApiException ex = new ServerApiException(BaseCmd.RESOURCE_ALLOCATION_ERROR, t.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - String id = idList.get(i); - ex.addProxyObject(id); - s_logger.warn("Exception: " + t.getMessage() + "uuid: " + id); - } - } else { - s_logger.warn("Exception: ", t); - } - // Also copy over the cserror code. - ex.setCSErrorCode(ref.getCSErrorCode()); - throw ex; - } else if (t instanceof ResourceUnavailableException) { - ResourceUnavailableException ref = (ResourceUnavailableException)t; - ServerApiException ex = new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, t.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - String id = idList.get(i); - ex.addProxyObject(id); - s_logger.warn("Exception: " + t.getMessage() + "uuid: " + id); - } - } else { - s_logger.warn("Exception: ", t); - } - // Also copy over the cserror code. - ex.setCSErrorCode(ref.getCSErrorCode()); - throw ex; - } else if (t instanceof AsyncCommandQueued) { - throw (AsyncCommandQueued) t; - } else if (t instanceof ServerApiException) { - s_logger.warn(t.getClass() + " : " + ((ServerApiException) t).getDescription()); - throw (ServerApiException) t; - } else { - s_logger.error("Exception while executing " + cmd.getClass().getSimpleName() + ":", t); - ServerApiException ex; - if (UserContext.current().getCaller().getType() == Account.ACCOUNT_TYPE_ADMIN) { - ex = new ServerApiException(BaseCmd.INTERNAL_ERROR, t.getMessage()); - } else { - ex = new ServerApiException(BaseCmd.INTERNAL_ERROR, BaseCmd.USER_ERROR_MESSAGE); - } - ex.setCSErrorCode(CSExceptionErrorCode.getCSErrCode(ex.getClass().getName())); - throw ex; - } - } } @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -335,11 +174,11 @@ public class ApiDispatcher { } if ((unpackedParams.get(ApiConstants.PAGE) == null) && (pageSize != null && pageSize != BaseListCmd.PAGESIZE_UNLIMITED)) { - ServerApiException ex = new ServerApiException(BaseCmd.PARAM_ERROR, "\"page\" parameter is required when \"pagesize\" is specified"); + ServerApiException ex = new ServerApiException(ApiErrorCode.PARAM_ERROR, "\"page\" parameter is required when \"pagesize\" is specified"); ex.setCSErrorCode(CSExceptionErrorCode.getCSErrCode(ex.getClass().getName())); throw ex; } else if (pageSize == null && (unpackedParams.get(ApiConstants.PAGE) != null)) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "\"pagesize\" parameter is required when \"page\" is specified"); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "\"pagesize\" parameter is required when \"page\" is specified"); } } @@ -357,7 +196,7 @@ public class ApiDispatcher { Object paramObj = unpackedParams.get(parameterAnnotation.name()); if (paramObj == null) { if (parameterAnnotation.required()) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to missing parameter " + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to missing parameter " + parameterAnnotation.name()); } continue; @@ -370,24 +209,24 @@ public class ApiDispatcher { if (s_logger.isDebugEnabled()) { s_logger.debug("Unable to execute API command " + cmd.getCommandName() + " due to invalid value " + paramObj + " for parameter " + parameterAnnotation.name()); } - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to invalid value " + paramObj + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to invalid value " + paramObj + " for parameter " + parameterAnnotation.name()); } catch (ParseException parseEx) { if (s_logger.isDebugEnabled()) { s_logger.debug("Invalid date parameter " + paramObj + " passed to command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8)); } - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to parse date " + paramObj + " for command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to parse date " + paramObj + " for command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + ", please pass dates in the format mentioned in the api documentation"); } catch (InvalidParameterValueException invEx) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to invalid value. " + invEx.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to invalid value. " + invEx.getMessage()); } catch (CloudRuntimeException cloudEx) { s_logger.error("CloudRuntimeException", cloudEx); // FIXME: Better error message? This only happens if the API command is not executable, which typically //means // there was // and IllegalAccessException setting one of the parameters. - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal error executing API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8)); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Internal error executing API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8)); } //check access on the resource this field points to @@ -498,7 +337,6 @@ public class ApiDispatcher { try { internalId = Long.parseLong(uuid); } catch(NumberFormatException e) { - // In case regex failed, and it's still uuid string internalId = null; } if (internalId != null) @@ -530,10 +368,8 @@ public class ApiDispatcher { if (s_logger.isDebugEnabled()) { s_logger.debug("Object entity with uuid=" + uuid + " does not exist in the database."); } - if (annotation.required()) { - throw new InvalidParameterValueException("Invalid parameter with uuid=" + uuid - + ". Entity not found, or an annotation bug."); - } + throw new InvalidParameterValueException("Invalid parameter value=" + uuid + + " due to incorrect long value, entity not found, or an annotation bug."); } return internalId; } diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 15d30957893..f103e30929a 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -53,8 +53,8 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.cloudstack.acl.APIChecker; -import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; @@ -109,6 +109,7 @@ import org.apache.log4j.Logger; import org.springframework.stereotype.Component; import com.cloud.api.response.ApiResponseSerializer; +import com.cloud.async.AsyncCommandQueued; import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; @@ -118,9 +119,13 @@ import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; import com.cloud.event.EventUtils; +import com.cloud.exception.AccountLimitException; import com.cloud.exception.CloudAuthenticationException; +import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.DomainManager; @@ -128,8 +133,8 @@ import com.cloud.user.User; import com.cloud.user.UserAccount; import com.cloud.user.UserContext; import com.cloud.user.UserVO; -import com.cloud.utils.Pair; import com.cloud.utils.NumbersUtil; +import com.cloud.utils.Pair; import com.cloud.utils.ReflectUtil; import com.cloud.utils.StringUtils; import com.cloud.utils.component.ComponentContext; @@ -137,7 +142,7 @@ import com.cloud.utils.component.PluggableService; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; -import com.cloud.utils.exception.CSExceptionErrorCode; + @Component public class ApiServer implements HttpRequestHandler { @@ -168,11 +173,11 @@ public class ApiServer implements HttpRequestHandler { public ApiServer() { } - + @PostConstruct void initComponent() { - s_instance = this; - init(); + s_instance = this; + init(); } public static ApiServer getInstance() { @@ -260,7 +265,7 @@ public class ApiServer implements HttpRequestHandler { // (Immutable)Multimap paramMultiMap = HashMultimap.create(); // Map> parameterMap = paramMultiMap.asMap(); Map parameterMap = new HashMap(); - String responseType = BaseCmd.RESPONSE_TYPE_JSON; + String responseType = BaseCmd.RESPONSE_TYPE_XML; for (NameValuePair param : paramList) { if (param.getName().equalsIgnoreCase("response")) { responseType = param.getValue(); @@ -271,7 +276,7 @@ public class ApiServer implements HttpRequestHandler { // Check responseType, if not among valid types, fallback to JSON if (!(responseType.equals(BaseCmd.RESPONSE_TYPE_JSON) || responseType.equals(BaseCmd.RESPONSE_TYPE_XML))) - responseType = BaseCmd.RESPONSE_TYPE_JSON; + responseType = BaseCmd.RESPONSE_TYPE_XML; try { // always trust commands from API port, user context will always be UID_SYSTEM/ACCOUNT_ID_SYSTEM @@ -282,8 +287,8 @@ public class ApiServer implements HttpRequestHandler { writeResponse(response, responseText, HttpStatus.SC_OK, responseType, null); } catch (ServerApiException se) { - String responseText = getSerializedApiError(se.getErrorCode(), se.getDescription(), parameterMap, responseType, se); - writeResponse(response, responseText, se.getErrorCode(), responseType, se.getDescription()); + String responseText = getSerializedApiError(se, parameterMap, responseType); + writeResponse(response, responseText, se.getErrorCode().getHttpCode(), responseType, se.getDescription()); sb.append(" " + se.getErrorCode() + " " + se.getDescription()); } catch (RuntimeException e) { // log runtime exception like NullPointerException to help identify the source easier @@ -312,7 +317,7 @@ public class ApiServer implements HttpRequestHandler { s_logger.trace(" key: " + keyStr + ", value: " + ((value == null) ? "'null'" : value[0])); } } - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "Invalid request, no command sent"); + throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, "Invalid request, no command sent"); } else { Map paramMap = new HashMap(); Set keys = params.keySet(); @@ -330,10 +335,10 @@ public class ApiServer implements HttpRequestHandler { decodedValue = URLDecoder.decode(value[0], "UTF-8"); } catch (UnsupportedEncodingException usex) { s_logger.warn(key + " could not be decoded, value = " + value[0]); - throw new ServerApiException(BaseCmd.PARAM_ERROR, key + " could not be decoded, received value " + value[0]); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, key + " could not be decoded, received value " + value[0]); } catch (IllegalArgumentException iae) { s_logger.warn(key + " could not be decoded, value = " + value[0]); - throw new ServerApiException(BaseCmd.PARAM_ERROR, key + " could not be decoded, received value " + value[0] + " which contains illegal characters eg.%"); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, key + " could not be decoded, received value " + value[0] + " which contains illegal characters eg.%"); } } else { decodedValue = value[0]; @@ -348,7 +353,7 @@ public class ApiServer implements HttpRequestHandler { cmdObj.configure(); cmdObj.setFullUrlParams(paramMap); cmdObj.setResponseType(responseType); - + // This is where the command is either serialized, or directly dispatched response = queueCommand(cmdObj, paramMap); buildAuditTrail(auditTrailSb, command[0], response); @@ -357,57 +362,87 @@ public class ApiServer implements HttpRequestHandler { String errorString = "Unknown API command: " + ((command == null) ? "null" : command[0]); s_logger.warn(errorString); auditTrailSb.append(" " + errorString); - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, errorString); + throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, errorString); } } } - } catch (Exception ex) { - if (ex instanceof InvalidParameterValueException) { - InvalidParameterValueException ref = (InvalidParameterValueException)ex; - ServerApiException e = new ServerApiException(BaseCmd.PARAM_ERROR, ex.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - e.addProxyObject(idList.get(i)); - } - } - // Also copy over the cserror code and the function/layer in which it was thrown. - e.setCSErrorCode(ref.getCSErrorCode()); - throw e; - } else if (ex instanceof PermissionDeniedException) { - PermissionDeniedException ref = (PermissionDeniedException)ex; - ServerApiException e = new ServerApiException(BaseCmd.ACCOUNT_ERROR, ex.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - e.addProxyObject(idList.get(i)); - } - } - e.setCSErrorCode(ref.getCSErrorCode()); - throw e; - } else if (ex instanceof ServerApiException) { - throw (ServerApiException) ex; - } else { - s_logger.error("unhandled exception executing api command: " + ((command == null) ? "null" : command[0]), ex); - ServerApiException e = new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal server error, unable to execute request."); - e.setCSErrorCode(CSExceptionErrorCode.getCSErrCode("ServerApiException")); - throw e; - } } + catch (InvalidParameterValueException ex){ + s_logger.info(ex.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ex.getMessage(), ex); + } + catch (IllegalArgumentException ex){ + s_logger.info(ex.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ex.getMessage(), ex); + } + catch (PermissionDeniedException ex){ + ArrayList idList = ex.getIdProxyList(); + if (idList != null) { + s_logger.info("PermissionDenied: " + ex.getMessage() + " on uuids: [" + StringUtils.listToCsvTags(idList) + "]"); + } else { + s_logger.info("PermissionDenied: " + ex.getMessage()); + } + throw new ServerApiException(ApiErrorCode.ACCOUNT_ERROR, ex.getMessage(), ex); + } + catch (AccountLimitException ex){ + s_logger.info(ex.getMessage()); + throw new ServerApiException(ApiErrorCode.ACCOUNT_RESOURCE_LIMIT_ERROR, ex.getMessage(), ex); + } + catch (InsufficientCapacityException ex){ + s_logger.info(ex.getMessage()); + String errorMsg = ex.getMessage(); + if (UserContext.current().getCaller().getType() != Account.ACCOUNT_TYPE_ADMIN){ + // hide internal details to non-admin user for security reason + errorMsg = BaseCmd.USER_ERROR_MESSAGE; + } + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, errorMsg, ex); + } + catch (ResourceAllocationException ex){ + s_logger.info(ex.getMessage()); + String errorMsg = ex.getMessage(); + if (UserContext.current().getCaller().getType() != Account.ACCOUNT_TYPE_ADMIN){ + // hide internal details to non-admin user for security reason + errorMsg = BaseCmd.USER_ERROR_MESSAGE; + } + throw new ServerApiException(ApiErrorCode.RESOURCE_ALLOCATION_ERROR, errorMsg, ex); + } + catch (ResourceUnavailableException ex){ + s_logger.info(ex.getMessage()); + String errorMsg = ex.getMessage(); + if (UserContext.current().getCaller().getType() != Account.ACCOUNT_TYPE_ADMIN){ + // hide internal details to non-admin user for security reason + errorMsg = BaseCmd.USER_ERROR_MESSAGE; + } + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, errorMsg, ex); + } + catch (AsyncCommandQueued ex){ + s_logger.error("unhandled exception executing api command: " + ((command == null) ? "null" : command[0]), ex); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Internal server error, unable to execute request."); + } + catch (ServerApiException ex){ + s_logger.info(ex.getDescription()); + throw ex; + } + catch (Exception ex){ + s_logger.error("unhandled exception executing api command: " + ((command == null) ? "null" : command[0]), ex); + String errorMsg = ex.getMessage(); + if (UserContext.current().getCaller().getType() != Account.ACCOUNT_TYPE_ADMIN){ + // hide internal details to non-admin user for security reason + errorMsg = BaseCmd.USER_ERROR_MESSAGE; + } + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, errorMsg, ex); + } + return response; } - private String queueCommand(BaseCmd cmdObj, Map params) { + private String queueCommand(BaseCmd cmdObj, Map params) throws Exception { UserContext ctx = UserContext.current(); Long callerUserId = ctx.getCallerUserId(); Account caller = ctx.getCaller(); - + BaseCmd realCmdObj = ComponentContext.getTargetObject(cmdObj); - + // Queue command based on Cmd super class: // BaseCmd: cmd is dispatched to ApiDispatcher, executed, serialized and returned. // BaseAsyncCreateCmd: cmd params are processed and create() is called, then same workflow as BaseAsyncCmd. @@ -459,7 +494,7 @@ public class ApiServer implements HttpRequestHandler { if (jobId == 0L) { String errorMsg = "Unable to schedule async job for command " + job.getCmd(); s_logger.warn(errorMsg); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, errorMsg); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, errorMsg); } if (objectId != null) { @@ -564,16 +599,19 @@ public class ApiServer implements HttpRequestHandler { // if userId not null, that mean that user is logged in if (userId != null) { User user = ApiDBUtils.findUserById(userId); - if (!isCommandAvailable(user, commandName)) { + try{ + checkCommandAvailable(user, commandName); + } + catch (PermissionDeniedException ex){ s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); + throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); } return true; } else { // check against every available command to see if the command exists or not if (!_apiNameCmdClassMap.containsKey(commandName) && !commandName.equals("login") && !commandName.equals("logout")) { s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); + throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); } } @@ -664,9 +702,12 @@ public class ApiServer implements HttpRequestHandler { UserContext.updateContext(user.getId(), account, null); - if (!isCommandAvailable(user, commandName)) { + try{ + checkCommandAvailable(user, commandName); + } + catch (PermissionDeniedException ex){ s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user"); - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); + throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, "The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); } // verify secret key exists @@ -689,11 +730,10 @@ public class ApiServer implements HttpRequestHandler { s_logger.info("User signature: " + signature + " is not equaled to computed signature: " + computedSignature); } return equalSig; + } catch (ServerApiException ex){ + throw ex; } catch (Exception ex) { - if (ex instanceof ServerApiException && ((ServerApiException) ex).getErrorCode() == BaseCmd.UNSUPPORTED_ACTION_ERROR) { - throw (ServerApiException) ex; - } - s_logger.error("unable to verify request signature", ex); + s_logger.error("unable to verify request signature"); } return false; } @@ -795,19 +835,14 @@ public class ApiServer implements HttpRequestHandler { return true; } - private boolean isCommandAvailable(User user, String commandName) throws PermissionDeniedException { + private void checkCommandAvailable(User user, String commandName) throws PermissionDeniedException { if (user == null) { throw new PermissionDeniedException("User is null for role based API access check for command" + commandName); } - Account account = _accountMgr.getAccount(user.getAccountId()); - RoleType roleType = _accountMgr.getRoleType(account); for (APIChecker apiChecker : _apiAccessCheckers) { - // Fail the checking if any checker fails to verify - if (!apiChecker.checkAccess(roleType, commandName)) - return false; + apiChecker.checkAccess(user, commandName); } - return true; } private Class getCmdClass(String cmdName) { @@ -941,13 +976,13 @@ public class ApiServer implements HttpRequestHandler { } } - public String getSerializedApiError(int errorCode, String errorText, Map apiCommandParams, String responseType, Exception ex) { + public String getSerializedApiError(int errorCode, String errorText, Map apiCommandParams, String responseType) { String responseName = null; Class cmdClass = null; String responseText = null; try { - if (errorCode == BaseCmd.UNSUPPORTED_ACTION_ERROR || apiCommandParams == null || apiCommandParams.isEmpty()) { + if (apiCommandParams == null || apiCommandParams.isEmpty()) { responseName = "errorresponse"; } else { Object cmdObj = apiCommandParams.get("command"); @@ -966,48 +1001,55 @@ public class ApiServer implements HttpRequestHandler { apiResponse.setErrorCode(errorCode); apiResponse.setErrorText(errorText); apiResponse.setResponseName(responseName); - // Also copy over the IdentityProxy object List into this new apiResponse, from - // the exception caught. When invoked from handle(), the exception here can - // be either ServerApiException, PermissionDeniedException or InvalidParameterValue - // Exception. When invoked from ApiServlet's processRequest(), this can be - // a standard exception like NumberFormatException. We'll leave the standard ones alone. - if (ex != null) { - if (ex instanceof ServerApiException || ex instanceof PermissionDeniedException - || ex instanceof InvalidParameterValueException) { - // Cast the exception appropriately and retrieve the IdentityProxy - if (ex instanceof ServerApiException) { - ServerApiException ref = (ServerApiException) ex; - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - for (int i=0; i < idList.size(); i++) { - apiResponse.addProxyObject(idList.get(i)); - } - } - // Also copy over the cserror code and the function/layer in which it was thrown. - apiResponse.setCSErrorCode(ref.getCSErrorCode()); - } else if (ex instanceof PermissionDeniedException) { - PermissionDeniedException ref = (PermissionDeniedException) ex; - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - for (int i=0; i < idList.size(); i++) { - apiResponse.addProxyObject(idList.get(i)); - } - } - // Also copy over the cserror code and the function/layer in which it was thrown. - apiResponse.setCSErrorCode(ref.getCSErrorCode()); - } else if (ex instanceof InvalidParameterValueException) { - InvalidParameterValueException ref = (InvalidParameterValueException) ex; - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - for (int i=0; i < idList.size(); i++) { - apiResponse.addProxyObject(idList.get(i)); - } - } - // Also copy over the cserror code and the function/layer in which it was thrown. - apiResponse.setCSErrorCode(ref.getCSErrorCode()); + SerializationContext.current().setUuidTranslation(true); + responseText = ApiResponseSerializer.toSerializedString(apiResponse, responseType); + + } catch (Exception e) { + s_logger.error("Exception responding to http request", e); + } + return responseText; + } + + public String getSerializedApiError(ServerApiException ex, Map apiCommandParams, String responseType) { + String responseName = null; + Class cmdClass = null; + String responseText = null; + + if (ex == null){ + // this call should not be invoked with null exception + return getSerializedApiError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Some internal error happened", apiCommandParams, responseType); + } + try { + if (ex.getErrorCode() == ApiErrorCode.UNSUPPORTED_ACTION_ERROR || apiCommandParams == null || apiCommandParams.isEmpty()) { + responseName = "errorresponse"; + } else { + Object cmdObj = apiCommandParams.get("command"); + // cmd name can be null when "command" parameter is missing in + // the request + if (cmdObj != null) { + String cmdName = ((String[]) cmdObj)[0]; + cmdClass = getCmdClass(cmdName); + if (cmdClass != null) { + responseName = ((BaseCmd) cmdClass.newInstance()).getCommandName(); + } else { + responseName = "errorresponse"; } } } + ExceptionResponse apiResponse = new ExceptionResponse(); + apiResponse.setErrorCode(ex.getErrorCode().getHttpCode()); + apiResponse.setErrorText(ex.getDescription()); + apiResponse.setResponseName(responseName); + ArrayList idList = ex.getIdProxyList(); + if (idList != null) { + for (int i=0; i < idList.size(); i++) { + apiResponse.addProxyObject(idList.get(i)); + } + } + // Also copy over the cserror code and the function/layer in which + // it was thrown. + apiResponse.setCSErrorCode(ex.getCSErrorCode()); + SerializationContext.current().setUuidTranslation(true); responseText = ApiResponseSerializer.toSerializedString(apiResponse, responseType); diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java index 35bb7ccf893..c816404d3c4 100755 --- a/server/src/com/cloud/api/ApiServlet.java +++ b/server/src/com/cloud/api/ApiServlet.java @@ -29,6 +29,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ServerApiException; import org.apache.log4j.Logger; @@ -184,7 +185,7 @@ public class ApiServlet extends HttpServlet { s_logger.warn("Invalid domain id entered by user"); auditTrailSb.append(" " + HttpServletResponse.SC_UNAUTHORIZED + " " + "Invalid domain id entered, please enter a valid one"); String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid domain id entered, please enter a valid one", params, - responseType, null); + responseType); writeResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); } } @@ -219,10 +220,10 @@ public class ApiServlet extends HttpServlet { } catch (IllegalStateException ise) { } - auditTrailSb.append(" " + BaseCmd.ACCOUNT_ERROR + " " + ex.getMessage() != null ? ex.getMessage() : "failed to authenticate user, check if username/password are correct"); - String serializedResponse = _apiServer.getSerializedApiError(BaseCmd.ACCOUNT_ERROR, ex.getMessage() != null ? ex.getMessage() - : "failed to authenticate user, check if username/password are correct", params, responseType, null); - writeResponse(resp, serializedResponse, BaseCmd.ACCOUNT_ERROR, responseType); + auditTrailSb.append(" " + ApiErrorCode.ACCOUNT_ERROR + " " + ex.getMessage() != null ? ex.getMessage() : "failed to authenticate user, check if username/password are correct"); + String serializedResponse = _apiServer.getSerializedApiError(ApiErrorCode.ACCOUNT_ERROR.getHttpCode(), ex.getMessage() != null ? ex.getMessage() + : "failed to authenticate user, check if username/password are correct", params, responseType); + writeResponse(resp, serializedResponse, ApiErrorCode.ACCOUNT_ERROR.getHttpCode(), responseType); return; } } @@ -249,7 +250,7 @@ public class ApiServlet extends HttpServlet { } catch (IllegalStateException ise) { } auditTrailSb.append(" " + HttpServletResponse.SC_UNAUTHORIZED + " " + "unable to verify user credentials"); - String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials", params, responseType, null); + String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials", params, responseType); writeResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); return; } @@ -261,7 +262,7 @@ public class ApiServlet extends HttpServlet { if (command == null) { s_logger.info("missing command, ignoring request..."); auditTrailSb.append(" " + HttpServletResponse.SC_BAD_REQUEST + " " + "no command specified"); - String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_BAD_REQUEST, "no command specified", params, responseType, null); + String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_BAD_REQUEST, "no command specified", params, responseType); writeResponse(resp, serializedResponse, HttpServletResponse.SC_BAD_REQUEST, responseType); return; } @@ -275,7 +276,7 @@ public class ApiServlet extends HttpServlet { } auditTrailSb.append(" " + HttpServletResponse.SC_UNAUTHORIZED + " " + "unable to verify user credentials"); - String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials", params, responseType, null); + String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials", params, responseType); writeResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); return; } @@ -299,15 +300,9 @@ public class ApiServlet extends HttpServlet { "(userId=" + UserContext.current().getCallerUserId() + " accountId=" + UserContext.current().getCaller().getId() + " sessionId=" + (session != null ? session.getId() : null) + ")"); - try { String response = _apiServer.handleRequest(params, false, responseType, auditTrailSb); writeResponse(resp, response != null ? response : "", HttpServletResponse.SC_OK, responseType); - } catch (ServerApiException se) { - String serializedResponseText = _apiServer.getSerializedApiError(se.getErrorCode(), se.getDescription(), params, responseType, null); - resp.setHeader("X-Description", se.getDescription()); - writeResponse(resp, serializedResponseText, se.getErrorCode(), responseType); - auditTrailSb.append(" " + se.getErrorCode() + " " + se.getDescription()); - } + } else { if (session != null) { try { @@ -317,21 +312,18 @@ public class ApiServlet extends HttpServlet { } auditTrailSb.append(" " + HttpServletResponse.SC_UNAUTHORIZED + " " + "unable to verify user credentials and/or request signature"); - String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials and/or request signature", params, responseType, null); + String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials and/or request signature", params, responseType); writeResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); } - } catch (Exception ex) { - if (ex instanceof ServerApiException && ((ServerApiException) ex).getErrorCode() == BaseCmd.UNSUPPORTED_ACTION_ERROR) { - ServerApiException se = (ServerApiException) ex; - String serializedResponseText = _apiServer.getSerializedApiError(se.getErrorCode(), se.getDescription(), params, responseType, null); + } catch (ServerApiException se) { + String serializedResponseText = _apiServer.getSerializedApiError(se, params, responseType); resp.setHeader("X-Description", se.getDescription()); - writeResponse(resp, serializedResponseText, se.getErrorCode(), responseType); + writeResponse(resp, serializedResponseText, se.getErrorCode().getHttpCode(), responseType); auditTrailSb.append(" " + se.getErrorCode() + " " + se.getDescription()); - } else { + } catch (Exception ex) { s_logger.error("unknown exception writing api response", ex); auditTrailSb.append(" unknown exception writing api response"); - } } finally { s_accessLogger.info(auditTrailSb.toString()); if (s_logger.isDebugEnabled()) { diff --git a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java index c80a62b3b01..e9e2bfb15d4 100644 --- a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java @@ -99,9 +99,9 @@ public class AddTrafficMonitorCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage()); } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage()); } } } diff --git a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java index 9e84f03d8e9..081d0be9e24 100644 --- a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java @@ -20,6 +20,7 @@ import javax.inject.Inject; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -76,10 +77,10 @@ public class DeleteTrafficMonitorCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete traffic monitor."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete traffic monitor."); } } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Failed to delete traffic monitor."); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Failed to delete traffic monitor."); } } } diff --git a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java index aa3c082ce81..4206cf82885 100644 --- a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java @@ -85,7 +85,7 @@ public class GenerateUsageRecordsCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to generate usage records"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to generate usage records"); } } } diff --git a/server/src/com/cloud/async/AsyncCommandQueued.java b/server/src/com/cloud/async/AsyncCommandQueued.java index 200b40e71b5..f01c214564b 100644 --- a/server/src/com/cloud/async/AsyncCommandQueued.java +++ b/server/src/com/cloud/async/AsyncCommandQueued.java @@ -17,9 +17,9 @@ package com.cloud.async; import com.cloud.utils.SerialVersionUID; -import com.cloud.utils.exception.RuntimeCloudException; +import com.cloud.utils.exception.CloudRuntimeException; -public class AsyncCommandQueued extends RuntimeCloudException { +public class AsyncCommandQueued extends CloudRuntimeException { private static final long serialVersionUID = SerialVersionUID.AsyncCommandQueued; private SyncQueueVO _queue = null; diff --git a/server/src/com/cloud/async/AsyncJobExecutorContext.java b/server/src/com/cloud/async/AsyncJobExecutorContext.java index 109fb5383f0..390a4103351 100644 --- a/server/src/com/cloud/async/AsyncJobExecutorContext.java +++ b/server/src/com/cloud/async/AsyncJobExecutorContext.java @@ -19,7 +19,7 @@ package com.cloud.async; import com.cloud.agent.AgentManager; import com.cloud.async.dao.AsyncJobDao; import com.cloud.event.dao.EventDao; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.dao.IPAddressDao; import com.cloud.server.ManagementServer; import com.cloud.storage.StorageManager; @@ -37,7 +37,7 @@ import com.cloud.vm.dao.UserVmDao; public interface AsyncJobExecutorContext extends Manager { public ManagementServer getManagementServer(); public AgentManager getAgentMgr(); - public NetworkManager getNetworkMgr(); + public NetworkModel getNetworkMgr(); public UserVmManager getVmMgr(); public SnapshotManager getSnapshotMgr(); public AccountManager getAccountMgr(); diff --git a/server/src/com/cloud/async/AsyncJobExecutorContextImpl.java b/server/src/com/cloud/async/AsyncJobExecutorContextImpl.java index 41814480d64..24d8c20cd62 100644 --- a/server/src/com/cloud/async/AsyncJobExecutorContextImpl.java +++ b/server/src/com/cloud/async/AsyncJobExecutorContextImpl.java @@ -27,7 +27,7 @@ import org.springframework.stereotype.Component; import com.cloud.agent.AgentManager; import com.cloud.async.dao.AsyncJobDao; import com.cloud.event.dao.EventDao; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.dao.IPAddressDao; import com.cloud.server.ManagementServer; import com.cloud.storage.StorageManager; @@ -47,7 +47,7 @@ public class AsyncJobExecutorContextImpl implements AsyncJobExecutorContext { private String _name; @Inject private AgentManager _agentMgr; - @Inject private NetworkManager _networkMgr; + @Inject private NetworkModel _networkMgr; @Inject private UserVmManager _vmMgr; @Inject private SnapshotManager _snapMgr; @Inject private AccountManager _accountMgr; @@ -75,7 +75,7 @@ public class AsyncJobExecutorContextImpl implements AsyncJobExecutorContext { } @Override - public NetworkManager getNetworkMgr() { + public NetworkModel getNetworkMgr() { return _networkMgr; } diff --git a/server/src/com/cloud/async/AsyncJobManagerImpl.java b/server/src/com/cloud/async/AsyncJobManagerImpl.java index c733d731e45..bdf2b71763d 100644 --- a/server/src/com/cloud/async/AsyncJobManagerImpl.java +++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java @@ -35,8 +35,8 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; -import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.command.user.job.QueryAsyncJobResultCmd; import org.apache.cloudstack.api.response.ExceptionResponse; @@ -461,14 +461,14 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe checkQueue(((AsyncCommandQueued)e).getQueue().getId()); } else { String errorMsg = null; - int errorCode = BaseCmd.INTERNAL_ERROR; + int errorCode = ApiErrorCode.INTERNAL_ERROR.getHttpCode(); if (!(e instanceof ServerApiException)) { s_logger.error("Unexpected exception while executing " + job.getCmd(), e); errorMsg = e.getMessage(); } else { ServerApiException sApiEx = (ServerApiException)e; errorMsg = sApiEx.getDescription(); - errorCode = sApiEx.getErrorCode(); + errorCode = sApiEx.getErrorCode().getHttpCode(); } ExceptionResponse response = new ExceptionResponse(); @@ -476,9 +476,9 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe response.setErrorText(errorMsg); response.setResponseName((cmdObj == null) ? "unknowncommandresponse" : cmdObj.getCommandName()); - // FIXME: setting resultCode to BaseCmd.INTERNAL_ERROR is not right, usually executors have their exception handling + // FIXME: setting resultCode to ApiErrorCode.INTERNAL_ERROR is not right, usually executors have their exception handling // and we need to preserve that as much as possible here - completeAsyncJob(jobId, AsyncJobResult.STATUS_FAILED, BaseCmd.INTERNAL_ERROR, response); + completeAsyncJob(jobId, AsyncJobResult.STATUS_FAILED, ApiErrorCode.INTERNAL_ERROR.getHttpCode(), response); // need to clean up any queue that happened as part of the dispatching and move on to the next item in the queue try { @@ -733,7 +733,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe txn.start(); List items = _queueMgr.getActiveQueueItems(msHost.getId(), true); cleanupPendingJobs(items); - _jobDao.resetJobProcess(msHost.getId(), BaseCmd.INTERNAL_ERROR, getSerializedErrorMessage("job cancelled because of management server restart")); + _jobDao.resetJobProcess(msHost.getId(), ApiErrorCode.INTERNAL_ERROR.getHttpCode(), getSerializedErrorMessage("job cancelled because of management server restart")); txn.commit(); } catch(Throwable e) { s_logger.warn("Unexpected exception ", e); @@ -753,7 +753,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe try { List l = _queueMgr.getActiveQueueItems(getMsid(), false); cleanupPendingJobs(l); - _jobDao.resetJobProcess(getMsid(), BaseCmd.INTERNAL_ERROR, getSerializedErrorMessage("job cancelled because of management server restart")); + _jobDao.resetJobProcess(getMsid(), ApiErrorCode.INTERNAL_ERROR.getHttpCode(), getSerializedErrorMessage("job cancelled because of management server restart")); } catch(Throwable e) { s_logger.error("Unexpected exception " + e.getMessage(), e); } @@ -768,7 +768,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe private static ExceptionResponse getResetResultResponse(String errorMessage) { ExceptionResponse resultObject = new ExceptionResponse(); - resultObject.setErrorCode(BaseCmd.INTERNAL_ERROR); + resultObject.setErrorCode(ApiErrorCode.INTERNAL_ERROR.getHttpCode()); resultObject.setErrorText(errorMessage); return resultObject; } diff --git a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java index 35983fa90be..7ddfe06eb07 100755 --- a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java +++ b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java @@ -315,7 +315,7 @@ public class BareMetalVmManagerImpl extends UserVmManagerImpl implements BareMet s_logger.warn("Bare Metal only supports basical network mode now, switch to baisc network automatically"); } - Network defaultNetwork = _networkMgr.getExclusiveGuestNetwork(dc.getId()); + Network defaultNetwork = _networkModel.getExclusiveGuestNetwork(dc.getId()); if (defaultNetwork == null) { throw new InvalidParameterValueException("Unable to find a default network to start a vm"); } diff --git a/server/src/com/cloud/baremetal/ExternalDhcpResourceBase.java b/server/src/com/cloud/baremetal/ExternalDhcpResourceBase.java index cbfcfd15f9a..69846ac4ec4 100644 --- a/server/src/com/cloud/baremetal/ExternalDhcpResourceBase.java +++ b/server/src/com/cloud/baremetal/ExternalDhcpResourceBase.java @@ -127,7 +127,7 @@ public class ExternalDhcpResourceBase implements ServerResource { cmd.setPod(_podId); cmd.setPrivateIpAddress(_ip); cmd.setStorageIpAddress(""); - cmd.setVersion(""); + cmd.setVersion(ExternalDhcpResourceBase.class.getPackage().getImplementationVersion()); cmd.setGuid(_guid); return new StartupCommand[]{cmd}; } diff --git a/server/src/com/cloud/baremetal/PxeServerResourceBase.java b/server/src/com/cloud/baremetal/PxeServerResourceBase.java index c307ccfc111..46982b1942a 100644 --- a/server/src/com/cloud/baremetal/PxeServerResourceBase.java +++ b/server/src/com/cloud/baremetal/PxeServerResourceBase.java @@ -114,7 +114,7 @@ public class PxeServerResourceBase implements ServerResource { cmd.setPod(_podId); cmd.setPrivateIpAddress(_ip); cmd.setStorageIpAddress(""); - cmd.setVersion(""); + cmd.setVersion(PxeServerResourceBase.class.getPackage().getImplementationVersion()); cmd.setGuid(_guid); return new StartupCommand[]{cmd}; } diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java index b91fbdd69bf..ce3698f7854 100755 --- a/server/src/com/cloud/configuration/Config.java +++ b/server/src/com/cloud/configuration/Config.java @@ -296,8 +296,8 @@ public enum Config { VmOpCleanupWait("Advanced", ManagementServer.class, Long.class, "vm.op.cleanup.wait", "3600", "Time (in seconds) to wait before cleanuping up any vm work items", "Seconds"), VmOpCancelInterval("Advanced", ManagementServer.class, Long.class, "vm.op.cancel.interval", "3600", "Time (in seconds) to wait before cancelling a operation", "Seconds"), - DefaultPageSize("Advanced", ManagementServer.class, Long.class, "default.page.size", "500", "Default page size for API list* commands", null), + DirectAgentPoolSize("Advanced", ManagementServer.class, Integer.class, "direct.agent.pool.size", "500", "Default size for DirectAgentPool", null), TaskCleanupRetryInterval("Advanced", ManagementServer.class, Integer.class, "task.cleanup.retry.interval", "600", "Time (in seconds) to wait before retrying cleanup of tasks if the cleanup failed previously. 0 means to never retry.", "Seconds"), diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index a8c1743be63..0e3363e11dd 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -111,6 +111,8 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; +import com.cloud.network.NetworkService; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.TrafficType; @@ -210,6 +212,10 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura @Inject NetworkManager _networkMgr; @Inject + NetworkService _networkSvc; + @Inject + NetworkModel _networkModel; + @Inject ClusterDao _clusterDao; @Inject AlertManager _alertMgr; @@ -757,7 +763,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura } // Delete vlans associated with the pod - List vlans = _networkMgr.listPodVlans(podId); + List vlans = _networkModel.listPodVlans(podId); if (vlans != null && !vlans.isEmpty()) { for (Vlan vlan : vlans) { _vlanDao.remove(vlan.getId()); @@ -1526,18 +1532,18 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura PhysicalNetwork mgmtPhyNetwork; if (NetworkType.Advanced == zone.getNetworkType()) { // zone should have a physical network with public and management traffiType - _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Public); - mgmtPhyNetwork = _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); + _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Public); + mgmtPhyNetwork = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); } else { // zone should have a physical network with management traffiType - mgmtPhyNetwork = _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); + mgmtPhyNetwork = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); } try { - _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Storage); + _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Storage); } catch (InvalidParameterValueException noStorage) { PhysicalNetworkTrafficTypeVO mgmtTraffic = _trafficTypeDao.findBy(mgmtPhyNetwork.getId(), TrafficType.Management); - _networkMgr.addTrafficTypeToPhysicalNetwork(mgmtPhyNetwork.getId(), TrafficType.Storage.toString(), mgmtTraffic.getXenNetworkLabel(), mgmtTraffic.getKvmNetworkLabel(), + _networkSvc.addTrafficTypeToPhysicalNetwork(mgmtPhyNetwork.getId(), TrafficType.Storage.toString(), mgmtTraffic.getXenNetworkLabel(), mgmtTraffic.getKvmNetworkLabel(), mgmtTraffic.getVmwareNetworkLabel(), mgmtTraffic.getSimulatorNetworkLabel(), mgmtTraffic.getVlan()); s_logger.info("No storage traffic type was specified by admin, create default storage traffic on physical network " + mgmtPhyNetwork.getId() + " with same configure of management traffic type"); } @@ -2076,6 +2082,11 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura Long domainId = cmd.getDomainId(); Account vlanOwner = null; + // if end ip is not specified, default it to startIp + if (endIP == null && startIP != null) { + endIP = startIP; + } + if (projectId != null) { if (accountName != null) { throw new InvalidParameterValueException("Account and projectId are mutually exclusive"); @@ -2133,14 +2144,14 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura } else { if (forVirtualNetwork) { // default physical network with public traffic in the zone - physicalNetworkId = _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Public).getId(); + physicalNetworkId = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Public).getId(); } else { if (zone.getNetworkType() == DataCenter.NetworkType.Basic) { // default physical network with guest traffic in the zone - physicalNetworkId = _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Guest).getId(); + physicalNetworkId = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Guest).getId(); } else if (zone.getNetworkType() == DataCenter.NetworkType.Advanced) { if (zone.isSecurityGroupEnabled()) { - physicalNetworkId = _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Guest).getId(); + physicalNetworkId = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Guest).getId(); } else { throw new InvalidParameterValueException("Physical Network Id is null, please provide the Network id for Direct vlan creation "); } @@ -2164,22 +2175,23 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura if (forVirtualNetwork) { if (network == null) { // find default public network in the zone - networkId = _networkMgr.getSystemNetworkByZoneAndTrafficType(zoneId, TrafficType.Public).getId(); - network = _networkMgr.getNetwork(networkId); + networkId = _networkModel.getSystemNetworkByZoneAndTrafficType(zoneId, TrafficType.Public).getId(); + network = _networkModel.getNetwork(networkId); } else if (network.getGuestType() != null || network.getTrafficType() != TrafficType.Public) { throw new InvalidParameterValueException("Can't find Public network by id=" + networkId); } } else { if (network == null) { if (zone.getNetworkType() == DataCenter.NetworkType.Basic) { - networkId = _networkMgr.getExclusiveGuestNetwork(zoneId).getId(); - network = _networkMgr.getNetwork(networkId); + networkId = _networkModel.getExclusiveGuestNetwork(zoneId).getId(); + network = _networkModel.getNetwork(networkId); } else { - network = _networkMgr.getNetworkWithSecurityGroupEnabled(zoneId); + network = _networkModel.getNetworkWithSecurityGroupEnabled(zoneId); if (network == null) { throw new InvalidParameterValueException("Nework id is required for Direct vlan creation "); } networkId = network.getId(); + zoneId = network.getDataCenterId(); } } else if (network.getGuestType() == null || network.getGuestType() == Network.GuestType.Isolated) { throw new InvalidParameterValueException("Can't create direct vlan for network id=" + networkId + " with type: " + network.getGuestType()); @@ -2196,34 +2208,34 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura endIP = startIP; } - if (forVirtualNetwork || zone.getNetworkType() == DataCenter.NetworkType.Basic || zone.isSecurityGroupEnabled()) { - if (vlanGateway == null || vlanNetmask == null || zoneId == null) { - throw new InvalidParameterValueException("Gateway, netmask and zoneId have to be passed in for virtual and direct untagged networks"); + if ( zone.getNetworkType() == DataCenter.NetworkType.Advanced ) { + if (network.getTrafficType() == TrafficType.Guest) { + if (network.getGuestType() != GuestType.Shared) { + throw new InvalidParameterValueException("Can execute createVLANIpRanges on shared guest network, but type of this guest network " + + network.getId() + " is " + network.getGuestType()); } - } else { - // check if startIp and endIp belong to network Cidr - String networkCidr = network.getCidr(); - String networkGateway = network.getGateway(); - Long networkZoneId = network.getDataCenterId(); - String networkNetmask = NetUtils.getCidrNetmask(networkCidr); - - // Check if ip addresses are in network range - if (!NetUtils.sameSubnet(startIP, networkGateway, networkNetmask)) { - throw new InvalidParameterValueException("Start ip is not in network cidr: " + networkCidr); + List vlans = _vlanDao.listVlansByNetworkId(network.getId()); + if ( vlans != null && vlans.size() > 0 ) { + VlanVO vlan = vlans.get(0); + if ( vlanId == null ) { + vlanId = vlan.getVlanTag(); + } else if ( vlan.getVlanTag() != vlanId ) { + throw new InvalidParameterValueException("there is already one vlan " + vlan.getVlanTag() + " on network :" + + + network.getId() + ", only one vlan is allowed on guest network"); } - - if (endIP != null) { - if (!NetUtils.sameSubnet(endIP, networkGateway, networkNetmask)) { - throw new InvalidParameterValueException("End ip is not in network cidr: " + networkCidr); + vlanGateway = vlan.getVlanGateway(); + vlanNetmask = vlan.getVlanNetmask(); + } + } else if (network.getTrafficType() == TrafficType.Management) { + throw new InvalidParameterValueException("Cannot execute createVLANIpRanges on management network"); } } - // set gateway, netmask, zone from network object - vlanGateway = networkGateway; - vlanNetmask = networkNetmask; - zoneId = networkZoneId; + if (vlanGateway == null || vlanNetmask == null || zoneId == null) { + throw new InvalidParameterValueException("Gateway, netmask and zoneId have to be passed in for virtual and direct untagged networks"); } + // if it's an account specific range, associate ip address list to the account boolean associateIpRangeToAccount = false; @@ -2274,7 +2286,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura String vlanId, Account vlanOwner) { - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); //Validate the zone DataCenterVO zone = _zoneDao.findById(zoneId); @@ -2515,7 +2527,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura " as ip " + ip + " belonging to the range is used for static nat purposes. Cleanup the rules first"); } - if (ip.isSourceNat() && _networkMgr.getNetwork(ip.getAssociatedWithNetworkId()) != null) { + if (ip.isSourceNat() && _networkModel.getNetwork(ip.getAssociatedWithNetworkId()) != null) { throw new InvalidParameterValueException("Can't delete account specific vlan " + vlanDbId + " as ip " + ip + " belonging to the range is a source nat ip for the network id=" + ip.getSourceNetworkId() + ". IP range with the source nat ip address can be removed either as a part of Network, or account removal"); @@ -3059,7 +3071,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura } // validate providers combination here - _networkMgr.canProviderSupportServices(providerCombinationToVerify); + _networkModel.canProviderSupportServices(providerCombinationToVerify); // validate the LB service capabilities specified in the network offering Map lbServiceCapabilityMap = cmd.getServiceCapabilities(Service.Lb); @@ -3161,33 +3173,20 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura void validateStaticNatServiceCapablities(Map staticNatServiceCapabilityMap) { if (staticNatServiceCapabilityMap != null && !staticNatServiceCapabilityMap.isEmpty()) { - if (staticNatServiceCapabilityMap.keySet().size() > 2) { - throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " and " + Capability.AssociatePublicIP.getName() + " capabilitiy can be sepcified for static nat service"); + if (staticNatServiceCapabilityMap.keySet().size() > 1) { + throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " capability can be specified for static nat service"); } - boolean eipEnabled = false; - boolean eipDisabled = false; - boolean associatePublicIP = true; + for (Capability capability : staticNatServiceCapabilityMap.keySet()) { String value = staticNatServiceCapabilityMap.get(capability); if (capability == Capability.ElasticIp) { - eipEnabled = value.contains("true"); - eipDisabled = value.contains("false"); - if (!eipEnabled && !eipDisabled) { + boolean enabled = value.contains("true"); + boolean disabled = value.contains("false"); + if (!enabled && !disabled) { throw new InvalidParameterValueException("Unknown specified value for " + Capability.ElasticIp.getName()); } - } else if (capability == Capability.AssociatePublicIP) { - if (value.contains("true")) { - associatePublicIP = true; - } else if (value.contains("false")) { - associatePublicIP = false; } else { - throw new InvalidParameterValueException("Unknown specified value for " + Capability.AssociatePublicIP.getName()); - } - } else { - throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " and " + Capability.AssociatePublicIP.getName() + " capabilitiy can be sepcified for static nat service"); - } - if (eipDisabled && associatePublicIP) { - throw new InvalidParameterValueException("Capability " + Capability.AssociatePublicIP.getName() + " can only be set when capability " + Capability.ElasticIp.getName() + " is true"); + throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " capability can be specified for static nat service"); } } } @@ -3241,7 +3240,6 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura boolean sharedSourceNat = false; boolean redundantRouter = false; boolean elasticIp = false; - boolean associatePublicIp = false; boolean inline = false; if (serviceCapabilityMap != null && !serviceCapabilityMap.isEmpty()) { Map lbServiceCapabilityMap = serviceCapabilityMap.get(Service.Lb); @@ -3249,7 +3247,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura if ((lbServiceCapabilityMap != null) && (!lbServiceCapabilityMap.isEmpty())) { String isolationCapability = lbServiceCapabilityMap.get(Capability.SupportedLBIsolation); if (isolationCapability != null) { - _networkMgr.checkCapabilityForProvider(serviceProviderMap.get(Service.Lb), Service.Lb, Capability.SupportedLBIsolation, isolationCapability); + _networkModel.checkCapabilityForProvider(serviceProviderMap.get(Service.Lb), Service.Lb, Capability.SupportedLBIsolation, isolationCapability); dedicatedLb = isolationCapability.contains("dedicated"); } else { dedicatedLb = true; @@ -3262,7 +3260,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura String inlineMode = lbServiceCapabilityMap.get(Capability.InlineMode); if (inlineMode != null) { - _networkMgr.checkCapabilityForProvider(serviceProviderMap.get(Service.Lb), Service.Lb, Capability.InlineMode, inlineMode); + _networkModel.checkCapabilityForProvider(serviceProviderMap.get(Service.Lb), Service.Lb, Capability.InlineMode, inlineMode); inline = inlineMode.contains("true"); } else { inline = false; @@ -3273,14 +3271,14 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura if ((sourceNatServiceCapabilityMap != null) && (!sourceNatServiceCapabilityMap.isEmpty())) { String sourceNatType = sourceNatServiceCapabilityMap.get(Capability.SupportedSourceNatTypes); if (sourceNatType != null) { - _networkMgr.checkCapabilityForProvider(serviceProviderMap.get(Service.SourceNat), Service.SourceNat, + _networkModel.checkCapabilityForProvider(serviceProviderMap.get(Service.SourceNat), Service.SourceNat, Capability.SupportedSourceNatTypes, sourceNatType); sharedSourceNat = sourceNatType.contains("perzone"); } String param = sourceNatServiceCapabilityMap.get(Capability.RedundantRouter); if (param != null) { - _networkMgr.checkCapabilityForProvider(serviceProviderMap.get(Service.SourceNat), Service.SourceNat, + _networkModel.checkCapabilityForProvider(serviceProviderMap.get(Service.SourceNat), Service.SourceNat, Capability.RedundantRouter, param); redundantRouter = param.contains("true"); } @@ -3291,17 +3289,13 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura String param = staticNatServiceCapabilityMap.get(Capability.ElasticIp); if (param != null) { elasticIp = param.contains("true"); - String associatePublicIP = staticNatServiceCapabilityMap.get(Capability.AssociatePublicIP); - if (associatePublicIP != null) { - associatePublicIp = associatePublicIP.contains("true"); - } } } } NetworkOfferingVO offering = new NetworkOfferingVO(name, displayText, trafficType, systemOnly, specifyVlan, networkRate, multicastRate, isDefault, availability, tags, type, conserveMode, dedicatedLb, - sharedSourceNat, redundantRouter, elasticIp, elasticLb, associatePublicIp, specifyIpRanges, inline); + sharedSourceNat, redundantRouter, elasticIp, elasticLb, specifyIpRanges, inline); if (serviceOfferingId != null) { offering.setServiceOfferingId(serviceOfferingId); @@ -3440,7 +3434,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura Network network = null; if (networkId != null) { // check if network exists and the caller can operate with it - network = _networkMgr.getNetwork(networkId); + network = _networkModel.getNetwork(networkId); if (network == null) { throw new InvalidParameterValueException("Unable to find the network by id=" + networkId); } @@ -3452,7 +3446,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura _accountMgr.checkAccess(caller, null, true, network); - List offeringIds = _networkMgr.listNetworkOfferingsForUpgrade(networkId); + List offeringIds = _networkModel.listNetworkOfferingsForUpgrade(networkId); if (!offeringIds.isEmpty()) { sc.addAnd("id", SearchCriteria.Op.IN, offeringIds.toArray()); @@ -3531,21 +3525,21 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura } if (listBySupportedServices) { - addOffering = addOffering && _networkMgr.areServicesSupportedByNetworkOffering(offering.getId(), supportedServices); + addOffering = addOffering && _networkModel.areServicesSupportedByNetworkOffering(offering.getId(), supportedServices); } if (checkIfProvidersAreEnabled) { if (supportedServices != null && supportedServices.length > 0) { checkForProviders = Arrays.asList(supportedServices); } else { - checkForProviders = _networkMgr.listNetworkOfferingServices(offering.getId()); + checkForProviders = _networkModel.listNetworkOfferingServices(offering.getId()); } - addOffering = addOffering && _networkMgr.areServicesEnabledInZone(zoneId, offering, checkForProviders); + addOffering = addOffering && _networkModel.areServicesEnabledInZone(zoneId, offering, checkForProviders); } if (sourceNatSupported != null) { - addOffering = addOffering && (_networkMgr.areServicesSupportedByNetworkOffering(offering.getId(), Network.Service.SourceNat) == sourceNatSupported); + addOffering = addOffering && (_networkModel.areServicesSupportedByNetworkOffering(offering.getId(), Network.Service.SourceNat) == sourceNatSupported); } if (forVpc != null) { @@ -3670,7 +3664,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura } else { if (availability == NetworkOffering.Availability.Required) { boolean canOffBeRequired = (offeringToUpdate.getGuestType() == GuestType.Isolated - && _networkMgr.areServicesSupportedByNetworkOffering(offeringToUpdate.getId(), Service.SourceNat)); + && _networkModel.areServicesSupportedByNetworkOffering(offeringToUpdate.getId(), Service.SourceNat)); if (!canOffBeRequired) { throw new InvalidParameterValueException("Availability can be " + NetworkOffering.Availability.Required + " only for networkOfferings of type " + GuestType.Isolated + " and with " @@ -3796,7 +3790,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura Long networkId = vlan.getNetworkId(); if (networkId != null) { - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); if (network != null) { accountId = network.getAccountId(); } diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 4ff0ada7764..9e63d69b39e 100755 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -96,13 +96,14 @@ import com.cloud.keystore.KeystoreVO; import com.cloud.network.IPAddressVO; import com.cloud.network.Network; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.NetworkDao; import com.cloud.network.rules.RulesManager; +import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; -import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.resource.ResourceManager; import com.cloud.resource.ResourceStateAdapter; @@ -214,6 +215,8 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx @Inject NetworkManager _networkMgr; @Inject + NetworkModel _networkModel; + @Inject AccountManager _accountMgr; @Inject ServiceOfferingDao _offeringDao; @@ -238,9 +241,9 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx private ServiceOfferingVO _serviceOffering; - NetworkOfferingVO _publicNetworkOffering; - NetworkOfferingVO _managementNetworkOffering; - NetworkOfferingVO _linkLocalNetworkOffering; + NetworkOffering _publicNetworkOffering; + NetworkOffering _managementNetworkOffering; + NetworkOffering _linkLocalNetworkOffering; @Inject private VirtualMachineManager _itMgr; @@ -768,7 +771,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx NetworkVO defaultNetwork = defaultNetworks.get(0); - List offerings = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork, NetworkOfferingVO.SystemManagementNetwork); + List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork, NetworkOffering.SystemManagementNetwork); List> networks = new ArrayList>(offerings.size() + 1); NicProfile defaultNic = new NicProfile(); defaultNic.setDefaultNic(true); @@ -776,7 +779,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx networks.add(new Pair(_networkMgr.setupNetwork(systemAcct, _networkOfferingDao.findById(defaultNetwork.getNetworkOfferingId()), plan, null, null, false).get(0), defaultNic)); - for (NetworkOfferingVO offering : offerings) { + for (NetworkOffering offering : offerings) { networks.add(new Pair(_networkMgr.setupNetwork(systemAcct, offering, plan, null, null, false).get(0), null)); } diff --git a/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java b/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java index 81bdc734de1..17f0355ed96 100644 --- a/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java +++ b/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java @@ -28,7 +28,7 @@ import org.apache.log4j.Logger; import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.host.dao.HostDao; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks.TrafficType; import com.cloud.vm.Nic; import com.cloud.vm.VMInstanceVO; @@ -40,7 +40,7 @@ public class ManagementIPSystemVMInvestigator extends AbstractInvestigatorImpl { private String _name = null; @Inject private HostDao _hostDao = null; - @Inject private NetworkManager _networkMgr = null; + @Inject private NetworkModel _networkMgr = null; @Override diff --git a/server/src/com/cloud/ha/UserVmDomRInvestigator.java b/server/src/com/cloud/ha/UserVmDomRInvestigator.java index 742dc57a2d2..f86932ab9fd 100644 --- a/server/src/com/cloud/ha/UserVmDomRInvestigator.java +++ b/server/src/com/cloud/ha/UserVmDomRInvestigator.java @@ -32,7 +32,7 @@ import com.cloud.agent.api.PingTestCommand; import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks.TrafficType; import com.cloud.network.router.VirtualRouter; import com.cloud.network.router.VpcVirtualNetworkApplianceManager; @@ -49,7 +49,7 @@ public class UserVmDomRInvestigator extends AbstractInvestigatorImpl { private String _name = null; @Inject private final UserVmDao _userVmDao = null; @Inject private final AgentManager _agentMgr = null; - @Inject private final NetworkManager _networkMgr = null; + @Inject private final NetworkModel _networkMgr = null; @Inject private final VpcVirtualNetworkApplianceManager _vnaMgr = null; @Override diff --git a/server/src/com/cloud/hypervisor/HypervisorGuruBase.java b/server/src/com/cloud/hypervisor/HypervisorGuruBase.java index 56e2e90b985..e158962aa11 100644 --- a/server/src/com/cloud/hypervisor/HypervisorGuruBase.java +++ b/server/src/com/cloud/hypervisor/HypervisorGuruBase.java @@ -63,6 +63,7 @@ public abstract class HypervisorGuruBase extends AdapterBase implements Hypervis to.setIsolationuri(profile.getIsolationUri()); to.setNetworkRateMbps(profile.getNetworkRate()); to.setName(profile.getName()); + to.setSecurityGroupEnabled(profile.isSecurityGroupEnabled()); // Workaround to make sure the TO has the UUID we need for Niciri integration NicVO nicVO = _nicDao.findById(profile.getId()); diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java index 84bb4baaca4..128c20ccb32 100644 --- a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java +++ b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java @@ -52,7 +52,7 @@ import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor; import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.PhysicalNetworkSetupInfo; import com.cloud.resource.Discoverer; import com.cloud.resource.DiscovererBase; @@ -75,8 +75,8 @@ Listener, ResourceStateAdapter { @Inject ClusterDao _clusterDao; @Inject ResourceManager _resourceMgr; @Inject AgentManager _agentMgr; - @Inject NetworkManager _networkMgr; @Inject ConfigurationDao _configDao; + @Inject NetworkModel _networkMgr; @Override public boolean processAnswers(long agentId, long seq, Answer[] answers) { diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java index 927a1164647..3761a1462e3 100644 --- a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java @@ -109,7 +109,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl @Inject HostDao _hostDao; @Inject NetworkServiceMapDao _ntwkSrvcProviderDao; @Inject DataCenterDao _dcDao; - @Inject NetworkManager _networkMgr; + @Inject NetworkModel _networkMgr; @Inject InlineLoadBalancerNicMapDao _inlineLoadBalancerNicMapDao; @Inject NicDao _nicDao; @Inject AgentManager _agentMgr; @@ -421,7 +421,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl IPAddressVO sourceNatIp = null; if (!sharedSourceNat) { // Get the source NAT IP address for this account - List sourceNatIps = _networkMgr.listPublicIpsAssignedToAccount(network.getAccountId(), + List sourceNatIps = _networkMgr.listPublicIpsAssignedToAccount(network.getAccountId(), zoneId, true); if (sourceNatIps.size() != 1) { @@ -430,7 +430,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl s_logger.error(errorMsg); return true; } else { - sourceNatIp = sourceNatIps.get(0); + sourceNatIp = _ipAddressDao.findById(sourceNatIps.get(0).getId()); } } diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java index ee082e089f0..d1e1faf97f1 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java @@ -127,6 +127,8 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase @Inject DataCenterDao _dcDao; @Inject + NetworkModel _networkModel; + @Inject NetworkManager _networkMgr; @Inject InlineLoadBalancerNicMapDao _inlineLoadBalancerNicMapDao; @@ -743,7 +745,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase }; private MappingNic getLoadBalancingIpNic(DataCenterVO zone, Network network, long sourceIpId, boolean revoked, String existedGuestIp) throws ResourceUnavailableException { - String srcIp = _networkMgr.getIp(sourceIpId).getAddress().addr(); + String srcIp = _networkModel.getIp(sourceIpId).getAddress().addr(); InlineLoadBalancerNicMapVO mapping = _inlineLoadBalancerNicMapDao.findByPublicIpAddress(srcIp); NicVO loadBalancingIpNic = null; MappingNic nic = new MappingNic(); @@ -861,7 +863,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase String protocol = rule.getProtocol(); String algorithm = rule.getAlgorithm(); String uuid = rule.getUuid(); - String srcIp = _networkMgr.getIp(rule.getSourceIpAddressId()).getAddress().addr(); + String srcIp = _networkModel.getIp(rule.getSourceIpAddressId()).getAddress().addr(); int srcPort = rule.getSourcePortStart(); List destinations = rule.getDestinations(); @@ -970,7 +972,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase long guestVlanTag = Long.parseLong(guestConfig.getBroadcastUri().getHost()); String selfIp = null; String guestVlanNetmask = NetUtils.cidr2Netmask(guestConfig.getCidr()); - Integer networkRate = _networkMgr.getNetworkRate(guestConfig.getId(), null); + Integer networkRate = _networkModel.getNetworkRate(guestConfig.getId(), null); if (add) { // on restart network, network could have already been implemented. If already implemented then return @@ -1094,7 +1096,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase return null; } - NetworkElement element = _networkMgr.getElementImplementingProvider(providers.get(0).getName()); + NetworkElement element = _networkModel.getElementImplementingProvider(providers.get(0).getName()); if (!(element instanceof IpDeployer)) { s_logger.error("The firewall provider for network " + network.getName() + " don't have ability to deploy IP address!"); return null; diff --git a/server/src/com/cloud/network/ExternalLoadBalancerUsageManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerUsageManagerImpl.java index eb24c9b7b97..be22a54f945 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerUsageManagerImpl.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerUsageManagerImpl.java @@ -90,7 +90,7 @@ public class ExternalLoadBalancerUsageManagerImpl implements ExternalLoadBalance @Inject DataCenterDao _dcDao; @Inject - NetworkManager _networkMgr; + NetworkModel _networkMgr; @Inject InlineLoadBalancerNicMapDao _inlineLoadBalancerNicMapDao; @Inject diff --git a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java index e95dd175fc8..a321c000260 100755 --- a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java @@ -79,7 +79,7 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa @Inject ExternalDhcpManager _dhcpMgr; @Inject PxeServerManager _pxeMgr; @Inject AgentManager _agentMgr; - @Inject NetworkManager _networkMgr; + @Inject NetworkModel _networkMgr; @Inject HostDao _hostDao; @Inject DataCenterDao _dcDao; @Inject AccountDao _accountDao; diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 0ca28f889ba..546f1bf613c 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -16,14 +16,11 @@ // under the License. package com.cloud.network; -import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Set; import org.apache.cloudstack.acl.ControlledEntity.ACLType; import com.cloud.dc.DataCenter; -import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; @@ -34,16 +31,10 @@ import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InsufficientVirtualNetworkCapcityException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; -import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; import com.cloud.network.element.LoadBalancingServiceProvider; -import com.cloud.network.element.NetworkElement; -import com.cloud.network.element.RemoteAccessVPNServiceProvider; -import com.cloud.network.element.Site2SiteVpnServiceProvider; import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; @@ -52,6 +43,7 @@ import com.cloud.network.rules.StaticNat; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.user.Account; +import com.cloud.user.User; import com.cloud.utils.Pair; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; @@ -65,7 +57,7 @@ import com.cloud.vm.VirtualMachineProfileImpl; * NetworkManager manages the network for the different end users. * */ -public interface NetworkManager extends NetworkService { +public interface NetworkManager { /** * Assigns a new public ip address. * @@ -98,27 +90,12 @@ public interface NetworkManager extends NetworkService { */ public boolean disassociatePublicIpAddress(long id, long userId, Account caller); - /** - * Lists IP addresses that belong to VirtualNetwork VLANs - * - * @param accountId - * - account that the IP address should belong to - * @param associatedNetworkId - * TODO - * @param sourceNat - * - (optional) true if the IP address should be a source NAT address - * @return - list of IP addresses - */ - List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat); - - List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) + List setupNetwork(Account owner, NetworkOffering offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) throws ConcurrentOperationException; - List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, + List setupNetwork(Account owner, NetworkOffering offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException; - List getSystemAccountNetworkOfferings(String... offeringNames); - void allocate(VirtualMachineProfile vm, List> networks) throws InsufficientCapacityException, ConcurrentOperationException; void prepare(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context) throws InsufficientCapacityException, ConcurrentOperationException, @@ -131,29 +108,13 @@ public interface NetworkManager extends NetworkService { void expungeNics(VirtualMachineProfile vm); - List getNics(long vmId); - List getNicProfiles(VirtualMachine vm); - String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException; - - boolean applyRules(List rules, boolean continueOnError) throws ResourceUnavailableException; - - public boolean validateRule(FirewallRule rule); - - List getRemoteAccessVpnElements(); - - List getSite2SiteVpnElements(); - - PublicIpAddress getPublicIpAddress(long ipAddressId); - - List listPodVlans(long podId); + boolean applyRules(List rules, FirewallRule.Purpose purpose, NetworkRuleApplier applier, boolean continueOnError) throws ResourceUnavailableException; Pair implementNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; - List listNetworksUsedByVm(long vmId, boolean isSystem); - void prepareNicForMigration(VirtualMachineProfile vm, DeployDestination dest); boolean shutdownNetwork(long networkId, ReservationContext context, boolean cleanupElements); @@ -181,133 +142,35 @@ public interface NetworkManager extends NetworkService { boolean associateIpAddressListToAccount(long userId, long accountId, long zoneId, Long vlanId, Network guestNetwork) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException, ResourceAllocationException; - Nic getNicInNetwork(long vmId, long networkId); - - List getNicsForTraffic(long vmId, TrafficType type); - - Network getDefaultNetworkForVm(long vmId); - - Nic getDefaultNic(long vmId); - UserDataServiceProvider getPasswordResetProvider(Network network); - UserDataServiceProvider getUserDataUpdateProvider(Network network); - - boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId); - - Map getNetworkServiceCapabilities(long networkId, Service service); - boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException; - - boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services); - - NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId); + + boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, List publicIps) throws ResourceUnavailableException; boolean startNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; - String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId); - - List listNetworksForAccount(long accountId, long zoneId, Network.GuestType type); - - List listAllNetworksInAllZonesByType(Network.GuestType type); - IPAddressVO markIpAsUnavailable(long addrId); public String acquireGuestIpAddress(Network network, String requestedIp); - String getGlobalGuestDomainSuffix(); - - String getStartIpAddress(long networkId); - boolean applyStaticNats(List staticNats, boolean continueOnError) throws ResourceUnavailableException; - String getIpInNetwork(long vmId, long networkId); - - String getIpInNetworkIncludingRemoved(long vmId, long networkId); - - Long getPodIdForVlan(long vlanDbId); - - List listNetworkOfferingsForUpgrade(long networkId); - - boolean isSecurityGroupSupportedInNetwork(Network network); - - boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider); - - boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName); - - String getNetworkTag(HypervisorType hType, Network network); - - List getElementServices(Provider provider); - - boolean canElementEnableIndividualServices(Provider provider); - - boolean areServicesSupportedInNetwork(long networkId, Service... services); - - boolean isNetworkSystem(Network network); - boolean reallocate(VirtualMachineProfile vm, DataCenterDeployment dest) throws InsufficientCapacityException, ConcurrentOperationException; - Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service); - - Long getPhysicalNetworkId(Network network); - - boolean getAllowSubdomainAccessGlobal(); - - boolean isProviderForNetwork(Provider provider, long networkId); - - boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId); - - void canProviderSupportServices(Map> providersMap); - - List getPhysicalNetworkInfo(long dcId, - HypervisorType hypervisorType); - - boolean canAddDefaultSecurityGroup(); - - List listNetworkOfferingServices(long networkOfferingId); - - boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services); - - public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall); - - public Map> getProviderToIpList(Network network, Map> ipToServices); - - public boolean checkIpForService(IPAddressVO ip, Service service, Long networkId); - - void checkCapabilityForProvider(Set providers, Service service, - Capability cap, String capValue); - - Provider getDefaultUniqueProviderForService(String serviceName); - IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) throws InsufficientAddressCapacityException; boolean handleSystemIpRelease(IpAddress ip); - void checkNetworkPermissions(Account owner, Network network); - void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile vm, Network network, String requestedIp) throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException; - String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType); - - String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType); - - String getDefaultPublicTrafficLabel(long dcId, HypervisorType vmware); - - String getDefaultGuestTrafficLabel(long dcId, HypervisorType vmware); - - /** - * @param providerName - * @return - */ - NetworkElement getElementImplementingProvider(String providerName); - /** * @param owner * @param guestNetwork @@ -318,27 +181,6 @@ public interface NetworkManager extends NetworkService { PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network guestNetwork) throws InsufficientAddressCapacityException, ConcurrentOperationException; - /** - * @param accountId - * @param zoneId - * @return - */ - String getAccountNetworkDomain(long accountId, long zoneId); - - - /** - * @return - */ - String getDefaultNetworkDomain(); - - - /** - * @param ntwkOffId - * @return - */ - List getNtwkOffDistinctProviders(long ntwkOffId); - - /** * @param requested * @param network @@ -380,15 +222,6 @@ public interface NetworkManager extends NetworkService { void removeNic(VirtualMachineProfile vm, Nic nic); - /** - * @param accountId - * @param dcId - * @param sourceNat - * @return - */ - List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat); - - /** * @param ipAddrId * @param networkId @@ -398,15 +231,6 @@ public interface NetworkManager extends NetworkService { InsufficientAddressCapacityException, ConcurrentOperationException; - /** - * @param vm - * @param networkId - * @param broadcastUri TODO - * @return - */ - NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri); - - /** * @param network * @param provider @@ -425,21 +249,6 @@ public interface NetworkManager extends NetworkService { throws ConcurrentOperationException, ResourceUnavailableException; - /** - * @param zoneId - * @param trafficType - * @return - */ - List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType); - - - /** - * @param guestNic - * @return - */ - boolean isPrivateGateway(Nic guestNic); - - /** * @param network * @param requested @@ -478,12 +287,38 @@ public interface NetworkManager extends NetworkService { */ PublicIp assignDedicateIpAddress(Account owner, Long guestNtwkId, Long vpcId, long dcId, boolean isSourceNat) throws ConcurrentOperationException, InsufficientAddressCapacityException; + NetworkProfile convertNetworkToNetworkProfile(long networkId); /** * @return */ int getNetworkLockTimeout(); + + boolean cleanupIpResources(long addrId, long userId, Account caller); + + + boolean restartNetwork(Long networkId, Account callerAccount, + User callerUser, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; + + + boolean shutdownNetworkElementsAndResources(ReservationContext context, + boolean b, NetworkVO network); + + + void implementNetworkElementsAndResources(DeployDestination dest, + ReservationContext context, NetworkVO network, + NetworkOfferingVO findById) throws ConcurrentOperationException, InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException; + + + IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, long callerId, + DataCenter zone) throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException; + + + Map finalizeServicesAndProvidersForNetwork(NetworkOffering offering, + Long physicalNetworkId); + + List getProvidersForServiceInNetwork(Network network, Service service); StaticNatServiceProvider getStaticNatProviderForNetwork(Network network); diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 2a4b27e5de0..706d3328a3e 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -17,22 +17,17 @@ package com.cloud.network; import java.net.URI; -import java.security.InvalidParameterException; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; -import java.util.TreeSet; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -41,31 +36,37 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; -import com.cloud.utils.db.*; -import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; -import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; -import org.apache.log4j.Logger; - import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.acl.SecurityChecker.AccessType; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + import com.cloud.agent.AgentManager; import com.cloud.agent.Listener; -import com.cloud.agent.api.*; +import com.cloud.agent.api.AgentControlAnswer; +import com.cloud.agent.api.AgentControlCommand; +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.CheckNetworkAnswer; +import com.cloud.agent.api.CheckNetworkCommand; +import com.cloud.agent.api.Command; +import com.cloud.agent.api.StartupCommand; +import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.agent.api.to.NicTO; import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; - -import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; -import org.springframework.stereotype.Component; - import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; -import com.cloud.dc.*; +import com.cloud.dc.AccountVlanMapVO; +import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.Pod; +import com.cloud.dc.PodVlanMapVO; +import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; +import com.cloud.dc.VlanVO; import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.PodVlanMapDao; @@ -74,14 +75,21 @@ import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlan; import com.cloud.domain.Domain; -import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; -import com.cloud.event.ActionEvent; import com.cloud.event.EventTypes; import com.cloud.event.UsageEventVO; -import com.cloud.event.dao.EventDao; import com.cloud.event.dao.UsageEventDao; -import com.cloud.exception.*; +import com.cloud.exception.AccountLimitException; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.ConnectionException; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InsufficientVirtualNetworkCapcityException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.exception.UnsupportedServiceException; import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.Status; @@ -96,21 +104,39 @@ import com.cloud.network.Networks.AddressFormat; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.IsolationType; import com.cloud.network.Networks.TrafficType; -import com.cloud.network.PhysicalNetwork.BroadcastDomainRange; -import com.cloud.network.VirtualRouterProvider.VirtualRouterProviderType; import com.cloud.network.addr.PublicIp; -import com.cloud.network.dao.*; -import com.cloud.network.element.*; +import com.cloud.network.dao.FirewallRulesDao; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.LoadBalancerDao; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDomainDao; +import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; +import com.cloud.network.element.DhcpServiceProvider; +import com.cloud.network.element.IpDeployer; +import com.cloud.network.element.LoadBalancingServiceProvider; +import com.cloud.network.element.NetworkElement; +import com.cloud.network.element.StaticNatServiceProvider; +import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.lb.LoadBalancingRule.LbDestination; import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy; import com.cloud.network.lb.LoadBalancingRulesManager; -import com.cloud.network.rules.*; +import com.cloud.network.rules.FirewallManager; +import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.PortForwardingRuleVO; +import com.cloud.network.rules.RulesManager; +import com.cloud.network.rules.StaticNat; +import com.cloud.network.rules.StaticNatRule; +import com.cloud.network.rules.StaticNatRuleImpl; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.network.vpc.NetworkACLManager; -import com.cloud.network.vpc.PrivateIpVO; import com.cloud.network.vpc.VpcManager; import com.cloud.network.vpc.dao.PrivateIpDao; import com.cloud.network.vpn.RemoteAccessVpnService; @@ -121,23 +147,24 @@ import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; import com.cloud.org.Grouping; -import com.cloud.projects.Project; -import com.cloud.projects.ProjectManager; -import com.cloud.server.ResourceTag.TaggedResourceType; -import com.cloud.tags.ResourceTagVO; -import com.cloud.tags.dao.ResourceTagDao; -import com.cloud.user.*; +import com.cloud.user.Account; +import com.cloud.user.AccountManager; +import com.cloud.user.ResourceLimitService; +import com.cloud.user.User; +import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; -import com.cloud.user.dao.UserStatisticsDao; -import com.cloud.utils.AnnotationHelper; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.component.AdapterBase; -import com.cloud.utils.component.ComponentContext; import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; +import com.cloud.utils.db.DB; +import com.cloud.utils.db.Filter; import com.cloud.utils.db.JoinBuilder.JoinType; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria.Op; +import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.Ip; import com.cloud.utils.net.NetUtils; @@ -146,28 +173,23 @@ import com.cloud.vm.NicProfile; import com.cloud.vm.NicVO; import com.cloud.vm.ReservationContext; import com.cloud.vm.ReservationContextImpl; -import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.VirtualMachineProfileImpl; -import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; -import edu.emory.mathcs.backport.java.util.Collections; - -import java.util.*; /** * NetworkManagerImpl implements NetworkManager. */ @Component -@Local(value = { NetworkManager.class, NetworkService.class }) -public class NetworkManagerImpl implements NetworkManager, NetworkService, Manager, Listener { - private static final Logger s_logger = Logger.getLogger(NetworkManagerImpl.class); +@Local(value = { NetworkManager.class}) +public class NetworkManagerImpl implements NetworkManager, Manager, Listener { + static final Logger s_logger = Logger.getLogger(NetworkManagerImpl.class); String _name; @Inject @@ -181,10 +203,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Inject DomainDao _domainDao = null; @Inject - UserStatisticsDao _userStatsDao = null; - @Inject - EventDao _eventDao = null; - @Inject ConfigurationDao _configDao; @Inject UserVmDao _userVmDao = null; @@ -212,15 +230,17 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag RemoteAccessVpnService _vpnMgr; @Inject PodVlanMapDao _podVlanMapDao; - + @Inject List _networkGurus; @Inject List _networkElements; - - @Inject - NetworkDomainDao _networkDomainDao; + + @Inject NetworkDomainDao _networkDomainDao; + @Inject List _ipDeployers; + @Inject List _dhcpProviders; + @Inject VMInstanceDao _vmDao; @Inject @@ -228,15 +248,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Inject FirewallRulesDao _firewallDao; @Inject - PortForwardingRulesDao _portForwardingDao; - @Inject ResourceLimitService _resourceLimitMgr; - @Inject - DomainRouterDao _routerDao; - @Inject - DomainManager _domainMgr; - @Inject - ProjectManager _projectMgr; + @Inject NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao; @Inject @@ -264,57 +277,22 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Inject NetworkACLManager _networkACLMgr; @Inject - ResourceTagDao _resourceTagDao; - - private final HashMap _systemNetworks = new HashMap(5); - private static Long _privateOfferingId = null; + NetworkModel _networkModel; ScheduledExecutorService _executor; - SearchBuilder AccountsUsingNetworkSearch; SearchBuilder AssignIpAddressSearch; SearchBuilder AssignIpAddressFromPodVlanSearch; - SearchBuilder IpAddressSearch; - SearchBuilder NicForTrafficTypeSearch; int _networkGcWait; int _networkGcInterval; String _networkDomain; - int _cidrLimit; - boolean _allowSubdomainNetworkAccess; int _networkLockTimeout; private Map _configs; HashMap _lastNetworkIdsToFree = new HashMap(); - private static HashMap> s_serviceToImplementedProvidersMap = new HashMap>(); - private static HashMap s_providerToNetworkElementMap = new HashMap(); - - @Override - public NetworkElement getElementImplementingProvider(String providerName) { - String elementName = s_providerToNetworkElementMap.get(providerName); - NetworkElement element = AdapterBase.getAdapterByName(_networkElements, elementName); - return element; - } - - @Override - public List getElementServices(Provider provider) { - NetworkElement element = getElementImplementingProvider(provider.getName()); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getName() + "'"); - } - return new ArrayList(element.getCapabilities().keySet()); - } - - @Override - public boolean canElementEnableIndividualServices(Provider provider) { - NetworkElement element = getElementImplementingProvider(provider.getName()); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getName() + "'"); - } - return element.canEnableIndividualServices(); - } @Override public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner, VlanType type, Long networkId, String requestedIp, boolean isSystem) throws InsufficientAddressCapacityException { @@ -324,7 +302,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @DB public PublicIp fetchNewPublicIp(long dcId, Long podId, Long vlanDbId, Account owner, VlanType vlanUse, Long guestNetworkId, boolean sourceNat, boolean assign, String requestedIp, boolean isSystem, Long vpcId) - throws InsufficientAddressCapacityException { + throws InsufficientAddressCapacityException { StringBuilder errorMessage = new StringBuilder("Unable to get ip adress in "); Transaction txn = Transaction.currentTxn(); txn.start(); @@ -432,7 +410,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag VlanVO vlan = _vlanDao.findById(addr.getVlanId()); String guestType = vlan.getVlanType().toString(); - + UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_NET_IP_ASSIGN, owner.getId(), addr.getDataCenterId(), addr.getId(), addr.getAddress().toString(), addr.isSourceNat(), guestType, addr.getSystem()); @@ -446,7 +424,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag txn.commit(); } - + @Override public PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network guestNetwork) throws InsufficientAddressCapacityException, ConcurrentOperationException { @@ -463,15 +441,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } else { ipToReturn = assignDedicateIpAddress(owner, guestNetwork.getId(), null, dcId, true); } - + return ipToReturn; } - + @Override public PublicIp assignVpnGatewayIpAddress(long dcId, Account owner, long vpcId) throws InsufficientAddressCapacityException, ConcurrentOperationException { return assignDedicateIpAddress(owner, null, vpcId, dcId, false); } - + @DB @Override @@ -479,7 +457,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag throws ConcurrentOperationException, InsufficientAddressCapacityException { long ownerId = owner.getId(); - + // Check that the maximum number of public IPs for the given accountId will not be exceeded try { _resourceLimitMgr.checkResourceLimit(owner, ResourceType.public_ip); @@ -503,7 +481,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (s_logger.isDebugEnabled()) { s_logger.debug("lock account " + ownerId + " is acquired"); } - + // If account has Account specific ip ranges, try to allocate ip from there Long vlanId = null; List maps = _accountVlanMapDao.listAccountVlanMapsByAccount(ownerId); @@ -536,45 +514,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - /** - * Returns the target account for an api command - * - * @param accountName - * - non-null if the account name was passed in in the command - * @param domainId - * - non-null if the domainId was passed in in the command. - * @return - */ - protected Account getAccountForApiCommand(String accountName, Long domainId) { - Account account = UserContext.current().getCaller(); - if (_accountMgr.isAdmin(account.getType())) { - // The admin is making the call, determine if it is for someone else or for himself - if (domainId != null) { - if ((account != null) && !_domainDao.isChildDomain(account.getDomainId(), domainId)) { - // TBD: Check if call to addProxyObject() needs correction. - PermissionDeniedException ex = new PermissionDeniedException("Invalid domain id given, permission denied"); - ex.addProxyObject("domain", domainId, "domainId"); - throw ex; - } - if (accountName != null) { - Account userAccount = _accountMgr.getActiveAccountByName(accountName, domainId); - if (userAccount != null) { - account = userAccount; - } else { - // TBD: Check if call to addProxyObject() needs correction. - PermissionDeniedException ex = new PermissionDeniedException("Unable to find account " + accountName + " in specified domain, permission denied"); - ex.addProxyObject("domain", domainId, "domainId"); - throw ex; - } - } - } else { - // the admin is calling the api on his own behalf - return account; - } - } - return account; - } @Override public boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException { @@ -611,315 +551,31 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return success; } - private Map> getProviderServicesMap(long networkId) { - Map> map = new HashMap>(); - List nsms = _ntwkSrvcDao.getServicesInNetwork(networkId); - for (NetworkServiceMapVO nsm : nsms) { - Set services = map.get(Provider.getProvider(nsm.getProvider())); - if (services == null) { - services = new HashSet(); - } - services.add(Service.getService(nsm.getService())); - map.put(Provider.getProvider(nsm.getProvider()), services); - } - return map; - } - private Map> getServiceProvidersMap(long networkId) { - Map> map = new HashMap>(); - List nsms = _ntwkSrvcDao.getServicesInNetwork(networkId); - for (NetworkServiceMapVO nsm : nsms) { - Set providers = map.get(Service.getService(nsm.getService())); - if (providers == null) { - providers = new HashSet(); - } - providers.add(Provider.getProvider(nsm.getProvider())); - map.put(Service.getService(nsm.getService()), providers); - } - return map; - } - /* Get a list of IPs, classify them by service */ @Override - public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { - Map> ipToServices = new HashMap>(); - - if (publicIps != null && !publicIps.isEmpty()) { - Set networkSNAT = new HashSet(); - for (PublicIp ip : publicIps) { - Set services = ipToServices.get(ip); - if (services == null) { - services = new HashSet(); - } - if (ip.isSourceNat()) { - if (!networkSNAT.contains(ip.getAssociatedWithNetworkId())) { - services.add(Service.SourceNat); - networkSNAT.add(ip.getAssociatedWithNetworkId()); - } else { - CloudRuntimeException ex = new CloudRuntimeException("Multiple generic soure NAT IPs provided for network"); - // see the IPAddressVO.java class. - ex.addProxyObject("user_ip_address", ip.getAssociatedWithNetworkId(), "networkId"); - throw ex; - } - } - ipToServices.put(ip, services); - - // if IP in allocating state then it will not have any rules attached so skip IPAssoc to network service - // provider - if (ip.getState() == State.Allocating) { - continue; - } - - // check if any active rules are applied on the public IP - Set purposes = getPublicIpPurposeInRules(ip, false, includingFirewall); - // Firewall rules didn't cover static NAT - if (ip.isOneToOneNat() && ip.getAssociatedWithVmId() != null) { - if (purposes == null) { - purposes = new HashSet(); - } - purposes.add(Purpose.StaticNat); - } - if (purposes == null || purposes.isEmpty()) { - // since no active rules are there check if any rules are applied on the public IP but are in -// revoking state - - purposes = getPublicIpPurposeInRules(ip, true, includingFirewall); - if (ip.isOneToOneNat()) { - if (purposes == null) { - purposes = new HashSet(); - } - purposes.add(Purpose.StaticNat); - } - if (purposes == null || purposes.isEmpty()) { - // IP is not being used for any purpose so skip IPAssoc to network service provider - continue; - } else { - if (rulesRevoked) { - // no active rules/revoked rules are associated with this public IP, so remove the -// association with the provider - ip.setState(State.Releasing); - } else { - if (ip.getState() == State.Releasing) { - // rules are not revoked yet, so don't let the network service provider revoke the IP -// association - // mark IP is allocated so that IP association will not be removed from the provider - ip.setState(State.Allocated); - } - } - } - } - if (purposes.contains(Purpose.StaticNat)) { - services.add(Service.StaticNat); - } - if (purposes.contains(Purpose.LoadBalancing)) { - services.add(Service.Lb); - } - if (purposes.contains(Purpose.PortForwarding)) { - services.add(Service.PortForwarding); - } - if (purposes.contains(Purpose.Vpn)) { - services.add(Service.Vpn); - } - if (purposes.contains(Purpose.Firewall)) { - services.add(Service.Firewall); - } - if (services.isEmpty()) { - continue; - } - ipToServices.put(ip, services); - } - } - return ipToServices; - } - - public boolean canIpUsedForNonConserveService(PublicIp ip, Service service) { - // If it's non-conserve mode, then the new ip should not be used by any other services - List ipList = new ArrayList(); - ipList.add(ip); - Map> ipToServices = getIpToServices(ipList, false, false); - Set services = ipToServices.get(ip); - // Not used currently, safe - if (services == null || services.isEmpty()) { - return true; - } - // Since it's non-conserve mode, only one service should used for IP - if (services.size() != 1) { - throw new InvalidParameterException("There are multiple services used ip " + ip.getAddress() + "."); - } - if (service != null && !((Service) services.toArray()[0] == service || service.equals(Service.Firewall))) { - throw new InvalidParameterException("The IP " + ip.getAddress() + " is already used as " + ((Service) services.toArray()[0]).getName() + " rather than " + service.getName()); - } - return true; - } - - protected boolean canIpsUsedForNonConserve(List publicIps) { - boolean result = true; - for (PublicIp ip : publicIps) { - result = canIpUsedForNonConserveService(ip, null); - if (!result) { - break; - } - } - return result; - } - - public boolean canIpsUseOffering(List publicIps, long offeringId) { - Map> ipToServices = getIpToServices(publicIps, false, true); - Map> serviceToProviders = getNetworkOfferingServiceProvidersMap(offeringId); - NetworkOfferingVO offering = _networkOfferingDao.findById(offeringId); - //For inline mode checking, using firewall provider for LB instead, because public ip would apply on firewall provider - if (offering.isInline()) { - Provider firewallProvider = null; - if (serviceToProviders.containsKey(Service.Firewall)) { - firewallProvider = (Provider)serviceToProviders.get(Service.Firewall).toArray()[0]; - } - Set p = new HashSet(); - p.add(firewallProvider); - serviceToProviders.remove(Service.Lb); - serviceToProviders.put(Service.Lb, p); - } - for (PublicIp ip : ipToServices.keySet()) { - Set services = ipToServices.get(ip); - Provider provider = null; - for (Service service : services) { - Set curProviders = serviceToProviders.get(service); - if (curProviders == null || curProviders.isEmpty()) { - continue; - } - Provider curProvider = (Provider) curProviders.toArray()[0]; - if (provider == null) { - provider = curProvider; - continue; - } - // We don't support multiple providers for one service now - if (!provider.equals(curProvider)) { - throw new InvalidParameterException("There would be multiple providers for IP " + ip.getAddress() + " with the new network offering!"); - } - } - } - return true; - } - - public boolean canIpUsedForService(PublicIp publicIp, Service service, Long networkId) { - List ipList = new ArrayList(); - ipList.add(publicIp); - Map> ipToServices = getIpToServices(ipList, false, true); - Set services = ipToServices.get(publicIp); - if (services == null || services.isEmpty()) { - return true; - } - - if (networkId == null) { - networkId = publicIp.getAssociatedWithNetworkId(); - } - - // We only support one provider for one service now - Map> serviceToProviders = getServiceProvidersMap(networkId); - Set oldProviders = serviceToProviders.get(services.toArray()[0]); - Provider oldProvider = (Provider) oldProviders.toArray()[0]; - // Since IP already has service to bind with, the oldProvider can't be null - Set newProviders = serviceToProviders.get(service); - if (newProviders == null || newProviders.isEmpty()) { - throw new InvalidParameterException("There is no new provider for IP " + publicIp.getAddress() + " of service " + service.getName() + "!"); - } - Provider newProvider = (Provider) newProviders.toArray()[0]; - Network network = _networksDao.findById(networkId); - NetworkElement oldElement = getElementImplementingProvider(oldProvider.getName()); - NetworkElement newElement = getElementImplementingProvider(newProvider.getName()); - if (oldElement instanceof IpDeployingRequester && newElement instanceof IpDeployingRequester) { - IpDeployer oldIpDeployer = ((IpDeployingRequester)oldElement).getIpDeployer(network); - IpDeployer newIpDeployer = ((IpDeployingRequester)newElement).getIpDeployer(network); - if (!oldIpDeployer.getProvider().getName().equals(newIpDeployer.getProvider().getName())) { - throw new InvalidParameterException("There would be multiple providers for IP " + publicIp.getAddress() + "!"); - } - } else { - throw new InvalidParameterException("Ip cannot be applied for new provider!"); - } - return true; - } - - /* Return a mapping between provider in the network and the IP they should applied */ - @Override - public Map> getProviderToIpList(Network network, Map> ipToServices) { - NetworkOffering offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); - if (!offering.isConserveMode()) { - for (PublicIp ip : ipToServices.keySet()) { - Set services = new HashSet() ; - services.addAll(ipToServices.get(ip)); - if (services != null && services.contains(Service.Firewall)) { - services.remove(Service.Firewall); - } - if (services != null && services.size() > 1) { - throw new CloudRuntimeException("Ip " + ip.getAddress() + " is used by multiple services!"); - } - } - } - Map> serviceToIps = new HashMap>(); - for (PublicIp ip : ipToServices.keySet()) { - for (Service service : ipToServices.get(ip)) { - Set ips = serviceToIps.get(service); - if (ips == null) { - ips = new HashSet(); - } - ips.add(ip); - serviceToIps.put(service, ips); - } - } - // TODO Check different provider for same IP - Map> providerToServices = getProviderServicesMap(network.getId()); - Map> providerToIpList = new HashMap>(); - for (Provider provider : providerToServices.keySet()) { - Set services = providerToServices.get(provider); - ArrayList ipList = new ArrayList(); - Set ipSet = new HashSet(); - for (Service service : services) { - Set serviceIps = serviceToIps.get(service); - if (serviceIps == null || serviceIps.isEmpty()) { - continue; - } - ipSet.addAll(serviceIps); - } - Set sourceNatIps = serviceToIps.get(Service.SourceNat); - if (sourceNatIps != null && !sourceNatIps.isEmpty()) { - ipList.addAll(0, sourceNatIps); - ipSet.removeAll(sourceNatIps); - } - ipList.addAll(ipSet); - providerToIpList.put(provider, ipList); - } - return providerToIpList; - } - - protected boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, - List publicIps) throws ResourceUnavailableException { + public boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, + List publicIps) throws ResourceUnavailableException { boolean success = true; - Map> ipToServices = getIpToServices(publicIps, rulesRevoked, true); - Map> providerToIpList = getProviderToIpList(network, ipToServices); + Map> ipToServices = _networkModel.getIpToServices(publicIps, rulesRevoked, true); + Map> providerToIpList = _networkModel.getProviderToIpList(network, ipToServices); for (Provider provider : providerToIpList.keySet()) { try { - ArrayList ips = providerToIpList.get(provider); + ArrayList ips = providerToIpList.get(provider); if (ips == null || ips.isEmpty()) { continue; } IpDeployer deployer = null; - NetworkElement element = getElementImplementingProvider(provider.getName()); - if (element instanceof ConnectivityProvider) { - // Nothing to do - s_logger.debug("ConnectivityProvider " + element.getClass().getSimpleName() + " has no ip associations"); - continue; - } - - if (!(element instanceof IpDeployingRequester)) { - throw new CloudRuntimeException("Element " + element + " is not a IpDeployingRequester!"); - } - deployer = ((IpDeployingRequester)element).getIpDeployer(network); - if (deployer == null) { + NetworkElement element = _networkModel.getElementImplementingProvider(provider.getName()); + if (element instanceof IpDeployer) { + deployer = (IpDeployer) element; + } else { throw new CloudRuntimeException("Fail to get ip deployer for element: " + element); } Set services = new HashSet(); - for (PublicIp ip : ips) { + for (PublicIpAddress ip : ips) { if (!ipToServices.containsKey(ip)) { continue; } @@ -939,92 +595,34 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return success; } - Set getPublicIpPurposeInRules(PublicIp ip, boolean includeRevoked, boolean includingFirewall) { - Set result = new HashSet(); - List rules = null; - if (includeRevoked) { - rules = _firewallDao.listByIp(ip.getId()); - } else { - rules = _firewallDao.listByIpAndNotRevoked(ip.getId()); - } - if (rules == null || rules.isEmpty()) { - return null; - } - for (FirewallRuleVO rule : rules) { - if (rule.getPurpose() != Purpose.Firewall || includingFirewall) { - result.add(rule.getPurpose()); - } - } - return result; - } - - @Override - public List getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner) { - - return _networksDao.listByZoneAndGuestType(owner.getId(), zoneId, Network.GuestType.Isolated, false); - } - - @Override - public List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { + protected List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { return _networksDao.listSourceNATEnabledNetworks(owner.getId(), zoneId, Network.GuestType.Isolated); } - @Override - @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "allocating Ip", create = true) - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) - throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { - if (networkId != null) { - Network network = _networksDao.findById(networkId); - if (network == null) { - throw new InvalidParameterValueException("Invalid network id is given"); - } - if (network.getGuestType() == Network.GuestType.Shared) { - DataCenter zone = _configMgr.getZone(zoneId); - if (zone == null) { - throw new InvalidParameterValueException("Invalid zone Id is given"); - } - // if shared network in the advanced zone, then check the caller against the network for 'AccessType.UseNetwork' - if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) && zone.getNetworkType() == NetworkType.Advanced) { - Account caller = UserContext.current().getCaller(); - long callerUserId = UserContext.current().getCallerUserId(); - _accountMgr.checkAccess(caller, AccessType.UseNetwork, false, network); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId()); - } - return allocateIp(ipOwner, false, caller, zone); - } else { - throw new InvalidParameterValueException("Associate IP address can only be called on the shared networks in the advanced zone" + - " with Firewall/Source Nat/Static Nat/Port Forwarding/Load balancing services enabled"); - } - } - } - - return allocateIP(ipOwner, false, zoneId); - } - - public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) + private IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { Account caller = UserContext.current().getCaller(); long callerUserId = UserContext.current().getCallerUserId(); // check permissions _accountMgr.checkAccess(caller, null, false, ipOwner); - + DataCenter zone = _configMgr.getZone(zoneId); - - return allocateIp(ipOwner, isSystem, caller, zone); + + return allocateIp(ipOwner, isSystem, caller, callerUserId, zone); } @DB - public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, DataCenter zone) + @Override + public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, long callerUserId, DataCenter zone) throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException { - + VlanType vlanType = VlanType.VirtualNetwork; boolean assign = false; @@ -1042,7 +640,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Account accountToLock = null; try { if (s_logger.isDebugEnabled()) { - s_logger.debug("Associate IP address called by the user " + caller.getId()); + s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId()); } accountToLock = _accountDao.acquireInLockTable(ipOwner.getId()); if (accountToLock == null) { @@ -1088,27 +686,26 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return ip; } - protected IPAddressVO getExistingSourceNatInNetwork(long ownerId, Long networkId) { - List addrs = listPublicIpsAssignedToGuestNtwk(ownerId, networkId, true); + List addrs = _networkModel.listPublicIpsAssignedToGuestNtwk(ownerId, networkId, true); IPAddressVO sourceNatIp = null; if (addrs.isEmpty()) { return null; } else { // Account already has ip addresses - for (IPAddressVO addr : addrs) { + for (IpAddress addr : addrs) { if (addr.isSourceNat()) { - sourceNatIp = addr; + sourceNatIp = _ipAddressDao.findById(addr.getId()); return sourceNatIp; } } assert (sourceNatIp != null) : "How do we get a bunch of ip addresses but none of them are source nat? " + - "account=" + ownerId + "; networkId=" + networkId; + "account=" + ownerId + "; networkId=" + networkId; } - + return sourceNatIp; } @@ -1116,39 +713,24 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override public IPAddressVO associateIPToGuestNetwork(long ipId, long networkId, boolean releaseOnFailure) throws ResourceAllocationException, ResourceUnavailableException, - InsufficientAddressCapacityException, ConcurrentOperationException { + InsufficientAddressCapacityException, ConcurrentOperationException { Account caller = UserContext.current().getCaller(); Account owner = null; IPAddressVO ipToAssoc = _ipAddressDao.findById(ipId); if (ipToAssoc != null) { - Network network = _networksDao.findById(networkId); - if (network == null) { - throw new InvalidParameterValueException("Invalid network id is given"); - } - - DataCenter zone = _configMgr.getZone(network.getDataCenterId()); - if (network.getGuestType() == Network.GuestType.Shared && zone.getNetworkType() == NetworkType.Advanced) { - if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId())) { - _accountMgr.checkAccess(UserContext.current().getCaller(), AccessType.UseNetwork, false, network); - } else { - throw new InvalidParameterValueException("IP can be associated with guest network of 'shared' type only if" + - "network service Source Nat, Static Nat, Port Forwarding, Load balancing, firewall are enabled in the network"); - } - } else { _accountMgr.checkAccess(caller, null, true, ipToAssoc); - } owner = _accountMgr.getAccount(ipToAssoc.getAllocatedToAccountId()); } else { s_logger.debug("Unable to find ip address by id: " + ipId); return null; } - + if (ipToAssoc.getAssociatedWithNetworkId() != null) { s_logger.debug("IP " + ipToAssoc + " is already assocaited with network id" + networkId); return ipToAssoc; } - + Network network = _networksDao.findById(networkId); if (network != null) { _accountMgr.checkAccess(owner, AccessType.UseNetwork, false, network); @@ -1156,7 +738,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.debug("Unable to find ip address by id: " + ipId); return null; } - + DataCenter zone = _configMgr.getZone(network.getDataCenterId()); // allow associating IP addresses to guest network only @@ -1164,25 +746,21 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag throw new InvalidParameterValueException("Ip address can be associated to the network with trafficType " + TrafficType.Guest); } - // Check that network belongs to IP owner - skip this check - // - if zone is basic zone as there is just one guest network, - // - if shared network in Advanced zone - // - and it belongs to the system - if (network.getAccountId() != owner.getId()) { - if (zone.getNetworkType() != NetworkType.Basic && !(zone.getNetworkType() == NetworkType.Advanced && network.getGuestType() == Network.GuestType.Shared)) { + // Check that network belongs to IP owner - skip this check for Basic zone as there is just one guest network, + // and it belongs to the system + if (zone.getNetworkType() != NetworkType.Basic && network.getAccountId() != owner.getId()) { throw new InvalidParameterValueException("The owner of the network is not the same as owner of the IP"); } - } - - // In Advance zone only allow to do IP assoc - // - for Isolated networks with source nat service enabled - // - for shared networks with source nat service enabled - if (zone.getNetworkType() == NetworkType.Advanced && (!areServicesSupportedInNetwork(network.getId(), Service.SourceNat))) { + + // In Advance zone only allow to do IP assoc for Isolated networks with source nat service enabled + if (zone.getNetworkType() == NetworkType.Advanced && + !(network.getGuestType() == GuestType.Isolated && _networkModel.areServicesSupportedInNetwork(network.getId(), + Service.SourceNat))) { throw new InvalidParameterValueException("In zone of type " + NetworkType.Advanced + " ip address can be associated only to the network of guest type " + GuestType.Isolated + " with the " + Service.SourceNat.getName() + " enabled"); } - + NetworkOffering offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); boolean sharedSourceNat = offering.getSharedSourceNat(); boolean isSourceNat = false; @@ -1193,15 +771,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } } - + s_logger.debug("Associating ip " + ipToAssoc + " to network " + network); - + IPAddressVO ip = _ipAddressDao.findById(ipId); //update ip address with networkId ip.setAssociatedWithNetworkId(networkId); ip.setSourceNat(isSourceNat); _ipAddressDao.update(ipId, ip); - + boolean success = false; try { success = applyIpAssociations(network, false); @@ -1229,7 +807,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } } - + @Override @DB @@ -1288,26 +866,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag _configs = _configDao.getConfiguration("Network", params); _networkDomain = _configs.get(Config.GuestDomainSuffix.key()); - _cidrLimit = NumbersUtil.parseInt(_configs.get(Config.NetworkGuestCidrLimit.key()), 22); _networkLockTimeout = NumbersUtil.parseInt(_configs.get(Config.NetworkLockTimeout.key()), 600); - NetworkOfferingVO publicNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPublicNetwork, TrafficType.Public, true); - publicNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(publicNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemPublicNetwork, publicNetworkOffering); - NetworkOfferingVO managementNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemManagementNetwork, TrafficType.Management, false); - managementNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(managementNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemManagementNetwork, managementNetworkOffering); - NetworkOfferingVO controlNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemControlNetwork, TrafficType.Control, false); - controlNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(controlNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemControlNetwork, controlNetworkOffering); - NetworkOfferingVO storageNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemStorageNetwork, TrafficType.Storage, true); - storageNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(storageNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemStorageNetwork, storageNetworkOffering); - NetworkOfferingVO privateGatewayNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, - GuestType.Isolated); - privateGatewayNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(privateGatewayNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, privateGatewayNetworkOffering); - _privateOfferingId = privateGatewayNetworkOffering.getId(); + // populate providers @@ -1343,8 +904,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag defaultIsolatedSourceNatEnabledNetworkOfferingProviders.put(Service.StaticNat, defaultProviders); defaultIsolatedSourceNatEnabledNetworkOfferingProviders.put(Service.PortForwarding, defaultProviders); defaultIsolatedSourceNatEnabledNetworkOfferingProviders.put(Service.Vpn, defaultProviders); - - + + Map> defaultVPCOffProviders = new HashMap>(); defaultProviders.clear(); @@ -1401,7 +962,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag offering.setState(NetworkOffering.State.Enabled); _networkOfferingDao.update(offering.getId(), offering); } - + if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks) == null) { offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks, "Offering for Isolated VPC networks with Source Nat service enabled", TrafficType.Guest, @@ -1410,7 +971,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag offering.setState(NetworkOffering.State.Enabled); _networkOfferingDao.update(offering.getId(), offering); } - + if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksNoLB) == null) { //remove LB service defaultVPCOffProviders.remove(Service.Lb); @@ -1430,7 +991,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag offering.setState(NetworkOffering.State.Enabled); _networkOfferingDao.update(offering.getId(), offering); } - + Map> netscalerServiceProviders = new HashMap>(); Set vrProvider = new HashSet(); vrProvider.add(Provider.VirtualRouter); @@ -1444,7 +1005,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag netscalerServiceProviders.put(Service.SecurityGroup, sgProvider); netscalerServiceProviders.put(Service.StaticNat, nsProvider); netscalerServiceProviders.put(Service.Lb, nsProvider); - + Map> serviceCapabilityMap = new HashMap>(); Map elb = new HashMap(); elb.put(Capability.ElasticLb, "true"); @@ -1452,7 +1013,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag eip.put(Capability.ElasticIp, "true"); serviceCapabilityMap.put(Service.Lb, elb); serviceCapabilityMap.put(Service.StaticNat, eip); - + if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedEIPandELBNetworkOffering) == null) { offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultSharedEIPandELBNetworkOffering, "Offering for Shared networks with Elastic IP and Elastic LB capabilities", TrafficType.Guest, null, true, Availability.Optional, null, netscalerServiceProviders, true, Network.GuestType.Shared, false, null, true, serviceCapabilityMap, true); @@ -1463,12 +1024,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag txn.commit(); - AccountsUsingNetworkSearch = _accountDao.createSearchBuilder(); - SearchBuilder networkAccountSearch = _networksDao.createSearchBuilderForAccount(); - AccountsUsingNetworkSearch.join("nc", networkAccountSearch, AccountsUsingNetworkSearch.entity().getId(), networkAccountSearch.entity().getAccountId(), JoinType.INNER); - networkAccountSearch.and("config", networkAccountSearch.entity().getNetworkId(), SearchCriteria.Op.EQ); - networkAccountSearch.and("owner", networkAccountSearch.entity().isOwner(), SearchCriteria.Op.EQ); - AccountsUsingNetworkSearch.done(); AssignIpAddressSearch = _ipAddressDao.createSearchBuilder(); AssignIpAddressSearch.and("dc", AssignIpAddressSearch.entity().getDataCenterId(), Op.EQ); @@ -1492,27 +1047,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag AssignIpAddressFromPodVlanSearch.join("vlan", podVlanSearch, podVlanSearch.entity().getId(), AssignIpAddressFromPodVlanSearch.entity().getVlanId(), JoinType.INNER); AssignIpAddressFromPodVlanSearch.done(); - IpAddressSearch = _ipAddressDao.createSearchBuilder(); - IpAddressSearch.and("accountId", IpAddressSearch.entity().getAllocatedToAccountId(), Op.EQ); - IpAddressSearch.and("dataCenterId", IpAddressSearch.entity().getDataCenterId(), Op.EQ); - IpAddressSearch.and("vpcId", IpAddressSearch.entity().getVpcId(), Op.EQ); - IpAddressSearch.and("associatedWithNetworkId", IpAddressSearch.entity().getAssociatedWithNetworkId(), Op.EQ); - SearchBuilder virtualNetworkVlanSB = _vlanDao.createSearchBuilder(); - virtualNetworkVlanSB.and("vlanType", virtualNetworkVlanSB.entity().getVlanType(), Op.EQ); - IpAddressSearch.join("virtualNetworkVlanSB", virtualNetworkVlanSB, IpAddressSearch.entity().getVlanId(), virtualNetworkVlanSB.entity().getId(), JoinBuilder.JoinType.INNER); - IpAddressSearch.done(); - - NicForTrafficTypeSearch = _nicDao.createSearchBuilder(); - SearchBuilder networkSearch = _networksDao.createSearchBuilder(); - NicForTrafficTypeSearch.join("network", networkSearch, networkSearch.entity().getId(), NicForTrafficTypeSearch.entity().getNetworkId(), JoinType.INNER); - NicForTrafficTypeSearch.and("instance", NicForTrafficTypeSearch.entity().getInstanceId(), Op.EQ); - networkSearch.and("traffictype", networkSearch.entity().getTrafficType(), Op.EQ); - NicForTrafficTypeSearch.done(); - _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("Network-Scavenger")); - _allowSubdomainNetworkAccess = Boolean.valueOf(_configs.get(Config.SubDomainNetworkAccess.key())); - _agentMgr.registerForHostEvents(this, true, false, true); s_logger.info("Network Manager is configured."); @@ -1527,36 +1063,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override public boolean start() { - - // populate s_serviceToImplementedProvidersMap & s_providerToNetworkElementMap with current _networkElements - // Need to do this in start() since _networkElements are not completely configured until then. - for (NetworkElement element : _networkElements) { - Map> capabilities = element.getCapabilities(); - Provider implementedProvider = element.getProvider(); - if (implementedProvider != null) { - if (s_providerToNetworkElementMap.containsKey(implementedProvider.getName())) { - s_logger.error("Cannot start NetworkManager: Provider <-> NetworkElement must be a one-to-one map, " + - "multiple NetworkElements found for Provider: " + implementedProvider.getName()); - return false; - } - s_logger.info("add element/provider mapping. provider: " + implementedProvider.getName() + " -> " + element.getName() - + ", class: " + ComponentContext.getTargetClass(element).getName()); - s_providerToNetworkElementMap.put(implementedProvider.getName(), element.getName()); - } - if (capabilities != null && implementedProvider != null) { - for (Service service : capabilities.keySet()) { - if (s_serviceToImplementedProvidersMap.containsKey(service)) { - List providers = s_serviceToImplementedProvidersMap.get(service); - providers.add(implementedProvider); - } else { - List providers = new ArrayList(); - providers.add(implementedProvider); - s_serviceToImplementedProvidersMap.put(service, providers); - } - } - } - } - _executor.scheduleWithFixedDelay(new NetworkGarbageCollector(), _networkGcInterval, _networkGcInterval, TimeUnit.SECONDS); return true; } @@ -1570,47 +1076,18 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @Override - public List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat) { - SearchCriteria sc = IpAddressSearch.create(); - sc.setParameters("accountId", accountId); - sc.setParameters("associatedWithNetworkId", associatedNetworkId); - - if (sourceNat != null) { - sc.addAnd("sourceNat", SearchCriteria.Op.EQ, sourceNat); - } - sc.setJoinParameters("virtualNetworkVlanSB", "vlanType", VlanType.VirtualNetwork); - - return _ipAddressDao.search(sc, null); - } - - @Override - public List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat) { - SearchCriteria sc = IpAddressSearch.create(); - sc.setParameters("accountId", accountId); - sc.setParameters("dataCenterId", dcId); - - if (sourceNat != null) { - sc.addAnd("sourceNat", SearchCriteria.Op.EQ, sourceNat); - } - sc.setJoinParameters("virtualNetworkVlanSB", "vlanType", VlanType.VirtualNetwork); - - return _ipAddressDao.search(sc, null); - } - - - @Override - public List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, + public List setupNetwork(Account owner, NetworkOffering offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) - throws ConcurrentOperationException { + throws ConcurrentOperationException { return setupNetwork(owner, offering, null, plan, name, displayText, false, null, null, null, null); } @Override @DB - public List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, DeploymentPlan + public List setupNetwork(Account owner, NetworkOffering offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException { - + Account locked = _accountDao.acquireInLockTable(owner.getId()); if (locked == null) { throw new ConcurrentOperationException("Unable to acquire lock on " + owner); @@ -1708,18 +1185,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - @Override - public List getSystemAccountNetworkOfferings(String... offeringNames) { - List offerings = new ArrayList(offeringNames.length); - for (String offeringName : offeringNames) { - NetworkOfferingVO network = _systemNetworks.get(offeringName); - if (network == null) { - throw new CloudRuntimeException("Unable to find system network profile for " + offeringName); - } - offerings.add(network); - } - return offerings; - } + @Override @DB @@ -1739,26 +1205,26 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag for (Pair network : networks) { NetworkVO config = network.first(); NicProfile requested = network.second(); - + Boolean isDefaultNic = false; if (vm != null && (requested != null && requested.isDefaultNic())) { isDefaultNic = true; } - + while (deviceIds[deviceId] && deviceId < deviceIds.length) { deviceId++; } - + Pair vmNicPair = allocateNic(requested, config, isDefaultNic, deviceId, vm); - + NicProfile vmNic = vmNicPair.first(); if (vmNic == null) { continue; } - + deviceId = vmNicPair.second(); - + int devId = vmNic.getDeviceId(); if (devId > deviceIds.length) { throw new IllegalArgumentException("Device id for nic is too large: " + vmNic); @@ -1768,18 +1234,18 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } deviceIds[devId] = true; - + if (vmNic.isDefaultNic()) { if (defaultNic != null) { throw new IllegalArgumentException("You cannot specify two nics as default nics: nic 1 = " + - defaultNic + "; nic 2 = " + vmNic); + defaultNic + "; nic 2 = " + vmNic); } defaultNic = vmNic; } - + nics.add(vmNic); vm.addNic(vmNic); - + } if (nics.size() != networks.size()) { @@ -1793,14 +1259,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag txn.commit(); } - - + + @DB @Override public Pair allocateNic(NicProfile requested, Network network, Boolean isDefaultNic, int deviceId, VirtualMachineProfile vm) throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException{ - + NetworkVO ntwkVO = _networksDao.findById(network.getId()); s_logger.debug("Allocating nic for vm " + vm.getVirtualMachine() + " in network " + network + " with requested profile " + requested); NetworkGuru guru = AdapterBase.getAdapterByName(_networkGurus, ntwkVO.getGuruName()); @@ -1828,12 +1294,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag deviceId = applyProfileToNic(vo, profile, deviceId); vo = _nicDao.persist(vo); - - Integer networkRate = getNetworkRate(network.getId(), vm.getId()); + + Integer networkRate = _networkModel.getNetworkRate(network.getId(), vm.getId()); NicProfile vmNic = new NicProfile(vo, network, vo.getBroadcastUri(), vo.getIsolationUri(), networkRate, - isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), - network)); - + _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vm.getHypervisorType(), + network)); + return new Pair(vmNic, Integer.valueOf(deviceId)); } @@ -1919,9 +1385,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag to.setDns2(profile.getDns2()); } - Integer networkRate = getNetworkRate(config.getId(), null); + Integer networkRate = _networkModel.getNetworkRate(config.getId(), null); to.setNetworkRateMbps(networkRate); - + to.setUuid(config.getUuid()); return to; @@ -1942,7 +1408,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag ex.addProxyObject(ApiDBUtils.findNetworkById(networkId).getUuid()); throw ex; } - + if (s_logger.isDebugEnabled()) { s_logger.debug("Lock is acquired for network id " + networkId + " as a part of network implement"); } @@ -1950,21 +1416,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag try { NetworkGuru guru = AdapterBase.getAdapterByName(_networkGurus, network.getGuruName()); Network.State state = network.getState(); - if (state == Network.State.Implemented || state == Network.State.Implementing) { + if (state == Network.State.Implemented || state == Network.State.Setup || state == Network.State.Implementing) { s_logger.debug("Network id=" + networkId + " is already implemented"); implemented.set(guru, network); return implemented; } - if (state == Network.State.Setup) { - DataCenterVO zone = _dcDao.findById(network.getDataCenterId()); - if (!isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) || (zone.getNetworkType() == NetworkType.Basic)) { - s_logger.debug("Network id=" + networkId + " is already implemented"); - implemented.set(guru, network); - return implemented; - } - } - if (s_logger.isDebugEnabled()) { s_logger.debug("Asking " + guru.getName() + " to implement " + network); } @@ -2000,7 +1457,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag shutdownNetwork(networkId, context, false); } - + _networksDao.releaseFromLockTable(networkId); if (s_logger.isDebugEnabled()) { s_logger.debug("Lock is released for network id " + networkId + " as a part of network implement"); @@ -2013,21 +1470,21 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return super.equals(o); //To change body of overridden methods use File | Settings | File Templates. } - private void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, + @Override + public void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, NetworkVO network, NetworkOfferingVO offering) - throws ConcurrentOperationException, InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException { + throws ConcurrentOperationException, InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException { - // Associate a source NAT IP (if one isn't already associated with the network) if this is a - // 1) 'Isolated' or 'Shared' guest virtual network in the advance zone - // 2) network has sourceNat service - // 3) network offering does not support a shared source NAT rule + // If this is a 1) guest virtual network 2) network has sourceNat service 3) network offering does not support a + // Shared source NAT rule, + // associate a source NAT IP (if one isn't already associated with the network) boolean sharedSourceNat = offering.getSharedSourceNat(); DataCenter zone = _dcDao.findById(network.getDataCenterId()); - if (!sharedSourceNat && areServicesSupportedInNetwork(network.getId(), Service.SourceNat) - && (network.getGuestType() == Network.GuestType.Isolated || - (network.getGuestType() == Network.GuestType.Shared && zone.getNetworkType() == NetworkType.Advanced))) { - + if (network.getGuestType() == Network.GuestType.Isolated + && _networkModel.areServicesSupportedInNetwork(network.getId(), Service.SourceNat) + && !sharedSourceNat) { + List ips = null; if (network.getVpcId() != null) { ips = _ipAddressDao.listByAssociatedVpc(network.getVpcId(), true); @@ -2049,7 +1506,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag List providersToImplement = getNetworkProviders(network.getId()); for (NetworkElement element : _networkElements) { if (providersToImplement.contains(element.getProvider())) { - if (!isProviderEnabledInPhysicalNetwork(getPhysicalNetworkId(network), element.getProvider().getName())) { + if (!_networkModel.isProviderEnabledInPhysicalNetwork(_networkModel.getPhysicalNetworkId(network), element.getProvider().getName())) { // The physicalNetworkId will not get translated into a uuid by the reponse serializer, // because the serializer would look up the NetworkVO class's table and retrieve the // network id instead of the physical network id. @@ -2087,14 +1544,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag ConcurrentOperationException, ResourceUnavailableException { element.prepare(network, profile, vmProfile, dest, context); if (vmProfile.getType() == Type.User && vmProfile.getHypervisorType() != HypervisorType.BareMetal && element.getProvider() != null) { - if (areServicesSupportedInNetwork(network.getId(), Service.Dhcp) && - isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, element.getProvider()) && + if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.Dhcp) && + _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, element.getProvider()) && (element instanceof DhcpServiceProvider)) { DhcpServiceProvider sp = (DhcpServiceProvider) element; sp.addDhcpEntry(network, profile, vmProfile, dest, context); } - if (areServicesSupportedInNetwork(network.getId(), Service.UserData) && - isProviderSupportServiceInNetwork(network.getId(), Service.UserData, element.getProvider()) && + if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.UserData) && + _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.UserData, element.getProvider()) && (element instanceof UserDataServiceProvider)) { UserDataServiceProvider sp = (UserDataServiceProvider) element; sp.addPasswordAndUserdata(network, profile, vmProfile, dest, context); @@ -2113,16 +1570,16 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag _networksDao.changeActiveNicsBy(networkId, count); } - if (nic.getVmType() == VirtualMachine.Type.User || (nic.getVmType() == VirtualMachine.Type.DomainRouter && getNetwork(networkId).getTrafficType() == TrafficType.Guest)) { + if (nic.getVmType() == VirtualMachine.Type.User || (nic.getVmType() == VirtualMachine.Type.DomainRouter && _networksDao.findById(networkId).getTrafficType() == TrafficType.Guest)) { _networksDao.setCheckForGc(networkId); } - + txn.commit(); } @Override public void prepare(VirtualMachineProfile vmProfile, DeployDestination dest, ReservationContext context) throws InsufficientCapacityException, - ConcurrentOperationException, ResourceUnavailableException { + ConcurrentOperationException, ResourceUnavailableException { List nics = _nicDao.listByVmId(vmProfile.getId()); // we have to implement default nics first - to ensure that default network elements start up first in multiple @@ -2141,7 +1598,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag for (NicVO nic : nics) { Pair implemented = implementNetwork(nic.getNetworkId(), dest, context); - + NetworkVO network = implemented.second(); NicProfile profile = prepareNic(vmProfile, dest, context, nic.getId(), network); vmProfile.addNic(profile); @@ -2151,13 +1608,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override public NicProfile prepareNic(VirtualMachineProfile vmProfile, DeployDestination dest, ReservationContext context, long nicId, NetworkVO network) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, - ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - - Integer networkRate = getNetworkRate(network.getId(), vmProfile.getId()); + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + + Integer networkRate = _networkModel.getNetworkRate(network.getId(), vmProfile.getId()); NetworkGuru guru = AdapterBase.getAdapterByName(_networkGurus, network.getGuruName()); NicVO nic = _nicDao.findById(nicId); - + NicProfile profile = null; if (nic.getReservationStrategy() == Nic.ReservationStrategy.Start) { nic.setState(Nic.State.Reserving); @@ -2172,7 +1629,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag profile = new NicProfile(nic, network, broadcastUri, isolationUri, - networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vmProfile.getHypervisorType(), network)); + networkRate, _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vmProfile.getHypervisorType(), network)); guru.reserve(profile, network, vmProfile, dest, context); nic.setIp4Address(profile.getIp4Address()); nic.setAddressFormat(profile.getFormat()); @@ -2192,7 +1649,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag updateNic(nic, network.getId(), 1); } else { profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), - networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vmProfile.getHypervisorType(), network)); + networkRate, _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vmProfile.getHypervisorType(), network)); guru.updateNicProfile(profile, network); nic.setState(Nic.State.Reserved); updateNic(nic, network.getId(), 1); @@ -2205,7 +1662,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag prepareElement(element, network, profile, vmProfile, dest, context); } - profile.setSecurityGroupEnabled(isSecurityGroupSupportedInNetwork(network)); + profile.setSecurityGroupEnabled(_networkModel.isSecurityGroupSupportedInNetwork(network)); guru.updateNicProfile(profile, network); return profile; } @@ -2215,11 +1672,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag List nics = _nicDao.listByVmId(vm.getId()); for (NicVO nic : nics) { NetworkVO network = _networksDao.findById(nic.getNetworkId()); - Integer networkRate = getNetworkRate(network.getId(), vm.getId()); + Integer networkRate = _networkModel.getNetworkRate(network.getId(), vm.getId()); NetworkGuru guru = AdapterBase.getAdapterByName(_networkGurus, network.getGuruName()); NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), networkRate, - isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); + _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vm.getHypervisorType(), network)); guru.updateNicProfile(profile, network); vm.addNic(profile); } @@ -2228,7 +1685,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @DB public void release(VirtualMachineProfile vmProfile, boolean forced) throws - ConcurrentOperationException, ResourceUnavailableException { + ConcurrentOperationException, ResourceUnavailableException { List nics = _nicDao.listByVmId(vmProfile.getId()); for (NicVO nic : nics) { releaseNic(vmProfile, nic); @@ -2256,7 +1713,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag throw new ConcurrentOperationException("Unable to acquire lock on nic " + nic); } - Nic.State originalState = nic.getState(); + Nic.State originalState = nic.getState(); NetworkVO network = _networksDao.findById(nicVO.getNetworkId()); if (originalState == Nic.State.Reserved || originalState == Nic.State.Reserving) { @@ -2265,7 +1722,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag nic.setState(Nic.State.Releasing); _nicDao.update(nic.getId(), nic); NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), null, - isSecurityGroupSupportedInNetwork(network), getNetworkTag(vmProfile.getHypervisorType(), network)); + _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vmProfile.getHypervisorType(), network)); if (guru.release(profile, vmProfile, nic.getReservationId())) { applyProfileToNicForRelease(nic, profile); nic.setState(Nic.State.Allocated); @@ -2287,7 +1744,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag //implementations. Consider removing it from interface Element element.release(network, profile, vmProfile, null); } - + } else { nic.setState(Nic.State.Allocated); updateNic(nic, network.getId(), -1); @@ -2296,180 +1753,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - @Override - public List getNics(long vmId) { - return _nicDao.listByVmId(vmId); - } - - @Override - public List getNicProfiles(VirtualMachine vm) { - List nics = _nicDao.listByVmId(vm.getId()); - List profiles = new ArrayList(); - - if (nics != null) { - for (Nic nic : nics) { - NetworkVO network = _networksDao.findById(nic.getNetworkId()); - Integer networkRate = getNetworkRate(network.getId(), vm.getId()); - - NetworkGuru guru = AdapterBase.getAdapterByName(_networkGurus, network.getGuruName()); - NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), - networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); - guru.updateNicProfile(profile, network); - profiles.add(profile); - } - } - return profiles; - } - - @Override - public NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri) { - NicVO nic = null; - if (broadcastUri != null) { - nic = _nicDao.findByNetworkIdInstanceIdAndBroadcastUri(networkId, vm.getId(), broadcastUri); - } else { - nic = _nicDao.findByInstanceIdAndNetworkId(networkId, vm.getId()); - } - NetworkVO network = _networksDao.findById(networkId); - Integer networkRate = getNetworkRate(network.getId(), vm.getId()); - - NetworkGuru guru = AdapterBase.getAdapterByName(_networkGurus, network.getGuruName()); - NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), - networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); - guru.updateNicProfile(profile, network); - - return profile; - } - - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_NET_IP_RELEASE, eventDescription = "disassociating Ip", async = true) - public boolean releaseIpAddress(long ipAddressId) throws InsufficientAddressCapacityException { - Long userId = UserContext.current().getCallerUserId(); - Account caller = UserContext.current().getCaller(); - - // Verify input parameters - IPAddressVO ipVO = _ipAddressDao.findById(ipAddressId); - if (ipVO == null) { - throw new InvalidParameterValueException("Unable to find ip address by id"); - } - - if (ipVO.getAllocatedTime() == null) { - s_logger.debug("Ip Address id= " + ipAddressId + " is not allocated, so do nothing."); - return true; - } - - // verify permissions - if (ipVO.getAllocatedToAccountId() != null) { - _accountMgr.checkAccess(caller, null, true, ipVO); - } - - if (ipVO.isSourceNat()) { - throw new IllegalArgumentException("ip address is used for source nat purposes and can not be disassociated."); - } - - VlanVO vlan = _vlanDao.findById(ipVO.getVlanId()); - if (!vlan.getVlanType().equals(VlanType.VirtualNetwork)) { - throw new IllegalArgumentException("only ip addresses that belong to a virtual network may be disassociated."); - } - - // Check for account wide pool. It will have an entry for account_vlan_map. - if (_accountVlanMapDao.findAccountVlanMap(ipVO.getAllocatedToAccountId(), ipVO.getVlanId()) != null) { - //see IPaddressVO.java - InvalidParameterValueException ex = new InvalidParameterValueException("Sepcified IP address uuid belongs to" + - " Account wide IP pool and cannot be disassociated"); - ex.addProxyObject("user_ip_address", ipAddressId, "ipAddressId"); - throw ex; - } - - // don't allow releasing system ip address - if (ipVO.getSystem()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Can't release system IP address with specified id"); - ex.addProxyObject(ipVO, ipVO.getId(), "systemIpAddrId"); - throw ex; - } - - boolean success = disassociatePublicIpAddress(ipAddressId, userId, caller); - - if (success) { - Long networkId = ipVO.getAssociatedWithNetworkId(); - if (networkId != null) { - Network guestNetwork = getNetwork(networkId); - NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); - Long vmId = ipVO.getAssociatedWithVmId(); - if (offering.getElasticIp() && vmId != null) { - _rulesMgr.getSystemIpAndEnableStaticNatForVm(_userVmDao.findById(vmId), true); - return true; - } - } - } else { - s_logger.warn("Failed to release public ip address id=" + ipAddressId); - } - return success; - } - - @Deprecated - // No one is using this method. - public AccountVO getNetworkOwner(long networkId) { - SearchCriteria sc = AccountsUsingNetworkSearch.create(); - sc.setJoinParameters("nc", "config", networkId); - sc.setJoinParameters("nc", "owner", true); - List accounts = _accountDao.search(sc, null); - return accounts.size() != 0 ? accounts.get(0) : null; - } - - @Deprecated - // No one is using this method. - public List getNetworksforOffering(long offeringId, long dataCenterId, long accountId) { - return _networksDao.getNetworksForOffering(offeringId, dataCenterId, accountId); - } - - @Override - public String getNextAvailableMacAddressInNetwork(long networkId) throws InsufficientAddressCapacityException { - String mac = _networksDao.getNextAvailableMacAddress(networkId); - if (mac == null) { - throw new InsufficientAddressCapacityException("Unable to create another mac address", Network.class, networkId); - } - return mac; - } - - @Override - @DB - public Network getNetwork(long id) { - return _networksDao.findById(id); - } - - @Override - @DB - public Network getNetwork(String uuid) { - return _networksDao.findByUuid(uuid); - } - - @Override - public List getRemoteAccessVpnElements() { - List elements = new ArrayList(); - for (NetworkElement element : _networkElements) { - if (element instanceof RemoteAccessVPNServiceProvider) { - RemoteAccessVPNServiceProvider e = (RemoteAccessVPNServiceProvider) element; - elements.add(e); - } - } - - return elements; - } - - @Override - public List getSite2SiteVpnElements() { - List elements = new ArrayList(); - for (NetworkElement element : _networkElements) { - if (element instanceof Site2SiteVpnServiceProvider) { - Site2SiteVpnServiceProvider e = (Site2SiteVpnServiceProvider) element; - elements.add(e); - } - } - - return elements; - } - @Override public void cleanupNics(VirtualMachineProfile vm) { if (s_logger.isDebugEnabled()) { @@ -2481,7 +1764,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag removeNic(vm, nic); } } - + @Override public void removeNic(VirtualMachineProfile vm, Nic nic) { removeNic(vm, _nicDao.findById(nic.getId())); @@ -2492,7 +1775,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag _nicDao.update(nic.getId(), nic); NetworkVO network = _networksDao.findById(nic.getNetworkId()); NicProfile profile = new NicProfile(nic, network, null, null, null, - isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); + _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vm.getHypervisorType(), network)); NetworkGuru guru = AdapterBase.getAdapterByName(_networkGurus, network.getGuruName()); guru.deallocate(network, profile, vm); _nicDao.remove(nic.getId()); @@ -2507,352 +1790,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - private void checkSharedNetworkCidrOverlap(Long zoneId, long physicalNetworkId, String cidr) { - if (zoneId == null || cidr == null) { - return; - } - DataCenter zone = _dcDao.findById(zoneId); - List networks = _networksDao.listByZone(zoneId); - Map networkToCidr = new HashMap(); - - // check for CIDR overlap with all possible CIDR for isolated guest networks - // in the zone when using external networking - PhysicalNetworkVO pNetwork = _physicalNetworkDao.findById(physicalNetworkId); - if (pNetwork.getVnet() != null) { - String vlanRange[] = pNetwork.getVnet().split("-"); - int lowestVlanTag = Integer.valueOf(vlanRange[0]); - int highestVlanTag = Integer.valueOf(vlanRange[1]); - for (int vlan=lowestVlanTag; vlan <= highestVlanTag; ++vlan) { - int offset = vlan - lowestVlanTag; - String globalVlanBits = _configDao.getValue(Config.GuestVlanBits.key()); - int cidrSize = 8 + Integer.parseInt(globalVlanBits); - String guestNetworkCidr = zone.getGuestNetworkCidr(); - String[] cidrTuple = guestNetworkCidr.split("\\/"); - long newCidrAddress = (NetUtils.ip2Long(cidrTuple[0]) & 0xff000000) | (offset << (32 - cidrSize)); - if (NetUtils.isNetworksOverlap(NetUtils.long2Ip(newCidrAddress), cidr)) { - throw new InvalidParameterValueException("Specified CIDR for shared network conflict with CIDR that is reserved for zone vlan " + vlan); - } - } - } - - // check for CIDR overlap with all CIDR's of the shared networks in the zone - for (NetworkVO network : networks) { - if (network.getGuestType() == GuestType.Isolated) { - continue; - } - if (network.getCidr() != null) { - networkToCidr.put(network.getId(), network.getCidr()); - } - } - if (networkToCidr != null && !networkToCidr.isEmpty()) { - for (long networkId : networkToCidr.keySet()) { - String ntwkCidr = networkToCidr.get(networkId); - if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { - throw new InvalidParameterValueException("Specified CIDR for shared network conflict with CIDR of a shared network in the zone."); - } - } - } - } - public void checkVirtualNetworkCidrOverlap(Long zoneId, String cidr) { - if (zoneId == null) { - return; - } - if (cidr == null) { - return; - } - List networks = _networksDao.listByZone(zoneId); - Map networkToCidr = new HashMap(); - for (NetworkVO network : networks) { - if (network.getGuestType() != GuestType.Isolated) { - continue; - } - if (network.getCidr() != null) { - networkToCidr.put(network.getId(), network.getCidr()); - } - } - if (networkToCidr == null || networkToCidr.isEmpty()) { - return; - } - - for (long networkId : networkToCidr.keySet()) { - String ntwkCidr = networkToCidr.get(networkId); - if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { - throw new InvalidParameterValueException("Warning: The specified existing network has conflict CIDR subnets with new network!"); - } - } - } - - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_NETWORK_CREATE, eventDescription = "creating network") - public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException { - Long networkOfferingId = cmd.getNetworkOfferingId(); - String gateway = cmd.getGateway(); - String startIP = cmd.getStartIp(); - String endIP = cmd.getEndIp(); - String netmask = cmd.getNetmask(); - String networkDomain = cmd.getNetworkDomain(); - String vlanId = cmd.getVlan(); - String name = cmd.getNetworkName(); - String displayText = cmd.getDisplayText(); - Account caller = UserContext.current().getCaller(); - Long physicalNetworkId = cmd.getPhysicalNetworkId(); - Long zoneId = cmd.getZoneId(); - String aclTypeStr = cmd.getAclType(); - Long domainId = cmd.getDomainId(); - boolean isDomainSpecific = false; - Boolean subdomainAccess = cmd.getSubdomainAccess(); - Long vpcId = cmd.getVpcId(); - - // Validate network offering - NetworkOfferingVO ntwkOff = _networkOfferingDao.findById(networkOfferingId); - if (ntwkOff == null || ntwkOff.isSystemOnly()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find network offering by specified id"); - if (ntwkOff != null) { - ex.addProxyObject(ntwkOff, networkOfferingId, "networkOfferingId"); - // Get the VO object's table name. - String tablename = AnnotationHelper.getTableName(ntwkOff); - if (tablename != null) { - ex.addProxyObject(tablename, networkOfferingId, "networkOfferingId"); - } else { - s_logger.info("\nCould not retrieve table name (annotation) from " + tablename + " VO proxy object\n"); - } - throw ex; - } - throw ex; - } - // validate physical network and zone - // Check if physical network exists - PhysicalNetwork pNtwk = null; - if (physicalNetworkId != null) { - pNtwk = _physicalNetworkDao.findById(physicalNetworkId); - if (pNtwk == null) { - throw new InvalidParameterValueException("Unable to find a physical network having the specified physical network id"); - } - } - - if (zoneId == null) { - zoneId = pNtwk.getDataCenterId(); - } - - DataCenter zone = _dcDao.findById(zoneId); - if (zone == null) { - throw new InvalidParameterValueException("Specified zone id was not found"); - } - - if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(caller.getType())) { - // See DataCenterVO.java - PermissionDeniedException ex = new PermissionDeniedException("Cannot perform this operation since specified Zone is currently disabled"); - ex.addProxyObject(zone, zoneId, "zoneId"); - throw ex; - } - - // Only domain and account ACL types are supported in Acton. - ACLType aclType = null; - if (aclTypeStr != null) { - if (aclTypeStr.equalsIgnoreCase(ACLType.Account.toString())) { - aclType = ACLType.Account; - } else if (aclTypeStr.equalsIgnoreCase(ACLType.Domain.toString())) { - aclType = ACLType.Domain; - } else { - throw new InvalidParameterValueException("Incorrect aclType specified. Check the API documentation for supported types"); - } - // In 3.0 all Shared networks should have aclType == Domain, all Isolated networks aclType==Account - if (ntwkOff.getGuestType() == GuestType.Isolated) { - if (aclType != ACLType.Account) { - throw new InvalidParameterValueException("AclType should be " + ACLType.Account + " for network of type " + Network.GuestType.Isolated); - } - } else if (ntwkOff.getGuestType() == GuestType.Shared) { - if (!(aclType == ACLType.Domain || aclType == ACLType.Account)) { - throw new InvalidParameterValueException("AclType should be " + ACLType.Domain + " or " + - ACLType.Account + " for network of type " + Network.GuestType.Shared); - } - } - } else { - if (ntwkOff.getGuestType() == GuestType.Isolated) { - aclType = ACLType.Account; - } else if (ntwkOff.getGuestType() == GuestType.Shared) { - aclType = ACLType.Domain; - } - } - - // Only Admin can create Shared networks - if (ntwkOff.getGuestType() == GuestType.Shared && !_accountMgr.isAdmin(caller.getType())) { - throw new InvalidParameterValueException("Only Admins can create network with guest type " + GuestType.Shared); - } - - // Check if the network is domain specific - if (aclType == ACLType.Domain) { - // only Admin can create domain with aclType=Domain - if (!_accountMgr.isAdmin(caller.getType())) { - throw new PermissionDeniedException("Only admin can create networks with aclType=Domain"); - } - - // only shared networks can be Domain specific - if (ntwkOff.getGuestType() != GuestType.Shared) { - throw new InvalidParameterValueException("Only " + GuestType.Shared + " networks can have aclType=" + ACLType.Domain); - } - - if (domainId != null) { - if (ntwkOff.getTrafficType() != TrafficType.Guest || ntwkOff.getGuestType() != Network.GuestType.Shared) { - throw new InvalidParameterValueException("Domain level networks are supported just for traffic type " - + TrafficType.Guest + " and guest type " + Network.GuestType.Shared); - } - - DomainVO domain = _domainDao.findById(domainId); - if (domain == null) { - throw new InvalidParameterValueException("Unable to find domain by specified id"); - } - _accountMgr.checkAccess(caller, domain); - } - isDomainSpecific = true; - - } else if (subdomainAccess != null) { - throw new InvalidParameterValueException("Parameter subDomainAccess can be specified only with aclType=Domain"); - } - Account owner = null; - if ((cmd.getAccountName() != null && domainId != null) || cmd.getProjectId() != null) { - owner = _accountMgr.finalizeOwner(caller, cmd.getAccountName(), domainId, cmd.getProjectId()); - } else { - owner = caller; - } - - UserContext.current().setAccountId(owner.getAccountId()); - - // VALIDATE IP INFO - // if end ip is not specified, default it to startIp - if (startIP != null) { - if (!NetUtils.isValidIp(startIP)) { - throw new InvalidParameterValueException("Invalid format for the startIp parameter"); - } - if (endIP == null) { - endIP = startIP; - } else if (!NetUtils.isValidIp(endIP)) { - throw new InvalidParameterValueException("Invalid format for the endIp parameter"); - } - } - - if (startIP != null && endIP != null) { - if (!(gateway != null && netmask != null)) { - throw new InvalidParameterValueException("gateway and netmask should be defined when startIP/endIP are passed in"); - } - } - - String cidr = null; - if (gateway != null && netmask != null) { - if (!NetUtils.isValidIp(gateway)) { - throw new InvalidParameterValueException("Invalid gateway"); - } - if (!NetUtils.isValidNetmask(netmask)) { - throw new InvalidParameterValueException("Invalid netmask"); - } - - cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask); - } - - // Regular user can create Guest Isolated Source Nat enabled network only - if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL - && (ntwkOff.getTrafficType() != TrafficType.Guest || ntwkOff.getGuestType() != Network.GuestType.Isolated - && areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))) { - throw new InvalidParameterValueException("Regular user can create a network only from the network" + - " offering having traffic type " + TrafficType.Guest + " and network type " - + Network.GuestType.Isolated + " with a service " + Service.SourceNat.getName() + " enabled"); - } - - // Don't allow to specify vlan if the caller is a regular user - if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL && (ntwkOff.getSpecifyVlan() || vlanId != null)) { - throw new InvalidParameterValueException("Regular user is not allowed to specify vlanId"); - } - - // For non-root admins check cidr limit - if it's allowed by global config value - if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN && cidr != null) { - - String[] cidrPair = cidr.split("\\/"); - int cidrSize = Integer.valueOf(cidrPair[1]); - - if (cidrSize < _cidrLimit) { - throw new InvalidParameterValueException("Cidr size can't be less than " + _cidrLimit); - } - } - - Collection ntwkProviders = finalizeServicesAndProvidersForNetwork(ntwkOff, physicalNetworkId).values(); - if (cidr != null && providersConfiguredForExternalNetworking(ntwkProviders)) { - if (ntwkOff.getGuestType() == GuestType.Shared && (zone.getNetworkType() == NetworkType.Advanced) && - isSharedNetworkOfferingWithServices(networkOfferingId)) { - // validate if CIDR specified overlaps with any of the CIDR's allocated for isolated networks and shared networks in the zone - checkSharedNetworkCidrOverlap(zoneId, pNtwk.getId(), cidr); - } else { - throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external devices!"); - } - } - - - // Vlan is created in 2 cases - works in Advance zone only: - // 1) GuestType is Shared - // 2) GuestType is Isolated, but SourceNat service is disabled - boolean createVlan = (startIP != null && endIP != null && zone.getNetworkType() == NetworkType.Advanced - && ((ntwkOff.getGuestType() == Network.GuestType.Shared) - || (ntwkOff.getGuestType() == GuestType.Isolated && - !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat)))); - - // Can add vlan range only to the network which allows it - if (createVlan && !ntwkOff.getSpecifyIpRanges()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Network offering with specified id doesn't support adding multiple ip ranges"); - ex.addProxyObject(ntwkOff, ntwkOff.getId(), "networkOfferingId"); - String tablename = AnnotationHelper.getTableName(ntwkOff); - if (tablename != null) { - ex.addProxyObject(tablename, ntwkOff.getId(), "networkOfferingId"); - } else { - s_logger.info("\nCould not retrieve table name (annotation) from " + tablename + " VO proxy object\n"); - } - throw ex; - } - - Transaction txn = Transaction.currentTxn(); - txn.start(); - - Long sharedDomainId = null; - if (isDomainSpecific) { - if (domainId != null) { - sharedDomainId = domainId; - } else { - sharedDomainId = _domainMgr.getDomain(Domain.ROOT_DOMAIN).getId(); - subdomainAccess = true; - } - } - - // default owner to system if network has aclType=Domain - if (aclType == ACLType.Domain) { - owner = _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM); - } - - //Create guest network - Network network = null; - if (vpcId != null) { - if (!_configMgr.isOfferingForVpc(ntwkOff)){ - throw new InvalidParameterValueException("Network offering can't be used for VPC networks"); - } - network = _vpcMgr.createVpcGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, - networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, caller); - } else { - if (_configMgr.isOfferingForVpc(ntwkOff)){ - throw new InvalidParameterValueException("Network offering can be used for VPC networks only"); - } - network = createGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, - networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId); - } - - if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN && createVlan) { - // Create vlan ip range - _configMgr.createVlanAndPublicIpRange(pNtwk.getDataCenterId(), network.getId(), physicalNetworkId, - false, null, startIP, endIP, gateway, netmask, vlanId, null); - } - - txn.commit(); - - return network; - } @Override @DB @@ -2867,7 +1805,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.warn("Only guest networks can be created using this method"); return null; } - + boolean updateResourceCount = resourceCountNeedsUpdate(ntwkOff, aclType); //check resource limits if (updateResourceCount) { @@ -2898,17 +1836,17 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (aclType == null || aclType != ACLType.Domain) { throw new InvalidParameterValueException("Only AclType=Domain can be specified for network creation in Basic zone"); } - + // Only one guest network is supported in Basic zone List guestNetworks = _networksDao.listByZoneAndTrafficType(zone.getId(), TrafficType.Guest); if (!guestNetworks.isEmpty()) { throw new InvalidParameterValueException("Can't have more than one Guest network in zone with network type " - + NetworkType.Basic); + + NetworkType.Basic); } // if zone is basic, only Shared network offerings w/o source nat service are allowed if (!(ntwkOff.getGuestType() == GuestType.Shared && - !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))) { + !_networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))) { throw new InvalidParameterValueException("For zone of type " + NetworkType.Basic + " only offerings of " + "guestType " + GuestType.Shared + " with disabled " + Service.SourceNat.getName() + " service are allowed"); @@ -2939,13 +1877,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // Only Account specific Isolated network with sourceNat service disabled are allowed in security group // enabled zone boolean allowCreation = (ntwkOff.getGuestType() == GuestType.Isolated - && !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat)); + && !_networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat)); if (!allowCreation) { throw new InvalidParameterValueException("Only Account specific Isolated network with sourceNat " + "service disabled are allowed in security group enabled zone"); } } - + //don't allow eip/elb networks in Advance zone if (ntwkOff.getElasticIp() || ntwkOff.getElasticLb()) { throw new InvalidParameterValueException("Elastic IP and Elastic LB services are supported in zone of type " + NetworkType.Basic); @@ -2967,21 +1905,20 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // For Isolated networks, don't allow to create network with vlan that already exists in the zone if (ntwkOff.getGuestType() == GuestType.Isolated) { if (_networksDao.countByZoneAndUri(zoneId, uri) > 0) { - throw new InvalidParameterValueException("Network with vlan " + vlanId + " already exists in zone " + zoneId); - } - } else { - //don't allow to creating shared network with given Vlan ID, if there already exists a isolated network or - //shared network with same Vlan ID in the zone - if (_networksDao.countByZoneUriAndGuestType(zoneId, uri, GuestType.Isolated) > 0 || - _networksDao.countByZoneUriAndGuestType(zoneId, uri, GuestType.Shared) > 0) { - throw new InvalidParameterValueException("There is a isolated/shared network with vlan id: " + vlanId + " already exists " + "in zone " + zoneId); + throw new InvalidParameterValueException("Network with vlan " + vlanId + " already exists in zone " + zoneId); } + } else { + //don't allow to create Shared network with Vlan that already exists in the zone for Isolated networks + if (_networksDao.countByZoneUriAndGuestType(zoneId, uri, GuestType.Isolated) > 0) { + throw new InvalidParameterValueException("Isolated network with vlan " + vlanId + " already exists " + + "in zone " + zoneId); + } + } } - } - + // If networkDomain is not specified, take it from the global configuration - if (areServicesSupportedByNetworkOffering(networkOfferingId, Service.Dns)) { - Map dnsCapabilities = getNetworkOfferingServiceCapabilities + if (_networkModel.areServicesSupportedByNetworkOffering(networkOfferingId, Service.Dns)) { + Map dnsCapabilities = _networkModel.getNetworkOfferingServiceCapabilities (_configMgr.getNetworkOffering(networkOfferingId), Service.Dns); String isUpdateDnsSupported = dnsCapabilities.get(Capability.AllowDnsSuffixModification); if (isUpdateDnsSupported == null || !Boolean.valueOf(isUpdateDnsSupported)) { @@ -2994,9 +1931,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (networkDomain == null) { // 1) Get networkDomain from the corresponding account/domain/zone if (aclType == ACLType.Domain) { - networkDomain = getDomainNetworkDomain(domainId, zoneId); + networkDomain = _networkModel.getDomainNetworkDomain(domainId, zoneId); } else if (aclType == ACLType.Account) { - networkDomain = getAccountNetworkDomain(owner.getId(), zoneId); + networkDomain = _networkModel.getAccountNetworkDomain(owner.getId(), zoneId); } // 2) If null, generate networkDomain using domain suffix from the global config variables @@ -3009,7 +1946,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (!NetUtils.verifyDomainName(networkDomain)) { throw new InvalidParameterValueException( "Invalid network domain. Total length shouldn't exceed 190 chars. Each domain " + - "label must be between 1 and 63 characters long, can contain ASCII letters 'a' through 'z', the digits '0' through '9', " + "label must be between 1 and 63 characters long, can contain ASCII letters 'a' through 'z', the digits '0' through '9', " + "and the hyphen ('-'); can't start or end with \"-\""); } } @@ -3021,7 +1958,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // with different Cidrs for the same Shared network boolean cidrRequired = zone.getNetworkType() == NetworkType.Advanced && ntwkOff.getTrafficType() == TrafficType.Guest && (ntwkOff.getGuestType() == GuestType.Shared || (ntwkOff.getGuestType() == GuestType.Isolated - && !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))); + && !_networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))); if (cidr == null && cidrRequired) { throw new InvalidParameterValueException("StartIp/endIp/gateway/netmask are required when create network of" + " type " + Network.GuestType.Shared + " and network of type " + GuestType.Isolated + " with service " @@ -3086,7 +2023,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag network = networks.get(0); } } - + if (updateResourceCount) { _resourceLimitMgr.incrementResourceCount(owner.getId(), ResourceType.network); } @@ -3096,445 +2033,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return network; } - @Override - public List searchForNetworks(ListNetworksCmd cmd) { - Long id = cmd.getId(); - String keyword = cmd.getKeyword(); - Long zoneId = cmd.getZoneId(); - Account caller = UserContext.current().getCaller(); - Long domainId = cmd.getDomainId(); - String accountName = cmd.getAccountName(); - String guestIpType = cmd.getGuestIpType(); - String trafficType = cmd.getTrafficType(); - Boolean isSystem = cmd.getIsSystem(); - String aclType = cmd.getAclType(); - Long projectId = cmd.getProjectId(); - List permittedAccounts = new ArrayList(); - String path = null; - Long physicalNetworkId = cmd.getPhysicalNetworkId(); - List supportedServicesStr = cmd.getSupportedServices(); - Boolean restartRequired = cmd.getRestartRequired(); - boolean listAll = cmd.listAll(); - boolean isRecursive = cmd.isRecursive(); - Boolean specifyIpRanges = cmd.getSpecifyIpRanges(); - Long vpcId = cmd.getVpcId(); - Boolean canUseForDeploy = cmd.canUseForDeploy(); - Map tags = cmd.getTags(); - Boolean forVpc = cmd.getForVpc(); - // 1) default is system to false if not specified - // 2) reset parameter to false if it's specified by the regular user - if ((isSystem == null || caller.getType() == Account.ACCOUNT_TYPE_NORMAL) && id == null) { - isSystem = false; - } - - // Account/domainId parameters and isSystem are mutually exclusive - if (isSystem != null && isSystem && (accountName != null || domainId != null)) { - throw new InvalidParameterValueException("System network belongs to system, account and domainId parameters can't be specified"); - } - - if (domainId != null) { - DomainVO domain = _domainDao.findById(domainId); - if (domain == null) { - // see DomainVO.java - throw new InvalidParameterValueException("Specified domain id doesn't exist in the system"); - } - - _accountMgr.checkAccess(caller, domain); - if (accountName != null) { - Account owner = _accountMgr.getActiveAccountByName(accountName, domainId); - if (owner == null) { - // see DomainVO.java - throw new InvalidParameterValueException("Unable to find account " + accountName + " in specified domain"); - } - - _accountMgr.checkAccess(caller, null, true, owner); - permittedAccounts.add(owner.getId()); - } - } - - if (!_accountMgr.isAdmin(caller.getType()) || (!listAll && (projectId != null && projectId.longValue() != -1 && domainId == null))) { - permittedAccounts.add(caller.getId()); - domainId = caller.getDomainId(); - } - - // set project information - boolean skipProjectNetworks = true; - if (projectId != null) { - if (projectId.longValue() == -1) { - if (!_accountMgr.isAdmin(caller.getType())) { - permittedAccounts.addAll(_projectMgr.listPermittedProjectAccounts(caller.getId())); - } - } else { - permittedAccounts.clear(); - Project project = _projectMgr.getProject(projectId); - if (project == null) { - throw new InvalidParameterValueException("Unable to find project by specified id"); - } - if (!_projectMgr.canAccessProjectAccount(caller, project.getProjectAccountId())) { - // getProject() returns type ProjectVO. - InvalidParameterValueException ex = new InvalidParameterValueException("Account " + caller + " cannot access specified project id"); - ex.addProxyObject(project, projectId, "projectId"); - throw ex; - } - permittedAccounts.add(project.getProjectAccountId()); - } - skipProjectNetworks = false; - } - - if (domainId != null) { - path = _domainDao.findById(domainId).getPath(); - } else { - path = _domainDao.findById(caller.getDomainId()).getPath(); - } - - if (listAll && domainId == null) { - isRecursive = true; - } - - Filter searchFilter = new Filter(NetworkVO.class, "id", false, cmd.getStartIndex(), cmd.getPageSizeVal()); - SearchBuilder sb = _networksDao.createSearchBuilder(); - - if (forVpc != null) { - if (forVpc) { - sb.and("vpc", sb.entity().getVpcId(), Op.NNULL); - } else { - sb.and("vpc", sb.entity().getVpcId(), Op.NULL); - } - } - - // Don't display networks created of system network offerings - SearchBuilder networkOfferingSearch = _networkOfferingDao.createSearchBuilder(); - networkOfferingSearch.and("systemOnly", networkOfferingSearch.entity().isSystemOnly(), SearchCriteria.Op.EQ); - if (isSystem != null && isSystem) { - networkOfferingSearch.and("trafficType", networkOfferingSearch.entity().getTrafficType(), SearchCriteria.Op.EQ); - } - sb.join("networkOfferingSearch", networkOfferingSearch, sb.entity().getNetworkOfferingId(), networkOfferingSearch.entity().getId(), JoinBuilder.JoinType.INNER); - - SearchBuilder zoneSearch = _dcDao.createSearchBuilder(); - zoneSearch.and("networkType", zoneSearch.entity().getNetworkType(), SearchCriteria.Op.EQ); - sb.join("zoneSearch", zoneSearch, sb.entity().getDataCenterId(), zoneSearch.entity().getId(), JoinBuilder.JoinType.INNER); - sb.and("removed", sb.entity().getRemoved(), Op.NULL); - - if (tags != null && !tags.isEmpty()) { - SearchBuilder tagSearch = _resourceTagDao.createSearchBuilder(); - for (int count=0; count < tags.size(); count++) { - tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ); - tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ); - tagSearch.cp(); - } - tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ); - sb.groupBy(sb.entity().getId()); - sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER); - } - - if (permittedAccounts.isEmpty()) { - SearchBuilder domainSearch = _domainDao.createSearchBuilder(); - domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); - sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); - } - - - SearchBuilder accountSearch = _accountDao.createSearchBuilder(); - accountSearch.and("typeNEQ", accountSearch.entity().getType(), SearchCriteria.Op.NEQ); - accountSearch.and("typeEQ", accountSearch.entity().getType(), SearchCriteria.Op.EQ); - - - sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); - - List networksToReturn = new ArrayList(); - - if (isSystem == null || !isSystem) { - if (!permittedAccounts.isEmpty()) { - //get account level networks - networksToReturn.addAll(listAccountSpecificNetworks( - buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, - physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, - permittedAccounts)); - //get domain level networks - if (domainId != null) { - networksToReturn - .addAll(listDomainLevelNetworks( - buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, - physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, - domainId, false)); - } - } else { - //add account specific networks - networksToReturn.addAll(listAccountSpecificNetworksByDomainPath( - buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, - physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, path, - isRecursive)); - //add domain specific networks of domain + parent domains - networksToReturn.addAll(listDomainSpecificNetworksByDomainPath( - buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, - physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, path, - isRecursive)); - //add networks of subdomains - if (domainId == null) { - networksToReturn - .addAll(listDomainLevelNetworks( - buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, - physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, - caller.getDomainId(), true)); - } - } - } else { - networksToReturn = _networksDao.search(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, - guestIpType, trafficType, physicalNetworkId, null, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), - searchFilter); - } - - if (supportedServicesStr != null && !supportedServicesStr.isEmpty() && !networksToReturn.isEmpty()) { - List supportedNetworks = new ArrayList(); - Service[] suppportedServices = new Service[supportedServicesStr.size()]; - int i = 0; - for (String supportedServiceStr : supportedServicesStr) { - Service service = Service.getService(supportedServiceStr); - if (service == null) { - throw new InvalidParameterValueException("Invalid service specified " + supportedServiceStr); - } else { - suppportedServices[i] = service; - } - i++; - } - - for (NetworkVO network : networksToReturn) { - if (areServicesSupportedInNetwork(network.getId(), suppportedServices)) { - supportedNetworks.add(network); - } - } - - networksToReturn=supportedNetworks; - } - - if (canUseForDeploy != null) { - List networksForDeploy = new ArrayList(); - for (NetworkVO network : networksToReturn) { - if (canUseForDeploy(network) == canUseForDeploy) { - networksForDeploy.add(network); - } - } - - networksToReturn=networksForDeploy; - } - - return networksToReturn; - } - - @Override - public boolean canUseForDeploy(Network network) { - if (network.getTrafficType() != TrafficType.Guest) { - return false; - } - boolean hasFreeIps = true; - if (network.getGuestType() == GuestType.Shared) { - hasFreeIps = _ipAddressDao.countFreeIPsInNetwork(network.getId()) > 0; - } else { - hasFreeIps = (getAvailableIps(network, null)).size() > 0; - } - - return hasFreeIps; - } - - private SearchCriteria buildNetworkSearchCriteria(SearchBuilder sb, String keyword, Long id, - Boolean isSystem, Long zoneId, String guestIpType, String trafficType, Long physicalNetworkId, - String aclType, boolean skipProjectNetworks, Boolean restartRequired, Boolean specifyIpRanges, Long vpcId, Map tags) { - - SearchCriteria sc = sb.create(); - - if (isSystem != null) { - sc.setJoinParameters("networkOfferingSearch", "systemOnly", isSystem); - } - - if (keyword != null) { - SearchCriteria ssc = _networksDao.createSearchCriteria(); - ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - sc.addAnd("name", SearchCriteria.Op.SC, ssc); - } - - if (id != null) { - sc.addAnd("id", SearchCriteria.Op.EQ, id); - } - - if (zoneId != null) { - sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); - } - - if (guestIpType != null) { - sc.addAnd("guestType", SearchCriteria.Op.EQ, guestIpType); - } - - if (trafficType != null) { - sc.addAnd("trafficType", SearchCriteria.Op.EQ, trafficType); - } - - if (aclType != null) { - sc.addAnd("aclType", SearchCriteria.Op.EQ, aclType.toString()); - } - - if (physicalNetworkId != null) { - sc.addAnd("physicalNetworkId", SearchCriteria.Op.EQ, physicalNetworkId); - } - - if (skipProjectNetworks) { - sc.setJoinParameters("accountSearch", "typeNEQ", Account.ACCOUNT_TYPE_PROJECT); - } else { - sc.setJoinParameters("accountSearch", "typeEQ", Account.ACCOUNT_TYPE_PROJECT); - } - - if (restartRequired != null) { - sc.addAnd("restartRequired", SearchCriteria.Op.EQ, restartRequired); - } - - if (specifyIpRanges != null) { - sc.addAnd("specifyIpRanges", SearchCriteria.Op.EQ, specifyIpRanges); - } - - if (vpcId != null) { - sc.addAnd("vpcId", SearchCriteria.Op.EQ, vpcId); - } - - if (tags != null && !tags.isEmpty()) { - int count = 0; - sc.setJoinParameters("tagSearch", "resourceType", TaggedResourceType.Network.toString()); - for (String key : tags.keySet()) { - sc.setJoinParameters("tagSearch", "key" + String.valueOf(count), key); - sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), tags.get(key)); - count++; - } - } - - return sc; - } - - private List listDomainLevelNetworks(SearchCriteria sc, Filter searchFilter, long domainId, boolean parentDomainsOnly) { - List networkIds = new ArrayList(); - Set allowedDomains = _domainMgr.getDomainParentIds(domainId); - List maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray()); - - for (NetworkDomainVO map : maps) { - if (map.getDomainId() == domainId && parentDomainsOnly) { - continue; - } - boolean subdomainAccess = (map.isSubdomainAccess() != null) ? map.isSubdomainAccess() : getAllowSubdomainAccessGlobal(); - if (map.getDomainId() == domainId || subdomainAccess) { - networkIds.add(map.getNetworkId()); - } - } - - if (!networkIds.isEmpty()) { - SearchCriteria domainSC = _networksDao.createSearchCriteria(); - domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray()); - domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString()); - - sc.addAnd("id", SearchCriteria.Op.SC, domainSC); - return _networksDao.search(sc, searchFilter); - } else { - return new ArrayList(); - } - } - - private List listAccountSpecificNetworks(SearchCriteria sc, Filter searchFilter, List permittedAccounts) { - SearchCriteria accountSC = _networksDao.createSearchCriteria(); - if (!permittedAccounts.isEmpty()) { - accountSC.addAnd("accountId", SearchCriteria.Op.IN, permittedAccounts.toArray()); - } - - accountSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Account.toString()); - - sc.addAnd("id", SearchCriteria.Op.SC, accountSC); - return _networksDao.search(sc, searchFilter); - } - - private List listAccountSpecificNetworksByDomainPath(SearchCriteria sc, Filter searchFilter, String path, boolean isRecursive) { - SearchCriteria accountSC = _networksDao.createSearchCriteria(); - accountSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Account.toString()); - - if (path != null) { - if (isRecursive) { - sc.setJoinParameters("domainSearch", "path", path + "%"); - } else { - sc.setJoinParameters("domainSearch", "path", path); - } - } - - sc.addAnd("id", SearchCriteria.Op.SC, accountSC); - return _networksDao.search(sc, searchFilter); - } - - private List listDomainSpecificNetworksByDomainPath(SearchCriteria sc, Filter searchFilter, - String path, boolean isRecursive) { - - Set allowedDomains = new HashSet(); - if (path != null) { - if (isRecursive) { - allowedDomains = _domainMgr.getDomainChildrenIds(path); - } else { - Domain domain = _domainDao.findDomainByPath(path); - allowedDomains.add(domain.getId()); - } - } - - List networkIds = new ArrayList(); - - List maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray()); - - for (NetworkDomainVO map : maps) { - networkIds.add(map.getNetworkId()); - } - - if (!networkIds.isEmpty()) { - SearchCriteria domainSC = _networksDao.createSearchCriteria(); - domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray()); - domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString()); - - sc.addAnd("id", SearchCriteria.Op.SC, domainSC); - return _networksDao.search(sc, searchFilter); - } else { - return new ArrayList(); - } - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_NETWORK_DELETE, eventDescription = "deleting network", async = true) - public boolean deleteNetwork(long networkId) { - - Account caller = UserContext.current().getCaller(); - - // Verify network id - NetworkVO network = _networksDao.findById(networkId); - if (network == null) { - // see NetworkVO.java - - InvalidParameterValueException ex = new InvalidParameterValueException("unable to find network with specified id"); - ex.addProxyObject(network, networkId, "networkId"); - throw ex; - } - - // don't allow to delete system network - if (isNetworkSystem(network)) { - InvalidParameterValueException ex = new InvalidParameterValueException("Network with specified id is system and can't be removed"); - ex.addProxyObject(network, network.getId(), "networkId"); - throw ex; - } - - Account owner = _accountMgr.getAccount(network.getAccountId()); - - // Perform permission check - _accountMgr.checkAccess(caller, null, true, network); - - User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId()); - ReservationContext context = new ReservationContextImpl(null, null, callerUser, owner); - - return destroyNetwork(networkId, context); - } @Override @DB public boolean shutdownNetwork(long networkId, ReservationContext context, boolean cleanupElements) { boolean result = false; - + NetworkVO network = _networksDao.lockRow(networkId, true); if (network == null) { s_logger.debug("Unable to find network with id: " + networkId); @@ -3543,7 +2048,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (network.getState() != Network.State.Implemented && network.getState() != Network.State.Shutdown) { s_logger.debug("Network is not implemented: " + network); return false; - } + } network.setState(Network.State.Shutdown); _networksDao.update(network.getId(), network); @@ -3562,13 +2067,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag applyProfileToNetwork(network, profile); - DataCenterVO zone = _dcDao.findById(network.getDataCenterId()); - if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) && (zone.getNetworkType() == NetworkType.Advanced)) { - network.setState(Network.State.Setup); - } else { network.setState(Network.State.Allocated); - } - network.setRestartRequired(false); _networksDao.update(network.getId(), network); _networksDao.clearCheckForGc(networkId); @@ -3582,7 +2081,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return result; } - private boolean shutdownNetworkElementsAndResources(ReservationContext context, boolean cleanupElements, NetworkVO network) { + @Override + public boolean shutdownNetworkElementsAndResources(ReservationContext context, boolean cleanupElements, NetworkVO network) { // 1) Cleanup all the rules for the network. If it fails, just log the failure and proceed with shutting down // the elements boolean cleanupResult = true; @@ -3604,9 +2104,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag for (NetworkElement element : _networkElements) { if (providersToShutdown.contains(element.getProvider())) { try { - if (!isProviderEnabledInPhysicalNetwork(getPhysicalNetworkId(network), element.getProvider().getName())) { + if (!_networkModel.isProviderEnabledInPhysicalNetwork(_networkModel.getPhysicalNetworkId(network), element.getProvider().getName())) { s_logger.warn("Unable to complete shutdown of the network elements due to element: " + element.getName() + " either doesn't exist or not enabled in the physical network " - + getPhysicalNetworkId(network)); + + _networkModel.getPhysicalNetworkId(network)); success = false; } if (s_logger.isDebugEnabled()) { @@ -3658,7 +2158,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return false; } } - + //In Basic zone, make sure that there are no non-removed console proxies and SSVMs using the network DataCenter zone = _configMgr.getZone(network.getDataCenterId()); if (zone.getNetworkType() == NetworkType.Basic) { @@ -3691,9 +2191,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag for (NetworkElement element : _networkElements) { if (providersToDestroy.contains(element.getProvider())) { try { - if (!isProviderEnabledInPhysicalNetwork(getPhysicalNetworkId(network), element.getProvider().getName())) { + if (!_networkModel.isProviderEnabledInPhysicalNetwork(_networkModel.getPhysicalNetworkId(network), element.getProvider().getName())) { s_logger.warn("Unable to complete destroy of the network elements due to element: " + element.getName() + " either doesn't exist or not enabled in the physical network " - + getPhysicalNetworkId(network)); + + _networkModel.getPhysicalNetworkId(network)); success = false; } @@ -3756,7 +2256,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } protected boolean deleteVlansInNetwork(long networkId, long userId, Account callerAccount) { - + //cleanup Public vlans List publicVlans = _vlanDao.listVlansByNetworkId(networkId); boolean result = true; @@ -3766,7 +2266,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag result = false; } } - + //cleanup private vlans int privateIpAllocCount = _privateIpDao.countAllocatedByNetworkId(networkId); if (privateIpAllocCount > 0) { @@ -3780,29 +2280,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @Override - public boolean validateRule(FirewallRule rule) { - Network network = _networksDao.findById(rule.getNetworkId()); - Purpose purpose = rule.getPurpose(); - switch (purpose) { - case LoadBalancing: - LoadBalancingServiceProvider ne = getLoadBalancingProviderForNetwork(network); - if (!ne.validateLBRule(network, (LoadBalancingRule) rule)) { - return false; - } - break; - default: - s_logger.debug("Unable to validate network rules for purpose: " + purpose.toString()); - } - return true; - } - - protected boolean applyLbRules(Network network, List rules, LoadBalancingServiceProvider element) throws ResourceUnavailableException { - return element.applyLBRules(network, rules); - } - - @Override - /* The rules here is only the same kind of rule, e.g. all load balancing rules or all port forwarding rules */ - public boolean applyRules(List rules, boolean continueOnError) throws ResourceUnavailableException { + public boolean applyRules(List rules, FirewallRule.Purpose purpose, + NetworkRuleApplier applier, boolean continueOnError) throws ResourceUnavailableException { if (rules == null || rules.size() == 0) { s_logger.debug("There are no rules to forward to the network elements"); return true; @@ -3810,7 +2289,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag boolean success = true; Network network = _networksDao.findById(rules.get(0).getNetworkId()); - Purpose purpose = rules.get(0).getPurpose(); // get the list of public ip's owned by the network List userIps = _ipAddressDao.listByAssociatedNetwork(network.getId(), null); @@ -3826,71 +2304,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // the network so as to ensure IP is associated before applying rules (in add state) applyIpAssociations(network, false, continueOnError, publicIps); - Service service = null; - switch (purpose) { - case LoadBalancing: - service = Service.Lb; - break; - case PortForwarding: - service = Service.PortForwarding; - break; - case StaticNat: - case Firewall: - service = Service.Firewall; - break; - case NetworkACL: - service = Service.NetworkACL; - break; - default: - break; + try { + applier.applyRules(network, purpose, rules); + } catch (ResourceUnavailableException e) { + if (!continueOnError) { + throw e; } - - if (service != null) { - List providers = getProvidersForServiceInNetwork(network, service); - if (providers == null || providers.size() != 1) { - // FIXME: If there is a service not made available by network offering, then rule should not get created - // in first place. For now error out during the apply rules. - String msg = "Cannot find the " + service.getName() + " provider for network " + network.getId(); - s_logger.error(msg); - throw new CloudRuntimeException(msg); - } - NetworkElement ne = getElementImplementingProvider(providers.get(0).getName()); - try { - boolean handled; - switch (purpose) { - case LoadBalancing: - assert ne instanceof LoadBalancingServiceProvider; - handled = applyLbRules(network, (List)rules, (LoadBalancingServiceProvider) ne); - break; - case PortForwarding: - assert ne instanceof PortForwardingServiceProvider; - handled = ((PortForwardingServiceProvider) ne).applyPFRules(network, (List) rules); - break; - case StaticNat: - /* It's firewall rule for static nat, not static nat rule */ - /* Fall through */ - case Firewall: - assert ne instanceof FirewallServiceProvider; - handled = ((FirewallServiceProvider) ne).applyFWRules(network, rules); - break; - case NetworkACL: - assert ne instanceof NetworkACLServiceProvider; - handled = ((NetworkACLServiceProvider) ne).applyNetworkACLs(network, rules); - break; - default: - s_logger.debug("Unable to handle network rules for purpose: " + purpose.toString()); - handled = false; - } - s_logger.debug("Network Rules for network " + network.getId() + " were " + (handled ? "" : " not") + " handled by " + ne.getName()); - } catch (ResourceUnavailableException e) { - if (!continueOnError) { - throw e; - } - s_logger.warn("Problems with " + ne.getName() + " but pushing on", e); - success = false; - } - } else { - s_logger.debug("Unable to handle network rules for purpose: " + purpose.toString()); + s_logger.warn("Problems with applying " + purpose + " rules but pushing on", e); success = false; } @@ -3900,6 +2320,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return success; } + + + + public class NetworkGarbageCollector implements Runnable { @Override @@ -3932,14 +2356,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag for (Long networkId : shutdownList) { // If network is removed, unset gc flag for it - if (getNetwork(networkId) == null) { + if (_networksDao.findById(networkId) == null) { s_logger.debug("Network id=" + networkId + " is removed, so clearing up corresponding gc check"); _networksDao.clearCheckForGc(networkId); } else { try { User caller = _accountMgr.getSystemUser(); - Account owner = _accountMgr.getAccount(getNetwork(networkId).getAccountId()); + Account owner = _accountMgr.getAccount(_networksDao.findById(networkId).getAccountId()); ReservationContext context = new ReservationContextImpl(null, null, caller, owner); @@ -3955,49 +2379,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - @Override - @ActionEvent(eventType = EventTypes.EVENT_NETWORK_RESTART, eventDescription = "restarting network", async = true) - public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { - // This method restarts all network elements belonging to the network and re-applies all the rules - Long networkId = cmd.getNetworkId(); - User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId()); - Account callerAccount = _accountMgr.getActiveAccountById(callerUser.getAccountId()); - - // Check if network exists - NetworkVO network = _networksDao.findById(networkId); - if (network == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Network with specified id doesn't exist"); - ex.addProxyObject("networks", networkId, "networkId"); - throw ex; - } - - // Don't allow to restart network if it's not in Implemented/Setup state - if (!(network.getState() == Network.State.Implemented || network.getState() == Network.State.Setup)) { - throw new InvalidParameterValueException("Network is not in the right state to be restarted. Correct states are: " + Network.State.Implemented + ", " + Network.State.Setup); - } - - if (network.getBroadcastDomainType() == BroadcastDomainType.Lswitch ) { - /** - * Unable to restart these networks now. - * TODO Restarting a SDN based network requires updating the nics and the configuration - * in the controller. This requires a non-trivial rewrite of the restart procedure. - */ - throw new InvalidParameterException("Unable to restart a running SDN network."); - } - - _accountMgr.checkAccess(callerAccount, null, true, network); - - boolean success = restartNetwork(networkId, callerAccount, callerUser, cleanup); - - if (success) { - s_logger.debug("Network id=" + networkId + " is restarted successfully."); - } else { - s_logger.warn("Network id=" + networkId + " failed to restart."); - } - - return success; - } @Override public boolean startNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { @@ -4021,7 +2403,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - private boolean restartNetwork(long networkId, Account callerAccount, User callerUser, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + @Override + public boolean restartNetwork(Long networkId, Account callerAccount, User callerUser, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { NetworkVO network = _networksDao.findById(networkId); @@ -4116,204 +2499,21 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } } - + //apply network ACLs if (!_networkACLMgr.applyNetworkACLs(networkId, caller)) { s_logger.warn("Failed to reapply network ACLs as a part of of network id=" + networkId + " restart"); success = false; } - + return success; } - @Override - public int getActiveNicsInNetwork(long networkId) { + + protected int getActiveNicsInNetwork(long networkId) { return _networksDao.getActiveNicsIn(networkId); } - @Override - public Map> getNetworkCapabilities(long networkId) { - - Map> networkCapabilities = new HashMap>(); - - // list all services of this networkOffering - List servicesMap = _ntwkSrvcDao.getServicesInNetwork(networkId); - for (NetworkServiceMapVO instance : servicesMap) { - Service service = Service.getService(instance.getService()); - NetworkElement element = getElementImplementingProvider(instance.getProvider()); - if (element != null) { - Map> elementCapabilities = element.getCapabilities(); - ; - if (elementCapabilities != null) { - networkCapabilities.put(service, elementCapabilities.get(service)); - } - } - } - - return networkCapabilities; - } - - @Override - public Map getNetworkServiceCapabilities(long networkId, Service service) { - - if (!areServicesSupportedInNetwork(networkId, service)) { - // TBD: networkId to uuid. No VO object being passed. So we will need to call - // addProxyObject with hardcoded tablename. Or we should probably look up the correct dao proxy object. - throw new UnsupportedServiceException("Service " + service.getName() + " is not supported in the network id=" + networkId); - } - - Map serviceCapabilities = new HashMap(); - - // get the Provider for this Service for this offering - String provider = _ntwkSrvcDao.getProviderForServiceInNetwork(networkId, service); - - NetworkElement element = getElementImplementingProvider(provider); - if (element != null) { - Map> elementCapabilities = element.getCapabilities(); - ; - - if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { - throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider); - } - serviceCapabilities = elementCapabilities.get(service); - } - - return serviceCapabilities; - } - - @Override - public Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { - - if (!areServicesSupportedByNetworkOffering(offering.getId(), service)) { - // TBD: We should be sending networkOfferingId and not the offering object itself. - throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the network offering " + offering); - } - - Map serviceCapabilities = new HashMap(); - - // get the Provider for this Service for this offering - List providers = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(offering.getId(), service); - if (providers.isEmpty()) { - // TBD: We should be sending networkOfferingId and not the offering object itself. - throw new InvalidParameterValueException("Service " + service.getName() + " is not supported by the network offering " + offering); - } - - // FIXME - in post 3.0 we are going to support multiple providers for the same service per network offering, so - // we have to calculate capabilities for all of them - String provider = providers.get(0); - - // FIXME we return the capabilities of the first provider of the service - what if we have multiple providers - // for same Service? - NetworkElement element = getElementImplementingProvider(provider); - if (element != null) { - Map> elementCapabilities = element.getCapabilities(); - ; - - if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { - // TBD: We should be sending providerId and not the offering object itself. - throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider); - } - serviceCapabilities = elementCapabilities.get(service); - } - - return serviceCapabilities; - } - - @Override - public NetworkVO getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - // find system public network offering - Long networkOfferingId = null; - List offerings = _networkOfferingDao.listSystemNetworkOfferings(); - for (NetworkOfferingVO offering : offerings) { - if (offering.getTrafficType() == trafficType) { - networkOfferingId = offering.getId(); - break; - } - } - - if (networkOfferingId == null) { - throw new InvalidParameterValueException("Unable to find system network offering with traffic type " + trafficType); - } - - List networks = _networksDao.listBy(Account.ACCOUNT_ID_SYSTEM, networkOfferingId, zoneId); - if (networks == null || networks.isEmpty()) { - // TBD: send uuid instead of zoneId. Hardcode tablename in call to addProxyObject(). - throw new InvalidParameterValueException("Unable to find network with traffic type " + trafficType + " in zone " + zoneId); - } - return networks.get(0); - } - - @Override - public NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId) { - List networks = _networksDao.listByZoneSecurityGroup(zoneId); - if (networks == null || networks.isEmpty()) { - return null; - } - - if (networks.size() > 1) { - s_logger.debug("There are multiple network with security group enabled? select one of them..."); - } - return networks.get(0); - } - - @Override - public PublicIpAddress getPublicIpAddress(long ipAddressId) { - IPAddressVO addr = _ipAddressDao.findById(ipAddressId); - if (addr == null) { - return null; - } - - return new PublicIp(addr, _vlanDao.findById(addr.getVlanId()), NetUtils.createSequenceBasedMacAddress(addr.getMacAddress())); - } - - @Override - public List listPodVlans(long podId) { - List vlans = _vlanDao.listVlansForPodByType(podId, VlanType.DirectAttached); - return vlans; - } - - @Override - public List listNetworksUsedByVm(long vmId, boolean isSystem) { - List networks = new ArrayList(); - - List nics = _nicDao.listByVmId(vmId); - if (nics != null) { - for (Nic nic : nics) { - NetworkVO network = _networksDao.findByIdIncludingRemoved(nic.getNetworkId()); - - if (isNetworkSystem(network) == isSystem) { - networks.add(network); - } - } - } - - return networks; - } - - @Override - public Nic getNicInNetwork(long vmId, long networkId) { - return _nicDao.findByInstanceIdAndNetworkId(networkId, vmId); - } - - @Override - public String getIpInNetwork(long vmId, long networkId) { - Nic guestNic = getNicInNetwork(vmId, networkId); - assert (guestNic != null && guestNic.getIp4Address() != null) : "Vm doesn't belong to network associated with " + - "ipAddress or ip4 address is null"; - return guestNic.getIp4Address(); - } - - @Override - public String getIpInNetworkIncludingRemoved(long vmId, long networkId) { - Nic guestNic = getNicInNetworkIncludingRemoved(vmId, networkId); - assert (guestNic != null && guestNic.getIp4Address() != null) : "Vm doesn't belong to network associated with " + - "ipAddress or ip4 address is null"; - return guestNic.getIp4Address(); - } - - private Nic getNicInNetworkIncludingRemoved(long vmId, long networkId) { - return _nicDao.findByInstanceIdAndNetworkIdIncludingRemoved(networkId, vmId); - } @Override @DB @@ -4322,7 +2522,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag ResourceUnavailableException, ResourceAllocationException { Account owner = _accountMgr.getActiveAccountById(accountId); boolean createNetwork = false; - + if (guestNetwork != null && guestNetwork.getTrafficType() != TrafficType.Guest) { throw new InvalidParameterValueException("Network " + guestNetwork + " is not of a type " + TrafficType.Guest); } @@ -4346,20 +2546,20 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (createNetwork) { List requiredOfferings = _networkOfferingDao.listByAvailability(Availability.Required, false); if (requiredOfferings.size() < 1) { - throw new CloudRuntimeException("Unable to find network offering with availability=" + - Availability.Required + " to automatically create the network as part of createVlanIpRange"); + throw new CloudRuntimeException("Unable to find network offering with availability=" + + Availability.Required + " to automatically create the network as part of createVlanIpRange"); } if (requiredOfferings.get(0).getState() == NetworkOffering.State.Enabled) { - - long physicalNetworkId = findPhysicalNetworkId(zoneId, requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType()); + + long physicalNetworkId = _networkModel.findPhysicalNetworkId(zoneId, requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType()); // Validate physical network PhysicalNetwork physicalNetwork = _physicalNetworkDao.findById(physicalNetworkId); if (physicalNetwork == null) { throw new InvalidParameterValueException("Unable to find physical network with id: "+physicalNetworkId + " and tag: " +requiredOfferings.get(0).getTags()); } - + s_logger.debug("Creating network for account " + owner + " from the network offering id=" + - requiredOfferings.get(0).getId() + " as a part of createVlanIpRange process"); + requiredOfferings.get(0).getId() + " as a part of createVlanIpRange process"); guestNetwork = createGuestNetwork(requiredOfferings.get(0).getId(), owner.getAccountName() + "-network" , owner.getAccountName() + "-network", null, null, null, null, owner, null, physicalNetwork, zoneId, ACLType.Account, @@ -4408,20 +2608,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return true; } - @Override - public List getNicsForTraffic(long vmId, TrafficType type) { - SearchCriteria sc = NicForTrafficTypeSearch.create(); - sc.setParameters("instance", vmId); - sc.setJoinParameters("network", "traffictype", type); - - return _nicDao.search(sc, null); - } - - @Override - public IpAddress getIp(long ipAddressId) { - return _ipAddressDao.findById(ipAddressId); - } - @Override public NetworkProfile convertNetworkToNetworkProfile(long networkId) { NetworkVO network = _networksDao.findById(networkId); @@ -4432,41 +2618,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return profile; } - @Override - public Network getDefaultNetworkForVm(long vmId) { - Nic defaultNic = getDefaultNic(vmId); - if (defaultNic == null) { - return null; - } else { - return _networksDao.findById(defaultNic.getNetworkId()); - } - } - - @Override - public Nic getDefaultNic(long vmId) { - List nics = _nicDao.listByVmId(vmId); - Nic defaultNic = null; - if (nics != null) { - for (Nic nic : nics) { - if (nic.isDefaultNic()) { - defaultNic = nic; - break; - } - } - } else { - s_logger.debug("Unable to find default network for the vm; vm doesn't have any nics"); - return null; - } - - if (defaultNic == null) { - s_logger.debug("Unable to find default network for the vm; vm doesn't have default nic"); - } - - return defaultNic; - - } - - @Override public UserDataServiceProvider getPasswordResetProvider(Network network) { String passwordProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.UserData); @@ -4475,69 +2626,25 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.debug("Network " + network + " doesn't support service " + Service.UserData.getName()); return null; } - - return (UserDataServiceProvider)getElementImplementingProvider(passwordProvider); + + return (UserDataServiceProvider)_networkModel.getElementImplementingProvider(passwordProvider); } - @Override - public UserDataServiceProvider getUserDataUpdateProvider(Network network) { - String userDataProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.UserData); - - if (userDataProvider == null) { - s_logger.debug("Network " + network + " doesn't support service " + Service.UserData.getName()); - return null; - } - - return (UserDataServiceProvider)getElementImplementingProvider(userDataProvider); - } - - @Override - public boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId) { - boolean netscalerInNetwork = isProviderForNetwork(Network.Provider.Netscaler, networkId); - boolean juniperInNetwork = isProviderForNetwork(Network.Provider.JuniperSRX, networkId); - boolean f5InNetwork = isProviderForNetwork(Network.Provider.F5BigIp, networkId); - - if (netscalerInNetwork || juniperInNetwork || f5InNetwork) { - return true; - } else { - return false; - } - } - - public boolean providersConfiguredForExternalNetworking(Collection providers) { - for(String providerStr : providers){ - Provider provider = Network.Provider.getProvider(providerStr); - if(provider.isExternal()){ - return true; - } - } - return false; - } - - public boolean isSharedNetworkOfferingWithServices(long networkOfferingId) { + protected boolean isSharedNetworkOfferingWithServices(long networkOfferingId) { NetworkOfferingVO networkOffering = _networkOfferingDao.findById(networkOfferingId); if ( (networkOffering.getGuestType() == Network.GuestType.Shared) && ( - areServicesSupportedByNetworkOffering(networkOfferingId, Service.SourceNat) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.StaticNat) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.Firewall) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.PortForwarding) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.Lb))) { + _networkModel.areServicesSupportedByNetworkOffering(networkOfferingId, Service.SourceNat) || + _networkModel.areServicesSupportedByNetworkOffering(networkOfferingId, Service.StaticNat) || + _networkModel.areServicesSupportedByNetworkOffering(networkOfferingId, Service.Firewall) || + _networkModel.areServicesSupportedByNetworkOffering(networkOfferingId, Service.PortForwarding) || + _networkModel.areServicesSupportedByNetworkOffering(networkOfferingId, Service.Lb))) { return true; } return false; } @Override - public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { - return (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(networkOfferingId, services)); - } - - @Override - public boolean areServicesSupportedInNetwork(long networkId, Service... services) { - return (_ntwkSrvcDao.areServicesSupportedInNetwork(networkId, services)); - } - - private boolean cleanupIpResources(long ipId, long userId, Account caller) { + public boolean cleanupIpResources(long ipId, long userId, Account caller) { boolean success = true; // Revoke all firewall rules for the ip @@ -4585,45 +2692,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return success; } - @Override - public String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId) { - - List virtualNetworks = _networksDao.listByZoneAndGuestType(accountId, dataCenterId, Network.GuestType.Isolated, false); - - if (virtualNetworks.isEmpty()) { - s_logger.trace("Unable to find default Virtual network account id=" + accountId); - return null; - } - - NetworkVO virtualNetwork = virtualNetworks.get(0); - - NicVO networkElementNic = _nicDao.findByNetworkIdAndType(virtualNetwork.getId(), Type.DomainRouter); - - if (networkElementNic != null) { - return networkElementNic.getIp4Address(); - } else { - s_logger.warn("Unable to set find network element for the network id=" + virtualNetwork.getId()); - return null; - } - } - - @Override - public List listNetworksForAccount(long accountId, long zoneId, Network.GuestType type) { - List accountNetworks = _networksDao.listNetworksByAccount(accountId, zoneId, type, false); - return accountNetworks; - } - - @Override - public List listAllNetworksInAllZonesByType(Network.GuestType type) { - List networks = new ArrayList(); - for (NetworkVO network: _networksDao.listAll()) { - if (!isNetworkSystem(network)) { - networks.add(network); - } - } - return networks; - } - @DB @Override public IPAddressVO markIpAsUnavailable(long addrId) { @@ -4664,313 +2732,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return ip; } - @Override - public boolean isNetworkAvailableInDomain(long networkId, long domainId) { - Long networkDomainId = null; - Network network = getNetwork(networkId); - if (network.getGuestType() != Network.GuestType.Shared) { - s_logger.trace("Network id=" + networkId + " is not shared"); - return false; - } - NetworkDomainVO networkDomainMap = _networkDomainDao.getDomainNetworkMapByNetworkId(networkId); - if (networkDomainMap == null) { - s_logger.trace("Network id=" + networkId + " is shared, but not domain specific"); - return true; - } else { - networkDomainId = networkDomainMap.getDomainId(); - } - - if (domainId == networkDomainId.longValue()) { - return true; - } - - if (networkDomainMap.subdomainAccess) { - Set parentDomains = _domainMgr.getDomainParentIds(domainId); - - if (parentDomains.contains(domainId)) { - return true; - } - } - - return false; - } - - @Override - public Long getDedicatedNetworkDomain(long networkId) { - NetworkDomainVO networkMaps = _networkDomainDao.getDomainNetworkMapByNetworkId(networkId); - if (networkMaps != null) { - return networkMaps.getDomainId(); - } else { - return null; - } - } - - private boolean checkForNonStoppedVmInNetwork(long networkId) { - List vms = _userVmDao.listByNetworkIdAndStates(networkId, VirtualMachine.State.Starting, - VirtualMachine.State.Running, VirtualMachine.State.Migrating, VirtualMachine.State.Stopping); - return vms.isEmpty(); - } - - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_NETWORK_UPDATE, eventDescription = "updating network", async = true) - public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, - User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr) { - boolean restartNetwork = false; - - // verify input parameters - NetworkVO network = _networksDao.findById(networkId); - if (network == null) { - // see NetworkVO.java - InvalidParameterValueException ex = new InvalidParameterValueException("Specified network id doesn't exist in the system"); - ex.addProxyObject("networks", networkId, "networkId"); - throw ex; - } - - // don't allow to update network in Destroy state - if (network.getState() == Network.State.Destroy) { - throw new InvalidParameterValueException("Don't allow to update network in state " + Network.State.Destroy); - } - - // Don't allow to update system network - NetworkOffering offering = _networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId()); - if (offering.isSystemOnly()) { - throw new InvalidParameterValueException("Can't update system networks"); - } - - // allow to upgrade only Guest networks - if (network.getTrafficType() != Networks.TrafficType.Guest) { - throw new InvalidParameterValueException("Can't allow networks which traffic type is not " + TrafficType.Guest); - } - - _accountMgr.checkAccess(callerAccount, null, true, network); - - if (name != null) { - network.setName(name); - } - - if (displayText != null) { - network.setDisplayText(displayText); - } - - // network offering and domain suffix can be updated for Isolated networks only in 3.0 - if ((networkOfferingId != null || domainSuffix != null) && network.getGuestType() != GuestType.Isolated) { - throw new InvalidParameterValueException("NetworkOffering and domain suffix upgrade can be perfomed for Isolated networks only"); - } - - boolean networkOfferingChanged = false; - - long oldNetworkOfferingId = network.getNetworkOfferingId(); - if (networkOfferingId != null) { - - NetworkOfferingVO networkOffering = _networkOfferingDao.findById(networkOfferingId); - if (networkOffering == null || networkOffering.isSystemOnly()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find network offering with specified id"); - ex.addProxyObject(networkOffering, networkOfferingId, "networkOfferingId"); - throw ex; - } - - // network offering should be in Enabled state - if (networkOffering.getState() != NetworkOffering.State.Enabled) { - InvalidParameterValueException ex = new InvalidParameterValueException("Network offering with specified id is not in " + NetworkOffering.State.Enabled + " state, can't upgrade to it"); - ex.addProxyObject(networkOffering, networkOfferingId, "networkOfferingId"); - throw ex; - } - - - //can't update from vpc to non-vpc network offering - boolean forVpcNew = _configMgr.isOfferingForVpc(networkOffering); - boolean vorVpcOriginal = _configMgr.isOfferingForVpc(_configMgr.getNetworkOffering(oldNetworkOfferingId)); - if (forVpcNew != vorVpcOriginal) { - String errMsg = forVpcNew ? "a vpc offering " : "not a vpc offering"; - throw new InvalidParameterValueException("Can't update as the new offering is " + errMsg); - } - - if (networkOfferingId != oldNetworkOfferingId) { - NetworkOffering oldNtwkOff = _networkOfferingDao.findByIdIncludingRemoved(oldNetworkOfferingId); - Collection newProviders = finalizeServicesAndProvidersForNetwork(networkOffering, network.getPhysicalNetworkId()).values(); - Collection oldProviders = finalizeServicesAndProvidersForNetwork(oldNtwkOff, network.getPhysicalNetworkId()).values(); - - if (providersConfiguredForExternalNetworking(newProviders) != providersConfiguredForExternalNetworking(oldProviders) - && !changeCidr) { - throw new InvalidParameterValueException("Updating network failed since guest CIDR needs to be changed!"); - } - if (changeCidr) { - if (!checkForNonStoppedVmInNetwork(network.getId())) { - InvalidParameterValueException ex = new InvalidParameterValueException("All user vm of network of specified id should be stopped before changing CIDR!"); - ex.addProxyObject(network, networkId, "networkId"); - throw ex; - } - } - // check if the network is upgradable - if (!canUpgrade(network, oldNetworkOfferingId, networkOfferingId)) { - throw new InvalidParameterValueException("Can't upgrade from network offering " + oldNetworkOfferingId + " to " + networkOfferingId + "; check logs for more information"); - } - restartNetwork = true; - networkOfferingChanged = true; - } - } - Map newSvcProviders = new HashMap(); - if (networkOfferingChanged) { - newSvcProviders = finalizeServicesAndProvidersForNetwork(_configMgr.getNetworkOffering(networkOfferingId), network.getPhysicalNetworkId()); - } - - // don't allow to modify network domain if the service is not supported - if (domainSuffix != null) { - // validate network domain - if (!NetUtils.verifyDomainName(domainSuffix)) { - throw new InvalidParameterValueException( - "Invalid network domain. Total length shouldn't exceed 190 chars. Each domain label must be between 1 and 63 characters long, can contain ASCII letters 'a' through 'z', the digits '0' through '9', " - + "and the hyphen ('-'); can't start or end with \"-\""); - } - - long offeringId = oldNetworkOfferingId; - if (networkOfferingId != null) { - offeringId = networkOfferingId; - } - - Map dnsCapabilities = getNetworkOfferingServiceCapabilities(_configMgr.getNetworkOffering(offeringId), Service.Dns); - String isUpdateDnsSupported = dnsCapabilities.get(Capability.AllowDnsSuffixModification); - if (isUpdateDnsSupported == null || !Boolean.valueOf(isUpdateDnsSupported)) { - // TBD: use uuid instead of networkOfferingId. May need to hardcode tablename in call to addProxyObject(). - throw new InvalidParameterValueException("Domain name change is not supported by the network offering id=" + networkOfferingId); - } - - network.setNetworkDomain(domainSuffix); - // have to restart the network - restartNetwork = true; - } - - ReservationContext context = new ReservationContextImpl(null, null, callerUser, callerAccount); - // 1) Shutdown all the elements and cleanup all the rules. Don't allow to shutdown network in intermediate - // states - Shutdown and Implementing - boolean validStateToShutdown = (network.getState() == Network.State.Implemented || network.getState() == Network.State.Setup || network.getState() == Network.State.Allocated); - if (restartNetwork) { - if (validStateToShutdown) { - if (!changeCidr) { - s_logger.debug("Shutting down elements and resources for network id=" + networkId + " as a part of network update"); - - if (!shutdownNetworkElementsAndResources(context, true, network)) { - s_logger.warn("Failed to shutdown the network elements and resources as a part of network restart: " + network); - CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network elements and resources as a part of update to network of specified id"); - ex.addProxyObject(network, networkId, "networkId"); - throw ex; - } - } else { - // We need to shutdown the network, since we want to re-implement the network. - s_logger.debug("Shutting down network id=" + networkId + " as a part of network update"); - - if (!shutdownNetwork(network.getId(), context, true)) { - s_logger.warn("Failed to shutdown the network as a part of update to network with specified id"); - CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network as a part of update of specified network id"); - ex.addProxyObject(network, networkId, "networkId"); - throw ex; - } - } - } else { - CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network elements and resources as a part of update to network with specified id; network is in wrong state: " + network.getState()); - ex.addProxyObject(network, networkId, "networkId"); - throw ex; - } - } - - // 2) Only after all the elements and rules are shutdown properly, update the network VO - // get updated network - Network.State networkState = _networksDao.findById(networkId).getState(); - boolean validStateToImplement = (networkState == Network.State.Implemented || networkState == Network.State.Setup || networkState == Network.State.Allocated); - if (restartNetwork && !validStateToImplement) { - CloudRuntimeException ex = new CloudRuntimeException("Failed to implement the network elements and resources as a part of update to network with specified id; network is in wrong state: " + networkState); - ex.addProxyObject(network, networkId, "networkId"); - throw ex; - } - - if (networkOfferingId != null) { - if (networkOfferingChanged) { - Transaction txn = Transaction.currentTxn(); - txn.start(); - network.setNetworkOfferingId(networkOfferingId); - _networksDao.update(networkId, network, newSvcProviders); - // get all nics using this network - // log remove usage events for old offering - // log assign usage events for new offering - List nics = _nicDao.listByNetworkId(networkId); - for (NicVO nic : nics) { - if (nic.getReservationStrategy() == Nic.ReservationStrategy.PlaceHolder) { - continue; - } - long vmId = nic.getInstanceId(); - VMInstanceVO vm = _vmDao.findById(vmId); - if (vm == null) { - s_logger.error("Vm for nic " + nic.getId() + " not found with Vm Id:" + vmId); - continue; - } - long isDefault = (nic.isDefaultNic()) ? 1 : 0; - UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), null, oldNetworkOfferingId, null, 0L); - _usageEventDao.persist(usageEvent); - usageEvent = new UsageEventVO(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), vm.getHostName(), networkOfferingId, null, isDefault); - _usageEventDao.persist(usageEvent); - } - txn.commit(); - } else { - network.setNetworkOfferingId(networkOfferingId); - _networksDao.update(networkId, network, finalizeServicesAndProvidersForNetwork(_configMgr.getNetworkOffering(networkOfferingId), network.getPhysicalNetworkId())); - } - } else { - _networksDao.update(networkId, network); - } - - // 3) Implement the elements and rules again - if (restartNetwork) { - if (network.getState() != Network.State.Allocated) { - DeployDestination dest = new DeployDestination(_dcDao.findById(network.getDataCenterId()), null, null, null); - s_logger.debug("Implementing the network " + network + " elements and resources as a part of network update"); - try { - if (!changeCidr) { - implementNetworkElementsAndResources(dest, context, network, _networkOfferingDao.findById(network.getNetworkOfferingId())); - } else { - implementNetwork(network.getId(), dest, context); - } - } catch (Exception ex) { - s_logger.warn("Failed to implement network " + network + " elements and resources as a part of network update due to ", ex); - CloudRuntimeException e = new CloudRuntimeException("Failed to implement network (with specified id) elements and resources as a part of network update"); - e.addProxyObject(network, networkId, "networkId"); - throw e; - } - } - } - - return getNetwork(network.getId()); - } - - @Override - public Integer getNetworkRate(long networkId, Long vmId) { - VMInstanceVO vm = null; - if (vmId != null) { - vm = _vmDao.findById(vmId); - } - Network network = getNetwork(networkId); - NetworkOffering ntwkOff = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); - - // For default userVm Default network and domR guest/public network, get rate information from the service - // offering; for other situations get information - // from the network offering - boolean isUserVmsDefaultNetwork = false; - boolean isDomRGuestOrPublicNetwork = false; - if (vm != null) { - Nic nic = _nicDao.findByInstanceIdAndNetworkId(networkId, vmId); - if (vm.getType() == Type.User && nic != null && nic.isDefaultNic()) { - isUserVmsDefaultNetwork = true; - } else if (vm.getType() == Type.DomainRouter && ntwkOff != null && (ntwkOff.getTrafficType() == TrafficType.Public || ntwkOff.getTrafficType() == TrafficType.Guest)) { - isDomRGuestOrPublicNetwork = true; - } - } - if (isUserVmsDefaultNetwork || isDomRGuestOrPublicNetwork) { - return _configMgr.getServiceOfferingNetworkRate(vm.getServiceOfferingId()); - } else { - return _configMgr.getNetworkOfferingNetworkRate(ntwkOff.getId()); - } - } Random _rand = new Random(System.currentTimeMillis()); @@ -4982,7 +2744,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return null; } - Set availableIps = getAvailableIps(network, requestedIp); + Set availableIps = _networkModel.getAvailableIps(network, requestedIp); if (availableIps.isEmpty()) { return null; @@ -5009,86 +2771,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return result; } - protected Set getAvailableIps(Network network, String requestedIp) { - String[] cidr = network.getCidr().split("/"); - List ips = _nicDao.listIpAddressInNetwork(network.getId()); - Set allPossibleIps = NetUtils.getAllIpsFromCidr(cidr[0], Integer.parseInt(cidr[1])); - Set usedIps = new TreeSet(); - - for (String ip : ips) { - if (requestedIp != null && requestedIp.equals(ip)) { - s_logger.warn("Requested ip address " + requestedIp + " is already in use in network" + network); - return null; - } - - usedIps.add(NetUtils.ip2Long(ip)); - } - if (usedIps.size() != 0) { - allPossibleIps.removeAll(usedIps); - } - return allPossibleIps; - } - - - private String getZoneNetworkDomain(long zoneId) { - return _dcDao.findById(zoneId).getDomain(); - } - - private String getDomainNetworkDomain(long domainId, long zoneId) { - String networkDomain = null; - Long searchDomainId = domainId; - while(searchDomainId != null){ - DomainVO domain = _domainDao.findById(searchDomainId); - if(domain.getNetworkDomain() != null){ - networkDomain = domain.getNetworkDomain(); - break; - } - searchDomainId = domain.getParent(); - } - if (networkDomain == null) { - return getZoneNetworkDomain(zoneId); - } - return networkDomain; - } - - @Override - public String getAccountNetworkDomain(long accountId, long zoneId) { - String networkDomain = _accountDao.findById(accountId).getNetworkDomain(); - - if (networkDomain == null) { - // get domain level network domain - return getDomainNetworkDomain(_accountDao.findById(accountId).getDomainId(), zoneId); - } - - return networkDomain; - } - - @Override - public String getGlobalGuestDomainSuffix() { - return _networkDomain; - } - - @Override - public String getStartIpAddress(long networkId) { - List vlans = _vlanDao.listVlansByNetworkId(networkId); - if (vlans.isEmpty()) { - return null; - } - - String startIP = vlans.get(0).getIpRange().split("-")[0]; - - for (VlanVO vlan : vlans) { - String startIP1 = vlan.getIpRange().split("-")[0]; - long startIPLong = NetUtils.ip2Long(startIP); - long startIPLong1 = NetUtils.ip2Long(startIP1); - - if (startIPLong1 < startIPLong) { - startIP = startIP1; - } - } - - return startIP; - } @Override public boolean applyStaticNats(List staticNats, boolean continueOnError) throws ResourceUnavailableException { @@ -5116,15 +2798,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // get provider StaticNatServiceProvider element = getStaticNatProviderForNetwork(network); - try { + try { success = element.applyStaticNats(network, staticNats); - } catch (ResourceUnavailableException e) { - if (!continueOnError) { - throw e; - } - s_logger.warn("Problems with " + element.getName() + " but pushing on", e); - success = false; + } catch (ResourceUnavailableException e) { + if (!continueOnError) { + throw e; } + s_logger.warn("Problems with " + element.getName() + " but pushing on", e); + success = false; + } // For revoked static nat IP, set the vm_id to null, indicate it should be revoked for (StaticNat staticNat : staticNats) { @@ -5142,23 +2824,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } } - + // if all the rules configured on public IP are revoked then, dis-associate IP with network service provider applyIpAssociations(network, true, continueOnError, publicIps); return success; } - @Override - public Long getPodIdForVlan(long vlanDbId) { - PodVlanMapVO podVlanMaps = _podVlanMapDao.listPodVlanMapsByVlan(vlanDbId); - if (podVlanMaps == null) { - return null; - } else { - return podVlanMaps.getPodId(); - } - } - @DB @Override public boolean reallocate(VirtualMachineProfile vm, DataCenterDeployment dest) throws InsufficientCapacityException, ConcurrentOperationException { @@ -5184,943 +2856,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return true; } - @Override - public Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId) { - Map> serviceProviderMap = new HashMap>(); - List map = _ntwkOfferingSrvcDao.listByNetworkOfferingId(networkOfferingId); - - for (NetworkOfferingServiceMapVO instance : map) { - String service = instance.getService(); - Set providers; - providers = serviceProviderMap.get(service); - if (providers == null) { - providers = new HashSet(); - } - providers.add(Provider.getProvider(instance.getProvider())); - serviceProviderMap.put(Service.getService(service), providers); - } - - return serviceProviderMap; - } - - @Override - public boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider) { - return _ntwkSrvcDao.canProviderSupportServiceInNetwork(networkId, service, provider); - } - - protected boolean canUpgrade(Network network, long oldNetworkOfferingId, long newNetworkOfferingId) { - NetworkOffering oldNetworkOffering = _networkOfferingDao.findByIdIncludingRemoved(oldNetworkOfferingId); - NetworkOffering newNetworkOffering = _networkOfferingDao.findById(newNetworkOfferingId); - - // can upgrade only Isolated networks - if (oldNetworkOffering.getGuestType() != GuestType.Isolated) { - throw new InvalidParameterValueException("NetworkOfferingId can be upgraded only for the network of type " + GuestType.Isolated); - } - - // security group service should be the same - if (areServicesSupportedByNetworkOffering(oldNetworkOfferingId, Service.SecurityGroup) != areServicesSupportedByNetworkOffering(newNetworkOfferingId, Service.SecurityGroup)) { - s_logger.debug("Offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different securityGroupProperty, can't upgrade"); - return false; - } - - // Type of the network should be the same - if (oldNetworkOffering.getGuestType() != newNetworkOffering.getGuestType()) { - s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " are of different types, can't upgrade"); - return false; - } - - // tags should be the same - if (newNetworkOffering.getTags() != null) { - if (oldNetworkOffering.getTags() == null) { - s_logger.debug("New network offering id=" + newNetworkOfferingId + " has tags and old network offering id=" + oldNetworkOfferingId + " doesn't, can't upgrade"); - return false; - } - if (!oldNetworkOffering.getTags().equalsIgnoreCase(newNetworkOffering.getTags())) { - s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different tags, can't upgrade"); - return false; - } - } - - // Traffic types should be the same - if (oldNetworkOffering.getTrafficType() != newNetworkOffering.getTrafficType()) { - s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different traffic types, can't upgrade"); - return false; - } - - // specify vlan should be the same - if (oldNetworkOffering.getSpecifyVlan() != newNetworkOffering.getSpecifyVlan()) { - s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different values for specifyVlan, can't upgrade"); - return false; - } - - // specify ipRanges should be the same - if (oldNetworkOffering.getSpecifyIpRanges() != newNetworkOffering.getSpecifyIpRanges()) { - s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different values for specifyIpRangess, can't upgrade"); - return false; - } - - // Check all ips - List userIps = _ipAddressDao.listByAssociatedNetwork(network.getId(), null); - List publicIps = new ArrayList(); - if (userIps != null && !userIps.isEmpty()) { - for (IPAddressVO userIp : userIps) { - PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); - publicIps.add(publicIp); - } - } - if (oldNetworkOffering.isConserveMode() && !newNetworkOffering.isConserveMode()) { - if (!canIpsUsedForNonConserve(publicIps)) { - return false; - } - } - - return canIpsUseOffering(publicIps, newNetworkOfferingId); - } - - protected boolean canUpgradeProviders(long oldNetworkOfferingId, long newNetworkOfferingId) { - // list of services and providers should be the same - Map> newServices = getNetworkOfferingServiceProvidersMap(newNetworkOfferingId); - Map> oldServices = getNetworkOfferingServiceProvidersMap(oldNetworkOfferingId); - - if (newServices.size() < oldServices.size()) { - s_logger.debug("Network offering downgrade is not allowed: number of supported services for the new offering " + newNetworkOfferingId + " is less than the old offering " + oldNetworkOfferingId); - return false; - } - - for (Service service : oldServices.keySet()) { - - // 1)check that all old services are present in the new network offering - if (!newServices.containsKey(service)) { - s_logger.debug("New service offering doesn't have " + service + " service present in the old service offering, downgrade is not allowed"); - return false; - } - - Set newProviders = newServices.get(service); - Set oldProviders = oldServices.get(service); - - // 2) Can upgrade only from internal provider to external provider. Any other combinations are not allowed - for (Provider oldProvider : oldProviders) { - if (newProviders.contains(oldProvider)) { - s_logger.trace("New list of providers contains provider " + oldProvider); - continue; - } - // iterate through new providers and check that the old provider can upgrade - for (Provider newProvider : newProviders) { - if (!(!oldProvider.isExternal() && newProvider.isExternal())) { - s_logger.debug("Can't downgrade from network offering " + oldNetworkOfferingId + " to the new networkOffering " + newNetworkOfferingId); - return false; - } - } - } - } - return true; - } - - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_CREATE, eventDescription = "Creating Physical Network", create = true) - public PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List - isolationMethods, String broadcastDomainRangeStr, Long domainId, List tags, String name) { - - // Check if zone exists - if (zoneId == null) { - throw new InvalidParameterValueException("Please specify a valid zone."); - } - - DataCenterVO zone = _dcDao.findById(zoneId); - if (zone == null) { - throw new InvalidParameterValueException("Please specify a valid zone."); - } - - if (Grouping.AllocationState.Enabled == zone.getAllocationState()) { - // TBD: Send uuid instead of zoneId; may have to hardcode tablename in call to addProxyObject(). - throw new PermissionDeniedException("Cannot create PhysicalNetwork since the Zone is currently enabled, zone Id: " + zoneId); - } - - NetworkType zoneType = zone.getNetworkType(); - - if (zoneType == NetworkType.Basic) { - if (!_physicalNetworkDao.listByZone(zoneId).isEmpty()) { - // TBD: Send uuid instead of zoneId; may have to hardcode tablename in call to addProxyObject(). - throw new CloudRuntimeException("Cannot add the physical network to basic zone id: " + zoneId + ", there is a physical network already existing in this basic Zone"); - } - } - if (tags != null && tags.size() > 1) { - throw new InvalidParameterException("Only one tag can be specified for a physical network at this time"); - } - - if (isolationMethods != null && isolationMethods.size() > 1) { - throw new InvalidParameterException("Only one isolationMethod can be specified for a physical network at this time"); - } - - int vnetStart = 0; - int vnetEnd = 0; - if (vnetRange != null) { - // Verify zone type - if (zoneType == NetworkType.Basic - || (zoneType == NetworkType.Advanced && zone.isSecurityGroupEnabled())) { - throw new InvalidParameterValueException("Can't add vnet range to the physical network in the zone that supports " + zoneType + " network, Security Group enabled: " + zone.isSecurityGroupEnabled()); - } - - String[] tokens = vnetRange.split("-"); - try { - vnetStart = Integer.parseInt(tokens[0]); - if (tokens.length == 1) { - vnetEnd = vnetStart; - } else { - vnetEnd = Integer.parseInt(tokens[1]); - } - } catch (NumberFormatException e) { - throw new InvalidParameterValueException("Please specify valid integers for the vlan range."); - } - - //check for vnet conflicts with other physical network(s) in the zone - checkGuestVnetsConflicts(zoneId, vnetStart, vnetEnd, null); - - if ((vnetStart > vnetEnd) || (vnetStart < 0) || (vnetEnd > 4096)) { - s_logger.warn("Invalid vnet range: start range:" + vnetStart + " end range:" + vnetEnd); - throw new InvalidParameterValueException("Vnet range should be between 0-4096 and start range should be lesser than or equal to end range"); - } - } - - BroadcastDomainRange broadcastDomainRange = null; - if (broadcastDomainRangeStr != null && !broadcastDomainRangeStr.isEmpty()) { - try { - broadcastDomainRange = PhysicalNetwork.BroadcastDomainRange.valueOf(broadcastDomainRangeStr.toUpperCase()); - } catch (IllegalArgumentException ex) { - throw new InvalidParameterValueException("Unable to resolve broadcastDomainRange '" + broadcastDomainRangeStr + "' to a supported value {Pod or Zone}"); - } - - // in Acton release you can specify only Zone broadcastdomain type in Advance zone, and Pod in Basic - if (zoneType == NetworkType.Basic && broadcastDomainRange != null && broadcastDomainRange != BroadcastDomainRange.POD) { - throw new InvalidParameterValueException("Basic zone can have broadcast domain type of value " + BroadcastDomainRange.POD + " only"); - } else if (zoneType == NetworkType.Advanced && broadcastDomainRange != null && broadcastDomainRange != BroadcastDomainRange.ZONE) { - throw new InvalidParameterValueException("Advance zone can have broadcast domain type of value " + BroadcastDomainRange.ZONE + " only"); - } - } - - if (broadcastDomainRange == null) { - if (zoneType == NetworkType.Basic) { - broadcastDomainRange = PhysicalNetwork.BroadcastDomainRange.POD; - } else { - broadcastDomainRange = PhysicalNetwork.BroadcastDomainRange.ZONE; - } - } - - Transaction txn = Transaction.currentTxn(); - try { - txn.start(); - // Create the new physical network in the database - long id = _physicalNetworkDao.getNextInSequence(Long.class, "id"); - PhysicalNetworkVO pNetwork = new PhysicalNetworkVO(id, zoneId, vnetRange, networkSpeed, domainId, broadcastDomainRange, name); - pNetwork.setTags(tags); - pNetwork.setIsolationMethods(isolationMethods); - - pNetwork = _physicalNetworkDao.persist(pNetwork); - - // Add vnet entries for the new zone if zone type is Advanced - if (vnetRange != null) { - _dcDao.addVnet(zone.getId(), pNetwork.getId(), vnetStart, vnetEnd); - } - - // add VirtualRouter as the default network service provider - addDefaultVirtualRouterToPhysicalNetwork(pNetwork.getId()); - - // add security group provider to the physical network - addDefaultSecurityGroupProviderToPhysicalNetwork(pNetwork.getId()); - - // add VPCVirtualRouter as the defualt network service provider - addDefaultVpcVirtualRouterToPhysicalNetwork(pNetwork.getId()); - - txn.commit(); - return pNetwork; - } catch (Exception ex) { - s_logger.warn("Exception: ", ex); - throw new CloudRuntimeException("Fail to create a physical network"); - } - } - - @Override - public Pair, Integer> searchPhysicalNetworks(Long id, Long zoneId, String keyword, Long startIndex, Long pageSize, String name) { - Filter searchFilter = new Filter(PhysicalNetworkVO.class, "id", Boolean.TRUE, startIndex, pageSize); - SearchCriteria sc = _physicalNetworkDao.createSearchCriteria(); - - if (id != null) { - sc.addAnd("id", SearchCriteria.Op.EQ, id); - } - - if (zoneId != null) { - sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); - } - - if (name != null) { - sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + name + "%"); - } - - Pair, Integer> result = _physicalNetworkDao.searchAndCount(sc, searchFilter); - return new Pair, Integer>(result.first(), result.second()); - } - - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_UPDATE, eventDescription = "updating physical network", async = true) - public PhysicalNetwork updatePhysicalNetwork(Long id, String networkSpeed, List tags, String newVnetRangeString, String state) { - - // verify input parameters - PhysicalNetworkVO network = _physicalNetworkDao.findById(id); - if (network == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); - ex.addProxyObject(network, id, "physicalNetworkId"); - throw ex; - } - - // if zone is of Basic type, don't allow to add vnet range - DataCenter zone = _dcDao.findById(network.getDataCenterId()); - if (zone == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Zone with id=" + network.getDataCenterId() + " doesn't exist in the system"); - ex.addProxyObject(zone, network.getDataCenterId(), "dataCenterId"); - throw ex; - } - if (newVnetRangeString != null) { - if (zone.getNetworkType() == NetworkType.Basic - || (zone.getNetworkType() == NetworkType.Advanced && zone.isSecurityGroupEnabled())) { - throw new InvalidParameterValueException("Can't add vnet range to the physical network in the zone that supports " + zone.getNetworkType() + " network, Security Group enabled: " - + zone.isSecurityGroupEnabled()); - } - } - - if (tags != null && tags.size() > 1) { - throw new InvalidParameterException("Unable to support more than one tag on network yet"); - } - - PhysicalNetwork.State networkState = null; - if (state != null && !state.isEmpty()) { - try { - networkState = PhysicalNetwork.State.valueOf(state); - } catch (IllegalArgumentException ex) { - throw new InvalidParameterValueException("Unable to resolve state '" + state + "' to a supported value {Enabled or Disabled}"); - } - } - - if (state != null) { - network.setState(networkState); - } - - if (tags != null) { - network.setTags(tags); - } - - if (networkSpeed != null) { - network.setSpeed(networkSpeed); - } - - // Vnet range can be extended only - boolean replaceVnet = false; - ArrayList> vnetsToAdd = new ArrayList>(2); - - if (newVnetRangeString != null) { - Integer newStartVnet = 0; - Integer newEndVnet = 0; - String[] newVnetRange = newVnetRangeString.split("-"); - int maxVnet = 4096; - // for GRE phynets allow up to 32bits - // TODO: Not happy about this test. - // What about guru-like objects for physical networs? - s_logger.debug("ISOLATION METHODS:" + network.getIsolationMethods()); - // Java does not have unsigned types... - if (network.getIsolationMethods().contains("GRE")) { - maxVnet = (int)(Math.pow(2, 32)-1); - } - String rangeMessage = " between 0 and " + maxVnet; - if (newVnetRange.length < 2) { - throw new InvalidParameterValueException("Please provide valid vnet range" + rangeMessage); - } - - if (newVnetRange[0] == null || newVnetRange[1] == null) { - throw new InvalidParameterValueException("Please provide valid vnet range" + rangeMessage); - } - - try { - newStartVnet = Integer.parseInt(newVnetRange[0]); - newEndVnet = Integer.parseInt(newVnetRange[1]); - } catch (NumberFormatException e) { - s_logger.warn("Unable to parse vnet range:", e); - throw new InvalidParameterValueException("Please provide valid vnet range" + rangeMessage); - } - if (newStartVnet < 0 || newEndVnet > maxVnet) { - throw new InvalidParameterValueException("Vnet range has to be" + rangeMessage); - } - - if (newStartVnet > newEndVnet) { - throw new InvalidParameterValueException("Vnet range has to be" + rangeMessage + " and start range should be lesser than or equal to stop range"); - } - - //check if new vnet conflicts with vnet ranges of other physical networks - checkGuestVnetsConflicts(network.getDataCenterId(), newStartVnet, newEndVnet, network.getId()); - - if (physicalNetworkHasAllocatedVnets(network.getDataCenterId(), network.getId())) { - String[] existingRange = network.getVnet().split("-"); - int existingStartVnet = Integer.parseInt(existingRange[0]); - int existingEndVnet = Integer.parseInt(existingRange[1]); - - // check if vnet is being extended - if (newStartVnet.intValue() > existingStartVnet || newEndVnet.intValue() < existingEndVnet) { - throw new InvalidParameterValueException("Can't shrink existing vnet range as it the range has vnets allocated. Only extending existing vnet is supported"); - } - - if (newStartVnet < existingStartVnet) { - vnetsToAdd.add(new Pair(newStartVnet, existingStartVnet - 1)); - } - - if (newEndVnet > existingEndVnet) { - vnetsToAdd.add(new Pair(existingEndVnet + 1, newEndVnet)); - } - - } else { - vnetsToAdd.add(new Pair(newStartVnet, newEndVnet)); - replaceVnet = true; - } - } - - if (newVnetRangeString != null) { - network.setVnet(newVnetRangeString); - } - - _physicalNetworkDao.update(id, network); - - if (replaceVnet) { - s_logger.debug("Deleting existing vnet range for the physicalNetwork id= " + id + " and zone id=" + network.getDataCenterId() + " as a part of updatePhysicalNetwork call"); - _dcDao.deleteVnet(network.getId()); - } - - for (Pair vnetToAdd : vnetsToAdd) { - s_logger.debug("Adding vnet range " + vnetToAdd.first() + "-" + vnetToAdd.second() + " for the physicalNetwork id= " + id + " and zone id=" + network.getDataCenterId() - + " as a part of updatePhysicalNetwork call"); - _dcDao.addVnet(network.getDataCenterId(), network.getId(), vnetToAdd.first(), vnetToAdd.second()); - } - - return network; - } - - protected void checkGuestVnetsConflicts(long zoneId, int newStartVnet, int newEndVnet, Long pNtwkIdToSkip) { - List pNtwks = _physicalNetworkDao.listByZone(zoneId); - for (PhysicalNetwork pNtwk : pNtwks) { - // skip my own network and networks that don't have vnet range set - if ((pNtwk.getVnet() == null || pNtwk.getVnet().isEmpty()) || (pNtwkIdToSkip != null && pNtwkIdToSkip == pNtwk.getId())) { - continue; - } - String[] existingRange = pNtwk.getVnet().split("-"); - int startVnet = Integer.parseInt(existingRange[0]); - int endVnet = Integer.parseInt(existingRange[1]); - if ((newStartVnet >= startVnet && newStartVnet <= endVnet) - || (newEndVnet <= endVnet && newEndVnet >= startVnet)) { - throw new InvalidParameterValueException("Vnet range for physical network conflicts with another " + - "physical network's vnet in the zone"); - } - } - } - - private boolean physicalNetworkHasAllocatedVnets(long zoneId, long physicalNetworkId) { - return !_dcDao.listAllocatedVnets(physicalNetworkId).isEmpty(); - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_DELETE, eventDescription = "deleting physical network", async = true) - @DB - public boolean deletePhysicalNetwork(Long physicalNetworkId) { - - // verify input parameters - PhysicalNetworkVO pNetwork = _physicalNetworkDao.findById(physicalNetworkId); - if (pNetwork == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); - ex.addProxyObject(pNetwork, physicalNetworkId, "physicalNetworkId"); - throw ex; - } - - checkIfPhysicalNetworkIsDeletable(physicalNetworkId); - - Transaction txn = Transaction.currentTxn(); - txn.start(); - // delete vlans for this zone - List vlans = _vlanDao.listVlansByPhysicalNetworkId(physicalNetworkId); - for (VlanVO vlan : vlans) { - _vlanDao.remove(vlan.getId()); - } - - // Delete networks - List networks = _networksDao.listByPhysicalNetwork(physicalNetworkId); - if (networks != null && !networks.isEmpty()) { - for (NetworkVO network : networks) { - _networksDao.remove(network.getId()); - } - } - - // delete vnets - _dcDao.deleteVnet(physicalNetworkId); - - // delete service providers - List providers = _pNSPDao.listBy(physicalNetworkId); - - for(PhysicalNetworkServiceProviderVO provider : providers){ - try { - deleteNetworkServiceProvider(provider.getId()); - }catch (ResourceUnavailableException e) { - s_logger.warn("Unable to complete destroy of the physical network provider: " + provider.getProviderName() + ", id: "+ provider.getId(), e); - return false; - } catch (ConcurrentOperationException e) { - s_logger.warn("Unable to complete destroy of the physical network provider: " + provider.getProviderName() + ", id: "+ provider.getId(), e); - return false; - } - } - - // delete traffic types - _pNTrafficTypeDao.deleteTrafficTypes(physicalNetworkId); - - boolean success = _physicalNetworkDao.remove(physicalNetworkId); - - txn.commit(); - - return success; - } - - @DB - private void checkIfPhysicalNetworkIsDeletable(Long physicalNetworkId) { - List> tablesToCheck = new ArrayList>(); - - List vnet = new ArrayList(); - vnet.add(0, "op_dc_vnet_alloc"); - vnet.add(1, "physical_network_id"); - vnet.add(2, "there are allocated vnets for this physical network"); - tablesToCheck.add(vnet); - - List networks = new ArrayList(); - networks.add(0, "networks"); - networks.add(1, "physical_network_id"); - networks.add(2, "there are networks associated to this physical network"); - tablesToCheck.add(networks); - - /* - * List privateIP = new ArrayList(); - * privateIP.add(0, "op_dc_ip_address_alloc"); - * privateIP.add(1, "data_center_id"); - * privateIP.add(2, "there are private IP addresses allocated for this zone"); - * tablesToCheck.add(privateIP); - */ - - List publicIP = new ArrayList(); - publicIP.add(0, "user_ip_address"); - publicIP.add(1, "physical_network_id"); - publicIP.add(2, "there are public IP addresses allocated for this physical network"); - tablesToCheck.add(publicIP); - - for (List table : tablesToCheck) { - String tableName = table.get(0); - String column = table.get(1); - String errorMsg = table.get(2); - - String dbName = "cloud"; - - String selectSql = "SELECT * FROM `" + dbName + "`.`" + tableName + "` WHERE " + column + " = ?"; - - if (tableName.equals("networks")) { - selectSql += " AND removed is NULL"; - } - - if (tableName.equals("op_dc_vnet_alloc")) { - selectSql += " AND taken IS NOT NULL"; - } - - if (tableName.equals("user_ip_address")) { - selectSql += " AND state!='Free'"; - } - - if (tableName.equals("op_dc_ip_address_alloc")) { - selectSql += " AND taken IS NOT NULL"; - } - - Transaction txn = Transaction.currentTxn(); - try { - PreparedStatement stmt = txn.prepareAutoCloseStatement(selectSql); - stmt.setLong(1, physicalNetworkId); - ResultSet rs = stmt.executeQuery(); - if (rs != null && rs.next()) { - throw new CloudRuntimeException("The Physical Network is not deletable because " + errorMsg); - } - } catch (SQLException ex) { - throw new CloudRuntimeException("The Management Server failed to detect if physical network is deletable. Please contact Cloud Support."); - } - } - - } - - @Override - public List listNetworkServices(String providerName) { - - Provider provider = null; - if (providerName != null) { - provider = Network.Provider.getProvider(providerName); - if (provider == null) { - throw new InvalidParameterValueException("Invalid Network Service Provider=" + providerName); - } - } - - if (provider != null) { - NetworkElement element = getElementImplementingProvider(providerName); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + providerName + "'"); - } - return new ArrayList(element.getCapabilities().keySet()); - } else { - return Service.listAllServices(); - } - } - - @Override - public List listSupportedNetworkServiceProviders(String serviceName) { - Network.Service service = null; - if (serviceName != null) { - service = Network.Service.getService(serviceName); - if (service == null) { - throw new InvalidParameterValueException("Invalid Network Service=" + serviceName); - } - } - - Set supportedProviders = new HashSet(); - - if (service != null) { - supportedProviders.addAll(s_serviceToImplementedProvidersMap.get(service)); - } else { - for (List pList : s_serviceToImplementedProvidersMap.values()) { - supportedProviders.addAll(pList); - } - } - - return new ArrayList(supportedProviders); - } - - @Override - public Provider getDefaultUniqueProviderForService(String serviceName) { - List providers = listSupportedNetworkServiceProviders(serviceName); - if (providers.isEmpty()) { - throw new CloudRuntimeException("No providers supporting service " + serviceName + " found in cloudStack"); - } - if (providers.size() > 1) { - throw new CloudRuntimeException("More than 1 provider supporting service " + serviceName + " found in cloudStack"); - } - - return providers.get(0); - } - - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_CREATE, eventDescription = "Creating Physical Network ServiceProvider", create = true) - public PhysicalNetworkServiceProvider addProviderToPhysicalNetwork(Long physicalNetworkId, String providerName, Long destinationPhysicalNetworkId, List enabledServices) { - - // verify input parameters - PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId); - if (network == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); - ex.addProxyObject(network, physicalNetworkId, "physicalNetworkId"); - throw ex; - } - - // verify input parameters - if (destinationPhysicalNetworkId != null) { - PhysicalNetworkVO destNetwork = _physicalNetworkDao.findById(destinationPhysicalNetworkId); - if (destNetwork == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Destination Physical Network with specified id doesn't exist in the system"); - ex.addProxyObject(destNetwork, destinationPhysicalNetworkId, "destinationPhysicalNetworkId"); - throw ex; - } - } - - if (providerName != null) { - Provider provider = Network.Provider.getProvider(providerName); - if (provider == null) { - throw new InvalidParameterValueException("Invalid Network Service Provider=" + providerName); - } - } - - if (_pNSPDao.findByServiceProvider(physicalNetworkId, providerName) != null) { - // TBD: send uuid instead of physicalNetworkId. - throw new CloudRuntimeException("The '" + providerName + "' provider already exists on physical network : " + physicalNetworkId); - } - - // check if services can be turned off - NetworkElement element = getElementImplementingProvider(providerName); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + providerName + "'"); - } - List services = new ArrayList(); - - if (enabledServices != null) { - if (!element.canEnableIndividualServices()) { - if (enabledServices.size() != element.getCapabilities().keySet().size()) { - throw new InvalidParameterValueException("Cannot enable subset of Services, Please specify the complete list of Services for this Service Provider '" + providerName + "'"); - } - } - - // validate Services - boolean addGatewayService = false; - for (String serviceName : enabledServices) { - Network.Service service = Network.Service.getService(serviceName); - if (service == null || service == Service.Gateway) { - throw new InvalidParameterValueException("Invalid Network Service specified=" + serviceName); - } else if (service == Service.SourceNat) { - addGatewayService = true; - } - - // check if the service is provided by this Provider - if (!element.getCapabilities().containsKey(service)) { - throw new InvalidParameterValueException(providerName + " Provider cannot provide this Service specified=" + serviceName); - } - services.add(service); - } - - if (addGatewayService) { - services.add(Service.Gateway); - } - } else { - // enable all the default services supported by this element. - services = new ArrayList(element.getCapabilities().keySet()); - } - - Transaction txn = Transaction.currentTxn(); - try { - txn.start(); - // Create the new physical network in the database - PhysicalNetworkServiceProviderVO nsp = new PhysicalNetworkServiceProviderVO(physicalNetworkId, providerName); - // set enabled services - nsp.setEnabledServices(services); - - if (destinationPhysicalNetworkId != null) { - nsp.setDestinationPhysicalNetworkId(destinationPhysicalNetworkId); - } - nsp = _pNSPDao.persist(nsp); - - txn.commit(); - return nsp; - } catch (Exception ex) { - s_logger.warn("Exception: ", ex); - throw new CloudRuntimeException("Fail to add a provider to physical network"); - } - - } - - @Override - public Pair, Integer> listNetworkServiceProviders(Long physicalNetworkId, - String name, String state, Long startIndex, Long pageSize) { - - Filter searchFilter = new Filter(PhysicalNetworkServiceProviderVO.class, "id", false, startIndex, pageSize); - SearchBuilder sb = _pNSPDao.createSearchBuilder(); - SearchCriteria sc = sb.create(); - - if (physicalNetworkId != null) { - sc.addAnd("physicalNetworkId", Op.EQ, physicalNetworkId); - } - - if (name != null) { - sc.addAnd("providerName", Op.EQ, name); - } - - if (state != null) { - sc.addAnd("state", Op.EQ, state); - } - - Pair, Integer> result = _pNSPDao.searchAndCount(sc, searchFilter); - return new Pair, Integer>(result.first(), result.second()); - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_UPDATE, eventDescription = "Updating physical network ServiceProvider", async = true) - public PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String stateStr, List enabledServices) { - - PhysicalNetworkServiceProviderVO provider = _pNSPDao.findById(id); - if (provider == null) { - throw new InvalidParameterValueException("Network Service Provider id=" + id + "doesn't exist in the system"); - } - - NetworkElement element = getElementImplementingProvider(provider.getProviderName()); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getProviderName() + "'"); - } - - PhysicalNetworkServiceProvider.State state = null; - if (stateStr != null && !stateStr.isEmpty()) { - try { - state = PhysicalNetworkServiceProvider.State.valueOf(stateStr); - } catch (IllegalArgumentException ex) { - throw new InvalidParameterValueException("Unable to resolve state '" + stateStr + "' to a supported value {Enabled or Disabled}"); - } - } - - boolean update = false; - - if (state != null) { - if (state == PhysicalNetworkServiceProvider.State.Shutdown) { - throw new InvalidParameterValueException("Updating the provider state to 'Shutdown' is not supported"); - } - - if (s_logger.isDebugEnabled()) { - s_logger.debug("updating state of the service provider id=" + id + " on physical network: " + provider.getPhysicalNetworkId() + " to state: " + stateStr); - } - switch (state) { - case Enabled: - if (element != null && element.isReady(provider)) { - provider.setState(PhysicalNetworkServiceProvider.State.Enabled); - update = true; - } else { - throw new CloudRuntimeException("Provider is not ready, cannot Enable the provider, please configure the provider first"); - } - break; - case Disabled: - // do we need to do anything for the provider instances before disabling? - provider.setState(PhysicalNetworkServiceProvider.State.Disabled); - update = true; - break; - } - } - - if (enabledServices != null) { - // check if services can be turned of - if (!element.canEnableIndividualServices()) { - throw new InvalidParameterValueException("Cannot update set of Services for this Service Provider '" + provider.getProviderName() + "'"); - } - - // validate Services - List services = new ArrayList(); - for (String serviceName : enabledServices) { - Network.Service service = Network.Service.getService(serviceName); - if (service == null) { - throw new InvalidParameterValueException("Invalid Network Service specified=" + serviceName); - } - services.add(service); - } - // set enabled services - provider.setEnabledServices(services); - update = true; - } - - if (update) { - _pNSPDao.update(id, provider); - } - return provider; - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_DELETE, eventDescription = "Deleting physical network ServiceProvider", async = true) - public boolean deleteNetworkServiceProvider(Long id) throws ConcurrentOperationException, ResourceUnavailableException { - PhysicalNetworkServiceProviderVO provider = _pNSPDao.findById(id); - - if (provider == null) { - throw new InvalidParameterValueException("Network Service Provider id=" + id + "doesn't exist in the system"); - } - - // check if there are networks using this provider - List networks = _networksDao.listByPhysicalNetworkAndProvider(provider.getPhysicalNetworkId(), provider.getProviderName()); - if (networks != null && !networks.isEmpty()) { - throw new CloudRuntimeException("Provider is not deletable because there are active networks using this provider, please upgrade these networks to new network offerings"); - } - - User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId()); - Account callerAccount = _accountMgr.getActiveAccountById(callerUser.getAccountId()); - // shutdown the provider instances - ReservationContext context = new ReservationContextImpl(null, null, callerUser, callerAccount); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Shutting down the service provider id=" + id + " on physical network: " + provider.getPhysicalNetworkId()); - } - NetworkElement element = getElementImplementingProvider(provider.getProviderName()); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getProviderName() + "'"); - } - - if (element != null && element.shutdownProviderInstances(provider, context)) { - provider.setState(PhysicalNetworkServiceProvider.State.Shutdown); - } - - return _pNSPDao.remove(id); - } - - @Override - public PhysicalNetwork getPhysicalNetwork(Long physicalNetworkId) { - return _physicalNetworkDao.findById(physicalNetworkId); - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_CREATE, eventDescription = "Creating Physical Network", async = true) - public PhysicalNetwork getCreatedPhysicalNetwork(Long physicalNetworkId) { - return getPhysicalNetwork(physicalNetworkId); - } - - @Override - public PhysicalNetworkServiceProvider getPhysicalNetworkServiceProvider(Long providerId) { - return _pNSPDao.findById(providerId); - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_CREATE, eventDescription = "Creating Physical Network ServiceProvider", async = true) - public PhysicalNetworkServiceProvider getCreatedPhysicalNetworkServiceProvider(Long providerId) { - return getPhysicalNetworkServiceProvider(providerId); - } - - @Override - public long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType) { - List pNtwks = new ArrayList(); - if (trafficType != null) { - pNtwks = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); - } else { - pNtwks = _physicalNetworkDao.listByZone(zoneId); - } - - if (pNtwks.isEmpty()) { - throw new InvalidParameterValueException("Unable to find physical network in zone id=" + zoneId); - } - - if (pNtwks.size() > 1) { - if (tag == null) { - throw new InvalidParameterValueException("More than one physical networks exist in zone id=" + zoneId + " and no tags are specified in order to make a choice"); - } - - Long pNtwkId = null; - for (PhysicalNetwork pNtwk : pNtwks) { - if (pNtwk.getTags().contains(tag)) { - s_logger.debug("Found physical network id=" + pNtwk.getId() + " based on requested tags " + tag); - pNtwkId = pNtwk.getId(); - break; - } - } - if (pNtwkId == null) { - throw new InvalidParameterValueException("Unable to find physical network which match the tags " + tag); - } - return pNtwkId; - } else { - return pNtwks.get(0).getId(); - } - } - - @Override - public List listNetworkOfferingsForUpgrade(long networkId) { - List offeringsToReturn = new ArrayList(); - NetworkOffering originalOffering = _configMgr.getNetworkOffering(getNetwork(networkId).getNetworkOfferingId()); - - boolean securityGroupSupportedByOriginalOff = areServicesSupportedByNetworkOffering(originalOffering.getId(), Service.SecurityGroup); - - // security group supported property should be the same - - List offerings = _networkOfferingDao.getOfferingIdsToUpgradeFrom(originalOffering); - - for (Long offeringId : offerings) { - if (areServicesSupportedByNetworkOffering(offeringId, Service.SecurityGroup) == securityGroupSupportedByOriginalOff) { - offeringsToReturn.add(offeringId); - } - } - - return offeringsToReturn; - } - private boolean cleanupNetworkResources(long networkId, Account caller, long callerUserId) { boolean success = true; - Network network = getNetwork(networkId); + Network network = _networksDao.findById(networkId); //remove all PF/Static Nat rules for the network try { @@ -6158,7 +2896,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // shouldn't even come here as network is being cleaned up after all network elements are shutdown s_logger.warn("Failed to cleanup Firewall rules as a part of network id=" + networkId + " cleanup due to resourceUnavailable ", ex); } - + //revoke all network ACLs for network try { if (_networkACLMgr.revokeAllNetworkACLsForNetwork(networkId, callerUserId, caller)) { @@ -6237,7 +2975,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag throw new InvalidParameterValueException("Source ip address of the rule id=" + firewallStaticNatRule.getId() + " is not static nat enabled"); } - String dstIp = getIpInNetwork(ip.getAssociatedWithVmId(), firewallStaticNatRule.getNetworkId()); + String dstIp = _networkModel.getIpInNetwork(ip.getAssociatedWithVmId(), firewallStaticNatRule.getNetworkId()); ruleVO.setState(FirewallRule.State.Revoke); staticNatRules.add(new StaticNatRuleImpl(ruleVO, dstIp)); } @@ -6300,7 +3038,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.warn("Failed to cleanup firewall rules as a part of shutdownNetworkRules due to ", ex); success = false; } - + //revoke all Network ACLs for the network w/o applying them in the DB List networkACLs = _firewallDao.listByNetworkAndPurpose(networkId, Purpose.NetworkACL); if (s_logger.isDebugEnabled()) { @@ -6322,7 +3060,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.warn("Failed to cleanup network ACLs as a part of shutdownNetworkRules due to ", ex); success = false; } - + //release all static nats for the network if (!_rulesMgr.applyStaticNatForNetwork(networkId, false, caller, true)) { s_logger.warn("Failed to disable static nats as part of shutdownNetworkRules for network id " + networkId); @@ -6330,7 +3068,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } // Get all ip addresses, mark as releasing and release them on the backend - Network network = getNetwork(networkId); + Network network = _networksDao.findById(networkId); List userIps = _ipAddressDao.listByAssociatedNetwork(networkId, null); List publicIpsToRelease = new ArrayList(); if (userIps != null && !userIps.isEmpty()) { @@ -6353,259 +3091,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return success; } - @Override - public boolean isSecurityGroupSupportedInNetwork(Network network) { - if (network.getTrafficType() != TrafficType.Guest) { - s_logger.trace("Security group can be enabled for Guest networks only; and network " + network + " has a diff traffic type"); - return false; - } - - Long physicalNetworkId = network.getPhysicalNetworkId(); - - // physical network id can be null in Guest Network in Basic zone, so locate the physical network - if (physicalNetworkId == null) { - physicalNetworkId = findPhysicalNetworkId(network.getDataCenterId(), null, null); - } - - return isServiceEnabledInNetwork(physicalNetworkId, network.getId(), Service.SecurityGroup); - } - - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_CREATE, eventDescription = "Creating Physical Network TrafficType", create = true) - public PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficTypeStr, String xenLabel, String kvmLabel, String vmwareLabel, String simulatorLabel, String vlan) { - - // verify input parameters - PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId); - if (network == null) { - throw new InvalidParameterValueException("Physical Network id=" + physicalNetworkId + "doesn't exist in the system"); - } - - Networks.TrafficType trafficType = null; - if (trafficTypeStr != null && !trafficTypeStr.isEmpty()) { - try { - trafficType = Networks.TrafficType.valueOf(trafficTypeStr); - } catch (IllegalArgumentException ex) { - throw new InvalidParameterValueException("Unable to resolve trafficType '" + trafficTypeStr + "' to a supported value"); - } - } - - if (_pNTrafficTypeDao.isTrafficTypeSupported(physicalNetworkId, trafficType)) { - throw new CloudRuntimeException("This physical network already supports the traffic type: " + trafficType); - } - // For Storage, Control, Management, Public check if the zone has any other physical network with this - // traffictype already present - // If yes, we cant add these traffics to one more physical network in the zone. - - if (TrafficType.isSystemNetwork(trafficType) || TrafficType.Public.equals(trafficType) || TrafficType.Storage.equals(trafficType)) { - if (!_physicalNetworkDao.listByZoneAndTrafficType(network.getDataCenterId(), trafficType).isEmpty()) { - throw new CloudRuntimeException("Fail to add the traffic type to physical network because Zone already has a physical network with this traffic type: " + trafficType); - } - } - - if (TrafficType.Storage.equals(trafficType)) { - List ssvms = _stnwMgr.getSSVMWithNoStorageNetwork(network.getDataCenterId()); - if (!ssvms.isEmpty()) { - StringBuilder sb = new StringBuilder( - "Cannot add " - + trafficType - + " traffic type as there are below secondary storage vm still running. Please stop them all and add Storage traffic type again, then destory them all to allow CloudStack recreate them with storage network(If you have added storage network ip range)"); - sb.append("SSVMs:"); - for (SecondaryStorageVmVO ssvm : ssvms) { - sb.append(ssvm.getInstanceName()).append(":").append(ssvm.getState()); - } - throw new CloudRuntimeException(sb.toString()); - } - } - - Transaction txn = Transaction.currentTxn(); - try { - txn.start(); - // Create the new traffic type in the database - if (xenLabel == null) { - xenLabel = getDefaultXenNetworkLabel(trafficType); - } - PhysicalNetworkTrafficTypeVO pNetworktrafficType = new PhysicalNetworkTrafficTypeVO(physicalNetworkId, trafficType, xenLabel, kvmLabel, vmwareLabel, simulatorLabel, vlan); - pNetworktrafficType = _pNTrafficTypeDao.persist(pNetworktrafficType); - - txn.commit(); - return pNetworktrafficType; - } catch (Exception ex) { - s_logger.warn("Exception: ", ex); - throw new CloudRuntimeException("Fail to add a traffic type to physical network"); - } - - } - - private String getDefaultXenNetworkLabel(TrafficType trafficType) { - String xenLabel = null; - switch (trafficType) { - case Public: - xenLabel = _configDao.getValue(Config.XenPublicNetwork.key()); - break; - case Guest: - xenLabel = _configDao.getValue(Config.XenGuestNetwork.key()); - break; - case Storage: - xenLabel = _configDao.getValue(Config.XenStorageNetwork1.key()); - break; - case Management: - xenLabel = _configDao.getValue(Config.XenPrivateNetwork.key()); - break; - case Control: - xenLabel = "cloud_link_local_network"; - break; - } - return xenLabel; - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_CREATE, eventDescription = "Creating Physical Network TrafficType", async = true) - public PhysicalNetworkTrafficType getPhysicalNetworkTrafficType(Long id) { - return _pNTrafficTypeDao.findById(id); - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_UPDATE, eventDescription = "Updating physical network TrafficType", async = true) - public PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, String vmwareLabel) { - - PhysicalNetworkTrafficTypeVO trafficType = _pNTrafficTypeDao.findById(id); - - if (trafficType == null) { - throw new InvalidParameterValueException("Traffic Type with id=" + id + "doesn't exist in the system"); - } - - if (xenLabel != null) { - if("".equals(xenLabel)){ - xenLabel = null; - } - trafficType.setXenNetworkLabel(xenLabel); - } - if (kvmLabel != null) { - if("".equals(kvmLabel)){ - kvmLabel = null; - } - trafficType.setKvmNetworkLabel(kvmLabel); - } - if (vmwareLabel != null) { - if("".equals(vmwareLabel)){ - vmwareLabel = null; - } - trafficType.setVmwareNetworkLabel(vmwareLabel); - } - _pNTrafficTypeDao.update(id, trafficType); - - return trafficType; - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_DELETE, eventDescription = "Deleting physical network TrafficType", async = true) - public boolean deletePhysicalNetworkTrafficType(Long id) { - PhysicalNetworkTrafficTypeVO trafficType = _pNTrafficTypeDao.findById(id); - - if (trafficType == null) { - throw new InvalidParameterValueException("Traffic Type with id=" + id + "doesn't exist in the system"); - } - - // check if there are any networks associated to this physical network with this traffic type - if (TrafficType.Guest.equals(trafficType.getTrafficType())) { - if (!_networksDao.listByPhysicalNetworkTrafficType(trafficType.getPhysicalNetworkId(), trafficType.getTrafficType()).isEmpty()) { - throw new CloudRuntimeException("The Traffic Type is not deletable because there are existing networks with this traffic type:" + trafficType.getTrafficType()); - } - } else if (TrafficType.Storage.equals(trafficType.getTrafficType())) { - PhysicalNetworkVO pn = _physicalNetworkDao.findById(trafficType.getPhysicalNetworkId()); - if (_stnwMgr.isAnyStorageIpInUseInZone(pn.getDataCenterId())) { - throw new CloudRuntimeException("The Traffic Type is not deletable because there are still some storage network ip addresses in use:" + trafficType.getTrafficType()); - } - } - return _pNTrafficTypeDao.remove(id); - } - - @Override - public Pair, Integer> listTrafficTypes(Long physicalNetworkId) { - PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId); - if (network == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); - ex.addProxyObject(network, physicalNetworkId, "physicalNetworkId"); - throw ex; - } - - Pair, Integer> result = _pNTrafficTypeDao.listAndCountBy(physicalNetworkId); - return new Pair, Integer>(result.first(), result.second()); - } - - @Override - public PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - - List networkList = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); - - if (networkList.isEmpty()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find the default physical network with traffic=" + trafficType + " in the specified zone id"); - // Since we don't have a DataCenterVO object at our disposal, we just set the table name that the zoneId's corresponding uuid is looked up from, manually. - ex.addProxyObject("data_center", zoneId, "zoneId"); - throw ex; - } - - if (networkList.size() > 1) { - InvalidParameterValueException ex = new InvalidParameterValueException("More than one physical networks exist in zone id=" + zoneId + " with traffic type=" + trafficType); - ex.addProxyObject("data_center", zoneId, "zoneId"); - throw ex; - } - - return networkList.get(0); - } - - @Override - public String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType){ - try{ - PhysicalNetwork mgmtPhyNetwork = getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); - PhysicalNetworkTrafficTypeVO mgmtTraffic = _pNTrafficTypeDao.findBy(mgmtPhyNetwork.getId(), TrafficType.Management); - if(mgmtTraffic != null){ - String label = null; - switch(hypervisorType){ - case XenServer : label = mgmtTraffic.getXenNetworkLabel(); - break; - case KVM : label = mgmtTraffic.getKvmNetworkLabel(); - break; - case VMware : label = mgmtTraffic.getVmwareNetworkLabel(); - break; - } - return label; - } - }catch(Exception ex){ - if(s_logger.isDebugEnabled()){ - s_logger.debug("Failed to retrive the default label for management traffic:"+"zone: "+ zoneId +" hypervisor: "+hypervisorType +" due to:" + ex.getMessage()); - } - } - return null; - } - - @Override - public String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType){ - try{ - PhysicalNetwork storagePhyNetwork = getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Storage); - PhysicalNetworkTrafficTypeVO storageTraffic = _pNTrafficTypeDao.findBy(storagePhyNetwork.getId(), TrafficType.Storage); - if(storageTraffic != null){ - String label = null; - switch(hypervisorType){ - case XenServer : label = storageTraffic.getXenNetworkLabel(); - break; - case KVM : label = storageTraffic.getKvmNetworkLabel(); - break; - case VMware : label = storageTraffic.getVmwareNetworkLabel(); - break; - } - return label; - } - }catch(Exception ex){ - if(s_logger.isDebugEnabled()){ - s_logger.debug("Failed to retrive the default label for storage traffic:"+"zone: "+ zoneId +" hypervisor: "+hypervisorType +" due to:" + ex.getMessage()); - } - } - return null; - } - - @Override public boolean processAnswers(long agentId, long seq, Answer[] answers) { return false; @@ -6621,32 +3106,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return null; } - @Override - public List getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType) { - List networkInfoList = new ArrayList(); - List physicalNtwkList = _physicalNetworkDao.listByZone(dcId); - for (PhysicalNetworkVO pNtwk : physicalNtwkList) { - String publicName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Public, hypervisorType); - String privateName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Management, hypervisorType); - String guestName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Guest, hypervisorType); - String storageName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Storage, hypervisorType); - // String controlName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Control, hypervisorType); - PhysicalNetworkSetupInfo info = new PhysicalNetworkSetupInfo(); - info.setPhysicalNetworkId(pNtwk.getId()); - info.setGuestNetworkName(guestName); - info.setPrivateNetworkName(privateName); - info.setPublicNetworkName(publicName); - info.setStorageNetworkName(storageName); - PhysicalNetworkTrafficTypeVO mgmtTraffic = _pNTrafficTypeDao.findBy(pNtwk.getId(), TrafficType.Management); - if (mgmtTraffic != null) { - String vlan = mgmtTraffic.getVlan(); - info.setMgmtVlan(vlan); - } - networkInfoList.add(info); - } - return networkInfoList; - } - @Override public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) throws ConnectionException { if (!(cmd instanceof StartupRoutingCommand)) { @@ -6685,7 +3144,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag String privateName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Management, hypervisorType); String guestName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Guest, hypervisorType); String storageName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Storage, hypervisorType); - // String controlName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Control, hypervisorType); + // String controlName = _pNTrafficTypeDao._networkModel.getNetworkTag(pNtwk.getId(), TrafficType.Control, hypervisorType); PhysicalNetworkSetupInfo info = new PhysicalNetworkSetupInfo(); info.setPhysicalNetworkId(pNtwk.getId()); info.setGuestNetworkName(guestName); @@ -6749,164 +3208,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return false; } - private boolean isProviderEnabled(PhysicalNetworkServiceProvider provider) { - if (provider == null || provider.getState() != PhysicalNetworkServiceProvider.State.Enabled) { // TODO: check -// for other states: Shutdown? - return false; - } - return true; - } - @Override - public boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName) { - PhysicalNetworkServiceProviderVO ntwkSvcProvider = _pNSPDao.findByServiceProvider(physicalNetowrkId, providerName); - if (ntwkSvcProvider == null) { - s_logger.warn("Unable to find provider " + providerName + " in physical network id=" + physicalNetowrkId); - return false; - } - return isProviderEnabled(ntwkSvcProvider); - } - - private boolean isServiceEnabledInNetwork(long physicalNetworkId, long networkId, Service service) { - // check if the service is supported in the network - if (!areServicesSupportedInNetwork(networkId, service)) { - s_logger.debug("Service " + service.getName() + " is not supported in the network id=" + networkId); - return false; - } - - // get provider for the service and check if all of them are supported - String provider = _ntwkSrvcDao.getProviderForServiceInNetwork(networkId, service); - if (!isProviderEnabledInPhysicalNetwork(physicalNetworkId, provider)) { - s_logger.debug("Provider " + provider + " is not enabled in physical network id=" + physicalNetworkId); - return false; - } - - return true; - } - - @Override - public String getNetworkTag(HypervisorType hType, Network network) { - // no network tag for control traffic type - TrafficType effectiveTrafficType = network.getTrafficType(); - if(hType == HypervisorType.VMware && effectiveTrafficType == TrafficType.Control) - effectiveTrafficType = TrafficType.Management; - - if (effectiveTrafficType == TrafficType.Control) { - return null; - } - - Long physicalNetworkId = null; - if (effectiveTrafficType != TrafficType.Guest) { - physicalNetworkId = getNonGuestNetworkPhysicalNetworkId(network); - } else { - NetworkOffering offering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); - physicalNetworkId = network.getPhysicalNetworkId(); - if(physicalNetworkId == null){ - physicalNetworkId = findPhysicalNetworkId(network.getDataCenterId(), offering.getTags(), offering.getTrafficType()); - } - } - - if (physicalNetworkId == null) { - assert (false) : "Can't get the physical network"; - s_logger.warn("Can't get the physical network"); - return null; - } - - return _pNTrafficTypeDao.getNetworkTag(physicalNetworkId, effectiveTrafficType, hType); - } - - protected Long getNonGuestNetworkPhysicalNetworkId(Network network) { - // no physical network for control traffic type - - // have to remove this sanity check as VMware control network is management network - // we need to retrieve traffic label information through physical network -/* - if (network.getTrafficType() == TrafficType.Control) { - return null; - } -*/ - Long physicalNetworkId = network.getPhysicalNetworkId(); - - if (physicalNetworkId == null) { - List pNtwks = _physicalNetworkDao.listByZone(network.getDataCenterId()); - if (pNtwks.size() == 1) { - physicalNetworkId = pNtwks.get(0).getId(); - } else { - // locate physicalNetwork with supported traffic type - // We can make this assumptions based on the fact that Public/Management/Control traffic types are - // supported only in one physical network in the zone in 3.0 - for (PhysicalNetworkVO pNtwk : pNtwks) { - if (_pNTrafficTypeDao.isTrafficTypeSupported(pNtwk.getId(), network.getTrafficType())) { - physicalNetworkId = pNtwk.getId(); - break; - } - } - } - } - return physicalNetworkId; - } - - @Override - public NetworkVO getExclusiveGuestNetwork(long zoneId) { - List networks = _networksDao.listBy(Account.ACCOUNT_ID_SYSTEM, zoneId, GuestType.Shared, TrafficType.Guest); - if (networks == null || networks.isEmpty()) { - throw new InvalidParameterValueException("Unable to find network with trafficType " + TrafficType.Guest + " and guestType " + GuestType.Shared + " in zone " + zoneId); - } - - if (networks.size() > 1) { - throw new InvalidParameterValueException("Found more than 1 network with trafficType " + TrafficType.Guest + " and guestType " + GuestType.Shared + " in zone " + zoneId); - - } - - return networks.get(0); - } - - protected PhysicalNetworkServiceProvider addDefaultVirtualRouterToPhysicalNetwork(long physicalNetworkId) { - - PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, Network.Provider.VirtualRouter.getName(), null, null); - // add instance of the provider - VirtualRouterElement element = (VirtualRouterElement) getElementImplementingProvider(Network.Provider.VirtualRouter.getName()); - if (element == null) { - throw new CloudRuntimeException("Unable to find the Network Element implementing the VirtualRouter Provider"); - } - element.addElement(nsp.getId(), VirtualRouterProviderType.VirtualRouter); - - return nsp; - } - - protected PhysicalNetworkServiceProvider addDefaultVpcVirtualRouterToPhysicalNetwork(long physicalNetworkId) { - - PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, - Network.Provider.VPCVirtualRouter.getName(), null, null); - // add instance of the provider - VpcVirtualRouterElement element = (VpcVirtualRouterElement) getElementImplementingProvider(Network.Provider.VPCVirtualRouter.getName()); - if (element == null) { - throw new CloudRuntimeException("Unable to find the Network Element implementing the VPCVirtualRouter Provider"); - } - element.addElement(nsp.getId(), VirtualRouterProviderType.VPCVirtualRouter); - - return nsp; - } - - protected PhysicalNetworkServiceProvider addDefaultSecurityGroupProviderToPhysicalNetwork(long physicalNetworkId) { - - PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, - Network.Provider.SecurityGroupProvider.getName(), null, null); - - return nsp; - } - - @Override - public boolean isNetworkSystem(Network network) { - NetworkOffering no = _networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId()); - if (no.isSystemOnly()) { - return true; - } else { - return false; - } - } - - protected Map finalizeServicesAndProvidersForNetwork(NetworkOffering offering, Long physicalNetworkId) { + public Map finalizeServicesAndProvidersForNetwork(NetworkOffering offering, Long physicalNetworkId) { Map svcProviders = new HashMap(); Map> providerSvcs = new HashMap>(); List servicesMap = _ntwkOfferingSrvcDao.listByNetworkOfferingId(offering.getId()); @@ -6924,7 +3227,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag String provider = serviceMap.getProvider(); if (provider == null) { - provider = getDefaultUniqueProviderForService(service).getName(); + provider = _networkModel.getDefaultUniqueProviderForService(service).getName(); } // check that provider is supported @@ -6946,25 +3249,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return svcProviders; } - @Override - public Long getPhysicalNetworkId(Network network) { - if (network.getTrafficType() != TrafficType.Guest) { - return getNonGuestNetworkPhysicalNetworkId(network); - } - - Long physicalNetworkId = network.getPhysicalNetworkId(); - NetworkOffering offering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); - if (physicalNetworkId == null) { - physicalNetworkId = findPhysicalNetworkId(network.getDataCenterId(), offering.getTags(), offering.getTrafficType()); - } - return physicalNetworkId; - } - - @Override - public boolean getAllowSubdomainAccessGlobal() { - return _allowSubdomainNetworkAccess; - } - private List getNetworkProviders(long networkId) { List providerNames = _ntwkSrvcDao.getDistinctProviders(networkId); List providers = new ArrayList(); @@ -6976,198 +3260,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @Override - public boolean isProviderForNetwork(Provider provider, long networkId) { - if (_ntwkSrvcDao.isProviderForNetwork(networkId, provider) != null) { - return true; - } else { - return false; - } - } - - @Override - public boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId) { - if (_ntwkOfferingSrvcDao.isProviderForNetworkOffering(networkOfferingId, provider)) { - return true; - } else { - return false; - } - } - - @Override - public void canProviderSupportServices(Map> providersMap) { - for (Provider provider : providersMap.keySet()) { - // check if services can be turned off - NetworkElement element = getElementImplementingProvider(provider.getName()); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getName() + "'"); - } - - Set enabledServices = new HashSet(); - enabledServices.addAll(providersMap.get(provider)); - - if (enabledServices != null && !enabledServices.isEmpty()) { - if (!element.canEnableIndividualServices()) { - Set requiredServices = new HashSet(); - requiredServices.addAll(element.getCapabilities().keySet()); - - if (requiredServices.contains(Network.Service.Gateway)) { - requiredServices.remove(Network.Service.Gateway); - } - - if (requiredServices.contains(Network.Service.Firewall)) { - requiredServices.remove(Network.Service.Firewall); - } - - if (enabledServices.contains(Network.Service.Firewall)) { - enabledServices.remove(Network.Service.Firewall); - } - - // exclude gateway service - if (enabledServices.size() != requiredServices.size()) { - StringBuilder servicesSet = new StringBuilder(); - - for (Service requiredService : requiredServices) { - // skip gateway service as we don't allow setting it via API - if (requiredService == Service.Gateway) { - continue; - } - servicesSet.append(requiredService.getName() + ", "); - } - servicesSet.delete(servicesSet.toString().length() - 2, servicesSet.toString().length()); - - throw new InvalidParameterValueException("Cannot enable subset of Services, Please specify the complete list of Services: " + servicesSet.toString() + " for Service Provider " - + provider.getName()); - } - } - List serviceList = new ArrayList(); - for (Service service : enabledServices) { - // check if the service is provided by this Provider - if (!element.getCapabilities().containsKey(service)) { - throw new UnsupportedServiceException(provider.getName() + " Provider cannot provide service " + service.getName()); - } - serviceList.add(service.getName()); - } - if (!element.verifyServicesCombination(enabledServices)) { - throw new UnsupportedServiceException("Provider " + provider.getName() + " doesn't support services combination: " + serviceList); - } - } - } - } - - @Override - public boolean canAddDefaultSecurityGroup() { - String defaultAdding = _configDao.getValue(Config.SecurityGroupDefaultAdding.key()); - return (defaultAdding != null && defaultAdding.equalsIgnoreCase("true")); - } - - @Override - public List listNetworkOfferingServices(long networkOfferingId) { - List services = new ArrayList(); - List servicesStr = _ntwkOfferingSrvcDao.listServicesForNetworkOffering(networkOfferingId); - for (String serviceStr : servicesStr) { - services.add(Service.getService(serviceStr)); - } - - return services; - } - - @Override - public boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services) { - long physicalNtwkId = findPhysicalNetworkId(zoneId, offering.getTags(), offering.getTrafficType()); - boolean result = true; - List checkedProvider = new ArrayList(); - for (Service service : services) { - // get all the providers, and check if each provider is enabled - List providerNames = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(offering.getId(), service); - for (String providerName : providerNames) { - if (!checkedProvider.contains(providerName)) { - result = result && isProviderEnabledInPhysicalNetwork(physicalNtwkId, providerName); - } - } - } - - return result; - } - - @Override - public boolean checkIpForService(IPAddressVO userIp, Service service, Long networkId) { - if (networkId == null) { - networkId = userIp.getAssociatedWithNetworkId(); - } - - NetworkVO network = _networksDao.findById(networkId); - NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); - if (offering.getGuestType() != GuestType.Isolated) { - return true; - } - PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); - if (!canIpUsedForService(publicIp, service, networkId)) { - return false; - } - if (!offering.isConserveMode()) { - return canIpUsedForNonConserveService(publicIp, service); - } - return true; - } - - @Override - public List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd) { - String type = cmd.getTrafficType(); - List> results = new ArrayList>(); - if (type != null) { - for (NetworkGuru guru : _networkGurus) { - if (guru.isMyTrafficType(TrafficType.getTrafficType(type))) { - results.add(new Pair(TrafficType.getTrafficType(type), guru.getName())); - break; - } - } - } else { - for (NetworkGuru guru : _networkGurus) { - TrafficType[] allTypes = guru.getSupportedTrafficType(); - for (TrafficType t : allTypes) { - results.add(new Pair(t, guru.getName())); - } - } - } - - return results; - } - - @Override - public void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue) { - for (Provider provider : providers) { - NetworkElement element = getElementImplementingProvider(provider.getName()); - if (element != null) { - Map> elementCapabilities = element.getCapabilities(); - if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { - throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider.getName()); - } - Map serviceCapabilities = elementCapabilities.get(service); - if (serviceCapabilities == null || serviceCapabilities.isEmpty()) { - throw new UnsupportedServiceException("Service " + service.getName() + " doesn't have capabilites for element=" + element.getName() + " implementing Provider=" + provider.getName()); - } - - String value = serviceCapabilities.get(cap); - if (value == null || value.isEmpty()) { - throw new UnsupportedServiceException("Service " + service.getName() + " doesn't have capability " + cap.getName() + " for element=" + element.getName() + " implementing Provider=" - + provider.getName()); - } - - capValue = capValue.toLowerCase(); - - if (!value.contains(capValue)) { - throw new UnsupportedServiceException("Service " + service.getName() + " doesn't support value " + capValue + " for capability " + cap.getName() + " for element=" + element.getName() - + " implementing Provider=" + provider.getName()); - } - } else { - throw new UnsupportedServiceException("Unable to find network element for provider " + provider.getName()); - } - } - } - public IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) throws InsufficientAddressCapacityException { - Network guestNetwork = getNetwork(networkId); + Network guestNetwork = _networksDao.findById(networkId); NetworkOffering off = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); IpAddress ip = null; if ((off.getElasticLb() && forElasticLb) || (off.getElasticIp() && forElasticIp)) { @@ -7177,7 +3272,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // allocate ip ip = allocateIP(owner, true, guestNetwork.getDataCenterId()); // apply ip associations - ip = associateIPToNetwork(ip.getId(), networkId); + ip = associateIPToGuestNetwork(ip.getId(), networkId, true);; } catch (ResourceAllocationException ex) { throw new CloudRuntimeException("Failed to allocate system ip due to ", ex); } catch (ConcurrentOperationException ex) { @@ -7213,22 +3308,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } @Override - public void checkNetworkPermissions(Account owner, Network network) { - // Perform account permission check - if (network.getGuestType() != Network.GuestType.Shared) { - List networkMap = _networksDao.listBy(owner.getId(), network.getId()); - if (networkMap == null || networkMap.isEmpty()) { - throw new PermissionDeniedException("Unable to use network with id= " + network.getId() + ", permission denied"); - } - } else { - if (!isNetworkAvailableInDomain(network.getId(), owner.getDomainId())) { - throw new PermissionDeniedException("Shared network id=" + network.getId() + " is not available in domain id=" + owner.getDomainId()); - } - } - } - public void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile vm, Network network, String requestedIp) throws InsufficientVirtualNetworkCapcityException, - InsufficientAddressCapacityException { + InsufficientAddressCapacityException { if (nic.getIp4Address() == null) { PublicIp ip = assignPublicIpAddress(dc.getId(), null, vm.getOwner(), VlanType.DirectAttached, network.getId(), requestedIp, false); nic.setIp4Address(ip.getAddress().toString()); @@ -7246,283 +3327,19 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag nic.setDns2(dc.getDns2()); } - @Override - public String getDefaultPublicTrafficLabel(long dcId, HypervisorType hypervisorType) { - try { - PhysicalNetwork publicPhyNetwork = getOnePhysicalNetworkByZoneAndTrafficType(dcId, TrafficType.Public); - PhysicalNetworkTrafficTypeVO publicTraffic = _pNTrafficTypeDao.findBy(publicPhyNetwork.getId(), - TrafficType.Public); - if (publicTraffic != null) { - String label = null; - switch (hypervisorType) { - case XenServer: - label = publicTraffic.getXenNetworkLabel(); - break; - case KVM: - label = publicTraffic.getKvmNetworkLabel(); - break; - case VMware: - label = publicTraffic.getVmwareNetworkLabel(); - break; - } - return label; - } - } catch (Exception ex) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Failed to retrieve the default label for public traffic." + "zone: " + dcId + " hypervisor: " + hypervisorType + " due to: " + ex.getMessage()); - } - } - return null; - } - @Override - public String getDefaultGuestTrafficLabel(long dcId, HypervisorType hypervisorType) { - try { - PhysicalNetwork guestPhyNetwork = getOnePhysicalNetworkByZoneAndTrafficType(dcId, TrafficType.Guest); - PhysicalNetworkTrafficTypeVO guestTraffic = _pNTrafficTypeDao.findBy(guestPhyNetwork.getId(), - TrafficType.Guest); - if (guestTraffic != null) { - String label = null; - switch (hypervisorType) { - case XenServer: - label = guestTraffic.getXenNetworkLabel(); - break; - case KVM: - label = guestTraffic.getKvmNetworkLabel(); - break; - case VMware: - label = guestTraffic.getVmwareNetworkLabel(); - break; - } - return label; - } - } catch (Exception ex) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Failed to retrive the default label for management traffic:" + "zone: " + dcId + - " hypervisor: " + hypervisorType + " due to:" + ex.getMessage()); - } - } - return null; - } - - private PhysicalNetwork getOnePhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - List networkList = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); - - if (networkList.isEmpty()) { - throw new InvalidParameterValueException("Unable to find the default physical network with traffic=" - + trafficType + " in zone id=" + zoneId + ". "); - } - - if (networkList.size() > 1) { - s_logger.info("More than one physical networks exist in zone id=" + zoneId + " with traffic type=" - + trafficType + ". "); - } - - return networkList.get(0); - } - - @Override - public List listNetworksByVpc(long vpcId) { - return _networksDao.listByVpc(vpcId); - } - - @Override - public String getDefaultNetworkDomain() { - return _networkDomain; - } - - @Override - public List getNtwkOffDistinctProviders(long ntkwOffId) { - List providerNames = _ntwkOfferingSrvcDao.getDistinctProviders(ntkwOffId); - List providers = new ArrayList(); - for (String providerName : providerNames) { - providers.add(Network.Provider.getProvider(providerName)); - } - - return providers; - } - - @Override - public boolean isVmPartOfNetwork(long vmId, long ntwkId) { - if (_nicDao.findNonReleasedByInstanceIdAndNetworkId(ntwkId, vmId) != null) { - return true; - } - return false; - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "associating Ip", async = true) - public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, - ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException { - - Network network = _networksDao.findById(networkId); - if (network == null) { - throw new InvalidParameterValueException("Invalid network id is given"); - } - - if (network.getVpcId() != null) { - throw new InvalidParameterValueException("Can't assign ip to the network directly when network belongs" + - " to VPC.Specify vpcId to associate ip address to VPC"); - } - return associateIPToGuestNetwork(ipId, networkId, true); - - } - - - @Override @DB - public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, - String vlan, String startIp, String endIp, String gateway, String netmask, long networkOwnerId, Long vpcId) - throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { - - Account owner = _accountMgr.getAccount(networkOwnerId); - - // Get system network offeirng - NetworkOfferingVO ntwkOff = _systemNetworks.get(NetworkOffering.SystemPrivateGatewayNetworkOffering); - - // Validate physical network - PhysicalNetwork pNtwk = _physicalNetworkDao.findById(physicalNetworkId); - if (pNtwk == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find a physical network" + - " having the given id"); - ex.addProxyObject("physical_network", physicalNetworkId, "physicalNetworkId"); - throw ex; - } - - // VALIDATE IP INFO - // if end ip is not specified, default it to startIp - if (!NetUtils.isValidIp(startIp)) { - throw new InvalidParameterValueException("Invalid format for the startIp parameter"); - } - if (endIp == null) { - endIp = startIp; - } else if (!NetUtils.isValidIp(endIp)) { - throw new InvalidParameterValueException("Invalid format for the endIp parameter"); - } - - String cidr = null; - if (!NetUtils.isValidIp(gateway)) { - throw new InvalidParameterValueException("Invalid gateway"); - } - if (!NetUtils.isValidNetmask(netmask)) { - throw new InvalidParameterValueException("Invalid netmask"); - } - - cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask); - - - Transaction txn = Transaction.currentTxn(); - txn.start(); - - //lock datacenter as we need to get mac address seq from there - DataCenterVO dc = _dcDao.lockRow(pNtwk.getDataCenterId(), true); - - //check if we need to create guest network - Network privateNetwork = _networksDao.getPrivateNetwork(BroadcastDomainType.Vlan.toUri(vlan).toString(), cidr, - networkOwnerId, pNtwk.getDataCenterId()); - if (privateNetwork == null) { - //create Guest network - privateNetwork = createGuestNetwork(ntwkOff.getId(), networkName, displayText, gateway, cidr, vlan, - null, owner, null, pNtwk, pNtwk.getDataCenterId(), ACLType.Account, null, null); - s_logger.debug("Created private network " + privateNetwork); - } else { - s_logger.debug("Private network already exists: " + privateNetwork); - } - - //add entry to private_ip_address table - PrivateIpVO privateIp = _privateIpDao.findByIpAndSourceNetworkId(privateNetwork.getId(), startIp); - if (privateIp != null) { - throw new InvalidParameterValueException("Private ip address " + startIp + " already used for private gateway" + - " in zone " + _configMgr.getZone(pNtwk.getDataCenterId()).getName()); - } - - Long mac = dc.getMacAddress(); - Long nextMac = mac + 1; - dc.setMacAddress(nextMac); - - privateIp = new PrivateIpVO(startIp, privateNetwork.getId(), nextMac, vpcId); - _privateIpDao.persist(privateIp); - - _dcDao.update(dc.getId(), dc); - - txn.commit(); - s_logger.debug("Private network " + privateNetwork + " is created"); - - return privateNetwork; - } - @Override public boolean setupDns(Network network, Provider provider) { - boolean dnsProvided = isProviderSupportServiceInNetwork(network.getId(), Service.Dns, provider ); - boolean dhcpProvided =isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, + boolean dnsProvided = _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dns, provider ); + boolean dhcpProvided =_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, provider); - + boolean setupDns = dnsProvided || dhcpProvided; return setupDns; } - - @Override - public List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType) { - - List pNtwks = _physicalNetworkDao.listByZone(zoneId); - - Iterator it = pNtwks.iterator(); - while (it.hasNext()) { - PhysicalNetwork pNtwk = it.next(); - if (!_pNTrafficTypeDao.isTrafficTypeSupported(pNtwk.getId(), trafficType)) { - it.remove(); - } - } - return pNtwks; - } - - @Override - public boolean isPrivateGateway(Nic guestNic) { - Network network = getNetwork(guestNic.getNetworkId()); - if (network.getTrafficType() != TrafficType.Guest || network.getNetworkOfferingId() != _privateOfferingId.longValue()) { - return false; - } - return true; - } - - @Override - public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context, - VirtualMachineProfileImpl vmProfile, boolean prepare) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, - ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - - VirtualMachine vm = vmProfile.getVirtualMachine(); - NetworkVO networkVO = _networksDao.findById(network.getId()); - DataCenter dc = _configMgr.getZone(network.getDataCenterId()); - Host host = _hostDao.findById(vm.getHostId()); - DeployDestination dest = new DeployDestination(dc, null, null, host); - - NicProfile nic = getNicProfileForVm(network, requested, vm); - - //1) allocate nic (if needed) - if (nic == null) { - int deviceId = _nicDao.countNics(vm.getId()); - - nic = allocateNic(requested, network, false, - deviceId, vmProfile).first(); - - if (nic == null) { - throw new CloudRuntimeException("Failed to allocate nic for vm " + vm + " in network " + network); - } - - s_logger.debug("Nic is allocated successfully for vm " + vm + " in network " + network); - } - - //2) prepare nic - if (prepare) { - nic = prepareNic(vmProfile, dest, context, nic.getId(), networkVO); - s_logger.debug("Nic is prepared successfully for vm " + vm + " in network " + network); - } - - return nic; - } - private NicProfile getNicProfileForVm(Network network, NicProfile requested, VirtualMachine vm) { + protected NicProfile getNicProfileForVm(Network network, NicProfile requested, VirtualMachine vm) { NicProfile nic = null; if (requested != null && requested.getBroadCastUri() != null) { String broadcastUri = requested.getBroadCastUri().toString(); @@ -7530,24 +3347,93 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag NicVO nicVO = _nicDao.findByNetworkIdInstanceIdAndBroadcastUri(network.getId(), vm.getId(), broadcastUri); if (nicVO != null) { if (ipAddress == null || nicVO.getIp4Address().equals(ipAddress)) { - nic = getNicProfile(vm, network.getId(), broadcastUri); + nic = _networkModel.getNicProfile(vm, network.getId(), broadcastUri); } } } else { NicVO nicVO = _nicDao.findByInstanceIdAndNetworkId(network.getId(), vm.getId()); if (nicVO != null) { - nic = getNicProfile(vm, network.getId(), null); + nic = _networkModel.getNicProfile(vm, network.getId(), null); } } return nic; } - + + @Override + public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context, VirtualMachineProfileImpl vmProfile, boolean prepare) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + + VirtualMachine vm = vmProfile.getVirtualMachine(); + NetworkVO networkVO = _networksDao.findById(network.getId()); + DataCenter dc = _configMgr.getZone(network.getDataCenterId()); + Host host = _hostDao.findById(vm.getHostId()); + DeployDestination dest = new DeployDestination(dc, null, null, host); + + NicProfile nic = getNicProfileForVm(network, requested, vm); + + //1) allocate nic (if needed) + if (nic == null) { + int deviceId = _nicDao.countNics(vm.getId()); + + nic = allocateNic(requested, network, false, + deviceId, vmProfile).first(); + + if (nic == null) { + throw new CloudRuntimeException("Failed to allocate nic for vm " + vm + " in network " + network); + } + + s_logger.debug("Nic is allocated successfully for vm " + vm + " in network " + network); + } + + //2) prepare nic + if (prepare) { + nic = prepareNic(vmProfile, dest, context, nic.getId(), networkVO); + s_logger.debug("Nic is prepared successfully for vm " + vm + " in network " + network); + } + + return nic; + } + @Override + public List getNicProfiles(VirtualMachine vm) { + List nics = _nicDao.listByVmId(vm.getId()); + List profiles = new ArrayList(); + + if (nics != null) { + for (Nic nic : nics) { + NetworkVO network = _networksDao.findById(nic.getNetworkId()); + Integer networkRate = _networkModel.getNetworkRate(network.getId(), vm.getId()); + + NetworkGuru guru = AdapterBase.getAdapterByName(_networkGurus, network.getGuruName()); + NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), + networkRate, _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vm.getHypervisorType(), network)); + guru.updateNicProfile(profile, network); + profiles.add(profile); + } + } + return profiles; + } + @Override public int getNetworkLockTimeout() { return _networkLockTimeout; } + private Map> getServiceProvidersMap(long networkId) { + Map> map = new HashMap>(); + List nsms = _ntwkSrvcDao.getServicesInNetwork(networkId); + for (NetworkServiceMapVO nsm : nsms) { + Set providers = map.get(Service.getService(nsm.getService())); + if (providers == null) { + providers = new HashSet(); + } + providers.add(Provider.getProvider(nsm.getProvider())); + map.put(Service.getService(nsm.getService()), providers); + } + return map; + } + @Override public List getProvidersForServiceInNetwork(Network network, Service service) { Map> service2ProviderMap = getServiceProvidersMap(network.getId()); @@ -7569,11 +3455,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag s_logger.error("Found " + providers.size() + " " + service.getName() + " providers for network!" + network.getId()); return null; } - NetworkElement element = getElementImplementingProvider(providers.get(0).getName()); + NetworkElement element = _networkModel.getElementImplementingProvider(providers.get(0).getName()); s_logger.info("Let " + element.getName() + " handle " + service.getName() + " in network " + network.getId()); return element; } - + @Override public StaticNatServiceProvider getStaticNatProviderForNetwork(Network network) { NetworkElement element = getElementForServiceInNetwork(network, Service.StaticNat); @@ -7587,6 +3473,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag assert element instanceof LoadBalancingServiceProvider; return ( LoadBalancingServiceProvider)element; } + @Override public boolean isNetworkInlineMode(Network network) { NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); return offering.isInline(); diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java new file mode 100644 index 00000000000..a99e9c50cbe --- /dev/null +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -0,0 +1,1839 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + +import java.security.InvalidParameterException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.log4j.Logger; + +import com.cloud.configuration.Config; +import com.cloud.configuration.ConfigurationManager; +import com.cloud.configuration.dao.ConfigurationDao; +import com.cloud.dc.PodVlanMapVO; +import com.cloud.dc.Vlan.VlanType; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.PodVlanMapDao; +import com.cloud.dc.dao.VlanDao; +import com.cloud.domain.DomainVO; +import com.cloud.domain.dao.DomainDao; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.UnsupportedServiceException; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.IpAddress.State; +import com.cloud.network.Network.Capability; +import com.cloud.network.Network.GuestType; +import com.cloud.network.Network.Provider; +import com.cloud.network.Network.Service; +import com.cloud.network.Networks.TrafficType; +import com.cloud.network.addr.PublicIp; +import com.cloud.network.dao.FirewallRulesDao; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDomainDao; +import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderVO; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; +import com.cloud.network.element.NetworkElement; +import com.cloud.network.element.UserDataServiceProvider; +import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.dao.PortForwardingRulesDao; +import com.cloud.network.vpc.dao.PrivateIpDao; +import com.cloud.offering.NetworkOffering; +import com.cloud.offerings.NetworkOfferingServiceMapVO; +import com.cloud.offerings.NetworkOfferingVO; +import com.cloud.offerings.dao.NetworkOfferingDao; +import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; +import com.cloud.user.Account; +import com.cloud.user.DomainManager; +import com.cloud.user.dao.AccountDao; +import com.cloud.utils.component.Adapters; +import com.cloud.utils.component.Inject; +import com.cloud.utils.component.Manager; +import com.cloud.utils.db.DB; +import com.cloud.utils.db.JoinBuilder; +import com.cloud.utils.db.JoinBuilder.JoinType; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Op; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.NicVO; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachine.Type; +import com.cloud.vm.dao.NicDao; +import com.cloud.vm.dao.VMInstanceDao; + +@Local(value = { NetworkModel.class}) +public class NetworkModelImpl implements NetworkModel, Manager{ + static final Logger s_logger = Logger.getLogger(NetworkModelImpl.class); + + String _name; + @Inject + DataCenterDao _dcDao = null; + @Inject + VlanDao _vlanDao = null; + @Inject + IPAddressDao _ipAddressDao = null; + @Inject + AccountDao _accountDao = null; + @Inject + DomainDao _domainDao = null; + @Inject + ConfigurationDao _configDao; + + @Inject + ConfigurationManager _configMgr; + + @Inject + NetworkOfferingDao _networkOfferingDao = null; + @Inject + NetworkDao _networksDao = null; + @Inject + NicDao _nicDao = null; + + @Inject + PodVlanMapDao _podVlanMapDao; + + @Inject(adapter = NetworkElement.class) + Adapters _networkElements; + + @Inject + NetworkDomainDao _networkDomainDao; + @Inject + VMInstanceDao _vmDao; + + @Inject + FirewallRulesDao _firewallDao; + @Inject + DomainManager _domainMgr; + + @Inject + NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao; + @Inject + PhysicalNetworkDao _physicalNetworkDao; + @Inject + PhysicalNetworkServiceProviderDao _pNSPDao; + @Inject + PortForwardingRulesDao _portForwardingRulesDao; + @Inject + PhysicalNetworkTrafficTypeDao _pNTrafficTypeDao; + @Inject + NetworkServiceMapDao _ntwkSrvcDao; + @Inject + PrivateIpDao _privateIpDao; + + + + private final HashMap _systemNetworks = new HashMap(5); + static Long _privateOfferingId = null; + + + SearchBuilder IpAddressSearch; + SearchBuilder NicForTrafficTypeSearch; + + + private String _networkDomain; + private boolean _allowSubdomainNetworkAccess; + + private Map _configs; + + HashMap _lastNetworkIdsToFree = new HashMap(); + + static HashMap> s_serviceToImplementedProvidersMap = new HashMap>(); + static HashMap s_providerToNetworkElementMap = new HashMap(); + /** + * + */ + public NetworkModelImpl() { + super(); + } + + @Override + public NetworkElement getElementImplementingProvider(String providerName) { + String elementName = s_providerToNetworkElementMap.get(providerName); + NetworkElement element = _networkElements.get(elementName); + return element; + } + + @Override + public List getElementServices(Provider provider) { + NetworkElement element = getElementImplementingProvider(provider.getName()); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getName() + "'"); + } + return new ArrayList(element.getCapabilities().keySet()); + } + + @Override + public boolean canElementEnableIndividualServices(Provider provider) { + NetworkElement element = getElementImplementingProvider(provider.getName()); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getName() + "'"); + } + return element.canEnableIndividualServices(); + } + + Set getPublicIpPurposeInRules(PublicIpAddress ip, boolean includeRevoked, boolean includingFirewall) { + Set result = new HashSet(); + List rules = null; + if (includeRevoked) { + rules = _firewallDao.listByIp(ip.getId()); + } else { + rules = _firewallDao.listByIpAndNotRevoked(ip.getId()); + } + + if (rules == null || rules.isEmpty()) { + return null; + } + + for (FirewallRuleVO rule : rules) { + if (rule.getPurpose() != Purpose.Firewall || includingFirewall) { + result.add(rule.getPurpose()); + } + } + + return result; + } + + @Override + public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { + Map> ipToServices = new HashMap>(); + + if (publicIps != null && !publicIps.isEmpty()) { + Set networkSNAT = new HashSet(); + for (PublicIpAddress ip : publicIps) { + Set services = ipToServices.get(ip); + if (services == null) { + services = new HashSet(); + } + if (ip.isSourceNat()) { + if (!networkSNAT.contains(ip.getAssociatedWithNetworkId())) { + services.add(Service.SourceNat); + networkSNAT.add(ip.getAssociatedWithNetworkId()); + } else { + CloudRuntimeException ex = new CloudRuntimeException("Multiple generic soure NAT IPs provided for network"); + // see the IPAddressVO.java class. + ex.addProxyObject("user_ip_address", ip.getAssociatedWithNetworkId(), "networkId"); + throw ex; + } + } + ipToServices.put(ip, services); + + // if IP in allocating state then it will not have any rules attached so skip IPAssoc to network service + // provider + if (ip.getState() == State.Allocating) { + continue; + } + + // check if any active rules are applied on the public IP + Set purposes = getPublicIpPurposeInRules(ip, false, includingFirewall); + // Firewall rules didn't cover static NAT + if (ip.isOneToOneNat() && ip.getAssociatedWithVmId() != null) { + if (purposes == null) { + purposes = new HashSet(); + } + purposes.add(Purpose.StaticNat); + } + if (purposes == null || purposes.isEmpty()) { + // since no active rules are there check if any rules are applied on the public IP but are in + // revoking state + + purposes = getPublicIpPurposeInRules(ip, true, includingFirewall); + if (ip.isOneToOneNat()) { + if (purposes == null) { + purposes = new HashSet(); + } + purposes.add(Purpose.StaticNat); + } + if (purposes == null || purposes.isEmpty()) { + // IP is not being used for any purpose so skip IPAssoc to network service provider + continue; + } else { + if (rulesRevoked) { + // no active rules/revoked rules are associated with this public IP, so remove the + // association with the provider + ip.setState(State.Releasing); + } else { + if (ip.getState() == State.Releasing) { + // rules are not revoked yet, so don't let the network service provider revoke the IP + // association + // mark IP is allocated so that IP association will not be removed from the provider + ip.setState(State.Allocated); + } + } + } + } + if (purposes.contains(Purpose.StaticNat)) { + services.add(Service.StaticNat); + } + if (purposes.contains(Purpose.LoadBalancing)) { + services.add(Service.Lb); + } + if (purposes.contains(Purpose.PortForwarding)) { + services.add(Service.PortForwarding); + } + if (purposes.contains(Purpose.Vpn)) { + services.add(Service.Vpn); + } + if (purposes.contains(Purpose.Firewall)) { + services.add(Service.Firewall); + } + if (services.isEmpty()) { + continue; + } + ipToServices.put(ip, services); + } + } + return ipToServices; + } + + public boolean canIpUsedForNonConserveService(PublicIp ip, Service service) { + // If it's non-conserve mode, then the new ip should not be used by any other services + List ipList = new ArrayList(); + ipList.add(ip); + Map> ipToServices = getIpToServices(ipList, false, false); + Set services = ipToServices.get(ip); + // Not used currently, safe + if (services == null || services.isEmpty()) { + return true; + } + // Since it's non-conserve mode, only one service should used for IP + if (services.size() != 1) { + throw new InvalidParameterException("There are multiple services used ip " + ip.getAddress() + "."); + } + if (service != null && !((Service) services.toArray()[0] == service || service.equals(Service.Firewall))) { + throw new InvalidParameterException("The IP " + ip.getAddress() + " is already used as " + ((Service) services.toArray()[0]).getName() + " rather than " + service.getName()); + } + return true; + } + + Map> getServiceProvidersMap(long networkId) { + Map> map = new HashMap>(); + List nsms = _ntwkSrvcDao.getServicesInNetwork(networkId); + for (NetworkServiceMapVO nsm : nsms) { + Set providers = map.get(Service.getService(nsm.getService())); + if (providers == null) { + providers = new HashSet(); + } + providers.add(Provider.getProvider(nsm.getProvider())); + map.put(Service.getService(nsm.getService()), providers); + } + return map; + } + + public boolean canIpUsedForService(PublicIp publicIp, Service service, Long networkId) { + List ipList = new ArrayList(); + ipList.add(publicIp); + Map> ipToServices = getIpToServices(ipList, false, true); + Set services = ipToServices.get(publicIp); + if (services == null || services.isEmpty()) { + return true; + } + + if (networkId == null) { + networkId = publicIp.getAssociatedWithNetworkId(); + } + + // We only support one provider for one service now + Map> serviceToProviders = getServiceProvidersMap(networkId); + Set oldProviders = serviceToProviders.get(services.toArray()[0]); + Provider oldProvider = (Provider) oldProviders.toArray()[0]; + // Since IP already has service to bind with, the oldProvider can't be null + Set newProviders = serviceToProviders.get(service); + if (newProviders == null || newProviders.isEmpty()) { + throw new InvalidParameterException("There is no new provider for IP " + publicIp.getAddress() + " of service " + service.getName() + "!"); + } + Provider newProvider = (Provider) newProviders.toArray()[0]; + if (!oldProvider.equals(newProvider)) { + throw new InvalidParameterException("There would be multiple providers for IP " + publicIp.getAddress() + "!"); + } + return true; + } + + Map> getProviderServicesMap(long networkId) { + Map> map = new HashMap>(); + List nsms = _ntwkSrvcDao.getServicesInNetwork(networkId); + for (NetworkServiceMapVO nsm : nsms) { + Set services = map.get(Provider.getProvider(nsm.getProvider())); + if (services == null) { + services = new HashSet(); + } + services.add(Service.getService(nsm.getService())); + map.put(Provider.getProvider(nsm.getProvider()), services); + } + return map; + } + + @Override + public Map> getProviderToIpList(Network network, Map> ipToServices) { + NetworkOffering offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); + if (!offering.isConserveMode()) { + for (PublicIpAddress ip : ipToServices.keySet()) { + Set services = new HashSet() ; + services.addAll(ipToServices.get(ip)); + if (services != null && services.contains(Service.Firewall)) { + services.remove(Service.Firewall); + } + if (services != null && services.size() > 1) { + throw new CloudRuntimeException("Ip " + ip.getAddress() + " is used by multiple services!"); + } + } + } + Map> serviceToIps = new HashMap>(); + for (PublicIpAddress ip : ipToServices.keySet()) { + for (Service service : ipToServices.get(ip)) { + Set ips = serviceToIps.get(service); + if (ips == null) { + ips = new HashSet(); + } + ips.add(ip); + serviceToIps.put(service, ips); + } + } + // TODO Check different provider for same IP + Map> providerToServices = getProviderServicesMap(network.getId()); + Map> providerToIpList = new HashMap>(); + for (Provider provider : providerToServices.keySet()) { + Set services = providerToServices.get(provider); + ArrayList ipList = new ArrayList(); + Set ipSet = new HashSet(); + for (Service service : services) { + Set serviceIps = serviceToIps.get(service); + if (serviceIps == null || serviceIps.isEmpty()) { + continue; + } + ipSet.addAll(serviceIps); + } + Set sourceNatIps = serviceToIps.get(Service.SourceNat); + if (sourceNatIps != null && !sourceNatIps.isEmpty()) { + ipList.addAll(0, sourceNatIps); + ipSet.removeAll(sourceNatIps); + } + ipList.addAll(ipSet); + providerToIpList.put(provider, ipList); + } + return providerToIpList; + } + + + + @Override + public List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat) { + SearchCriteria sc = IpAddressSearch.create(); + sc.setParameters("accountId", accountId); + sc.setParameters("associatedWithNetworkId", associatedNetworkId); + + if (sourceNat != null) { + sc.addAnd("sourceNat", SearchCriteria.Op.EQ, sourceNat); + } + sc.setJoinParameters("virtualNetworkVlanSB", "vlanType", VlanType.VirtualNetwork); + + return _ipAddressDao.search(sc, null); + } + + @Override + public List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat) { + SearchCriteria sc = IpAddressSearch.create(); + sc.setParameters("accountId", accountId); + sc.setParameters("dataCenterId", dcId); + + if (sourceNat != null) { + sc.addAnd("sourceNat", SearchCriteria.Op.EQ, sourceNat); + } + sc.setJoinParameters("virtualNetworkVlanSB", "vlanType", VlanType.VirtualNetwork); + + return _ipAddressDao.search(sc, null); + } + + @Override + public List getNics(long vmId) { + return _nicDao.listByVmId(vmId); + } + + + + @Override + public String getNextAvailableMacAddressInNetwork(long networkId) throws InsufficientAddressCapacityException { + String mac = _networksDao.getNextAvailableMacAddress(networkId); + if (mac == null) { + throw new InsufficientAddressCapacityException("Unable to create another mac address", Network.class, networkId); + } + return mac; + } + + @Override + @DB + public Network getNetwork(long id) { + return _networksDao.findById(id); + } + + @Override + public boolean canUseForDeploy(Network network) { + if (network.getTrafficType() != TrafficType.Guest) { + return false; + } + boolean hasFreeIps = true; + if (network.getGuestType() == GuestType.Shared) { + hasFreeIps = _ipAddressDao.countFreeIPsInNetwork(network.getId()) > 0; + } else { + hasFreeIps = (getAvailableIps(network, null)).size() > 0; + } + + return hasFreeIps; + } + + + + @Override + public Map> getNetworkCapabilities(long networkId) { + + Map> networkCapabilities = new HashMap>(); + + // list all services of this networkOffering + List servicesMap = _ntwkSrvcDao.getServicesInNetwork(networkId); + for (NetworkServiceMapVO instance : servicesMap) { + Service service = Service.getService(instance.getService()); + NetworkElement element = getElementImplementingProvider(instance.getProvider()); + if (element != null) { + Map> elementCapabilities = element.getCapabilities(); + ; + if (elementCapabilities != null) { + networkCapabilities.put(service, elementCapabilities.get(service)); + } + } + } + + return networkCapabilities; + } + + @Override + public Map getNetworkServiceCapabilities(long networkId, Service service) { + + if (!areServicesSupportedInNetwork(networkId, service)) { + // TBD: networkId to uuid. No VO object being passed. So we will need to call + // addProxyObject with hardcoded tablename. Or we should probably look up the correct dao proxy object. + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported in the network id=" + networkId); + } + + Map serviceCapabilities = new HashMap(); + + // get the Provider for this Service for this offering + String provider = _ntwkSrvcDao.getProviderForServiceInNetwork(networkId, service); + + NetworkElement element = getElementImplementingProvider(provider); + if (element != null) { + Map> elementCapabilities = element.getCapabilities(); + ; + + if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider); + } + serviceCapabilities = elementCapabilities.get(service); + } + + return serviceCapabilities; + } + + @Override + public Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { + + if (!areServicesSupportedByNetworkOffering(offering.getId(), service)) { + // TBD: We should be sending networkOfferingId and not the offering object itself. + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the network offering " + offering); + } + + Map serviceCapabilities = new HashMap(); + + // get the Provider for this Service for this offering + List providers = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(offering.getId(), service); + if (providers.isEmpty()) { + // TBD: We should be sending networkOfferingId and not the offering object itself. + throw new InvalidParameterValueException("Service " + service.getName() + " is not supported by the network offering " + offering); + } + + // FIXME - in post 3.0 we are going to support multiple providers for the same service per network offering, so + // we have to calculate capabilities for all of them + String provider = providers.get(0); + + // FIXME we return the capabilities of the first provider of the service - what if we have multiple providers + // for same Service? + NetworkElement element = getElementImplementingProvider(provider); + if (element != null) { + Map> elementCapabilities = element.getCapabilities(); + ; + + if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { + // TBD: We should be sending providerId and not the offering object itself. + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider); + } + serviceCapabilities = elementCapabilities.get(service); + } + + return serviceCapabilities; + } + + @Override + public NetworkVO getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { + // find system public network offering + Long networkOfferingId = null; + List offerings = _networkOfferingDao.listSystemNetworkOfferings(); + for (NetworkOfferingVO offering : offerings) { + if (offering.getTrafficType() == trafficType) { + networkOfferingId = offering.getId(); + break; + } + } + + if (networkOfferingId == null) { + throw new InvalidParameterValueException("Unable to find system network offering with traffic type " + trafficType); + } + + List networks = _networksDao.listBy(Account.ACCOUNT_ID_SYSTEM, networkOfferingId, zoneId); + if (networks == null || networks.isEmpty()) { + // TBD: send uuid instead of zoneId. Hardcode tablename in call to addProxyObject(). + throw new InvalidParameterValueException("Unable to find network with traffic type " + trafficType + " in zone " + zoneId); + } + return networks.get(0); + } + + @Override + public NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId) { + List networks = _networksDao.listByZoneSecurityGroup(zoneId); + if (networks == null || networks.isEmpty()) { + return null; + } + + if (networks.size() > 1) { + s_logger.debug("There are multiple network with security group enabled? select one of them..."); + } + return networks.get(0); + } + + @Override + public PublicIpAddress getPublicIpAddress(long ipAddressId) { + IPAddressVO addr = _ipAddressDao.findById(ipAddressId); + if (addr == null) { + return null; + } + + return new PublicIp(addr, _vlanDao.findById(addr.getVlanId()), NetUtils.createSequenceBasedMacAddress(addr.getMacAddress())); + } + + @Override + public List listPodVlans(long podId) { + List vlans = _vlanDao.listVlansForPodByType(podId, VlanType.DirectAttached); + return vlans; + } + + @Override + public List listNetworksUsedByVm(long vmId, boolean isSystem) { + List networks = new ArrayList(); + + List nics = _nicDao.listByVmId(vmId); + if (nics != null) { + for (Nic nic : nics) { + NetworkVO network = _networksDao.findByIdIncludingRemoved(nic.getNetworkId()); + + if (isNetworkSystem(network) == isSystem) { + networks.add(network); + } + } + } + + return networks; + } + + @Override + public Nic getNicInNetwork(long vmId, long networkId) { + return _nicDao.findByInstanceIdAndNetworkId(networkId, vmId); + } + + @Override + public String getIpInNetwork(long vmId, long networkId) { + Nic guestNic = getNicInNetwork(vmId, networkId); + assert (guestNic != null && guestNic.getIp4Address() != null) : "Vm doesn't belong to network associated with " + + "ipAddress or ip4 address is null"; + return guestNic.getIp4Address(); + } + + @Override + public String getIpInNetworkIncludingRemoved(long vmId, long networkId) { + Nic guestNic = getNicInNetworkIncludingRemoved(vmId, networkId); + assert (guestNic != null && guestNic.getIp4Address() != null) : "Vm doesn't belong to network associated with " + + "ipAddress or ip4 address is null"; + return guestNic.getIp4Address(); + } + + @Override + public List getNicsForTraffic(long vmId, TrafficType type) { + SearchCriteria sc = NicForTrafficTypeSearch.create(); + sc.setParameters("instance", vmId); + sc.setJoinParameters("network", "traffictype", type); + + return _nicDao.search(sc, null); + } + + @Override + public IpAddress getIp(long ipAddressId) { + return _ipAddressDao.findById(ipAddressId); + } + + @Override + public Network getDefaultNetworkForVm(long vmId) { + Nic defaultNic = getDefaultNic(vmId); + if (defaultNic == null) { + return null; + } else { + return _networksDao.findById(defaultNic.getNetworkId()); + } + } + + @Override + public Nic getDefaultNic(long vmId) { + List nics = _nicDao.listByVmId(vmId); + Nic defaultNic = null; + if (nics != null) { + for (Nic nic : nics) { + if (nic.isDefaultNic()) { + defaultNic = nic; + break; + } + } + } else { + s_logger.debug("Unable to find default network for the vm; vm doesn't have any nics"); + return null; + } + + if (defaultNic == null) { + s_logger.debug("Unable to find default network for the vm; vm doesn't have default nic"); + } + + return defaultNic; + + } + + @Override + public UserDataServiceProvider getUserDataUpdateProvider(Network network) { + String userDataProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.UserData); + + if (userDataProvider == null) { + s_logger.debug("Network " + network + " doesn't support service " + Service.UserData.getName()); + return null; + } + + return (UserDataServiceProvider)getElementImplementingProvider(userDataProvider); + } + + @Override + public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { + return (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(networkOfferingId, services)); + } + + @Override + public boolean areServicesSupportedInNetwork(long networkId, Service... services) { + return (_ntwkSrvcDao.areServicesSupportedInNetwork(networkId, services)); + } + + @Override + public String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId) { + + List virtualNetworks = _networksDao.listByZoneAndGuestType(accountId, dataCenterId, Network.GuestType.Isolated, false); + + if (virtualNetworks.isEmpty()) { + s_logger.trace("Unable to find default Virtual network account id=" + accountId); + return null; + } + + NetworkVO virtualNetwork = virtualNetworks.get(0); + + NicVO networkElementNic = _nicDao.findByNetworkIdAndType(virtualNetwork.getId(), Type.DomainRouter); + + if (networkElementNic != null) { + return networkElementNic.getIp4Address(); + } else { + s_logger.warn("Unable to set find network element for the network id=" + virtualNetwork.getId()); + return null; + } + } + + @Override + public List listNetworksForAccount(long accountId, long zoneId, Network.GuestType type) { + List accountNetworks = new ArrayList(); + List zoneNetworks = _networksDao.listByZone(zoneId); + + for (NetworkVO network : zoneNetworks) { + if (!isNetworkSystem(network)) { + if (network.getGuestType() == Network.GuestType.Shared || !_networksDao.listBy(accountId, network.getId()).isEmpty()) { + if (type == null || type == network.getGuestType()) { + accountNetworks.add(network); + } + } + } + } + return accountNetworks; + } + + @Override + public List listAllNetworksInAllZonesByType(Network.GuestType type) { + List networks = new ArrayList(); + for (NetworkVO network: _networksDao.listAll()) { + if (!isNetworkSystem(network)) { + networks.add(network); + } + } + return networks; + } + + @Override + public Long getDedicatedNetworkDomain(long networkId) { + NetworkDomainVO networkMaps = _networkDomainDao.getDomainNetworkMapByNetworkId(networkId); + if (networkMaps != null) { + return networkMaps.getDomainId(); + } else { + return null; + } + } + + @Override + public Integer getNetworkRate(long networkId, Long vmId) { + VMInstanceVO vm = null; + if (vmId != null) { + vm = _vmDao.findById(vmId); + } + Network network = getNetwork(networkId); + NetworkOffering ntwkOff = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); + + // For default userVm Default network and domR guest/public network, get rate information from the service + // offering; for other situations get information + // from the network offering + boolean isUserVmsDefaultNetwork = false; + boolean isDomRGuestOrPublicNetwork = false; + if (vm != null) { + Nic nic = _nicDao.findByInstanceIdAndNetworkId(networkId, vmId); + if (vm.getType() == Type.User && nic != null && nic.isDefaultNic()) { + isUserVmsDefaultNetwork = true; + } else if (vm.getType() == Type.DomainRouter && ntwkOff != null && (ntwkOff.getTrafficType() == TrafficType.Public || ntwkOff.getTrafficType() == TrafficType.Guest)) { + isDomRGuestOrPublicNetwork = true; + } + } + if (isUserVmsDefaultNetwork || isDomRGuestOrPublicNetwork) { + return _configMgr.getServiceOfferingNetworkRate(vm.getServiceOfferingId()); + } else { + return _configMgr.getNetworkOfferingNetworkRate(ntwkOff.getId()); + } + } + + @Override + public String getAccountNetworkDomain(long accountId, long zoneId) { + String networkDomain = _accountDao.findById(accountId).getNetworkDomain(); + + if (networkDomain == null) { + // get domain level network domain + return getDomainNetworkDomain(_accountDao.findById(accountId).getDomainId(), zoneId); + } + + return networkDomain; + } + + @Override + public String getGlobalGuestDomainSuffix() { + return _networkDomain; + } + + @Override + public String getStartIpAddress(long networkId) { + List vlans = _vlanDao.listVlansByNetworkId(networkId); + if (vlans.isEmpty()) { + return null; + } + + String startIP = vlans.get(0).getIpRange().split("-")[0]; + + for (VlanVO vlan : vlans) { + String startIP1 = vlan.getIpRange().split("-")[0]; + long startIPLong = NetUtils.ip2Long(startIP); + long startIPLong1 = NetUtils.ip2Long(startIP1); + + if (startIPLong1 < startIPLong) { + startIP = startIP1; + } + } + + return startIP; + } + + @Override + public Long getPodIdForVlan(long vlanDbId) { + PodVlanMapVO podVlanMaps = _podVlanMapDao.listPodVlanMapsByVlan(vlanDbId); + if (podVlanMaps == null) { + return null; + } else { + return podVlanMaps.getPodId(); + } + } + + @Override + public Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId) { + Map> serviceProviderMap = new HashMap>(); + List map = _ntwkOfferingSrvcDao.listByNetworkOfferingId(networkOfferingId); + + for (NetworkOfferingServiceMapVO instance : map) { + String service = instance.getService(); + Set providers; + providers = serviceProviderMap.get(service); + if (providers == null) { + providers = new HashSet(); + } + providers.add(Provider.getProvider(instance.getProvider())); + serviceProviderMap.put(Service.getService(service), providers); + } + + return serviceProviderMap; + } + + @Override + public boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider) { + return _ntwkSrvcDao.canProviderSupportServiceInNetwork(networkId, service, provider); + } + + @Override + public List listSupportedNetworkServiceProviders(String serviceName) { + Network.Service service = null; + if (serviceName != null) { + service = Network.Service.getService(serviceName); + if (service == null) { + throw new InvalidParameterValueException("Invalid Network Service=" + serviceName); + } + } + + Set supportedProviders = new HashSet(); + + if (service != null) { + supportedProviders.addAll(s_serviceToImplementedProvidersMap.get(service)); + } else { + for (List pList : s_serviceToImplementedProvidersMap.values()) { + supportedProviders.addAll(pList); + } + } + + return new ArrayList(supportedProviders); + } + + @Override + public Provider getDefaultUniqueProviderForService(String serviceName) { + List providers = listSupportedNetworkServiceProviders(serviceName); + if (providers.isEmpty()) { + throw new CloudRuntimeException("No providers supporting service " + serviceName + " found in cloudStack"); + } + if (providers.size() > 1) { + throw new CloudRuntimeException("More than 1 provider supporting service " + serviceName + " found in cloudStack"); + } + + return providers.get(0); + } + + @Override + public long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType) { + List pNtwks = new ArrayList(); + if (trafficType != null) { + pNtwks = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); + } else { + pNtwks = _physicalNetworkDao.listByZone(zoneId); + } + + if (pNtwks.isEmpty()) { + throw new InvalidParameterValueException("Unable to find physical network in zone id=" + zoneId); + } + + if (pNtwks.size() > 1) { + if (tag == null) { + throw new InvalidParameterValueException("More than one physical networks exist in zone id=" + zoneId + " and no tags are specified in order to make a choice"); + } + + Long pNtwkId = null; + for (PhysicalNetwork pNtwk : pNtwks) { + if (pNtwk.getTags().contains(tag)) { + s_logger.debug("Found physical network id=" + pNtwk.getId() + " based on requested tags " + tag); + pNtwkId = pNtwk.getId(); + break; + } + } + if (pNtwkId == null) { + throw new InvalidParameterValueException("Unable to find physical network which match the tags " + tag); + } + return pNtwkId; + } else { + return pNtwks.get(0).getId(); + } + } + + @Override + public List listNetworkOfferingsForUpgrade(long networkId) { + List offeringsToReturn = new ArrayList(); + NetworkOffering originalOffering = _configMgr.getNetworkOffering(getNetwork(networkId).getNetworkOfferingId()); + + boolean securityGroupSupportedByOriginalOff = areServicesSupportedByNetworkOffering(originalOffering.getId(), Service.SecurityGroup); + + // security group supported property should be the same + + List offerings = _networkOfferingDao.getOfferingIdsToUpgradeFrom(originalOffering); + + for (Long offeringId : offerings) { + if (areServicesSupportedByNetworkOffering(offeringId, Service.SecurityGroup) == securityGroupSupportedByOriginalOff) { + offeringsToReturn.add(offeringId); + } + } + + return offeringsToReturn; + } + + @Override + public boolean isSecurityGroupSupportedInNetwork(Network network) { + if (network.getTrafficType() != TrafficType.Guest) { + s_logger.trace("Security group can be enabled for Guest networks only; and network " + network + " has a diff traffic type"); + return false; + } + + Long physicalNetworkId = network.getPhysicalNetworkId(); + + // physical network id can be null in Guest Network in Basic zone, so locate the physical network + if (physicalNetworkId == null) { + physicalNetworkId = findPhysicalNetworkId(network.getDataCenterId(), null, null); + } + + return isServiceEnabledInNetwork(physicalNetworkId, network.getId(), Service.SecurityGroup); + } + + @Override + public PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { + + List networkList = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); + + if (networkList.isEmpty()) { + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find the default physical network with traffic=" + trafficType + " in the specified zone id"); + // Since we don't have a DataCenterVO object at our disposal, we just set the table name that the zoneId's corresponding uuid is looked up from, manually. + ex.addProxyObject("data_center", zoneId, "zoneId"); + throw ex; + } + + if (networkList.size() > 1) { + InvalidParameterValueException ex = new InvalidParameterValueException("More than one physical networks exist in zone id=" + zoneId + " with traffic type=" + trafficType); + ex.addProxyObject("data_center", zoneId, "zoneId"); + throw ex; + } + + return networkList.get(0); + } + + @Override + public String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType) { + try{ + PhysicalNetwork mgmtPhyNetwork = getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); + PhysicalNetworkTrafficTypeVO mgmtTraffic = _pNTrafficTypeDao.findBy(mgmtPhyNetwork.getId(), TrafficType.Management); + if(mgmtTraffic != null){ + String label = null; + switch(hypervisorType){ + case XenServer : label = mgmtTraffic.getXenNetworkLabel(); + break; + case KVM : label = mgmtTraffic.getKvmNetworkLabel(); + break; + case VMware : label = mgmtTraffic.getVmwareNetworkLabel(); + break; + } + return label; + } + }catch(Exception ex){ + if(s_logger.isDebugEnabled()){ + s_logger.debug("Failed to retrive the default label for management traffic:"+"zone: "+ zoneId +" hypervisor: "+hypervisorType +" due to:" + ex.getMessage()); + } + } + return null; + } + + @Override + public String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType) { + try{ + PhysicalNetwork storagePhyNetwork = getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Storage); + PhysicalNetworkTrafficTypeVO storageTraffic = _pNTrafficTypeDao.findBy(storagePhyNetwork.getId(), TrafficType.Storage); + if(storageTraffic != null){ + String label = null; + switch(hypervisorType){ + case XenServer : label = storageTraffic.getXenNetworkLabel(); + break; + case KVM : label = storageTraffic.getKvmNetworkLabel(); + break; + case VMware : label = storageTraffic.getVmwareNetworkLabel(); + break; + } + return label; + } + }catch(Exception ex){ + if(s_logger.isDebugEnabled()){ + s_logger.debug("Failed to retrive the default label for storage traffic:"+"zone: "+ zoneId +" hypervisor: "+hypervisorType +" due to:" + ex.getMessage()); + } + } + return null; + } + + @Override + public List getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType) { + List networkInfoList = new ArrayList(); + List physicalNtwkList = _physicalNetworkDao.listByZone(dcId); + for (PhysicalNetworkVO pNtwk : physicalNtwkList) { + String publicName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Public, hypervisorType); + String privateName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Management, hypervisorType); + String guestName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Guest, hypervisorType); + String storageName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Storage, hypervisorType); + // String controlName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Control, hypervisorType); + PhysicalNetworkSetupInfo info = new PhysicalNetworkSetupInfo(); + info.setPhysicalNetworkId(pNtwk.getId()); + info.setGuestNetworkName(guestName); + info.setPrivateNetworkName(privateName); + info.setPublicNetworkName(publicName); + info.setStorageNetworkName(storageName); + PhysicalNetworkTrafficTypeVO mgmtTraffic = _pNTrafficTypeDao.findBy(pNtwk.getId(), TrafficType.Management); + if (mgmtTraffic != null) { + String vlan = mgmtTraffic.getVlan(); + info.setMgmtVlan(vlan); + } + networkInfoList.add(info); + } + return networkInfoList; + } + + @Override + public boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName) { + PhysicalNetworkServiceProviderVO ntwkSvcProvider = _pNSPDao.findByServiceProvider(physicalNetowrkId, providerName); + if (ntwkSvcProvider == null) { + s_logger.warn("Unable to find provider " + providerName + " in physical network id=" + physicalNetowrkId); + return false; + } + return isProviderEnabled(ntwkSvcProvider); + } + + @Override + public String getNetworkTag(HypervisorType hType, Network network) { + // no network tag for control traffic type + TrafficType effectiveTrafficType = network.getTrafficType(); + if(hType == HypervisorType.VMware && effectiveTrafficType == TrafficType.Control) + effectiveTrafficType = TrafficType.Management; + + if (effectiveTrafficType == TrafficType.Control) { + return null; + } + + Long physicalNetworkId = null; + if (effectiveTrafficType != TrafficType.Guest) { + physicalNetworkId = getNonGuestNetworkPhysicalNetworkId(network); + } else { + NetworkOffering offering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); + physicalNetworkId = network.getPhysicalNetworkId(); + if(physicalNetworkId == null){ + physicalNetworkId = findPhysicalNetworkId(network.getDataCenterId(), offering.getTags(), offering.getTrafficType()); + } + } + + if (physicalNetworkId == null) { + assert (false) : "Can't get the physical network"; + s_logger.warn("Can't get the physical network"); + return null; + } + + return _pNTrafficTypeDao.getNetworkTag(physicalNetworkId, effectiveTrafficType, hType); + } + + @Override + public NetworkVO getExclusiveGuestNetwork(long zoneId) { + List networks = _networksDao.listBy(Account.ACCOUNT_ID_SYSTEM, zoneId, GuestType.Shared, TrafficType.Guest); + if (networks == null || networks.isEmpty()) { + throw new InvalidParameterValueException("Unable to find network with trafficType " + TrafficType.Guest + " and guestType " + GuestType.Shared + " in zone " + zoneId); + } + + if (networks.size() > 1) { + throw new InvalidParameterValueException("Found more than 1 network with trafficType " + TrafficType.Guest + " and guestType " + GuestType.Shared + " in zone " + zoneId); + + } + + return networks.get(0); + } + + @Override + public boolean isNetworkSystem(Network network) { + NetworkOffering no = _networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId()); + if (no.isSystemOnly()) { + return true; + } else { + return false; + } + } + + @Override + public Long getPhysicalNetworkId(Network network) { + if (network.getTrafficType() != TrafficType.Guest) { + return getNonGuestNetworkPhysicalNetworkId(network); + } + + Long physicalNetworkId = network.getPhysicalNetworkId(); + NetworkOffering offering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); + if (physicalNetworkId == null) { + physicalNetworkId = findPhysicalNetworkId(network.getDataCenterId(), offering.getTags(), offering.getTrafficType()); + } + return physicalNetworkId; + } + + @Override + public boolean getAllowSubdomainAccessGlobal() { + return _allowSubdomainNetworkAccess; + } + + @Override + public boolean isProviderForNetwork(Provider provider, long networkId) { + if (_ntwkSrvcDao.isProviderForNetwork(networkId, provider) != null) { + return true; + } else { + return false; + } + } + + @Override + public boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId) { + if (_ntwkOfferingSrvcDao.isProviderForNetworkOffering(networkOfferingId, provider)) { + return true; + } else { + return false; + } + } + + @Override + public void canProviderSupportServices(Map> providersMap) { + for (Provider provider : providersMap.keySet()) { + // check if services can be turned off + NetworkElement element = getElementImplementingProvider(provider.getName()); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getName() + "'"); + } + + Set enabledServices = new HashSet(); + enabledServices.addAll(providersMap.get(provider)); + + if (enabledServices != null && !enabledServices.isEmpty()) { + if (!element.canEnableIndividualServices()) { + Set requiredServices = new HashSet(); + requiredServices.addAll(element.getCapabilities().keySet()); + + if (requiredServices.contains(Network.Service.Gateway)) { + requiredServices.remove(Network.Service.Gateway); + } + + if (requiredServices.contains(Network.Service.Firewall)) { + requiredServices.remove(Network.Service.Firewall); + } + + if (enabledServices.contains(Network.Service.Firewall)) { + enabledServices.remove(Network.Service.Firewall); + } + + // exclude gateway service + if (enabledServices.size() != requiredServices.size()) { + StringBuilder servicesSet = new StringBuilder(); + + for (Service requiredService : requiredServices) { + // skip gateway service as we don't allow setting it via API + if (requiredService == Service.Gateway) { + continue; + } + servicesSet.append(requiredService.getName() + ", "); + } + servicesSet.delete(servicesSet.toString().length() - 2, servicesSet.toString().length()); + + throw new InvalidParameterValueException("Cannot enable subset of Services, Please specify the complete list of Services: " + servicesSet.toString() + " for Service Provider " + + provider.getName()); + } + } + List serviceList = new ArrayList(); + for (Service service : enabledServices) { + // check if the service is provided by this Provider + if (!element.getCapabilities().containsKey(service)) { + throw new UnsupportedServiceException(provider.getName() + " Provider cannot provide service " + service.getName()); + } + serviceList.add(service.getName()); + } + if (!element.verifyServicesCombination(enabledServices)) { + throw new UnsupportedServiceException("Provider " + provider.getName() + " doesn't support services combination: " + serviceList); + } + } + } + } + + @Override + public boolean canAddDefaultSecurityGroup() { + String defaultAdding = _configDao.getValue(Config.SecurityGroupDefaultAdding.key()); + return (defaultAdding != null && defaultAdding.equalsIgnoreCase("true")); + } + + @Override + public List listNetworkOfferingServices(long networkOfferingId) { + List services = new ArrayList(); + List servicesStr = _ntwkOfferingSrvcDao.listServicesForNetworkOffering(networkOfferingId); + for (String serviceStr : servicesStr) { + services.add(Service.getService(serviceStr)); + } + + return services; + } + + @Override + public boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services) { + long physicalNtwkId = findPhysicalNetworkId(zoneId, offering.getTags(), offering.getTrafficType()); + boolean result = true; + List checkedProvider = new ArrayList(); + for (Service service : services) { + // get all the providers, and check if each provider is enabled + List providerNames = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(offering.getId(), service); + for (String providerName : providerNames) { + if (!checkedProvider.contains(providerName)) { + result = result && isProviderEnabledInPhysicalNetwork(physicalNtwkId, providerName); + } + } + } + + return result; + } + + @Override + public boolean checkIpForService(IpAddress userIp, Service service, Long networkId) { + if (networkId == null) { + networkId = userIp.getAssociatedWithNetworkId(); + } + + NetworkVO network = _networksDao.findById(networkId); + NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); + if (offering.getGuestType() != GuestType.Isolated) { + return true; + } + IPAddressVO ipVO = _ipAddressDao.findById(userIp.getId()); + PublicIp publicIp = new PublicIp(ipVO, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(ipVO.getMacAddress())); + if (!canIpUsedForService(publicIp, service, networkId)) { + return false; + } + if (!offering.isConserveMode()) { + return canIpUsedForNonConserveService(publicIp, service); + } + return true; + } + + @Override + public void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue) { + for (Provider provider : providers) { + NetworkElement element = getElementImplementingProvider(provider.getName()); + if (element != null) { + Map> elementCapabilities = element.getCapabilities(); + if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider.getName()); + } + Map serviceCapabilities = elementCapabilities.get(service); + if (serviceCapabilities == null || serviceCapabilities.isEmpty()) { + throw new UnsupportedServiceException("Service " + service.getName() + " doesn't have capabilites for element=" + element.getName() + " implementing Provider=" + provider.getName()); + } + + String value = serviceCapabilities.get(cap); + if (value == null || value.isEmpty()) { + throw new UnsupportedServiceException("Service " + service.getName() + " doesn't have capability " + cap.getName() + " for element=" + element.getName() + " implementing Provider=" + + provider.getName()); + } + + capValue = capValue.toLowerCase(); + + if (!value.contains(capValue)) { + throw new UnsupportedServiceException("Service " + service.getName() + " doesn't support value " + capValue + " for capability " + cap.getName() + " for element=" + element.getName() + + " implementing Provider=" + provider.getName()); + } + } else { + throw new UnsupportedServiceException("Unable to find network element for provider " + provider.getName()); + } + } + } + + @Override + public void checkNetworkPermissions(Account owner, Network network) { + // Perform account permission check + if (network.getGuestType() != Network.GuestType.Shared) { + List networkMap = _networksDao.listBy(owner.getId(), network.getId()); + if (networkMap == null || networkMap.isEmpty()) { + throw new PermissionDeniedException("Unable to use network with id= " + network.getId() + ", permission denied"); + } + } else { + if (!isNetworkAvailableInDomain(network.getId(), owner.getDomainId())) { + throw new PermissionDeniedException("Shared network id=" + network.getId() + " is not available in domain id=" + owner.getDomainId()); + } + } + } + + @Override + public String getDefaultPublicTrafficLabel(long dcId, HypervisorType hypervisorType) { + try { + PhysicalNetwork publicPhyNetwork = getOnePhysicalNetworkByZoneAndTrafficType(dcId, TrafficType.Public); + PhysicalNetworkTrafficTypeVO publicTraffic = _pNTrafficTypeDao.findBy(publicPhyNetwork.getId(), + TrafficType.Public); + if (publicTraffic != null) { + String label = null; + switch (hypervisorType) { + case XenServer: + label = publicTraffic.getXenNetworkLabel(); + break; + case KVM: + label = publicTraffic.getKvmNetworkLabel(); + break; + case VMware: + label = publicTraffic.getVmwareNetworkLabel(); + break; + } + return label; + } + } catch (Exception ex) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Failed to retrieve the default label for public traffic." + "zone: " + dcId + " hypervisor: " + hypervisorType + " due to: " + ex.getMessage()); + } + } + return null; + } + + @Override + public String getDefaultGuestTrafficLabel(long dcId, HypervisorType hypervisorType) { + try { + PhysicalNetwork guestPhyNetwork = getOnePhysicalNetworkByZoneAndTrafficType(dcId, TrafficType.Guest); + PhysicalNetworkTrafficTypeVO guestTraffic = _pNTrafficTypeDao.findBy(guestPhyNetwork.getId(), + TrafficType.Guest); + if (guestTraffic != null) { + String label = null; + switch (hypervisorType) { + case XenServer: + label = guestTraffic.getXenNetworkLabel(); + break; + case KVM: + label = guestTraffic.getKvmNetworkLabel(); + break; + case VMware: + label = guestTraffic.getVmwareNetworkLabel(); + break; + } + return label; + } + } catch (Exception ex) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Failed to retrive the default label for management traffic:" + "zone: " + dcId + + " hypervisor: " + hypervisorType + " due to:" + ex.getMessage()); + } + } + return null; + } + + @Override + public List listNetworksByVpc(long vpcId) { + return _networksDao.listByVpc(vpcId); + } + + @Override + public String getDefaultNetworkDomain() { + return _networkDomain; + } + + @Override + public List getNtwkOffDistinctProviders(long ntkwOffId) { + List providerNames = _ntwkOfferingSrvcDao.getDistinctProviders(ntkwOffId); + List providers = new ArrayList(); + for (String providerName : providerNames) { + providers.add(Network.Provider.getProvider(providerName)); + } + + return providers; + } + + @Override + public boolean isVmPartOfNetwork(long vmId, long ntwkId) { + if (_nicDao.findNonReleasedByInstanceIdAndNetworkId(ntwkId, vmId) != null) { + return true; + } + return false; + } + + @Override + public List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType) { + + List pNtwks = _physicalNetworkDao.listByZone(zoneId); + + Iterator it = pNtwks.iterator(); + while (it.hasNext()) { + PhysicalNetwork pNtwk = it.next(); + if (!_pNTrafficTypeDao.isTrafficTypeSupported(pNtwk.getId(), trafficType)) { + it.remove(); + } + } + return pNtwks; + } + + @Override + public boolean isPrivateGateway(Nic guestNic) { + Network network = getNetwork(guestNic.getNetworkId()); + if (network.getTrafficType() != TrafficType.Guest || network.getNetworkOfferingId() != _privateOfferingId.longValue()) { + return false; + } + return true; + } + + + @Override + public List getSystemAccountNetworkOfferings(String... offeringNames) { + List offerings = new ArrayList(offeringNames.length); + for (String offeringName : offeringNames) { + NetworkOfferingVO network = _systemNetworks.get(offeringName); + if (network == null) { + throw new CloudRuntimeException("Unable to find system network profile for " + offeringName); + } + offerings.add(network); + } + return offerings; + } + + @Override + public boolean isNetworkAvailableInDomain(long networkId, long domainId) { + Long networkDomainId = null; + Network network = getNetwork(networkId); + if (network.getGuestType() != Network.GuestType.Shared) { + s_logger.trace("Network id=" + networkId + " is not shared"); + return false; + } + + NetworkDomainVO networkDomainMap = _networkDomainDao.getDomainNetworkMapByNetworkId(networkId); + if (networkDomainMap == null) { + s_logger.trace("Network id=" + networkId + " is shared, but not domain specific"); + return true; + } else { + networkDomainId = networkDomainMap.getDomainId(); + } + + if (domainId == networkDomainId.longValue()) { + return true; + } + + if (networkDomainMap.subdomainAccess) { + Set parentDomains = _domainMgr.getDomainParentIds(domainId); + + if (parentDomains.contains(domainId)) { + return true; + } + } + + return false; + } + + @Override + public Set getAvailableIps(Network network, String requestedIp) { + String[] cidr = network.getCidr().split("/"); + List ips = _nicDao.listIpAddressInNetwork(network.getId()); + Set allPossibleIps = NetUtils.getAllIpsFromCidr(cidr[0], Integer.parseInt(cidr[1])); + Set usedIps = new TreeSet(); + + for (String ip : ips) { + if (requestedIp != null && requestedIp.equals(ip)) { + s_logger.warn("Requested ip address " + requestedIp + " is already in use in network" + network); + return null; + } + + usedIps.add(NetUtils.ip2Long(ip)); + } + if (usedIps.size() != 0) { + allPossibleIps.removeAll(usedIps); + } + return allPossibleIps; + } + + @Override + public String getDomainNetworkDomain(long domainId, long zoneId) { + String networkDomain = null; + Long searchDomainId = domainId; + while(searchDomainId != null){ + DomainVO domain = _domainDao.findById(searchDomainId); + if(domain.getNetworkDomain() != null){ + networkDomain = domain.getNetworkDomain(); + break; + } + searchDomainId = domain.getParent(); + } + if (networkDomain == null) { + return getZoneNetworkDomain(zoneId); + } + return networkDomain; + } + + boolean isProviderEnabled(PhysicalNetworkServiceProvider provider) { + if (provider == null || provider.getState() != PhysicalNetworkServiceProvider.State.Enabled) { // TODO: check + // for other states: Shutdown? + return false; + } + return true; + } + + boolean isServiceEnabledInNetwork(long physicalNetworkId, long networkId, Service service) { + // check if the service is supported in the network + if (!areServicesSupportedInNetwork(networkId, service)) { + s_logger.debug("Service " + service.getName() + " is not supported in the network id=" + networkId); + return false; + } + + // get provider for the service and check if all of them are supported + String provider = _ntwkSrvcDao.getProviderForServiceInNetwork(networkId, service); + if (!isProviderEnabledInPhysicalNetwork(physicalNetworkId, provider)) { + s_logger.debug("Provider " + provider + " is not enabled in physical network id=" + physicalNetworkId); + return false; + } + + return true; + } + + Nic getNicInNetworkIncludingRemoved(long vmId, long networkId) { + return _nicDao.findByInstanceIdAndNetworkIdIncludingRemoved(networkId, vmId); + } + + String getZoneNetworkDomain(long zoneId) { + return _dcDao.findById(zoneId).getDomain(); + } + + PhysicalNetwork getOnePhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { + List networkList = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); + + if (networkList.isEmpty()) { + throw new InvalidParameterValueException("Unable to find the default physical network with traffic=" + + trafficType + " in zone id=" + zoneId + ". "); + } + + if (networkList.size() > 1) { + s_logger.info("More than one physical networks exist in zone id=" + zoneId + " with traffic type=" + + trafficType + ". "); + } + + return networkList.get(0); + } + + + + protected Long getNonGuestNetworkPhysicalNetworkId(Network network) { + // no physical network for control traffic type + + // have to remove this sanity check as VMware control network is management network + // we need to retrieve traffic label information through physical network + /* + if (network.getTrafficType() == TrafficType.Control) { + return null; + } + */ + Long physicalNetworkId = network.getPhysicalNetworkId(); + + if (physicalNetworkId == null) { + List pNtwks = _physicalNetworkDao.listByZone(network.getDataCenterId()); + if (pNtwks.size() == 1) { + physicalNetworkId = pNtwks.get(0).getId(); + } else { + // locate physicalNetwork with supported traffic type + // We can make this assumptions based on the fact that Public/Management/Control traffic types are + // supported only in one physical network in the zone in 3.0 + for (PhysicalNetworkVO pNtwk : pNtwks) { + if (_pNTrafficTypeDao.isTrafficTypeSupported(pNtwk.getId(), network.getTrafficType())) { + physicalNetworkId = pNtwk.getId(); + break; + } + } + } + } + return physicalNetworkId; + } + + @Override + public NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri) { + NicVO nic = null; + if (broadcastUri != null) { + nic = _nicDao.findByNetworkIdInstanceIdAndBroadcastUri(networkId, vm.getId(), broadcastUri); + } else { + nic = _nicDao.findByInstanceIdAndNetworkId(networkId, vm.getId()); + } + NetworkVO network = _networksDao.findById(networkId); + Integer networkRate = getNetworkRate(network.getId(), vm.getId()); + +// NetworkGuru guru = _networkGurus.get(network.getGuruName()); + NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), + networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); +// guru.updateNicProfile(profile, network); + + return profile; + } + + @Override + public boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId) { + boolean netscalerInNetwork = isProviderForNetwork(Network.Provider.Netscaler, networkId); + boolean juniperInNetwork = isProviderForNetwork(Network.Provider.JuniperSRX, networkId); + boolean f5InNetwork = isProviderForNetwork(Network.Provider.F5BigIp, networkId); + + if (netscalerInNetwork || juniperInNetwork || f5InNetwork) { + return true; + } else { + return false; + } + } + + + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + _name = name; + _configs = _configDao.getConfiguration("Network", params); + _networkDomain = _configs.get(Config.GuestDomainSuffix.key()); + _allowSubdomainNetworkAccess = Boolean.valueOf(_configs.get(Config.SubDomainNetworkAccess.key())); + + NetworkOfferingVO publicNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPublicNetwork, TrafficType.Public, true); + publicNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(publicNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemPublicNetwork, publicNetworkOffering); + NetworkOfferingVO managementNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemManagementNetwork, TrafficType.Management, false); + managementNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(managementNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemManagementNetwork, managementNetworkOffering); + NetworkOfferingVO controlNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemControlNetwork, TrafficType.Control, false); + controlNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(controlNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemControlNetwork, controlNetworkOffering); + NetworkOfferingVO storageNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemStorageNetwork, TrafficType.Storage, true); + storageNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(storageNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemStorageNetwork, storageNetworkOffering); + NetworkOfferingVO privateGatewayNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, + GuestType.Isolated); + privateGatewayNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(privateGatewayNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, privateGatewayNetworkOffering); + _privateOfferingId = privateGatewayNetworkOffering.getId(); + + + IpAddressSearch = _ipAddressDao.createSearchBuilder(); + IpAddressSearch.and("accountId", IpAddressSearch.entity().getAllocatedToAccountId(), Op.EQ); + IpAddressSearch.and("dataCenterId", IpAddressSearch.entity().getDataCenterId(), Op.EQ); + IpAddressSearch.and("vpcId", IpAddressSearch.entity().getVpcId(), Op.EQ); + IpAddressSearch.and("associatedWithNetworkId", IpAddressSearch.entity().getAssociatedWithNetworkId(), Op.EQ); + SearchBuilder virtualNetworkVlanSB = _vlanDao.createSearchBuilder(); + virtualNetworkVlanSB.and("vlanType", virtualNetworkVlanSB.entity().getVlanType(), Op.EQ); + IpAddressSearch.join("virtualNetworkVlanSB", virtualNetworkVlanSB, IpAddressSearch.entity().getVlanId(), virtualNetworkVlanSB.entity().getId(), JoinBuilder.JoinType.INNER); + IpAddressSearch.done(); + + NicForTrafficTypeSearch = _nicDao.createSearchBuilder(); + SearchBuilder networkSearch = _networksDao.createSearchBuilder(); + NicForTrafficTypeSearch.join("network", networkSearch, networkSearch.entity().getId(), NicForTrafficTypeSearch.entity().getNetworkId(), JoinType.INNER); + NicForTrafficTypeSearch.and("instance", NicForTrafficTypeSearch.entity().getInstanceId(), Op.EQ); + networkSearch.and("traffictype", networkSearch.entity().getTrafficType(), Op.EQ); + NicForTrafficTypeSearch.done(); + + s_logger.info("Network Model is configured."); + + return true; + } + + + @Override + public boolean start() { + // populate s_serviceToImplementedProvidersMap & s_providerToNetworkElementMap with current _networkElements + // Need to do this in start() since _networkElements are not completely configured until then. + for (NetworkElement element : _networkElements) { + Map> capabilities = element.getCapabilities(); + Provider implementedProvider = element.getProvider(); + if (implementedProvider != null) { + if (s_providerToNetworkElementMap.containsKey(implementedProvider.getName())) { + s_logger.error("Cannot start NetworkModel: Provider <-> NetworkElement must be a one-to-one map, " + + "multiple NetworkElements found for Provider: " + implementedProvider.getName()); + return false; + } + s_providerToNetworkElementMap.put(implementedProvider.getName(), element.getName()); + } + if (capabilities != null && implementedProvider != null) { + for (Service service : capabilities.keySet()) { + if (s_serviceToImplementedProvidersMap.containsKey(service)) { + List providers = s_serviceToImplementedProvidersMap.get(service); + providers.add(implementedProvider); + } else { + List providers = new ArrayList(); + providers.add(implementedProvider); + s_serviceToImplementedProvidersMap.put(service, providers); + } + } + } + } + s_logger.info("Started Network Model"); + return true; + } + + + @Override + public boolean stop() { + return true; + } + + + @Override + public String getName() { + return _name; + } + + @Override + public PublicIpAddress getSourceNatIpAddressForGuestNetwork(Account owner, Network guestNetwork) { + List addrs = listPublicIpsAssignedToGuestNtwk(owner.getId(), guestNetwork.getId(), true); + + IPAddressVO sourceNatIp = null; + if (addrs.isEmpty()) { + return null; + } else { + for (IpAddress addr : addrs) { + if (addr.isSourceNat()) { + sourceNatIp = _ipAddressDao.findById(addr.getId()); + return new PublicIp(sourceNatIp, _vlanDao.findById(sourceNatIp.getVlanId()), + NetUtils.createSequenceBasedMacAddress(sourceNatIp.getMacAddress())); + } + } + + } + + return null; + } + + public boolean isNetworkInlineMode(Network network) { + NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); + return offering.isInline(); + } + +} \ No newline at end of file diff --git a/server/src/com/cloud/network/NetworkRuleApplier.java b/server/src/com/cloud/network/NetworkRuleApplier.java new file mode 100644 index 00000000000..31763d0ac54 --- /dev/null +++ b/server/src/com/cloud/network/NetworkRuleApplier.java @@ -0,0 +1,28 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + +import java.util.List; + +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.rules.FirewallRule; + +public interface NetworkRuleApplier { + public boolean applyRules(Network network, FirewallRule.Purpose purpose, List rules) throws ResourceUnavailableException; + +} \ No newline at end of file diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java new file mode 100755 index 00000000000..b05aece918e --- /dev/null +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -0,0 +1,2885 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.network; + +import java.security.InvalidParameterException; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.log4j.Logger; + +import org.apache.cloudstack.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; +import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; +import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; + +import com.cloud.configuration.Config; +import com.cloud.configuration.ConfigurationManager; +import com.cloud.configuration.dao.ConfigurationDao; +import com.cloud.dc.DataCenter; +import com.cloud.dc.DataCenter.NetworkType; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.Vlan.VlanType; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.AccountVlanMapDao; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.VlanDao; +import com.cloud.deploy.DeployDestination; +import com.cloud.domain.Domain; +import com.cloud.domain.DomainVO; +import com.cloud.domain.dao.DomainDao; +import com.cloud.event.ActionEvent; +import com.cloud.event.EventTypes; +import com.cloud.event.UsageEventVO; +import com.cloud.event.dao.EventDao; +import com.cloud.event.dao.UsageEventDao; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.exception.UnsupportedServiceException; +import com.cloud.network.IpAddress.State; +import com.cloud.network.Network.Capability; +import com.cloud.network.Network.GuestType; +import com.cloud.network.Network.Provider; +import com.cloud.network.Network.Service; +import com.cloud.network.Networks.BroadcastDomainType; +import com.cloud.network.Networks.TrafficType; +import com.cloud.network.PhysicalNetwork.BroadcastDomainRange; +import com.cloud.network.VirtualRouterProvider.VirtualRouterProviderType; +import com.cloud.network.addr.PublicIp; +import com.cloud.network.dao.FirewallRulesDao; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDomainDao; +import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderVO; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; +import com.cloud.network.element.NetworkElement; +import com.cloud.network.element.VirtualRouterElement; +import com.cloud.network.element.VpcVirtualRouterElement; +import com.cloud.network.guru.NetworkGuru; +import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.RulesManager; +import com.cloud.network.vpc.PrivateIpVO; +import com.cloud.network.vpc.VpcManager; +import com.cloud.network.vpc.dao.PrivateIpDao; +import com.cloud.offering.NetworkOffering; +import com.cloud.offerings.NetworkOfferingVO; +import com.cloud.offerings.dao.NetworkOfferingDao; +import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; +import com.cloud.org.Grouping; +import com.cloud.projects.Project; +import com.cloud.projects.ProjectManager; +import com.cloud.server.ResourceTag.TaggedResourceType; +import com.cloud.tags.ResourceTagVO; +import com.cloud.tags.dao.ResourceTagDao; +import com.cloud.user.Account; +import com.cloud.user.AccountManager; +import com.cloud.user.AccountVO; +import com.cloud.user.DomainManager; +import com.cloud.user.ResourceLimitService; +import com.cloud.user.User; +import com.cloud.user.UserContext; +import com.cloud.user.dao.AccountDao; +import com.cloud.utils.AnnotationHelper; +import com.cloud.utils.NumbersUtil; +import com.cloud.utils.Pair; +import com.cloud.utils.component.Adapters; +import com.cloud.utils.component.Inject; +import com.cloud.utils.component.Manager; +import com.cloud.utils.db.DB; +import com.cloud.utils.db.Filter; +import com.cloud.utils.db.JoinBuilder; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Op; +import com.cloud.utils.db.Transaction; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.NicVO; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.ReservationContextImpl; +import com.cloud.vm.SecondaryStorageVmVO; +import com.cloud.vm.UserVmVO; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.dao.NicDao; +import com.cloud.vm.dao.UserVmDao; +import com.cloud.vm.dao.VMInstanceDao; + +/** + * NetworkServiceImpl implements NetworkService. + */ +@Local(value = { NetworkService.class }) +public class NetworkServiceImpl implements NetworkService, Manager { + private static final Logger s_logger = Logger.getLogger(NetworkServiceImpl.class); + + String _name; + @Inject + DataCenterDao _dcDao = null; + @Inject + VlanDao _vlanDao = null; + @Inject + IPAddressDao _ipAddressDao = null; + @Inject + AccountDao _accountDao = null; + @Inject + DomainDao _domainDao = null; + + @Inject + EventDao _eventDao = null; + @Inject + ConfigurationDao _configDao; + @Inject + UserVmDao _userVmDao = null; + + @Inject + AccountManager _accountMgr; + @Inject + ConfigurationManager _configMgr; + @Inject + AccountVlanMapDao _accountVlanMapDao; + @Inject + NetworkOfferingDao _networkOfferingDao = null; + @Inject + NetworkDao _networksDao = null; + @Inject + NicDao _nicDao = null; + @Inject + RulesManager _rulesMgr; + + @Inject + UsageEventDao _usageEventDao; + + @Inject(adapter = NetworkGuru.class) + Adapters _networkGurus; + + @Inject + NetworkDomainDao _networkDomainDao; + @Inject + VMInstanceDao _vmDao; + + @Inject + FirewallRulesDao _firewallDao; + + @Inject + ResourceLimitService _resourceLimitMgr; + + @Inject + DomainManager _domainMgr; + @Inject + ProjectManager _projectMgr; + @Inject + NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao; + @Inject + PhysicalNetworkDao _physicalNetworkDao; + @Inject + PhysicalNetworkServiceProviderDao _pNSPDao; + + @Inject + PhysicalNetworkTrafficTypeDao _pNTrafficTypeDao; + + @Inject + NetworkServiceMapDao _ntwkSrvcDao; + @Inject + StorageNetworkManager _stnwMgr; + @Inject + VpcManager _vpcMgr; + @Inject + PrivateIpDao _privateIpDao; + @Inject + ResourceTagDao _resourceTagDao; + @Inject + NetworkManager _networkMgr; + @Inject + NetworkModel _networkModel; + + int _cidrLimit; + boolean _allowSubdomainNetworkAccess; + + private Map _configs; + + /* Get a list of IPs, classify them by service */ + protected Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { + Map> ipToServices = new HashMap>(); + + if (publicIps != null && !publicIps.isEmpty()) { + Set networkSNAT = new HashSet(); + for (PublicIp ip : publicIps) { + Set services = ipToServices.get(ip); + if (services == null) { + services = new HashSet(); + } + if (ip.isSourceNat()) { + if (!networkSNAT.contains(ip.getAssociatedWithNetworkId())) { + services.add(Service.SourceNat); + networkSNAT.add(ip.getAssociatedWithNetworkId()); + } else { + CloudRuntimeException ex = new CloudRuntimeException("Multiple generic soure NAT IPs provided for network"); + // see the IPAddressVO.java class. + ex.addProxyObject("user_ip_address", ip.getAssociatedWithNetworkId(), "networkId"); + throw ex; + } + } + ipToServices.put(ip, services); + + // if IP in allocating state then it will not have any rules attached so skip IPAssoc to network service + // provider + if (ip.getState() == State.Allocating) { + continue; + } + + // check if any active rules are applied on the public IP + Set purposes = getPublicIpPurposeInRules(ip, false, includingFirewall); + // Firewall rules didn't cover static NAT + if (ip.isOneToOneNat() && ip.getAssociatedWithVmId() != null) { + if (purposes == null) { + purposes = new HashSet(); + } + purposes.add(Purpose.StaticNat); + } + if (purposes == null || purposes.isEmpty()) { + // since no active rules are there check if any rules are applied on the public IP but are in +// revoking state + + purposes = getPublicIpPurposeInRules(ip, true, includingFirewall); + if (ip.isOneToOneNat()) { + if (purposes == null) { + purposes = new HashSet(); + } + purposes.add(Purpose.StaticNat); + } + if (purposes == null || purposes.isEmpty()) { + // IP is not being used for any purpose so skip IPAssoc to network service provider + continue; + } else { + if (rulesRevoked) { + // no active rules/revoked rules are associated with this public IP, so remove the +// association with the provider + ip.setState(State.Releasing); + } else { + if (ip.getState() == State.Releasing) { + // rules are not revoked yet, so don't let the network service provider revoke the IP +// association + // mark IP is allocated so that IP association will not be removed from the provider + ip.setState(State.Allocated); + } + } + } + } + if (purposes.contains(Purpose.StaticNat)) { + services.add(Service.StaticNat); + } + if (purposes.contains(Purpose.LoadBalancing)) { + services.add(Service.Lb); + } + if (purposes.contains(Purpose.PortForwarding)) { + services.add(Service.PortForwarding); + } + if (purposes.contains(Purpose.Vpn)) { + services.add(Service.Vpn); + } + if (purposes.contains(Purpose.Firewall)) { + services.add(Service.Firewall); + } + if (services.isEmpty()) { + continue; + } + ipToServices.put(ip, services); + } + } + return ipToServices; + } + + protected boolean canIpUsedForNonConserveService(PublicIp ip, Service service) { + // If it's non-conserve mode, then the new ip should not be used by any other services + List ipList = new ArrayList(); + ipList.add(ip); + Map> ipToServices = getIpToServices(ipList, false, false); + Set services = ipToServices.get(ip); + // Not used currently, safe + if (services == null || services.isEmpty()) { + return true; + } + // Since it's non-conserve mode, only one service should used for IP + if (services.size() != 1) { + throw new InvalidParameterException("There are multiple services used ip " + ip.getAddress() + "."); + } + if (service != null && !((Service) services.toArray()[0] == service || service.equals(Service.Firewall))) { + throw new InvalidParameterException("The IP " + ip.getAddress() + " is already used as " + ((Service) services.toArray()[0]).getName() + " rather than " + service.getName()); + } + return true; + } + + protected boolean canIpsUsedForNonConserve(List publicIps) { + boolean result = true; + for (PublicIp ip : publicIps) { + result = canIpUsedForNonConserveService(ip, null); + if (!result) { + break; + } + } + return result; + } + + private boolean canIpsUseOffering(List publicIps, long offeringId) { + Map> ipToServices = getIpToServices(publicIps, false, true); + Map> serviceToProviders = _networkModel.getNetworkOfferingServiceProvidersMap(offeringId); + for (PublicIp ip : ipToServices.keySet()) { + Set services = ipToServices.get(ip); + Provider provider = null; + for (Service service : services) { + Set curProviders = serviceToProviders.get(service); + if (curProviders == null || curProviders.isEmpty()) { + continue; + } + Provider curProvider = (Provider) curProviders.toArray()[0]; + if (provider == null) { + provider = curProvider; + continue; + } + // We don't support multiple providers for one service now + if (!provider.equals(curProvider)) { + throw new InvalidParameterException("There would be multiple providers for IP " + ip.getAddress() + " with the new network offering!"); + } + } + } + return true; + } + + + + + private Set getPublicIpPurposeInRules(PublicIp ip, boolean includeRevoked, boolean includingFirewall) { + Set result = new HashSet(); + List rules = null; + if (includeRevoked) { + rules = _firewallDao.listByIp(ip.getId()); + } else { + rules = _firewallDao.listByIpAndNotRevoked(ip.getId()); + } + + if (rules == null || rules.isEmpty()) { + return null; + } + + for (FirewallRuleVO rule : rules) { + if (rule.getPurpose() != Purpose.Firewall || includingFirewall) { + result.add(rule.getPurpose()); + } + } + + return result; + } + + @Override + public List getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner) { + + return _networksDao.listByZoneAndGuestType(owner.getId(), zoneId, Network.GuestType.Isolated, false); + } + + @Override + public List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { + + return _networksDao.listSourceNATEnabledNetworks(owner.getId(), zoneId, Network.GuestType.Isolated); + } + + + + + @Override + @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "allocating Ip", create = true) + public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) + throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { + Account caller = UserContext.current().getCaller(); + // check permissions + _accountMgr.checkAccess(caller, null, false, ipOwner); + long callerUserId = UserContext.current().getCallerUserId(); + DataCenter zone = _configMgr.getZone(zoneId); + + return _networkMgr.allocateIp(ipOwner, isSystem, caller, callerUserId, zone); + } + + @Override + @DB + public boolean configure(final String name, final Map params) throws ConfigurationException { + _name = name; + _configs = _configDao.getConfiguration("Network", params); + + _cidrLimit = NumbersUtil.parseInt(_configs.get(Config.NetworkGuestCidrLimit.key()), 22); + + _allowSubdomainNetworkAccess = Boolean.valueOf(_configs.get(Config.SubDomainNetworkAccess.key())); + + s_logger.info("Network Service is configured."); + + return true; + } + + @Override + public String getName() { + return _name; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + return true; + } + + protected NetworkServiceImpl() { + } + + + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_NET_IP_RELEASE, eventDescription = "disassociating Ip", async = true) + public boolean releaseIpAddress(long ipAddressId) throws InsufficientAddressCapacityException { + Long userId = UserContext.current().getCallerUserId(); + Account caller = UserContext.current().getCaller(); + + // Verify input parameters + IPAddressVO ipVO = _ipAddressDao.findById(ipAddressId); + if (ipVO == null) { + throw new InvalidParameterValueException("Unable to find ip address by id"); + } + + if (ipVO.getAllocatedTime() == null) { + s_logger.debug("Ip Address id= " + ipAddressId + " is not allocated, so do nothing."); + return true; + } + + // verify permissions + if (ipVO.getAllocatedToAccountId() != null) { + _accountMgr.checkAccess(caller, null, true, ipVO); + } + + if (ipVO.isSourceNat()) { + throw new IllegalArgumentException("ip address is used for source nat purposes and can not be disassociated."); + } + + VlanVO vlan = _vlanDao.findById(ipVO.getVlanId()); + if (!vlan.getVlanType().equals(VlanType.VirtualNetwork)) { + throw new IllegalArgumentException("only ip addresses that belong to a virtual network may be disassociated."); + } + + // Check for account wide pool. It will have an entry for account_vlan_map. + if (_accountVlanMapDao.findAccountVlanMap(ipVO.getAllocatedToAccountId(), ipVO.getVlanId()) != null) { + //see IPaddressVO.java + InvalidParameterValueException ex = new InvalidParameterValueException("Sepcified IP address uuid belongs to" + + " Account wide IP pool and cannot be disassociated"); + ex.addProxyObject("user_ip_address", ipAddressId, "ipAddressId"); + throw ex; + } + + // don't allow releasing system ip address + if (ipVO.getSystem()) { + InvalidParameterValueException ex = new InvalidParameterValueException("Can't release system IP address with specified id"); + ex.addProxyObject(ipVO, ipVO.getId(), "systemIpAddrId"); + throw ex; + } + + boolean success = _networkMgr.disassociatePublicIpAddress(ipAddressId, userId, caller); + + if (success) { + Long networkId = ipVO.getAssociatedWithNetworkId(); + if (networkId != null) { + Network guestNetwork = getNetwork(networkId); + NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); + Long vmId = ipVO.getAssociatedWithVmId(); + if (offering.getElasticIp() && vmId != null) { + _rulesMgr.getSystemIpAndEnableStaticNatForVm(_userVmDao.findById(vmId), true); + return true; + } + } + } else { + s_logger.warn("Failed to release public ip address id=" + ipAddressId); + } + return success; + } + + + @Override + @DB + public Network getNetwork(long id) { + return _networksDao.findById(id); + } + + + private void checkSharedNetworkCidrOverlap(Long zoneId, long physicalNetworkId, String cidr) { + if (zoneId == null || cidr == null) { + return; + } + + DataCenter zone = _dcDao.findById(zoneId); + List networks = _networksDao.listByZone(zoneId); + Map networkToCidr = new HashMap(); + + // check for CIDR overlap with all possible CIDR for isolated guest networks + // in the zone when using external networking + PhysicalNetworkVO pNetwork = _physicalNetworkDao.findById(physicalNetworkId); + if (pNetwork.getVnet() != null) { + String vlanRange[] = pNetwork.getVnet().split("-"); + int lowestVlanTag = Integer.valueOf(vlanRange[0]); + int highestVlanTag = Integer.valueOf(vlanRange[1]); + for (int vlan=lowestVlanTag; vlan <= highestVlanTag; ++vlan) { + int offset = vlan - lowestVlanTag; + String globalVlanBits = _configDao.getValue(Config.GuestVlanBits.key()); + int cidrSize = 8 + Integer.parseInt(globalVlanBits); + String guestNetworkCidr = zone.getGuestNetworkCidr(); + String[] cidrTuple = guestNetworkCidr.split("\\/"); + long newCidrAddress = (NetUtils.ip2Long(cidrTuple[0]) & 0xff000000) | (offset << (32 - cidrSize)); + if (NetUtils.isNetworksOverlap(NetUtils.long2Ip(newCidrAddress), cidr)) { + throw new InvalidParameterValueException("Specified CIDR for shared network conflict with CIDR that is reserved for zone vlan " + vlan); + } + } + } + + // check for CIDR overlap with all CIDR's of the shared networks in the zone + for (NetworkVO network : networks) { + if (network.getGuestType() == GuestType.Isolated) { + continue; + } + if (network.getCidr() != null) { + networkToCidr.put(network.getId(), network.getCidr()); + } + } + if (networkToCidr != null && !networkToCidr.isEmpty()) { + for (long networkId : networkToCidr.keySet()) { + String ntwkCidr = networkToCidr.get(networkId); + if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { + throw new InvalidParameterValueException("Specified CIDR for shared network conflict with CIDR of a shared network in the zone."); + } + } + } + } + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_NETWORK_CREATE, eventDescription = "creating network") + public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException { + Long networkOfferingId = cmd.getNetworkOfferingId(); + String gateway = cmd.getGateway(); + String startIP = cmd.getStartIp(); + String endIP = cmd.getEndIp(); + String netmask = cmd.getNetmask(); + String networkDomain = cmd.getNetworkDomain(); + String vlanId = cmd.getVlan(); + String name = cmd.getNetworkName(); + String displayText = cmd.getDisplayText(); + Account caller = UserContext.current().getCaller(); + Long physicalNetworkId = cmd.getPhysicalNetworkId(); + Long zoneId = cmd.getZoneId(); + String aclTypeStr = cmd.getAclType(); + Long domainId = cmd.getDomainId(); + boolean isDomainSpecific = false; + Boolean subdomainAccess = cmd.getSubdomainAccess(); + Long vpcId = cmd.getVpcId(); + + // Validate network offering + NetworkOfferingVO ntwkOff = _networkOfferingDao.findById(networkOfferingId); + if (ntwkOff == null || ntwkOff.isSystemOnly()) { + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find network offering by specified id"); + if (ntwkOff != null) { + ex.addProxyObject(ntwkOff, networkOfferingId, "networkOfferingId"); + // Get the VO object's table name. + String tablename = AnnotationHelper.getTableName(ntwkOff); + if (tablename != null) { + ex.addProxyObject(tablename, networkOfferingId, "networkOfferingId"); + } else { + s_logger.info("\nCould not retrieve table name (annotation) from " + tablename + " VO proxy object\n"); + } + throw ex; + } + throw ex; + } + // validate physical network and zone + // Check if physical network exists + PhysicalNetwork pNtwk = null; + if (physicalNetworkId != null) { + pNtwk = _physicalNetworkDao.findById(physicalNetworkId); + if (pNtwk == null) { + throw new InvalidParameterValueException("Unable to find a physical network having the specified physical network id"); + } + } + + if (zoneId == null) { + zoneId = pNtwk.getDataCenterId(); + } + + DataCenter zone = _dcDao.findById(zoneId); + if (zone == null) { + throw new InvalidParameterValueException("Specified zone id was not found"); + } + + if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(caller.getType())) { + // See DataCenterVO.java + PermissionDeniedException ex = new PermissionDeniedException("Cannot perform this operation since specified Zone is currently disabled"); + ex.addProxyObject(zone, zoneId, "zoneId"); + throw ex; + } + + // Only domain and account ACL types are supported in Acton. + ACLType aclType = null; + if (aclTypeStr != null) { + if (aclTypeStr.equalsIgnoreCase(ACLType.Account.toString())) { + aclType = ACLType.Account; + } else if (aclTypeStr.equalsIgnoreCase(ACLType.Domain.toString())) { + aclType = ACLType.Domain; + } else { + throw new InvalidParameterValueException("Incorrect aclType specified. Check the API documentation for supported types"); + } + // In 3.0 all Shared networks should have aclType == Domain, all Isolated networks aclType==Account + if (ntwkOff.getGuestType() == GuestType.Isolated) { + if (aclType != ACLType.Account) { + throw new InvalidParameterValueException("AclType should be " + ACLType.Account + " for network of type " + Network.GuestType.Isolated); + } + } else if (ntwkOff.getGuestType() == GuestType.Shared) { + if (!(aclType == ACLType.Domain || aclType == ACLType.Account)) { + throw new InvalidParameterValueException("AclType should be " + ACLType.Domain + " or " + + ACLType.Account + " for network of type " + Network.GuestType.Shared); + } + } + } else { + if (ntwkOff.getGuestType() == GuestType.Isolated) { + aclType = ACLType.Account; + } else if (ntwkOff.getGuestType() == GuestType.Shared) { + aclType = ACLType.Domain; + } + } + + // Only Admin can create Shared networks + if (ntwkOff.getGuestType() == GuestType.Shared && !_accountMgr.isAdmin(caller.getType())) { + throw new InvalidParameterValueException("Only Admins can create network with guest type " + GuestType.Shared); + } + + // Check if the network is domain specific + if (aclType == ACLType.Domain) { + // only Admin can create domain with aclType=Domain + if (!_accountMgr.isAdmin(caller.getType())) { + throw new PermissionDeniedException("Only admin can create networks with aclType=Domain"); + } + + // only shared networks can be Domain specific + if (ntwkOff.getGuestType() != GuestType.Shared) { + throw new InvalidParameterValueException("Only " + GuestType.Shared + " networks can have aclType=" + ACLType.Domain); + } + + if (domainId != null) { + if (ntwkOff.getTrafficType() != TrafficType.Guest || ntwkOff.getGuestType() != Network.GuestType.Shared) { + throw new InvalidParameterValueException("Domain level networks are supported just for traffic type " + + TrafficType.Guest + " and guest type " + Network.GuestType.Shared); + } + + DomainVO domain = _domainDao.findById(domainId); + if (domain == null) { + throw new InvalidParameterValueException("Unable to find domain by specified id"); + } + _accountMgr.checkAccess(caller, domain); + } + isDomainSpecific = true; + + } else if (subdomainAccess != null) { + throw new InvalidParameterValueException("Parameter subDomainAccess can be specified only with aclType=Domain"); + } + Account owner = null; + if ((cmd.getAccountName() != null && domainId != null) || cmd.getProjectId() != null) { + owner = _accountMgr.finalizeOwner(caller, cmd.getAccountName(), domainId, cmd.getProjectId()); + } else { + owner = caller; + } + + UserContext.current().setAccountId(owner.getAccountId()); + + // VALIDATE IP INFO + // if end ip is not specified, default it to startIp + if (startIP != null) { + if (!NetUtils.isValidIp(startIP)) { + throw new InvalidParameterValueException("Invalid format for the startIp parameter"); + } + if (endIP == null) { + endIP = startIP; + } else if (!NetUtils.isValidIp(endIP)) { + throw new InvalidParameterValueException("Invalid format for the endIp parameter"); + } + } + + if (startIP != null && endIP != null) { + if (!(gateway != null && netmask != null)) { + throw new InvalidParameterValueException("gateway and netmask should be defined when startIP/endIP are passed in"); + } + } + + String cidr = null; + if (gateway != null && netmask != null) { + if (!NetUtils.isValidIp(gateway)) { + throw new InvalidParameterValueException("Invalid gateway"); + } + if (!NetUtils.isValidNetmask(netmask)) { + throw new InvalidParameterValueException("Invalid netmask"); + } + + cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask); + } + + // Regular user can create Guest Isolated Source Nat enabled network only + if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL + && (ntwkOff.getTrafficType() != TrafficType.Guest || ntwkOff.getGuestType() != Network.GuestType.Isolated + && areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))) { + throw new InvalidParameterValueException("Regular user can create a network only from the network" + + " offering having traffic type " + TrafficType.Guest + " and network type " + + Network.GuestType.Isolated + " with a service " + Service.SourceNat.getName() + " enabled"); + } + + // Don't allow to specify vlan if the caller is a regular user + if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL && (ntwkOff.getSpecifyVlan() || vlanId != null)) { + throw new InvalidParameterValueException("Regular user is not allowed to specify vlanId"); + } + + // For non-root admins check cidr limit - if it's allowed by global config value + if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN && cidr != null) { + + String[] cidrPair = cidr.split("\\/"); + int cidrSize = Integer.valueOf(cidrPair[1]); + + if (cidrSize < _cidrLimit) { + throw new InvalidParameterValueException("Cidr size can't be less than " + _cidrLimit); + } + } + + Collection ntwkProviders = _networkMgr.finalizeServicesAndProvidersForNetwork(ntwkOff, physicalNetworkId).values(); + if (cidr != null && providersConfiguredForExternalNetworking(ntwkProviders)) { + if (ntwkOff.getGuestType() == GuestType.Shared && (zone.getNetworkType() == NetworkType.Advanced) && + isSharedNetworkOfferingWithServices(networkOfferingId)) { + // validate if CIDR specified overlaps with any of the CIDR's allocated for isolated networks and shared networks in the zone + checkSharedNetworkCidrOverlap(zoneId, pNtwk.getId(), cidr); + } else { + throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external devices!"); + } + } + + + // Vlan is created in 2 cases - works in Advance zone only: + // 1) GuestType is Shared + // 2) GuestType is Isolated, but SourceNat service is disabled + boolean createVlan = (startIP != null && endIP != null && zone.getNetworkType() == NetworkType.Advanced + && ((ntwkOff.getGuestType() == Network.GuestType.Shared) + || (ntwkOff.getGuestType() == GuestType.Isolated && + !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat)))); + + // Can add vlan range only to the network which allows it + if (createVlan && !ntwkOff.getSpecifyIpRanges()) { + InvalidParameterValueException ex = new InvalidParameterValueException("Network offering with specified id doesn't support adding multiple ip ranges"); + ex.addProxyObject(ntwkOff, ntwkOff.getId(), "networkOfferingId"); + String tablename = AnnotationHelper.getTableName(ntwkOff); + if (tablename != null) { + ex.addProxyObject(tablename, ntwkOff.getId(), "networkOfferingId"); + } else { + s_logger.info("\nCould not retrieve table name (annotation) from " + tablename + " VO proxy object\n"); + } + throw ex; + } + + Transaction txn = Transaction.currentTxn(); + txn.start(); + + Long sharedDomainId = null; + if (isDomainSpecific) { + if (domainId != null) { + sharedDomainId = domainId; + } else { + sharedDomainId = _domainMgr.getDomain(Domain.ROOT_DOMAIN).getId(); + subdomainAccess = true; + } + } + + // default owner to system if network has aclType=Domain + if (aclType == ACLType.Domain) { + owner = _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM); + } + + //Create guest network + Network network = null; + if (vpcId != null) { + if (!_configMgr.isOfferingForVpc(ntwkOff)){ + throw new InvalidParameterValueException("Network offering can't be used for VPC networks"); + } + network = _vpcMgr.createVpcGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, + networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, caller); + } else { + if (_configMgr.isOfferingForVpc(ntwkOff)){ + throw new InvalidParameterValueException("Network offering can be used for VPC networks only"); + } + network = _networkMgr.createGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, + networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId); + } + + if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN && createVlan) { + // Create vlan ip range + _configMgr.createVlanAndPublicIpRange(pNtwk.getDataCenterId(), network.getId(), physicalNetworkId, + false, null, startIP, endIP, gateway, netmask, vlanId, null); + } + + txn.commit(); + + return network; + } + + + + @Override + public List searchForNetworks(ListNetworksCmd cmd) { + Long id = cmd.getId(); + String keyword = cmd.getKeyword(); + Long zoneId = cmd.getZoneId(); + Account caller = UserContext.current().getCaller(); + Long domainId = cmd.getDomainId(); + String accountName = cmd.getAccountName(); + String guestIpType = cmd.getGuestIpType(); + String trafficType = cmd.getTrafficType(); + Boolean isSystem = cmd.getIsSystem(); + String aclType = cmd.getAclType(); + Long projectId = cmd.getProjectId(); + List permittedAccounts = new ArrayList(); + String path = null; + Long physicalNetworkId = cmd.getPhysicalNetworkId(); + List supportedServicesStr = cmd.getSupportedServices(); + Boolean restartRequired = cmd.getRestartRequired(); + boolean listAll = cmd.listAll(); + boolean isRecursive = cmd.isRecursive(); + Boolean specifyIpRanges = cmd.getSpecifyIpRanges(); + Long vpcId = cmd.getVpcId(); + Boolean canUseForDeploy = cmd.canUseForDeploy(); + Map tags = cmd.getTags(); + Boolean forVpc = cmd.getForVpc(); + + // 1) default is system to false if not specified + // 2) reset parameter to false if it's specified by the regular user + if ((isSystem == null || caller.getType() == Account.ACCOUNT_TYPE_NORMAL) && id == null) { + isSystem = false; + } + + // Account/domainId parameters and isSystem are mutually exclusive + if (isSystem != null && isSystem && (accountName != null || domainId != null)) { + throw new InvalidParameterValueException("System network belongs to system, account and domainId parameters can't be specified"); + } + + if (domainId != null) { + DomainVO domain = _domainDao.findById(domainId); + if (domain == null) { + // see DomainVO.java + throw new InvalidParameterValueException("Specified domain id doesn't exist in the system"); + } + + _accountMgr.checkAccess(caller, domain); + if (accountName != null) { + Account owner = _accountMgr.getActiveAccountByName(accountName, domainId); + if (owner == null) { + // see DomainVO.java + throw new InvalidParameterValueException("Unable to find account " + accountName + " in specified domain"); + } + + _accountMgr.checkAccess(caller, null, true, owner); + permittedAccounts.add(owner.getId()); + } + } + + if (!_accountMgr.isAdmin(caller.getType()) || (!listAll && (projectId != null && projectId.longValue() != -1 && domainId == null))) { + permittedAccounts.add(caller.getId()); + domainId = caller.getDomainId(); + } + + // set project information + boolean skipProjectNetworks = true; + if (projectId != null) { + if (projectId.longValue() == -1) { + if (!_accountMgr.isAdmin(caller.getType())) { + permittedAccounts.addAll(_projectMgr.listPermittedProjectAccounts(caller.getId())); + } + } else { + permittedAccounts.clear(); + Project project = _projectMgr.getProject(projectId); + if (project == null) { + throw new InvalidParameterValueException("Unable to find project by specified id"); + } + if (!_projectMgr.canAccessProjectAccount(caller, project.getProjectAccountId())) { + // getProject() returns type ProjectVO. + InvalidParameterValueException ex = new InvalidParameterValueException("Account " + caller + " cannot access specified project id"); + ex.addProxyObject(project, projectId, "projectId"); + throw ex; + } + permittedAccounts.add(project.getProjectAccountId()); + } + skipProjectNetworks = false; + } + + if (domainId != null) { + path = _domainDao.findById(domainId).getPath(); + } else { + path = _domainDao.findById(caller.getDomainId()).getPath(); + } + + if (listAll && domainId == null) { + isRecursive = true; + } + + Filter searchFilter = new Filter(NetworkVO.class, "id", false, cmd.getStartIndex(), cmd.getPageSizeVal()); + SearchBuilder sb = _networksDao.createSearchBuilder(); + + if (forVpc != null) { + if (forVpc) { + sb.and("vpc", sb.entity().getVpcId(), Op.NNULL); + } else { + sb.and("vpc", sb.entity().getVpcId(), Op.NULL); + } + } + + // Don't display networks created of system network offerings + SearchBuilder networkOfferingSearch = _networkOfferingDao.createSearchBuilder(); + networkOfferingSearch.and("systemOnly", networkOfferingSearch.entity().isSystemOnly(), SearchCriteria.Op.EQ); + if (isSystem != null && isSystem) { + networkOfferingSearch.and("trafficType", networkOfferingSearch.entity().getTrafficType(), SearchCriteria.Op.EQ); + } + sb.join("networkOfferingSearch", networkOfferingSearch, sb.entity().getNetworkOfferingId(), networkOfferingSearch.entity().getId(), JoinBuilder.JoinType.INNER); + + SearchBuilder zoneSearch = _dcDao.createSearchBuilder(); + zoneSearch.and("networkType", zoneSearch.entity().getNetworkType(), SearchCriteria.Op.EQ); + sb.join("zoneSearch", zoneSearch, sb.entity().getDataCenterId(), zoneSearch.entity().getId(), JoinBuilder.JoinType.INNER); + sb.and("removed", sb.entity().getRemoved(), Op.NULL); + + if (tags != null && !tags.isEmpty()) { + SearchBuilder tagSearch = _resourceTagDao.createSearchBuilder(); + for (int count=0; count < tags.size(); count++) { + tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ); + tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ); + tagSearch.cp(); + } + tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ); + sb.groupBy(sb.entity().getId()); + sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER); + } + + if (permittedAccounts.isEmpty()) { + SearchBuilder domainSearch = _domainDao.createSearchBuilder(); + domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); + sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); + } + + + SearchBuilder accountSearch = _accountDao.createSearchBuilder(); + accountSearch.and("typeNEQ", accountSearch.entity().getType(), SearchCriteria.Op.NEQ); + accountSearch.and("typeEQ", accountSearch.entity().getType(), SearchCriteria.Op.EQ); + + + sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); + + List networksToReturn = new ArrayList(); + + if (isSystem == null || !isSystem) { + if (!permittedAccounts.isEmpty()) { + //get account level networks + networksToReturn.addAll(listAccountSpecificNetworks( + buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, + physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, + permittedAccounts)); + //get domain level networks + if (domainId != null) { + networksToReturn + .addAll(listDomainLevelNetworks( + buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, + physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, + domainId, false)); + } + } else { + //add account specific networks + networksToReturn.addAll(listAccountSpecificNetworksByDomainPath( + buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, + physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, path, + isRecursive)); + //add domain specific networks of domain + parent domains + networksToReturn.addAll(listDomainSpecificNetworksByDomainPath( + buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, + physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, path, + isRecursive)); + //add networks of subdomains + if (domainId == null) { + networksToReturn + .addAll(listDomainLevelNetworks( + buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, + physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, + caller.getDomainId(), true)); + } + } + } else { + networksToReturn = _networksDao.search(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, + guestIpType, trafficType, physicalNetworkId, null, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), + searchFilter); + } + + if (supportedServicesStr != null && !supportedServicesStr.isEmpty() && !networksToReturn.isEmpty()) { + List supportedNetworks = new ArrayList(); + Service[] suppportedServices = new Service[supportedServicesStr.size()]; + int i = 0; + for (String supportedServiceStr : supportedServicesStr) { + Service service = Service.getService(supportedServiceStr); + if (service == null) { + throw new InvalidParameterValueException("Invalid service specified " + supportedServiceStr); + } else { + suppportedServices[i] = service; + } + i++; + } + + for (NetworkVO network : networksToReturn) { + if (areServicesSupportedInNetwork(network.getId(), suppportedServices)) { + supportedNetworks.add(network); + } + } + + networksToReturn=supportedNetworks; + } + + if (canUseForDeploy != null) { + List networksForDeploy = new ArrayList(); + for (NetworkVO network : networksToReturn) { + if (_networkModel.canUseForDeploy(network) == canUseForDeploy) { + networksForDeploy.add(network); + } + } + + networksToReturn=networksForDeploy; + } + + return networksToReturn; + } + + + + private SearchCriteria buildNetworkSearchCriteria(SearchBuilder sb, String keyword, Long id, + Boolean isSystem, Long zoneId, String guestIpType, String trafficType, Long physicalNetworkId, + String aclType, boolean skipProjectNetworks, Boolean restartRequired, Boolean specifyIpRanges, Long vpcId, Map tags) { + + SearchCriteria sc = sb.create(); + + if (isSystem != null) { + sc.setJoinParameters("networkOfferingSearch", "systemOnly", isSystem); + } + + if (keyword != null) { + SearchCriteria ssc = _networksDao.createSearchCriteria(); + ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + sc.addAnd("name", SearchCriteria.Op.SC, ssc); + } + + if (id != null) { + sc.addAnd("id", SearchCriteria.Op.EQ, id); + } + + if (zoneId != null) { + sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); + } + + if (guestIpType != null) { + sc.addAnd("guestType", SearchCriteria.Op.EQ, guestIpType); + } + + if (trafficType != null) { + sc.addAnd("trafficType", SearchCriteria.Op.EQ, trafficType); + } + + if (aclType != null) { + sc.addAnd("aclType", SearchCriteria.Op.EQ, aclType.toString()); + } + + if (physicalNetworkId != null) { + sc.addAnd("physicalNetworkId", SearchCriteria.Op.EQ, physicalNetworkId); + } + + if (skipProjectNetworks) { + sc.setJoinParameters("accountSearch", "typeNEQ", Account.ACCOUNT_TYPE_PROJECT); + } else { + sc.setJoinParameters("accountSearch", "typeEQ", Account.ACCOUNT_TYPE_PROJECT); + } + + if (restartRequired != null) { + sc.addAnd("restartRequired", SearchCriteria.Op.EQ, restartRequired); + } + + if (specifyIpRanges != null) { + sc.addAnd("specifyIpRanges", SearchCriteria.Op.EQ, specifyIpRanges); + } + + if (vpcId != null) { + sc.addAnd("vpcId", SearchCriteria.Op.EQ, vpcId); + } + + if (tags != null && !tags.isEmpty()) { + int count = 0; + sc.setJoinParameters("tagSearch", "resourceType", TaggedResourceType.Network.toString()); + for (String key : tags.keySet()) { + sc.setJoinParameters("tagSearch", "key" + String.valueOf(count), key); + sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), tags.get(key)); + count++; + } + } + + return sc; + } + + private List listDomainLevelNetworks(SearchCriteria sc, Filter searchFilter, long domainId, boolean parentDomainsOnly) { + List networkIds = new ArrayList(); + Set allowedDomains = _domainMgr.getDomainParentIds(domainId); + List maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray()); + + for (NetworkDomainVO map : maps) { + if (map.getDomainId() == domainId && parentDomainsOnly) { + continue; + } + boolean subdomainAccess = (map.isSubdomainAccess() != null) ? map.isSubdomainAccess() : getAllowSubdomainAccessGlobal(); + if (map.getDomainId() == domainId || subdomainAccess) { + networkIds.add(map.getNetworkId()); + } + } + + if (!networkIds.isEmpty()) { + SearchCriteria domainSC = _networksDao.createSearchCriteria(); + domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray()); + domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString()); + + sc.addAnd("id", SearchCriteria.Op.SC, domainSC); + return _networksDao.search(sc, searchFilter); + } else { + return new ArrayList(); + } + } + + private List listAccountSpecificNetworks(SearchCriteria sc, Filter searchFilter, List permittedAccounts) { + SearchCriteria accountSC = _networksDao.createSearchCriteria(); + if (!permittedAccounts.isEmpty()) { + accountSC.addAnd("accountId", SearchCriteria.Op.IN, permittedAccounts.toArray()); + } + + accountSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Account.toString()); + + sc.addAnd("id", SearchCriteria.Op.SC, accountSC); + return _networksDao.search(sc, searchFilter); + } + + private List listAccountSpecificNetworksByDomainPath(SearchCriteria sc, Filter searchFilter, String path, boolean isRecursive) { + SearchCriteria accountSC = _networksDao.createSearchCriteria(); + accountSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Account.toString()); + + if (path != null) { + if (isRecursive) { + sc.setJoinParameters("domainSearch", "path", path + "%"); + } else { + sc.setJoinParameters("domainSearch", "path", path); + } + } + + sc.addAnd("id", SearchCriteria.Op.SC, accountSC); + return _networksDao.search(sc, searchFilter); + } + + private List listDomainSpecificNetworksByDomainPath(SearchCriteria sc, Filter searchFilter, + String path, boolean isRecursive) { + + Set allowedDomains = new HashSet(); + if (path != null) { + if (isRecursive) { + allowedDomains = _domainMgr.getDomainChildrenIds(path); + } else { + Domain domain = _domainDao.findDomainByPath(path); + allowedDomains.add(domain.getId()); + } + } + + List networkIds = new ArrayList(); + + List maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray()); + + for (NetworkDomainVO map : maps) { + networkIds.add(map.getNetworkId()); + } + + if (!networkIds.isEmpty()) { + SearchCriteria domainSC = _networksDao.createSearchCriteria(); + domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray()); + domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString()); + + sc.addAnd("id", SearchCriteria.Op.SC, domainSC); + return _networksDao.search(sc, searchFilter); + } else { + return new ArrayList(); + } + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_NETWORK_DELETE, eventDescription = "deleting network", async = true) + public boolean deleteNetwork(long networkId) { + + Account caller = UserContext.current().getCaller(); + + // Verify network id + NetworkVO network = _networksDao.findById(networkId); + if (network == null) { + // see NetworkVO.java + + InvalidParameterValueException ex = new InvalidParameterValueException("unable to find network with specified id"); + ex.addProxyObject(network, networkId, "networkId"); + throw ex; + } + + // don't allow to delete system network + if (isNetworkSystem(network)) { + InvalidParameterValueException ex = new InvalidParameterValueException("Network with specified id is system and can't be removed"); + ex.addProxyObject(network, network.getId(), "networkId"); + throw ex; + } + + Account owner = _accountMgr.getAccount(network.getAccountId()); + + // Perform permission check + _accountMgr.checkAccess(caller, null, true, network); + + User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId()); + ReservationContext context = new ReservationContextImpl(null, null, callerUser, owner); + + return _networkMgr.destroyNetwork(networkId, context); + } + + + @Override + @ActionEvent(eventType = EventTypes.EVENT_NETWORK_RESTART, eventDescription = "restarting network", async = true) + public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + // This method restarts all network elements belonging to the network and re-applies all the rules + Long networkId = cmd.getNetworkId(); + + User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId()); + Account callerAccount = _accountMgr.getActiveAccountById(callerUser.getAccountId()); + + // Check if network exists + NetworkVO network = _networksDao.findById(networkId); + if (network == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Network with specified id doesn't exist"); + ex.addProxyObject("networks", networkId, "networkId"); + throw ex; + } + + // Don't allow to restart network if it's not in Implemented/Setup state + if (!(network.getState() == Network.State.Implemented || network.getState() == Network.State.Setup)) { + throw new InvalidParameterValueException("Network is not in the right state to be restarted. Correct states are: " + Network.State.Implemented + ", " + Network.State.Setup); + } + + if (network.getBroadcastDomainType() == BroadcastDomainType.Lswitch ) { + /** + * Unable to restart these networks now. + * TODO Restarting a SDN based network requires updating the nics and the configuration + * in the controller. This requires a non-trivial rewrite of the restart procedure. + */ + throw new InvalidParameterException("Unable to restart a running SDN network."); + } + + _accountMgr.checkAccess(callerAccount, null, true, network); + + boolean success = _networkMgr.restartNetwork(networkId, callerAccount, callerUser, cleanup); + + if (success) { + s_logger.debug("Network id=" + networkId + " is restarted successfully."); + } else { + s_logger.warn("Network id=" + networkId + " failed to restart."); + } + + return success; + } + + @Override + public int getActiveNicsInNetwork(long networkId) { + return _networksDao.getActiveNicsIn(networkId); + } + + + + + + + protected Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { + + if (!areServicesSupportedByNetworkOffering(offering.getId(), service)) { + // TBD: We should be sending networkOfferingId and not the offering object itself. + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the network offering " + offering); + } + + Map serviceCapabilities = new HashMap(); + + // get the Provider for this Service for this offering + List providers = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(offering.getId(), service); + if (providers.isEmpty()) { + // TBD: We should be sending networkOfferingId and not the offering object itself. + throw new InvalidParameterValueException("Service " + service.getName() + " is not supported by the network offering " + offering); + } + + // FIXME - in post 3.0 we are going to support multiple providers for the same service per network offering, so + // we have to calculate capabilities for all of them + String provider = providers.get(0); + + // FIXME we return the capabilities of the first provider of the service - what if we have multiple providers + // for same Service? + NetworkElement element = _networkModel.getElementImplementingProvider(provider); + if (element != null) { + Map> elementCapabilities = element.getCapabilities(); + ; + + if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { + // TBD: We should be sending providerId and not the offering object itself. + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider); + } + serviceCapabilities = elementCapabilities.get(service); + } + + return serviceCapabilities; + } + + + @Override + public IpAddress getIp(long ipAddressId) { + return _ipAddressDao.findById(ipAddressId); + } + + + protected boolean providersConfiguredForExternalNetworking(Collection providers) { + for(String providerStr : providers){ + Provider provider = Network.Provider.getProvider(providerStr); + if(provider.isExternal()){ + return true; + } + } + return false; + } + + protected boolean isSharedNetworkOfferingWithServices(long networkOfferingId) { + NetworkOfferingVO networkOffering = _networkOfferingDao.findById(networkOfferingId); + if ( (networkOffering.getGuestType() == Network.GuestType.Shared) && ( + areServicesSupportedByNetworkOffering(networkOfferingId, Service.SourceNat) || + areServicesSupportedByNetworkOffering(networkOfferingId, Service.StaticNat) || + areServicesSupportedByNetworkOffering(networkOfferingId, Service.Firewall) || + areServicesSupportedByNetworkOffering(networkOfferingId, Service.PortForwarding) || + areServicesSupportedByNetworkOffering(networkOfferingId, Service.Lb))) { + return true; + } + return false; + } + + + protected boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { + return (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(networkOfferingId, services)); + } + + + protected boolean areServicesSupportedInNetwork(long networkId, Service... services) { + return (_ntwkSrvcDao.areServicesSupportedInNetwork(networkId, services)); + } + + + + + + + + private boolean checkForNonStoppedVmInNetwork(long networkId) { + List vms = _userVmDao.listByNetworkIdAndStates(networkId, VirtualMachine.State.Starting, + VirtualMachine.State.Running, VirtualMachine.State.Migrating, VirtualMachine.State.Stopping); + return vms.isEmpty(); + } + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_NETWORK_UPDATE, eventDescription = "updating network", async = true) + public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, + User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr) { + boolean restartNetwork = false; + + // verify input parameters + NetworkVO network = _networksDao.findById(networkId); + if (network == null) { + // see NetworkVO.java + InvalidParameterValueException ex = new InvalidParameterValueException("Specified network id doesn't exist in the system"); + ex.addProxyObject("networks", networkId, "networkId"); + throw ex; + } + + // don't allow to update network in Destroy state + if (network.getState() == Network.State.Destroy) { + throw new InvalidParameterValueException("Don't allow to update network in state " + Network.State.Destroy); + } + + // Don't allow to update system network + NetworkOffering offering = _networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId()); + if (offering.isSystemOnly()) { + throw new InvalidParameterValueException("Can't update system networks"); + } + + // allow to upgrade only Guest networks + if (network.getTrafficType() != Networks.TrafficType.Guest) { + throw new InvalidParameterValueException("Can't allow networks which traffic type is not " + TrafficType.Guest); + } + + _accountMgr.checkAccess(callerAccount, null, true, network); + + if (name != null) { + network.setName(name); + } + + if (displayText != null) { + network.setDisplayText(displayText); + } + + // network offering and domain suffix can be updated for Isolated networks only in 3.0 + if ((networkOfferingId != null || domainSuffix != null) && network.getGuestType() != GuestType.Isolated) { + throw new InvalidParameterValueException("NetworkOffering and domain suffix upgrade can be perfomed for Isolated networks only"); + } + + boolean networkOfferingChanged = false; + + long oldNetworkOfferingId = network.getNetworkOfferingId(); + if (networkOfferingId != null) { + + NetworkOfferingVO networkOffering = _networkOfferingDao.findById(networkOfferingId); + if (networkOffering == null || networkOffering.isSystemOnly()) { + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find network offering with specified id"); + ex.addProxyObject(networkOffering, networkOfferingId, "networkOfferingId"); + throw ex; + } + + // network offering should be in Enabled state + if (networkOffering.getState() != NetworkOffering.State.Enabled) { + InvalidParameterValueException ex = new InvalidParameterValueException("Network offering with specified id is not in " + NetworkOffering.State.Enabled + " state, can't upgrade to it"); + ex.addProxyObject(networkOffering, networkOfferingId, "networkOfferingId"); + throw ex; + } + + + //can't update from vpc to non-vpc network offering + boolean forVpcNew = _configMgr.isOfferingForVpc(networkOffering); + boolean vorVpcOriginal = _configMgr.isOfferingForVpc(_configMgr.getNetworkOffering(oldNetworkOfferingId)); + if (forVpcNew != vorVpcOriginal) { + String errMsg = forVpcNew ? "a vpc offering " : "not a vpc offering"; + throw new InvalidParameterValueException("Can't update as the new offering is " + errMsg); + } + + if (networkOfferingId != oldNetworkOfferingId) { + NetworkOffering oldNtwkOff = _networkOfferingDao.findByIdIncludingRemoved(oldNetworkOfferingId); + Collection newProviders = _networkMgr.finalizeServicesAndProvidersForNetwork(networkOffering, network.getPhysicalNetworkId()).values(); + Collection oldProviders = _networkMgr.finalizeServicesAndProvidersForNetwork(oldNtwkOff, network.getPhysicalNetworkId()).values(); + + if (providersConfiguredForExternalNetworking(newProviders) != providersConfiguredForExternalNetworking(oldProviders) + && !changeCidr) { + throw new InvalidParameterValueException("Updating network failed since guest CIDR needs to be changed!"); + } + if (changeCidr) { + if (!checkForNonStoppedVmInNetwork(network.getId())) { + InvalidParameterValueException ex = new InvalidParameterValueException("All user vm of network of specified id should be stopped before changing CIDR!"); + ex.addProxyObject(network, networkId, "networkId"); + throw ex; + } + } + // check if the network is upgradable + if (!canUpgrade(network, oldNetworkOfferingId, networkOfferingId)) { + throw new InvalidParameterValueException("Can't upgrade from network offering " + oldNetworkOfferingId + " to " + networkOfferingId + "; check logs for more information"); + } + restartNetwork = true; + networkOfferingChanged = true; + } + } + Map newSvcProviders = new HashMap(); + if (networkOfferingChanged) { + newSvcProviders = _networkMgr.finalizeServicesAndProvidersForNetwork(_configMgr.getNetworkOffering(networkOfferingId), network.getPhysicalNetworkId()); + } + + // don't allow to modify network domain if the service is not supported + if (domainSuffix != null) { + // validate network domain + if (!NetUtils.verifyDomainName(domainSuffix)) { + throw new InvalidParameterValueException( + "Invalid network domain. Total length shouldn't exceed 190 chars. Each domain label must be between 1 and 63 characters long, can contain ASCII letters 'a' through 'z', the digits '0' through '9', " + + "and the hyphen ('-'); can't start or end with \"-\""); + } + + long offeringId = oldNetworkOfferingId; + if (networkOfferingId != null) { + offeringId = networkOfferingId; + } + + Map dnsCapabilities = getNetworkOfferingServiceCapabilities(_configMgr.getNetworkOffering(offeringId), Service.Dns); + String isUpdateDnsSupported = dnsCapabilities.get(Capability.AllowDnsSuffixModification); + if (isUpdateDnsSupported == null || !Boolean.valueOf(isUpdateDnsSupported)) { + // TBD: use uuid instead of networkOfferingId. May need to hardcode tablename in call to addProxyObject(). + throw new InvalidParameterValueException("Domain name change is not supported by the network offering id=" + networkOfferingId); + } + + network.setNetworkDomain(domainSuffix); + // have to restart the network + restartNetwork = true; + } + + ReservationContext context = new ReservationContextImpl(null, null, callerUser, callerAccount); + // 1) Shutdown all the elements and cleanup all the rules. Don't allow to shutdown network in intermediate + // states - Shutdown and Implementing + boolean validStateToShutdown = (network.getState() == Network.State.Implemented || network.getState() == Network.State.Setup || network.getState() == Network.State.Allocated); + if (restartNetwork) { + if (validStateToShutdown) { + if (!changeCidr) { + s_logger.debug("Shutting down elements and resources for network id=" + networkId + " as a part of network update"); + + if (!_networkMgr.shutdownNetworkElementsAndResources(context, true, network)) { + s_logger.warn("Failed to shutdown the network elements and resources as a part of network restart: " + network); + CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network elements and resources as a part of update to network of specified id"); + ex.addProxyObject(network, networkId, "networkId"); + throw ex; + } + } else { + // We need to shutdown the network, since we want to re-implement the network. + s_logger.debug("Shutting down network id=" + networkId + " as a part of network update"); + + if (!_networkMgr.shutdownNetwork(network.getId(), context, true)) { + s_logger.warn("Failed to shutdown the network as a part of update to network with specified id"); + CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network as a part of update of specified network id"); + ex.addProxyObject(network, networkId, "networkId"); + throw ex; + } + } + } else { + CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network elements and resources as a part of update to network with specified id; network is in wrong state: " + network.getState()); + ex.addProxyObject(network, networkId, "networkId"); + throw ex; + } + } + + // 2) Only after all the elements and rules are shutdown properly, update the network VO + // get updated network + Network.State networkState = _networksDao.findById(networkId).getState(); + boolean validStateToImplement = (networkState == Network.State.Implemented || networkState == Network.State.Setup || networkState == Network.State.Allocated); + if (restartNetwork && !validStateToImplement) { + CloudRuntimeException ex = new CloudRuntimeException("Failed to implement the network elements and resources as a part of update to network with specified id; network is in wrong state: " + networkState); + ex.addProxyObject(network, networkId, "networkId"); + throw ex; + } + + if (networkOfferingId != null) { + if (networkOfferingChanged) { + Transaction txn = Transaction.currentTxn(); + txn.start(); + network.setNetworkOfferingId(networkOfferingId); + _networksDao.update(networkId, network, newSvcProviders); + // get all nics using this network + // log remove usage events for old offering + // log assign usage events for new offering + List nics = _nicDao.listByNetworkId(networkId); + for (NicVO nic : nics) { + long vmId = nic.getInstanceId(); + VMInstanceVO vm = _vmDao.findById(vmId); + if (vm == null) { + s_logger.error("Vm for nic " + nic.getId() + " not found with Vm Id:" + vmId); + continue; + } + long isDefault = (nic.isDefaultNic()) ? 1 : 0; + UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), null, oldNetworkOfferingId, null, 0L); + _usageEventDao.persist(usageEvent); + usageEvent = new UsageEventVO(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), vm.getHostName(), networkOfferingId, null, isDefault); + _usageEventDao.persist(usageEvent); + } + txn.commit(); + } else { + network.setNetworkOfferingId(networkOfferingId); + _networksDao.update(networkId, network, _networkMgr.finalizeServicesAndProvidersForNetwork(_configMgr.getNetworkOffering(networkOfferingId), network.getPhysicalNetworkId())); + } + } else { + _networksDao.update(networkId, network); + } + + // 3) Implement the elements and rules again + if (restartNetwork) { + if (network.getState() != Network.State.Allocated) { + DeployDestination dest = new DeployDestination(_dcDao.findById(network.getDataCenterId()), null, null, null); + s_logger.debug("Implementing the network " + network + " elements and resources as a part of network update"); + try { + if (!changeCidr) { + _networkMgr.implementNetworkElementsAndResources(dest, context, network, _networkOfferingDao.findById(network.getNetworkOfferingId())); + } else { + _networkMgr.implementNetwork(network.getId(), dest, context); + } + } catch (Exception ex) { + s_logger.warn("Failed to implement network " + network + " elements and resources as a part of network update due to ", ex); + CloudRuntimeException e = new CloudRuntimeException("Failed to implement network (with specified id) elements and resources as a part of network update"); + e.addProxyObject(network, networkId, "networkId"); + throw e; + } + } + } + + return getNetwork(network.getId()); + } + + + + + protected Set getAvailableIps(Network network, String requestedIp) { + String[] cidr = network.getCidr().split("/"); + List ips = _nicDao.listIpAddressInNetwork(network.getId()); + Set allPossibleIps = NetUtils.getAllIpsFromCidr(cidr[0], Integer.parseInt(cidr[1])); + Set usedIps = new TreeSet(); + + for (String ip : ips) { + if (requestedIp != null && requestedIp.equals(ip)) { + s_logger.warn("Requested ip address " + requestedIp + " is already in use in network" + network); + return null; + } + + usedIps.add(NetUtils.ip2Long(ip)); + } + if (usedIps.size() != 0) { + allPossibleIps.removeAll(usedIps); + } + return allPossibleIps; + } + + + + protected boolean canUpgrade(Network network, long oldNetworkOfferingId, long newNetworkOfferingId) { + NetworkOffering oldNetworkOffering = _networkOfferingDao.findByIdIncludingRemoved(oldNetworkOfferingId); + NetworkOffering newNetworkOffering = _networkOfferingDao.findById(newNetworkOfferingId); + + // can upgrade only Isolated networks + if (oldNetworkOffering.getGuestType() != GuestType.Isolated) { + throw new InvalidParameterValueException("NetworkOfferingId can be upgraded only for the network of type " + GuestType.Isolated); + } + + // security group service should be the same + if (areServicesSupportedByNetworkOffering(oldNetworkOfferingId, Service.SecurityGroup) != areServicesSupportedByNetworkOffering(newNetworkOfferingId, Service.SecurityGroup)) { + s_logger.debug("Offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different securityGroupProperty, can't upgrade"); + return false; + } + + // Type of the network should be the same + if (oldNetworkOffering.getGuestType() != newNetworkOffering.getGuestType()) { + s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " are of different types, can't upgrade"); + return false; + } + + // tags should be the same + if (newNetworkOffering.getTags() != null) { + if (oldNetworkOffering.getTags() == null) { + s_logger.debug("New network offering id=" + newNetworkOfferingId + " has tags and old network offering id=" + oldNetworkOfferingId + " doesn't, can't upgrade"); + return false; + } + if (!oldNetworkOffering.getTags().equalsIgnoreCase(newNetworkOffering.getTags())) { + s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different tags, can't upgrade"); + return false; + } + } + + // Traffic types should be the same + if (oldNetworkOffering.getTrafficType() != newNetworkOffering.getTrafficType()) { + s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different traffic types, can't upgrade"); + return false; + } + + // specify vlan should be the same + if (oldNetworkOffering.getSpecifyVlan() != newNetworkOffering.getSpecifyVlan()) { + s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different values for specifyVlan, can't upgrade"); + return false; + } + + // specify ipRanges should be the same + if (oldNetworkOffering.getSpecifyIpRanges() != newNetworkOffering.getSpecifyIpRanges()) { + s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different values for specifyIpRangess, can't upgrade"); + return false; + } + + // Check all ips + List userIps = _ipAddressDao.listByAssociatedNetwork(network.getId(), null); + List publicIps = new ArrayList(); + if (userIps != null && !userIps.isEmpty()) { + for (IPAddressVO userIp : userIps) { + PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); + publicIps.add(publicIp); + } + } + if (oldNetworkOffering.isConserveMode() && !newNetworkOffering.isConserveMode()) { + if (!canIpsUsedForNonConserve(publicIps)) { + return false; + } + } + + return canIpsUseOffering(publicIps, newNetworkOfferingId); + } + + + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_CREATE, eventDescription = "Creating Physical Network", create = true) + public PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List + isolationMethods, String broadcastDomainRangeStr, Long domainId, List tags, String name) { + + // Check if zone exists + if (zoneId == null) { + throw new InvalidParameterValueException("Please specify a valid zone."); + } + + DataCenterVO zone = _dcDao.findById(zoneId); + if (zone == null) { + throw new InvalidParameterValueException("Please specify a valid zone."); + } + + if (Grouping.AllocationState.Enabled == zone.getAllocationState()) { + // TBD: Send uuid instead of zoneId; may have to hardcode tablename in call to addProxyObject(). + throw new PermissionDeniedException("Cannot create PhysicalNetwork since the Zone is currently enabled, zone Id: " + zoneId); + } + + NetworkType zoneType = zone.getNetworkType(); + + if (zoneType == NetworkType.Basic) { + if (!_physicalNetworkDao.listByZone(zoneId).isEmpty()) { + // TBD: Send uuid instead of zoneId; may have to hardcode tablename in call to addProxyObject(). + throw new CloudRuntimeException("Cannot add the physical network to basic zone id: " + zoneId + ", there is a physical network already existing in this basic Zone"); + } + } + if (tags != null && tags.size() > 1) { + throw new InvalidParameterException("Only one tag can be specified for a physical network at this time"); + } + + if (isolationMethods != null && isolationMethods.size() > 1) { + throw new InvalidParameterException("Only one isolationMethod can be specified for a physical network at this time"); + } + + int vnetStart = 0; + int vnetEnd = 0; + if (vnetRange != null) { + // Verify zone type + if (zoneType == NetworkType.Basic + || (zoneType == NetworkType.Advanced && zone.isSecurityGroupEnabled())) { + throw new InvalidParameterValueException("Can't add vnet range to the physical network in the zone that supports " + zoneType + " network, Security Group enabled: " + zone.isSecurityGroupEnabled()); + } + + String[] tokens = vnetRange.split("-"); + try { + vnetStart = Integer.parseInt(tokens[0]); + if (tokens.length == 1) { + vnetEnd = vnetStart; + } else { + vnetEnd = Integer.parseInt(tokens[1]); + } + } catch (NumberFormatException e) { + throw new InvalidParameterValueException("Please specify valid integers for the vlan range."); + } + + //check for vnet conflicts with other physical network(s) in the zone + checkGuestVnetsConflicts(zoneId, vnetStart, vnetEnd, null); + + if ((vnetStart > vnetEnd) || (vnetStart < 0) || (vnetEnd > 4096)) { + s_logger.warn("Invalid vnet range: start range:" + vnetStart + " end range:" + vnetEnd); + throw new InvalidParameterValueException("Vnet range should be between 0-4096 and start range should be lesser than or equal to end range"); + } + } + + BroadcastDomainRange broadcastDomainRange = null; + if (broadcastDomainRangeStr != null && !broadcastDomainRangeStr.isEmpty()) { + try { + broadcastDomainRange = PhysicalNetwork.BroadcastDomainRange.valueOf(broadcastDomainRangeStr.toUpperCase()); + } catch (IllegalArgumentException ex) { + throw new InvalidParameterValueException("Unable to resolve broadcastDomainRange '" + broadcastDomainRangeStr + "' to a supported value {Pod or Zone}"); + } + + // in Acton release you can specify only Zone broadcastdomain type in Advance zone, and Pod in Basic + if (zoneType == NetworkType.Basic && broadcastDomainRange != null && broadcastDomainRange != BroadcastDomainRange.POD) { + throw new InvalidParameterValueException("Basic zone can have broadcast domain type of value " + BroadcastDomainRange.POD + " only"); + } else if (zoneType == NetworkType.Advanced && broadcastDomainRange != null && broadcastDomainRange != BroadcastDomainRange.ZONE) { + throw new InvalidParameterValueException("Advance zone can have broadcast domain type of value " + BroadcastDomainRange.ZONE + " only"); + } + } + + if (broadcastDomainRange == null) { + if (zoneType == NetworkType.Basic) { + broadcastDomainRange = PhysicalNetwork.BroadcastDomainRange.POD; + } else { + broadcastDomainRange = PhysicalNetwork.BroadcastDomainRange.ZONE; + } + } + + Transaction txn = Transaction.currentTxn(); + try { + txn.start(); + // Create the new physical network in the database + long id = _physicalNetworkDao.getNextInSequence(Long.class, "id"); + PhysicalNetworkVO pNetwork = new PhysicalNetworkVO(id, zoneId, vnetRange, networkSpeed, domainId, broadcastDomainRange, name); + pNetwork.setTags(tags); + pNetwork.setIsolationMethods(isolationMethods); + + pNetwork = _physicalNetworkDao.persist(pNetwork); + + // Add vnet entries for the new zone if zone type is Advanced + if (vnetRange != null) { + _dcDao.addVnet(zone.getId(), pNetwork.getId(), vnetStart, vnetEnd); + } + + // add VirtualRouter as the default network service provider + addDefaultVirtualRouterToPhysicalNetwork(pNetwork.getId()); + + // add security group provider to the physical network + addDefaultSecurityGroupProviderToPhysicalNetwork(pNetwork.getId()); + + // add VPCVirtualRouter as the defualt network service provider + addDefaultVpcVirtualRouterToPhysicalNetwork(pNetwork.getId()); + + txn.commit(); + return pNetwork; + } catch (Exception ex) { + s_logger.warn("Exception: ", ex); + throw new CloudRuntimeException("Fail to create a physical network"); + } + } + + @Override + public Pair, Integer> searchPhysicalNetworks(Long id, Long zoneId, String keyword, Long startIndex, Long pageSize, String name) { + Filter searchFilter = new Filter(PhysicalNetworkVO.class, "id", Boolean.TRUE, startIndex, pageSize); + SearchCriteria sc = _physicalNetworkDao.createSearchCriteria(); + + if (id != null) { + sc.addAnd("id", SearchCriteria.Op.EQ, id); + } + + if (zoneId != null) { + sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); + } + + if (name != null) { + sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + name + "%"); + } + + Pair, Integer> result = _physicalNetworkDao.searchAndCount(sc, searchFilter); + return new Pair, Integer>(result.first(), result.second()); + } + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_UPDATE, eventDescription = "updating physical network", async = true) + public PhysicalNetwork updatePhysicalNetwork(Long id, String networkSpeed, List tags, String newVnetRangeString, String state) { + + // verify input parameters + PhysicalNetworkVO network = _physicalNetworkDao.findById(id); + if (network == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); + ex.addProxyObject(network, id, "physicalNetworkId"); + throw ex; + } + + // if zone is of Basic type, don't allow to add vnet range + DataCenter zone = _dcDao.findById(network.getDataCenterId()); + if (zone == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Zone with id=" + network.getDataCenterId() + " doesn't exist in the system"); + ex.addProxyObject(zone, network.getDataCenterId(), "dataCenterId"); + throw ex; + } + if (newVnetRangeString != null) { + if (zone.getNetworkType() == NetworkType.Basic + || (zone.getNetworkType() == NetworkType.Advanced && zone.isSecurityGroupEnabled())) { + throw new InvalidParameterValueException("Can't add vnet range to the physical network in the zone that supports " + zone.getNetworkType() + " network, Security Group enabled: " + + zone.isSecurityGroupEnabled()); + } + } + + if (tags != null && tags.size() > 1) { + throw new InvalidParameterException("Unable to support more than one tag on network yet"); + } + + PhysicalNetwork.State networkState = null; + if (state != null && !state.isEmpty()) { + try { + networkState = PhysicalNetwork.State.valueOf(state); + } catch (IllegalArgumentException ex) { + throw new InvalidParameterValueException("Unable to resolve state '" + state + "' to a supported value {Enabled or Disabled}"); + } + } + + if (state != null) { + network.setState(networkState); + } + + if (tags != null) { + network.setTags(tags); + } + + if (networkSpeed != null) { + network.setSpeed(networkSpeed); + } + + // Vnet range can be extended only + boolean replaceVnet = false; + ArrayList> vnetsToAdd = new ArrayList>(2); + + if (newVnetRangeString != null) { + Integer newStartVnet = 0; + Integer newEndVnet = 0; + String[] newVnetRange = newVnetRangeString.split("-"); + int maxVnet = 4096; + // for GRE phynets allow up to 32bits + // TODO: Not happy about this test. + // What about guru-like objects for physical networs? + s_logger.debug("ISOLATION METHODS:" + network.getIsolationMethods()); + // Java does not have unsigned types... + if (network.getIsolationMethods().contains("GRE")) { + maxVnet = (int)(Math.pow(2, 32)-1); + } + String rangeMessage = " between 0 and " + maxVnet; + if (newVnetRange.length < 2) { + throw new InvalidParameterValueException("Please provide valid vnet range" + rangeMessage); + } + + if (newVnetRange[0] == null || newVnetRange[1] == null) { + throw new InvalidParameterValueException("Please provide valid vnet range" + rangeMessage); + } + + try { + newStartVnet = Integer.parseInt(newVnetRange[0]); + newEndVnet = Integer.parseInt(newVnetRange[1]); + } catch (NumberFormatException e) { + s_logger.warn("Unable to parse vnet range:", e); + throw new InvalidParameterValueException("Please provide valid vnet range" + rangeMessage); + } + if (newStartVnet < 0 || newEndVnet > maxVnet) { + throw new InvalidParameterValueException("Vnet range has to be" + rangeMessage); + } + + if (newStartVnet > newEndVnet) { + throw new InvalidParameterValueException("Vnet range has to be" + rangeMessage + " and start range should be lesser than or equal to stop range"); + } + + //check if new vnet conflicts with vnet ranges of other physical networks + checkGuestVnetsConflicts(network.getDataCenterId(), newStartVnet, newEndVnet, network.getId()); + + if (physicalNetworkHasAllocatedVnets(network.getDataCenterId(), network.getId())) { + String[] existingRange = network.getVnet().split("-"); + int existingStartVnet = Integer.parseInt(existingRange[0]); + int existingEndVnet = Integer.parseInt(existingRange[1]); + + // check if vnet is being extended + if (newStartVnet.intValue() > existingStartVnet || newEndVnet.intValue() < existingEndVnet) { + throw new InvalidParameterValueException("Can't shrink existing vnet range as it the range has vnets allocated. Only extending existing vnet is supported"); + } + + if (newStartVnet < existingStartVnet) { + vnetsToAdd.add(new Pair(newStartVnet, existingStartVnet - 1)); + } + + if (newEndVnet > existingEndVnet) { + vnetsToAdd.add(new Pair(existingEndVnet + 1, newEndVnet)); + } + + } else { + vnetsToAdd.add(new Pair(newStartVnet, newEndVnet)); + replaceVnet = true; + } + } + + if (newVnetRangeString != null) { + network.setVnet(newVnetRangeString); + } + + _physicalNetworkDao.update(id, network); + + if (replaceVnet) { + s_logger.debug("Deleting existing vnet range for the physicalNetwork id= " + id + " and zone id=" + network.getDataCenterId() + " as a part of updatePhysicalNetwork call"); + _dcDao.deleteVnet(network.getId()); + } + + for (Pair vnetToAdd : vnetsToAdd) { + s_logger.debug("Adding vnet range " + vnetToAdd.first() + "-" + vnetToAdd.second() + " for the physicalNetwork id= " + id + " and zone id=" + network.getDataCenterId() + + " as a part of updatePhysicalNetwork call"); + _dcDao.addVnet(network.getDataCenterId(), network.getId(), vnetToAdd.first(), vnetToAdd.second()); + } + + return network; + } + + protected void checkGuestVnetsConflicts(long zoneId, int newStartVnet, int newEndVnet, Long pNtwkIdToSkip) { + List pNtwks = _physicalNetworkDao.listByZone(zoneId); + for (PhysicalNetwork pNtwk : pNtwks) { + // skip my own network and networks that don't have vnet range set + if ((pNtwk.getVnet() == null || pNtwk.getVnet().isEmpty()) || (pNtwkIdToSkip != null && pNtwkIdToSkip == pNtwk.getId())) { + continue; + } + String[] existingRange = pNtwk.getVnet().split("-"); + int startVnet = Integer.parseInt(existingRange[0]); + int endVnet = Integer.parseInt(existingRange[1]); + if ((newStartVnet >= startVnet && newStartVnet <= endVnet) + || (newEndVnet <= endVnet && newEndVnet >= startVnet)) { + throw new InvalidParameterValueException("Vnet range for physical network conflicts with another " + + "physical network's vnet in the zone"); + } + } + } + + private boolean physicalNetworkHasAllocatedVnets(long zoneId, long physicalNetworkId) { + return !_dcDao.listAllocatedVnets(physicalNetworkId).isEmpty(); + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_DELETE, eventDescription = "deleting physical network", async = true) + @DB + public boolean deletePhysicalNetwork(Long physicalNetworkId) { + + // verify input parameters + PhysicalNetworkVO pNetwork = _physicalNetworkDao.findById(physicalNetworkId); + if (pNetwork == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); + ex.addProxyObject(pNetwork, physicalNetworkId, "physicalNetworkId"); + throw ex; + } + + checkIfPhysicalNetworkIsDeletable(physicalNetworkId); + + Transaction txn = Transaction.currentTxn(); + txn.start(); + // delete vlans for this zone + List vlans = _vlanDao.listVlansByPhysicalNetworkId(physicalNetworkId); + for (VlanVO vlan : vlans) { + _vlanDao.remove(vlan.getId()); + } + + // Delete networks + List networks = _networksDao.listByPhysicalNetwork(physicalNetworkId); + if (networks != null && !networks.isEmpty()) { + for (NetworkVO network : networks) { + _networksDao.remove(network.getId()); + } + } + + // delete vnets + _dcDao.deleteVnet(physicalNetworkId); + + // delete service providers + List providers = _pNSPDao.listBy(physicalNetworkId); + + for(PhysicalNetworkServiceProviderVO provider : providers){ + try { + deleteNetworkServiceProvider(provider.getId()); + }catch (ResourceUnavailableException e) { + s_logger.warn("Unable to complete destroy of the physical network provider: " + provider.getProviderName() + ", id: "+ provider.getId(), e); + return false; + } catch (ConcurrentOperationException e) { + s_logger.warn("Unable to complete destroy of the physical network provider: " + provider.getProviderName() + ", id: "+ provider.getId(), e); + return false; + } + } + + // delete traffic types + _pNTrafficTypeDao.deleteTrafficTypes(physicalNetworkId); + + boolean success = _physicalNetworkDao.remove(physicalNetworkId); + + txn.commit(); + + return success; + } + + @DB + protected void checkIfPhysicalNetworkIsDeletable(Long physicalNetworkId) { + List> tablesToCheck = new ArrayList>(); + + List vnet = new ArrayList(); + vnet.add(0, "op_dc_vnet_alloc"); + vnet.add(1, "physical_network_id"); + vnet.add(2, "there are allocated vnets for this physical network"); + tablesToCheck.add(vnet); + + List networks = new ArrayList(); + networks.add(0, "networks"); + networks.add(1, "physical_network_id"); + networks.add(2, "there are networks associated to this physical network"); + tablesToCheck.add(networks); + + /* + * List privateIP = new ArrayList(); + * privateIP.add(0, "op_dc_ip_address_alloc"); + * privateIP.add(1, "data_center_id"); + * privateIP.add(2, "there are private IP addresses allocated for this zone"); + * tablesToCheck.add(privateIP); + */ + + List publicIP = new ArrayList(); + publicIP.add(0, "user_ip_address"); + publicIP.add(1, "physical_network_id"); + publicIP.add(2, "there are public IP addresses allocated for this physical network"); + tablesToCheck.add(publicIP); + + for (List table : tablesToCheck) { + String tableName = table.get(0); + String column = table.get(1); + String errorMsg = table.get(2); + + String dbName = "cloud"; + + String selectSql = "SELECT * FROM `" + dbName + "`.`" + tableName + "` WHERE " + column + " = ?"; + + if (tableName.equals("networks")) { + selectSql += " AND removed is NULL"; + } + + if (tableName.equals("op_dc_vnet_alloc")) { + selectSql += " AND taken IS NOT NULL"; + } + + if (tableName.equals("user_ip_address")) { + selectSql += " AND state!='Free'"; + } + + if (tableName.equals("op_dc_ip_address_alloc")) { + selectSql += " AND taken IS NOT NULL"; + } + + Transaction txn = Transaction.currentTxn(); + try { + PreparedStatement stmt = txn.prepareAutoCloseStatement(selectSql); + stmt.setLong(1, physicalNetworkId); + ResultSet rs = stmt.executeQuery(); + if (rs != null && rs.next()) { + throw new CloudRuntimeException("The Physical Network is not deletable because " + errorMsg); + } + } catch (SQLException ex) { + throw new CloudRuntimeException("The Management Server failed to detect if physical network is deletable. Please contact Cloud Support."); + } + } + + } + + @Override + public List listNetworkServices(String providerName) { + + Provider provider = null; + if (providerName != null) { + provider = Network.Provider.getProvider(providerName); + if (provider == null) { + throw new InvalidParameterValueException("Invalid Network Service Provider=" + providerName); + } + } + + if (provider != null) { + NetworkElement element = _networkModel.getElementImplementingProvider(providerName); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + providerName + "'"); + } + return new ArrayList(element.getCapabilities().keySet()); + } else { + return Service.listAllServices(); + } + } + + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_CREATE, eventDescription = "Creating Physical Network ServiceProvider", create = true) + public PhysicalNetworkServiceProvider addProviderToPhysicalNetwork(Long physicalNetworkId, String providerName, Long destinationPhysicalNetworkId, List enabledServices) { + + // verify input parameters + PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId); + if (network == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); + ex.addProxyObject(network, physicalNetworkId, "physicalNetworkId"); + throw ex; + } + + // verify input parameters + if (destinationPhysicalNetworkId != null) { + PhysicalNetworkVO destNetwork = _physicalNetworkDao.findById(destinationPhysicalNetworkId); + if (destNetwork == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Destination Physical Network with specified id doesn't exist in the system"); + ex.addProxyObject(destNetwork, destinationPhysicalNetworkId, "destinationPhysicalNetworkId"); + throw ex; + } + } + + if (providerName != null) { + Provider provider = Network.Provider.getProvider(providerName); + if (provider == null) { + throw new InvalidParameterValueException("Invalid Network Service Provider=" + providerName); + } + } + + if (_pNSPDao.findByServiceProvider(physicalNetworkId, providerName) != null) { + // TBD: send uuid instead of physicalNetworkId. + throw new CloudRuntimeException("The '" + providerName + "' provider already exists on physical network : " + physicalNetworkId); + } + + // check if services can be turned off + NetworkElement element = _networkModel.getElementImplementingProvider(providerName); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + providerName + "'"); + } + List services = new ArrayList(); + + if (enabledServices != null) { + if (!element.canEnableIndividualServices()) { + if (enabledServices.size() != element.getCapabilities().keySet().size()) { + throw new InvalidParameterValueException("Cannot enable subset of Services, Please specify the complete list of Services for this Service Provider '" + providerName + "'"); + } + } + + // validate Services + boolean addGatewayService = false; + for (String serviceName : enabledServices) { + Network.Service service = Network.Service.getService(serviceName); + if (service == null || service == Service.Gateway) { + throw new InvalidParameterValueException("Invalid Network Service specified=" + serviceName); + } else if (service == Service.SourceNat) { + addGatewayService = true; + } + + // check if the service is provided by this Provider + if (!element.getCapabilities().containsKey(service)) { + throw new InvalidParameterValueException(providerName + " Provider cannot provide this Service specified=" + serviceName); + } + services.add(service); + } + + if (addGatewayService) { + services.add(Service.Gateway); + } + } else { + // enable all the default services supported by this element. + services = new ArrayList(element.getCapabilities().keySet()); + } + + Transaction txn = Transaction.currentTxn(); + try { + txn.start(); + // Create the new physical network in the database + PhysicalNetworkServiceProviderVO nsp = new PhysicalNetworkServiceProviderVO(physicalNetworkId, providerName); + // set enabled services + nsp.setEnabledServices(services); + + if (destinationPhysicalNetworkId != null) { + nsp.setDestinationPhysicalNetworkId(destinationPhysicalNetworkId); + } + nsp = _pNSPDao.persist(nsp); + + txn.commit(); + return nsp; + } catch (Exception ex) { + s_logger.warn("Exception: ", ex); + throw new CloudRuntimeException("Fail to add a provider to physical network"); + } + + } + + @Override + public Pair, Integer> listNetworkServiceProviders(Long physicalNetworkId, + String name, String state, Long startIndex, Long pageSize) { + + Filter searchFilter = new Filter(PhysicalNetworkServiceProviderVO.class, "id", false, startIndex, pageSize); + SearchBuilder sb = _pNSPDao.createSearchBuilder(); + SearchCriteria sc = sb.create(); + + if (physicalNetworkId != null) { + sc.addAnd("physicalNetworkId", Op.EQ, physicalNetworkId); + } + + if (name != null) { + sc.addAnd("providerName", Op.EQ, name); + } + + if (state != null) { + sc.addAnd("state", Op.EQ, state); + } + + Pair, Integer> result = _pNSPDao.searchAndCount(sc, searchFilter); + return new Pair, Integer>(result.first(), result.second()); + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_UPDATE, eventDescription = "Updating physical network ServiceProvider", async = true) + public PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String stateStr, List enabledServices) { + + PhysicalNetworkServiceProviderVO provider = _pNSPDao.findById(id); + if (provider == null) { + throw new InvalidParameterValueException("Network Service Provider id=" + id + "doesn't exist in the system"); + } + + NetworkElement element = _networkModel.getElementImplementingProvider(provider.getProviderName()); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getProviderName() + "'"); + } + + PhysicalNetworkServiceProvider.State state = null; + if (stateStr != null && !stateStr.isEmpty()) { + try { + state = PhysicalNetworkServiceProvider.State.valueOf(stateStr); + } catch (IllegalArgumentException ex) { + throw new InvalidParameterValueException("Unable to resolve state '" + stateStr + "' to a supported value {Enabled or Disabled}"); + } + } + + boolean update = false; + + if (state != null) { + if (state == PhysicalNetworkServiceProvider.State.Shutdown) { + throw new InvalidParameterValueException("Updating the provider state to 'Shutdown' is not supported"); + } + + if (s_logger.isDebugEnabled()) { + s_logger.debug("updating state of the service provider id=" + id + " on physical network: " + provider.getPhysicalNetworkId() + " to state: " + stateStr); + } + switch (state) { + case Enabled: + if (element != null && element.isReady(provider)) { + provider.setState(PhysicalNetworkServiceProvider.State.Enabled); + update = true; + } else { + throw new CloudRuntimeException("Provider is not ready, cannot Enable the provider, please configure the provider first"); + } + break; + case Disabled: + // do we need to do anything for the provider instances before disabling? + provider.setState(PhysicalNetworkServiceProvider.State.Disabled); + update = true; + break; + } + } + + if (enabledServices != null) { + // check if services can be turned of + if (!element.canEnableIndividualServices()) { + throw new InvalidParameterValueException("Cannot update set of Services for this Service Provider '" + provider.getProviderName() + "'"); + } + + // validate Services + List services = new ArrayList(); + for (String serviceName : enabledServices) { + Network.Service service = Network.Service.getService(serviceName); + if (service == null) { + throw new InvalidParameterValueException("Invalid Network Service specified=" + serviceName); + } + services.add(service); + } + // set enabled services + provider.setEnabledServices(services); + update = true; + } + + if (update) { + _pNSPDao.update(id, provider); + } + return provider; + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_DELETE, eventDescription = "Deleting physical network ServiceProvider", async = true) + public boolean deleteNetworkServiceProvider(Long id) throws ConcurrentOperationException, ResourceUnavailableException { + PhysicalNetworkServiceProviderVO provider = _pNSPDao.findById(id); + + if (provider == null) { + throw new InvalidParameterValueException("Network Service Provider id=" + id + "doesn't exist in the system"); + } + + // check if there are networks using this provider + List networks = _networksDao.listByPhysicalNetworkAndProvider(provider.getPhysicalNetworkId(), provider.getProviderName()); + if (networks != null && !networks.isEmpty()) { + throw new CloudRuntimeException("Provider is not deletable because there are active networks using this provider, please upgrade these networks to new network offerings"); + } + + User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId()); + Account callerAccount = _accountMgr.getActiveAccountById(callerUser.getAccountId()); + // shutdown the provider instances + ReservationContext context = new ReservationContextImpl(null, null, callerUser, callerAccount); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Shutting down the service provider id=" + id + " on physical network: " + provider.getPhysicalNetworkId()); + } + NetworkElement element = _networkModel.getElementImplementingProvider(provider.getProviderName()); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getProviderName() + "'"); + } + + if (element != null && element.shutdownProviderInstances(provider, context)) { + provider.setState(PhysicalNetworkServiceProvider.State.Shutdown); + } + + return _pNSPDao.remove(id); + } + + @Override + public PhysicalNetwork getPhysicalNetwork(Long physicalNetworkId) { + return _physicalNetworkDao.findById(physicalNetworkId); + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_CREATE, eventDescription = "Creating Physical Network", async = true) + public PhysicalNetwork getCreatedPhysicalNetwork(Long physicalNetworkId) { + return getPhysicalNetwork(physicalNetworkId); + } + + @Override + public PhysicalNetworkServiceProvider getPhysicalNetworkServiceProvider(Long providerId) { + return _pNSPDao.findById(providerId); + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_CREATE, eventDescription = "Creating Physical Network ServiceProvider", async = true) + public PhysicalNetworkServiceProvider getCreatedPhysicalNetworkServiceProvider(Long providerId) { + return getPhysicalNetworkServiceProvider(providerId); + } + + @Override + public long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType) { + List pNtwks = new ArrayList(); + if (trafficType != null) { + pNtwks = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); + } else { + pNtwks = _physicalNetworkDao.listByZone(zoneId); + } + + if (pNtwks.isEmpty()) { + throw new InvalidParameterValueException("Unable to find physical network in zone id=" + zoneId); + } + + if (pNtwks.size() > 1) { + if (tag == null) { + throw new InvalidParameterValueException("More than one physical networks exist in zone id=" + zoneId + " and no tags are specified in order to make a choice"); + } + + Long pNtwkId = null; + for (PhysicalNetwork pNtwk : pNtwks) { + if (pNtwk.getTags().contains(tag)) { + s_logger.debug("Found physical network id=" + pNtwk.getId() + " based on requested tags " + tag); + pNtwkId = pNtwk.getId(); + break; + } + } + if (pNtwkId == null) { + throw new InvalidParameterValueException("Unable to find physical network which match the tags " + tag); + } + return pNtwkId; + } else { + return pNtwks.get(0).getId(); + } + } + + + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_CREATE, eventDescription = "Creating Physical Network TrafficType", create = true) + public PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficTypeStr, String xenLabel, String kvmLabel, String vmwareLabel, String simulatorLabel, String vlan) { + + // verify input parameters + PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId); + if (network == null) { + throw new InvalidParameterValueException("Physical Network id=" + physicalNetworkId + "doesn't exist in the system"); + } + + Networks.TrafficType trafficType = null; + if (trafficTypeStr != null && !trafficTypeStr.isEmpty()) { + try { + trafficType = Networks.TrafficType.valueOf(trafficTypeStr); + } catch (IllegalArgumentException ex) { + throw new InvalidParameterValueException("Unable to resolve trafficType '" + trafficTypeStr + "' to a supported value"); + } + } + + if (_pNTrafficTypeDao.isTrafficTypeSupported(physicalNetworkId, trafficType)) { + throw new CloudRuntimeException("This physical network already supports the traffic type: " + trafficType); + } + // For Storage, Control, Management, Public check if the zone has any other physical network with this + // traffictype already present + // If yes, we cant add these traffics to one more physical network in the zone. + + if (TrafficType.isSystemNetwork(trafficType) || TrafficType.Public.equals(trafficType) || TrafficType.Storage.equals(trafficType)) { + if (!_physicalNetworkDao.listByZoneAndTrafficType(network.getDataCenterId(), trafficType).isEmpty()) { + throw new CloudRuntimeException("Fail to add the traffic type to physical network because Zone already has a physical network with this traffic type: " + trafficType); + } + } + + if (TrafficType.Storage.equals(trafficType)) { + List ssvms = _stnwMgr.getSSVMWithNoStorageNetwork(network.getDataCenterId()); + if (!ssvms.isEmpty()) { + StringBuilder sb = new StringBuilder( + "Cannot add " + + trafficType + + " traffic type as there are below secondary storage vm still running. Please stop them all and add Storage traffic type again, then destory them all to allow CloudStack recreate them with storage network(If you have added storage network ip range)"); + sb.append("SSVMs:"); + for (SecondaryStorageVmVO ssvm : ssvms) { + sb.append(ssvm.getInstanceName()).append(":").append(ssvm.getState()); + } + throw new CloudRuntimeException(sb.toString()); + } + } + + Transaction txn = Transaction.currentTxn(); + try { + txn.start(); + // Create the new traffic type in the database + if (xenLabel == null) { + xenLabel = getDefaultXenNetworkLabel(trafficType); + } + PhysicalNetworkTrafficTypeVO pNetworktrafficType = new PhysicalNetworkTrafficTypeVO(physicalNetworkId, trafficType, xenLabel, kvmLabel, vmwareLabel, simulatorLabel, vlan); + pNetworktrafficType = _pNTrafficTypeDao.persist(pNetworktrafficType); + + txn.commit(); + return pNetworktrafficType; + } catch (Exception ex) { + s_logger.warn("Exception: ", ex); + throw new CloudRuntimeException("Fail to add a traffic type to physical network"); + } + + } + + private String getDefaultXenNetworkLabel(TrafficType trafficType) { + String xenLabel = null; + switch (trafficType) { + case Public: + xenLabel = _configDao.getValue(Config.XenPublicNetwork.key()); + break; + case Guest: + xenLabel = _configDao.getValue(Config.XenGuestNetwork.key()); + break; + case Storage: + xenLabel = _configDao.getValue(Config.XenStorageNetwork1.key()); + break; + case Management: + xenLabel = _configDao.getValue(Config.XenPrivateNetwork.key()); + break; + case Control: + xenLabel = "cloud_link_local_network"; + break; + } + return xenLabel; + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_CREATE, eventDescription = "Creating Physical Network TrafficType", async = true) + public PhysicalNetworkTrafficType getPhysicalNetworkTrafficType(Long id) { + return _pNTrafficTypeDao.findById(id); + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_UPDATE, eventDescription = "Updating physical network TrafficType", async = true) + public PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, String vmwareLabel) { + + PhysicalNetworkTrafficTypeVO trafficType = _pNTrafficTypeDao.findById(id); + + if (trafficType == null) { + throw new InvalidParameterValueException("Traffic Type with id=" + id + "doesn't exist in the system"); + } + + if (xenLabel != null) { + if("".equals(xenLabel)){ + xenLabel = null; + } + trafficType.setXenNetworkLabel(xenLabel); + } + if (kvmLabel != null) { + if("".equals(kvmLabel)){ + kvmLabel = null; + } + trafficType.setKvmNetworkLabel(kvmLabel); + } + if (vmwareLabel != null) { + if("".equals(vmwareLabel)){ + vmwareLabel = null; + } + trafficType.setVmwareNetworkLabel(vmwareLabel); + } + _pNTrafficTypeDao.update(id, trafficType); + + return trafficType; + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_DELETE, eventDescription = "Deleting physical network TrafficType", async = true) + public boolean deletePhysicalNetworkTrafficType(Long id) { + PhysicalNetworkTrafficTypeVO trafficType = _pNTrafficTypeDao.findById(id); + + if (trafficType == null) { + throw new InvalidParameterValueException("Traffic Type with id=" + id + "doesn't exist in the system"); + } + + // check if there are any networks associated to this physical network with this traffic type + if (TrafficType.Guest.equals(trafficType.getTrafficType())) { + if (!_networksDao.listByPhysicalNetworkTrafficType(trafficType.getPhysicalNetworkId(), trafficType.getTrafficType()).isEmpty()) { + throw new CloudRuntimeException("The Traffic Type is not deletable because there are existing networks with this traffic type:" + trafficType.getTrafficType()); + } + } else if (TrafficType.Storage.equals(trafficType.getTrafficType())) { + PhysicalNetworkVO pn = _physicalNetworkDao.findById(trafficType.getPhysicalNetworkId()); + if (_stnwMgr.isAnyStorageIpInUseInZone(pn.getDataCenterId())) { + throw new CloudRuntimeException("The Traffic Type is not deletable because there are still some storage network ip addresses in use:" + trafficType.getTrafficType()); + } + } + return _pNTrafficTypeDao.remove(id); + } + + @Override + public Pair, Integer> listTrafficTypes(Long physicalNetworkId) { + PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId); + if (network == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); + ex.addProxyObject(network, physicalNetworkId, "physicalNetworkId"); + throw ex; + } + + Pair, Integer> result = _pNTrafficTypeDao.listAndCountBy(physicalNetworkId); + return new Pair, Integer>(result.first(), result.second()); + } + + + + + + @Override //TODO: duplicated in NetworkModel + public NetworkVO getExclusiveGuestNetwork(long zoneId) { + List networks = _networksDao.listBy(Account.ACCOUNT_ID_SYSTEM, zoneId, GuestType.Shared, TrafficType.Guest); + if (networks == null || networks.isEmpty()) { + throw new InvalidParameterValueException("Unable to find network with trafficType " + TrafficType.Guest + " and guestType " + GuestType.Shared + " in zone " + zoneId); + } + + if (networks.size() > 1) { + throw new InvalidParameterValueException("Found more than 1 network with trafficType " + TrafficType.Guest + " and guestType " + GuestType.Shared + " in zone " + zoneId); + + } + + return networks.get(0); + } + + protected PhysicalNetworkServiceProvider addDefaultVirtualRouterToPhysicalNetwork(long physicalNetworkId) { + + PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, Network.Provider.VirtualRouter.getName(), null, null); + // add instance of the provider + VirtualRouterElement element = (VirtualRouterElement) _networkModel.getElementImplementingProvider(Network.Provider.VirtualRouter.getName()); + if (element == null) { + throw new CloudRuntimeException("Unable to find the Network Element implementing the VirtualRouter Provider"); + } + element.addElement(nsp.getId(), VirtualRouterProviderType.VirtualRouter); + + return nsp; + } + + protected PhysicalNetworkServiceProvider addDefaultVpcVirtualRouterToPhysicalNetwork(long physicalNetworkId) { + + PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, + Network.Provider.VPCVirtualRouter.getName(), null, null); + // add instance of the provider + VpcVirtualRouterElement element = (VpcVirtualRouterElement) _networkModel.getElementImplementingProvider(Network.Provider.VPCVirtualRouter.getName()); + if (element == null) { + throw new CloudRuntimeException("Unable to find the Network Element implementing the VPCVirtualRouter Provider"); + } + element.addElement(nsp.getId(), VirtualRouterProviderType.VPCVirtualRouter); + + return nsp; + } + + protected PhysicalNetworkServiceProvider addDefaultSecurityGroupProviderToPhysicalNetwork(long physicalNetworkId) { + + PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, + Network.Provider.SecurityGroupProvider.getName(), null, null); + + return nsp; + } + + + protected boolean isNetworkSystem(Network network) { + NetworkOffering no = _networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId()); + if (no.isSystemOnly()) { + return true; + } else { + return false; + } + } + + + + private boolean getAllowSubdomainAccessGlobal() { + return _allowSubdomainNetworkAccess; + } + + + + @Override + public List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd) { + String type = cmd.getTrafficType(); + List> results = new ArrayList>(); + if (type != null) { + for (NetworkGuru guru : _networkGurus) { + if (guru.isMyTrafficType(TrafficType.getTrafficType(type))) { + results.add(new Pair(TrafficType.getTrafficType(type), guru.getName())); + break; + } + } + } else { + for (NetworkGuru guru : _networkGurus) { + TrafficType[] allTypes = guru.getSupportedTrafficType(); + for (TrafficType t : allTypes) { + results.add(new Pair(t, guru.getName())); + } + } + } + + return results; + } + + + @Override + @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "associating Ip", async = true) + public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, + ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException { + + Network network = _networksDao.findById(networkId); + if (network == null) { + throw new InvalidParameterValueException("Invalid network id is given"); + } + + if (network.getVpcId() != null) { + throw new InvalidParameterValueException("Can't assign ip to the network directly when network belongs" + + " to VPC.Specify vpcId to associate ip address to VPC"); + } + return _networkMgr.associateIPToGuestNetwork(ipId, networkId, true); + + } + + + @Override @DB + public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, + String vlan, String startIp, String endIp, String gateway, String netmask, long networkOwnerId, Long vpcId) + throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { + + Account owner = _accountMgr.getAccount(networkOwnerId); + + // Get system network offeirng + NetworkOfferingVO ntwkOff = findSystemNetworkOffering(NetworkOffering.SystemPrivateGatewayNetworkOffering); + + // Validate physical network + PhysicalNetwork pNtwk = _physicalNetworkDao.findById(physicalNetworkId); + if (pNtwk == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find a physical network" + + " having the given id"); + ex.addProxyObject("physical_network", physicalNetworkId, "physicalNetworkId"); + throw ex; + } + + // VALIDATE IP INFO + // if end ip is not specified, default it to startIp + if (!NetUtils.isValidIp(startIp)) { + throw new InvalidParameterValueException("Invalid format for the startIp parameter"); + } + if (endIp == null) { + endIp = startIp; + } else if (!NetUtils.isValidIp(endIp)) { + throw new InvalidParameterValueException("Invalid format for the endIp parameter"); + } + + String cidr = null; + if (!NetUtils.isValidIp(gateway)) { + throw new InvalidParameterValueException("Invalid gateway"); + } + if (!NetUtils.isValidNetmask(netmask)) { + throw new InvalidParameterValueException("Invalid netmask"); + } + + cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask); + + + Transaction txn = Transaction.currentTxn(); + txn.start(); + + //lock datacenter as we need to get mac address seq from there + DataCenterVO dc = _dcDao.lockRow(pNtwk.getDataCenterId(), true); + + //check if we need to create guest network + Network privateNetwork = _networksDao.getPrivateNetwork(BroadcastDomainType.Vlan.toUri(vlan).toString(), cidr, + networkOwnerId, pNtwk.getDataCenterId()); + if (privateNetwork == null) { + //create Guest network + privateNetwork = _networkMgr.createGuestNetwork(ntwkOff.getId(), networkName, displayText, gateway, cidr, vlan, + null, owner, null, pNtwk, pNtwk.getDataCenterId(), ACLType.Account, null, null); + s_logger.debug("Created private network " + privateNetwork); + } else { + s_logger.debug("Private network already exists: " + privateNetwork); + } + + //add entry to private_ip_address table + PrivateIpVO privateIp = _privateIpDao.findByIpAndSourceNetworkId(privateNetwork.getId(), startIp); + if (privateIp != null) { + throw new InvalidParameterValueException("Private ip address " + startIp + " already used for private gateway" + + " in zone " + _configMgr.getZone(pNtwk.getDataCenterId()).getName()); + } + + Long mac = dc.getMacAddress(); + Long nextMac = mac + 1; + dc.setMacAddress(nextMac); + + privateIp = new PrivateIpVO(startIp, privateNetwork.getId(), nextMac, vpcId); + _privateIpDao.persist(privateIp); + + _dcDao.update(dc.getId(), dc); + + txn.commit(); + s_logger.debug("Private network " + privateNetwork + " is created"); + + return privateNetwork; + } + + + private NetworkOfferingVO findSystemNetworkOffering(String offeringName) { + List allOfferings = _networkOfferingDao.listSystemNetworkOfferings(); + for (NetworkOfferingVO offer: allOfferings){ + if (offer.getName().equals(offeringName)) { + return offer; + } + } + return null; + } + + + @Override + public Network getNetwork(String networkUuid) { + return _networksDao.findByUuid(networkUuid); + } + +} diff --git a/server/src/com/cloud/network/element/CloudZonesNetworkElement.java b/server/src/com/cloud/network/element/CloudZonesNetworkElement.java index cc3546084de..06b74c7d3fb 100644 --- a/server/src/com/cloud/network/element/CloudZonesNetworkElement.java +++ b/server/src/com/cloud/network/element/CloudZonesNetworkElement.java @@ -44,7 +44,7 @@ import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.dao.NetworkDao; @@ -71,7 +71,7 @@ public class CloudZonesNetworkElement extends AdapterBase implements NetworkElem @Inject NetworkDao _networkConfigDao; @Inject - NetworkManager _networkMgr; + NetworkModel _networkMgr; @Inject UserVmManager _userVmMgr; @Inject diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 8a69e56bd2c..56a52e74f99 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -27,6 +27,7 @@ import javax.inject.Inject; import com.cloud.utils.PropertiesUtil; import org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd; +import org.apache.cloudstack.api.command.admin.router.CreateVirtualRouterElementCmd; import org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd; import org.apache.log4j.Logger; @@ -45,7 +46,7 @@ import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PublicIpAddress; @@ -81,7 +82,6 @@ import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; -import com.cloud.vm.UserVmManager; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachineProfile; @@ -89,7 +89,10 @@ import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.UserVmDao; import com.google.gson.Gson; -@Local(value = NetworkElement.class) +@Local(value = {NetworkElement.class, FirewallServiceProvider.class, + DhcpServiceProvider.class, UserDataServiceProvider.class, + StaticNatServiceProvider.class, LoadBalancingServiceProvider.class, + PortForwardingServiceProvider.class, IpDeployer.class, RemoteAccessVPNServiceProvider.class} ) public class VirtualRouterElement extends AdapterBase implements VirtualRouterElementService, DhcpServiceProvider, UserDataServiceProvider, SourceNatServiceProvider, StaticNatServiceProvider, FirewallServiceProvider, LoadBalancingServiceProvider, PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer { @@ -100,7 +103,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl @Inject NetworkDao _networksDao; @Inject - NetworkManager _networkMgr; + NetworkModel _networkMgr; @Inject LoadBalancingRulesManager _lbMgr; @Inject @@ -111,8 +114,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl ConfigurationManager _configMgr; @Inject RulesManager _rulesMgr; - @Inject - UserVmManager _userVmMgr; + @Inject UserVmDao _userVmDao; @Inject @@ -681,9 +683,12 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "virtualrouter_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(CreateVirtualRouterElementCmd.class); + cmdList.add(ConfigureVirtualRouterElementCmd.class); + cmdList.add(ListVirtualRouterElementsCmd.class); + return cmdList; } @Override diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java index 60924a2a6ab..27b1a2a7a9a 100644 --- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java @@ -37,7 +37,6 @@ import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; -import com.cloud.network.NetworkService; import com.cloud.network.PublicIpAddress; import com.cloud.network.Site2SiteVpnConnection; import com.cloud.network.Site2SiteVpnGateway; @@ -62,12 +61,14 @@ import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.VirtualMachineProfile; -@Local(value = NetworkElement.class) +@Local(value = {NetworkElement.class, FirewallServiceProvider.class, + DhcpServiceProvider.class, UserDataServiceProvider.class, + StaticNatServiceProvider.class, LoadBalancingServiceProvider.class, + PortForwardingServiceProvider.class, IpDeployer.class, VpcProvider.class, + Site2SiteVpnServiceProvider.class, NetworkACLServiceProvider.class}) public class VpcVirtualRouterElement extends VirtualRouterElement implements VpcProvider, Site2SiteVpnServiceProvider, NetworkACLServiceProvider{ private static final Logger s_logger = Logger.getLogger(VpcVirtualRouterElement.class); @Inject - NetworkService _ntwkService; - @Inject VpcManager _vpcMgr; @Inject VpcVirtualNetworkApplianceManager _vpcRouterMgr; @@ -75,16 +76,16 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc Site2SiteVpnGatewayDao _vpnGatewayDao; @Inject IPAddressDao _ipAddressDao; - + private static final Map> capabilities = setCapabilities(); - + @Override protected boolean canHandle(Network network, Service service) { Long physicalNetworkId = _networkMgr.getPhysicalNetworkId(network); if (physicalNetworkId == null) { return false; } - + if (network.getVpcId() == null) { return false; } @@ -108,11 +109,11 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc return true; } - + @Override public boolean implementVpc(Vpc vpc, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { - + Map params = new HashMap(1); params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true); @@ -120,7 +121,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc return true; } - + @Override public boolean shutdownVpc(Vpc vpc, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { List routers = _routerDao.listByVpcId(vpc.getId()); @@ -133,67 +134,67 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } return result; } - + @Override public boolean implement(Network network, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws ResourceUnavailableException, ConcurrentOperationException, InsufficientCapacityException { - - Long vpcId = network.getVpcId(); - if (vpcId == null) { - s_logger.warn("Network " + network + " is not associated with any VPC"); - return false; - } - - Vpc vpc = _vpcMgr.getActiveVpc(vpcId); - if (vpc == null) { - s_logger.warn("Unable to find Enabled VPC by id " + vpcId); - return false; - } - - Map params = new HashMap(1); - params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true); - - List routers = _vpcRouterMgr.deployVirtualRouterInVpc(vpc, dest, _accountMgr.getAccount(vpc.getAccountId()), params); - if ((routers == null) || (routers.size() == 0)) { - throw new ResourceUnavailableException("Can't find at least one running router!", - DataCenter.class, network.getDataCenterId()); - } - - if (routers.size() > 1) { - throw new CloudRuntimeException("Found more than one router in vpc " + vpc); - } - - DomainRouterVO router = routers.get(0); - //Add router to guest network if needed - if (!_networkMgr.isVmPartOfNetwork(router.getId(), network.getId())) { - if (!_vpcRouterMgr.addVpcRouterToGuestNetwork(router, network, false)) { - throw new CloudRuntimeException("Failed to add VPC router " + router + " to guest network " + network); - } else { - s_logger.debug("Successfully added VPC router " + router + " to guest network " + network); - } - } - - return true; - } - - @Override - public boolean prepare(Network network, NicProfile nic, VirtualMachineProfile vm, - DeployDestination dest, ReservationContext context) - throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - + Long vpcId = network.getVpcId(); if (vpcId == null) { s_logger.warn("Network " + network + " is not associated with any VPC"); return false; } - + Vpc vpc = _vpcMgr.getActiveVpc(vpcId); if (vpc == null) { s_logger.warn("Unable to find Enabled VPC by id " + vpcId); return false; } - + + Map params = new HashMap(1); + params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true); + + List routers = _vpcRouterMgr.deployVirtualRouterInVpc(vpc, dest, _accountMgr.getAccount(vpc.getAccountId()), params); + if ((routers == null) || (routers.size() == 0)) { + throw new ResourceUnavailableException("Can't find at least one running router!", + DataCenter.class, network.getDataCenterId()); + } + + if (routers.size() > 1) { + throw new CloudRuntimeException("Found more than one router in vpc " + vpc); + } + + DomainRouterVO router = routers.get(0); + //Add router to guest network if needed + if (!_networkMgr.isVmPartOfNetwork(router.getId(), network.getId())) { + if (!_vpcRouterMgr.addVpcRouterToGuestNetwork(router, network, false)) { + throw new CloudRuntimeException("Failed to add VPC router " + router + " to guest network " + network); + } else { + s_logger.debug("Successfully added VPC router " + router + " to guest network " + network); + } + } + + return true; + } + + @Override + public boolean prepare(Network network, NicProfile nic, VirtualMachineProfile vm, + DeployDestination dest, ReservationContext context) + throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + + Long vpcId = network.getVpcId(); + if (vpcId == null) { + s_logger.warn("Network " + network + " is not associated with any VPC"); + return false; + } + + Vpc vpc = _vpcMgr.getActiveVpc(vpcId); + if (vpc == null) { + s_logger.warn("Unable to find Enabled VPC by id " + vpcId); + return false; + } + if (vm.getType() == Type.User) { Map params = new HashMap(1); params.put(VirtualMachineProfile.Param.ReProgramGuestNetworks, true); @@ -203,11 +204,11 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc throw new ResourceUnavailableException("Can't find at least one running router!", DataCenter.class, network.getDataCenterId()); } - + if (routers.size() > 1) { throw new CloudRuntimeException("Found more than one router in vpc " + vpc); } - + DomainRouterVO router = routers.get(0); //Add router to guest network if needed if (!_networkMgr.isVmPartOfNetwork(router.getId(), network.getId())) { @@ -218,10 +219,10 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } } } - + return true; } - + @Override public boolean shutdown(Network network, ReservationContext context, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException { @@ -231,11 +232,11 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc s_logger.debug("Network " + network + " doesn't belong to any vpc, so skipping unplug nic part"); return success; } - + List routers = _routerDao.listByVpcId(vpcId); for (VirtualRouter router : routers) { //1) Check if router is already a part of the network - if (!_ntwkService.isVmPartOfNetwork(router.getId(), network.getId())) { + if (!_networkMgr.isVmPartOfNetwork(router.getId(), network.getId())) { s_logger.debug("Router " + router + " is not a part the network " + network); continue; } @@ -247,7 +248,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc s_logger.debug("Successfully unplugged nic in network " + network + " for virtual router " + router); } } - + return success; } @@ -259,11 +260,11 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc s_logger.debug("Network " + config + " doesn't belong to any vpc, so skipping unplug nic part"); return success; } - + List routers = _routerDao.listByVpcId(vpcId); for (VirtualRouter router : routers) { //1) Check if router is already a part of the network - if (!_ntwkService.isVmPartOfNetwork(router.getId(), config.getId())) { + if (!_networkMgr.isVmPartOfNetwork(router.getId(), config.getId())) { s_logger.debug("Router " + router + " is not a part the network " + config); continue; } @@ -275,91 +276,91 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc s_logger.debug("Successfully unplugged nic in network " + config + " for virtual router " + router); } } - + return success; } - + @Override public Provider getProvider() { return Provider.VPCVirtualRouter; } - + private static Map> setCapabilities() { Map> capabilities = new HashMap>(); capabilities.putAll(VirtualRouterElement.capabilities); - + Map sourceNatCapabilities = new HashMap(); sourceNatCapabilities.putAll(capabilities.get(Service.SourceNat)); sourceNatCapabilities.put(Capability.RedundantRouter, "false"); capabilities.put(Service.SourceNat, sourceNatCapabilities); - + Map vpnCapabilities = new HashMap(); vpnCapabilities.putAll(capabilities.get(Service.Vpn)); vpnCapabilities.put(Capability.VpnTypes, "s2svpn"); capabilities.put(Service.Vpn, vpnCapabilities); - + //remove firewall capability capabilities.remove(Service.Firewall); - + //add network ACL capability Map networkACLCapabilities = new HashMap(); networkACLCapabilities.put(Capability.SupportedProtocols, "tcp,udp,icmp"); capabilities.put(Service.NetworkACL, networkACLCapabilities); - + return capabilities; } - + @Override public Map> getCapabilities() { return capabilities; } - + @Override public boolean createPrivateGateway(PrivateGateway gateway) throws ConcurrentOperationException, ResourceUnavailableException { if (gateway.getType() != VpcGateway.Type.Private) { s_logger.warn("Type of vpc gateway is not " + VpcGateway.Type.Private); return false; } - + List routers = _vpcMgr.getVpcRouters(gateway.getVpcId()); if (routers == null || routers.isEmpty()) { s_logger.debug(this.getName() + " element doesn't need to create Private gateway on the backend; VPC virtual " + "router doesn't exist in the vpc id=" + gateway.getVpcId()); return true; } - + if (routers.size() > 1) { throw new CloudRuntimeException("Found more than one router in vpc " + gateway.getVpcId()); } - + VirtualRouter router = routers.get(0); - + return _vpcRouterMgr.setupPrivateGateway(gateway, router); } - + @Override public boolean deletePrivateGateway(PrivateGateway gateway) throws ConcurrentOperationException, ResourceUnavailableException { if (gateway.getType() != VpcGateway.Type.Private) { s_logger.warn("Type of vpc gateway is not " + VpcGateway.Type.Private); return false; } - + List routers = _vpcMgr.getVpcRouters(gateway.getVpcId()); if (routers == null || routers.isEmpty()) { s_logger.debug(this.getName() + " element doesn't need to delete Private gateway on the backend; VPC virtual " + "router doesn't exist in the vpc id=" + gateway.getVpcId()); return true; } - + if (routers.size() > 1) { throw new CloudRuntimeException("Found more than one router in vpc " + gateway.getVpcId()); } - + VirtualRouter router = routers.get(0); - + return _vpcRouterMgr.destroyPrivateGateway(gateway, router); } - + @Override protected List getRouters(Network network, DeployDestination dest) { return _vpcMgr.getVpcRouters(network.getVpcId()); @@ -388,7 +389,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc return false; } } - + @Override public boolean applyNetworkACLs(Network config, List rules) throws ResourceUnavailableException { if (canHandle(config, Service.NetworkACL)) { @@ -408,7 +409,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc return true; } } - + @Override protected VirtualRouterProviderType getVirtualRouterProvider() { return VirtualRouterProviderType.VPCVirtualRouter; @@ -431,6 +432,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc } } + @Override public boolean startSite2SiteVpn(Site2SiteVpnConnection conn) throws ResourceUnavailableException { Site2SiteVpnGateway vpnGw = _vpnGatewayDao.findById(conn.getVpnGatewayId()); IpAddress ip = _ipAddressDao.findById(vpnGw.getAddrId()); @@ -440,10 +442,10 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc s_logger.error("try to start site 2 site vpn on unsupported network element?"); return false; } - + Long vpcId = ip.getVpcId(); Vpc vpc = _vpcMgr.getVpc(vpcId); - + if (!_vpcMgr.vpcProviderEnabledInZone(vpc.getZoneId())) { throw new ResourceUnavailableException("VPC provider is not enabled in zone " + vpc.getZoneId(), DataCenter.class, vpc.getZoneId()); @@ -468,10 +470,10 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc s_logger.error("try to stop site 2 site vpn on unsupported network element?"); return false; } - + Long vpcId = ip.getVpcId(); Vpc vpc = _vpcMgr.getVpc(vpcId); - + if (!_vpcMgr.vpcProviderEnabledInZone(vpc.getZoneId())) { throw new ResourceUnavailableException("VPC provider is not enabled in zone " + vpc.getZoneId(), DataCenter.class, vpc.getZoneId()); diff --git a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java index 6193d1117ff..c3fc03ba424 100644 --- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java +++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java @@ -48,16 +48,24 @@ import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; +import com.cloud.network.NetworkRuleApplier; import com.cloud.network.dao.FirewallRulesCidrsDao; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.element.FirewallServiceProvider; +import com.cloud.network.element.NetworkACLServiceProvider; +import com.cloud.network.element.PortForwardingServiceProvider; +import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.rules.FirewallManager; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.FirewallRuleType; import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.FirewallRule.State; import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.PortForwardingRuleVO; +import com.cloud.network.rules.StaticNat; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.network.vpc.VpcManager; import com.cloud.projects.Project.ListProjectResourcesCriteria; @@ -85,7 +93,7 @@ import com.cloud.vm.dao.UserVmDao; @Component @Local(value = { FirewallService.class, FirewallManager.class}) -public class FirewallManagerImpl implements FirewallService, FirewallManager, Manager { +public class FirewallManagerImpl implements FirewallService, FirewallManager, NetworkRuleApplier, Manager { private static final Logger s_logger = Logger.getLogger(FirewallManagerImpl.class); String _name; @@ -104,6 +112,8 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma @Inject NetworkManager _networkMgr; @Inject + NetworkModel _networkModel; + @Inject UsageEventDao _usageEventDao; @Inject ConfigurationDao _configDao; @@ -117,6 +127,13 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma ResourceTagDao _resourceTagDao; @Inject VpcManager _vpcMgr; + @Inject List _firewallElements; + + @Inject List _pfElements; + + @Inject List _staticNatElements; + + @Inject List _networkAclElements; private boolean _elbEnabled = false; @@ -140,6 +157,7 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma _name = name; String elbEnabledString = _configDao.getValue(Config.ElasticLoadBalancerEnabled.key()); _elbEnabled = Boolean.parseBoolean(elbEnabledString); + s_logger.info("Firewall provider list is " + _firewallElements.iterator().next()); return true; } @@ -158,7 +176,7 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma public FirewallRule createFirewallRule(long ipAddrId, Account caller, String xId, Integer portStart, Integer portEnd, String protocol, List sourceCidrList, Integer icmpCode, Integer icmpType, Long relatedRuleId, FirewallRule.FirewallRuleType type, long networkId) throws NetworkRuleConflictException { - + IPAddressVO ipAddress = _ipAddressDao.findById(ipAddrId); // Validate ip address if (ipAddress == null && type == FirewallRule.FirewallRuleType.User) { @@ -166,7 +184,7 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma " doesn't exist in the system"); } - _networkMgr.checkIpForService(ipAddress, Service.Firewall, null); + _networkModel.checkIpForService(ipAddress, Service.Firewall, null); validateFirewallRule(caller, ipAddress, portStart, portEnd, protocol, Purpose.Firewall, type); @@ -241,16 +259,16 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma if (tags != null && !tags.isEmpty()) { - SearchBuilder tagSearch = _resourceTagDao.createSearchBuilder(); - for (int count=0; count < tags.size(); count++) { - tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ); - tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ); - tagSearch.cp(); + SearchBuilder tagSearch = _resourceTagDao.createSearchBuilder(); + for (int count=0; count < tags.size(); count++) { + tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ); + tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ); + tagSearch.cp(); + } + tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ); + sb.groupBy(sb.entity().getId()); + sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER); } - tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ); - sb.groupBy(sb.entity().getId()); - sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER); - } SearchCriteria sc = sb.create(); _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); @@ -284,7 +302,7 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma List rules = _firewallDao.listByIpAndPurposeAndNotRevoked(newRule.getSourceIpAddressId(), null); assert (rules.size() >= 1) : "For network rules, we now always first persist the rule and then check for " + - "network conflicts so we should at least have one rule at this point."; + "network conflicts so we should at least have one rule at this point."; for (FirewallRuleVO rule : rules) { if (rule.getId() == newRule.getId()) { @@ -293,7 +311,7 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma boolean oneOfRulesIsFirewall = ((rule.getPurpose() == Purpose.Firewall || newRule.getPurpose() == Purpose.Firewall) && ((newRule.getPurpose() != rule.getPurpose()) || (!newRule.getProtocol() - .equalsIgnoreCase(rule.getProtocol())))); + .equalsIgnoreCase(rule.getProtocol())))); // if both rules are firewall and their cidrs are different, we can skip port ranges verification boolean bothRulesFirewall = (rule.getPurpose() == newRule.getPurpose() && rule.getPurpose() == Purpose.Firewall); @@ -345,12 +363,12 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma } else if (!oneOfRulesIsFirewall && !(bothRulesFirewall && !duplicatedCidrs) && ((rule.getSourcePortStart().intValue() <= newRule.getSourcePortStart().intValue() && rule.getSourcePortEnd().intValue() >= newRule.getSourcePortStart().intValue()) - || (rule.getSourcePortStart().intValue() <= newRule.getSourcePortEnd().intValue() - && rule.getSourcePortEnd().intValue() >= newRule.getSourcePortEnd().intValue()) - || (newRule.getSourcePortStart().intValue() <= rule.getSourcePortStart().intValue() - && newRule.getSourcePortEnd().intValue() >= rule.getSourcePortStart().intValue()) - || (newRule.getSourcePortStart().intValue() <= rule.getSourcePortEnd().intValue() - && newRule.getSourcePortEnd().intValue() >= rule.getSourcePortEnd().intValue()))) { + || (rule.getSourcePortStart().intValue() <= newRule.getSourcePortEnd().intValue() + && rule.getSourcePortEnd().intValue() >= newRule.getSourcePortEnd().intValue()) + || (newRule.getSourcePortStart().intValue() <= rule.getSourcePortStart().intValue() + && newRule.getSourcePortEnd().intValue() >= rule.getSourcePortStart().intValue()) + || (newRule.getSourcePortStart().intValue() <= rule.getSourcePortEnd().intValue() + && newRule.getSourcePortEnd().intValue() >= rule.getSourcePortEnd().intValue()))) { // we allow port forwarding rules with the same parameters but different protocols boolean allowPf = (rule.getPurpose() == Purpose.PortForwarding && newRule.getPurpose() == Purpose.PortForwarding @@ -401,7 +419,7 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma networkId = ipAddress.getAssociatedWithNetworkId(); } - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); assert network != null : "Can't create port forwarding rule as network associated with public ip address is null?"; // Verify that the network guru supports the protocol specified @@ -409,10 +427,10 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma if (purpose == Purpose.LoadBalancing) { if (!_elbEnabled) { - caps = _networkMgr.getNetworkServiceCapabilities(network.getId(), Service.Lb); + caps = _networkModel.getNetworkServiceCapabilities(network.getId(), Service.Lb); } } else if (purpose == Purpose.PortForwarding) { - caps = _networkMgr.getNetworkServiceCapabilities(network.getId(), Service.PortForwarding); + caps = _networkModel.getNetworkServiceCapabilities(network.getId(), Service.PortForwarding); } if (caps != null) { @@ -429,7 +447,12 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma public boolean applyRules(List rules, boolean continueOnError, boolean updateRulesInDB) throws ResourceUnavailableException { boolean success = true; - if (!_networkMgr.applyRules(rules, continueOnError)) { + if (rules == null || rules.size() == 0) { + s_logger.debug("There are no rules to forward to the network elements"); + return true; + } + Purpose purpose = rules.get(0).getPurpose(); + if (!_networkMgr.applyRules(rules, purpose, this, continueOnError)) { s_logger.warn("Rules are not completely applied"); return false; } else { @@ -447,7 +470,7 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma //if the rule is the last one for the ip address assigned to VPC, unassign it from the network IpAddress ip = _ipAddressDao.findById(rule.getSourceIpAddressId()); _vpcMgr.unassignIPFromVpcNetwork(ip.getId(), rule.getNetworkId()); - } + } } } else if (rule.getState() == FirewallRule.State.Add) { FirewallRuleVO ruleVO = _firewallDao.findById(rule.getId()); @@ -461,6 +484,46 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma return success; } + @Override + public boolean applyRules(Network network, Purpose purpose, List rules) + throws ResourceUnavailableException { + boolean handled = false; + switch (purpose){ + case Firewall: + for (FirewallServiceProvider fwElement: _firewallElements) { + handled = fwElement.applyFWRules(network, rules); + if (handled) + break; + } + case PortForwarding: + for (PortForwardingServiceProvider element: _pfElements) { + handled = element.applyPFRules(network, (List) rules); + if (handled) + break; + } + break; + case StaticNat: + for (StaticNatServiceProvider element: _staticNatElements) { + handled = element.applyStaticNats(network, (List) rules); + if (handled) + break; + } + break; + case NetworkACL: + for (NetworkACLServiceProvider element: _networkAclElements) { + handled = element.applyNetworkACLs(network, rules); + if (handled) + break; + } + break; + default: + assert(false): "Unexpected fall through in applying rules to the network elements"; + s_logger.error("FirewallManager cannot process rules of type " + purpose); + throw new CloudRuntimeException("FirewallManager cannot process rules of type " + purpose); + } + return handled; + } + @Override public void removeRule(FirewallRule rule) { @@ -607,7 +670,7 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma @Override public FirewallRule createRuleForAllCidrs(long ipAddrId, Account caller, Integer startPort, Integer endPort, String protocol, Integer icmpCode, Integer icmpType, Long relatedRuleId, long networkId) - throws NetworkRuleConflictException { + throws NetworkRuleConflictException { // If firwallRule for this port range already exists, return it List rules = _firewallDao.listByIpPurposeAndProtocolAndNotRevoked(ipAddrId, startPort, endPort, diff --git a/server/src/com/cloud/network/guru/ControlNetworkGuru.java b/server/src/com/cloud/network/guru/ControlNetworkGuru.java index 3132ffd4b83..d095e349324 100755 --- a/server/src/com/cloud/network/guru/ControlNetworkGuru.java +++ b/server/src/com/cloud/network/guru/ControlNetworkGuru.java @@ -36,7 +36,7 @@ import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientVirtualNetworkCapcityException; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.Network; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.AddressFormat; @@ -45,7 +45,6 @@ import com.cloud.network.Networks.Mode; import com.cloud.network.Networks.TrafficType; import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; - import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; import com.cloud.vm.Nic; @@ -58,35 +57,35 @@ import com.cloud.vm.VirtualMachineProfile; public class ControlNetworkGuru extends PodBasedNetworkGuru implements NetworkGuru { private static final Logger s_logger = Logger.getLogger(ControlNetworkGuru.class); @Inject DataCenterDao _dcDao; - @Inject NetworkManager _networkMgr; @Inject ConfigurationDao _configDao; + @Inject NetworkModel _networkMgr; String _cidr; String _gateway; - + private static final TrafficType[] _trafficTypes = {TrafficType.Control}; - + @Override public boolean isMyTrafficType(TrafficType type) { - for (TrafficType t : _trafficTypes) { - if (t == type) { - return true; - } - } - return false; + for (TrafficType t : _trafficTypes) { + if (t == type) { + return true; + } + } + return false; } - + @Override public TrafficType[] getSupportedTrafficType() { - return _trafficTypes; + return _trafficTypes; } - + protected boolean canHandle(NetworkOffering offering) { - if (offering.isSystemOnly() && isMyTrafficType(offering.getTrafficType())) { - return true; - } else { - s_logger.trace("We only care about System only Control network"); - return false; - } + if (offering.isSystemOnly() && isMyTrafficType(offering.getTrafficType())) { + return true; + } else { + s_logger.trace("We only care about System only Control network"); + return false; + } } @Override @@ -94,67 +93,67 @@ public class ControlNetworkGuru extends PodBasedNetworkGuru implements NetworkGu if (!canHandle(offering)) { return null; } - + NetworkVO config = new NetworkVO(offering.getTrafficType(), Mode.Static, BroadcastDomainType.LinkLocal, offering.getId(), Network.State.Setup, plan.getDataCenterId(), plan.getPhysicalNetworkId()); config.setCidr(_cidr); config.setGateway(_gateway); - + return config; } - + protected ControlNetworkGuru() { super(); } - + @Override public NicProfile allocate(Network config, NicProfile nic, VirtualMachineProfile vm) throws InsufficientVirtualNetworkCapcityException, - InsufficientAddressCapacityException { - + InsufficientAddressCapacityException { + if(vm.getHypervisorType() == HypervisorType.VMware && vm.getType() != VirtualMachine.Type.DomainRouter) { - NicProfile nicProf = new NicProfile(Nic.ReservationStrategy.Create, null, null, null, null); + NicProfile nicProf = new NicProfile(Nic.ReservationStrategy.Create, null, null, null, null); String mac = _networkMgr.getNextAvailableMacAddressInNetwork(config.getId()); nicProf.setMacAddress(mac); return nicProf; } - + if (nic != null) { throw new CloudRuntimeException("Does not support nic specification at this time: " + nic); } - + return new NicProfile(Nic.ReservationStrategy.Start, null, null, null, null); } - + @Override public void deallocate(Network config, NicProfile nic, VirtualMachineProfile vm) { } @Override public void reserve(NicProfile nic, Network config, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapcityException, - InsufficientAddressCapacityException { + InsufficientAddressCapacityException { assert nic.getTrafficType() == TrafficType.Control; if (dest.getHost().getHypervisorType() == HypervisorType.VMware && vm.getType() == VirtualMachine.Type.DomainRouter) { - if(dest.getDataCenter().getNetworkType() != NetworkType.Basic) { - super.reserve(nic, config, vm, dest, context); - - String mac = _networkMgr.getNextAvailableMacAddressInNetwork(config.getId()); - nic.setMacAddress(mac); - return; - } else { - // in basic mode and in VMware case, control network will be shared with guest network - String mac = _networkMgr.getNextAvailableMacAddressInNetwork(config.getId()); - nic.setMacAddress(mac); - nic.setIp4Address("0.0.0.0"); - nic.setNetmask("0.0.0.0"); - nic.setFormat(AddressFormat.Ip4); - nic.setGateway("0.0.0.0"); - return; - } + if(dest.getDataCenter().getNetworkType() != NetworkType.Basic) { + super.reserve(nic, config, vm, dest, context); + + String mac = _networkMgr.getNextAvailableMacAddressInNetwork(config.getId()); + nic.setMacAddress(mac); + return; + } else { + // in basic mode and in VMware case, control network will be shared with guest network + String mac = _networkMgr.getNextAvailableMacAddressInNetwork(config.getId()); + nic.setMacAddress(mac); + nic.setIp4Address("0.0.0.0"); + nic.setNetmask("0.0.0.0"); + nic.setFormat(AddressFormat.Ip4); + nic.setGateway("0.0.0.0"); + return; + } } - + String ip = _dcDao.allocateLinkLocalIpAddress(dest.getDataCenter().getId(), dest.getPod().getId(), nic.getId(), context.getReservationId()); if (ip == null) { - throw new InsufficientAddressCapacityException("Insufficient link local address capacity", DataCenter.class, dest.getDataCenter().getId()); + throw new InsufficientAddressCapacityException("Insufficient link local address capacity", DataCenter.class, dest.getDataCenter().getId()); } nic.setIp4Address(ip); nic.setMacAddress(NetUtils.long2Mac(NetUtils.ip2Long(ip) | (14l << 40))); @@ -168,30 +167,30 @@ public class ControlNetworkGuru extends PodBasedNetworkGuru implements NetworkGu assert nic.getTrafficType() == TrafficType.Control; if (vm.getHypervisorType() == HypervisorType.VMware && vm.getType() == VirtualMachine.Type.DomainRouter) { - long dcId = vm.getVirtualMachine().getDataCenterIdToDeployIn(); - DataCenterVO dcVo = _dcDao.findById(dcId); - if(dcVo.getNetworkType() != NetworkType.Basic) { - super.release(nic, vm, reservationId); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Released nic: " + nic); - } - return true; - } else { + long dcId = vm.getVirtualMachine().getDataCenterIdToDeployIn(); + DataCenterVO dcVo = _dcDao.findById(dcId); + if(dcVo.getNetworkType() != NetworkType.Basic) { + super.release(nic, vm, reservationId); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Released nic: " + nic); + } + return true; + } else { nic.deallocate(); if (s_logger.isDebugEnabled()) { s_logger.debug("Released nic: " + nic); } - return true; - } + return true; + } } - + _dcDao.releaseLinkLocalIpAddress(nic.getId(), reservationId); - + nic.deallocate(); if (s_logger.isDebugEnabled()) { s_logger.debug("Released nic: " + nic); } - + return true; } @@ -200,30 +199,30 @@ public class ControlNetworkGuru extends PodBasedNetworkGuru implements NetworkGu assert config.getTrafficType() == TrafficType.Control : "Why are you sending this configuration to me " + config; return config; } - + @Override public void shutdown(NetworkProfile config, NetworkOffering offering) { assert false : "Destroying a link local...Either you're out of your mind or something has changed."; } - + @Override public boolean configure(String name, Map params) throws ConfigurationException { super.configure(name, params); - + Map dbParams = _configDao.getConfiguration(params); - + _cidr = dbParams.get(Config.ControlCidr); if (_cidr == null) { _cidr = "169.254.0.0/16"; } - + _gateway = dbParams.get(Config.ControlGateway); if (_gateway == null) { _gateway = NetUtils.getLinkLocalGateway(); } - + s_logger.info("Control network setup: cidr=" + _cidr + "; gateway = " + _gateway); - + return true; } diff --git a/server/src/com/cloud/network/guru/DirectNetworkGuru.java b/server/src/com/cloud/network/guru/DirectNetworkGuru.java index f49895714bd..209031bcd6e 100755 --- a/server/src/com/cloud/network/guru/DirectNetworkGuru.java +++ b/server/src/com/cloud/network/guru/DirectNetworkGuru.java @@ -37,6 +37,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Service; import com.cloud.network.Network.State; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.BroadcastDomainType; @@ -64,6 +65,8 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru { @Inject VlanDao _vlanDao; @Inject + NetworkModel _networkModel; + @Inject NetworkManager _networkMgr; @Inject IPAddressDao _ipAddressDao; @@ -132,7 +135,7 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru { } } - boolean isSecurityGroupEnabled = _networkMgr.areServicesSupportedByNetworkOffering(offering.getId(), Service.SecurityGroup); + boolean isSecurityGroupEnabled = _networkModel.areServicesSupportedByNetworkOffering(offering.getId(), Service.SecurityGroup); if (isSecurityGroupEnabled) { config.setName("SecurityGroupEnabledNetwork"); config.setDisplayText("SecurityGroupEnabledNetwork"); diff --git a/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java b/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java index 6c305ec8a6a..362f4fe8ae4 100755 --- a/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java +++ b/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java @@ -109,7 +109,7 @@ public class DirectPodBasedNetworkGuru extends DirectNetworkGuru { } if (rsStrategy == ReservationStrategy.Create) { - String mac = _networkMgr.getNextAvailableMacAddressInNetwork(network.getId()); + String mac = _networkModel.getNextAvailableMacAddressInNetwork(network.getId()); nic.setMacAddress(mac); } return nic; diff --git a/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java b/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java index 8188eb97df2..a883ef0f26b 100644 --- a/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java +++ b/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java @@ -103,7 +103,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { NetworkVO config = (NetworkVO) super.design(offering, plan, userSpecified, owner); if (config == null) { return null; - } else if (_networkMgr.networkIsConfiguredForExternalNetworking(plan.getDataCenterId(), config.getId())) { + } else if (_networkModel.networkIsConfiguredForExternalNetworking(plan.getDataCenterId(), config.getId())) { /* In order to revert userSpecified network setup */ config.setState(State.Allocated); } @@ -119,7 +119,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { return null; } - if (!_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { + if (!_networkModel.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { return super.implement(config, offering, dest, context); } @@ -192,7 +192,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { public NicProfile allocate(Network config, NicProfile nic, VirtualMachineProfile vm) throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException { - if (_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId()) && nic != null && nic.getRequestedIp() != null) { + if (_networkModel.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId()) && nic != null && nic.getRequestedIp() != null) { throw new CloudRuntimeException("Does not support custom ip allocation at this time: " + nic); } @@ -203,7 +203,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { return null; } - if (_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { + if (_networkModel.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { profile.setStrategy(ReservationStrategy.Start); /* We won't clear IP address, because router may set gateway as it IP, and it would be updated properly later */ //profile.setIp4Address(null); @@ -222,7 +222,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { return; } - if (_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { + if (_networkModel.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { nic.setIp4Address(null); nic.setGateway(null); nic.setNetmask(null); @@ -242,7 +242,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { DataCenter dc = _dcDao.findById(config.getDataCenterId()); - if (_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { + if (_networkModel.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { nic.setBroadcastUri(config.getBroadcastUri()); nic.setIsolationUri(config.getBroadcastUri()); nic.setDns1(dc.getDns1()); @@ -277,7 +277,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { NetworkVO network = _networkDao.findById(nic.getNetworkId()); - if (network != null && _networkMgr.networkIsConfiguredForExternalNetworking(network.getDataCenterId(), network.getId())) { + if (network != null && _networkModel.networkIsConfiguredForExternalNetworking(network.getDataCenterId(), network.getId())) { return true; } else { return super.release(nic, vm, reservationId); diff --git a/server/src/com/cloud/network/guru/GuestNetworkGuru.java b/server/src/com/cloud/network/guru/GuestNetworkGuru.java index 97c1d5f6c45..2d7865f75e1 100755 --- a/server/src/com/cloud/network/guru/GuestNetworkGuru.java +++ b/server/src/com/cloud/network/guru/GuestNetworkGuru.java @@ -47,6 +47,7 @@ import com.cloud.network.IPAddressVO; import com.cloud.network.Network; import com.cloud.network.Network.State; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.AddressFormat; @@ -84,6 +85,8 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur @Inject protected NetworkManager _networkMgr; @Inject + protected NetworkModel _networkModel; + @Inject protected DataCenterDao _dcDao; @Inject protected VlanDao _vlanDao; @@ -312,7 +315,7 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur long dcId = dest.getDataCenter().getId(); //get physical network id - long physicalNetworkId = _networkMgr.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); + long physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); NetworkVO implemented = new NetworkVO(network.getTrafficType(), network.getMode(), network.getBroadcastDomainType(), network.getNetworkOfferingId(), State.Allocated, @@ -357,11 +360,11 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur boolean isGateway = false; if (vm.getVirtualMachine().getType() == VirtualMachine.Type.DomainRouter) { if (network.getVpcId() != null) { - if (_networkMgr.isProviderSupportServiceInNetwork(network.getId(), Service.SourceNat, Provider.VPCVirtualRouter)) { + if (_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.SourceNat, Provider.VPCVirtualRouter)) { isGateway = true; } } else { - if (_networkMgr.isProviderSupportServiceInNetwork(network.getId(), Service.SourceNat, Provider.VirtualRouter)) { + if (_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.SourceNat, Provider.VirtualRouter)) { isGateway = true; } } @@ -389,7 +392,7 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur nic.setStrategy(ReservationStrategy.Start); if (nic.getMacAddress() == null) { - nic.setMacAddress(_networkMgr.getNextAvailableMacAddressInNetwork(network.getId())); + nic.setMacAddress(_networkModel.getNextAvailableMacAddressInNetwork(network.getId())); if (nic.getMacAddress() == null) { throw new InsufficientAddressCapacityException("Unable to allocate more mac addresses", Network.class, network.getId()); } diff --git a/server/src/com/cloud/network/guru/PrivateNetworkGuru.java b/server/src/com/cloud/network/guru/PrivateNetworkGuru.java index e958f74405b..bebfd539bc4 100644 --- a/server/src/com/cloud/network/guru/PrivateNetworkGuru.java +++ b/server/src/com/cloud/network/guru/PrivateNetworkGuru.java @@ -32,7 +32,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.Network; import com.cloud.network.Network.GuestType; import com.cloud.network.Network.State; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.AddressFormat; @@ -62,7 +62,7 @@ public class PrivateNetworkGuru extends AdapterBase implements NetworkGuru { @Inject protected PrivateIpDao _privateIpDao; @Inject - protected NetworkManager _networkMgr; + protected NetworkModel _networkMgr; private static final TrafficType[] _trafficTypes = {TrafficType.Guest}; diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 0ffdcea8473..e52f63a0b1c 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -31,14 +31,16 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; -import org.apache.cloudstack.api.command.user.loadbalancer.*; +import org.apache.cloudstack.api.command.user.loadbalancer.CreateLBStickinessPolicyCmd; +import org.apache.cloudstack.api.command.user.loadbalancer.CreateLoadBalancerRuleCmd; +import org.apache.cloudstack.api.command.user.loadbalancer.ListLBStickinessPoliciesCmd; +import org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRuleInstancesCmd; +import org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRulesCmd; +import org.apache.cloudstack.api.command.user.loadbalancer.UpdateLoadBalancerRuleCmd; +import org.apache.cloudstack.api.response.ServiceResponse; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; -import org.apache.cloudstack.api.command.user.loadbalancer.CreateLBStickinessPolicyCmd; -import org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRuleInstancesCmd; -import org.apache.cloudstack.api.command.user.loadbalancer.ListLoadBalancerRulesCmd; -import org.apache.cloudstack.api.response.ServiceResponse; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.dao.ConfigurationDao; @@ -68,6 +70,8 @@ import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; +import com.cloud.network.NetworkRuleApplier; import com.cloud.network.NetworkVO; import com.cloud.network.as.AutoScalePolicy; import com.cloud.network.as.AutoScalePolicyConditionMapVO; @@ -92,6 +96,7 @@ import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.LoadBalancerVMMapDao; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.element.LoadBalancingServiceProvider; import com.cloud.network.lb.LoadBalancingRule.LbAutoScalePolicy; import com.cloud.network.lb.LoadBalancingRule.LbAutoScaleVmGroup; import com.cloud.network.lb.LoadBalancingRule.LbAutoScaleVmProfile; @@ -116,7 +121,6 @@ import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.tags.ResourceTagVO; import com.cloud.tags.dao.ResourceTagDao; -import com.cloud.template.TemplateManager; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.DomainService; @@ -146,7 +150,7 @@ import com.google.gson.reflect.TypeToken; @Component @Local(value = { LoadBalancingRulesManager.class, LoadBalancingRulesService.class }) -public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesManager, LoadBalancingRulesService, Manager { +public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesManager, LoadBalancingRulesService, NetworkRuleApplier, Manager { private static final Logger s_logger = Logger.getLogger(LoadBalancingRulesManagerImpl.class); String _name; @@ -154,6 +158,8 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa @Inject NetworkManager _networkMgr; @Inject + NetworkModel _networkModel; + @Inject RulesManager _rulesMgr; @Inject AccountManager _accountMgr; @@ -191,8 +197,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa DomainService _domainMgr; @Inject ConfigurationManager _configMgr; - @Inject - TemplateManager _templateMgr; + @Inject ExternalLoadBalancerUsageManager _externalLBUsageMgr; @Inject @@ -225,12 +230,12 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa DataCenterDao _dcDao = null; @Inject UserDao _userDao; - + @Inject List _lbProviders; // Will return a string. For LB Stickiness this will be a json, for autoscale this will be "," separated values @Override public String getLBCapability(long networkid, String capabilityName) { - Map> serviceCapabilitiesMap = _networkMgr.getNetworkCapabilities(networkid); + Map> serviceCapabilitiesMap = _networkModel.getNetworkCapabilities(networkid); if (serviceCapabilitiesMap != null) { for (Service service : serviceCapabilitiesMap.keySet()) { ServiceResponse serviceResponse = new ServiceResponse(); @@ -323,7 +328,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa List rules = Arrays.asList(rule); - if (!_networkMgr.applyRules(rules, false)) { + if (!_networkMgr.applyRules(rules, FirewallRule.Purpose.LoadBalancing, this, false)) { s_logger.debug("LB rules' autoscale config are not completely applied"); return false; } @@ -482,7 +487,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa List policyList = new ArrayList(); policyList.add(new LbStickinessPolicy(cmd.getStickinessMethodName(), lbpolicy.getParams())); LoadBalancingRule lbRule = new LoadBalancingRule(loadBalancer, getExistingDestinations(lbpolicy.getId()), policyList); - if (!_networkMgr.validateRule(lbRule)) { + if (!validateRule(lbRule)) { throw new InvalidParameterValueException("Failed to create Stickiness policy: Validation Failed " + cmd.getLbRuleId()); } @@ -493,12 +498,28 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa return policy; } + + private boolean validateRule(LoadBalancingRule lbRule) { + Network network = _networkDao.findById(lbRule.getNetworkId()); + Purpose purpose = lbRule.getPurpose(); + if (purpose != Purpose.LoadBalancing) { + s_logger.debug("Unable to validate network rules for purpose: " + purpose.toString()); + return false; + } + for (LoadBalancingServiceProvider ne : _lbProviders) { + boolean validated = ne.validateLBRule(network, lbRule); + if (!validated) + return false; + } + return true; + } + @Override @DB @ActionEvent(eventType = EventTypes.EVENT_LB_STICKINESSPOLICY_CREATE, eventDescription = "Apply Stickinesspolicy to load balancer ", async = true) public boolean applyLBStickinessPolicy(CreateLBStickinessPolicyCmd cmd) { boolean success = true; - + LoadBalancerVO loadBalancer = _lbDao.findById(cmd.getLbRuleId()); if (loadBalancer == null) { throw new InvalidParameterException("Invalid Load balancer Id:" + cmd.getLbRuleId()); @@ -526,7 +547,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa @ActionEvent(eventType = EventTypes.EVENT_LB_STICKINESSPOLICY_DELETE, eventDescription = "revoking LB Stickiness policy ", async = true) public boolean deleteLBStickinessPolicy(long stickinessPolicyId, boolean apply) { boolean success = true; - + UserContext caller = UserContext.current(); LBStickinessPolicyVO stickinessPolicy = _lb2stickinesspoliciesDao.findById(stickinessPolicyId); @@ -552,7 +573,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa stickinessPolicy.setRevoke(true); _lb2stickinesspoliciesDao.persist(stickinessPolicy); s_logger.debug("Set load balancer rule for revoke: rule id " + loadBalancerId + ", stickinesspolicyID " + stickinessPolicyId); - + try { if (!applyLoadBalancerConfig(loadBalancerId)) { s_logger.warn("Failed to remove load balancer rule id " + loadBalancerId + " for stickinesspolicyID " + stickinessPolicyId); @@ -614,8 +635,8 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa UserVm vm = _vmDao.findById(instanceId); if (vm == null || vm.getState() == State.Destroyed || vm.getState() == State.Expunging) { - InvalidParameterValueException ex = new InvalidParameterValueException("Invalid instance id specified"); - ex.addProxyObject(vm, instanceId, "instanceId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Invalid instance id specified"); + ex.addProxyObject(vm, instanceId, "instanceId"); throw ex; } @@ -626,7 +647,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa } // Let's check to make sure the vm has a nic in the same network as the load balancing rule. - List nics = _networkMgr.getNics(vm.getId()); + List nics = _networkModel.getNics(vm.getId()); Nic nicInSameNetwork = null; for (Nic nic : nics) { if (nic.getNetworkId() == loadBalancer.getNetworkId()) { @@ -636,8 +657,8 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa } if (nicInSameNetwork == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("VM " + instanceId + " cannot be added because it doesn't belong in the same network."); - ex.addProxyObject(vm, instanceId, "instanceId"); + InvalidParameterValueException ex = new InvalidParameterValueException("VM " + instanceId + " cannot be added because it doesn't belong in the same network."); + ex.addProxyObject(vm, instanceId, "instanceId"); throw ex; } @@ -685,10 +706,10 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa } s_logger.warn("Unable to apply the load balancer config because resource is unavaliable.", e); } - + if (!success) { - CloudRuntimeException ex = new CloudRuntimeException("Failed to add specified loadbalancerruleid for vms " + instanceIds); - ex.addProxyObject(loadBalancer, loadBalancerId, "loadBalancerId"); + CloudRuntimeException ex = new CloudRuntimeException("Failed to add specified loadbalancerruleid for vms " + instanceIds); + ex.addProxyObject(loadBalancer, loadBalancerId, "loadBalancerId"); // TBD: Also pack in the instanceIds in the exception using the right VO object or table name. throw ex; } @@ -742,14 +763,14 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa success = true; } catch (ResourceUnavailableException e) { if (rollBack && isRollBackAllowedForProvider(loadBalancer)) { - + for (long instanceId : instanceIds) { LoadBalancerVMMapVO map = _lb2VmMapDao.findByLoadBalancerIdAndVmId(loadBalancerId, instanceId); map.setRevoke(false); _lb2VmMapDao.persist(map); s_logger.debug("LB Rollback rule id: " + loadBalancerId + ",while removing vmId " + instanceId); } - + loadBalancer.setState(backupState); _lbDao.persist(loadBalancer); s_logger.debug("LB Rollback rule id: " + loadBalancerId + " while removing vm instances"); @@ -757,10 +778,10 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa s_logger.warn("Unable to apply the load balancer config because resource is unavaliable.", e); } if (!success) { - CloudRuntimeException ex = new CloudRuntimeException("Failed to remove specified load balancer rule id for vms " + instanceIds); - ex.addProxyObject(loadBalancer, loadBalancerId, "loadBalancerId"); + CloudRuntimeException ex = new CloudRuntimeException("Failed to remove specified load balancer rule id for vms " + instanceIds); + ex.addProxyObject(loadBalancer, loadBalancerId, "loadBalancerId"); throw ex; - } + } return success; } @@ -827,7 +848,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa boolean generateUsageEvent = false; boolean success = true; FirewallRule.State backupState = lb.getState(); - + txn.start(); if (lb.getState() == FirewallRule.State.Staged) { if (s_logger.isDebugEnabled()) { @@ -860,7 +881,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa // gather external network usage stats for this lb rule NetworkVO network = _networkDao.findById(lb.getNetworkId()); if (network != null) { - if (_networkMgr.networkIsConfiguredForExternalNetworking(network.getDataCenterId(), network.getId())) { + if (_networkModel.networkIsConfiguredForExternalNetworking(network.getDataCenterId(), network.getId())) { _externalLBUsageMgr.updateExternalLoadBalancerNetworkUsageStats(loadBalancerId); } } @@ -875,10 +896,10 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa return false; } } else { - if (!applyLoadBalancerConfig(loadBalancerId)) { - s_logger.warn("Unable to apply the load balancer config"); - return false; - } + if (!applyLoadBalancerConfig(loadBalancerId)) { + s_logger.warn("Unable to apply the load balancer config"); + return false; + } } } catch (ResourceUnavailableException e) { if (rollBack && isRollBackAllowedForProvider(lb)) { @@ -940,8 +961,8 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa if (ipAddrId != null) { ipVO = _ipAddressDao.findById(ipAddrId); } - - Network network = _networkMgr.getNetwork(lb.getNetworkId()); + + Network network = _networkModel.getNetwork(lb.getNetworkId()); // FIXME: breaking the dependency on ELB manager. This breaks functionality of ELB using virtual router // Bug CS-15411 opened to document this @@ -955,14 +976,14 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa lb.setSourceIpAddressId(systemIp.getId()); ipVO = _ipAddressDao.findById(systemIp.getId()); } - + // Validate ip address if (ipVO == null) { throw new InvalidParameterValueException("Unable to create load balance rule; can't find/allocate source IP"); } else if (ipVO.isOneToOneNat()) { throw new NetworkRuleConflictException("Can't do load balance on ip address: " + ipVO.getAddress()); } - + boolean performedIpAssoc = false; try { if (ipVO.getAssociatedWithNetworkId() == null) { @@ -970,16 +991,16 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa && ipVO.getVpcId() != null && ipVO.getVpcId().longValue() == network.getVpcId(); if (assignToVpcNtwk) { //set networkId just for verification purposes - _networkMgr.checkIpForService(ipVO, Service.Lb, lb.getNetworkId()); + _networkModel.checkIpForService(ipVO, Service.Lb, lb.getNetworkId()); s_logger.debug("The ip is not associated with the VPC network id="+ lb.getNetworkId() + " so assigning"); ipVO = _networkMgr.associateIPToGuestNetwork(ipAddrId, lb.getNetworkId(), false); performedIpAssoc = true; } } else { - _networkMgr.checkIpForService(ipVO, Service.Lb, null); + _networkModel.checkIpForService(ipVO, Service.Lb, null); } - + if (ipVO.getAssociatedWithNetworkId() == null) { throw new InvalidParameterValueException("Ip address " + ipVO + " is not assigned to the network " + network); } @@ -1025,12 +1046,12 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa IPAddressVO ipAddr = _ipAddressDao.findById(sourceIpId); // make sure ip address exists if (ipAddr == null || !ipAddr.readyToUse()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to create load balancer rule, invalid IP address id specified"); - ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to create load balancer rule, invalid IP address id specified"); + ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId"); throw ex; } else if (ipAddr.isOneToOneNat()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to create load balancer rule; specified sourceip id has static nat enabled"); - ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to create load balancer rule; specified sourceip id has static nat enabled"); + ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId"); throw ex; } @@ -1039,8 +1060,8 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa Long networkId = ipAddr.getAssociatedWithNetworkId(); if (networkId == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to create load balancer rule ; specified sourceip id is not associated with any network"); - ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to create load balancer rule ; specified sourceip id is not associated with any network"); + ex.addProxyObject(ipAddr, sourceIpId, "sourceIpId"); throw ex; } @@ -1049,9 +1070,9 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa _accountMgr.checkAccess(caller.getCaller(), null, true, ipAddr); // verify that lb service is supported by the network - if (!_networkMgr.areServicesSupportedInNetwork(network.getId(), Service.Lb)) { - InvalidParameterValueException ex = new InvalidParameterValueException("LB service is not supported in specified network id"); - ex.addProxyObject(network, networkId, "networkId"); + if (!_networkModel.areServicesSupportedInNetwork(network.getId(), Service.Lb)) { + InvalidParameterValueException ex = new InvalidParameterValueException("LB service is not supported in specified network id"); + ex.addProxyObject(network, networkId, "networkId"); throw ex; } @@ -1063,10 +1084,10 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa // verify rule is supported by Lb provider of the network LoadBalancingRule loadBalancing = new LoadBalancingRule(newRule, new ArrayList(), new ArrayList()); - if (!_networkMgr.validateRule(loadBalancing)) { + if (!validateRule(loadBalancing)) { throw new InvalidParameterValueException("LB service provider cannot support this rule"); } - + newRule = _lbDao.persist(newRule); if (openFirewall) { @@ -1131,6 +1152,19 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa } } + @Override + public boolean applyRules(Network network, Purpose purpose, List rules) + throws ResourceUnavailableException { + assert(purpose == Purpose.LoadBalancing): "LB Manager asked to handle non-LB rules"; + boolean handled = false; + for (LoadBalancingServiceProvider lbElement: _lbProviders) { + handled = lbElement.applyLBRules(network, (List) rules); + if (handled) + break; + } + return handled; + } + @DB protected boolean applyLoadBalancerRules(List lbs, boolean updateRulesInDB) throws ResourceUnavailableException { Transaction txn = Transaction.currentTxn(); @@ -1143,7 +1177,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa rules.add(loadBalancing); } - if (!_networkMgr.applyRules(rules, false)) { + if (!_networkMgr.applyRules(rules, FirewallRule.Purpose.LoadBalancing, this, false)) { s_logger.debug("LB rules are not completely applied"); return false; } @@ -1321,7 +1355,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa String algorithm = cmd.getAlgorithm(); LoadBalancerVO lb = _lbDao.findById(lbRuleId); LoadBalancerVO lbBackup = _lbDao.findById(lbRuleId); - + if (lb == null) { throw new InvalidParameterValueException("Unable to find lb rule by id=" + lbRuleId); } @@ -1365,7 +1399,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa lb.setState(lbBackup.getState()); _lbDao.update(lb.getId(), lb); _lbDao.persist(lb); - + s_logger.debug("LB Rollback rule id: " + lbRuleId + " while updating LB rule."); } s_logger.warn("Unable to apply the load balancer config because resource is unavaliable.", e); @@ -1376,7 +1410,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa if (!success) { throw new CloudRuntimeException("Failed to update load balancer rule: " + lbRuleId); } - + return lb; } @@ -1580,4 +1614,6 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa //remove the rule _lbDao.remove(rule.getId()); } + + } diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 255a1af40ae..2f625cca0a3 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -134,6 +134,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.IsolationType; @@ -178,8 +179,8 @@ import com.cloud.network.rules.StaticNatImpl; import com.cloud.network.rules.StaticNatRule; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.network.vpn.Site2SiteVpnManager; +import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; -import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.resource.ResourceManager; import com.cloud.service.ServiceOfferingVO; @@ -294,6 +295,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian @Inject NetworkManager _networkMgr; @Inject + NetworkModel _networkModel; + @Inject VirtualMachineManager _itMgr; @Inject VpnUserDao _vpnUsersDao; @@ -821,7 +824,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian boolean forVpc = router.getVpcId() != null; List routerNics = _nicDao.listByVmId(router.getId()); for (Nic routerNic : routerNics) { - Network network = _networkMgr.getNetwork(routerNic.getNetworkId()); + Network network = _networkModel.getNetwork(routerNic.getNetworkId()); //Send network usage command for public nic in VPC VR //Send network usage command for isolated guest nic of non VPC VR if ((forVpc && network.getTrafficType() == TrafficType.Public) || (!forVpc && network.getTrafficType() == TrafficType.Guest && network.getGuestType() == Network.GuestType.Isolated)) { @@ -1377,7 +1380,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian // 1) Get deployment plan and find out the list of routers boolean isPodBased = (dest.getDataCenter().getNetworkType() == NetworkType.Basic || - _networkMgr.areServicesSupportedInNetwork(guestNetwork.getId(), Service.SecurityGroup)) + _networkModel.areServicesSupportedInNetwork(guestNetwork.getId(), Service.SecurityGroup)) && guestNetwork.getTrafficType() == TrafficType.Guest; // dest has pod=null, for Basic Zone findOrDeployVRs for all Pods @@ -1437,7 +1440,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian // Check if providers are supported in the physical networks VirtualRouterProviderType type = VirtualRouterProviderType.VirtualRouter; - Long physicalNetworkId = _networkMgr.getPhysicalNetworkId(guestNetwork); + Long physicalNetworkId = _networkModel.getPhysicalNetworkId(guestNetwork); PhysicalNetworkServiceProvider provider = _physicalProviderDao.findByServiceProvider(physicalNetworkId, type.toString()); if (provider == null) { throw new CloudRuntimeException("Cannot find service provider " + type.toString() + " in physical network " + physicalNetworkId); @@ -1447,13 +1450,13 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian throw new CloudRuntimeException("Cannot find virtual router provider " + type.toString() + " as service provider " + provider.getId()); } - if (_networkMgr.isNetworkSystem(guestNetwork) || guestNetwork.getGuestType() == Network.GuestType.Shared) { + if (_networkModel.isNetworkSystem(guestNetwork) || guestNetwork.getGuestType() == Network.GuestType.Shared) { owner = _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM); } // Check if public network has to be set on VR boolean publicNetwork = false; - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetwork.getId(), Service.SourceNat, Provider.VirtualRouter)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetwork.getId(), Service.SourceNat, Provider.VirtualRouter)) { publicNetwork = true; } if (isRedundant && !publicNetwork) { @@ -1466,31 +1469,15 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian offeringId = _offering.getId(); } + PublicIp sourceNatIp = null; + if (publicNetwork) { + sourceNatIp = _networkMgr.assignSourceNatIpAddressToGuestNetwork(owner, guestNetwork); + } + // 3) deploy virtual router(s) int count = routerCount - routers.size(); DeploymentPlan plan = planAndRouters.first(); for (int i = 0; i < count; i++) { - PublicIp sourceNatIp = null; - if (publicNetwork) { - int failCount = 0; - // Generate different MAC for VR - while (sourceNatIp == null) { - sourceNatIp = _networkMgr.assignSourceNatIpAddressToGuestNetwork(owner, guestNetwork); - NicVO nic = _nicDao.findByMacAddress(sourceNatIp.getMacAddress()); - // We got duplicate MAC here, so regenerate the mac - if (nic != null) { - s_logger.debug("Failed to find a different mac for redundant router. Try again. The current mac is " + sourceNatIp.getMacAddress()); - sourceNatIp = null; - failCount ++; - } - //Prevent infinite loop - if (failCount > 3) { - s_logger.error("Failed to find a different mac for redundant router! Abort operation!"); - throw new InsufficientAddressCapacityException("Failed to find a different mac for redundant router", null, offeringId); - } - } - } - List> networks = createRouterNetworks(owner, isRedundant, plan, guestNetwork, new Pair(publicNetwork, sourceNatIp)); //don't start the router as we are holding the network lock that needs to be released at the end of router allocation @@ -1655,7 +1642,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian s_logger.debug("Adding nic for Virtual Router in Guest network " + guestNetwork); String defaultNetworkStartIp = null; if (guestNetwork.getCidr() != null && !setupPublicNetwork) { - String startIp = _networkMgr.getStartIpAddress(guestNetwork.getId()); + String startIp = _networkModel.getStartIpAddress(guestNetwork.getId()); if (startIp != null && _ipAddressDao.findByIpAndSourceNetworkId(guestNetwork.getId(), startIp).getAllocatedTime() == null) { defaultNetworkStartIp = startIp; } else if (s_logger.isDebugEnabled()){ @@ -1687,8 +1674,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian //2) Control network s_logger.debug("Adding nic for Virtual Router in Control network "); - List offerings = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork); - NetworkOfferingVO controlOffering = offerings.get(0); + List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork); + NetworkOffering controlOffering = offerings.get(0); NetworkVO controlConfig = _networkMgr.setupNetwork(_systemAcct, controlOffering, plan, null, null, false).get(0); networks.add(new Pair(controlConfig, null)); @@ -1710,8 +1697,15 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (hasGuestNetwork) { defaultNic.setDeviceId(2); } - NetworkOfferingVO publicOffering = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemPublicNetwork).get(0); + NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); List publicNetworks = _networkMgr.setupNetwork(_systemAcct, publicOffering, plan, null, null, false); + String publicIp = defaultNic.getIp4Address(); + // We want to use the identical MAC address for RvR on public interface if possible + NicVO peerNic = _nicDao.findByIp4AddressAndNetworkId(publicIp, publicNetworks.get(0).getId()); + if (peerNic != null) { + s_logger.info("Use same MAC as previous RvR, the MAC is " + peerNic.getMacAddress()); + defaultNic.setMacAddress(peerNic.getMacAddress()); + } networks.add(new Pair(publicNetworks.get(0), defaultNic)); } @@ -1928,8 +1922,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } } else if (nic.getTrafficType() == TrafficType.Guest) { - dnsProvided = _networkMgr.isProviderSupportServiceInNetwork(nic.getNetworkId(), Service.Dns, Provider.VirtualRouter); - dhcpProvided = _networkMgr.isProviderSupportServiceInNetwork(nic.getNetworkId(), Service.Dhcp, Provider.VirtualRouter); + dnsProvided = _networkModel.isProviderSupportServiceInNetwork(nic.getNetworkId(), Service.Dns, Provider.VirtualRouter); + dhcpProvided = _networkModel.isProviderSupportServiceInNetwork(nic.getNetworkId(), Service.Dhcp, Provider.VirtualRouter); //build bootloader parameter for the guest buf.append(createGuestBootLoadArgs(nic, defaultDns1, defaultDns2, router)); } else if (nic.getTrafficType() == TrafficType.Public) { @@ -2030,7 +2024,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian s_logger.error("Failed to get update priority!", e); throw new CloudRuntimeException("Failed to get update priority!"); } - Network net = _networkMgr.getNetwork(guestNic.getNetworkId()); + Network net = _networkModel.getNetwork(guestNic.getNetworkId()); buf.append(" guestgw=").append(net.getGateway()); String brd = NetUtils.long2Ip(NetUtils.ip2Long(guestNic.getIp4Address()) | ~NetUtils.ip2Long(guestNic.getNetmask())); buf.append(" guestbrd=").append(brd); @@ -2186,13 +2180,13 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } protected void finalizeUserDataAndDhcpOnStart(Commands cmds, DomainRouterVO router, Provider provider, Long guestNetworkId) { - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Dhcp, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Dhcp, provider)) { // Resend dhcp s_logger.debug("Reapplying dhcp entries as a part of domR " + router + " start..."); createDhcpEntryCommandsForVMs(router, cmds, guestNetworkId); } - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.UserData, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.UserData, provider)) { // Resend user data s_logger.debug("Reapplying vm data (userData and metaData) entries as a part of domR " + router + " start..."); createVmDataCommandForVMs(router, cmds, guestNetworkId); @@ -2213,26 +2207,26 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian //Get information about all the rules (StaticNats and StaticNatRules; PFVPN to reapply on domR start) for (PublicIpAddress ip : publicIps) { - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.PortForwarding, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.PortForwarding, provider)) { pfRules.addAll(_pfRulesDao.listForApplication(ip.getId())); } - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.StaticNat, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.StaticNat, provider)) { staticNatFirewallRules.addAll(_rulesDao.listByIpAndPurpose(ip.getId(), Purpose.StaticNat)); } - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Firewall, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Firewall, provider)) { firewallRules.addAll(_rulesDao.listByIpAndPurpose(ip.getId(), Purpose.Firewall)); } - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Vpn, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Vpn, provider)) { RemoteAccessVpn vpn = _vpnDao.findById(ip.getId()); if (vpn != null) { vpns.add(vpn); } } - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.StaticNat, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.StaticNat, provider)) { if (ip.isOneToOneNat()) { - String dstIp = _networkMgr.getIpInNetwork(ip.getAssociatedWithVmId(), guestNetworkId); + String dstIp = _networkModel.getIpInNetwork(ip.getAssociatedWithVmId(), guestNetworkId); StaticNatImpl staticNat = new StaticNatImpl(ip.getAccountId(), ip.getDomainId(), guestNetworkId, ip.getId(), dstIp, false); staticNats.add(staticNat); } @@ -2277,7 +2271,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian List lbs = _loadBalancerDao.listByNetworkId(guestNetworkId); List lbRules = new ArrayList(); - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Lb, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Lb, provider)) { // Re-apply load balancing rules for (LoadBalancerVO lb : lbs) { List dstList = _lbMgr.getExistingDestinations(lb.getId()); @@ -2302,7 +2296,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (publicIps != null && !publicIps.isEmpty()) { s_logger.debug("Found " + publicIps.size() + " ip(s) to apply as a part of domR " + router + " start."); // Re-apply public ip addresses - should come before PF/LB/VPN - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Firewall, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Firewall, provider)) { createAssociateIPCommands(router, publicIps, cmds, 0); } } @@ -2311,11 +2305,11 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian protected ArrayList getPublicIpsToApply(VirtualRouter router, Provider provider, Long guestNetworkId, com.cloud.network.IpAddress.State... skipInStates) { long ownerId = router.getAccountId(); - final List userIps = _networkMgr.listPublicIpsAssignedToGuestNtwk(ownerId, guestNetworkId, null); + final List userIps = _networkModel.listPublicIpsAssignedToGuestNtwk(ownerId, guestNetworkId, null); List allPublicIps = new ArrayList(); if (userIps != null && !userIps.isEmpty()) { boolean addIp = true; - for (IPAddressVO userIp : userIps) { + for (IpAddress userIp : userIps) { if (skipInStates != null) { for (IpAddress.State stateToSkip : skipInStates) { if (userIp.getState() == stateToSkip) { @@ -2327,8 +2321,9 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } if (addIp) { - PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), - NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); + IPAddressVO ipVO = _ipAddressDao.findById(userIp.getId()); + PublicIp publicIp = new PublicIp(ipVO, _vlanDao.findById(userIp.getVlanId()), + NetUtils.createSequenceBasedMacAddress(ipVO.getMacAddress())); allPublicIps.add(publicIp); } } @@ -2336,11 +2331,11 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian //Get public Ips that should be handled by router Network network = _networkDao.findById(guestNetworkId); - Map> ipToServices = _networkMgr.getIpToServices(allPublicIps, false, true); - Map> providerToIpList = _networkMgr.getProviderToIpList(network, ipToServices); + Map> ipToServices = _networkModel.getIpToServices(allPublicIps, false, true); + Map> providerToIpList = _networkModel.getProviderToIpList(network, ipToServices); // Only cover virtual router for now, if ELB use it this need to be modified - ArrayList publicIps = providerToIpList.get(provider); + ArrayList publicIps = providerToIpList.get(provider); return publicIps; } @@ -2370,7 +2365,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian List routerNics = _nicDao.listByVmId(profile.getId()); for (Nic routerNic : routerNics) { - Network network = _networkMgr.getNetwork(routerNic.getNetworkId()); + Network network = _networkModel.getNetwork(routerNic.getNetworkId()); if (network.getTrafficType() == TrafficType.Guest) { guestNetworks.add(network); } @@ -2470,7 +2465,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian for (VirtualRouter router : routers) { if (router.getState() == State.Running) { Commands cmds = new Commands(OnError.Continue); - IpAddress ip = _networkMgr.getIp(vpn.getServerAddressId()); + IpAddress ip = _networkModel.getIp(vpn.getServerAddressId()); RemoteAccessVpnCfgCommand removeVpnCmd = new RemoteAccessVpnCfgCommand(false, ip.getAddress().addr(), vpn.getLocalIp(), vpn.getIpRange(), vpn.getIpsecPresharedKey()); @@ -2570,16 +2565,16 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian NicVO defaultNic = _nicDao.findDefaultNicForVM(userVmId); //check if DNS provider is the domR - if (!_networkMgr.isProviderSupportServiceInNetwork(defaultNic.getNetworkId(), Service.Dns, Provider.VirtualRouter)) { + if (!_networkModel.isProviderSupportServiceInNetwork(defaultNic.getNetworkId(), Service.Dns, Provider.VirtualRouter)) { return null; } - NetworkOfferingVO offering = _networkOfferingDao.findById(_networkDao.findById(defaultNic.getNetworkId()).getNetworkOfferingId()); + NetworkOffering offering = _networkOfferingDao.findById(_networkDao.findById(defaultNic.getNetworkId()).getNetworkOfferingId()); if (offering.getRedundantRouter()) { return findGatewayIp(userVmId); } - DataCenter dc = _dcDao.findById(_networkMgr.getNetwork(defaultNic.getNetworkId()).getDataCenterId()); + DataCenter dc = _dcDao.findById(_networkModel.getNetwork(defaultNic.getNetworkId()).getDataCenterId()); boolean isZoneBasic = (dc.getNetworkType() == NetworkType.Basic); //find domR's nic in the network @@ -2798,8 +2793,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian }); // Get network rate - required for IpAssoc - Integer networkRate = _networkMgr.getNetworkRate(ipAddrList.get(0).getNetworkId(), router.getId()); - Network network = _networkMgr.getNetwork(ipAddrList.get(0).getNetworkId()); + Integer networkRate = _networkModel.getNetworkRate(ipAddrList.get(0).getNetworkId(), router.getId()); + Network network = _networkModel.getNetwork(ipAddrList.get(0).getNetworkId()); IpAddressTO[] ipsToSend = new IpAddressTO[ipAddrList.size()]; int i = 0; @@ -2822,7 +2817,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian sourceNat, vlanId, vlanGateway, vlanNetmask, vifMacAddress, networkRate, ipAddr.isOneToOneNat()); ip.setTrafficType(network.getTrafficType()); - ip.setNetworkName(_networkMgr.getNetworkTag(router.getHypervisorType(), network)); + ip.setNetworkName(_networkModel.getNetworkTag(router.getHypervisorType(), network)); ipsToSend[i++] = ip; /* send the firstIP = true for the first Add, this is to create primary on interface*/ if (!firstIP || add) { @@ -2845,7 +2840,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (rules != null) { rulesTO = new ArrayList(); for (PortForwardingRule rule : rules) { - IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId()); + IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId()); PortForwardingRuleTO ruleTO = new PortForwardingRuleTO(rule, null, sourceIp.getAddress().addr()); rulesTO.add(ruleTO); } @@ -2873,7 +2868,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (rules != null) { rulesTO = new ArrayList(); for (StaticNatRule rule : rules) { - IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId()); + IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId()); StaticNatRuleTO ruleTO = new StaticNatRuleTO(rule, null, sourceIp.getAddress().addr(), rule.getDestIpAddress()); rulesTO.add(ruleTO); } @@ -2900,7 +2895,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian String algorithm = rule.getAlgorithm(); String uuid = rule.getUuid(); - String srcIp = _networkMgr.getIp(rule.getSourceIpAddressId()).getAddress().addr(); + String srcIp = _networkModel.getIp(rule.getSourceIpAddressId()).getAddress().addr(); int srcPort = rule.getSourcePortStart(); List destinations = rule.getDestinations(); List stickinessPolicies = rule.getStickinessPolicies(); @@ -2914,12 +2909,12 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian routerPublicIp = domr.getPublicIpAddress(); } - Network guestNetwork = _networkMgr.getNetwork(guestNetworkId); + Network guestNetwork = _networkModel.getNetwork(guestNetworkId); Nic nic = _nicDao.findByInstanceIdAndNetworkId(guestNetwork.getId(), router.getId()); NicProfile nicProfile = new NicProfile(nic, guestNetwork, nic.getBroadcastUri(), nic.getIsolationUri(), - _networkMgr.getNetworkRate(guestNetwork.getId(), router.getId()), - _networkMgr.isSecurityGroupSupportedInNetwork(guestNetwork), - _networkMgr.getNetworkTag(router.getHypervisorType(), guestNetwork)); + _networkModel.getNetworkRate(guestNetwork.getId(), router.getId()), + _networkModel.isSecurityGroupSupportedInNetwork(guestNetwork), + _networkModel.getNetworkTag(router.getHypervisorType(), guestNetwork)); LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lbs,routerPublicIp, getRouterIpInNetwork(guestNetworkId, router.getId()),router.getPrivateIpAddress(), @@ -2957,7 +2952,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian addUsersCmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, getRouterIpInNetwork(vpn.getNetworkId(), router.getId())); addUsersCmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); - IpAddress ip = _networkMgr.getIp(vpn.getServerAddressId()); + IpAddress ip = _networkModel.getIp(vpn.getServerAddressId()); RemoteAccessVpnCfgCommand startVpnCmd = new RemoteAccessVpnCfgCommand(true, ip.getAddress().addr(), vpn.getLocalIp(), vpn.getIpRange(), vpn.getIpsecPresharedKey()); @@ -3232,7 +3227,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (rules != null) { rulesTO = new ArrayList(); for (FirewallRule rule : rules) { - IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId()); + IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId()); FirewallRuleTO ruleTO = new FirewallRuleTO(rule, null, sourceIp.getAddress().addr()); rulesTO.add(ruleTO); } @@ -3376,7 +3371,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (rules != null) { rulesTO = new ArrayList(); for (StaticNat rule : rules) { - IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId()); + IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId()); StaticNatRuleTO ruleTO = new StaticNatRuleTO(0, sourceIp.getAddress().addr(), null, null, rule.getDestIpAddress(), null, null, null, rule.isForRevoke(), false); rulesTO.add(ruleTO); @@ -3509,7 +3504,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (privateIP != null) { List routerNics = _nicDao.listByVmId(router.getId()); for (Nic routerNic : routerNics) { - Network network = _networkMgr.getNetwork(routerNic.getNetworkId()); + Network network = _networkModel.getNetwork(routerNic.getNetworkId()); if (network.getTrafficType() == TrafficType.Public) { boolean forVpc = router.getVpcId() != null; final NetworkUsageCommand usageCmd = new NetworkUsageCommand(privateIP, router.getHostName(), diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index 2f1f76d0889..aa731baeeb6 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -32,7 +32,6 @@ import org.springframework.stereotype.Component; import com.cloud.agent.AgentManager.OnError; import com.cloud.agent.api.Command; -import com.cloud.agent.api.GetDomRVersionCmd; import com.cloud.agent.api.NetworkUsageCommand; import com.cloud.agent.api.PlugNicAnswer; import com.cloud.agent.api.PlugNicCommand; @@ -107,7 +106,7 @@ import com.cloud.network.vpc.dao.StaticRouteDao; import com.cloud.network.vpc.dao.VpcDao; import com.cloud.network.vpc.dao.VpcOfferingDao; import com.cloud.network.vpn.Site2SiteVpnManager; -import com.cloud.offerings.NetworkOfferingVO; +import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; import com.cloud.user.UserStatisticsVO; import com.cloud.utils.Pair; @@ -289,12 +288,12 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } //Check if router is a part of the Guest network - if (!_networkMgr.isVmPartOfNetwork(router.getId(), network.getId())) { + if (!_networkModel.isVmPartOfNetwork(router.getId(), network.getId())) { s_logger.debug("Router " + router + " is not a part of the Guest network " + network); return true; } - boolean result = setupVpcGuestNetwork(network, router, false, _networkMgr.getNicProfile(router, network.getId(), null)); + boolean result = setupVpcGuestNetwork(network, router, false, _networkModel.getNicProfile(router, network.getId(), null)); if (!result) { s_logger.warn("Failed to destroy guest network config " + network + " on router " + router); return false; @@ -423,13 +422,13 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } protected SetupGuestNetworkCommand createSetupGuestNetworkCommand(VirtualRouter router, boolean add, NicProfile guestNic) { - Network network = _networkMgr.getNetwork(guestNic.getNetworkId()); + Network network = _networkModel.getNetwork(guestNic.getNetworkId()); String defaultDns1 = null; String defaultDns2 = null; - boolean dnsProvided = _networkMgr.isProviderSupportServiceInNetwork(network.getId(), Service.Dns, Provider.VPCVirtualRouter); - boolean dhcpProvided = _networkMgr.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, + boolean dnsProvided = _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dns, Provider.VPCVirtualRouter); + boolean dhcpProvided = _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, Provider.VPCVirtualRouter); boolean setupDns = dnsProvided || dhcpProvided; @@ -443,7 +442,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian String networkDomain = network.getNetworkDomain(); String dhcpRange = getGuestDhcpRange(guestNic, network, _configMgr.getZone(network.getDataCenterId())); - NicProfile nicProfile = _networkMgr.getNicProfile(router, nic.getNetworkId(), null); + NicProfile nicProfile = _networkModel.getNicProfile(router, nic.getNetworkId(), null); SetupGuestNetworkCommand setupCmd = new SetupGuestNetworkCommand(dhcpRange, networkDomain, false, null, defaultDns1, defaultDns2, add, _itMgr.toNicTO(nicProfile, router.getHypervisorType())); @@ -484,8 +483,8 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian List ipAddrList = vlanAndIp.getValue(); // Get network rate - required for IpAssoc - Integer networkRate = _networkMgr.getNetworkRate(ipAddrList.get(0).getNetworkId(), router.getId()); - Network network = _networkMgr.getNetwork(ipAddrList.get(0).getNetworkId()); + Integer networkRate = _networkModel.getNetworkRate(ipAddrList.get(0).getNetworkId(), router.getId()); + Network network = _networkModel.getNetwork(ipAddrList.get(0).getNetworkId()); IpAddressTO[] ipsToSend = new IpAddressTO[ipAddrList.size()]; int i = 0; @@ -500,7 +499,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian networkRate, ipAddr.isOneToOneNat()); ip.setTrafficType(network.getTrafficType()); - ip.setNetworkName(_networkMgr.getNetworkTag(router.getHypervisorType(), network)); + ip.setNetworkName(_networkModel.getNetworkTag(router.getHypervisorType(), network)); ipsToSend[i++] = ip; if (ipAddr.isSourceNat()) { sourceNatIpAdd = new Pair(ip, ipAddr.getNetworkId()); @@ -530,7 +529,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } protected NicTO getNicTO(final VirtualRouter router, Long networkId, String broadcastUri) { - NicProfile nicProfile = _networkMgr.getNicProfile(router, networkId, broadcastUri); + NicProfile nicProfile = _networkModel.getNicProfile(router, networkId, broadcastUri); return _itMgr.toNicTO(nicProfile, router.getHypervisorType()); } @@ -559,7 +558,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian for (String vlanTag : nicsToUnplug.keySet()) { Network publicNtwk = null; try { - publicNtwk = _networkMgr.getNetwork(nicsToUnplug.get(vlanTag).getNetworkId()); + publicNtwk = _networkModel.getNetwork(nicsToUnplug.get(vlanTag).getNetworkId()); URI broadcastUri = BroadcastDomainType.Vlan.toUri(vlanTag); _itMgr.removeVmFromNetwork(router, publicNtwk, broadcastUri); } catch (ConcurrentOperationException e) { @@ -591,7 +590,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian NicProfile publicNic = null; Network publicNtwk = null; try { - publicNtwk = _networkMgr.getNetwork(ip.getNetworkId()); + publicNtwk = _networkModel.getNetwork(ip.getNetworkId()); publicNic = _itMgr.addVmToNetwork(router, publicNtwk, defaultNic); } catch (ConcurrentOperationException e) { s_logger.warn("Failed to add router " + router + " to vlan " + vlanTag + @@ -774,7 +773,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian List routerNics = _nicDao.listByVmId(profile.getId()); for (Nic routerNic : routerNics) { - Network network = _networkMgr.getNetwork(routerNic.getNetworkId()); + Network network = _networkModel.getNetwork(routerNic.getNetworkId()); if (network.getTrafficType() == TrafficType.Guest) { Pair guestNic = new Pair(routerNic, network); guestNics.add(guestNic); @@ -837,10 +836,10 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian PlugNicCommand plugNicCmd = new PlugNicCommand(getNicTO(router, guestNic.getNetworkId(), null), router.getInstanceName()); cmds.addCommand(plugNicCmd); - if (!_networkMgr.isPrivateGateway(guestNic)) { + if (!_networkModel.isPrivateGateway(guestNic)) { //set guest network VirtualMachine vm = _vmDao.findById(router.getId()); - NicProfile nicProfile = _networkMgr.getNicProfile(vm, guestNic.getNetworkId(), null); + NicProfile nicProfile = _networkModel.getNicProfile(vm, guestNic.getNetworkId(), null); SetupGuestNetworkCommand setupCmd = createSetupGuestNetworkCommand(router, true, nicProfile); cmds.addCommand(setupCmd); } else { @@ -920,7 +919,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian super.finalizeNetworkRulesForNetwork(cmds, router, provider, guestNetworkId); if (router.getVpcId() != null) { - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.NetworkACL, Provider.VPCVirtualRouter)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.NetworkACL, Provider.VPCVirtualRouter)) { List networkACLs = _networkACLMgr.listNetworkACLs(guestNetworkId); s_logger.debug("Found " + networkACLs.size() + " network ACLs to apply as a part of VPC VR " + router + " start for guest network id=" + guestNetworkId); @@ -935,7 +934,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian public boolean setupPrivateGateway(PrivateGateway gateway, VirtualRouter router) throws ConcurrentOperationException, ResourceUnavailableException { boolean result = true; try { - Network network = _networkMgr.getNetwork(gateway.getNetworkId()); + Network network = _networkModel.getNetwork(gateway.getNetworkId()); NicProfile requested = createPrivateNicProfileForGateway(gateway); NicProfile guestNic = _itMgr.addVmToNetwork(router, network, requested); @@ -1008,15 +1007,15 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian public boolean destroyPrivateGateway(PrivateGateway gateway, VirtualRouter router) throws ConcurrentOperationException, ResourceUnavailableException { - if (!_networkMgr.isVmPartOfNetwork(router.getId(), gateway.getNetworkId())) { + if (!_networkModel.isVmPartOfNetwork(router.getId(), gateway.getNetworkId())) { s_logger.debug("Router doesn't have nic for gateway " + gateway + " so no need to removed it"); return true; } - Network privateNetwork = _networkMgr.getNetwork(gateway.getNetworkId()); + Network privateNetwork = _networkModel.getNetwork(gateway.getNetworkId()); s_logger.debug("Releasing private ip for gateway " + gateway + " from " + router); - boolean result = setupVpcPrivateNetwork(router, false, _networkMgr.getNicProfile(router, privateNetwork.getId(), null)); + boolean result = setupVpcPrivateNetwork(router, false, _networkModel.getNicProfile(router, privateNetwork.getId(), null)); if (!result) { s_logger.warn("Failed to release private ip for gateway " + gateway + " on router " + router); return false; @@ -1169,13 +1168,13 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian int i = 0; for (final PrivateIpAddress ipAddr : ipAddrList) { - Network network = _networkMgr.getNetwork(ipAddr.getNetworkId()); + Network network = _networkModel.getNetwork(ipAddr.getNetworkId()); IpAddressTO ip = new IpAddressTO(Account.ACCOUNT_ID_SYSTEM, ipAddr.getIpAddress(), add, false, false, ipAddr.getVlanTag(), ipAddr.getGateway(), ipAddr.getNetmask(), ipAddr.getMacAddress(), null, false); ip.setTrafficType(network.getTrafficType()); - ip.setNetworkName(_networkMgr.getNetworkTag(router.getHypervisorType(), network)); + ip.setNetworkName(_networkModel.getNetworkTag(router.getHypervisorType(), network)); ipsToSend[i++] = ip; } @@ -1207,7 +1206,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian VpcGateway privateGateway = _vpcMgr.getPrivateGatewayForVpc(vpcId); if (privateGateway != null) { NicProfile privateNic = createPrivateNicProfileForGateway(privateGateway); - Network privateNetwork = _networkMgr.getNetwork(privateGateway.getNetworkId()); + Network privateNetwork = _networkModel.getNetwork(privateGateway.getNetworkId()); networks.add(new Pair((NetworkVO) privateNetwork, privateNic)); } @@ -1237,7 +1236,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian publicNic.setBroadcastType(BroadcastDomainType.Vlan); publicNic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(publicIp.getVlanTag())); publicNic.setIsolationUri(IsolationType.Vlan.toUri(publicIp.getVlanTag())); - NetworkOfferingVO publicOffering = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemPublicNetwork).get(0); + NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); List publicNetworks = _networkMgr.setupNetwork(_systemAcct, publicOffering, plan, null, null, false); networks.add(new Pair(publicNetworks.get(0), publicNic)); publicVlans.add(publicIp.getVlanTag()); @@ -1249,7 +1248,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian @DB protected NicProfile createPrivateNicProfileForGateway(VpcGateway privateGateway) { - Network privateNetwork = _networkMgr.getNetwork(privateGateway.getNetworkId()); + Network privateNetwork = _networkModel.getNetwork(privateGateway.getNetworkId()); PrivateIpVO ipVO = _privateIpDao.allocateIpAddress(privateNetwork.getDataCenterId(), privateNetwork.getId(), privateGateway.getIp4Address()); Nic privateNic = _nicDao.findByIp4AddressAndNetworkId(ipVO.getIpAddress(), privateNetwork.getId()); @@ -1258,9 +1257,9 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian if (privateNic != null) { VirtualMachine vm = _vmDao.findById(privateNic.getId()); privateNicProfile = new NicProfile(privateNic, privateNetwork, privateNic.getBroadcastUri(), privateNic.getIsolationUri(), - _networkMgr.getNetworkRate(privateNetwork.getId(), vm.getId()), - _networkMgr.isSecurityGroupSupportedInNetwork(privateNetwork), - _networkMgr.getNetworkTag(vm.getHypervisorType(), privateNetwork)); + _networkModel.getNetworkRate(privateNetwork.getId(), vm.getId()), + _networkModel.isSecurityGroupSupportedInNetwork(privateNetwork), + _networkModel.getNetworkTag(vm.getHypervisorType(), privateNetwork)); } else { String vlanTag = privateNetwork.getBroadcastUri().getHost(); String netmask = NetUtils.getCidrNetmask(privateNetwork.getCidr()); diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index 9f67e0530ff..e4f473558bd 100755 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -46,6 +46,7 @@ import com.cloud.network.IpAddress; import com.cloud.network.Network; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.dao.FirewallRulesCidrsDao; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; @@ -81,11 +82,6 @@ import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; -import org.apache.log4j.Logger; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; -import java.util.*; @Component @Local(value = { RulesManager.class, RulesService.class }) @@ -108,6 +104,8 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { @Inject NetworkManager _networkMgr; @Inject + NetworkModel _networkModel; + @Inject EventDao _eventDao; @Inject UsageEventDao _usageEventDao; @@ -189,16 +187,16 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { } else if (ipAddress.isOneToOneNat()) { throw new InvalidParameterValueException("Unable to create port forwarding rule; ip id=" + ipAddrId + " has static nat enabled"); } - + Long networkId = rule.getNetworkId(); - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); //associate ip address to network (if needed) boolean performedIpAssoc = false; if (ipAddress.getAssociatedWithNetworkId() == null) { boolean assignToVpcNtwk = network.getVpcId() != null && ipAddress.getVpcId() != null && ipAddress.getVpcId().longValue() == network.getVpcId(); if (assignToVpcNtwk) { - _networkMgr.checkIpForService(ipAddress, Service.PortForwarding, networkId); + _networkModel.checkIpForService(ipAddress, Service.PortForwarding, networkId); s_logger.debug("The ip is not associated with the VPC network id="+ networkId + ", so assigning"); try { @@ -210,13 +208,13 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { } } } else { - _networkMgr.checkIpForService(ipAddress, Service.PortForwarding, null); + _networkModel.checkIpForService(ipAddress, Service.PortForwarding, null); } - + if (ipAddress.getAssociatedWithNetworkId() == null) { throw new InvalidParameterValueException("Ip address " + ipAddress + " is not assigned to the network " + network); } - + try { _firewallMgr.validateFirewallRule(caller, ipAddress, rule.getSourcePortStart(), rule.getSourcePortEnd(), rule.getProtocol(), Purpose.PortForwarding, FirewallRuleType.User); @@ -246,26 +244,26 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { // Verify that vm has nic in the network Ip dstIp = rule.getDestinationIpAddress(); - Nic guestNic = _networkMgr.getNicInNetwork(vmId, networkId); + Nic guestNic = _networkModel.getNicInNetwork(vmId, networkId); if (guestNic == null || guestNic.getIp4Address() == null) { throw new InvalidParameterValueException("Vm doesn't belong to network associated with ipAddress"); } else { dstIp = new Ip(guestNic.getIp4Address()); } - + //if start port and end port are passed in, and they are not equal to each other, perform the validation boolean validatePortRange = false; if (rule.getSourcePortStart().intValue() != rule.getSourcePortEnd().intValue() || rule.getDestinationPortStart() != rule.getDestinationPortEnd()) { validatePortRange = true; } - + if (validatePortRange) { //source start port and source dest port should be the same. The same applies to dest ports if (rule.getSourcePortStart().intValue() != rule.getDestinationPortStart()) { throw new InvalidParameterValueException("Private port start should be equal to public port start"); } - + if (rule.getSourcePortEnd().intValue() != rule.getDestinationPortEnd()) { throw new InvalidParameterValueException("Private port end should be equal to public port end"); } @@ -308,7 +306,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { if (e instanceof NetworkRuleConflictException) { throw (NetworkRuleConflictException) e; } - + throw new CloudRuntimeException("Unable to add rule for the ip id=" + ipAddrId, e); } } finally { @@ -344,15 +342,15 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { Long accountId = ipAddress.getAllocatedToAccountId(); Long domainId = ipAddress.getAllocatedInDomainId(); - _networkMgr.checkIpForService(ipAddress, Service.StaticNat, null); + _networkModel.checkIpForService(ipAddress, Service.StaticNat, null); - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); NetworkOffering off = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); if (off.getElasticIp()) { throw new InvalidParameterValueException("Can't create ip forwarding rules for the network where elasticIP service is enabled"); } - String dstIp = _networkMgr.getIpInNetwork(ipAddress.getAssociatedWithVmId(), networkId); + String dstIp = _networkModel.getIpInNetwork(ipAddress.getAssociatedWithVmId(), networkId); Transaction txn = Transaction.currentTxn(); txn.start(); @@ -416,23 +414,23 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { boolean performedIpAssoc = false; boolean result = false; try { - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); if (network == null) { throw new InvalidParameterValueException("Unable to find network by id"); } - + // Check that vm has a nic in the network - Nic guestNic = _networkMgr.getNicInNetwork(vmId, networkId); + Nic guestNic = _networkModel.getNicInNetwork(vmId, networkId); if (guestNic == null) { throw new InvalidParameterValueException("Vm doesn't belong to the network with specified id"); } - - if (!_networkMgr.areServicesSupportedInNetwork(network.getId(), Service.StaticNat)) { + + if (!_networkModel.areServicesSupportedInNetwork(network.getId(), Service.StaticNat)) { throw new InvalidParameterValueException("Unable to create static nat rule; StaticNat service is not " + "supported in network with specified id"); } - + if (!isSystemVm) { UserVmVO vm = _vmDao.findById(vmId); if (vm == null) { @@ -444,8 +442,8 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { boolean assignToVpcNtwk = network.getVpcId() != null && ipAddress.getVpcId() != null && ipAddress.getVpcId().longValue() == network.getVpcId(); if (assignToVpcNtwk) { - _networkMgr.checkIpForService(ipAddress, Service.StaticNat, networkId); - + _networkModel.checkIpForService(ipAddress, Service.StaticNat, networkId); + s_logger.debug("The ip is not associated with the VPC network id="+ networkId + ", so assigning"); try { ipAddress = _networkMgr.associateIPToGuestNetwork(ipId, networkId, false); @@ -457,20 +455,20 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { performedIpAssoc = true; } } else { - _networkMgr.checkIpForService(ipAddress, Service.StaticNat, null); + _networkModel.checkIpForService(ipAddress, Service.StaticNat, null); } - + if (ipAddress.getAssociatedWithNetworkId() == null) { throw new InvalidParameterValueException("Ip address " + ipAddress + " is not assigned to the network " + network); } // Check permissions checkIpAndUserVm(ipAddress, vm, caller); - + // Verify ip address parameter isIpReadyForStaticNat(vmId, ipAddress, caller, ctx.getCallerUserId()); } - + ipAddress.setOneToOneNat(true); ipAddress.setAssociatedWithVmId(vmId); @@ -484,14 +482,14 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { } } else { s_logger.warn("Failed to update ip address " + ipAddress + " in the DB as a part of enableStaticNat"); - + } } finally { if (!result) { ipAddress.setOneToOneNat(false); ipAddress.setAssociatedWithVmId(null); _ipAddressDao.update(ipAddress.getId(), ipAddress); - + if (performedIpAssoc) { //if the rule is the last one for the ip address assigned to VPC, unassign it from the network IpAddress ip = _ipAddressDao.findById(ipAddress.getId()); @@ -530,7 +528,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { Long networkId = oldIP.getAssociatedWithNetworkId(); boolean reassignStaticNat = false; if (networkId != null) { - Network guestNetwork = _networkMgr.getNetwork(networkId); + Network guestNetwork = _networkModel.getNetwork(networkId); NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); if (offering.getElasticIp()) { reassignStaticNat = true; @@ -893,7 +891,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { List staticNats = new ArrayList(); for (IPAddressVO ip : ips) { // Get nic IP4 address - String dstIp = _networkMgr.getIpInNetwork(ip.getAssociatedWithVmId(), networkId); + String dstIp = _networkModel.getIpInNetwork(ip.getAssociatedWithVmId(), networkId); StaticNatImpl staticNat = new StaticNatImpl(ip.getAllocatedToAccountId(), ip.getAllocatedInDomainId(), networkId, ip.getId(), dstIp, false); staticNats.add(staticNat); } @@ -1174,30 +1172,29 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { checkIpAndUserVm(ipAddress, null, caller); if (ipAddress.getSystem()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Can't disable static nat for system IP address with specified id"); - ex.addProxyObject(ipAddress, ipId, "ipId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Can't disable static nat for system IP address with specified id"); + ex.addProxyObject(ipAddress, ipId, "ipId"); throw ex; } Long vmId = ipAddress.getAssociatedWithVmId(); if (vmId == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Specified IP address id is not associated with any vm Id"); - ex.addProxyObject(ipAddress, ipId, "ipId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Specified IP address id is not associated with any vm Id"); + ex.addProxyObject(ipAddress, ipId, "ipId"); throw ex; } // if network has elastic IP functionality supported, we first have to disable static nat on old ip in order to // re-enable it on the new one enable static nat takes care of that - Network guestNetwork = _networkMgr.getNetwork(ipAddress.getAssociatedWithNetworkId()); + Network guestNetwork = _networkModel.getNetwork(ipAddress.getAssociatedWithNetworkId()); NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); if (offering.getElasticIp()) { - if (offering.getAssociatePublicIP()) { getSystemIpAndEnableStaticNatForVm(_vmDao.findById(vmId), true); return true; + } else { + return disableStaticNat(ipId, caller, ctx.getCallerUserId(), false); } } - return disableStaticNat(ipId, caller, ctx.getCallerUserId(), false); - } @Override public boolean disableStaticNat(long ipId, Account caller, long callerUserId, boolean releaseIpIfElastic) throws ResourceUnavailableException { @@ -1208,8 +1205,8 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { long networkId = ipAddress.getAssociatedWithNetworkId(); if (!ipAddress.isOneToOneNat()) { - InvalidParameterValueException ex = new InvalidParameterValueException("One to one nat is not enabled for the specified ip id"); - ex.addProxyObject(ipAddress, ipId, "ipId"); + InvalidParameterValueException ex = new InvalidParameterValueException("One to one nat is not enabled for the specified ip id"); + ex.addProxyObject(ipAddress, ipId, "ipId"); throw ex; } @@ -1268,16 +1265,16 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { FirewallRuleVO ruleVO = _firewallDao.findById(rule.getId()); if (ip == null || !ip.isOneToOneNat() || ip.getAssociatedWithVmId() == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Source ip address of the specified firewall rule id is not static nat enabled"); - ex.addProxyObject(ruleVO, rule.getId(), "ruleId"); + InvalidParameterValueException ex = new InvalidParameterValueException("Source ip address of the specified firewall rule id is not static nat enabled"); + ex.addProxyObject(ruleVO, rule.getId(), "ruleId"); throw ex; } - + String dstIp; if (forRevoke) { - dstIp = _networkMgr.getIpInNetworkIncludingRemoved(ip.getAssociatedWithVmId(), rule.getNetworkId()); + dstIp = _networkModel.getIpInNetworkIncludingRemoved(ip.getAssociatedWithVmId(), rule.getNetworkId()); } else { - dstIp = _networkMgr.getIpInNetwork(ip.getAssociatedWithVmId(), rule.getNetworkId()); + dstIp = _networkModel.getIpInNetwork(ip.getAssociatedWithVmId(), rule.getNetworkId()); } return new StaticNatRuleImpl(ruleVO, dstIp); @@ -1286,7 +1283,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { @Override public boolean applyStaticNatForIp(long sourceIpId, boolean continueOnError, Account caller, boolean forRevoke) { IpAddress sourceIp = _ipAddressDao.findById(sourceIpId); - + List staticNats = createStaticNatForIp(sourceIp, caller, forRevoke); if (staticNats != null && !staticNats.isEmpty()) { @@ -1302,8 +1299,8 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { return true; } - - + + @Override public boolean applyStaticNatForNetwork(long networkId, boolean continueOnError, Account caller, boolean forRevoke) { List staticNatIps = _ipAddressDao.listStaticNatPublicIps(networkId); @@ -1329,8 +1326,8 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { s_logger.debug("Found 0 static nat rules to apply for network id " + networkId); } - return true; - } + return true; + } protected List createStaticNatForIp(IpAddress sourceIp, Account caller, boolean forRevoke) { List staticNats = new ArrayList(); @@ -1345,10 +1342,10 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { } UserVmVO vm = _vmDao.findById(sourceIp.getAssociatedWithVmId()); - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); if (network == null) { - CloudRuntimeException ex = new CloudRuntimeException("Unable to find an ip address to map to specified vm id"); - ex.addProxyObject(vm, vm.getId(), "vmId"); + CloudRuntimeException ex = new CloudRuntimeException("Unable to find an ip address to map to specified vm id"); + ex.addProxyObject(vm, vm.getId(), "vmId"); throw ex; } @@ -1361,9 +1358,9 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { String dstIp; if (forRevoke) { - dstIp = _networkMgr.getIpInNetworkIncludingRemoved(sourceIp.getAssociatedWithVmId(), networkId); + dstIp = _networkModel.getIpInNetworkIncludingRemoved(sourceIp.getAssociatedWithVmId(), networkId); } else { - dstIp = _networkMgr.getIpInNetwork(sourceIp.getAssociatedWithVmId(), networkId); + dstIp = _networkModel.getIpInNetwork(sourceIp.getAssociatedWithVmId(), networkId); } StaticNatImpl staticNat = new StaticNatImpl(sourceIp.getAllocatedToAccountId(), sourceIp.getAllocatedInDomainId(), @@ -1379,14 +1376,9 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { // enable static nat if eIp capability is supported List nics = _nicDao.listByVmId(vm.getId()); for (Nic nic : nics) { - Network guestNetwork = _networkMgr.getNetwork(nic.getNetworkId()); + Network guestNetwork = _networkModel.getNetwork(nic.getNetworkId()); NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); if (offering.getElasticIp()) { - boolean isSystemVM = (vm.getType() == Type.ConsoleProxy || vm.getType() == Type.SecondaryStorageVm); - // for user VM's associate public IP only if offering is marked to associate a public IP by default on start of VM - if (!isSystemVM && !offering.getAssociatePublicIP()) { - continue; - } // check if there is already static nat enabled if (_ipAddressDao.findByAssociatedVmId(vm.getId()) != null && !getNewIp) { s_logger.debug("Vm " + vm + " already has ip associated with it in guest network " + guestNetwork); @@ -1401,15 +1393,16 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { s_logger.debug("Allocated system ip " + ip + ", now enabling static nat on it for vm " + vm); + boolean isSystemVM = (vm.getType() == Type.ConsoleProxy || vm.getType() == Type.SecondaryStorageVm); try { success = enableStaticNat(ip.getId(), vm.getId(), guestNetwork.getId(), isSystemVM); } catch (NetworkRuleConflictException ex) { s_logger.warn("Failed to enable static nat as a part of enabling elasticIp and staticNat for vm " + - vm + " in guest network " + guestNetwork + " due to exception ", ex); + vm + " in guest network " + guestNetwork + " due to exception ", ex); success = false; } catch (ResourceUnavailableException ex) { s_logger.warn("Failed to enable static nat as a part of enabling elasticIp and staticNat for vm " + - vm + " in guest network " + guestNetwork + " due to exception ", ex); + vm + " in guest network " + guestNetwork + " due to exception ", ex); success = false; } @@ -1424,7 +1417,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { } } - + protected void removePFRule(PortForwardingRuleVO rule) { _portForwardingDao.remove(rule.getId()); } diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index c7848b8f2fa..361dedac47e 100755 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -66,6 +66,7 @@ import com.cloud.exception.ResourceInUseException; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.Network; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.security.SecurityGroupWork.Step; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.network.security.dao.SecurityGroupDao; @@ -152,6 +153,8 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG @Inject NetworkManager _networkMgr; @Inject + NetworkModel _networkModel; + @Inject AccountManager _accountMgr; @Inject DomainManager _domainMgr; @@ -356,7 +359,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG if (rule.getAllowedNetworkId() != null) { List allowedInstances = _securityGroupVMMapDao.listBySecurityGroup(rule.getAllowedNetworkId(), State.Running); for (SecurityGroupVMMapVO ngmapVO : allowedInstances) { - Nic defaultNic = _networkMgr.getDefaultNic(ngmapVO.getInstanceId()); + Nic defaultNic = _networkModel.getDefaultNic(ngmapVO.getInstanceId()); if (defaultNic != null) { String cidr = defaultNic.getIp4Address(); cidr = cidr + "/32"; @@ -1252,8 +1255,8 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG VirtualMachine vm = _vmDao.findByIdIncludingRemoved(vmId); List nics = _networkMgr.getNicProfiles(vm); for (NicProfile nic : nics) { - Network network = _networkMgr.getNetwork(nic.getNetworkId()); - if (_networkMgr.isSecurityGroupSupportedInNetwork(network) && vm.getHypervisorType() != HypervisorType.VMware) { + Network network = _networkModel.getNetwork(nic.getNetworkId()); + if (_networkModel.isSecurityGroupSupportedInNetwork(network) && vm.getHypervisorType() != HypervisorType.VMware) { return true; } } diff --git a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java index cfeb15a40b5..f69b76d99ef 100644 --- a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java +++ b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java @@ -37,7 +37,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Service; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.firewall.NetworkACLService; @@ -80,7 +80,7 @@ public class NetworkACLManagerImpl implements Manager,NetworkACLManager{ @Inject FirewallRulesDao _firewallDao; @Inject - NetworkManager _networkMgr; + NetworkModel _networkMgr; @Inject VpcManager _vpcMgr; @Inject diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index 00205a10515..94d4e029d35 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -64,6 +64,8 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; +import com.cloud.network.NetworkService; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.TrafficType; @@ -139,6 +141,10 @@ public class VpcManagerImpl implements VpcManager, Manager{ @Inject NetworkManager _ntwkMgr; @Inject + NetworkModel _ntwkModel; + @Inject + NetworkService _ntwkSvc; + @Inject IPAddressDao _ipAddressDao; @Inject DomainRouterDao _routerDao; @@ -544,12 +550,12 @@ public class VpcManagerImpl implements VpcManager, Manager{ if (networkDomain == null) { // 1) Get networkDomain from the corresponding account - networkDomain = _ntwkMgr.getAccountNetworkDomain(owner.getId(), zoneId); + networkDomain = _ntwkModel.getAccountNetworkDomain(owner.getId(), zoneId); // 2) If null, generate networkDomain using domain suffix from the global config variables if (networkDomain == null) { - networkDomain = "cs" + Long.toHexString(owner.getId()) + _ntwkMgr.getDefaultNetworkDomain(); + networkDomain = "cs" + Long.toHexString(owner.getId()) + _ntwkModel.getDefaultNetworkDomain(); } } @@ -561,7 +567,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ { //the provider has to be enabled at least in one network in the zone for (PhysicalNetwork pNtwk : _pNtwkDao.listByZone(zoneId)) { - if (_ntwkMgr.isProviderEnabledInPhysicalNetwork(pNtwk.getId(), Provider.VPCVirtualRouter.getName())) { + if (_ntwkModel.isProviderEnabledInPhysicalNetwork(pNtwk.getId(), Provider.VPCVirtualRouter.getName())) { return true; } } @@ -958,7 +964,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ } //2) validate network offering attributes - List svcs = _ntwkMgr.listNetworkOfferingServices(guestNtwkOff.getId()); + List svcs = _ntwkModel.listNetworkOfferingServices(guestNtwkOff.getId()); validateNtwkOffForVpc(guestNtwkOff, svcs); //3) Check services/providers against VPC providers @@ -974,14 +980,14 @@ public class VpcManagerImpl implements VpcManager, Manager{ } //4) Only one network in the VPC can support LB - if (_ntwkMgr.areServicesSupportedByNetworkOffering(guestNtwkOff.getId(), Service.Lb)) { + if (_ntwkModel.areServicesSupportedByNetworkOffering(guestNtwkOff.getId(), Service.Lb)) { List networks = getVpcNetworks(vpc.getId()); for (Network network : networks) { if (networkId != null && network.getId() == networkId.longValue()) { //skip my own network continue; } else { - if (_ntwkMgr.areServicesSupportedInNetwork(network.getId(), Service.Lb)) { + if (_ntwkModel.areServicesSupportedInNetwork(network.getId(), Service.Lb)) { throw new InvalidParameterValueException("LB service is already supported " + "by network " + network + " in VPC " + vpc); } @@ -993,7 +999,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ @Override public void validateNtwkOffForVpc(NetworkOffering guestNtwkOff, List supportedSvcs) { //1) in current release, only vpc provider is supported by Vpc offering - List providers = _ntwkMgr.getNtwkOffDistinctProviders(guestNtwkOff.getId()); + List providers = _ntwkModel.getNtwkOffDistinctProviders(guestNtwkOff.getId()); for (Provider provider : providers) { if (provider != Provider.VPCVirtualRouter) { throw new InvalidParameterValueException("Only provider of type " + Provider.VPCVirtualRouter.getName() @@ -1088,7 +1094,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ protected VpcProvider getVpcElement() { if (vpcElement == null) { - vpcElement = ((VpcProvider)_ntwkMgr.getElementImplementingProvider(Provider.VPCVirtualRouter.getName())); + vpcElement = ((VpcProvider)_ntwkModel.getElementImplementingProvider(Provider.VPCVirtualRouter.getName())); } if (vpcElement == null) { @@ -1216,7 +1222,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ } protected PrivateGateway getPrivateGatewayProfile(VpcGateway gateway) { - Network network = _ntwkMgr.getNetwork(gateway.getNetworkId()); + Network network = _ntwkModel.getNetwork(gateway.getNetworkId()); return new PrivateGatewayProfile(gateway, network.getPhysicalNetworkId()); } @@ -1243,7 +1249,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ //Validate physical network if (physicalNetworkId == null) { - List pNtwks = _ntwkMgr.getPhysicalNtwksSupportingTrafficType(vpc.getZoneId(), TrafficType.Guest); + List pNtwks = _ntwkModel.getPhysicalNtwksSupportingTrafficType(vpc.getZoneId(), TrafficType.Guest); if (pNtwks.isEmpty() || pNtwks.size() != 1) { throw new InvalidParameterValueException("Physical network can't be determined; pass physical network id"); } @@ -1255,7 +1261,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ s_logger.debug("Creating Private gateway for VPC " + vpc); //1) create private network String networkName = "vpc-" + vpc.getName() + "-privateNetwork"; - Network privateNtwk = _ntwkMgr.createPrivateNetwork(networkName, networkName, physicalNetworkId, + Network privateNtwk = _ntwkSvc.createPrivateNetwork(networkName, networkName, physicalNetworkId, vlan, ipAddress, null, gateway, netmask, gatewayOwnerId, vpcId); //2) create gateway entry @@ -1767,7 +1773,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ Account caller = UserContext.current().getCaller(); Account owner = null; - IpAddress ipToAssoc = _ntwkMgr.getIp(ipId); + IpAddress ipToAssoc = _ntwkModel.getIp(ipId); if (ipToAssoc != null) { _accountMgr.checkAccess(caller, null, true, ipToAssoc); owner = _accountMgr.getAccount(ipToAssoc.getAllocatedToAccountId()); @@ -1826,7 +1832,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ boolean success = false; try { //unassign ip from the VPC router - success = _ntwkMgr.applyIpAssociations(_ntwkMgr.getNetwork(networkId), true); + success = _ntwkMgr.applyIpAssociations(_ntwkModel.getNetwork(networkId), true); } catch (ResourceUnavailableException ex) { throw new CloudRuntimeException("Failed to apply ip associations for network id=" + networkId + " as a part of unassigning ip " + ipId + " from vpc", ex); @@ -1953,7 +1959,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ validateNtkwOffForVpc(ntwkOffId, null, null, null, vpc, networkId, null); } - return _ntwkMgr.updateGuestNetwork(networkId, name, displayText, callerAccount, callerUser, domainSuffix, + return _ntwkSvc.updateGuestNetwork(networkId, name, displayText, callerAccount, callerUser, domainSuffix, ntwkOffId, changeCidr); } diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java index 5b7d9d422cc..1a33538b6df 100755 --- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java @@ -17,6 +17,7 @@ package com.cloud.network.vpn; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -24,11 +25,11 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.command.user.vpn.ListRemoteAccessVpnsCmd; import org.apache.cloudstack.api.command.user.vpn.ListVpnUsersCmd; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; -import org.apache.cloudstack.api.command.user.vpn.ListRemoteAccessVpnsCmd; import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.domain.DomainVO; @@ -43,7 +44,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.IPAddressVO; import com.cloud.network.Network; import com.cloud.network.Network.Service; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.PublicIpAddress; import com.cloud.network.RemoteAccessVpn; import com.cloud.network.RemoteAccessVpnVO; @@ -70,7 +71,6 @@ import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.PasswordGenerator; import com.cloud.utils.Ternary; - import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; @@ -86,21 +86,23 @@ import com.cloud.utils.net.NetUtils; public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manager { private final static Logger s_logger = Logger.getLogger(RemoteAccessVpnManagerImpl.class); String _name; - + @Inject AccountDao _accountDao; @Inject VpnUserDao _vpnUsersDao; @Inject RemoteAccessVpnDao _remoteAccessVpnDao; @Inject IPAddressDao _ipAddressDao; @Inject AccountManager _accountMgr; @Inject DomainManager _domainMgr; - @Inject NetworkManager _networkMgr; + @Inject NetworkModel _networkMgr; @Inject RulesManager _rulesMgr; @Inject DomainDao _domainDao; @Inject FirewallRulesDao _rulesDao; @Inject FirewallManager _firewallMgr; @Inject UsageEventDao _usageEventDao; @Inject ConfigurationDao _configDao; - + @Inject List _vpnServiceProviders; + + int _userLimit; int _pskLength; String _clientIpRange; @@ -117,18 +119,18 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag if (ipAddr == null) { throw new InvalidParameterValueException("Unable to create remote access vpn, invalid public IP address id" + publicIpId); } - + _accountMgr.checkAccess(caller, null, true, ipAddr); if (!ipAddr.readyToUse()) { throw new InvalidParameterValueException("The Ip address is not ready to be used yet: " + ipAddr.getAddress()); } - + IPAddressVO ipAddress = _ipAddressDao.findById(publicIpId); _networkMgr.checkIpForService(ipAddress, Service.Vpn, null); RemoteAccessVpnVO vpnVO = _remoteAccessVpnDao.findByPublicIpAddress(publicIpId); - + if (vpnVO != null) { //if vpn is in Added state, return it to the api if (vpnVO.getState() == RemoteAccessVpn.State.Added) { @@ -146,7 +148,7 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag } throw new InvalidParameterValueException("A Remote Access VPN already exists for this account"); } - + //Verify that vpn service is enabled for the network Network network = _networkMgr.getNetwork(networkId); if (!_networkMgr.areServicesSupportedInNetwork(network.getId(), Service.Vpn)) { @@ -221,19 +223,18 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag s_logger.debug("vpn id=" + ipId + " does not exists "); return; } - + _accountMgr.checkAccess(caller, null, true, vpn); - + Network network = _networkMgr.getNetwork(vpn.getNetworkId()); - + vpn.setState(RemoteAccessVpn.State.Removed); _remoteAccessVpnDao.update(vpn.getServerAddressId(), vpn); - - - List elements = _networkMgr.getRemoteAccessVpnElements(); + + boolean success = false; try { - for (RemoteAccessVPNServiceProvider element : elements) { + for (RemoteAccessVPNServiceProvider element : _vpnServiceProviders) { if (element.stopVpn(network, vpn)) { success = true; break; @@ -244,32 +245,32 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag //Cleanup corresponding ports List vpnFwRules = _rulesDao.listByIpAndPurpose(ipId, Purpose.Vpn); Transaction txn = Transaction.currentTxn(); - + boolean applyFirewall = false; List fwRules = new ArrayList(); //if related firewall rule is created for the first vpn port, it would be created for the 2 other ports as well, so need to cleanup the backend if (_rulesDao.findByRelatedId(vpnFwRules.get(0).getId()) != null) { applyFirewall = true; } - + if (applyFirewall) { txn.start(); - + for (FirewallRule vpnFwRule : vpnFwRules) { //don't apply on the backend yet; send all 3 rules in a banch _firewallMgr.revokeRelatedFirewallRule(vpnFwRule.getId(), false); fwRules.add(_rulesDao.findByRelatedId(vpnFwRule.getId())); } - + s_logger.debug("Marked " + fwRules.size() + " firewall rules as Revoked as a part of disable remote access vpn"); - + txn.commit(); - + //now apply vpn rules on the backend s_logger.debug("Reapplying firewall rules for ip id=" + ipId + " as a part of disable remote access vpn"); success = _firewallMgr.applyFirewallRules(ipId, caller); } - + if (success) { try { txn.start(); @@ -277,11 +278,11 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag // Stop billing of VPN users when VPN is removed. VPN_User_ADD events will be generated when VPN is created again List vpnUsers = _vpnUsersDao.listByAccount(vpn.getAccountId()); for(VpnUserVO user : vpnUsers){ - // VPN_USER_REMOVE event is already generated for users in Revoke state - if(user.getState() != VpnUser.State.Revoke){ - UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VPN_USER_REMOVE, user.getAccountId(), 0, user.getId(), user.getUsername()); - _usageEventDao.persist(usageEvent); - } + // VPN_USER_REMOVE event is already generated for users in Revoke state + if(user.getState() != VpnUser.State.Revoke){ + UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VPN_USER_REMOVE, user.getAccountId(), 0, user.getId(), user.getUsername()); + _usageEventDao.persist(usageEvent); + } } if (vpnFwRules != null) { for (FirewallRule vpnFwRule : vpnFwRules) { @@ -318,18 +319,18 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag throw new InvalidParameterValueException("Unable to add vpn user: Another operation active"); } _accountMgr.checkAccess(caller, null, true, owner); - + //don't allow duplicated user names for the same account VpnUserVO vpnUser = _vpnUsersDao.findByAccountAndUsername(owner.getId(), username); if (vpnUser != null) { - throw new InvalidParameterValueException("VPN User with name " + username + " is already added for account " + owner); + throw new InvalidParameterValueException("VPN User with name " + username + " is already added for account " + owner); } long userCount = _vpnUsersDao.getVpnUserCount(owner.getId()); if (userCount >= _userLimit) { throw new AccountLimitException("Cannot add more than " + _userLimit + " remote access vpn users"); } - + VpnUser user = _vpnUsersDao.persist(new VpnUserVO(vpnOwnerId, owner.getDomainId(), username, password)); UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VPN_USER_ADD, user.getAccountId(), 0, user.getId(), user.getUsername()); _usageEventDao.persist(usageEvent); @@ -372,28 +373,27 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag } _accountMgr.checkAccess(caller, null, true, vpn); - - + + Network network = _networkMgr.getNetwork(vpn.getNetworkId()); - List elements = _networkMgr.getRemoteAccessVpnElements(); boolean started = false; try { boolean firewallOpened = true; if (openFirewall) { firewallOpened = _firewallMgr.applyFirewallRules(vpn.getServerAddressId(), caller); } - + if (firewallOpened) { - for (RemoteAccessVPNServiceProvider element : elements) { + for (RemoteAccessVPNServiceProvider element : _vpnServiceProviders) { if (element.startVpn(network, vpn)) { started = true; break; } } } - + return vpn; } finally { if (started) { @@ -401,14 +401,14 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag txn.start(); vpn.setState(RemoteAccessVpn.State.Running); _remoteAccessVpnDao.update(vpn.getServerAddressId(), vpn); - + // Start billing of existing VPN users in ADD and Active state List vpnUsers = _vpnUsersDao.listByAccount(vpn.getAccountId()); for(VpnUserVO user : vpnUsers){ - if(user.getState() != VpnUser.State.Revoke){ - UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VPN_USER_ADD, user.getAccountId(), 0, user.getId(), user.getUsername()); - _usageEventDao.persist(usageEvent); - } + if(user.getState() != VpnUser.State.Revoke){ + UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_VPN_USER_ADD, user.getAccountId(), 0, user.getId(), user.getUsername()); + _usageEventDao.persist(usageEvent); + } } txn.commit(); } @@ -426,7 +426,7 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag List vpns = _remoteAccessVpnDao.findByAccount(vpnOwnerId); List users = _vpnUsersDao.listByAccount(vpnOwnerId); - + //If user is in Active state, we still have to resend them therefore their status has to be Add for (VpnUserVO user : users) { if (user.getState() == State.Active) { @@ -434,13 +434,11 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag _vpnUsersDao.update(user.getId(), user); } } - - List elements = _networkMgr.getRemoteAccessVpnElements(); boolean success = true; boolean[] finals = new boolean[users.size()]; - for (RemoteAccessVPNServiceProvider element : elements) { + for (RemoteAccessVPNServiceProvider element : _vpnServiceProviders) { s_logger.debug("Applying vpn access to " + element.getName()); for (RemoteAccessVpnVO vpn : vpns) { try { @@ -462,7 +460,7 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag } catch (ResourceUnavailableException e) { s_logger.warn("Unable to apply vpn users ", e); success= false; - + for (int i = 0; i < finals.length; i++) { finals[i] = false; } @@ -480,7 +478,7 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag _vpnUsersDao.remove(user.getId()); } } else { - if (user.getState() == State.Add && (user.getUsername()).equals(userName)) { + if (user.getState() == State.Add && (user.getUsername()).equals(userName)) { Transaction txn = Transaction.currentTxn(); txn.start(); _vpnUsersDao.remove(user.getId()); @@ -511,14 +509,14 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag SearchBuilder sb = _vpnUsersDao.createSearchBuilder(); _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - + sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("username", sb.entity().getUsername(), SearchCriteria.Op.EQ); sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); SearchCriteria sc = sb.create(); _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - + //list only active users sc.setParameters("state", State.Active); @@ -540,7 +538,7 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag Account caller = UserContext.current().getCaller(); Long ipAddressId = cmd.getPublicIpId(); List permittedAccounts = new ArrayList(); - + if (ipAddressId != null) { PublicIpAddress publicIp = _networkMgr.getPublicIpAddress(ipAddressId); if (publicIp == null) { @@ -554,26 +552,26 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag } _accountMgr.checkAccess(caller, null, true, publicIp); } - + Ternary domainIdRecursiveListProject = new Ternary(cmd.getDomainId(), cmd.isRecursive(), null); _accountMgr.buildACLSearchParameters(caller, null, cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false); Long domainId = domainIdRecursiveListProject.first(); Boolean isRecursive = domainIdRecursiveListProject.second(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); - + Filter filter = new Filter(RemoteAccessVpnVO.class, "serverAddressId", false, cmd.getStartIndex(), cmd.getPageSizeVal()); SearchBuilder sb = _remoteAccessVpnDao.createSearchBuilder(); _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - + sb.and("serverAddressId", sb.entity().getServerAddressId(), Op.EQ); sb.and("state", sb.entity().getState(), Op.EQ); - + SearchCriteria sc = sb.create(); _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); sc.setParameters("state", RemoteAccessVpn.State.Running); - + if (ipAddressId != null) { sc.setParameters("serverAddressId", ipAddressId); } @@ -620,15 +618,23 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag public String getName() { return _name; } - + @Override public List listRemoteAccessVpns(long networkId) { return _remoteAccessVpnDao.listByNetworkId(networkId); } - + @Override public RemoteAccessVpn getRemoteAccessVpn(long vpnId) { return _remoteAccessVpnDao.findById(vpnId); } + public List getRemoteAccessVPNServiceProviders() { + List result = new ArrayList(); + for (Iterator e = _vpnServiceProviders.iterator(); e.hasNext();) { + result.add(e.next()); + } + + return result; + } } diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java index e34f7d47c85..88e01214016 100644 --- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java @@ -24,9 +24,6 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; - import org.apache.cloudstack.api.command.user.vpn.CreateVpnConnectionCmd; import org.apache.cloudstack.api.command.user.vpn.CreateVpnCustomerGatewayCmd; import org.apache.cloudstack.api.command.user.vpn.CreateVpnGatewayCmd; @@ -38,6 +35,9 @@ import org.apache.cloudstack.api.command.user.vpn.ListVpnCustomerGatewaysCmd; import org.apache.cloudstack.api.command.user.vpn.ListVpnGatewaysCmd; import org.apache.cloudstack.api.command.user.vpn.ResetVpnConnectionCmd; import org.apache.cloudstack.api.command.user.vpn.UpdateVpnCustomerGatewayCmd; +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + import com.cloud.configuration.Config; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.event.ActionEvent; @@ -46,7 +46,6 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.IPAddressVO; -import com.cloud.network.NetworkManager; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.network.Site2SiteCustomerGatewayVO; import com.cloud.network.Site2SiteVpnConnection; @@ -70,7 +69,6 @@ import com.cloud.user.dao.AccountDao; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; - import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; @@ -86,28 +84,29 @@ import com.cloud.vm.DomainRouterVO; public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { private static final Logger s_logger = Logger.getLogger(Site2SiteVpnManagerImpl.class); + @Inject List _s2sProviders; @Inject Site2SiteCustomerGatewayDao _customerGatewayDao; @Inject Site2SiteVpnGatewayDao _vpnGatewayDao; @Inject Site2SiteVpnConnectionDao _vpnConnectionDao; - @Inject NetworkManager _networkMgr; @Inject VpcDao _vpcDao; @Inject IPAddressDao _ipAddressDao; @Inject AccountDao _accountDao; @Inject ConfigurationDao _configDao; @Inject VpcManager _vpcMgr; @Inject AccountManager _accountMgr; - + String _name; int _connLimit; int _subnetsLimit; - + @Override public boolean configure(String name, Map params) throws ConfigurationException { _name = name; - + Map configs = _configDao.getConfiguration(params); _connLimit = NumbersUtil.parseInt(configs.get(Config.Site2SiteVpnConnectionPerVpnGatewayLimit.key()), 4); _subnetsLimit = NumbersUtil.parseInt(configs.get(Config.Site2SiteVpnSubnetsPerCustomerGatewayLimit.key()), 10); + assert (_s2sProviders.iterator().hasNext()): "Did not get injected with a list of S2S providers!"; return true; } @@ -135,7 +134,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { //Verify that caller can perform actions in behalf of vpc owner _accountMgr.checkAccess(caller, null, false, owner); - Long vpcId = cmd.getVpcId(); + Long vpcId = cmd.getVpcId(); VpcVO vpc = _vpcDao.findById(vpcId); if (vpc == null) { throw new InvalidParameterValueException("Invalid VPC " + vpcId + " for site to site vpn gateway creation!"); @@ -149,7 +148,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { if (ips.size() != 1) { throw new CloudRuntimeException("Cannot found source nat ip of vpc " + vpcId); } - + Site2SiteVpnGatewayVO gw = new Site2SiteVpnGatewayVO(owner.getAccountId(), owner.getDomainId(), ips.get(0).getId(), vpcId); _vpnGatewayDao.persist(gw); return gw; @@ -170,7 +169,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { } } } - + @Override @ActionEvent(eventType = EventTypes.EVENT_S2S_VPN_CUSTOMER_GATEWAY_CREATE, eventDescription = "creating s2s customer gateway", create=true) public Site2SiteCustomerGateway createCustomerGateway(CreateVpnCustomerGatewayCmd cmd) { @@ -230,9 +229,9 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { if (_customerGatewayDao.findByNameAndAccountId(name, accountId) != null) { throw new InvalidParameterValueException("The customer gateway with name " + name + " already existed!"); } - + checkCustomerGatewayCidrList(guestCidrList); - + Site2SiteCustomerGatewayVO gw = new Site2SiteCustomerGatewayVO(name, accountId, owner.getDomainId(), gatewayIp, guestCidrList, ipsecPsk, ikePolicy, espPolicy, ikeLifetime, espLifetime, dpd); _customerGatewayDao.persist(gw); @@ -254,14 +253,14 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { throw new InvalidParameterValueException("Unable to found specified Site to Site VPN customer gateway " + customerGatewayId + " !"); } _accountMgr.checkAccess(caller, null, false, customerGateway); - + Long vpnGatewayId = cmd.getVpnGatewayId(); Site2SiteVpnGateway vpnGateway = _vpnGatewayDao.findById(vpnGatewayId); if (vpnGateway == null) { throw new InvalidParameterValueException("Unable to found specified Site to Site VPN gateway " + vpnGatewayId + " !"); } _accountMgr.checkAccess(caller, null, false, vpnGateway); - + if (customerGateway.getAccountId() != vpnGateway.getAccountId() || customerGateway.getDomainId() != vpnGateway.getDomainId()) { throw new InvalidParameterValueException("VPN connection can only be esitablished between same account's VPN gateway and customer gateway!"); } @@ -276,7 +275,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { } String[] cidrList = customerGateway.getGuestCidrList().split(","); - + // Remote sub nets cannot overlap VPC's sub net String vpcCidr = _vpcDao.findById(vpnGateway.getVpcId()).getCidr(); for (String cidr : cidrList) { @@ -285,7 +284,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { vpcCidr + "!"); } } - + // We also need to check if the new connection's remote CIDR is overlapped with existed connections List conns = _vpnConnectionDao.listByVpnGatewayId(vpnGatewayId); if (conns.size() >= _connLimit) { @@ -328,9 +327,8 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { conn.setState(State.Pending); _vpnConnectionDao.persist(conn); - List elements = _networkMgr.getSite2SiteVpnElements(); boolean result = true; - for (Site2SiteVpnServiceProvider element : elements) { + for (Site2SiteVpnServiceProvider element : _s2sProviders) { result = result & element.startSite2SiteVpn(conn); } @@ -364,7 +362,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { throw new InvalidParameterValueException("Fail to find customer gateway with " + id + " !"); } _accountMgr.checkAccess(caller, null, false, customerGateway); - + return doDeleteCustomerGateway(customerGateway); } @@ -385,7 +383,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { } _vpnGatewayDao.remove(gw.getId()); } - + @Override @ActionEvent(eventType = EventTypes.EVENT_S2S_VPN_GATEWAY_DELETE, eventDescription = "deleting s2s vpn gateway", create=true) public boolean deleteVpnGateway(DeleteVpnGatewayCmd cmd) { @@ -397,7 +395,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { if (vpnGateway == null) { throw new InvalidParameterValueException("Fail to find vpn gateway with " + id + " !"); } - + _accountMgr.checkAccess(caller, null, false, vpnGateway); doDeleteVpnGateway(vpnGateway); @@ -504,7 +502,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { if (conn == null) { throw new InvalidParameterValueException("Fail to find site to site VPN connection " + id + " to delete!"); } - + _accountMgr.checkAccess(caller, null, false, conn); if (conn.getState() == State.Connected) { @@ -527,10 +525,9 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { conn.setState(State.Disconnected); _vpnConnectionDao.persist(conn); - - List elements = _networkMgr.getSite2SiteVpnElements(); + boolean result = true; - for (Site2SiteVpnServiceProvider element : elements) { + for (Site2SiteVpnServiceProvider element : _s2sProviders) { result = result & element.stopSite2SiteVpn(conn); } @@ -577,7 +574,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { boolean listAll = cmd.listAll(); long startIndex = cmd.getStartIndex(); long pageSizeVal = cmd.getPageSizeVal(); - + Account caller = UserContext.current().getCaller(); List permittedAccounts = new ArrayList(); @@ -609,14 +606,14 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { public Pair, Integer> searchForVpnGateways(ListVpnGatewaysCmd cmd) { Long id = cmd.getId(); Long vpcId = cmd.getVpcId(); - + Long domainId = cmd.getDomainId(); boolean isRecursive = cmd.isRecursive(); String accountName = cmd.getAccountName(); boolean listAll = cmd.listAll(); long startIndex = cmd.getStartIndex(); long pageSizeVal = cmd.getPageSizeVal(); - + Account caller = UserContext.current().getCaller(); List permittedAccounts = new ArrayList(); @@ -637,10 +634,10 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { SearchCriteria sc = sb.create(); _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); - if (id != null) { + if (id != null) { sc.addAnd("id", SearchCriteria.Op.EQ, id); } - + if (vpcId != null) { sc.addAnd("vpcId", SearchCriteria.Op.EQ, vpcId); } @@ -660,7 +657,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { boolean listAll = cmd.listAll(); long startIndex = cmd.getStartIndex(); long pageSizeVal = cmd.getPageSizeVal(); - + Account caller = UserContext.current().getCaller(); List permittedAccounts = new ArrayList(); @@ -676,7 +673,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); - + if (vpcId != null) { SearchBuilder gwSearch = _vpnGatewayDao.createSearchBuilder(); gwSearch.and("vpcId", gwSearch.entity().getVpcId(), SearchCriteria.Op.EQ); @@ -689,7 +686,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { if (id != null) { sc.addAnd("id", SearchCriteria.Op.EQ, id); } - + if (vpcId != null) { sc.setJoinParameters("gwSearch", "vpcId", vpcId); } @@ -716,7 +713,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { doDeleteVpnGateway(gw); return true; } - + @Override @DB public void markDisconnectVpnConnByVpc(long vpcId) { diff --git a/server/src/com/cloud/offerings/NetworkOfferingVO.java b/server/src/com/cloud/offerings/NetworkOfferingVO.java index 8de93d87b54..efaca764020 100755 --- a/server/src/com/cloud/offerings/NetworkOfferingVO.java +++ b/server/src/com/cloud/offerings/NetworkOfferingVO.java @@ -16,26 +16,10 @@ // under the License. package com.cloud.offerings; -import com.cloud.network.Networks; - -import java.util.Date; -import java.util.UUID; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -import org.apache.cloudstack.api.Identity; import com.cloud.network.Network; import com.cloud.network.Networks.TrafficType; import com.cloud.offering.NetworkOffering; import com.cloud.utils.db.GenericDao; -import org.apache.cloudstack.api.InternalIdentity; import javax.persistence.*; import java.util.Date; @@ -129,9 +113,6 @@ public class NetworkOfferingVO implements NetworkOffering { @Column(name = "elastic_lb_service") boolean elasticLb; - @Column(name = "eip_associate_public_ip") - boolean eipAssociatePublicIp; - @Column(name = "inline") boolean inline; @@ -295,21 +276,19 @@ public class NetworkOfferingVO implements NetworkOffering { this.redundantRouter = false; this.elasticIp = false; this.elasticLb = false; - this.eipAssociatePublicIp = true; this.inline = false; this.specifyIpRanges = specifyIpRanges; } public NetworkOfferingVO(String name, String displayText, TrafficType trafficType, boolean systemOnly, boolean specifyVlan, Integer rateMbps, Integer multicastRateMbps, boolean isDefault, Availability availability, String tags, Network.GuestType guestType, boolean conserveMode, boolean dedicatedLb, boolean sharedSourceNat, boolean redundantRouter, boolean elasticIp, boolean elasticLb, - boolean associatePublicIP, boolean specifyIpRanges, boolean inline) { + boolean specifyIpRanges, boolean inline) { this(name, displayText, trafficType, systemOnly, specifyVlan, rateMbps, multicastRateMbps, isDefault, availability, tags, guestType, conserveMode, specifyIpRanges); this.dedicatedLB = dedicatedLb; this.sharedSourceNat = sharedSourceNat; this.redundantRouter = redundantRouter; this.elasticIp = elasticIp; this.elasticLb = elasticLb; - this.eipAssociatePublicIp = associatePublicIP; this.inline = inline; } @@ -372,11 +351,6 @@ public class NetworkOfferingVO implements NetworkOffering { return elasticIp; } - @Override - public boolean getAssociatePublicIP() { - return eipAssociatePublicIp; - } - @Override public boolean getElasticLb() { return elasticLb; diff --git a/server/src/com/cloud/resource/DiscovererBase.java b/server/src/com/cloud/resource/DiscovererBase.java index 3d45799998a..940608c4419 100644 --- a/server/src/com/cloud/resource/DiscovererBase.java +++ b/server/src/com/cloud/resource/DiscovererBase.java @@ -33,8 +33,7 @@ import com.cloud.dc.ClusterVO; import com.cloud.dc.dao.ClusterDao; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; -import com.cloud.network.NetworkManager; - +import com.cloud.network.NetworkModel; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.net.UrlUtil; @@ -43,28 +42,28 @@ public abstract class DiscovererBase extends AdapterBase implements Discoverer { private static final Logger s_logger = Logger.getLogger(DiscovererBase.class); @Inject protected ClusterDao _clusterDao; @Inject protected ConfigurationDao _configDao; - @Inject protected NetworkManager _networkMgr; + @Inject protected NetworkModel _networkMgr; @Inject protected HostDao _hostDao; - + @Override public boolean configure(String name, Map params) throws ConfigurationException { _params = _configDao.getConfiguration(params); - + return true; } - + protected Map resolveInputParameters(URL url) { Map params = UrlUtil.parseQueryParameters(url); - + return null; } - + @Override public void putParam(Map params) { - if (_params == null) { - _params = new HashMap(); - } - _params.putAll(params); + if (_params == null) { + _params = new HashMap(); + } + _params.putAll(params); } @Override @@ -76,7 +75,7 @@ public abstract class DiscovererBase extends AdapterBase implements Discoverer { public boolean stop() { return true; } - + protected ServerResource getResource(String resourceName){ ServerResource resource = null; try { @@ -98,10 +97,10 @@ public abstract class DiscovererBase extends AdapterBase implements Discoverer { } catch (InvocationTargetException e) { s_logger.warn("InvocationTargetException error on " + resourceName, e); } - + return resource; } - + protected HashMap buildConfigParams(HostVO host){ HashMap params = new HashMap(host.getDetails().size() + 5); params.putAll(host.getDetails()); @@ -132,16 +131,16 @@ public abstract class DiscovererBase extends AdapterBase implements Discoverer { return params; } - + @Override public ServerResource reloadResource(HostVO host) { String resourceName = host.getResource(); ServerResource resource = getResource(resourceName); - + if(resource != null){ _hostDao.loadDetails(host); updateNetworkLabels(host); - + HashMap params = buildConfigParams(host); try { resource.configure(host.getName(), params); @@ -156,18 +155,18 @@ public abstract class DiscovererBase extends AdapterBase implements Discoverer { } return resource; } - + private void updateNetworkLabels(HostVO host){ //check if networkLabels need to be updated in details //we send only private and storage network label to the resource. String privateNetworkLabel = _networkMgr.getDefaultManagementTrafficLabel(host.getDataCenterId(), host.getHypervisorType()); String storageNetworkLabel = _networkMgr.getDefaultStorageTrafficLabel(host.getDataCenterId(), host.getHypervisorType()); - + String privateDevice = host.getDetail("private.network.device"); String storageDevice = host.getDetail("storage.network.device1"); - + boolean update = false; - + if(privateNetworkLabel != null && !privateNetworkLabel.equalsIgnoreCase(privateDevice)){ host.setDetail("private.network.device", privateNetworkLabel); update = true; diff --git a/server/src/com/cloud/resource/DummyHostServerResource.java b/server/src/com/cloud/resource/DummyHostServerResource.java index 5144a91a3ec..d300f6b71ea 100644 --- a/server/src/com/cloud/resource/DummyHostServerResource.java +++ b/server/src/com/cloud/resource/DummyHostServerResource.java @@ -91,7 +91,7 @@ public class DummyHostServerResource extends ServerResourceBase { cmd.setPublicIpAddress(getHostStoragePrivateIp()); cmd.setPublicMacAddress(getHostStorageMacAddress().toString()); cmd.setPublicNetmask("255.255.0.0"); - cmd.setVersion("1.0"); + cmd.setVersion(DummyHostServerResource.class.getPackage().getImplementationVersion()); return new StartupCommand[] {cmd}; } diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index 561cddcd297..0cc00aa3803 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -2099,6 +2099,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, host.setTotalMemory(ssCmd.getMemory()); host.setSpeed(ssCmd.getSpeed()); host.setHypervisorType(hyType); + host.setHypervisorVersion(ssCmd.getHypervisorVersion()); return host; } diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index ba01c62f1cc..d7c0a3c00dc 100755 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -263,7 +263,7 @@ public class ConfigurationServerImpl implements ConfigurationServer { // Set init to true _configDao.update("init", "Hidden", "true"); - + // invalidate cache in DAO as we have changed DB status _configDao.invalidateCache(); } @@ -351,8 +351,8 @@ public class ConfigurationServerImpl implements ConfigurationServer { } // now insert the user - insertSql = "INSERT INTO `cloud`.`user` (id, uuid, username, account_id, firstname, lastname, created, state) " + - "VALUES (" + id + ", UUID(), '" + username + "', 2, '" + firstname + "','" + lastname + "',now(), 'disabled')"; + insertSql = "INSERT INTO `cloud`.`user` (id, username, password, account_id, firstname, lastname, created, state) " + + "VALUES (" + id + ",'" + username + "', RAND(), 2, '" + firstname + "','" + lastname + "',now(), 'disabled')"; txn = Transaction.currentTxn(); try { @@ -558,7 +558,7 @@ public class ConfigurationServerImpl implements ConfigurationServer { String username = System.getProperty("user.name"); Boolean devel = Boolean.valueOf(_configDao.getValue("developer")); - if (!username.equalsIgnoreCase("cloud") || !devel) { + if (!username.equalsIgnoreCase("cloud") && !devel) { s_logger.warn("Systemvm keypairs could not be set. Management server should be run as cloud user, or in development mode."); return; } @@ -981,7 +981,7 @@ public class ConfigurationServerImpl implements ConfigurationServer { "Offering for Shared networks with Elastic IP and Elastic LB capabilities", TrafficType.Guest, false, true, null, null, true, Availability.Optional, - null, Network.GuestType.Shared, true, false, false, false, true, true, true, true, false); + null, Network.GuestType.Shared, true, false, false, false, true, true, true, false); defaultNetscalerNetworkOffering.setState(NetworkOffering.State.Enabled); defaultNetscalerNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultNetscalerNetworkOffering); diff --git a/server/src/com/cloud/server/ManagementServerExtImpl.java b/server/src/com/cloud/server/ManagementServerExtImpl.java index ed05395d45c..c9ef91d272d 100644 --- a/server/src/com/cloud/server/ManagementServerExtImpl.java +++ b/server/src/com/cloud/server/ManagementServerExtImpl.java @@ -208,9 +208,9 @@ public class ManagementServerExtImpl extends ManagementServerImpl implements Man } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "commands.properties", "commands-ext.properties" }); + public List> getCommands() { + //TODO: Add api cmd classes + return null; } private Date computeAdjustedTime(Date initialDate, TimeZone targetTZ, boolean adjustToDayStart) { diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index baefcfd798e..342a2300a53 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -53,6 +53,7 @@ import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd; import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd; import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd; import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd; +import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd; import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd; @@ -220,7 +221,6 @@ import com.cloud.utils.EnumUtils; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.PasswordGenerator; -import com.cloud.utils.PropertiesUtil; import com.cloud.utils.Ternary; import com.cloud.utils.component.Adapter; import com.cloud.utils.component.ComponentContext; @@ -380,13 +380,13 @@ public class ManagementServerImpl implements ManagementServer { @Inject ComponentContext _forceContextRef; // create a dependency to ComponentContext so that it can be loaded beforehead - + @Inject EventUtils _forceEventUtilsRef; @Inject CloudStackComponentComposer _componentRegistry; - + private final ScheduledExecutorService _eventExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("EventChecker")); private KeystoreManager _ksMgr; @@ -397,7 +397,7 @@ public class ManagementServerImpl implements ManagementServer { @Inject List _userAuthenticators; private String _hashKey = null; - + public ManagementServerImpl() { } @@ -452,7 +452,7 @@ public class ManagementServerImpl implements ManagementServer { Map daos = ComponentContext.getApplicationContext().getBeansOfType( GenericDaoBase.class); - Map params = new HashMap(); + Map params = new HashMap(); for (GenericDaoBase dao : daos.values()) { try { s_logger.info("Starting dao " + ComponentContext.getTargetClass(dao).getName()); @@ -465,12 +465,12 @@ public class ManagementServerImpl implements ManagementServer { } private void startManagers() { - Map params = new HashMap(); - - for(Manager manager : _componentRegistry.getManagers()) { - s_logger.info("Start manager: " + ComponentContext.getTargetClass(manager).getName() + "..."); - try { - if(!manager.configure(manager.getClass().getSimpleName(), params)) { + Map params = new HashMap(); + + for(Manager manager : _componentRegistry.getManagers()) { + s_logger.info("Start manager: " + ComponentContext.getTargetClass(manager).getName() + "..."); + try { + if(!manager.configure(manager.getClass().getSimpleName(), params)) { throw new CloudRuntimeException("Failed to start manager: " + ComponentContext.getTargetClass(manager).getName()); } @@ -489,19 +489,19 @@ public class ManagementServerImpl implements ManagementServer { } private void startAdapters() { - @SuppressWarnings("rawtypes") - Map adapters = ComponentContext.getApplicationContext().getBeansOfType( - Adapter.class); - - Map params = new HashMap(); - - for(Adapter adapter : adapters.values()) { - try { - // we also skip Adapter class that is both a manager class and a adapter class - if(Manager.class.isAssignableFrom(ComponentContext.getTargetClass(adapter))) - continue; - - if(!adapter.configure(adapter.getName(), params)) { + @SuppressWarnings("rawtypes") + Map adapters = ComponentContext.getApplicationContext().getBeansOfType( + Adapter.class); + + Map params = new HashMap(); + + for(Adapter adapter : adapters.values()) { + try { + // we also skip Adapter class that is both a manager class and a adapter class + if(Manager.class.isAssignableFrom(ComponentContext.getTargetClass(adapter))) + continue; + + if(!adapter.configure(adapter.getName(), params)) { throw new CloudRuntimeException("Failed to start adapter: " + ComponentContext.getTargetClass(adapter).getName()); } if (!adapter.start()) { @@ -860,7 +860,6 @@ public class ManagementServerImpl implements ManagementServer { sc.addAnd("vm_type", SearchCriteria.Op.EQ, vmTypeStr); } - sc.addAnd("systemUse", SearchCriteria.Op.EQ, isSystem); sc.addAnd("removed", SearchCriteria.Op.NULL); return _offeringsDao.search(sc, searchFilter); @@ -1017,7 +1016,25 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public Pair, List> listHostsForMigrationOfVM(Long vmId, Long startIndex, Long pageSize) { + public Pair, Integer> searchForServers(ListHostsCmd cmd) { + + Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId()); + Object name = cmd.getHostName(); + Object type = cmd.getType(); + Object state = cmd.getState(); + Object pod = cmd.getPodId(); + Object cluster = cmd.getClusterId(); + Object id = cmd.getId(); + Object keyword = cmd.getKeyword(); + Object resourceState = cmd.getResourceState(); + Object haHosts = cmd.getHaHost(); + + Pair, Integer> result = searchForServers(cmd.getStartIndex(), cmd.getPageSizeVal(), name, type, state, zoneId, pod, cluster, id, keyword, resourceState, haHosts); + return new Pair, Integer>(result.first(), result.second()); + } + + @Override + public Pair, Integer>, List> listHostsForMigrationOfVM(Long vmId, Long startIndex, Long pageSize) { // access check - only root admin can migrate VM Account caller = UserContext.current().getCaller(); if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN) { @@ -1076,10 +1093,12 @@ public class ManagementServerImpl implements ManagementServer { s_logger.debug("Searching for all hosts in cluster: " + cluster + " for migrating VM " + vm); } - List allHostsInCluster = searchForServers(startIndex, pageSize, null, hostType, null, null, null, cluster, null, null, null, - null); + Pair, Integer> allHostsInClusterPair = searchForServers(startIndex, pageSize, null, hostType, null, null, null, cluster, null, null, null, null); + // filter out the current host + List allHostsInCluster = allHostsInClusterPair.first(); allHostsInCluster.remove(srcHost); + Pair, Integer> otherHostsInCluster = new Pair, Integer>(allHostsInCluster, new Integer(allHostsInClusterPair.second().intValue()-1)); if (s_logger.isDebugEnabled()) { s_logger.debug("Other Hosts in this cluster: " + allHostsInCluster); @@ -1112,11 +1131,11 @@ public class ManagementServerImpl implements ManagementServer { } } - return new Pair, List>(allHostsInCluster, suitableHosts); + return new Pair, Integer>, List>(otherHostsInCluster, suitableHosts); } - private List searchForServers(Long startIndex, Long pageSize, Object name, Object type, Object state, Object zone, Object pod, - Object cluster, Object id, Object keyword, Object resourceState, Object haHosts) { + private Pair, Integer> searchForServers(Long startIndex, Long pageSize, Object name, Object type, Object state, Object zone, Object pod, Object cluster, Object id, Object keyword, + Object resourceState, Object haHosts) { Filter searchFilter = new Filter(HostVO.class, "id", Boolean.TRUE, startIndex, pageSize); SearchBuilder sb = _hostDao.createSearchBuilder(); @@ -1186,7 +1205,7 @@ public class ManagementServerImpl implements ManagementServer { sc.setJoinParameters("hostTagSearch", "tag", haTag); } - return _hostDao.search(sc, searchFilter); + return _hostDao.searchAndCount(sc, searchFilter); } @Override @@ -2393,9 +2412,9 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "commands.properties" }); + public List> getCommands() { + //TODO: Add cmd classes + return null; } protected class EventPurgeTask implements Runnable { diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index bff76b98da1..3d3bb0d1947 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -50,6 +50,7 @@ import org.apache.cloudstack.api.command.admin.storage.DeletePoolCmd; import org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd; import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -73,6 +74,8 @@ import com.cloud.agent.api.storage.CreateCommand; import com.cloud.agent.api.storage.DeleteTemplateCommand; import com.cloud.agent.api.storage.DeleteVolumeCommand; import com.cloud.agent.api.storage.DestroyCommand; +import com.cloud.agent.api.storage.ResizeVolumeCommand; +import com.cloud.agent.api.storage.ResizeVolumeAnswer; import com.cloud.agent.api.to.StorageFilerTO; import com.cloud.agent.api.to.VolumeTO; import com.cloud.agent.manager.Commands; @@ -124,7 +127,7 @@ import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.HypervisorGuruManager; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.offering.ServiceOffering; import com.cloud.org.Grouping; import com.cloud.org.Grouping.AllocationState; @@ -233,7 +236,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag @Inject protected SecondaryStorageVmManager _secStorageMgr; @Inject - protected NetworkManager _networkMgr; + protected NetworkModel _networkMgr; @Inject protected VolumeDao _volsDao; @Inject @@ -2089,6 +2092,183 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag } } + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_VOLUME_RESIZE, eventDescription = "resizing volume", async = true) + public VolumeVO resizeVolume(ResizeVolumeCmd cmd) { + VolumeVO volume = _volsDao.findById(cmd.getEntityId()); + Long newSize = null; + boolean shrinkOk = cmd.getShrinkOk(); + boolean success = false; + DiskOfferingVO diskOffering = _diskOfferingDao.findById(volume.getDiskOfferingId()); + DiskOfferingVO newDiskOffering = null; + + newDiskOffering = _diskOfferingDao.findById(cmd.getNewDiskOfferingId()); + + /* Volumes with no hypervisor have never been assigned, and can be resized by recreating. + perhaps in the future we can just update the db entry for the volume */ + if(_volsDao.getHypervisorType(volume.getId()) == HypervisorType.None){ + throw new InvalidParameterValueException("Can't resize a volume that has never been attached, not sure which hypervisor type. Recreate volume to resize."); + } + + /* Only works for KVM/Xen for now */ + if(_volsDao.getHypervisorType(volume.getId()) != HypervisorType.KVM + && _volsDao.getHypervisorType(volume.getId()) != HypervisorType.XenServer){ + throw new InvalidParameterValueException("Cloudstack currently only supports volumes marked as KVM or XenServer hypervisor for resize"); + } + + if (volume == null) { + throw new InvalidParameterValueException("No such volume"); + } + + if (volume.getState() != Volume.State.Ready) { + throw new InvalidParameterValueException("Volume should be in ready state before attempting a resize"); + } + + if (!volume.getVolumeType().equals(Volume.Type.DATADISK)) { + throw new InvalidParameterValueException("Can only resize DATA volumes"); + } + + /* figure out whether or not a new disk offering or size parameter is required, get the correct size value */ + if (newDiskOffering == null) { + if (diskOffering.isCustomized()) { + newSize = cmd.getSize(); + + if (newSize == null) { + throw new InvalidParameterValueException("new offering is of custom size, need to specify a size"); + } + + newSize = ( newSize << 30 ); + } else { + throw new InvalidParameterValueException("current offering" + volume.getDiskOfferingId() + " cannot be resized, need to specify a disk offering"); + } + } else { + + if (newDiskOffering.getRemoved() != null || !DiskOfferingVO.Type.Disk.equals(newDiskOffering.getType())) { + throw new InvalidParameterValueException("Disk offering ID is missing or invalid"); + } + + if(diskOffering.getTags() != null) { + if(!newDiskOffering.getTags().equals(diskOffering.getTags())){ + throw new InvalidParameterValueException("Tags on new and old disk offerings must match"); + } + } else if (newDiskOffering.getTags() != null ){ + throw new InvalidParameterValueException("There are no tags on current disk offering, new disk offering needs to have no tags"); + } + + if (newDiskOffering.getDomainId() == null) { + // do nothing as offering is public + } else { + _configMgr.checkDiskOfferingAccess(UserContext.current().getCaller(), newDiskOffering); + } + + if (newDiskOffering.isCustomized()) { + newSize = cmd.getSize(); + + if (newSize == null) { + throw new InvalidParameterValueException("new offering is of custom size, need to specify a size"); + } + + newSize = ( newSize << 30 ); + } else { + newSize = newDiskOffering.getDiskSize(); + } + } + + if (newSize == null) { + throw new InvalidParameterValueException("could not detect a size parameter or fetch one from the diskofferingid parameter"); + } + + if (!validateVolumeSizeRange(newSize)) { + throw new InvalidParameterValueException("Requested size out of range"); + } + + /* does the caller have the authority to act on this volume? */ + _accountMgr.checkAccess(UserContext.current().getCaller(), null, true, volume); + + UserVmVO userVm = _userVmDao.findById(volume.getInstanceId()); + + StoragePool pool = _storagePoolDao.findById(volume.getPoolId()); + long currentSize = volume.getSize(); + + /* lets make certain they (think they) know what they're doing if they + want to shrink, by forcing them to provide the shrinkok parameter. This will + be checked again at the hypervisor level where we can see the actual disk size */ + if (currentSize > newSize && !shrinkOk) { + throw new InvalidParameterValueException("Going from existing size of " + currentSize + " to size of " + + newSize + " would shrink the volume, need to sign off by supplying the shrinkok parameter with value of true"); + } + + /* get a list of hosts to send the commands to, try the system the + associated vm is running on first, then the last known place it ran. + If not attached to a userVm, we pass 'none' and resizevolume.sh is + ok with that since it only needs the vm name to live resize */ + long[] hosts = null; + String instanceName = "none"; + if (userVm != null) { + instanceName = userVm.getInstanceName(); + if(userVm.getHostId() != null) { + hosts = new long[] { userVm.getHostId() }; + } else if(userVm.getLastHostId() != null) { + hosts = new long[] { userVm.getLastHostId() }; + } + + /*Xen only works offline, SR does not support VDI.resizeOnline*/ + if(_volsDao.getHypervisorType(volume.getId()) == HypervisorType.XenServer + && ! userVm.getState().equals(State.Stopped)) { + throw new InvalidParameterValueException("VM must be stopped or disk detached in order to resize with the Xen HV"); + } + } + + try { + try { + stateTransitTo(volume, Volume.Event.ResizeRequested); + } catch (NoTransitionException etrans) { + throw new CloudRuntimeException("Unable to change volume state for resize: " + etrans.toString()); + } + + ResizeVolumeCommand resizeCmd = new ResizeVolumeCommand(volume.getPath(), new StorageFilerTO(pool), + currentSize, newSize, shrinkOk, instanceName); + ResizeVolumeAnswer answer = (ResizeVolumeAnswer) sendToPool(pool, hosts, resizeCmd); + + /* need to fetch/store new volume size in database. This value comes from + hypervisor rather than trusting that a success means we have a volume of the + size we requested */ + if (answer != null && answer.getResult()) { + long finalSize = answer.getNewSize(); + s_logger.debug("Resize: volume started at size " + currentSize + " and ended at size " + finalSize); + volume.setSize(finalSize); + if (newDiskOffering != null) { + volume.setDiskOfferingId(cmd.getNewDiskOfferingId()); + } + _volsDao.update(volume.getId(), volume); + + success = true; + return volume; + } else if (answer != null) { + s_logger.debug("Resize: returned '" + answer.getDetails() + "'"); + } + } catch (StorageUnavailableException e) { + s_logger.debug("volume failed to resize: "+e); + return null; + } finally { + if(success) { + try { + stateTransitTo(volume, Volume.Event.OperationSucceeded); + } catch (NoTransitionException etrans) { + throw new CloudRuntimeException("Failed to change volume state: " + etrans.toString()); + } + } else { + try { + stateTransitTo(volume, Volume.Event.OperationFailed); + } catch (NoTransitionException etrans) { + throw new CloudRuntimeException("Failed to change volume state: " + etrans.toString()); + } + } + } + return null; + } + @Override @DB public boolean destroyVolume(VolumeVO volume) throws ConcurrentOperationException { diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index 81d8396bafa..90777d6fa74 100755 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -79,11 +79,13 @@ import com.cloud.keystore.KeystoreManager; import com.cloud.network.IPAddressVO; import com.cloud.network.Network; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.NetworkDao; import com.cloud.network.rules.RulesManager; +import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; @@ -193,7 +195,9 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V @Inject protected SwiftManager _swiftMgr; @Inject - private NetworkManager _networkMgr; + protected NetworkManager _networkMgr; + @Inject + protected NetworkModel _networkModel; @Inject protected SnapshotDao _snapshotDao; @@ -384,7 +388,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V allowedCidrs.add(cidr); } } - List nics = _networkMgr.getNicsForTraffic(secStorageVm.getId(), TrafficType.Management); + List nics = _networkModel.getNicsForTraffic(secStorageVm.getId(), TrafficType.Management); setupCmd.setAllowedInternalSites(allowedCidrs.toArray(new String[allowedCidrs.size()])); } String copyPasswd = _configDao.getValue("secstorage.copy.password"); @@ -551,14 +555,14 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V NetworkVO defaultNetwork = defaultNetworks.get(0); - List offerings = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork, NetworkOfferingVO.SystemManagementNetwork, NetworkOfferingVO.SystemStorageNetwork); + List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork, NetworkOfferingVO.SystemManagementNetwork, NetworkOfferingVO.SystemStorageNetwork); List> networks = new ArrayList>(offerings.size() + 1); NicProfile defaultNic = new NicProfile(); defaultNic.setDefaultNic(true); defaultNic.setDeviceId(2); try { networks.add(new Pair(_networkMgr.setupNetwork(systemAcct, _networkOfferingDao.findById(defaultNetwork.getNetworkOfferingId()), plan, null, null, false).get(0), defaultNic)); - for (NetworkOfferingVO offering : offerings) { + for (NetworkOffering offering : offerings) { networks.add(new Pair(_networkMgr.setupNetwork(systemAcct, offering, plan, null, null, false).get(0), null)); } } catch (ConcurrentOperationException e) { diff --git a/server/src/com/cloud/upgrade/dao/Upgrade40to41.java b/server/src/com/cloud/upgrade/dao/Upgrade40to41.java index e23837d49f8..cd9e20c6a46 100644 --- a/server/src/com/cloud/upgrade/dao/Upgrade40to41.java +++ b/server/src/com/cloud/upgrade/dao/Upgrade40to41.java @@ -22,12 +22,6 @@ import com.cloud.utils.script.Script; import java.io.File; import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; - -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.script.Script; /** * @author htrippaers @@ -84,7 +78,7 @@ public class Upgrade40to41 implements DbUpgrade { */ @Override public void performDataMigration(Connection conn) { - upgradeEIPNetworkOfferings(conn); + } /* (non-Javadoc) @@ -95,36 +89,4 @@ public class Upgrade40to41 implements DbUpgrade { return new File[0]; } - private void upgradeEIPNetworkOfferings(Connection conn) { - PreparedStatement pstmt = null; - ResultSet rs = null; - - try { - pstmt = conn.prepareStatement("select id, elastic_ip_service from `cloud`.`network_offerings` where traffic_type='Guest'"); - rs = pstmt.executeQuery(); - while (rs.next()) { - long id = rs.getLong(1); - // check if elastic IP service is enabled for network offering - if (rs.getLong(2) != 0) { - //update network offering with eip_associate_public_ip set to true - pstmt = conn.prepareStatement("UPDATE `cloud`.`network_offerings` set eip_associate_public_ip=? where id=?"); - pstmt.setBoolean(1, true); - pstmt.setLong(2, id); - pstmt.executeUpdate(); - } - } - } catch (SQLException e) { - throw new CloudRuntimeException("Unable to set elastic_ip_service for network offerings with EIP service enabled.", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } - } - } } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java old mode 100755 new mode 100644 index ac14e77c510..4139013676d --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -126,6 +126,7 @@ import com.cloud.network.Network; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetwork; @@ -280,6 +281,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager @Inject protected HostPodDao _podDao = null; @Inject + protected NetworkModel _networkModel = null; + @Inject protected NetworkManager _networkMgr = null; @Inject protected StorageManager _storageMgr = null; @@ -469,28 +472,19 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager VMTemplateVO template = _templateDao .findByIdIncludingRemoved(vmInstance.getTemplateId()); if (template.getEnablePassword()) { - Nic defaultNic = _networkMgr.getDefaultNic(vmId); + Nic defaultNic = _networkModel.getDefaultNic(vmId); if (defaultNic == null) { s_logger.error("Unable to reset password for vm " + vmInstance + " as the instance doesn't have default nic"); return false; } - Network defaultNetwork = _networkDao.findById(defaultNic - .getNetworkId()); - NicProfile defaultNicProfile = new NicProfile(defaultNic, - defaultNetwork, null, null, null, - _networkMgr - .isSecurityGroupSupportedInNetwork(defaultNetwork), - _networkMgr.getNetworkTag(template.getHypervisorType(), - defaultNetwork)); - VirtualMachineProfile vmProfile = new VirtualMachineProfileImpl( - vmInstance); - vmProfile.setParameter(VirtualMachineProfile.Param.VmPassword, - password); + Network defaultNetwork = _networkDao.findById(defaultNic.getNetworkId()); + NicProfile defaultNicProfile = new NicProfile(defaultNic, defaultNetwork, null, null, null, _networkModel.isSecurityGroupSupportedInNetwork(defaultNetwork), _networkModel.getNetworkTag(template.getHypervisorType(), defaultNetwork)); + VirtualMachineProfile vmProfile = new VirtualMachineProfileImpl(vmInstance); + vmProfile.setParameter(VirtualMachineProfile.Param.VmPassword, password); - UserDataServiceProvider element = _networkMgr - .getPasswordResetProvider(defaultNetwork); + UserDataServiceProvider element = _networkMgr.getPasswordResetProvider(defaultNetwork); if (element == null) { throw new CloudRuntimeException( "Can't find network element for " @@ -2203,7 +2197,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager private boolean updateUserDataInternal(UserVm vm) throws ResourceUnavailableException, InsufficientCapacityException { VMTemplateVO template = _templateDao.findByIdIncludingRemoved(vm.getTemplateId()); - Nic defaultNic = _networkMgr.getDefaultNic(vm.getId()); + Nic defaultNic = _networkModel.getDefaultNic(vm.getId()); if (defaultNic == null) { s_logger.error("Unable to update userdata for vm id=" + vm.getId() + " as the instance doesn't have default nic"); return false; @@ -2211,12 +2205,12 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager Network defaultNetwork = _networkDao.findById(defaultNic.getNetworkId()); NicProfile defaultNicProfile = new NicProfile(defaultNic, defaultNetwork, null, null, null, - _networkMgr.isSecurityGroupSupportedInNetwork(defaultNetwork), - _networkMgr.getNetworkTag(template.getHypervisorType(), defaultNetwork)); + _networkModel.isSecurityGroupSupportedInNetwork(defaultNetwork), + _networkModel.getNetworkTag(template.getHypervisorType(), defaultNetwork)); VirtualMachineProfile vmProfile = new VirtualMachineProfileImpl((VMInstanceVO)vm); - UserDataServiceProvider element = _networkMgr.getUserDataUpdateProvider(defaultNetwork); + UserDataServiceProvider element = _networkModel.getUserDataUpdateProvider(defaultNetwork); if (element == null) { throw new CloudRuntimeException("Can't find network element for " + Service.UserData.getName() + " provider needed for UserData update"); } @@ -2482,8 +2476,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager _accountMgr.checkAccess(caller, null, true, owner); // Get default guest network in Basic zone - Network defaultNetwork = _networkMgr.getExclusiveGuestNetwork(zone - .getId()); + Network defaultNetwork = _networkModel.getExclusiveGuestNetwork(zone.getId()); if (defaultNetwork == null) { throw new InvalidParameterValueException( @@ -2495,14 +2488,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager boolean isVmWare = (template.getHypervisorType() == HypervisorType.VMware || (hypervisor != null && hypervisor == HypervisorType.VMware)); if (securityGroupIdList != null && isVmWare) { - throw new InvalidParameterValueException( - "Security group feature is not supported for vmWare hypervisor"); - } else if (!isVmWare - && _networkMgr - .isSecurityGroupSupportedInNetwork(defaultNetwork) - && _networkMgr.canAddDefaultSecurityGroup()) { - // add the default securityGroup only if no security group is - // specified + throw new InvalidParameterValueException("Security group feature is not supported for vmWare hypervisor"); + } else if (!isVmWare && _networkModel.isSecurityGroupSupportedInNetwork(defaultNetwork) && _networkModel.canAddDefaultSecurityGroup()) { + //add the default securityGroup only if no security group is specified if (securityGroupIdList == null || securityGroupIdList.isEmpty()) { if (securityGroupIdList == null) { securityGroupIdList = new ArrayList(); @@ -2556,15 +2544,14 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager // If no network is specified, find system security group enabled // network if (networkIdList == null || networkIdList.isEmpty()) { - NetworkVO networkWithSecurityGroup = _networkMgr - .getNetworkWithSecurityGroupEnabled(zone.getId()); + Network networkWithSecurityGroup = _networkModel.getNetworkWithSecurityGroupEnabled(zone.getId()); if (networkWithSecurityGroup == null) { throw new InvalidParameterValueException( "No network with security enabled is found in zone id=" + zone.getId()); } - networkList.add(networkWithSecurityGroup); + networkList.add(_networkDao.findById(networkWithSecurityGroup.getId())); isSecurityGroupEnabledNetworkUsed = true; } else if (securityGroupIdList != null @@ -2589,10 +2576,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager + networkIdList.get(0).longValue()); } - if (!_networkMgr.isSecurityGroupSupportedInNetwork(network)) { - throw new InvalidParameterValueException( - "Network is not security group enabled: " - + network.getId()); + if (!_networkModel.isSecurityGroupSupportedInNetwork(network)) { + throw new InvalidParameterValueException("Network is not security group enabled: " + network.getId()); } networkList.add(network); @@ -2609,7 +2594,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager + networkIdList.get(0).longValue()); } - boolean isSecurityGroupEnabled = _networkMgr.isSecurityGroupSupportedInNetwork(network); + boolean isSecurityGroupEnabled = _networkModel.isSecurityGroupSupportedInNetwork(network); if (isSecurityGroupEnabled) { if (networkIdList.size() > 1) { throw new InvalidParameterValueException("Can't create a vm with multiple networks one of" + @@ -2632,10 +2617,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } } - // if network is security group enabled, and no security group is - // specified, then add the default security group automatically - if (isSecurityGroupEnabledNetworkUsed && !isVmWare - && _networkMgr.canAddDefaultSecurityGroup()) { + // if network is security group enabled, and no security group is specified, then add the default security group automatically + if (isSecurityGroupEnabledNetworkUsed && !isVmWare && _networkModel.canAddDefaultSecurityGroup()) { // add the default securityGroup only if no security group is // specified @@ -2712,11 +2695,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (requiredOfferings.get(0).getState() == NetworkOffering.State.Enabled) { // get Virtual networks - List virtualNetworks = _networkMgr.listNetworksForAccount(owner.getId(), zone.getId(), Network.GuestType.Isolated); + List virtualNetworks = _networkModel.listNetworksForAccount(owner.getId(), zone.getId(), Network.GuestType.Isolated); if (virtualNetworks.isEmpty()) { - long physicalNetworkId = _networkMgr.findPhysicalNetworkId( - zone.getId(), requiredOfferings.get(0).getTags(), - requiredOfferings.get(0).getTrafficType()); + long physicalNetworkId = _networkModel.findPhysicalNetworkId(zone.getId(), requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType()); // Validate physical network PhysicalNetwork physicalNetwork = _physicalNetworkDao .findById(physicalNetworkId); @@ -2783,7 +2764,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } - _networkMgr.checkNetworkPermissions(owner, network); + _networkModel.checkNetworkPermissions(owner, network); // don't allow to use system networks NetworkOffering networkOffering = _configMgr @@ -2956,7 +2937,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager networks.add(new Pair(network, profile)); - if (_networkMgr.isSecurityGroupSupportedInNetwork(network)) { + if (_networkModel.isSecurityGroupSupportedInNetwork(network)) { securityGroupEnabled = true; } @@ -3030,12 +3011,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager .listDistinctHostNames(ntwkId); // * verify that there are no duplicates if (hostNames.contains(hostName)) { - throw new InvalidParameterValueException( - "The vm with hostName " - + hostName - + " already exists in the network domain: " - + ntwkDomain + "; network=" - + _networkMgr.getNetwork(ntwkId)); + throw new InvalidParameterValueException("The vm with hostName " + hostName + + " already exists in the network domain: " + ntwkDomain + "; network=" + + _networkModel.getNetwork(ntwkId)); } } } @@ -3423,10 +3401,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (ip != null && ip.getSystem()) { UserContext ctx = UserContext.current(); try { - long networkId = ip.getAssociatedWithNetworkId(); - Network guestNetwork = _networkMgr.getNetwork(networkId); - NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); - assert (offering.getAssociatePublicIP() == true) : "User VM should not have system owned public IP associated with it when offering configured not to associate public IP."; _rulesMgr.disableStaticNat(ip.getId(), ctx.getCaller(), ctx.getCallerUserId(), true); } catch (Exception ex) { s_logger.warn( @@ -3495,10 +3469,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } // check if vm is security group enabled - if (_securityGroupMgr.isVmSecurityGroupEnabled(vmId) - && _securityGroupMgr.getSecurityGroupsForVm(vmId).isEmpty() - && !_securityGroupMgr.isVmMappedToDefaultSecurityGroup(vmId) - && _networkMgr.canAddDefaultSecurityGroup()) { + if (_securityGroupMgr.isVmSecurityGroupEnabled(vmId) && _securityGroupMgr.getSecurityGroupsForVm(vmId).isEmpty() && !_securityGroupMgr.isVmMappedToDefaultSecurityGroup(vmId) && _networkModel.canAddDefaultSecurityGroup()) { // if vm is not mapped to security group, create a mapping if (s_logger.isDebugEnabled()) { s_logger.debug("Vm " @@ -4230,8 +4201,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager List networkList = new ArrayList(); // Get default guest network in Basic zone - Network defaultNetwork = _networkMgr.getExclusiveGuestNetwork(zone - .getId()); + Network defaultNetwork = _networkModel.getExclusiveGuestNetwork(zone.getId()); if (defaultNetwork == null) { throw new InvalidParameterValueException( @@ -4243,12 +4213,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager boolean isVmWare = (template.getHypervisorType() == HypervisorType.VMware); if (securityGroupIdList != null && isVmWare) { - throw new InvalidParameterValueException( - "Security group feature is not supported for vmWare hypervisor"); - } else if (!isVmWare - && _networkMgr - .isSecurityGroupSupportedInNetwork(defaultNetwork) - && _networkMgr.canAddDefaultSecurityGroup()) { + throw new InvalidParameterValueException("Security group feature is not supported for vmWare hypervisor"); + } else if (!isVmWare && _networkModel.isSecurityGroupSupportedInNetwork(defaultNetwork) && _networkModel.canAddDefaultSecurityGroup()) { if (securityGroupIdList == null) { securityGroupIdList = new ArrayList(); } @@ -4328,8 +4294,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager throw ex; } - _networkMgr - .checkNetworkPermissions(newAccount, network); + _networkModel.checkNetworkPermissions(newAccount, network); // don't allow to use system networks NetworkOffering networkOffering = _configMgr @@ -4355,13 +4320,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } if (requiredOfferings.get(0).getState() == NetworkOffering.State.Enabled) { // get Virtual networks - List virtualNetworks = _networkMgr.listNetworksForAccount(newAccount.getId(), zone.getId(), Network.GuestType.Isolated); + List virtualNetworks = _networkModel.listNetworksForAccount(newAccount.getId(), zone.getId(), Network.GuestType.Isolated); if (virtualNetworks.isEmpty()) { - long physicalNetworkId = _networkMgr - .findPhysicalNetworkId(zone.getId(), - requiredOfferings.get(0).getTags(), - requiredOfferings.get(0) - .getTrafficType()); + long physicalNetworkId = _networkModel.findPhysicalNetworkId(zone.getId(), requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType()); // Validate physical network PhysicalNetwork physicalNetwork = _physicalNetworkDao .findById(physicalNetworkId); diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java index 95dc9a66458..45495ad2e2b 100755 --- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -109,6 +109,7 @@ import com.cloud.hypervisor.HypervisorGuru; import com.cloud.hypervisor.HypervisorGuruManager; import com.cloud.network.Network; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.dao.NetworkDao; import com.cloud.offering.ServiceOffering; @@ -168,6 +169,8 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene @Inject protected NetworkManager _networkMgr; @Inject + protected NetworkModel _networkModel; + @Inject protected AgentManager _agentMgr; @Inject protected VMInstanceDao _vmDao; @@ -2154,9 +2157,9 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene VirtualMachineProfile profile = new VirtualMachineProfileImpl(vm); List nics = _nicsDao.listByVmId(profile.getId()); for (NicVO nic : nics) { - Network network = _networkMgr.getNetwork(nic.getNetworkId()); + Network network = _networkModel.getNetwork(nic.getNetworkId()); NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), null, - _networkMgr.isSecurityGroupSupportedInNetwork(network), _networkMgr.getNetworkTag(profile.getHypervisorType(), network)); + _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(profile.getHypervisorType(), network)); profile.addNic(nicProfile); } @@ -2533,13 +2536,13 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene if (broadcastUri != null) { nic = _nicsDao.findByNetworkIdInstanceIdAndBroadcastUri(network.getId(), vm.getId(), broadcastUri.toString()); } else { - nic = _networkMgr.getNicInNetwork(vm.getId(), network.getId()); + nic = _networkModel.getNicInNetwork(vm.getId(), network.getId()); } NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), - _networkMgr.getNetworkRate(network.getId(), vm.getId()), - _networkMgr.isSecurityGroupSupportedInNetwork(network), - _networkMgr.getNetworkTag(vmProfile.getVirtualMachine().getHypervisorType(), network)); + _networkModel.getNetworkRate(network.getId(), vm.getId()), + _networkModel.isSecurityGroupSupportedInNetwork(network), + _networkModel.getNetworkTag(vmProfile.getVirtualMachine().getHypervisorType(), network)); //1) Unplug the nic NicTO nicTO = toNicTO(nicProfile, vmProfile.getVirtualMachine().getHypervisorType()); diff --git a/server/src/com/cloud/vm/dao/NicDao.java b/server/src/com/cloud/vm/dao/NicDao.java index af3c7b379c1..762048b65bf 100644 --- a/server/src/com/cloud/vm/dao/NicDao.java +++ b/server/src/com/cloud/vm/dao/NicDao.java @@ -58,6 +58,4 @@ public interface NicDao extends GenericDao { NicVO findByNetworkIdInstanceIdAndBroadcastUri(long networkId, long instanceId, String broadcastUri); NicVO findByIp4AddressAndNetworkIdAndInstanceId(long networkId, long instanceId, String ip4Address); - - NicVO findByMacAddress(String macAddress); } diff --git a/server/src/com/cloud/vm/dao/NicDaoImpl.java b/server/src/com/cloud/vm/dao/NicDaoImpl.java index 02630d3c665..e09b0abff51 100644 --- a/server/src/com/cloud/vm/dao/NicDaoImpl.java +++ b/server/src/com/cloud/vm/dao/NicDaoImpl.java @@ -53,7 +53,6 @@ public class NicDaoImpl extends GenericDaoBase implements NicDao { AllFieldsSearch.and("address", AllFieldsSearch.entity().getIp4Address(), Op.EQ); AllFieldsSearch.and("isDefault", AllFieldsSearch.entity().isDefaultNic(), Op.EQ); AllFieldsSearch.and("broadcastUri", AllFieldsSearch.entity().getBroadcastUri(), Op.EQ); - AllFieldsSearch.and("macAddress", AllFieldsSearch.entity().getMacAddress(), Op.EQ); AllFieldsSearch.done(); IpSearch = createSearchBuilder(String.class); @@ -203,11 +202,4 @@ public class NicDaoImpl extends GenericDaoBase implements NicDao { sc.setParameters("address", ip4Address); return findOneBy(sc); } - - @Override - public NicVO findByMacAddress(String macAddress) { - SearchCriteria sc = AllFieldsSearch.create(); - sc.setParameters("macAddress", macAddress); - return findOneBy(sc); - } } diff --git a/server/test/com/cloud/alert/MockAlertManagerImpl.java b/server/test/com/cloud/alert/MockAlertManagerImpl.java new file mode 100644 index 00000000000..3f87193d2f1 --- /dev/null +++ b/server/test/com/cloud/alert/MockAlertManagerImpl.java @@ -0,0 +1,87 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.alert; + +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +@Local(value = {AlertManager.class}) +public class MockAlertManagerImpl implements AlertManager { + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#configure(java.lang.String, java.util.Map) + */ + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#start() + */ + @Override + public boolean start() { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#stop() + */ + @Override + public boolean stop() { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#getName() + */ + @Override + public String getName() { + return "MockAlertManagerImpl"; + } + + /* (non-Javadoc) + * @see com.cloud.alert.AlertManager#clearAlert(short, long, long) + */ + @Override + public void clearAlert(short alertType, long dataCenterId, long podId) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.alert.AlertManager#sendAlert(short, long, java.lang.Long, java.lang.String, java.lang.String) + */ + @Override + public void sendAlert(short alertType, long dataCenterId, Long podId, String subject, String body) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.alert.AlertManager#recalculateCapacity() + */ + @Override + public void recalculateCapacity() { + // TODO Auto-generated method stub + + } + +} diff --git a/server/test/com/cloud/network/MockFirewallManagerImpl.java b/server/test/com/cloud/network/MockFirewallManagerImpl.java new file mode 100644 index 00000000000..1a79acf746b --- /dev/null +++ b/server/test/com/cloud/network/MockFirewallManagerImpl.java @@ -0,0 +1,202 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.network; + +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.cloudstack.api.command.user.firewall.ListFirewallRulesCmd; + +import com.cloud.exception.NetworkRuleConflictException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.firewall.FirewallService; +import com.cloud.network.rules.FirewallManager; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.FirewallRule.FirewallRuleType; +import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.user.Account; +import com.cloud.utils.Pair; +import com.cloud.utils.component.Manager; + +@Local(value = {FirewallManager.class, FirewallService.class}) +public class MockFirewallManagerImpl implements FirewallManager, + FirewallService, Manager { + + @Override + public boolean configure(String name, Map params) + throws ConfigurationException { + return true; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + // TODO Auto-generated method stub + return false; + } + + @Override + public String getName() { + // TODO Auto-generated method stub + return null; + } + + @Override + public FirewallRule createFirewallRule(FirewallRule rule) + throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return null; + } + + @Override + public Pair, Integer> listFirewallRules( + ListFirewallRulesCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean revokeFirewallRule(long ruleId, boolean apply) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyFirewallRules(long ipId, Account caller) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public FirewallRule getFirewallRule(long ruleId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean revokeRelatedFirewallRule(long ruleId, boolean apply) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void detectRulesConflict(FirewallRule newRule) + throws NetworkRuleConflictException { + // TODO Auto-generated method stub + + } + + @Override + public void validateFirewallRule(Account caller, IPAddressVO ipAddress, + Integer portStart, Integer portEnd, String proto, Purpose purpose, + FirewallRuleType type) { + // TODO Auto-generated method stub + + } + + @Override + public boolean applyRules(List rules, + boolean continueOnError, boolean updateRulesInDB) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyFirewallRules(List rules, + boolean continueOnError, Account caller) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void revokeRule(FirewallRuleVO rule, Account caller, long userId, + boolean needUsageEvent) { + // TODO Auto-generated method stub + + } + + @Override + public boolean revokeFirewallRulesForIp(long ipId, long userId, + Account caller) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean revokeFirewallRule(long ruleId, boolean apply, + Account caller, long userId) { + // TODO Auto-generated method stub + return false; + } + + @Override + public FirewallRule createFirewallRule(long ipAddrId, Account caller, + String xId, Integer portStart, Integer portEnd, String protocol, + List sourceCidrList, Integer icmpCode, Integer icmpType, + Long relatedRuleId, FirewallRuleType type, long networkId) + throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return null; + } + + @Override + public FirewallRule createRuleForAllCidrs(long ipAddrId, Account caller, + Integer startPort, Integer endPort, String protocol, + Integer icmpCode, Integer icmpType, Long relatedRuleId, + long networkId) throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean revokeAllFirewallRulesForNetwork(long networkId, + long userId, Account caller) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean revokeFirewallRulesForVm(long vmId) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean addSystemFirewallRules(IPAddressVO ip, Account acct) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void removeRule(FirewallRule rule) { + // TODO Auto-generated method stub + + } + + + +} diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index 874e01767a9..ef5b9c9f9b7 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -16,29 +16,35 @@ // under the License. package com.cloud.network; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; + import com.cloud.dc.DataCenter; -import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlan; -import com.cloud.exception.*; -import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.network.Network.Capability; -import com.cloud.network.Network.GuestType; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InsufficientVirtualNetworkCapcityException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; import com.cloud.network.element.LoadBalancingServiceProvider; -import com.cloud.network.element.NetworkElement; -import com.cloud.network.element.RemoteAccessVPNServiceProvider; -import com.cloud.network.element.Site2SiteVpnServiceProvider; import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; @@ -52,14 +58,13 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.utils.Pair; import com.cloud.utils.component.Manager; -import com.cloud.vm.*; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachineProfileImpl; @Local(value = { NetworkManager.class, NetworkService.class }) public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkService { @@ -130,35 +135,6 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public Map> getNetworkCapabilities(long networkId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean isNetworkAvailableInDomain(long networkId, long domainId) { - // TODO Auto-generated method stub - return false; - } - - @Override - public Long getDedicatedNetworkDomain(long networkId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Integer getNetworkRate(long networkId, Long vmId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Network getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - // TODO Auto-generated method stub - return null; - } @Override public boolean configure(String name, Map params) throws ConfigurationException { @@ -189,31 +165,23 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return false; } - @Override - public List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat) { - // TODO Auto-generated method stub - return null; - } + @Override - public List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) + public List setupNetwork(Account owner, NetworkOffering offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) throws ConcurrentOperationException { // TODO Auto-generated method stub return null; } @Override - public List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, + public List setupNetwork(Account owner, NetworkOffering offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException { // TODO Auto-generated method stub return null; } - @Override - public List getSystemAccountNetworkOfferings(String... offeringNames) { - // TODO Auto-generated method stub - return null; - } + @Override public void allocate(VirtualMachineProfile vm, List> networks) throws InsufficientCapacityException, ConcurrentOperationException { @@ -246,42 +214,17 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS } - @Override - public List getNics(long vmId) { - // TODO Auto-generated method stub - return null; - } - + @Override public List getNicProfiles(VirtualMachine vm) { // TODO Auto-generated method stub return null; } - @Override - public String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean applyRules(List rules, boolean continueOnError) throws ResourceUnavailableException { - // TODO Auto-generated method stub - return false; - } - - @Override - public PublicIpAddress getPublicIpAddress(long ipAddressId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public List listPodVlans(long podId) { - // TODO Auto-generated method stub - return null; - } + + + @Override public Pair implementNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { @@ -289,11 +232,6 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public List listNetworksUsedByVm(long vmId, boolean isSystem) { - // TODO Auto-generated method stub - return null; - } @Override public void prepareNicForMigration(VirtualMachineProfile vm, DeployDestination dest) { @@ -321,29 +259,9 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return false; } - @Override - public Nic getNicInNetwork(long vmId, long networkId) { - // TODO Auto-generated method stub - return null; - } + - @Override - public List getNicsForTraffic(long vmId, TrafficType type) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Network getDefaultNetworkForVm(long vmId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Nic getDefaultNic(long vmId) { - // TODO Auto-generated method stub - return null; - } + @Override public boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException { @@ -351,17 +269,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return false; } - @Override - public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { - // TODO Auto-generated method stub - return false; - } - - @Override - public NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId) { - // TODO Auto-generated method stub - return null; - } + @Override public boolean startNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { @@ -369,12 +277,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return false; } - @Override - public String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId) { - // TODO Auto-generated method stub - return null; - } - + @Override public IPAddressVO markIpAsUnavailable(long addrId) { // TODO Auto-generated method stub @@ -387,50 +290,22 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public String getGlobalGuestDomainSuffix() { - // TODO Auto-generated method stub - return null; - } - - @Override - public String getStartIpAddress(long networkId) { - // TODO Auto-generated method stub - return null; - } - + @Override public boolean applyStaticNats(List staticNats, boolean continueOnError) throws ResourceUnavailableException { // TODO Auto-generated method stub return false; } - @Override - public String getIpInNetwork(long vmId, long networkId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public String getIpInNetworkIncludingRemoved(long vmId, long networkId) { - // TODO Auto-generated method stub - return null; - } + public Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId) { return null; } - @Override - public List getRemoteAccessVpnElements() { - return null; - } + - @Override - public boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider) { - // TODO Auto-generated method stub - return false; - } + @Override public PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List isolationMethods, String broadcastDomainRange, Long domainId, List tags, String name) { @@ -462,11 +337,6 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public List listSupportedNetworkServiceProviders(String serviceName) { - // TODO Auto-generated method stub - return null; - } @Override public PhysicalNetworkServiceProvider addProviderToPhysicalNetwork(Long physicalNetworkId, String providerName, Long destinationPhysicalNetworkId, List enabledServices) { @@ -540,72 +410,16 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - // TODO Auto-generated method stub - return null; - } - + @Override public Network getExclusiveGuestNetwork(long zoneId) { // TODO Auto-generated method stub return null; } - @Override - public Long getPodIdForVlan(long vlanDbId) { - // TODO Auto-generated method stub - return null; - } + - @Override - public boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId) { - // TODO Auto-generated method stub - return false; - } - - @Override - public Map getNetworkServiceCapabilities(long networkId, Service service) { - // TODO Auto-generated method stub - return null; - } - - @Override - public List listNetworksForAccount(long accountId, long zoneId, GuestType type) { - // TODO Auto-generated method stub - return null; - } - - @Override - public List listNetworkOfferingsForUpgrade(long networkId) { - // TODO Auto-generated method stub - return null; - } - - - @Override - public boolean isSecurityGroupSupportedInNetwork(Network network) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName) { - // TODO Auto-generated method stub - return false; - } - - @Override - public List getElementServices(Provider provider) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean canElementEnableIndividualServices(Provider provider) { - // TODO Auto-generated method stub - return false; - } + @Override public UserDataServiceProvider getPasswordResetProvider(Network network) { @@ -613,12 +427,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public UserDataServiceProvider getUserDataUpdateProvider(Network network) { - // TODO Auto-generated method stub - return null; - } - + @Override public PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String state, List enabledServices) { // TODO Auto-generated method stub @@ -631,183 +440,139 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public boolean areServicesSupportedInNetwork(long networkId, Service... services) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean isNetworkSystem(Network network) { - // TODO Auto-generated method stub - return false; - } - - @Override - public Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean reallocate(VirtualMachineProfile vm, DataCenterDeployment dest) throws InsufficientCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return false; - } - - @Override - public Long getPhysicalNetworkId(Network network) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean getAllowSubdomainAccessGlobal() { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean isProviderForNetwork(Provider provider, long networkId) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) - throws ConcurrentOperationException, ResourceUnavailableException, - InsufficientCapacityException { - // TODO Auto-generated method stub - return false; - } - - @Override - public String getNetworkTag(HypervisorType hType, Network network) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void canProviderSupportServices( - Map> providersMap) { - // TODO Auto-generated method stub - - } - - @Override - public boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId) { - // TODO Auto-generated method stub - return false; - } - - - @Override - public boolean canAddDefaultSecurityGroup() { - // TODO Auto-generated method stub - return false; - } - - @Override - public List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd) { - // TODO Auto-generated method stub - return null; - } - - @Override - public List listNetworkOfferingServices(long networkOfferingId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services) { - // TODO Auto-generated method stub - return false; - } - - @Override - public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Map> getProviderToIpList(Network network, Map> ipToServices) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean checkIpForService(IPAddressVO ip, Service service, Long networkId) { - // TODO Auto-generated method stub - return false; - } - - + /* (non-Javadoc) - * @see com.cloud.network.NetworkService#isVmPartOfNetwork(long, long) + * @see com.cloud.network.NetworkManager#applyRules(java.util.List, com.cloud.network.rules.FirewallRule.Purpose, com.cloud.network.NetworkRuleApplier, boolean) */ @Override - public boolean isVmPartOfNetwork(long vmId, long ntwkId) { + public boolean applyRules(List rules, Purpose purpose, NetworkRuleApplier applier, + boolean continueOnError) throws ResourceUnavailableException { // TODO Auto-generated method stub return false; } - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultNetworkDomain() + * @see com.cloud.network.NetworkManager#applyIpAssociations(com.cloud.network.Network, boolean, boolean, java.util.List) */ @Override - public String getDefaultNetworkDomain() { + public boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, + List publicIps) throws ResourceUnavailableException { // TODO Auto-generated method stub - return null; + return false; } - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#allocateNic(com.cloud.vm.NicProfile, com.cloud.network.Network, java.lang.Boolean, int, com.cloud.vm.VirtualMachineProfile) + * @see com.cloud.network.NetworkManager#cleanupIpResources(long, long, com.cloud.user.Account) */ @Override - public Pair allocateNic(NicProfile requested, Network network, Boolean isDefaultNic, int deviceId, VirtualMachineProfile vm) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException { + public boolean cleanupIpResources(long addrId, long userId, Account caller) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#restartNetwork(java.lang.Long, com.cloud.user.Account, com.cloud.user.User, boolean) + */ + @Override + public boolean restartNetwork(Long networkId, Account callerAccount, User callerUser, boolean cleanup) + throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#shutdownNetworkElementsAndResources(com.cloud.vm.ReservationContext, boolean, com.cloud.network.NetworkVO) + */ + @Override + public boolean shutdownNetworkElementsAndResources(ReservationContext context, boolean b, NetworkVO network) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#implementNetworkElementsAndResources(com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext, com.cloud.network.NetworkVO, com.cloud.offerings.NetworkOfferingVO) + */ + @Override + public void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, + NetworkVO network, NetworkOfferingVO findById) throws ConcurrentOperationException, + InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocateIp(com.cloud.user.Account, boolean, com.cloud.user.Account, com.cloud.dc.DataCenter) + */ + @Override + public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, long callerId, DataCenter zone) + throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException { // TODO Auto-generated method stub return null; } /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#prepareNic(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext, long, com.cloud.network.NetworkVO) + * @see com.cloud.network.NetworkManager#finalizeServicesAndProvidersForNetwork(com.cloud.offering.NetworkOffering, java.lang.Long) */ @Override - public NicProfile prepareNic(VirtualMachineProfile vmProfile, DeployDestination dest, ReservationContext context, long nicId, NetworkVO network) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + public Map finalizeServicesAndProvidersForNetwork(NetworkOffering offering, Long physicalNetworkId) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listPublicIpsAssignedToAccount(long, long, java.lang.Boolean) + * @see com.cloud.network.NetworkManager#getNicProfileForVm(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.VirtualMachine) */ - @Override - public List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat) { - // TODO Auto-generated method stub + protected NicProfile getNicProfileForVm(Network network, NicProfile requested, VirtualMachine vm) { return null; } /* (non-Javadoc) - * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, long, Long) + * @see com.cloud.network.NetworkManager#getOnePhysicalNetworkByZoneAndTrafficType(long, com.cloud.network.Networks.TrafficType) + */ + protected PhysicalNetwork getOnePhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#getZoneNetworkDomain(long) + */ + protected String getZoneNetworkDomain(long zoneId) { + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#getNicInNetworkIncludingRemoved(long, long) + */ + protected Nic getNicInNetworkIncludingRemoved(long vmId, long networkId) { + return null; + } + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#restartNetwork(com.cloud.api.commands.RestartNetworkCmd, boolean) */ @Override - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { + public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) throws ConcurrentOperationException, + ResourceUnavailableException, InsufficientCapacityException { // TODO Auto-generated method stub - return null; + return false; } /* (non-Javadoc) * @see com.cloud.network.NetworkService#updateGuestNetwork(long, java.lang.String, java.lang.String, com.cloud.user.Account, com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean) */ @Override - public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan, String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId) - throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { + public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, + User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#listTrafficTypeImplementor(com.cloud.api.commands.ListTrafficTypeImplementorsCmd) + */ + @Override + public List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd) { // TODO Auto-generated method stub return null; } @@ -816,27 +581,40 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS * @see com.cloud.network.NetworkService#getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long, com.cloud.user.Account) */ @Override - public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException { + public List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listNetworksByVpc(long) + * @see com.cloud.network.NetworkService#associateIPToNetwork(long, long) */ @Override - public List listNetworksByVpc(long vpcId) { + public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, + ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException { // TODO Auto-generated method stub return null; } /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#validateRule(com.cloud.network.rules.FirewallRule) + * @see com.cloud.network.NetworkService#createPrivateNetwork(java.lang.String, java.lang.String, long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, java.lang.Long) */ @Override - public boolean validateRule(FirewallRule rule) { + public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan, + String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId) + throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { // TODO Auto-generated method stub - return false; + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignPublicIpAddress(long, java.lang.Long, com.cloud.user.Account, com.cloud.dc.Vlan.VlanType, java.lang.Long, java.lang.String, boolean) + */ + @Override + public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner, VlanType type, Long networkId, + String requestedIp, boolean isSystem) throws InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; } /* (non-Javadoc) @@ -849,205 +627,25 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS } /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listAllNetworksInAllZonesByType(com.cloud.network.Network.GuestType) + * @see com.cloud.network.NetworkManager#reallocate(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DataCenterDeployment) */ @Override - public List listAllNetworksInAllZonesByType(GuestType type) { + public boolean reallocate(VirtualMachineProfile vm, DataCenterDeployment dest) + throws InsufficientCapacityException, ConcurrentOperationException { // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPhysicalNetworkInfo(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public List getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#checkCapabilityForProvider(java.util.Set, com.cloud.network.Network.Service, com.cloud.network.Network.Capability, java.lang.String) - */ - @Override - public void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultUniqueProviderForService(java.lang.String) - */ - @Override - public List getNtwkOffDistinctProviders(long ntwkOffId) { - // TODO Auto-generated method stub - return null; + return false; } /* (non-Javadoc) * @see com.cloud.network.NetworkManager#assignSystemIp(long, com.cloud.user.Account, boolean, boolean) */ @Override - public IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) throws InsufficientAddressCapacityException { + public IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) + throws InsufficientAddressCapacityException { // TODO Auto-generated method stub return null; } - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#checkNetworkPermissions(com.cloud.user.Account, com.cloud.network.Network) - */ - @Override - public void checkNetworkPermissions(Account owner, Network network) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#allocateDirectIp(com.cloud.vm.NicProfile, com.cloud.dc.DataCenter, com.cloud.vm.VirtualMachineProfile, com.cloud.network.Network, java.lang.String) - */ - @Override - public void releaseNic(VirtualMachineProfile vmProfile, Nic nic) throws ConcurrentOperationException, ResourceUnavailableException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getElementImplementingProvider(java.lang.String) - */ - @Override - public NetworkElement getElementImplementingProvider(String providerName) { - // TODO Auto-generated method stub - return null; - } - - - @Override - public boolean canUseForDeploy(Network network) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultStorageTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultPublicTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultPublicTrafficLabel(long dcId, HypervisorType vmware) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignSourceNatIpAddressToGuestNetwork(com.cloud.user.Account, com.cloud.network.Network) - */ - @Override - public PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network guestNetwork) throws InsufficientAddressCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#setupDns(com.cloud.network.Network, com.cloud.network.Network.Provider) - */ - @Override - public boolean setupDns(Network network, Provider provider) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPhysicalNtwksSupportingTrafficType(long, com.cloud.network.Networks.TrafficType) - */ - @Override - public List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignPublicIpAddress(long, java.lang.Long, com.cloud.user.Account, com.cloud.dc.Vlan.VlanType, java.lang.Long, java.lang.String, boolean) - */ - @Override - public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner, VlanType type, Long networkId, String requestedIp, boolean isSystem) throws InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getAccountNetworkDomain(long, long) - */ - @Override - public String getAccountNetworkDomain(long accountId, long zoneId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#updateGuestNetwork(long, java.lang.String, java.lang.String, com.cloud.user.Account, com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean) - */ - @Override - public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getSite2SiteVpnElements() - */ - @Override - public List getSite2SiteVpnElements() { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isPrivateGateway(com.cloud.vm.Nic) - */ - @Override - public boolean isPrivateGateway(Nic guestNic) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#allocateDirectIp(com.cloud.vm.NicProfile, com.cloud.dc.DataCenter, com.cloud.vm.VirtualMachineProfile, com.cloud.network.Network, java.lang.String) - */ - @Override - public void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile vm, Network network, String requestedIp) throws InsufficientVirtualNetworkCapcityException, - InsufficientAddressCapacityException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#createNicForVm(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.ReservationContext, com.cloud.vm.VirtualMachineProfileImpl, boolean) - */ - @Override - public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context, VirtualMachineProfileImpl vmProfile, boolean prepare) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultManagementTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) * @see com.cloud.network.NetworkManager#handleSystemIpRelease(com.cloud.network.IpAddress) */ @@ -1057,6 +655,51 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return false; } + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocateDirectIp(com.cloud.vm.NicProfile, com.cloud.dc.DataCenter, com.cloud.vm.VirtualMachineProfile, com.cloud.network.Network, java.lang.String) + */ + @Override + public void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile vm, + Network network, String requestedIp) throws InsufficientVirtualNetworkCapcityException, + InsufficientAddressCapacityException { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignSourceNatIpAddressToGuestNetwork(com.cloud.user.Account, com.cloud.network.Network) + */ + @Override + public PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network guestNetwork) + throws InsufficientAddressCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocateNic(com.cloud.vm.NicProfile, com.cloud.network.Network, java.lang.Boolean, int, com.cloud.vm.VirtualMachineProfile) + */ + @Override + public Pair allocateNic(NicProfile requested, Network network, Boolean isDefaultNic, + int deviceId, VirtualMachineProfile vm) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#prepareNic(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext, long, com.cloud.network.NetworkVO) + */ + @Override + public NicProfile prepareNic(VirtualMachineProfile vmProfile, DeployDestination dest, + ReservationContext context, long nicId, NetworkVO network) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + /* (non-Javadoc) * @see com.cloud.network.NetworkManager#removeNic(com.cloud.vm.VirtualMachineProfile, com.cloud.vm.Nic) */ @@ -1067,19 +710,32 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS } /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultGuestTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) + * @see com.cloud.network.NetworkManager#setupDns(com.cloud.network.Network, com.cloud.network.Network.Provider) */ @Override - public String getDefaultGuestTrafficLabel(long dcId, HypervisorType vmware) { + public boolean setupDns(Network network, Provider provider) { // TODO Auto-generated method stub - return null; + return false; } /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNicProfile(com.cloud.vm.VirtualMachine, long, java.lang.String) + * @see com.cloud.network.NetworkManager#releaseNic(com.cloud.vm.VirtualMachineProfile, com.cloud.vm.Nic) */ @Override - public NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri) { + public void releaseNic(VirtualMachineProfile vmProfile, Nic nic) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#createNicForVm(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.ReservationContext, com.cloud.vm.VirtualMachineProfileImpl, boolean) + */ + @Override + public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context, + VirtualMachineProfileImpl vmProfile, boolean prepare) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { // TODO Auto-generated method stub return null; } @@ -1088,7 +744,8 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS * @see com.cloud.network.NetworkManager#assignVpnGatewayIpAddress(long, com.cloud.user.Account, long) */ @Override - public PublicIp assignVpnGatewayIpAddress(long dcId, Account owner, long vpcId) throws InsufficientAddressCapacityException, ConcurrentOperationException { + public PublicIp assignVpnGatewayIpAddress(long dcId, Account owner, long vpcId) + throws InsufficientAddressCapacityException, ConcurrentOperationException { // TODO Auto-generated method stub return null; } @@ -1106,25 +763,8 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS * @see com.cloud.network.NetworkManager#assignDedicateIpAddress(com.cloud.user.Account, java.lang.Long, java.lang.Long, long, boolean) */ @Override - public PublicIp assignDedicateIpAddress(Account owner, Long guestNtwkId, Long vpcId, long dcId, boolean isSourceNat) throws ConcurrentOperationException, InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long, com.cloud.user.Account) - */ - @Override - public List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultUniqueProviderForService(java.lang.String) - */ - @Override - public Provider getDefaultUniqueProviderForService(String serviceName) { + public PublicIp assignDedicateIpAddress(Account owner, Long guestNtwkId, Long vpcId, long dcId, boolean isSourceNat) + throws ConcurrentOperationException, InsufficientAddressCapacityException { // TODO Auto-generated method stub return null; } @@ -1168,4 +808,14 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS // TODO Auto-generated method stub return null; } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, boolean, long) + */ + @Override + public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, + InsufficientAddressCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } } diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java new file mode 100644 index 00000000000..1771660f86c --- /dev/null +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -0,0 +1,809 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.dc.Vlan; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.Network.Capability; +import com.cloud.network.Network.GuestType; +import com.cloud.network.Network.Provider; +import com.cloud.network.Network.Service; +import com.cloud.network.Networks.TrafficType; +import com.cloud.network.addr.PublicIp; +import com.cloud.network.element.NetworkElement; +import com.cloud.network.element.UserDataServiceProvider; +import com.cloud.network.rules.FirewallRule; +import com.cloud.offering.NetworkOffering; +import com.cloud.offerings.NetworkOfferingVO; +import com.cloud.user.Account; +import com.cloud.utils.component.Manager; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.VirtualMachine; + +@Local(value = {NetworkModel.class}) +public class MockNetworkModelImpl implements NetworkModel, Manager { + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#configure(java.lang.String, java.util.Map) + */ + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#start() + */ + @Override + public boolean start() { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#stop() + */ + @Override + public boolean stop() { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#getName() + */ + @Override + public String getName() { + return "MockNetworkModelImpl"; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listPublicIpsAssignedToGuestNtwk(long, long, java.lang.Boolean) + */ + @Override + public List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, + Boolean sourceNat) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getSystemAccountNetworkOfferings(java.lang.String[]) + */ + @Override + public List getSystemAccountNetworkOfferings(String... offeringNames) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNics(long) + */ + @Override + public List getNics(long vmId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNextAvailableMacAddressInNetwork(long) + */ + @Override + public String getNextAvailableMacAddressInNetwork(long networkConfigurationId) + throws InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getPublicIpAddress(long) + */ + @Override + public PublicIpAddress getPublicIpAddress(long ipAddressId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listPodVlans(long) + */ + @Override + public List listPodVlans(long podId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listNetworksUsedByVm(long, boolean) + */ + @Override + public List listNetworksUsedByVm(long vmId, boolean isSystem) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNicInNetwork(long, long) + */ + @Override + public Nic getNicInNetwork(long vmId, long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNicsForTraffic(long, com.cloud.network.Networks.TrafficType) + */ + @Override + public List getNicsForTraffic(long vmId, TrafficType type) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultNetworkForVm(long) + */ + @Override + public Network getDefaultNetworkForVm(long vmId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultNic(long) + */ + @Override + public Nic getDefaultNic(long vmId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getUserDataUpdateProvider(com.cloud.network.Network) + */ + @Override + public UserDataServiceProvider getUserDataUpdateProvider(Network network) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#networkIsConfiguredForExternalNetworking(long, long) + */ + @Override + public boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkServiceCapabilities(long, com.cloud.network.Network.Service) + */ + @Override + public Map getNetworkServiceCapabilities(long networkId, Service service) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#areServicesSupportedByNetworkOffering(long, com.cloud.network.Network.Service[]) + */ + @Override + public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkWithSecurityGroupEnabled(java.lang.Long) + */ + @Override + public NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getIpOfNetworkElementInVirtualNetwork(long, long) + */ + @Override + public String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listNetworksForAccount(long, long, com.cloud.network.Network.GuestType) + */ + @Override + public List listNetworksForAccount(long accountId, long zoneId, GuestType type) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listAllNetworksInAllZonesByType(com.cloud.network.Network.GuestType) + */ + @Override + public List listAllNetworksInAllZonesByType(GuestType type) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getGlobalGuestDomainSuffix() + */ + @Override + public String getGlobalGuestDomainSuffix() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getStartIpAddress(long) + */ + @Override + public String getStartIpAddress(long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getIpInNetwork(long, long) + */ + @Override + public String getIpInNetwork(long vmId, long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getIpInNetworkIncludingRemoved(long, long) + */ + @Override + public String getIpInNetworkIncludingRemoved(long vmId, long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getPodIdForVlan(long) + */ + @Override + public Long getPodIdForVlan(long vlanDbId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listNetworkOfferingsForUpgrade(long) + */ + @Override + public List listNetworkOfferingsForUpgrade(long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isSecurityGroupSupportedInNetwork(com.cloud.network.Network) + */ + @Override + public boolean isSecurityGroupSupportedInNetwork(Network network) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isProviderSupportServiceInNetwork(long, com.cloud.network.Network.Service, com.cloud.network.Network.Provider) + */ + @Override + public boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isProviderEnabledInPhysicalNetwork(long, java.lang.String) + */ + @Override + public boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkTag(com.cloud.hypervisor.Hypervisor.HypervisorType, com.cloud.network.Network) + */ + @Override + public String getNetworkTag(HypervisorType hType, Network network) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getElementServices(com.cloud.network.Network.Provider) + */ + @Override + public List getElementServices(Provider provider) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#canElementEnableIndividualServices(com.cloud.network.Network.Provider) + */ + @Override + public boolean canElementEnableIndividualServices(Provider provider) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#areServicesSupportedInNetwork(long, com.cloud.network.Network.Service[]) + */ + @Override + public boolean areServicesSupportedInNetwork(long networkId, Service... services) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isNetworkSystem(com.cloud.network.Network) + */ + @Override + public boolean isNetworkSystem(Network network) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkOfferingServiceCapabilities(com.cloud.offering.NetworkOffering, com.cloud.network.Network.Service) + */ + @Override + public Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getPhysicalNetworkId(com.cloud.network.Network) + */ + @Override + public Long getPhysicalNetworkId(Network network) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getAllowSubdomainAccessGlobal() + */ + @Override + public boolean getAllowSubdomainAccessGlobal() { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isProviderForNetwork(com.cloud.network.Network.Provider, long) + */ + @Override + public boolean isProviderForNetwork(Provider provider, long networkId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isProviderForNetworkOffering(com.cloud.network.Network.Provider, long) + */ + @Override + public boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#canProviderSupportServices(java.util.Map) + */ + @Override + public void canProviderSupportServices(Map> providersMap) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getPhysicalNetworkInfo(long, com.cloud.hypervisor.Hypervisor.HypervisorType) + */ + @Override + public List getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#canAddDefaultSecurityGroup() + */ + @Override + public boolean canAddDefaultSecurityGroup() { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listNetworkOfferingServices(long) + */ + @Override + public List listNetworkOfferingServices(long networkOfferingId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#areServicesEnabledInZone(long, com.cloud.offering.NetworkOffering, java.util.List) + */ + @Override + public boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#checkIpForService(com.cloud.network.IPAddressVO, com.cloud.network.Network.Service, java.lang.Long) + */ + @Override + public boolean checkIpForService(IpAddress ip, Service service, Long networkId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#checkCapabilityForProvider(java.util.Set, com.cloud.network.Network.Service, com.cloud.network.Network.Capability, java.lang.String) + */ + @Override + public void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultUniqueProviderForService(java.lang.String) + */ + @Override + public Provider getDefaultUniqueProviderForService(String serviceName) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#checkNetworkPermissions(com.cloud.user.Account, com.cloud.network.Network) + */ + @Override + public void checkNetworkPermissions(Account owner, Network network) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultManagementTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) + */ + @Override + public String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultStorageTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) + */ + @Override + public String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultPublicTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) + */ + @Override + public String getDefaultPublicTrafficLabel(long dcId, HypervisorType vmware) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultGuestTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) + */ + @Override + public String getDefaultGuestTrafficLabel(long dcId, HypervisorType vmware) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getElementImplementingProvider(java.lang.String) + */ + @Override + public NetworkElement getElementImplementingProvider(String providerName) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getAccountNetworkDomain(long, long) + */ + @Override + public String getAccountNetworkDomain(long accountId, long zoneId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultNetworkDomain() + */ + @Override + public String getDefaultNetworkDomain() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNtwkOffDistinctProviders(long) + */ + @Override + public List getNtwkOffDistinctProviders(long ntwkOffId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listPublicIpsAssignedToAccount(long, long, java.lang.Boolean) + */ + @Override + public List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getPhysicalNtwksSupportingTrafficType(long, com.cloud.network.Networks.TrafficType) + */ + @Override + public List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isPrivateGateway(com.cloud.vm.Nic) + */ + @Override + public boolean isPrivateGateway(Nic guestNic) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkCapabilities(long) + */ + @Override + public Map> getNetworkCapabilities(long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getSystemNetworkByZoneAndTrafficType(long, com.cloud.network.Networks.TrafficType) + */ + @Override + public Network getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDedicatedNetworkDomain(long) + */ + @Override + public Long getDedicatedNetworkDomain(long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkOfferingServiceProvidersMap(long) + */ + @Override + public Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listSupportedNetworkServiceProviders(java.lang.String) + */ + @Override + public List listSupportedNetworkServiceProviders(String serviceName) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listNetworksByVpc(long) + */ + @Override + public List listNetworksByVpc(long vpcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#canUseForDeploy(com.cloud.network.Network) + */ + @Override + public boolean canUseForDeploy(Network network) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getExclusiveGuestNetwork(long) + */ + @Override + public Network getExclusiveGuestNetwork(long zoneId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#findPhysicalNetworkId(long, java.lang.String, com.cloud.network.Networks.TrafficType) + */ + @Override + public long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType) { + // TODO Auto-generated method stub + return 0; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkRate(long, java.lang.Long) + */ + @Override + public Integer getNetworkRate(long networkId, Long vmId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isVmPartOfNetwork(long, long) + */ + @Override + public boolean isVmPartOfNetwork(long vmId, long ntwkId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultPhysicalNetworkByZoneAndTrafficType(long, com.cloud.network.Networks.TrafficType) + */ + @Override + public PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetwork(long) + */ + @Override + public Network getNetwork(long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getIp(long) + */ + @Override + public IpAddress getIp(long sourceIpAddressId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isNetworkAvailableInDomain(long, long) + */ + @Override + public boolean isNetworkAvailableInDomain(long networkId, long domainId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNicProfile(com.cloud.vm.VirtualMachine, long, java.lang.String) + */ + @Override + public NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getAvailableIps(com.cloud.network.Network, java.lang.String) + */ + @Override + public Set getAvailableIps(Network network, String requestedIp) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDomainNetworkDomain(long, long) + */ + @Override + public String getDomainNetworkDomain(long domainId, long zoneId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getIpToServices(java.util.List, boolean, boolean) + */ + @Override + public Map> getIpToServices(List publicIps, boolean rulesRevoked, + boolean includingFirewall) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getProviderToIpList(com.cloud.network.Network, java.util.Map) + */ + @Override + public Map> getProviderToIpList(Network network, + Map> ipToServices) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getSourceNatIpAddressForGuestNetwork(com.cloud.user.Account, com.cloud.network.Network) + */ + @Override + public PublicIpAddress getSourceNatIpAddressForGuestNetwork(Account owner, Network guestNetwork) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isNetworkInlineMode(com.cloud.network.Network) + */ + @Override + public boolean isNetworkInlineMode(Network network) { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/server/test/com/cloud/network/MockRulesManagerImpl.java b/server/test/com/cloud/network/MockRulesManagerImpl.java new file mode 100644 index 00000000000..3687e9c441b --- /dev/null +++ b/server/test/com/cloud/network/MockRulesManagerImpl.java @@ -0,0 +1,312 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.network; + +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.cloudstack.api.command.user.firewall.ListPortForwardingRulesCmd; + +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.NetworkRuleConflictException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.PortForwardingRule; +import com.cloud.network.rules.PortForwardingRuleVO; +import com.cloud.network.rules.RulesManager; +import com.cloud.network.rules.RulesService; +import com.cloud.network.rules.StaticNatRule; +import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.user.Account; +import com.cloud.uservm.UserVm; +import com.cloud.utils.Pair; +import com.cloud.utils.component.Manager; +import com.cloud.vm.VirtualMachine; + +@Local(value = {RulesManager.class, RulesService.class}) +public class MockRulesManagerImpl implements RulesManager, Manager, RulesService { + + @Override + public Pair, Integer> searchStaticNatRules( + Long ipId, Long id, Long vmId, Long start, Long size, + String accountName, Long domainId, Long projectId, + boolean isRecursive, boolean listAll) { + // TODO Auto-generated method stub + return null; + } + + @Override + public PortForwardingRule createPortForwardingRule(PortForwardingRule rule, + Long vmId, boolean openFirewall) + throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean revokePortForwardingRule(long ruleId, boolean apply) { + // TODO Auto-generated method stub + return false; + } + + @Override + public Pair, Integer> listPortForwardingRules( + ListPortForwardingRulesCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean applyPortForwardingRules(long ipAdddressId, Account caller) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean enableStaticNat(long ipAddressId, long vmId, long networkId, + boolean isSystemVm) throws NetworkRuleConflictException, + ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public PortForwardingRule getPortForwardigRule(long ruleId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public FirewallRule getFirewallRule(long ruleId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public StaticNatRule createStaticNatRule(StaticNatRule rule, + boolean openFirewall) throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean revokeStaticNatRule(long ruleId, boolean apply) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyStaticNatRules(long ipAdddressId, Account caller) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public StaticNatRule buildStaticNatRule(FirewallRule rule, boolean forRevoke) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getSourceCidrs(long ruleId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean disableStaticNat(long ipId) + throws ResourceUnavailableException, NetworkRuleConflictException, + InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyPortForwardingRules(long ipAddressId, + boolean continueOnError, Account caller) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyStaticNatRulesForIp(long sourceIpId, + boolean continueOnError, Account caller, boolean forRevoke) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyPortForwardingRulesForNetwork(long networkId, + boolean continueOnError, Account caller) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyStaticNatRulesForNetwork(long networkId, + boolean continueOnError, Account caller) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void checkIpAndUserVm(IpAddress ipAddress, UserVm userVm, + Account caller) { + // TODO Auto-generated method stub + + } + + @Override + public void checkRuleAndUserVm(FirewallRule rule, UserVm userVm, + Account caller) { + // TODO Auto-generated method stub + + } + + @Override + public boolean revokeAllPFAndStaticNatRulesForIp(long ipId, long userId, + Account caller) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean revokeAllPFStaticNatRulesForNetwork(long networkId, + long userId, Account caller) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public List listFirewallRulesByIp(long ipAddressId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List listPortForwardingRulesForApplication( + long ipId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List gatherPortForwardingRulesForApplication( + List addrs) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean revokePortForwardingRulesForVm(long vmId) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean revokeStaticNatRulesForVm(long vmId) { + // TODO Auto-generated method stub + return false; + } + + @Override + public FirewallRule[] reservePorts(IpAddress ip, String protocol, + Purpose purpose, boolean openFirewall, Account caller, int... ports) + throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean releasePorts(long ipId, String protocol, Purpose purpose, + int... ports) { + // TODO Auto-generated method stub + return false; + } + + @Override + public List listByNetworkId(long networkId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean applyStaticNatForIp(long sourceIpId, + boolean continueOnError, Account caller, boolean forRevoke) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyStaticNatsForNetwork(long networkId, + boolean continueOnError, Account caller) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void getSystemIpAndEnableStaticNatForVm(VirtualMachine vm, + boolean getNewIp) throws InsufficientAddressCapacityException { + // TODO Auto-generated method stub + + } + + @Override + public boolean disableStaticNat(long ipAddressId, Account caller, + long callerUserId, boolean releaseIpIfElastic) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyStaticNatForNetwork(long networkId, + boolean continueOnError, Account caller, boolean forRevoke) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean configure(String name, Map params) + throws ConfigurationException { + + return true; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + // TODO Auto-generated method stub + return false; + } + + @Override + public String getName() { + // TODO Auto-generated method stub + return "MockRulesManagerImpl"; + } + +} diff --git a/server/test/com/cloud/network/NetworkManagerTest.java b/server/test/com/cloud/network/NetworkManagerTest.java new file mode 100644 index 00000000000..c7d2a076c94 --- /dev/null +++ b/server/test/com/cloud/network/NetworkManagerTest.java @@ -0,0 +1,66 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + + +import junit.framework.Assert; + +import org.apache.log4j.Logger; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +import com.cloud.network.element.DhcpServiceProvider; +import com.cloud.network.element.IpDeployer; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.testcase.ComponentSetup; +import com.cloud.utils.testcase.ComponentTestCase; + +@Ignore("Requires database to be set up") +@ComponentSetup(managerName="management-server", setupXml="network-mgr-component.xml") +public class NetworkManagerTest extends ComponentTestCase { + private static final Logger s_logger = Logger.getLogger(NetworkManagerTest.class); + @Before + @Override + protected void setUp() { + super.setUp(); + } + + @Test + public void testInjected() { + NetworkManagerImpl networkMgr = (NetworkManagerImpl)ComponentLocator.getCurrentLocator().getManager(NetworkManager.class); + Assert.assertTrue(networkMgr._ipDeployers.enumeration().hasMoreElements()); + Assert.assertTrue(networkMgr._networkElements.enumeration().hasMoreElements()); + Assert.assertTrue(networkMgr._dhcpProviders.enumeration().hasMoreElements()); + Assert.assertNotNull(networkMgr._networkModel); + + Assert.assertNotNull(networkMgr._ipDeployers.get("VirtualRouter")); + Assert.assertNotNull(networkMgr._ipDeployers.get("VpcVirtualRouter")); + + Assert.assertNotNull(networkMgr._dhcpProviders.get("VirtualRouter")); + Assert.assertNotNull(networkMgr._dhcpProviders.get("VpcVirtualRouter")); + + + Assert.assertTrue(networkMgr._ipDeployers.get("VirtualRouter") instanceof IpDeployer); + Assert.assertTrue(networkMgr._dhcpProviders.get("VirtualRouter") instanceof DhcpServiceProvider); + + s_logger.info("Done testing injection of network manager's network elements"); + + } + +} diff --git a/server/test/com/cloud/network/NetworkManagerTestComponentLibrary.java b/server/test/com/cloud/network/NetworkManagerTestComponentLibrary.java new file mode 100644 index 00000000000..24979e40b66 --- /dev/null +++ b/server/test/com/cloud/network/NetworkManagerTestComponentLibrary.java @@ -0,0 +1,104 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + +import com.cloud.agent.MockAgentManagerImpl; +import com.cloud.alert.AlertManagerImpl; +import com.cloud.alert.MockAlertManagerImpl; +import com.cloud.baremetal.ExternalDhcpManagerImpl; +import com.cloud.configuration.ConfigurationManagerImpl; +import com.cloud.configuration.DefaultComponentLibrary; +import com.cloud.network.as.AutoScaleManagerImpl; +import com.cloud.network.firewall.FirewallManagerImpl; +import com.cloud.network.lb.LoadBalancingRulesManagerImpl; +import com.cloud.network.router.VpcVirtualNetworkApplianceManagerImpl; +import com.cloud.network.rules.RulesManagerImpl; +import com.cloud.network.security.SecurityGroupManagerImpl2; +import com.cloud.network.vpc.NetworkACLManagerImpl; +import com.cloud.network.vpc.VpcManagerImpl; +import com.cloud.network.vpn.RemoteAccessVpnManagerImpl; +import com.cloud.network.vpn.Site2SiteVpnManagerImpl; +import com.cloud.projects.MockProjectManagerImpl; +import com.cloud.projects.ProjectManagerImpl; +import com.cloud.resource.MockResourceManagerImpl; +import com.cloud.resource.ResourceManagerImpl; +import com.cloud.resourcelimit.ResourceLimitManagerImpl; +import com.cloud.storage.s3.S3ManagerImpl; +import com.cloud.storage.secondary.SecondaryStorageManagerImpl; +import com.cloud.storage.swift.SwiftManagerImpl; +import com.cloud.tags.TaggedResourceManagerImpl; +import com.cloud.template.TemplateManagerImpl; +import com.cloud.user.AccountManagerImpl; +import com.cloud.user.DomainManagerImpl; +import com.cloud.user.MockAccountManagerImpl; +import com.cloud.user.MockDomainManagerImpl; +import com.cloud.vm.MockVirtualMachineManagerImpl; +import com.cloud.vpc.MockConfigurationManagerImpl; +import com.cloud.vpc.MockResourceLimitManagerImpl; +import com.cloud.vpc.MockVpcManagerImpl; +import com.cloud.vpc.MockVpcVirtualNetworkApplianceManager; + + +public class NetworkManagerTestComponentLibrary extends DefaultComponentLibrary { + + /* (non-Javadoc) + * @see com.cloud.configuration.DefaultComponentLibrary#populateManagers() + */ + @Override + protected void populateManagers() { + addManager("configuration manager", MockConfigurationManagerImpl.class); + addManager("account manager", MockAccountManagerImpl.class); + addManager("domain manager", MockDomainManagerImpl.class); + addManager("resource limit manager", MockResourceLimitManagerImpl.class); + addManager("network service", NetworkServiceImpl.class); + addManager("network manager", NetworkManagerImpl.class); + addManager("network model", NetworkModelImpl.class); + addManager("LoadBalancingRulesManager", LoadBalancingRulesManagerImpl.class); + //addManager("AutoScaleManager", AutoScaleManagerImpl.class); + addManager("RulesManager", RulesManagerImpl.class); + addManager("RemoteAccessVpnManager", RemoteAccessVpnManagerImpl.class); + addManager("FirewallManager", FirewallManagerImpl.class); + addManager("StorageNetworkManager", StorageNetworkManagerImpl.class); + addManager("VPC Manager", MockVpcManagerImpl.class); + addManager("VpcVirtualRouterManager", MockVpcVirtualNetworkApplianceManager.class); + addManager("NetworkACLManager", NetworkACLManagerImpl.class); + addManager("Site2SiteVpnManager", Site2SiteVpnManagerImpl.class); + addManager("Alert Manager", MockAlertManagerImpl.class); + addManager("ProjectManager", MockProjectManagerImpl.class); + //addManager("SwiftManager", SwiftManagerImpl.class); + //addManager("S3Manager", S3ManagerImpl.class); + //addManager("SecondaryStorageManager", SecondaryStorageManagerImpl.class); + //addManager("SecurityGroupManager", SecurityGroupManagerImpl2.class); + addManager("AgentManager", MockAgentManagerImpl.class); + addManager("ExternalLoadBalancerUsageManager", ExternalLoadBalancerUsageManagerImpl.class); + //addManager("TemplateManager", TemplateManagerImpl.class); + //addManager("VirtualMachineManager", MockVirtualMachineManagerImpl.class); + addManager("ResourceManager", MockResourceManagerImpl.class); + addManager("ExternalDhcpManager", ExternalDhcpManagerImpl.class); + + + + + } + + @Override + protected void populateAdapters() { + //no-op + } + +} diff --git a/server/test/com/cloud/network/NetworkModelTest.java b/server/test/com/cloud/network/NetworkModelTest.java new file mode 100644 index 00000000000..52b3187e50c --- /dev/null +++ b/server/test/com/cloud/network/NetworkModelTest.java @@ -0,0 +1,88 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.mockito.Matchers.*; + +import java.util.ArrayList; +import java.util.List; + +import junit.framework.Assert; + +import org.junit.Before; +import org.junit.Test; + +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.VlanDao; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.user.Account; +import com.cloud.utils.db.Filter; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.net.Ip; + +public class NetworkModelTest { + @Before + public void setUp() { + + } + + @Test + public void testGetSourceNatIpAddressForGuestNetwork() { + NetworkModelImpl modelImpl = new NetworkModelImpl(); + IPAddressDao ipAddressDao = mock(IPAddressDao.class); + modelImpl._ipAddressDao = ipAddressDao; + List fakeList = new ArrayList(); + IPAddressVO fakeIp = new IPAddressVO(new Ip("75.75.75.75"), 1, 0xaabbccddeeffL, 10, false); + fakeList.add(fakeIp); + SearchBuilder fakeSearch = mock(SearchBuilder.class); + modelImpl.IpAddressSearch = fakeSearch; + VlanDao fakeVlanDao = mock(VlanDao.class); + when (fakeVlanDao.findById(anyLong())).thenReturn(mock(VlanVO.class)); + modelImpl._vlanDao = fakeVlanDao; + when(fakeSearch.create()).thenReturn(mock(SearchCriteria.class)); + when( + ipAddressDao.search( + any(SearchCriteria.class), + (Filter)org.mockito.Matchers.isNull() + ) + ).thenReturn(fakeList); + when ( + ipAddressDao.findById(anyLong()) + ).thenReturn(fakeIp); + Account fakeAccount = mock(Account.class); + when(fakeAccount.getId()).thenReturn(1L); + Network fakeNetwork = mock(Network.class); + when(fakeNetwork.getId()).thenReturn(1L); + PublicIpAddress answer = modelImpl.getSourceNatIpAddressForGuestNetwork(fakeAccount, fakeNetwork); + Assert.assertNull(answer); + IPAddressVO fakeIp2 = new IPAddressVO(new Ip("76.75.75.75"), 1, 0xaabb10ddeeffL, 10, true); + fakeList.add(fakeIp2); + when ( + ipAddressDao.findById(anyLong()) + ).thenReturn(fakeIp2); + answer = modelImpl.getSourceNatIpAddressForGuestNetwork(fakeAccount, fakeNetwork); + Assert.assertNotNull(answer); + Assert.assertEquals(answer.getAddress().addr(), "76.75.75.75"); + + } + +} diff --git a/server/test/com/cloud/network/firewall/FirewallManagerTest.java b/server/test/com/cloud/network/firewall/FirewallManagerTest.java new file mode 100644 index 00000000000..4fbe8d9aca1 --- /dev/null +++ b/server/test/com/cloud/network/firewall/FirewallManagerTest.java @@ -0,0 +1,177 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network.firewall; + + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyBoolean; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; + +import junit.framework.Assert; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.Network; +import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkRuleApplier; +import com.cloud.network.element.FirewallServiceProvider; +import com.cloud.network.element.NetworkACLServiceProvider; +import com.cloud.network.element.PortForwardingServiceProvider; +import com.cloud.network.element.StaticNatServiceProvider; +import com.cloud.network.element.VirtualRouterElement; +import com.cloud.network.element.VpcVirtualRouterElement; +import com.cloud.network.rules.FirewallManager; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.utils.component.Adapter; +import com.cloud.utils.component.Adapters; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.ComponentLocator.ComponentInfo; +import com.cloud.utils.db.GenericDaoBase; +import com.cloud.utils.testcase.ComponentSetup; +import com.cloud.utils.testcase.ComponentTestCase; + +@Ignore("Requires database to be set up") +@ComponentSetup(managerName="management-server", setupXml="network-mgr-component.xml") +public class FirewallManagerTest extends ComponentTestCase { + private static final Logger s_logger = Logger.getLogger(FirewallManagerTest.class); + + @Before + public void setUp() { + Logger componentlogger = Logger.getLogger(ComponentLocator.class); + Logger daoLogger = Logger.getLogger(GenericDaoBase.class); + Logger cloudLogger = Logger.getLogger("com.cloud"); + + componentlogger.setLevel(Level.WARN); + daoLogger.setLevel(Level.ERROR); + cloudLogger.setLevel(Level.ERROR); + s_logger.setLevel(Level.INFO); + super.setUp(); + } + + + @Test + public void testInjected() { + + FirewallManagerImpl firewallMgr = (FirewallManagerImpl)ComponentLocator.getCurrentLocator().getManager(FirewallManager.class); + Assert.assertTrue(firewallMgr._firewallElements.enumeration().hasMoreElements()); + Assert.assertTrue(firewallMgr._pfElements.enumeration().hasMoreElements()); + Assert.assertTrue(firewallMgr._staticNatElements.enumeration().hasMoreElements()); + Assert.assertTrue(firewallMgr._networkAclElements.enumeration().hasMoreElements()); + Assert.assertNotNull(firewallMgr._networkModel); + + Assert.assertNotNull(firewallMgr._firewallElements.get("VirtualRouter")); + Assert.assertNotNull(firewallMgr._firewallElements.get("VpcVirtualRouter")); + Assert.assertNotNull(firewallMgr._pfElements.get("VirtualRouter")); + Assert.assertNotNull(firewallMgr._pfElements.get("VpcVirtualRouter")); + Assert.assertNotNull(firewallMgr._staticNatElements.get("VirtualRouter")); + Assert.assertNotNull(firewallMgr._staticNatElements.get("VpcVirtualRouter")); + Assert.assertNotNull(firewallMgr._networkAclElements.get("VpcVirtualRouter")); + Assert.assertNull(firewallMgr._networkAclElements.get("VirtualRouter")); + + + Assert.assertTrue(firewallMgr._firewallElements.get("VirtualRouter") instanceof FirewallServiceProvider); + Assert.assertTrue(firewallMgr._pfElements.get("VirtualRouter") instanceof PortForwardingServiceProvider); + Assert.assertTrue(firewallMgr._staticNatElements.get("VirtualRouter") instanceof StaticNatServiceProvider); + Assert.assertTrue(firewallMgr._networkAclElements.get("VpcVirtualRouter") instanceof NetworkACLServiceProvider); + + s_logger.info("Done testing injection of service elements into firewall manager"); + + } + + @Test + public void testApplyRules() { + List ruleList = new ArrayList(); + FirewallRuleVO rule = + new FirewallRuleVO("rule1", 1, 80, "TCP", 1, 2, 1, + FirewallRule.Purpose.Firewall, null, null, null, null); + ruleList.add(rule); + FirewallManagerImpl firewallMgr = (FirewallManagerImpl)ComponentLocator.getCurrentLocator().getManager(FirewallManager.class); + + NetworkManager netMgr = mock(NetworkManager.class); + firewallMgr._networkMgr = netMgr; + + try { + firewallMgr.applyRules(ruleList, false, false); + verify(netMgr) + .applyRules(any(List.class), + any(FirewallRule.Purpose.class), + any(NetworkRuleApplier.class), + anyBoolean()); + + } catch (ResourceUnavailableException e) { + Assert.fail("Unreachable code"); + } + } + + @Test + public void testApplyFWRules() { + List ruleList = new ArrayList(); + FirewallRuleVO rule = + new FirewallRuleVO("rule1", 1, 80, "TCP", 1, 2, 1, + FirewallRule.Purpose.Firewall, null, null, null, null); + ruleList.add(rule); + FirewallManagerImpl firewallMgr = (FirewallManagerImpl)ComponentLocator.getCurrentLocator().getManager(FirewallManager.class); + VirtualRouterElement virtualRouter = + mock(VirtualRouterElement.class); + VpcVirtualRouterElement vpcVirtualRouter = + mock(VpcVirtualRouterElement.class); + ComponentInfo c1 = + new ComponentInfo("VirtualRouter", + VirtualRouterElement.class, virtualRouter); + ComponentInfo c2 = + new ComponentInfo("VpcVirtualRouter", + VpcVirtualRouterElement.class, vpcVirtualRouter); + List> adapters = + new ArrayList>(); + adapters.add(c1); + adapters.add(c2); + Adapters fwElements = + new Adapters("firewalElements", adapters); + firewallMgr._firewallElements = fwElements; + + try { + when( + virtualRouter.applyFWRules(any(Network.class), any(List.class)) + ).thenReturn(false); + when( + vpcVirtualRouter.applyFWRules(any(Network.class), any(List.class)) + ).thenReturn(true); + //Network network, Purpose purpose, List rules + firewallMgr.applyRules(mock(Network.class), Purpose.Firewall, ruleList); + verify(vpcVirtualRouter).applyFWRules(any(Network.class), any(List.class)); + verify(virtualRouter).applyFWRules(any(Network.class), any(List.class)); + + + } catch (ResourceUnavailableException e) { + Assert.fail("Unreachable code"); + } + } + +} diff --git a/server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java b/server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java new file mode 100644 index 00000000000..1a01681a112 --- /dev/null +++ b/server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java @@ -0,0 +1,78 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.network.vpn; + +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.Network; +import com.cloud.network.RemoteAccessVpn; +import com.cloud.network.VpnUser; +import com.cloud.network.element.RemoteAccessVPNServiceProvider; + +@Local (value = RemoteAccessVPNServiceProvider.class) +public class MockRemoteAccessVPNServiceProvider implements + RemoteAccessVPNServiceProvider { + + @Override + public boolean configure(String name, Map params) + throws ConfigurationException { + return true; + } + + @Override + public String getName() { + return "MockRemoteAccessVPNServiceProvider"; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + // TODO Auto-generated method stub + return false; + } + + @Override + public String[] applyVpnUsers(RemoteAccessVpn vpn, + List users) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean startVpn(Network network, RemoteAccessVpn vpn) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean stopVpn(Network network, RemoteAccessVpn vpn) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java b/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java new file mode 100644 index 00000000000..b691d2a1b6f --- /dev/null +++ b/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java @@ -0,0 +1,109 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.network.vpn; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import javax.naming.ConfigurationException; + +import junit.framework.Assert; + +import org.apache.log4j.Logger; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.cloud.configuration.DefaultInterceptorLibrary; +import com.cloud.configuration.dao.ConfigurationDaoImpl; +import com.cloud.domain.dao.DomainDaoImpl; +import com.cloud.event.dao.UsageEventDaoImpl; +import com.cloud.network.MockFirewallManagerImpl; +import com.cloud.network.MockNetworkManagerImpl; +import com.cloud.network.MockNetworkModelImpl; +import com.cloud.network.MockRulesManagerImpl; +import com.cloud.network.dao.FirewallRulesDaoImpl; +import com.cloud.network.dao.IPAddressDaoImpl; +import com.cloud.network.dao.RemoteAccessVpnDaoImpl; +import com.cloud.network.dao.VpnUserDaoImpl; +import com.cloud.network.element.RemoteAccessVPNServiceProvider; +import com.cloud.user.MockAccountManagerImpl; +import com.cloud.user.MockDomainManagerImpl; +import com.cloud.user.dao.AccountDaoImpl; +import com.cloud.utils.Pair; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.MockComponentLocator; + +public class RemoteAccessVpnTest { + private MockComponentLocator locator; + private final static Logger s_logger = Logger.getLogger(RemoteAccessVpnTest.class); + + + private static void addDaos(MockComponentLocator locator) { + locator.addDao("AccountDao", AccountDaoImpl.class); + locator.addDao("VpnUserDao", VpnUserDaoImpl.class); + locator.addDao("FirewallRulesDao", FirewallRulesDaoImpl.class); + locator.addDao("IPAddressDao", IPAddressDaoImpl.class); + locator.addDao("DomainDao", DomainDaoImpl.class); + locator.addDao("UsageEventDao", UsageEventDaoImpl.class); + locator.addDao("RemoteAccessVpnDao", RemoteAccessVpnDaoImpl.class); + locator.addDao("ConfigurationDao", ConfigurationDaoImpl.class); + + } + + private static void addManagers(MockComponentLocator locator) { + locator.addManager("AccountManager", MockAccountManagerImpl.class); + locator.addManager("DomainManager", MockDomainManagerImpl.class); + locator.addManager("NetworkManager", MockNetworkManagerImpl.class); + locator.addManager("NetworkModel", MockNetworkModelImpl.class); + locator.addManager("RulesManager", MockRulesManagerImpl.class); + locator.addManager("FirewallManager", MockFirewallManagerImpl.class); + } + + @Before + public void setUp() { + locator = new MockComponentLocator("management-server"); + addDaos(locator); + addManagers(locator); + s_logger.info("Finished setUp"); + } + + @After + public void tearDown() throws Exception { + } + + + @Test + public void testInjected() throws Exception { + List>> list = + new ArrayList>>(); + list.add(new Pair>("RemoteAccessVPNServiceProvider", MockRemoteAccessVPNServiceProvider.class)); + locator.addAdapterChain(RemoteAccessVPNServiceProvider.class, list); + s_logger.info("Finished add adapter"); + locator.makeActive(new DefaultInterceptorLibrary()); + s_logger.info("Finished make active"); + RemoteAccessVpnManagerImpl vpnMgr = ComponentLocator.inject(RemoteAccessVpnManagerImpl.class); + s_logger.info("Finished inject"); + Assert.assertTrue(vpnMgr.configure("RemoteAccessVpnMgr",new HashMap()) ); + Assert.assertTrue(vpnMgr.start()); + int numProviders = vpnMgr.getRemoteAccessVPNServiceProviders().size(); + Assert.assertTrue(numProviders > 0); + } + + +} diff --git a/server/test/com/cloud/resource/MockResourceManagerImpl.java b/server/test/com/cloud/resource/MockResourceManagerImpl.java new file mode 100644 index 00000000000..e94cdea9853 --- /dev/null +++ b/server/test/com/cloud/resource/MockResourceManagerImpl.java @@ -0,0 +1,601 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.resource; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.cloudstack.api.command.admin.cluster.AddClusterCmd; +import org.apache.cloudstack.api.command.admin.cluster.DeleteClusterCmd; +import org.apache.cloudstack.api.command.admin.host.*; +import org.apache.cloudstack.api.command.admin.storage.*; +import org.apache.cloudstack.api.command.admin.swift.*; + +import com.cloud.agent.api.StartupCommand; +import com.cloud.agent.api.StartupRoutingCommand; + +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.HostPodVO; +import com.cloud.dc.PodCluster; +import com.cloud.exception.AgentUnavailableException; +import com.cloud.exception.DiscoveryException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.ResourceInUseException; +import com.cloud.host.Host; +import com.cloud.host.HostStats; +import com.cloud.host.HostVO; +import com.cloud.host.Status; +import com.cloud.host.Host.Type; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.org.Cluster; +import com.cloud.resource.ResourceState.Event; +import com.cloud.service.ServiceOfferingVO; +import com.cloud.storage.S3; +import com.cloud.storage.Swift; +import com.cloud.template.VirtualMachineTemplate; +import com.cloud.utils.Pair; +import com.cloud.utils.component.Manager; +import com.cloud.utils.fsm.NoTransitionException; + +@Local(value = {ResourceManager.class}) +public class MockResourceManagerImpl implements ResourceManager, Manager { + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#updateHost(com.cloud.api.commands.UpdateHostCmd) + */ + @Override + public Host updateHost(UpdateHostCmd cmd) throws NoTransitionException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#cancelMaintenance(com.cloud.api.commands.CancelMaintenanceCmd) + */ + @Override + public Host cancelMaintenance(CancelMaintenanceCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#reconnectHost(com.cloud.api.commands.ReconnectHostCmd) + */ + @Override + public Host reconnectHost(ReconnectHostCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#discoverCluster(com.cloud.api.commands.AddClusterCmd) + */ + @Override + public List discoverCluster(AddClusterCmd cmd) throws IllegalArgumentException, + DiscoveryException, ResourceInUseException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#deleteCluster(com.cloud.api.commands.DeleteClusterCmd) + */ + @Override + public boolean deleteCluster(DeleteClusterCmd cmd) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#updateCluster(com.cloud.org.Cluster, java.lang.String, java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public Cluster updateCluster(Cluster cluster, String clusterType, String hypervisor, String allocationState, + String managedstate) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#discoverHosts(com.cloud.api.commands.AddHostCmd) + */ + @Override + public List discoverHosts(AddHostCmd cmd) throws IllegalArgumentException, DiscoveryException, + InvalidParameterValueException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#discoverHosts(com.cloud.api.commands.AddSecondaryStorageCmd) + */ + @Override + public List discoverHosts(AddSecondaryStorageCmd cmd) throws IllegalArgumentException, + DiscoveryException, InvalidParameterValueException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#maintain(com.cloud.api.commands.PrepareForMaintenanceCmd) + */ + @Override + public Host maintain(PrepareForMaintenanceCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#updateHostPassword(com.cloud.api.commands.UpdateHostPasswordCmd) + */ + @Override + public boolean updateHostPassword(UpdateHostPasswordCmd upasscmd) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#getHost(long) + */ + @Override + public Host getHost(long hostId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#getCluster(java.lang.Long) + */ + @Override + public Cluster getCluster(Long clusterId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#discoverSwift(com.cloud.api.commands.AddSwiftCmd) + */ + @Override + public Swift discoverSwift(AddSwiftCmd addSwiftCmd) throws DiscoveryException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#discoverS3(com.cloud.api.commands.AddS3Cmd) + */ + @Override + public S3 discoverS3(AddS3Cmd cmd) throws DiscoveryException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#getSupportedHypervisorTypes(long, boolean, java.lang.Long) + */ + @Override + public List getSupportedHypervisorTypes(long zoneId, boolean forVirtualRouter, Long podId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#listSwifts(com.cloud.api.commands.ListSwiftsCmd) + */ + @Override + public List listSwifts(ListSwiftsCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#listS3s(com.cloud.api.commands.ListS3sCmd) + */ + @Override + public List listS3s(ListS3sCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#registerResourceEvent(java.lang.Integer, com.cloud.resource.ResourceListener) + */ + @Override + public void registerResourceEvent(Integer event, ResourceListener listener) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#unregisterResourceEvent(com.cloud.resource.ResourceListener) + */ + @Override + public void unregisterResourceEvent(ResourceListener listener) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#registerResourceStateAdapter(java.lang.String, com.cloud.resource.ResourceStateAdapter) + */ + @Override + public void registerResourceStateAdapter(String name, ResourceStateAdapter adapter) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#unregisterResourceStateAdapter(java.lang.String) + */ + @Override + public void unregisterResourceStateAdapter(String name) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#createHostAndAgent(java.lang.Long, com.cloud.resource.ServerResource, java.util.Map, boolean, java.util.List, boolean) + */ + @Override + public Host createHostAndAgent(Long hostId, ServerResource resource, Map details, boolean old, + List hostTags, boolean forRebalance) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#addHost(long, com.cloud.resource.ServerResource, com.cloud.host.Host.Type, java.util.Map) + */ + @Override + public Host addHost(long zoneId, ServerResource resource, Type hostType, Map hostDetails) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#createHostVOForConnectedAgent(com.cloud.agent.api.StartupCommand[]) + */ + @Override + public HostVO createHostVOForConnectedAgent(StartupCommand[] cmds) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#checkCIDR(com.cloud.dc.HostPodVO, com.cloud.dc.DataCenterVO, java.lang.String, java.lang.String) + */ + @Override + public void checkCIDR(HostPodVO pod, DataCenterVO dc, String serverPrivateIP, String serverPrivateNetmask) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#fillRoutingHostVO(com.cloud.host.HostVO, com.cloud.agent.api.StartupRoutingCommand, com.cloud.hypervisor.Hypervisor.HypervisorType, java.util.Map, java.util.List) + */ + @Override + public HostVO fillRoutingHostVO(HostVO host, StartupRoutingCommand ssCmd, HypervisorType hyType, + Map details, List hostTags) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#deleteRoutingHost(com.cloud.host.HostVO, boolean, boolean) + */ + @Override + public void deleteRoutingHost(HostVO host, boolean isForced, boolean forceDestroyStorage) + throws UnableDeleteHostException { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#executeUserRequest(long, com.cloud.resource.ResourceState.Event) + */ + @Override + public boolean executeUserRequest(long hostId, Event event) throws AgentUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#resourceStateTransitTo(com.cloud.host.Host, com.cloud.resource.ResourceState.Event, long) + */ + @Override + public boolean resourceStateTransitTo(Host host, Event event, long msId) throws NoTransitionException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#umanageHost(long) + */ + @Override + public boolean umanageHost(long hostId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#maintenanceFailed(long) + */ + @Override + public boolean maintenanceFailed(long hostId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#maintain(long) + */ + @Override + public boolean maintain(long hostId) throws AgentUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#deleteHost(long, boolean, boolean) + */ + @Override + public boolean deleteHost(long hostId, boolean isForced, boolean isForceDeleteStorage) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#findDirectlyConnectedHosts() + */ + @Override + public List findDirectlyConnectedHosts() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllUpAndEnabledHosts(com.cloud.host.Host.Type, java.lang.Long, java.lang.Long, long) + */ + @Override + public List listAllUpAndEnabledHosts(Type type, Long clusterId, Long podId, long dcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllHostsInCluster(long) + */ + @Override + public List listAllHostsInCluster(long clusterId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listHostsInClusterByStatus(long, com.cloud.host.Status) + */ + @Override + public List listHostsInClusterByStatus(long clusterId, Status status) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllUpAndEnabledHostsInOneZoneByType(com.cloud.host.Host.Type, long) + */ + @Override + public List listAllUpAndEnabledHostsInOneZoneByType(Type type, long dcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllHostsInOneZoneByType(com.cloud.host.Host.Type, long) + */ + @Override + public List listAllHostsInOneZoneByType(Type type, long dcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllHostsInAllZonesByType(com.cloud.host.Host.Type) + */ + @Override + public List listAllHostsInAllZonesByType(Type type) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAvailHypervisorInZone(java.lang.Long, java.lang.Long) + */ + @Override + public List listAvailHypervisorInZone(Long hostId, Long zoneId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#findHostByGuid(java.lang.String) + */ + @Override + public HostVO findHostByGuid(String guid) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#findHostByName(java.lang.String) + */ + @Override + public HostVO findHostByName(String name) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listHostsByNameLike(java.lang.String) + */ + @Override + public List listHostsByNameLike(String name) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#findPod(com.cloud.template.VirtualMachineTemplate, com.cloud.service.ServiceOfferingVO, com.cloud.dc.DataCenterVO, long, java.util.Set) + */ + @Override + public Pair findPod(VirtualMachineTemplate template, ServiceOfferingVO offering, DataCenterVO dc, + long accountId, Set avoids) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#getHostStatistics(long) + */ + @Override + public HostStats getHostStatistics(long hostId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#getGuestOSCategoryId(long) + */ + @Override + public Long getGuestOSCategoryId(long hostId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#getHostTags(long) + */ + @Override + public String getHostTags(long hostId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listByDataCenter(long) + */ + @Override + public List listByDataCenter(long dcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllNotInMaintenanceHostsInOneZone(com.cloud.host.Host.Type, java.lang.Long) + */ + @Override + public List listAllNotInMaintenanceHostsInOneZone(Type type, Long dcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#getDefaultHypervisor(long) + */ + @Override + public HypervisorType getDefaultHypervisor(long zoneId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#getAvailableHypervisor(long) + */ + @Override + public HypervisorType getAvailableHypervisor(long zoneId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#getMatchingDiscover(com.cloud.hypervisor.Hypervisor.HypervisorType) + */ + @Override + public Discoverer getMatchingDiscover(HypervisorType hypervisorType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#findHostByGuid(long, java.lang.String) + */ + @Override + public List findHostByGuid(long dcId, String guid) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllUpAndEnabledNonHAHosts(com.cloud.host.Host.Type, java.lang.Long, java.lang.Long, long) + */ + @Override + public List listAllUpAndEnabledNonHAHosts(Type type, Long clusterId, Long podId, long dcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#configure(java.lang.String, java.util.Map) + */ + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#start() + */ + @Override + public boolean start() { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#stop() + */ + @Override + public boolean stop() { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#getName() + */ + @Override + public String getName() { + // TODO Auto-generated method stub + return "MockResourceManagerImpl"; + } + +} diff --git a/server/test/com/cloud/user/MockDomainManagerImpl.java b/server/test/com/cloud/user/MockDomainManagerImpl.java index 9f49535ce68..0fe259d5c77 100644 --- a/server/test/com/cloud/user/MockDomainManagerImpl.java +++ b/server/test/com/cloud/user/MockDomainManagerImpl.java @@ -31,8 +31,8 @@ import com.cloud.exception.PermissionDeniedException; import com.cloud.utils.component.Manager; import com.cloud.utils.Pair; -@Local(value = { DomainManager.class }) -public class MockDomainManagerImpl implements Manager, DomainManager { +@Local(value = { DomainManager.class, DomainService.class }) +public class MockDomainManagerImpl implements Manager, DomainManager, DomainService { @Override public Domain createDomain(String name, Long parentId, String networkDomain) { diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index b29af9e1422..56dcb9ed43c 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -16,43 +16,51 @@ // under the License. package com.cloud.vpc; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; +import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; +import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; import org.apache.log4j.Logger; -import org.apache.cloudstack.acl.ControlledEntity.ACLType; -import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; -import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; import com.cloud.dc.DataCenter; -import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlan; -import com.cloud.exception.*; -import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.network.*; -import com.cloud.network.Network.Capability; -import com.cloud.network.Network.GuestType; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InsufficientVirtualNetworkCapcityException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.IPAddressVO; +import com.cloud.network.IpAddress; +import com.cloud.network.Network; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; +import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkProfile; +import com.cloud.network.NetworkRuleApplier; +import com.cloud.network.NetworkService; +import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; +import com.cloud.network.PhysicalNetwork; +import com.cloud.network.PhysicalNetworkServiceProvider; +import com.cloud.network.PhysicalNetworkTrafficType; +import com.cloud.network.PublicIpAddress; import com.cloud.network.addr.PublicIp; import com.cloud.network.dao.NetworkServiceMapDao; import com.cloud.network.element.LoadBalancingServiceProvider; import com.cloud.network.element.NetworkElement; -import com.cloud.network.element.RemoteAccessVPNServiceProvider; -import com.cloud.network.element.Site2SiteVpnServiceProvider; import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; @@ -67,11 +75,16 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.utils.Pair; import com.cloud.utils.component.Manager; -import com.cloud.vm.*; -import com.cloud.vpc.dao.MockVpcVirtualRouterElement; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachineProfileImpl; @Local(value = { NetworkManager.class, NetworkService.class }) -public class MockNetworkManagerImpl implements NetworkManager, Manager{ +public class MockNetworkManagerImpl implements NetworkManager, NetworkService, Manager{ @Inject NetworkServiceMapDao _ntwkSrvcDao; @Inject @@ -84,1361 +97,8 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ private static final Logger s_logger = Logger.getLogger(MockNetworkManagerImpl.class); - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getIsolatedNetworksOwnedByAccountInZone(long, com.cloud.user.Account) - */ - @Override - public List getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner) { - // TODO Auto-generated method stub - return null; - } + - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#releaseIpAddress(long) - */ - @Override - public boolean releaseIpAddress(long ipAddressId) throws InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#createGuestNetwork(org.apache.cloudstack.api.commands.CreateNetworkCmd) - */ - @Override - public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#searchForNetworks(org.apache.cloudstack.api.commands.ListNetworksCmd) - */ - @Override - public List searchForNetworks(ListNetworksCmd cmd) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#deleteNetwork(long) - */ - @Override - public boolean deleteNetwork(long networkId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#restartNetwork(org.apache.cloudstack.api.commands.RestartNetworkCmd, boolean) - */ - @Override - public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getActiveNicsInNetwork(long) - */ - @Override - public int getActiveNicsInNetwork(long networkId) { - // TODO Auto-generated method stub - return 0; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getNetwork(long) - */ - @Override - public Network getNetwork(long networkId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Network getNetwork(String networkUuid) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getIp(long) - */ - @Override - public IpAddress getIp(long id) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#convertNetworkToNetworkProfile(long) - */ - @Override - public NetworkProfile convertNetworkToNetworkProfile(long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getNetworkCapabilities(long) - */ - @Override - public Map> getNetworkCapabilities(long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#isNetworkAvailableInDomain(long, long) - */ - @Override - public boolean isNetworkAvailableInDomain(long networkId, long domainId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getDedicatedNetworkDomain(long) - */ - @Override - public Long getDedicatedNetworkDomain(long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#updateGuestNetwork(long, java.lang.String, java.lang.String, com.cloud.user.Account, com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean) - */ - @Override - public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getNetworkRate(long, java.lang.Long) - */ - @Override - public Integer getNetworkRate(long networkId, Long vmId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getSystemNetworkByZoneAndTrafficType(long, com.cloud.network.Networks.TrafficType) - */ - @Override - public Network getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getNetworkOfferingServiceProvidersMap(long) - */ - @Override - public Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#createPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.String, java.util.List, java.lang.String, java.lang.Long, java.util.List, java.lang.String) - */ - @Override - public PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List isolationMethods, String broadcastDomainRange, Long domainId, List tags, String name) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#searchPhysicalNetworks(java.lang.Long, java.lang.Long, java.lang.String, java.lang.Long, java.lang.Long, java.lang.String) - */ - @Override - public Pair, Integer> searchPhysicalNetworks(Long id, Long zoneId, String keyword, Long startIndex, Long pageSize, String name) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#updatePhysicalNetwork(java.lang.Long, java.lang.String, java.util.List, java.lang.String, java.lang.String) - */ - @Override - public PhysicalNetwork updatePhysicalNetwork(Long id, String networkSpeed, List tags, String newVnetRangeString, String state) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#deletePhysicalNetwork(java.lang.Long) - */ - @Override - public boolean deletePhysicalNetwork(Long id) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listNetworkServices(java.lang.String) - */ - @Override - public List listNetworkServices(String providerName) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listSupportedNetworkServiceProviders(java.lang.String) - */ - @Override - public List listSupportedNetworkServiceProviders(String serviceName) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#addProviderToPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.Long, java.util.List) - */ - @Override - public PhysicalNetworkServiceProvider addProviderToPhysicalNetwork(Long physicalNetworkId, String providerName, Long destinationPhysicalNetworkId, List enabledServices) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listNetworkServiceProviders(java.lang.Long, java.lang.String, java.lang.String, java.lang.Long, java.lang.Long) - */ - @Override - public Pair, Integer> listNetworkServiceProviders(Long physicalNetworkId, String name, String state, Long startIndex, Long pageSize) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#updateNetworkServiceProvider(java.lang.Long, java.lang.String, java.util.List) - */ - @Override - public PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String state, List enabledServices) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#deleteNetworkServiceProvider(java.lang.Long) - */ - @Override - public boolean deleteNetworkServiceProvider(Long id) throws ConcurrentOperationException, ResourceUnavailableException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getPhysicalNetwork(java.lang.Long) - */ - @Override - public PhysicalNetwork getPhysicalNetwork(Long physicalNetworkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getCreatedPhysicalNetwork(java.lang.Long) - */ - @Override - public PhysicalNetwork getCreatedPhysicalNetwork(Long physicalNetworkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getPhysicalNetworkServiceProvider(java.lang.Long) - */ - @Override - public PhysicalNetworkServiceProvider getPhysicalNetworkServiceProvider(Long providerId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getCreatedPhysicalNetworkServiceProvider(java.lang.Long) - */ - @Override - public PhysicalNetworkServiceProvider getCreatedPhysicalNetworkServiceProvider(Long providerId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#findPhysicalNetworkId(long, java.lang.String, com.cloud.network.Networks.TrafficType) - */ - @Override - public long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType) { - // TODO Auto-generated method stub - return 0; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#addTrafficTypeToPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) - */ - @Override - public PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficType, String xenLabel, String kvmLabel, String vmwareLabel, String simulatorLabel, String vlan) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getPhysicalNetworkTrafficType(java.lang.Long) - */ - @Override - public PhysicalNetworkTrafficType getPhysicalNetworkTrafficType(Long id) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#updatePhysicalNetworkTrafficType(java.lang.Long, java.lang.String, java.lang.String, java.lang.String) - */ - @Override - public PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, String vmwareLabel) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#deletePhysicalNetworkTrafficType(java.lang.Long) - */ - @Override - public boolean deletePhysicalNetworkTrafficType(Long id) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listTrafficTypes(java.lang.Long) - */ - @Override - public Pair, Integer> listTrafficTypes(Long physicalNetworkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getDefaultPhysicalNetworkByZoneAndTrafficType(long, com.cloud.network.Networks.TrafficType) - */ - @Override - public PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getExclusiveGuestNetwork(long) - */ - @Override - public Network getExclusiveGuestNetwork(long zoneId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listTrafficTypeImplementor(org.apache.cloudstack.api.commands.ListTrafficTypeImplementorsCmd) - */ - @Override - public List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long, com.cloud.user.Account) - */ - @Override - public List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listNetworksByVpc(long) - */ - @Override - public List listNetworksByVpc(long vpcId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#isVmPartOfNetwork(long, long) - */ - @Override - public boolean isVmPartOfNetwork(long vmId, long ntwkId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#associateIPToNetwork(long, long) - */ - @Override - public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#createPrivateNetwork(java.lang.String, java.lang.String, long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, java.lang.Long) - */ - @Override - public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan, String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId) - throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#canUseForDeploy(com.cloud.network.Network) - */ - @Override - public boolean canUseForDeploy(Network network) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignPublicIpAddress(long, java.lang.Long, com.cloud.user.Account, com.cloud.dc.Vlan.VlanType, java.lang.Long, java.lang.String, boolean) - */ - @Override - public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner, VlanType type, Long networkId, String requestedIp, boolean isSystem) throws InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#disassociatePublicIpAddress(long, long, com.cloud.user.Account) - */ - @Override - public boolean disassociatePublicIpAddress(long id, long userId, Account caller) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listPublicIpsAssignedToGuestNtwk(long, long, java.lang.Boolean) - */ - @Override - public List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#setupNetwork(com.cloud.user.Account, com.cloud.offerings.NetworkOfferingVO, com.cloud.deploy.DeploymentPlan, java.lang.String, java.lang.String, boolean) - */ - @Override - public List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) throws ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#setupNetwork(com.cloud.user.Account, com.cloud.offerings.NetworkOfferingVO, com.cloud.network.Network, com.cloud.deploy.DeploymentPlan, java.lang.String, java.lang.String, boolean, java.lang.Long, org.apache.cloudstack.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long) - */ - @Override - public List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, ACLType aclType, - Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getSystemAccountNetworkOfferings(java.lang.String[]) - */ - @Override - public List getSystemAccountNetworkOfferings(String... offeringNames) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#allocate(com.cloud.vm.VirtualMachineProfile, java.util.List) - */ - @Override - public void allocate(VirtualMachineProfile vm, List> networks) throws InsufficientCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#prepare(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext) - */ - @Override - public void prepare(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context) throws InsufficientCapacityException, ConcurrentOperationException, - ResourceUnavailableException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#release(com.cloud.vm.VirtualMachineProfile, boolean) - */ - @Override - public void release(VirtualMachineProfile vmProfile, boolean forced) throws ConcurrentOperationException, ResourceUnavailableException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#cleanupNics(com.cloud.vm.VirtualMachineProfile) - */ - @Override - public void cleanupNics(VirtualMachineProfile vm) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#expungeNics(com.cloud.vm.VirtualMachineProfile) - */ - @Override - public void expungeNics(VirtualMachineProfile vm) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNics(long) - */ - @Override - public List getNics(long vmId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNicProfiles(com.cloud.vm.VirtualMachine) - */ - @Override - public List getNicProfiles(VirtualMachine vm) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNextAvailableMacAddressInNetwork(long) - */ - @Override - public String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#applyRules(java.util.List, boolean) - */ - @Override - public boolean applyRules(List rules, boolean continueOnError) throws ResourceUnavailableException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#validateRule(com.cloud.network.rules.FirewallRule) - */ - @Override - public boolean validateRule(FirewallRule rule) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getRemoteAccessVpnElements() - */ - @Override - public List getRemoteAccessVpnElements() { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getSite2SiteVpnElements() - */ - @Override - public List getSite2SiteVpnElements() { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPublicIpAddress(long) - */ - @Override - public PublicIpAddress getPublicIpAddress(long ipAddressId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listPodVlans(long) - */ - @Override - public List listPodVlans(long podId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#implementNetwork(long, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext) - */ - @Override - public Pair implementNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, - InsufficientCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listNetworksUsedByVm(long, boolean) - */ - @Override - public List listNetworksUsedByVm(long vmId, boolean isSystem) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#prepareNicForMigration(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination) - */ - @Override - public void prepareNicForMigration(VirtualMachineProfile vm, DeployDestination dest) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#shutdownNetwork(long, com.cloud.vm.ReservationContext, boolean) - */ - @Override - public boolean shutdownNetwork(long networkId, ReservationContext context, boolean cleanupElements) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#destroyNetwork(long, com.cloud.vm.ReservationContext) - */ - @Override - public boolean destroyNetwork(long networkId, ReservationContext context) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#createGuestNetwork(long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.cloud.user.Account, java.lang.Long, com.cloud.network.PhysicalNetwork, long, org.apache.cloudstack.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long) - */ - @Override - public Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, String cidr, String vlanId, String networkDomain, Account owner, Long domainId, - PhysicalNetwork physicalNetwork, long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#associateIpAddressListToAccount(long, long, long, java.lang.Long, com.cloud.network.Network) - */ - @Override - public boolean associateIpAddressListToAccount(long userId, long accountId, long zoneId, Long vlanId, Network guestNetwork) throws InsufficientCapacityException, ConcurrentOperationException, - ResourceUnavailableException, ResourceAllocationException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNicInNetwork(long, long) - */ - @Override - public Nic getNicInNetwork(long vmId, long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNicsForTraffic(long, com.cloud.network.Networks.TrafficType) - */ - @Override - public List getNicsForTraffic(long vmId, TrafficType type) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultNetworkForVm(long) - */ - @Override - public Network getDefaultNetworkForVm(long vmId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultNic(long) - */ - @Override - public Nic getDefaultNic(long vmId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPasswordResetElements() - */ - @Override - public UserDataServiceProvider getPasswordResetProvider(Network network) { - // TODO Auto-generated method stub - return null; - } - - @Override - public UserDataServiceProvider getUserDataUpdateProvider(Network network) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#networkIsConfiguredForExternalNetworking(long, long) - */ - @Override - public boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNetworkServiceCapabilities(long, com.cloud.network.Network.Service) - */ - @Override - public Map getNetworkServiceCapabilities(long networkId, Service service) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#applyIpAssociations(com.cloud.network.Network, boolean) - */ - @Override - public boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#areServicesSupportedByNetworkOffering(long, com.cloud.network.Network.Service[]) - */ - @Override - public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { - return (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(networkOfferingId, services)); - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNetworkWithSecurityGroupEnabled(java.lang.Long) - */ - @Override - public NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#startNetwork(long, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext) - */ - @Override - public boolean startNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getIpOfNetworkElementInVirtualNetwork(long, long) - */ - @Override - public String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listNetworksForAccount(long, long, com.cloud.network.Network.GuestType) - */ - @Override - public List listNetworksForAccount(long accountId, long zoneId, GuestType type) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listAllNetworksInAllZonesByType(com.cloud.network.Network.GuestType) - */ - @Override - public List listAllNetworksInAllZonesByType(GuestType type) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#markIpAsUnavailable(long) - */ - @Override - public IPAddressVO markIpAsUnavailable(long addrId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#acquireGuestIpAddress(com.cloud.network.Network, java.lang.String) - */ - @Override - public String acquireGuestIpAddress(Network network, String requestedIp) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getGlobalGuestDomainSuffix() - */ - @Override - public String getGlobalGuestDomainSuffix() { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getStartIpAddress(long) - */ - @Override - public String getStartIpAddress(long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#applyStaticNats(java.util.List, boolean) - */ - @Override - public boolean applyStaticNats(List staticNats, boolean continueOnError) throws ResourceUnavailableException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getIpInNetwork(long, long) - */ - @Override - public String getIpInNetwork(long vmId, long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getIpInNetworkIncludingRemoved(long, long) - */ - @Override - public String getIpInNetworkIncludingRemoved(long vmId, long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPodIdForVlan(long) - */ - @Override - public Long getPodIdForVlan(long vlanDbId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listNetworkOfferingsForUpgrade(long) - */ - @Override - public List listNetworkOfferingsForUpgrade(long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isSecurityGroupSupportedInNetwork(com.cloud.network.Network) - */ - @Override - public boolean isSecurityGroupSupportedInNetwork(Network network) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isProviderSupportServiceInNetwork(long, com.cloud.network.Network.Service, com.cloud.network.Network.Provider) - */ - @Override - public boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isProviderEnabledInPhysicalNetwork(long, java.lang.String) - */ - @Override - public boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNetworkTag(com.cloud.hypervisor.Hypervisor.HypervisorType, com.cloud.network.Network) - */ - @Override - public String getNetworkTag(HypervisorType hType, Network network) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getElementServices(com.cloud.network.Network.Provider) - */ - @Override - public List getElementServices(Provider provider) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#canElementEnableIndividualServices(com.cloud.network.Network.Provider) - */ - @Override - public boolean canElementEnableIndividualServices(Provider provider) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#areServicesSupportedInNetwork(long, com.cloud.network.Network.Service[]) - */ - @Override - public boolean areServicesSupportedInNetwork(long networkId, Service... services) { - return (_ntwkSrvcDao.areServicesSupportedInNetwork(networkId, services)); - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isNetworkSystem(com.cloud.network.Network) - */ - @Override - public boolean isNetworkSystem(Network network) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#reallocate(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DataCenterDeployment) - */ - @Override - public boolean reallocate(VirtualMachineProfile vm, DataCenterDeployment dest) throws InsufficientCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNetworkOfferingServiceCapabilities(com.cloud.offering.NetworkOffering, com.cloud.network.Network.Service) - */ - @Override - public Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPhysicalNetworkId(com.cloud.network.Network) - */ - @Override - public Long getPhysicalNetworkId(Network network) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getAllowSubdomainAccessGlobal() - */ - @Override - public boolean getAllowSubdomainAccessGlobal() { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isProviderForNetwork(com.cloud.network.Network.Provider, long) - */ - @Override - public boolean isProviderForNetwork(Provider provider, long networkId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isProviderForNetworkOffering(com.cloud.network.Network.Provider, long) - */ - @Override - public boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#canProviderSupportServices(java.util.Map) - */ - @Override - public void canProviderSupportServices(Map> providersMap) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPhysicalNetworkInfo(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public List getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#canAddDefaultSecurityGroup() - */ - @Override - public boolean canAddDefaultSecurityGroup() { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listNetworkOfferingServices(long) - */ - @Override - public List listNetworkOfferingServices(long networkOfferingId) { - List supportedSvcs = new ArrayList(); - if (networkOfferingId != 2) { - supportedSvcs.add(Service.SourceNat); - } - return supportedSvcs; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#areServicesEnabledInZone(long, com.cloud.offering.NetworkOffering, java.util.List) - */ - @Override - public boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getIpToServices(java.util.List, boolean, boolean) - */ - @Override - public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getProviderToIpList(com.cloud.network.Network, java.util.Map) - */ - @Override - public Map> getProviderToIpList(Network network, Map> ipToServices) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#checkIpForService(com.cloud.network.IPAddressVO, com.cloud.network.Network.Service, java.lang.Long) - */ - @Override - public boolean checkIpForService(IPAddressVO ip, Service service, Long networkId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#checkCapabilityForProvider(java.util.Set, com.cloud.network.Network.Service, com.cloud.network.Network.Capability, java.lang.String) - */ - @Override - public void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultUniqueProviderForService(java.lang.String) - */ - @Override - public Provider getDefaultUniqueProviderForService(String serviceName) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignSystemIp(long, com.cloud.user.Account, boolean, boolean) - */ - @Override - public IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) throws InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#handleSystemIpRelease(com.cloud.network.IpAddress) - */ - @Override - public boolean handleSystemIpRelease(IpAddress ip) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#checkNetworkPermissions(com.cloud.user.Account, com.cloud.network.Network) - */ - @Override - public void checkNetworkPermissions(Account owner, Network network) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#allocateDirectIp(com.cloud.vm.NicProfile, com.cloud.dc.DataCenter, com.cloud.vm.VirtualMachineProfile, com.cloud.network.Network, java.lang.String) - */ - @Override - public void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile vm, Network network, String requestedIp) throws InsufficientVirtualNetworkCapcityException, - InsufficientAddressCapacityException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultManagementTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultStorageTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultPublicTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultPublicTrafficLabel(long dcId, HypervisorType vmware) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultGuestTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultGuestTrafficLabel(long dcId, HypervisorType vmware) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getElementImplementingProvider(java.lang.String) - */ - @Override - public NetworkElement getElementImplementingProvider(String providerName) { - return new MockVpcVirtualRouterElement(); - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignSourceNatIpAddressToGuestNetwork(com.cloud.user.Account, com.cloud.network.Network) - */ - @Override - public PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network guestNetwork) throws InsufficientAddressCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getAccountNetworkDomain(long, long) - */ - @Override - public String getAccountNetworkDomain(long accountId, long zoneId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultNetworkDomain() - */ - @Override - public String getDefaultNetworkDomain() { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNtwkOffDistinctProviders(long) - */ - @Override - public List getNtwkOffDistinctProviders(long ntwkOffId) { - List providers = new ArrayList(); - providers.add(Provider.VPCVirtualRouter); - return providers; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#allocateNic(com.cloud.vm.NicProfile, com.cloud.network.Network, java.lang.Boolean, int, com.cloud.vm.VirtualMachineProfile) - */ - @Override - public Pair allocateNic(NicProfile requested, Network network, Boolean isDefaultNic, int deviceId, VirtualMachineProfile vm) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#prepareNic(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext, long, com.cloud.network.NetworkVO) - */ - @Override - public NicProfile prepareNic(VirtualMachineProfile vmProfile, DeployDestination dest, ReservationContext context, long nicId, NetworkVO network) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#removeNic(com.cloud.vm.VirtualMachineProfile, com.cloud.vm.Nic) - */ - @Override - public void removeNic(VirtualMachineProfile vm, Nic nic) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listPublicIpsAssignedToAccount(long, long, java.lang.Boolean) - */ - @Override - public List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#associateIPToGuestNetwork(long, long, boolean) - */ - @Override - public IPAddressVO associateIPToGuestNetwork(long ipAddrId, long networkId, boolean releaseOnFailure) throws ResourceAllocationException, ResourceUnavailableException, InsufficientAddressCapacityException, - ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNicProfile(com.cloud.vm.VirtualMachine, long, java.lang.String) - */ - @Override - public NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#setupDns(com.cloud.network.Network, com.cloud.network.Network.Provider) - */ - @Override - public boolean setupDns(Network network, Provider provider) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#releaseNic(com.cloud.vm.VirtualMachineProfile, com.cloud.vm.Nic) - */ - @Override - public void releaseNic(VirtualMachineProfile vmProfile, Nic nic) throws ConcurrentOperationException, ResourceUnavailableException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPhysicalNtwksSupportingTrafficType(long, com.cloud.network.Networks.TrafficType) - */ - @Override - public List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isPrivateGateway(com.cloud.vm.Nic) - */ - @Override - public boolean isPrivateGateway(Nic guestNic) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#createNicForVm(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.ReservationContext, com.cloud.vm.VirtualMachineProfileImpl, boolean) - */ - @Override - public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context, VirtualMachineProfileImpl vmProfile, boolean prepare) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignVpnGatewayIpAddress(long, com.cloud.user.Account, long) - */ - @Override - public PublicIp assignVpnGatewayIpAddress(long dcId, Account owner, long vpcId) throws InsufficientAddressCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#markPublicIpAsAllocated(com.cloud.network.IPAddressVO) - */ - @Override - public void markPublicIpAsAllocated(IPAddressVO addr) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignDedicateIpAddress(com.cloud.user.Account, java.lang.Long, java.lang.Long, long, boolean) - */ - @Override - public PublicIp assignDedicateIpAddress(Account owner, Long guestNtwkId, Long vpcId, long dcId, boolean isSourceNat) throws ConcurrentOperationException, InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.utils.component.Manager#configure(java.lang.String, java.util.Map) - */ - @Override - public boolean configure(String name, Map params) throws ConfigurationException { - // TODO Auto-generated method stub - return true; - } /* (non-Javadoc) * @see com.cloud.utils.component.Manager#start() @@ -1451,23 +111,44 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ if (s_providerToNetworkElementMap.containsKey(implementedProvider.getName())) { s_logger.error("Cannot start MapNetworkManager: Provider <-> NetworkElement must be a one-to-one map, " + "multiple NetworkElements found for Provider: " + implementedProvider.getName()); - return false; - } + return false; + } s_providerToNetworkElementMap.put(implementedProvider.getName(), element.getName()); - } - } + } + } return true; } + + + + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#configure(java.lang.String, java.util.Map) + */ + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + // TODO Auto-generated method stub + return false; + } + + + + + /* (non-Javadoc) * @see com.cloud.utils.component.Manager#stop() */ @Override public boolean stop() { // TODO Auto-generated method stub - return true; + return false; } + + + + /* (non-Javadoc) * @see com.cloud.utils.component.Manager#getName() */ @@ -1477,16 +158,1040 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ return null; } + + + + /* (non-Javadoc) - * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, boolean, long) + * @see com.cloud.network.NetworkService#getIsolatedNetworksOwnedByAccountInZone(long, com.cloud.user.Account) */ @Override - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { + public List getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner) { // TODO Auto-generated method stub return null; } + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, long, java.lang.Long) + */ + @Override + public IpAddress allocateIP(Account ipOwner, boolean isSystem, long networkId) throws ResourceAllocationException, + InsufficientAddressCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#releaseIpAddress(long) + */ + @Override + public boolean releaseIpAddress(long ipAddressId) throws InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#createGuestNetwork(com.cloud.api.commands.CreateNetworkCmd) + */ + @Override + public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapacityException, + ConcurrentOperationException, ResourceAllocationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#searchForNetworks(com.cloud.api.commands.ListNetworksCmd) + */ + @Override + public List searchForNetworks(ListNetworksCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#deleteNetwork(long) + */ + @Override + public boolean deleteNetwork(long networkId) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#restartNetwork(com.cloud.api.commands.RestartNetworkCmd, boolean) + */ + @Override + public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) throws ConcurrentOperationException, + ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getActiveNicsInNetwork(long) + */ + @Override + public int getActiveNicsInNetwork(long networkId) { + // TODO Auto-generated method stub + return 0; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getNetwork(long) + */ + @Override + public Network getNetwork(long networkId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getIp(long) + */ + @Override + public IpAddress getIp(long id) { + // TODO Auto-generated method stub + return null; + } + + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#updateGuestNetwork(long, java.lang.String, java.lang.String, com.cloud.user.Account, com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean) + */ + @Override + public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, + User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#createPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.String, java.util.List, java.lang.String, java.lang.Long, java.util.List, java.lang.String) + */ + @Override + public PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, + List isolationMethods, String broadcastDomainRange, Long domainId, List tags, String name) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#searchPhysicalNetworks(java.lang.Long, java.lang.Long, java.lang.String, java.lang.Long, java.lang.Long, java.lang.String) + */ + @Override + public Pair, Integer> searchPhysicalNetworks(Long id, Long zoneId, String keyword, + Long startIndex, Long pageSize, String name) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#updatePhysicalNetwork(java.lang.Long, java.lang.String, java.util.List, java.lang.String, java.lang.String) + */ + @Override + public PhysicalNetwork updatePhysicalNetwork(Long id, String networkSpeed, List tags, + String newVnetRangeString, String state) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#deletePhysicalNetwork(java.lang.Long) + */ + @Override + public boolean deletePhysicalNetwork(Long id) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#listNetworkServices(java.lang.String) + */ + @Override + public List listNetworkServices(String providerName) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#addProviderToPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.Long, java.util.List) + */ + @Override + public PhysicalNetworkServiceProvider addProviderToPhysicalNetwork(Long physicalNetworkId, String providerName, + Long destinationPhysicalNetworkId, List enabledServices) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#listNetworkServiceProviders(java.lang.Long, java.lang.String, java.lang.String, java.lang.Long, java.lang.Long) + */ + @Override + public Pair, Integer> listNetworkServiceProviders( + Long physicalNetworkId, String name, String state, Long startIndex, Long pageSize) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#updateNetworkServiceProvider(java.lang.Long, java.lang.String, java.util.List) + */ + @Override + public PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String state, + List enabledServices) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#deleteNetworkServiceProvider(java.lang.Long) + */ + @Override + public boolean deleteNetworkServiceProvider(Long id) throws ConcurrentOperationException, + ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getPhysicalNetwork(java.lang.Long) + */ + @Override + public PhysicalNetwork getPhysicalNetwork(Long physicalNetworkId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getCreatedPhysicalNetwork(java.lang.Long) + */ + @Override + public PhysicalNetwork getCreatedPhysicalNetwork(Long physicalNetworkId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getPhysicalNetworkServiceProvider(java.lang.Long) + */ + @Override + public PhysicalNetworkServiceProvider getPhysicalNetworkServiceProvider(Long providerId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getCreatedPhysicalNetworkServiceProvider(java.lang.Long) + */ + @Override + public PhysicalNetworkServiceProvider getCreatedPhysicalNetworkServiceProvider(Long providerId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#findPhysicalNetworkId(long, java.lang.String, com.cloud.network.Networks.TrafficType) + */ + @Override + public long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType) { + // TODO Auto-generated method stub + return 0; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#addTrafficTypeToPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficType, + String xenLabel, String kvmLabel, String vmwareLabel, String simulatorLabel, String vlan) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getPhysicalNetworkTrafficType(java.lang.Long) + */ + @Override + public PhysicalNetworkTrafficType getPhysicalNetworkTrafficType(Long id) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#updatePhysicalNetworkTrafficType(java.lang.Long, java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, + String vmwareLabel) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#deletePhysicalNetworkTrafficType(java.lang.Long) + */ + @Override + public boolean deletePhysicalNetworkTrafficType(Long id) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#listTrafficTypes(java.lang.Long) + */ + @Override + public Pair, Integer> listTrafficTypes(Long physicalNetworkId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getExclusiveGuestNetwork(long) + */ + @Override + public Network getExclusiveGuestNetwork(long zoneId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#listTrafficTypeImplementor(org.apache.cloudstack.api.commands.ListTrafficTypeImplementorsCmd) + */ + @Override + public List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long, com.cloud.user.Account) + */ + @Override + public List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#associateIPToNetwork(long, long) + */ + @Override + public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, + ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#createPrivateNetwork(java.lang.String, java.lang.String, long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, java.lang.Long) + */ + @Override + public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan, + String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId) + throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignPublicIpAddress(long, java.lang.Long, com.cloud.user.Account, com.cloud.dc.Vlan.VlanType, java.lang.Long, java.lang.String, boolean) + */ + @Override + public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner, VlanType type, Long networkId, + String requestedIp, boolean isSystem) throws InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#disassociatePublicIpAddress(long, long, com.cloud.user.Account) + */ + @Override + public boolean disassociatePublicIpAddress(long id, long userId, Account caller) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#setupNetwork(com.cloud.user.Account, com.cloud.offerings.NetworkOfferingVO, com.cloud.deploy.DeploymentPlan, java.lang.String, java.lang.String, boolean) + */ + @Override + public List setupNetwork(Account owner, NetworkOffering offering, DeploymentPlan plan, String name, + String displayText, boolean isDefault) throws ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#setupNetwork(com.cloud.user.Account, com.cloud.offerings.NetworkOfferingVO, com.cloud.network.Network, com.cloud.deploy.DeploymentPlan, java.lang.String, java.lang.String, boolean, java.lang.Long, org.apache.cloudstack.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long) + */ + @Override + public List setupNetwork(Account owner, NetworkOffering offering, Network predefined, + DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, + ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocate(com.cloud.vm.VirtualMachineProfile, java.util.List) + */ + @Override + public void allocate(VirtualMachineProfile vm, List> networks) + throws InsufficientCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#prepare(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext) + */ + @Override + public void prepare(VirtualMachineProfile profile, DeployDestination dest, + ReservationContext context) throws InsufficientCapacityException, ConcurrentOperationException, + ResourceUnavailableException { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#release(com.cloud.vm.VirtualMachineProfile, boolean) + */ + @Override + public void release(VirtualMachineProfile vmProfile, boolean forced) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#cleanupNics(com.cloud.vm.VirtualMachineProfile) + */ + @Override + public void cleanupNics(VirtualMachineProfile vm) { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#expungeNics(com.cloud.vm.VirtualMachineProfile) + */ + @Override + public void expungeNics(VirtualMachineProfile vm) { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#getNicProfiles(com.cloud.vm.VirtualMachine) + */ + @Override + public List getNicProfiles(VirtualMachine vm) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#applyRules(java.util.List, com.cloud.network.rules.FirewallRule.Purpose, com.cloud.network.NetworkRuleApplier, boolean) + */ + @Override + public boolean applyRules(List rules, Purpose purpose, NetworkRuleApplier applier, + boolean continueOnError) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#implementNetwork(long, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext) + */ + @Override + public Pair implementNetwork(long networkId, DeployDestination dest, + ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, + InsufficientCapacityException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#prepareNicForMigration(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination) + */ + @Override + public void prepareNicForMigration(VirtualMachineProfile vm, DeployDestination dest) { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#shutdownNetwork(long, com.cloud.vm.ReservationContext, boolean) + */ + @Override + public boolean shutdownNetwork(long networkId, ReservationContext context, boolean cleanupElements) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#destroyNetwork(long, com.cloud.vm.ReservationContext) + */ + @Override + public boolean destroyNetwork(long networkId, ReservationContext context) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#createGuestNetwork(long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.cloud.user.Account, java.lang.Long, com.cloud.network.PhysicalNetwork, long, org.apache.cloudstack.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long) + */ + @Override + public Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, + String cidr, String vlanId, String networkDomain, Account owner, Long domainId, + PhysicalNetwork physicalNetwork, long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId) + throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#associateIpAddressListToAccount(long, long, long, java.lang.Long, com.cloud.network.Network) + */ + @Override + public boolean associateIpAddressListToAccount(long userId, long accountId, long zoneId, Long vlanId, + Network guestNetwork) throws InsufficientCapacityException, ConcurrentOperationException, + ResourceUnavailableException, ResourceAllocationException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#getPasswordResetProvider(com.cloud.network.Network) + */ + @Override + public UserDataServiceProvider getPasswordResetProvider(Network network) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#applyIpAssociations(com.cloud.network.Network, boolean) + */ + @Override + public boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#applyIpAssociations(com.cloud.network.Network, boolean, boolean, java.util.List) + */ + @Override + public boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, + List publicIps) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#startNetwork(long, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext) + */ + @Override + public boolean startNetwork(long networkId, DeployDestination dest, ReservationContext context) + throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#markIpAsUnavailable(long) + */ + @Override + public IPAddressVO markIpAsUnavailable(long addrId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#acquireGuestIpAddress(com.cloud.network.Network, java.lang.String) + */ + @Override + public String acquireGuestIpAddress(Network network, String requestedIp) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#applyStaticNats(java.util.List, boolean) + */ + @Override + public boolean applyStaticNats(List staticNats, boolean continueOnError) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#reallocate(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DataCenterDeployment) + */ + @Override + public boolean reallocate(VirtualMachineProfile vm, DataCenterDeployment dest) + throws InsufficientCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignSystemIp(long, com.cloud.user.Account, boolean, boolean) + */ + @Override + public IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) + throws InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#handleSystemIpRelease(com.cloud.network.IpAddress) + */ + @Override + public boolean handleSystemIpRelease(IpAddress ip) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocateDirectIp(com.cloud.vm.NicProfile, com.cloud.dc.DataCenter, com.cloud.vm.VirtualMachineProfile, com.cloud.network.Network, java.lang.String) + */ + @Override + public void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile vm, + Network network, String requestedIp) throws InsufficientVirtualNetworkCapcityException, + InsufficientAddressCapacityException { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignSourceNatIpAddressToGuestNetwork(com.cloud.user.Account, com.cloud.network.Network) + */ + @Override + public PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network guestNetwork) + throws InsufficientAddressCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocateNic(com.cloud.vm.NicProfile, com.cloud.network.Network, java.lang.Boolean, int, com.cloud.vm.VirtualMachineProfile) + */ + @Override + public Pair allocateNic(NicProfile requested, Network network, Boolean isDefaultNic, + int deviceId, VirtualMachineProfile vm) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#prepareNic(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext, long, com.cloud.network.NetworkVO) + */ + @Override + public NicProfile prepareNic(VirtualMachineProfile vmProfile, DeployDestination dest, + ReservationContext context, long nicId, NetworkVO network) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#removeNic(com.cloud.vm.VirtualMachineProfile, com.cloud.vm.Nic) + */ + @Override + public void removeNic(VirtualMachineProfile vm, Nic nic) { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#associateIPToGuestNetwork(long, long, boolean) + */ + @Override + public IPAddressVO associateIPToGuestNetwork(long ipAddrId, long networkId, boolean releaseOnFailure) + throws ResourceAllocationException, ResourceUnavailableException, InsufficientAddressCapacityException, + ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#setupDns(com.cloud.network.Network, com.cloud.network.Network.Provider) + */ + @Override + public boolean setupDns(Network network, Provider provider) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#releaseNic(com.cloud.vm.VirtualMachineProfile, com.cloud.vm.Nic) + */ + @Override + public void releaseNic(VirtualMachineProfile vmProfile, Nic nic) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#createNicForVm(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.ReservationContext, com.cloud.vm.VirtualMachineProfileImpl, boolean) + */ + @Override + public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context, + VirtualMachineProfileImpl vmProfile, boolean prepare) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignVpnGatewayIpAddress(long, com.cloud.user.Account, long) + */ + @Override + public PublicIp assignVpnGatewayIpAddress(long dcId, Account owner, long vpcId) + throws InsufficientAddressCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#markPublicIpAsAllocated(com.cloud.network.IPAddressVO) + */ + @Override + public void markPublicIpAsAllocated(IPAddressVO addr) { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignDedicateIpAddress(com.cloud.user.Account, java.lang.Long, java.lang.Long, long, boolean) + */ + @Override + public PublicIp assignDedicateIpAddress(Account owner, Long guestNtwkId, Long vpcId, long dcId, boolean isSourceNat) + throws ConcurrentOperationException, InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#convertNetworkToNetworkProfile(long) + */ + @Override + public NetworkProfile convertNetworkToNetworkProfile(long networkId) { + // TODO Auto-generated method stub + return null; + } + + + + + /* (non-Javadoc) * @see com.cloud.network.NetworkManager#getNetworkLockTimeout() */ @@ -1496,6 +1201,88 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ return 0; } + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#cleanupIpResources(long, long, com.cloud.user.Account) + */ + @Override + public boolean cleanupIpResources(long addrId, long userId, Account caller) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#restartNetwork(java.lang.Long, com.cloud.user.Account, com.cloud.user.User, boolean) + */ + @Override + public boolean restartNetwork(Long networkId, Account callerAccount, User callerUser, boolean cleanup) + throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#shutdownNetworkElementsAndResources(com.cloud.vm.ReservationContext, boolean, com.cloud.network.NetworkVO) + */ + @Override + public boolean shutdownNetworkElementsAndResources(ReservationContext context, boolean b, NetworkVO network) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#implementNetworkElementsAndResources(com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext, com.cloud.network.NetworkVO, com.cloud.offerings.NetworkOfferingVO) + */ + @Override + public void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, + NetworkVO network, NetworkOfferingVO findById) throws ConcurrentOperationException, + InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocateIp(com.cloud.user.Account, boolean, com.cloud.user.Account, com.cloud.dc.DataCenter) + */ + @Override + public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, long callerId, DataCenter zone) + throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#finalizeServicesAndProvidersForNetwork(com.cloud.offering.NetworkOffering, java.lang.Long) + */ + @Override + public Map finalizeServicesAndProvidersForNetwork(NetworkOffering offering, Long physicalNetworkId) { + // TODO Auto-generated method stub + return null; + } + @Override public boolean isNetworkInlineMode(Network network) { // TODO Auto-generated method stub @@ -1525,4 +1312,17 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ // TODO Auto-generated method stub return null; } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getNetwork(java.lang.String) + */ + @Override + public Network getNetwork(String networkUuid) { + // TODO Auto-generated method stub + return null; + } } diff --git a/server/test/com/cloud/vpc/MockSite2SiteVpnServiceProvider.java b/server/test/com/cloud/vpc/MockSite2SiteVpnServiceProvider.java new file mode 100644 index 00000000000..8f5c0c1c1bf --- /dev/null +++ b/server/test/com/cloud/vpc/MockSite2SiteVpnServiceProvider.java @@ -0,0 +1,86 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.vpc; + +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.Site2SiteVpnConnection; +import com.cloud.network.element.Site2SiteVpnServiceProvider; + +@Local({Site2SiteVpnServiceProvider.class}) +public class MockSite2SiteVpnServiceProvider implements Site2SiteVpnServiceProvider { + + /* (non-Javadoc) + * @see com.cloud.utils.component.Adapter#configure(java.lang.String, java.util.Map) + */ + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Adapter#getName() + */ + @Override + public String getName() { + // TODO Auto-generated method stub + return "Site2SiteVpnServiceProvider"; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Adapter#start() + */ + @Override + public boolean start() { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Adapter#stop() + */ + @Override + public boolean stop() { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.network.element.Site2SiteVpnServiceProvider#startSite2SiteVpn(com.cloud.network.Site2SiteVpnConnection) + */ + @Override + public boolean startSite2SiteVpn(Site2SiteVpnConnection conn) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.network.element.Site2SiteVpnServiceProvider#stopSite2SiteVpn(com.cloud.network.Site2SiteVpnConnection) + */ + @Override + public boolean stopSite2SiteVpn(Site2SiteVpnConnection conn) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return true; + } + +} diff --git a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java new file mode 100644 index 00000000000..65ee33a65ab --- /dev/null +++ b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java @@ -0,0 +1,391 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.vpc; + +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd; + +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; +import com.cloud.network.RemoteAccessVpn; +import com.cloud.network.Site2SiteVpnConnection; +import com.cloud.network.VpcVirtualNetworkApplianceService; +import com.cloud.network.VpnUser; +import com.cloud.network.router.VirtualRouter; +import com.cloud.network.router.VpcVirtualNetworkApplianceManager; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.StaticNat; +import com.cloud.network.vpc.PrivateGateway; +import com.cloud.network.vpc.StaticRouteProfile; +import com.cloud.network.vpc.Vpc; +import com.cloud.user.Account; +import com.cloud.user.User; +import com.cloud.uservm.UserVm; +import com.cloud.utils.component.Manager; +import com.cloud.vm.DomainRouterVO; +import com.cloud.vm.NicProfile; +import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachineProfile.Param; + +@Local(value = {VpcVirtualNetworkApplianceManager.class, VpcVirtualNetworkApplianceService.class}) +public class MockVpcVirtualNetworkApplianceManager implements VpcVirtualNetworkApplianceManager, + VpcVirtualNetworkApplianceService, Manager { + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#sendSshKeysToHost(java.lang.Long, java.lang.String, java.lang.String) + */ + @Override + public boolean sendSshKeysToHost(Long hostId, String pubKey, String prvKey) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#savePasswordToRouter(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.VirtualMachineProfile, java.util.List) + */ + @Override + public boolean savePasswordToRouter(Network network, NicProfile nic, VirtualMachineProfile profile, + List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#saveUserDataToRouter(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.VirtualMachineProfile, java.util.List) + */ + @Override + public boolean saveUserDataToRouter(Network network, NicProfile nic, VirtualMachineProfile profile, + List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#deployVirtualRouterInGuestNetwork(com.cloud.network.Network, com.cloud.deploy.DeployDestination, com.cloud.user.Account, java.util.Map, boolean) + */ + @Override + public List deployVirtualRouterInGuestNetwork(Network guestNetwork, DeployDestination dest, + Account owner, Map params, boolean isRedundant) throws InsufficientCapacityException, + ResourceUnavailableException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#startRemoteAccessVpn(com.cloud.network.Network, com.cloud.network.RemoteAccessVpn, java.util.List) + */ + @Override + public boolean startRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List routers) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#deleteRemoteAccessVpn(com.cloud.network.Network, com.cloud.network.RemoteAccessVpn, java.util.List) + */ + @Override + public boolean deleteRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List routers) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#associatePublicIP(com.cloud.network.Network, java.util.List, java.util.List) + */ + @Override + public boolean associatePublicIP(Network network, List ipAddress, + List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#applyFirewallRules(com.cloud.network.Network, java.util.List, java.util.List) + */ + @Override + public boolean applyFirewallRules(Network network, List rules, + List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#getRoutersForNetwork(long) + */ + @Override + public List getRoutersForNetwork(long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#applyVpnUsers(com.cloud.network.Network, java.util.List, java.util.List) + */ + @Override + public String[] applyVpnUsers(Network network, List users, List routers) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#stop(com.cloud.network.router.VirtualRouter, boolean, com.cloud.user.User, com.cloud.user.Account) + */ + @Override + public VirtualRouter stop(VirtualRouter router, boolean forced, User callingUser, Account callingAccount) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#getDnsBasicZoneUpdate() + */ + @Override + public String getDnsBasicZoneUpdate() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#applyStaticNats(com.cloud.network.Network, java.util.List, java.util.List) + */ + @Override + public boolean applyStaticNats(Network network, List rules, + List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#applyDhcpEntry(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, java.util.List) + */ + @Override + public boolean applyDhcpEntry(Network config, NicProfile nic, VirtualMachineProfile vm, + DeployDestination dest, List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#applyUserData(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, java.util.List) + */ + @Override + public boolean applyUserData(Network config, NicProfile nic, VirtualMachineProfile vm, + DeployDestination dest, List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.VirtualNetworkApplianceService#startRouter(long, boolean) + */ + @Override + public VirtualRouter startRouter(long routerId, boolean reprogramNetwork) throws ConcurrentOperationException, + ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.VirtualNetworkApplianceService#rebootRouter(long, boolean) + */ + @Override + public VirtualRouter rebootRouter(long routerId, boolean reprogramNetwork) throws ConcurrentOperationException, + ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.VirtualNetworkApplianceService#upgradeRouter(com.cloud.api.commands.UpgradeRouterCmd) + */ + @Override + public VirtualRouter upgradeRouter(UpgradeRouterCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.VirtualNetworkApplianceService#stopRouter(long, boolean) + */ + @Override + public VirtualRouter stopRouter(long routerId, boolean forced) throws ResourceUnavailableException, + ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.VirtualNetworkApplianceService#startRouter(long) + */ + @Override + public VirtualRouter startRouter(long id) throws ResourceUnavailableException, InsufficientCapacityException, + ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.VirtualNetworkApplianceService#destroyRouter(long, com.cloud.user.Account, java.lang.Long) + */ + @Override + public VirtualRouter destroyRouter(long routerId, Account caller, Long callerUserId) + throws ResourceUnavailableException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#configure(java.lang.String, java.util.Map) + */ + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + return true; + + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#start() + */ + @Override + public boolean start() { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#stop() + */ + @Override + public boolean stop() { + return true; + + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#getName() + */ + @Override + public String getName() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.VpcVirtualNetworkApplianceService#addVpcRouterToGuestNetwork(com.cloud.network.router.VirtualRouter, com.cloud.network.Network, boolean) + */ + @Override + public boolean addVpcRouterToGuestNetwork(VirtualRouter router, Network network, boolean isRedundant) + throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.VpcVirtualNetworkApplianceService#removeVpcRouterFromGuestNetwork(com.cloud.network.router.VirtualRouter, com.cloud.network.Network, boolean) + */ + @Override + public boolean removeVpcRouterFromGuestNetwork(VirtualRouter router, Network network, boolean isRedundant) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#deployVirtualRouterInVpc(com.cloud.network.vpc.Vpc, com.cloud.deploy.DeployDestination, com.cloud.user.Account, java.util.Map) + */ + @Override + public List deployVirtualRouterInVpc(Vpc vpc, DeployDestination dest, Account owner, + Map params) throws InsufficientCapacityException, ConcurrentOperationException, + ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#applyNetworkACLs(com.cloud.network.Network, java.util.List, java.util.List) + */ + @Override + public boolean applyNetworkACLs(Network network, List rules, + List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#setupPrivateGateway(com.cloud.network.vpc.PrivateGateway, com.cloud.network.router.VirtualRouter) + */ + @Override + public boolean setupPrivateGateway(PrivateGateway gateway, VirtualRouter router) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#destroyPrivateGateway(com.cloud.network.vpc.PrivateGateway, com.cloud.network.router.VirtualRouter) + */ + @Override + public boolean destroyPrivateGateway(PrivateGateway gateway, VirtualRouter router) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#applyStaticRoutes(java.util.List, java.util.List) + */ + @Override + public boolean applyStaticRoutes(List routes, List routers) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#startSite2SiteVpn(com.cloud.network.Site2SiteVpnConnection, com.cloud.network.router.VirtualRouter) + */ + @Override + public boolean startSite2SiteVpn(Site2SiteVpnConnection conn, VirtualRouter router) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#stopSite2SiteVpn(com.cloud.network.Site2SiteVpnConnection, com.cloud.network.router.VirtualRouter) + */ + @Override + public boolean stopSite2SiteVpn(Site2SiteVpnConnection conn, VirtualRouter router) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/server/test/com/cloud/vpc/Site2SiteVpnTest.java b/server/test/com/cloud/vpc/Site2SiteVpnTest.java new file mode 100644 index 00000000000..dd6a4fab6a4 --- /dev/null +++ b/server/test/com/cloud/vpc/Site2SiteVpnTest.java @@ -0,0 +1,98 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.vpc; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import junit.framework.Assert; + +import org.apache.log4j.Logger; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.cloud.configuration.DefaultInterceptorLibrary; +import com.cloud.network.dao.IPAddressDaoImpl; +import com.cloud.network.dao.Site2SiteCustomerGatewayDaoImpl; +import com.cloud.network.dao.Site2SiteVpnConnectionDao; +import com.cloud.network.dao.Site2SiteVpnConnectionDaoImpl; +import com.cloud.network.dao.Site2SiteVpnGatewayDaoImpl; +import com.cloud.network.element.Site2SiteVpnServiceProvider; +import com.cloud.network.vpc.dao.VpcDaoImpl; +import com.cloud.network.vpn.Site2SiteVpnManagerImpl; +import com.cloud.user.MockAccountManagerImpl; +import com.cloud.user.dao.AccountDaoImpl; +import com.cloud.utils.Pair; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.Inject; +import com.cloud.utils.component.MockComponentLocator; +import com.cloud.vpc.dao.MockConfigurationDaoImpl; + +public class Site2SiteVpnTest { + private MockComponentLocator locator; + private final static Logger s_logger = Logger.getLogger(Site2SiteVpnTest.class); + + private static void addDaos(MockComponentLocator locator) { + locator.addDao("AccountDao", AccountDaoImpl.class); + locator.addDao("Site2SiteCustomerGatewayDao", Site2SiteCustomerGatewayDaoImpl.class); + locator.addDao("Site2SiteVpnGatewayDao", Site2SiteVpnGatewayDaoImpl.class); + locator.addDao("Site2SiteVpnConnectionDao", Site2SiteVpnConnectionDaoImpl.class); + + locator.addDao("IPAddressDao", IPAddressDaoImpl.class); + locator.addDao("VpcDao", VpcDaoImpl.class); + locator.addDao("ConfiguratioDao", MockConfigurationDaoImpl.class); + + } + + private static void addManagers(MockComponentLocator locator) { + locator.addManager("AccountManager", MockAccountManagerImpl.class); + locator.addManager("VpcManager", MockVpcManagerImpl.class); + } + + @Before + public void setUp() { + locator = new MockComponentLocator("management-server"); + addDaos(locator); + addManagers(locator); + s_logger.info("Finished setUp"); + } + + @After + public void tearDown() throws Exception { + } + + + @Test + public void testInjected() throws Exception { + List>> list = + new ArrayList>>(); + list.add(new Pair>("Site2SiteVpnServiceProvider", MockSite2SiteVpnServiceProvider.class)); + locator.addAdapterChain(Site2SiteVpnServiceProvider.class, list); + s_logger.info("Finished add adapter"); + locator.makeActive(new DefaultInterceptorLibrary()); + s_logger.info("Finished make active"); + Site2SiteVpnManagerImpl vpnMgr = ComponentLocator.inject(Site2SiteVpnManagerImpl.class); + s_logger.info("Finished inject"); + Assert.assertTrue(vpnMgr.configure("Site2SiteVpnMgr",new HashMap()) ); + Assert.assertTrue(vpnMgr.start()); + + } + + +} diff --git a/server/test/resources/network-mgr-component.xml b/server/test/resources/network-mgr-component.xml new file mode 100644 index 00000000000..42d3c2ebdb1 --- /dev/null +++ b/server/test/resources/network-mgr-component.xml @@ -0,0 +1,184 @@ + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/setup/db/create-schema-view.sql b/setup/db/create-schema-view.sql old mode 100755 new mode 100644 diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 864fe52224a..2b724aa248b 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -344,7 +344,6 @@ CREATE TABLE `cloud`.`network_offerings` ( `state` char(32) COMMENT 'state of the network offering that has Disabled value by default', `guest_type` char(32) COMMENT 'type of guest network that can be shared or isolated', `elastic_ip_service` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if the network offering provides elastic ip service', - `eip_associate_public_ip` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if public IP is associated with user VM creation by default when EIP service is enabled.', `elastic_lb_service` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if the network offering provides elastic lb service', `specify_ip_ranges` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if the network offering provides an ability to define ip ranges', `inline` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'Is this network offering LB provider is in inline mode', diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index bf3fb303e5b..a9d168d6eed 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -58,7 +58,6 @@ ALTER TABLE `cloud`.`snapshots` ADD COLUMN `s3_id` bigint unsigned COMMENT 'S3 t ALTER TABLE `cloud`.`snapshots` ADD CONSTRAINT `fk_snapshots__s3_id` FOREIGN KEY `fk_snapshots__s3_id` (`s3_id`) REFERENCES `s3` (`id`); -ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `eip_associate_public_ip` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if public IP is associated with user VM creation by default when EIP service is enabled.' AFTER `elastic_ip_service`; ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `inline` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'Is this network offering LB provider is in inline mode'; ALTER TABLE `cloud`.`external_load_balancer_devices` DROP COLUMN `is_inline`; @@ -945,3 +944,5 @@ left join host_pod_ref on storage_pool.pod_id = host_pod_ref.id left join storage_pool_details on storage_pool_details.pool_id = storage_pool.id and storage_pool_details.value = 'true' left join op_host_capacity on storage_pool.id = op_host_capacity.host_id and op_host_capacity.capacity_type = 3 left join async_job on async_job.instance_id = storage_pool.id and async_job.instance_type = "StoragePool" and async_job.job_status = 0; + +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', 'direct.agent.pool.size', '500', 'Default size for DirectAgentPool'); diff --git a/setup/db/templates.kvm.sql b/setup/db/templates.kvm.sql index bc275f5285d..8a5582540af 100644 --- a/setup/db/templates.kvm.sql +++ b/setup/db/templates.kvm.sql @@ -51,11 +51,12 @@ INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (U INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 10', 'Fedora 10'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 9', 'Fedora 9'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 8', 'Fedora 8'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 10.04', 'Ubuntu 10.04'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 9.10', 'Ubuntu 9.10'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 9.04', 'Ubuntu 9.04'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 8.10', 'Ubuntu 8.10'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 8.04', 'Ubuntu 8.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 12.04', 'Ubuntu 12.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 10.04', 'Ubuntu 10.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 9.10', 'Ubuntu 9.10'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 9.04', 'Ubuntu 9.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 8.10', 'Ubuntu 8.10'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 8.04', 'Ubuntu 8.04'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Debian Squeeze', 'Debian Squeeze'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Debian Lenny', 'Debian Lenny'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Debian Etch', 'Debian Etch'); diff --git a/setup/db/templates.sql b/setup/db/templates.sql index 3867d4fe9d2..9980b159630 100755 --- a/setup/db/templates.sql +++ b/setup/db/templates.sql @@ -211,6 +211,8 @@ INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (159 INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (160, UUID(), 6, 'Windows PV'); INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (161, UUID(), 1, 'CentOS 5.7 (32-bit)'); INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (162, UUID(), 1, 'CentOS 5.7 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (163, UUID(), 10, 'Ubuntu 12.04 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (164, UUID(), 10, 'Ubuntu 12.04 (64-bit)'); INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (200, UUID(), 1, 'Other CentOS (32-bit)'); INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (201, UUID(), 1, 'Other CentOS (64-bit)'); @@ -370,11 +372,13 @@ INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Debian GNU/Linux 4(32-bit)', 73); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Debian GNU/Linux 4(64-bit)', 74); +INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 12.04 (32-bit)', 162); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 10.04 (32-bit)', 121); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 9.10 (32-bit)', 122); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 9.04 (32-bit)', 123); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 8.10 (32-bit)', 124); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 8.04 (32-bit)', 125); +INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 12.04 (64-bit)', 163); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 10.04 (64-bit)', 126); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 9.10 (64-bit)', 127); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 9.04 (64-bit)', 128); @@ -385,6 +389,7 @@ INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other Ubuntu Linux (32-bit)', 59); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other Ubuntu (64-bit)', 100); + INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other 2.6x Linux (32-bit)', 75); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other 2.6x Linux (64-bit)', 76); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other Linux (32-bit)', 98); @@ -454,6 +459,8 @@ INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Fedora 8', 120); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 10.04', 121); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 10.04', 126); +INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 10.04', 162); +INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 10.04', 163); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 9.10', 122); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 9.10', 127); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 9.04', 123); diff --git a/test/integration/smoke/test_routers.py b/test/integration/smoke/test_routers.py index 93dc7606ace..435c7e41a43 100644 --- a/test/integration/smoke/test_routers.py +++ b/test/integration/smoke/test_routers.py @@ -41,7 +41,7 @@ class Services: "displaytext": "Tiny Instance", "cpunumber": 1, "cpuspeed": 100, # in MHz - "memory": 64, # In MBs + "memory": 128, # In MBs }, "virtual_machine": { diff --git a/test/integration/smoke/test_service_offerings.py b/test/integration/smoke/test_service_offerings.py index 3a8a9e156b9..7f4d130ee80 100644 --- a/test/integration/smoke/test_service_offerings.py +++ b/test/integration/smoke/test_service_offerings.py @@ -39,7 +39,7 @@ class Services: "displaytext": "Service Offering", "cpunumber": 1, "cpuspeed": 100, # MHz - "memory": 64, # in MBs + "memory": 128, # in MBs }, } diff --git a/test/integration/smoke/test_templates.py b/test/integration/smoke/test_templates.py index d450a5d8122..663b174ed78 100644 --- a/test/integration/smoke/test_templates.py +++ b/test/integration/smoke/test_templates.py @@ -52,7 +52,7 @@ class Services: "displaytext": "Tiny Instance", "cpunumber": 1, "cpuspeed": 100, # in MHz - "memory": 64, # In MBs + "memory": 128, # In MBs }, "disk_offering": { "displaytext": "Small", diff --git a/test/integration/smoke/test_vm_life_cycle.py b/test/integration/smoke/test_vm_life_cycle.py index f6fe4e002a1..0bd4f959bc3 100644 --- a/test/integration/smoke/test_vm_life_cycle.py +++ b/test/integration/smoke/test_vm_life_cycle.py @@ -80,7 +80,7 @@ class Services: "displaytext": "Tiny Instance", "cpunumber": 1, "cpuspeed": 100, # in MHz - "memory": 64, # In MBs + "memory": 128, # In MBs }, "small": { diff --git a/test/integration/smoke/test_volumes.py b/test/integration/smoke/test_volumes.py index 2d0cd491672..36eb5ded263 100644 --- a/test/integration/smoke/test_volumes.py +++ b/test/integration/smoke/test_volumes.py @@ -53,13 +53,21 @@ class Services: "displaytext": "Tiny Instance", "cpunumber": 1, "cpuspeed": 100, # in MHz - "memory": 64, # In MBs + "memory": 128, # In MBs + "storagetype": "local" }, "disk_offering": { "displaytext": "Small", "name": "Small", + "storagetype": "local", "disksize": 1 }, + 'resized_disk_offering': { + "displaytext": "Resized", + "name": "Resized", + "storagetype": "local", + "disksize": 3 + }, "volume_offerings": { 0: { "diskname": "TestDiskServ", @@ -77,8 +85,8 @@ class Services: "diskdevice": "/dev/xvdb", "ostype": 'CentOS 5.3 (64-bit)', "mode": 'basic', - "sleep": 60, - "timeout": 10, + "sleep": 10, + "timeout": 600, } @@ -237,7 +245,7 @@ class TestCreateVolume(cloudstackTestCase): ssh = self.virtual_machine.get_ssh_client( reconnect=True ) - c = "fdisk -l" + c = "/sbin/fdisk -l" res = ssh.execute(c) except Exception as e: @@ -283,6 +291,16 @@ class TestVolumes(cloudstackTestCase): cls.api_client, cls.services["disk_offering"] ) + cls.resized_disk_offering = DiskOffering.create( + cls.api_client, + cls.services["resized_disk_offering"] + ) + cls.custom_resized_disk_offering = DiskOffering.create( + cls.api_client, + cls.services["resized_disk_offering"], + custom=True + ) + template = get_template( cls.api_client, cls.zone.id, @@ -292,6 +310,8 @@ class TestVolumes(cloudstackTestCase): cls.services["zoneid"] = cls.zone.id cls.services["template"] = template.id cls.services["diskofferingid"] = cls.disk_offering.id + cls.services['resizeddiskofferingid'] = cls.resized_disk_offering.id + cls.services['customresizeddiskofferingid'] = cls.custom_resized_disk_offering.id # Create VMs, VMs etc cls.account = Account.create( @@ -321,6 +341,8 @@ class TestVolumes(cloudstackTestCase): domainid=cls.account.account.domainid ) cls._cleanup = [ + cls.resized_disk_offering, + cls.custom_resized_disk_offering, cls.service_offering, cls.disk_offering, cls.account @@ -500,7 +522,102 @@ class TestVolumes(cloudstackTestCase): ) @attr(tags = ["advanced", "advancedns", "smoke"]) - def test_07_delete_detached_volume(self): + def test_07_resize_fail(self): + """Verify invalid options fail to Resize a volume""" + # Verify the size is the new size is what we wanted it to be. + self.debug("Fail Resize Volume ID: %s" % self.volume.id) + + # first, an invalid id + cmd = resizeVolume.resizeVolumeCmd() + cmd.id = "invalid id" + cmd.diskofferingid = self.services['resizeddiskofferingid'] + success = False + try: + response = self.apiClient.resizeVolume(cmd) + except Exception as ex: + if str(ex) == "HTTP Error 431: 431": + success = True + self.assertEqual(success, True, "ResizeVolume - verify invalid id is handled appropriately") + + # Next, we'll try an invalid disk offering id + cmd.id = self.volume.id + cmd.diskofferingid = "invalid id" + success = False + try: + response = self.apiClient.resizeVolume(cmd) + except Exception as ex: + if "need to specify a disk offering" in str(ex): + success = True + self.assertEqual(success, True, "ResizeVolume - verify disk offering is handled appropriately") + + # Ok, now let's try and resize a volume that is not custom. + cmd.id = self.volume.id + cmd.diskofferingid = self.services['diskofferingid'] + cmd.size = 4 + currentSize = self.volume.size + + self.apiClient.resizeVolume(cmd) + count = 0 + success = True + while count < 10: + list_volume_response = list_volumes( + self.apiClient, + id=self.volume.id, + type='DATADISK' + ) + for vol in list_volume_response: + if vol.id == self.volume.id and vol.size != currentSize: + success = False + if success: + break + else: + time.sleep(1) + count += 1 + + self.assertEqual( + success, + True, + "Verify the volume did not resize" + ) + + + @attr(tags = ["advanced", "advancedns", "smoke"]) + def test_08_resize_volume(self): + """Resize a volume""" + # Verify the size is the new size is what we wanted it to be. + self.debug("Resize Volume ID: %s" % self.volume.id) + + cmd = resizeVolume.resizeVolumeCmd() + cmd.id = self.volume.id + cmd.diskofferingid = self.services['resizeddiskofferingid'] + + self.apiClient.resizeVolume(cmd) + + count = 0 + success = False + while count < 3: + list_volume_response = list_volumes( + self.apiClient, + id=self.volume.id, + type='DATADISK' + ) + for vol in list_volume_response: + if vol.id == self.volume.id and vol.size == 3221225472L: + success = True + if success: + break + else: + time.sleep(10) + count += 1 + + self.assertEqual( + success, + True, + "Check if the volume resized appropriately" + ) + + @attr(tags = ["advanced", "advancedns", "smoke"]) + def test_09_delete_detached_volume(self): """Delete a Volume unattached to an VM """ # Validate the following diff --git a/tools/apidoc/gen_toc.py b/tools/apidoc/gen_toc.py index 0b281a29c1d..7739aea633f 100644 --- a/tools/apidoc/gen_toc.py +++ b/tools/apidoc/gen_toc.py @@ -129,6 +129,7 @@ known_categories = { 'AutoScale': 'AutoScale', 'Counter': 'AutoScale', 'Condition': 'AutoScale', + 'Api': 'API Discovery', } diff --git a/tools/apidoc/pom.xml b/tools/apidoc/pom.xml index bc7411f7013..6b159ff54eb 100644 --- a/tools/apidoc/pom.xml +++ b/tools/apidoc/pom.xml @@ -57,7 +57,7 @@ ${client.config.jars} ./target -f - ${client.config.conf}/commands.properties,${client.config.conf}/commands-ext.properties,${client.config.conf}/virtualrouter_commands.properties,${client.config.conf}/nicira-nvp_commands.properties + ${client.config.conf}/commands.properties diff --git a/tools/devcloud-kvm/devcloud-kvm-advanced.cfg b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg new file mode 100644 index 00000000000..10cbce00779 --- /dev/null +++ b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg @@ -0,0 +1,134 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + + +{ + "zones": [ + { + "localstorageenabled": "true", + "name": "testzone", + "guestcidraddress": "10.1.1.0/24", + "dns1": "8.8.8.8", + "physical_networks": [ + { + "broadcastdomainrange": "Zone", + "vlan": "3900-4000", + "name": "eth0", + "traffictypes": [ + { + "kvm": "cloudbr0", + "typ": "Management" + }, + { + "kvm": "cloudbr0", + "typ": "Guest" + } + ], + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + }, + { + "broadcastdomainrange": "ZONE", + "name": "VpcVirtualRouter" + } + ] + }, + { + "broadcastdomainrange": "Zone", + "name": "eth1", + "traffictypes": [ + { + "kvm": "cloudbr1", + "typ": "Public" + } + ], + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + } + ] + } + ], + "ipranges": [ + { + "startip": "192.168.100.100", + "endip": "192.168.100.199", + "netmask": "255.255.255.0", + "vlan": "untagged", + "gateway": "192.168.100.1" + } + ], + "networktype": "Advanced", + "pods": [ + { + "endip": "172.17.10.199", + "name": "testpod", + "startip": "172.17.10.100", + "netmask": "255.255.255.0", + "clusters": [ + { + "clustername": "testcluster", + "hypervisor": "KVM", + "hosts": [ + { + "username": "root", + "url": "http://172.17.10.10/", + "password": "password" + } + ], + "clustertype": "CloudManaged" + } + ], + "gateway": "172.17.10.1" + } + ], + "internaldns1": "8.8.4.4", + "secondaryStorages": [ + { + "url": "nfs://172.17.10.10:/nfs/secondary" + } + ] + } + ], + "dbSvr": { + "dbSvr": "127.0.0.1", + "passwd": "cloud", + "db": "cloud", + "port": 3306, + "user": "cloud" + }, + "logger": [ + { + "name": "TestClient", + "file": "/var/log/testclient.log" + }, + { + "name": "TestCase", + "file": "/var/log/testcase.log" + } + ], + "mgtSvr": [ + { + "mgtSvrIp": "172.17.10.10", + "port": 8096 + } + ] +} diff --git a/tools/devcloud-kvm/devcloud-kvm.cfg b/tools/devcloud-kvm/devcloud-kvm.cfg index 47a128fea14..b3f048aac97 100644 --- a/tools/devcloud-kvm/devcloud-kvm.cfg +++ b/tools/devcloud-kvm/devcloud-kvm.cfg @@ -1,3 +1,23 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# This is a stock devcloud config converted from the file +# tools/devcloud/devcloud.cfg. + { "zones": [ { diff --git a/tools/devcloud-kvm/devcloud-kvm.py b/tools/devcloud-kvm/devcloud-kvm.py new file mode 100644 index 00000000000..dd551b58552 --- /dev/null +++ b/tools/devcloud-kvm/devcloud-kvm.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +''' +############################################################ +# Experimental state of scripts +# * Need to be reviewed +# * Only a sandbox +############################################################ +''' +import random +import marvin +from ConfigParser import SafeConfigParser +from optparse import OptionParser +from marvin.configGenerator import * + + +def getGlobalSettings(config): + for k, v in dict(config.items('globals')).iteritems(): + cfg = configuration() + cfg.name = k + cfg.value = v + yield cfg + + +def describeDevcloudKvmResources(config): + zs = cloudstackConfiguration() + + z = zone() + z.dns1 = config.get('environment', 'dns') + z.internaldns1 = config.get('environment', 'dns') + z.name = 'Devcloud-%s'%(config.get('cloudstack', 'hypervisor')) + z.networktype = 'Advanced' + z.guestcidraddress = '10.1.1.0/24' + z.localstorageenabled = 'true' + + vpcprovider = provider() + vpcprovider.name = 'VpcVirtualRouter' + + pn = physical_network() + pn.name = "eth0" + pn.vlan = config.get('cloudstack', 'pnet.vlan') + pn.tags = ["devcloud-guest"] + pn.traffictypes = [traffictype("Guest", {"kvm" :"kvm-guest" }), traffictype("Management")] + pn.providers.append(vpcprovider) + + pn2 = physical_network() + pn2.name = "eth1" + pn2.vlan = config.get('cloudstack', 'pnet2.vlan') + pn2.tags = ["devcloud-public"] + pn2.traffictypes = [traffictype("Public", {"kvm" : "kvm-public"})] + pn2.providers.append(vpcprovider) + + z.physical_networks.append(pn) + z.physical_networks.append(pn2) + + p = pod() + p.name = 'POD0' + p.gateway = config.get('cloudstack', 'private.gateway') + p.startip = config.get('cloudstack', 'private.pod.startip') + p.endip = config.get('cloudstack', 'private.pod.endip') + p.netmask = config.get('cloudstack', 'private.netmask') + + v = iprange() + v.gateway = config.get('cloudstack', 'public.gateway') + v.startip = config.get('cloudstack', 'public.vlan.startip') + v.endip = config.get('cloudstack', 'public.vlan.endip') + v.netmask = config.get('cloudstack', 'public.netmask') + v.vlan = config.get('cloudstack', 'public.vlan') + z.ipranges.append(v) + + c = cluster() + c.clustername = 'C0' + c.hypervisor = config.get('cloudstack', 'hypervisor') + c.clustertype = 'CloudManaged' + + h = host() + h.username = 'root' + h.password = config.get('cloudstack', 'host.password') + h.url = 'http://%s'%(config.get('cloudstack', 'host')) + c.hosts.append(h) + + ps = primaryStorage() + ps.name = 'PS0' + ps.url = config.get('cloudstack', 'primary.pool') + c.primaryStorages.append(ps) + + p.clusters.append(c) + z.pods.append(p) + + secondary = secondaryStorage() + secondary.url = config.get('cloudstack', 'secondary.pool') + z.secondaryStorages.append(secondary) + + '''Add zone''' + zs.zones.append(z) + + '''Add mgt server''' + mgt = managementServer() + mgt.mgtSvrIp = config.get('environment', 'mshost') + mgt.user = config.get('environment', 'mshost.user') + mgt.passwd = config.get('environment', 'mshost.passwd') + zs.mgtSvr.append(mgt) + + '''Add a database''' + db = dbServer() + db.dbSvr = config.get('environment', 'mysql.host') + db.user = config.get('environment', 'mysql.cloud.user') + db.passwd = config.get('environment', 'mysql.cloud.passwd') + zs.dbSvr = db + + '''Add some configuration''' + [zs.globalConfig.append(cfg) for cfg in getGlobalSettings(config)] + + ''''add loggers''' + testClientLogger = logger() + testClientLogger.name = 'TestClient' + testClientLogger.file = 'testclient.log' + + testCaseLogger = logger() + testCaseLogger.name = 'TestCase' + testCaseLogger.file = 'testcase.log' + + zs.logger.append(testClientLogger) + zs.logger.append(testCaseLogger) + return zs + + +if __name__ == '__main__': + parser = OptionParser() + parser.add_option('-i', '--input', action='store', default='setup.properties', \ + dest='input', help='file containing environment setup information') + parser.add_option('-o', '--output', action='store', default='./devcloud-kvm-advanced.cfg', \ + dest='output', help='path where environment json will be generated') + + + (opts, args) = parser.parse_args() + + cfg_parser = SafeConfigParser() + cfg_parser.read(opts.input) + + cfg = describeDevcloudKvmResources(cfg_parser) + generate_setup_config(cfg, opts.output) diff --git a/tools/devcloud-kvm/devcloud-kvm.sql b/tools/devcloud-kvm/devcloud-kvm.sql index 97478834bf3..6d559a9c91a 100644 --- a/tools/devcloud-kvm/devcloud-kvm.sql +++ b/tools/devcloud-kvm/devcloud-kvm.sql @@ -17,7 +17,7 @@ INSERT INTO `cloud`.`disk_offering` (id, name, uuid, display_text, created, use_local_storage, type, disk_size) VALUES (17, 'tinyOffering', UUID(), 'tinyOffering', NOW(), 1, 'Service', 0); -INSERT INTO `cloud`.`service_offering` (id, cpu, speed, ram_size) VALUES (17, 1, 100, 100); +INSERT INTO `cloud`.`service_offering` (id, cpu, speed, ram_size) VALUES (17, 1, 100, 128); INSERT INTO `cloud`.`disk_offering` (id, name, uuid, display_text, created, type, disk_size) VALUES (18, 'tinyDiskOffering', UUID(), 'tinyDiskOffering', NOW(), 'Disk', 1073741824); INSERT INTO `cloud`.`configuration` (instance, name,value) VALUE('DEFAULT','router.ram.size', '100'); INSERT INTO `cloud`.`configuration` (instance, name,value) VALUE('DEFAULT','router.cpu.mhz','100'); @@ -37,4 +37,5 @@ INSERT INTO `cloud`.`configuration` (instance, name, value) VALUE('DEFAULT', 'se UPDATE `cloud`.`configuration` SET value='10' where name = 'storage.overprovisioning.factor'; UPDATE `cloud`.`configuration` SET value='10' where name = 'cpu.overprovisioning.factor'; UPDATE `cloud`.`configuration` SET value='10' where name = 'mem.overprovisioning.factor'; -UPDATE `cloud`.`vm_template` SET unique_name="tiny Linux",name="tiny Linux",url="http://marcus.mlsorensen.com/cloudstack-extras/ttylinux_pv.qcow2",checksum="81dcf4b4ca05a3b637a040e851568f29",display_text="tiny Linux",format='QCOW2',hypervisor_type='KVM' where id=5; +UPDATE `cloud`.`vm_template` SET unique_name="tiny CentOS 6.3",name="tiny CentOS 6.3",url="http://marcus.mlsorensen.com/cloudstack-extras/tiny-centos-63.qcow2",checksum="4bbb806aa8570f4dfac13b4c38ea1603",display_text="tiny CentOS 6.3",format='QCOW2',hypervisor_type='KVM' where id=5; +UPDATE `cloud`.`vm_template` SET url="http://dontdownloadthistemplate" where id=4; diff --git a/tools/devcloud-kvm/kvm.properties b/tools/devcloud-kvm/kvm.properties new file mode 100644 index 00000000000..79afcd4a8ea --- /dev/null +++ b/tools/devcloud-kvm/kvm.properties @@ -0,0 +1,62 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + + +[globals] +#global settings in cloudstack +expunge.delay=60 +expunge.interval=60 +storage.cleanup.interval=300 +account.cleanup.interval=600 +expunge.workers=3 +workers=10 +vm.allocation.algorithm=random +vm.op.wait.interval=5 +guest.domain.suffix=devcloud.kvm +instance.name=vm +check.pod.cidrs=true +secstorage.allowed.internal.sites=10.147.28.0/24 +[environment] +dns=8.8.8.8 +mshost=127.0.0.1 +mshost.user=root +mshost.passwd=password +mysql.host=127.0.0.1 +mysql.cloud.user=cloud +mysql.cloud.passwd=cloud +[cloudstack] +#guest VLAN +pnet.vlan=3900-3919 +pnet2.vlan=3920-3939 +#management network +private.gateway=192.168.56.1 +private.pod.startip=192.168.56.200 +private.pod.endip=192.168.56.249 +private.netmask=255.255.255.0 +#public network +public.gateway=10.0.3.2 +public.vlan=31 +public.vlan.startip=10.0.3.100 +public.vlan.endip=10.0.3.199 +public.netmask=255.255.255.0 +#hypervisor host information +hypervisor=KVM +host=192.168.56.10 +host.password=password +#storage pools +primary.pool=nfs://192.168.56.10/opt/storage/primary +secondary.pool=nfs://192.168.56.10/opt/storage/secondary diff --git a/tools/devcloud/devcloud-advanced.cfg b/tools/devcloud/devcloud-advanced.cfg new file mode 100644 index 00000000000..75c3a4f7147 --- /dev/null +++ b/tools/devcloud/devcloud-advanced.cfg @@ -0,0 +1,135 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# This configuration is meant for running advanced networking, with management server on the laptop. +# It requires that the user run a DNS resolver within devcloud via 'apt-get install dnsmasq' + +{ + "zones": [ + { + "localstorageenabled": "true", + "name": "testzone", + "guestcidraddress": "10.1.1.0/24", + "dns1": "8.8.8.8", + "physical_networks": [ + { + "broadcastdomainrange": "Zone", + "vlan": "3900-4000", + "name": "eth0", + "traffictypes": [ + { + "xen": "Pool-wide network associated with eth0", + "typ": "Management" + }, + { + "xen": "Pool-wide network associated with eth0", + "typ": "Guest" + } + ], + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + }, + { + "broadcastdomainrange": "ZONE", + "name": "VpcVirtualRouter" + } + ] + }, + { + "broadcastdomainrange": "Zone", + "name": "eth1", + "traffictypes": [ + { + "xen": "Pool-wide network associated with eth1", + "typ": "Public" + } + ], + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + } + ] + } + ], + "ipranges": [ + { + "startip": "10.0.3.100", + "endip": "10.0.3.199", + "netmask": "255.255.255.0", + "vlan": "untagged", + "gateway": "10.0.3.2" + } + ], + "networktype": "Advanced", + "pods": [ + { + "endip": "192.168.56.249", + "name": "testpod", + "startip": "192.168.56.200", + "netmask": "255.255.255.0", + "clusters": [ + { + "clustername": "testcluster", + "hypervisor": "XenServer", + "hosts": [ + { + "username": "root", + "url": "http://192.168.56.10/", + "password": "password" + } + ], + "clustertype": "CloudManaged" + } + ], + "gateway": "192.168.56.1" + } + ], + "internaldns1": "192.168.56.10", + "secondaryStorages": [ + { + "url": "nfs://192.168.56.10:/opt/storage/secondary" + } + ] + } + ], + "dbSvr": { + "dbSvr": "127.0.0.1", + "passwd": "cloud", + "db": "cloud", + "port": 3306, + "user": "cloud" + }, + "logger": [ + { + "name": "TestClient", + "file": "/var/log/testclient.log" + }, + { + "name": "TestCase", + "file": "/var/log/testcase.log" + } + ], + "mgtSvr": [ + { + "mgtSvrIp": "192.168.56.10", + "port": 8096 + } + ] +} diff --git a/tools/devcloud/devcloud-advanced_internal-mgt.cfg b/tools/devcloud/devcloud-advanced_internal-mgt.cfg new file mode 100644 index 00000000000..a1a8cb54722 --- /dev/null +++ b/tools/devcloud/devcloud-advanced_internal-mgt.cfg @@ -0,0 +1,141 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# This config is designed to run as an advanced network, with management server in devcloud +# It also requires an 'apt-get install dnsmasq' to run a resolver in devcloud for internal dns + +{ + "zones": [ + { + "localstorageenabled": "true", + "name": "testzone", + "guestcidraddress": "10.1.1.0/24", + "dns1": "8.8.8.8", + "physical_networks": [ + { + "broadcastdomainrange": "Zone", + "vlan": "3900-4000", + "name": "eth0", + "traffictypes": [ + { + "xen": "Pool-wide network associated with eth0", + "typ": "Management" + }, + { + "xen": "Pool-wide network associated with eth0", + "typ": "Guest" + } + ], + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + }, + { + "broadcastdomainrange": "ZONE", + "name": "VpcVirtualRouter" + } + ] + }, + { + "broadcastdomainrange": "Zone", + "name": "eth1", + "traffictypes": [ + { + "xen": "Pool-wide network associated with eth1", + "typ": "Public" + } + ], + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + } + ] + } + ], + "ipranges": [ + { + "startip": "10.0.3.100", + "endip": "10.0.3.199", + "netmask": "255.255.255.0", + "vlan": "untagged", + "gateway": "10.0.3.2" + } + ], + "networktype": "Advanced", + "pods": [ + { + "endip": "192.168.56.249", + "name": "testpod", + "startip": "192.168.56.200", + "netmask": "255.255.255.0", + "clusters": [ + { + "clustername": "testcluster", + "hypervisor": "XenServer", + "hosts": [ + { + "username": "root", + "url": "http://192.168.56.10/", + "password": "password" + } + ], + "clustertype": "CloudManaged" + } + ], + "gateway": "192.168.56.1" + } + ], + "internaldns1": "192.168.56.10", + "secondaryStorages": [ + { + "url": "nfs://192.168.56.10:/opt/storage/secondary" + } + ] + } + ], + "dbSvr": { + "dbSvr": "127.0.0.1", + "passwd": "cloud", + "db": "cloud", + "port": 3306, + "user": "cloud" + }, + "logger": [ + { + "name": "TestClient", + "file": "/var/log/testclient.log" + }, + { + "name": "TestCase", + "file": "/var/log/testcase.log" + } + ], + "mgtSvr": [ + { + "mgtSvrIp": "192.168.56.10", + "port": 8096 + } + ], + "globalConfig": [ + { + "name": "host", + "value": "192.168.56.10" + } + ] +} diff --git a/tools/devcloud/devcloud.cfg b/tools/devcloud/devcloud.cfg index 8d296eb7b98..c41f8bcef58 100644 --- a/tools/devcloud/devcloud.cfg +++ b/tools/devcloud/devcloud.cfg @@ -1,3 +1,21 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + { "zones": [ { diff --git a/tools/marvin/marvin/configGenerator.py b/tools/marvin/marvin/configGenerator.py index d494beb6444..e2a6a24d69f 100644 --- a/tools/marvin/marvin/configGenerator.py +++ b/tools/marvin/marvin/configGenerator.py @@ -65,8 +65,6 @@ class zone(): self.internaldns2 = None self.securitygroupenabled = None self.localstorageenabled = None - ''' Guest Vlan range - only advanced zone''' - self.vlan = None '''default public network, in advanced mode''' self.ipranges = [] self.physical_networks = [] @@ -80,6 +78,7 @@ class traffictype(): self.xen = labeldict['xen'] if 'xen' in labeldict.keys() else None self.kvm = labeldict['kvm'] if 'kvm' in labeldict.keys() else None self.vmware = labeldict['vmware'] if 'vmware' in labeldict.keys() else None + self.simulator = labeldict['simulator'] if 'simulator' in labeldict.keys() else None #{ # 'xen' : 'cloud-xen', # 'kvm' : 'cloud-kvm', diff --git a/tools/marvin/marvin/deployDataCenter.py b/tools/marvin/marvin/deployDataCenter.py index 0d5f3bdc659..e4f7eace9bd 100644 --- a/tools/marvin/marvin/deployDataCenter.py +++ b/tools/marvin/marvin/deployDataCenter.py @@ -258,10 +258,10 @@ class deployDataCenters(): traffic_type = addTrafficType.addTrafficTypeCmd() traffic_type.physicalnetworkid = physical_network_id traffic_type.traffictype = traffictype.typ - if traffictype.labeldict is not None: - traffic_type.kvmnetworklabel = traffictype.labeldict.kvm - traffic_type.xennetworklabel = traffictype.labeldict.xen - traffic_type.vmwarenetworklabel = traffictype.labeldict.vmware + traffic_type.kvmnetworklabel = traffictype.kvm if traffictype.kvm is not None else None + traffic_type.xennetworklabel = traffictype.xen if traffictype.xen is not None else None + traffic_type.vmwarenetworklabel = traffictype.vmware if traffictype.vmware is not None else None + traffic_type.simulatorlabel = traffictype.simulator if traffictype.simulator is not None else None return self.apiClient.addTrafficType(traffic_type) def enableZone(self, zoneid, allocation_state="Enabled"): @@ -289,7 +289,7 @@ class deployDataCenters(): for pnet in zone.physical_networks: phynetwrk = self.createPhysicalNetwork(pnet, zoneId) self.configureProviders(phynetwrk, pnet.providers) - self.updatePhysicalNetwork(phynetwrk.id, "Enabled", vlan=zone.vlan) + self.updatePhysicalNetwork(phynetwrk.id, "Enabled", vlan=pnet.vlan) if zone.networktype == "Basic": listnetworkoffering = listNetworkOfferings.listNetworkOfferingsCmd() diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py index 0daea5dd579..87b0bbb7bbc 100644 --- a/tools/marvin/marvin/integration/lib/base.py +++ b/tools/marvin/marvin/integration/lib/base.py @@ -509,6 +509,12 @@ class Volume: [setattr(cmd, k, v) for k, v in kwargs.items()] return(apiclient.listVolumes(cmd)) + def resize(cls, apiclient, **kwargs): + """Resize a volume""" + cmd = resizeVolume.resizeVolumeCmd() + cmd.id = self.id + [setattr(cmd, k, v) for k, v in kwargs.items()] + return(apiclient.resizeVolume(cmd)) class Snapshot: """Manage Snapshot Lifecycle @@ -1109,6 +1115,9 @@ class DiskOffering: if domainid: cmd.domainid = domainid + if services["storagetype"]: + cmd.storagetype = services["storagetype"] + return DiskOffering(apiclient.createDiskOffering(cmd).__dict__) def delete(self, apiclient): diff --git a/tools/marvin/marvin/sandbox/advanced/advanced_env.py b/tools/marvin/marvin/sandbox/advanced/advanced_env.py index 1873f31d50f..db78a84b33b 100644 --- a/tools/marvin/marvin/sandbox/advanced/advanced_env.py +++ b/tools/marvin/marvin/sandbox/advanced/advanced_env.py @@ -52,10 +52,22 @@ def describeResources(config): pn = physical_network() pn.name = "Sandbox-pnet" - pn.traffictypes = [traffictype("Guest"), traffictype("Management"), traffictype("Public")] + pn.vlan = config.get('cloudstack', 'pnet.vlan') + pn.tags = ["cloud-simulator-public"] + pn.traffictypes = [traffictype("Guest"), + traffictype("Management", {"simulator" : "cloud-simulator-mgmt"}), + traffictype("Public", {"simulator":"cloud-simulator-public"})] pn.providers.append(vpcprovider) + + pn2 = physical_network() + pn2.name = "Sandbox-pnet2" + pn2.vlan = config.get('cloudstack', 'pnet2.vlan') + pn2.tags = ["cloud-simulator-guest"] + pn2.traffictypes = [traffictype('Guest', {'simulator': 'cloud-simulator-guest'})] + pn2.providers.append(vpcprovider) z.physical_networks.append(pn) + z.physical_networks.append(pn2) p = pod() p.name = 'POD0' @@ -118,11 +130,11 @@ def describeResources(config): ''''add loggers''' testClientLogger = logger() testClientLogger.name = 'TestClient' - testClientLogger.file = '/var/log/testclient.log' + testClientLogger.file = 'testclient.log' testCaseLogger = logger() testCaseLogger.name = 'TestCase' - testCaseLogger.file = '/var/log/testcase.log' + testCaseLogger.file = 'testcase.log' zs.logger.append(testClientLogger) zs.logger.append(testCaseLogger) diff --git a/tools/marvin/marvin/sandbox/advanced/setup.properties b/tools/marvin/marvin/sandbox/advanced/setup.properties index ba44d5146b6..73eacc938d4 100644 --- a/tools/marvin/marvin/sandbox/advanced/setup.properties +++ b/tools/marvin/marvin/sandbox/advanced/setup.properties @@ -24,10 +24,9 @@ storage.cleanup.interval=300 account.cleanup.interval=600 expunge.workers=3 workers=10 -use.user.concentrated.pod.allocation=false vm.allocation.algorithm=random vm.op.wait.interval=5 -guest.domain.suffix=sandbox.kvm +guest.domain.suffix=sandbox.simulator instance.name=QA direct.agent.load.size=1000 default.page.size=10000 @@ -35,15 +34,16 @@ check.pod.cidrs=true secstorage.allowed.internal.sites=10.147.28.0/24 [environment] dns=10.147.28.6 -mshost=10.147.29.111 +mshost=localhost mshost.user=root mshost.passwd=password -mysql.host=10.147.29.111 +mysql.host=localhost mysql.cloud.user=cloud mysql.cloud.passwd=cloud [cloudstack] #guest VLAN -zone.vlan=675-679 +pnet.vlan=675-679 +pnet2.vlan=800-1000 #management network private.gateway=10.147.29.1 private.pod.startip=10.147.29.150 @@ -56,9 +56,9 @@ public.vlan.startip=10.147.31.150 public.vlan.endip=10.147.31.159 public.netmask=255.255.255.0 #hypervisor host information -hypervisor=XenServer -host=10.147.29.58 +hypervisor=Simulator +host=simulator0 host.password=password #storage pools -primary.pool=nfs://10.147.28.6:/export/home/sandbox/kamakura +primary.pool=nfs://10.147.28.6:/export/home/sandbox/primary secondary.pool=nfs://10.147.28.6:/export/home/sandbox/sstor diff --git a/ui/scripts/instanceWizard.js b/ui/scripts/instanceWizard.js index 89ca1d63361..e4b1f31d427 100644 --- a/ui/scripts/instanceWizard.js +++ b/ui/scripts/instanceWizard.js @@ -545,7 +545,8 @@ if(checkedSecurityGroupIdArray.length > 0) array1.push("&securitygroupids=" + checkedSecurityGroupIdArray.join(",")); - + + /* if(selectedZoneObj.networktype == "Advanced" && selectedZoneObj.securitygroupsenabled == true) { // Advanced SG-enabled zone var networkData = { zoneId: selectedZoneObj.id, @@ -577,6 +578,8 @@ return; } } + */ + } else if (step5ContainerType == 'nothing-to-select') { if(args.context.networks != null) { //from VPC tier diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 4103c3e2b6e..f3308bb5ba7 100755 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -1259,12 +1259,16 @@ data.listvirtualmachinesresponse.virtualmachine : [], function(instance) { var nonAutoScale=0; + if(instance.displayname == null) + nonAutoScale = 1; + else{ if( instance.displayname.match(/AutoScale-LB-/)==null) nonAutoScale =1; else { if(instance.displayname.match(/AutoScale-LB-/).length) nonAutoScale =0; } + } var isActiveState= $.inArray(instance.state, ['Destroyed','Expunging']) == -1; return nonAutoScale && isActiveState; } @@ -2623,12 +2627,16 @@ function(instance) { //Hiding the autoScale VMs var nonAutoScale =0; + if(instance.displayname == null) + nonAutoScale = 1 + else { if(instance.displayname.match(/AutoScale-LB-/) == null) nonAutoScale = 1; else { if( instance.displayname.match(/AutoScale-LB-/).length) nonAutoScale =0; - } + } + } var isActiveState = $.inArray(instance.state, ['Destroyed','Expunging']) == -1; var notExisting = !$.grep(itemData, function(item) { return item.id == instance.id; diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js index eb78ad15da0..51c4fdb5902 100644 --- a/ui/scripts/sharedFunctions.js +++ b/ui/scripts/sharedFunctions.js @@ -208,12 +208,13 @@ function parseXMLHttpResponse(XMLHttpResponse) { var json = JSON.parse(XMLHttpResponse.responseText); if (json != null) { var property; - for(property in json) {} + for(property in json) { var errorObj = json[property]; if(errorObj.errorcode == 401 && errorObj.errortext == "unable to verify user credentials and/or request signature") return _l('label.session.expired'); else return _s(errorObj.errortext); + } } else { return ""; diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 6733da1e2b9..bd8d3316103 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -1148,6 +1148,7 @@ var array1 = []; if(args.context.zones[0].networktype == "Advanced" && args.context.zones[0].securitygroupsenabled == true) { array1.push({id: 'account-specific', description: 'Account'}); + array1.push({id: 'zone-wide', description: 'All'}); } else { array1.push({id: 'zone-wide', description: 'All'}); diff --git a/ui/scripts/ui/widgets/listView.js b/ui/scripts/ui/widgets/listView.js index 85523ea5e7a..9e16ec2ae54 100644 --- a/ui/scripts/ui/widgets/listView.js +++ b/ui/scripts/ui/widgets/listView.js @@ -560,8 +560,8 @@ return $(this).index() == index; }); - if ($target.index() > $tr.index()) $target.after($tr); - else $target.before($tr); + // if ($target.index() > $tr.index()) $target.after($tr); + // else $target.before($tr); $tr.closest('.list-view').scrollTop($tr.position().top - $tr.height() * 2); diff --git a/utils/src/com/cloud/utils/component/PluggableService.java b/utils/src/com/cloud/utils/component/PluggableService.java index f6f72a904d0..5e0e4dfff16 100644 --- a/utils/src/com/cloud/utils/component/PluggableService.java +++ b/utils/src/com/cloud/utils/component/PluggableService.java @@ -16,11 +16,12 @@ // under the License. package com.cloud.utils.component; +import java.util.List; import java.util.Map; // This interface defines methods for pluggable code within the Cloud Stack. public interface PluggableService { // The config command properties filenames that lists allowed API commands // and role masks supported by this pluggable service - Map getProperties(); + List> getCommands(); } diff --git a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java index 303e0d681fa..1a0969957a6 100755 --- a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java +++ b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java @@ -37,15 +37,12 @@ public class CSExceptionErrorCode { try { ExceptionErrorCodeMap = new HashMap(); ExceptionErrorCodeMap.put("com.cloud.utils.exception.CloudRuntimeException", 4250); - ExceptionErrorCodeMap.put("com.cloud.utils.exception.ExceptionUtil", 4255); ExceptionErrorCodeMap.put("com.cloud.utils.exception.ExecutionException", 4260); ExceptionErrorCodeMap.put("com.cloud.utils.exception.HypervisorVersionChangedException", 4265); - ExceptionErrorCodeMap.put("com.cloud.utils.exception.RuntimeCloudException", 4270); ExceptionErrorCodeMap.put("com.cloud.exception.CloudException", 4275); ExceptionErrorCodeMap.put("com.cloud.exception.AccountLimitException", 4280); ExceptionErrorCodeMap.put("com.cloud.exception.AgentUnavailableException", 4285); ExceptionErrorCodeMap.put("com.cloud.exception.CloudAuthenticationException", 4290); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudExecutionException", 4295); ExceptionErrorCodeMap.put("com.cloud.exception.ConcurrentOperationException", 4300); ExceptionErrorCodeMap.put("com.cloud.exception.ConflictingNetworkSettingsException", 4305); ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveredWithErrorException", 4310); @@ -66,35 +63,6 @@ public class CSExceptionErrorCode { ExceptionErrorCodeMap.put("com.cloud.exception.StorageUnavailableException", 4385); ExceptionErrorCodeMap.put("com.cloud.exception.UnsupportedServiceException", 4390); ExceptionErrorCodeMap.put("com.cloud.exception.VirtualMachineMigrationException", 4395); - - ExceptionErrorCodeMap.put("com.cloud.exception.AccountLimitException", 4400); - ExceptionErrorCodeMap.put("com.cloud.exception.AgentUnavailableException", 4405); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudAuthenticationException", 4410); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudException", 4415); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudExecutionException", 4420); - ExceptionErrorCodeMap.put("com.cloud.exception.ConcurrentOperationException", 4425); - ExceptionErrorCodeMap.put("com.cloud.exception.ConflictingNetworkSettingsException", 4430); - ExceptionErrorCodeMap.put("com.cloud.exception.ConnectionException", 4435); - ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveredWithErrorException", 4440); - ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveryException", 4445); - ExceptionErrorCodeMap.put("com.cloud.exception.HAStateException", 4450); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientAddressCapacityException", 4455); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientCapacityException", 4460); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientNetworkCapacityException", 4465); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientServerCapacityException", 4470); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientStorageCapacityException", 4475); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientVirtualNetworkCapcityException", 4480); - ExceptionErrorCodeMap.put("com.cloud.exception.InternalErrorException", 4485); - ExceptionErrorCodeMap.put("com.cloud.exception.InvalidParameterValueException", 4490); - ExceptionErrorCodeMap.put("com.cloud.exception.ManagementServerException", 4495); - ExceptionErrorCodeMap.put("com.cloud.exception.NetworkRuleConflictException", 4500); - ExceptionErrorCodeMap.put("com.cloud.exception.PermissionDeniedException", 4505); - ExceptionErrorCodeMap.put("com.cloud.exception.ResourceAllocationException", 4510); - ExceptionErrorCodeMap.put("com.cloud.exception.ResourceInUseException", 4515); - ExceptionErrorCodeMap.put("com.cloud.exception.ResourceUnavailableException", 4520); - ExceptionErrorCodeMap.put("com.cloud.exception.StorageUnavailableException", 4525); - ExceptionErrorCodeMap.put("com.cloud.exception.UnsupportedServiceException", 4530); - ExceptionErrorCodeMap.put("com.cloud.exception.VirtualMachineMigrationException", 4535); ExceptionErrorCodeMap.put("com.cloud.async.AsyncCommandQueued", 4540); // Have a special error code for ServerApiException when it is diff --git a/utils/src/com/cloud/utils/exception/CloudRuntimeException.java b/utils/src/com/cloud/utils/exception/CloudRuntimeException.java index 78075947d3f..3862e2223d6 100755 --- a/utils/src/com/cloud/utils/exception/CloudRuntimeException.java +++ b/utils/src/com/cloud/utils/exception/CloudRuntimeException.java @@ -16,24 +16,62 @@ // under the License. package com.cloud.utils.exception; +import java.util.ArrayList; + +import com.cloud.utils.AnnotationHelper; import com.cloud.utils.SerialVersionUID; /** * wrap exceptions that you know there's no point in dealing with. */ -public class CloudRuntimeException extends RuntimeCloudException { +public class CloudRuntimeException extends RuntimeException { private static final long serialVersionUID = SerialVersionUID.CloudRuntimeException; - + + // This holds a list of uuids and their names. Add uuid:fieldname pairs + protected ArrayList idList = new ArrayList(); + + protected int csErrorCode; + + public CloudRuntimeException(String message) { super(message); + setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } - + public CloudRuntimeException(String message, Throwable th) { super(message, th); + setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } - - protected CloudRuntimeException() { + + public CloudRuntimeException() { super(); + setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); + } + + public void addProxyObject(String uuid) { + idList.add(uuid); + return; + } + + public void addProxyObject(Object voObj, Long id, String idFieldName) { + // Get the VO object's table name. + String tablename = AnnotationHelper.getTableName(voObj); + if (tablename != null) { + addProxyObject(tablename, id, idFieldName); + } + return; + } + + public ArrayList getIdProxyList() { + return idList; + } + + public void setCSErrorCode(int cserrcode) { + this.csErrorCode = cserrcode; + } + + public int getCSErrorCode() { + return this.csErrorCode; } } diff --git a/utils/src/com/cloud/utils/exception/HypervisorVersionChangedException.java b/utils/src/com/cloud/utils/exception/HypervisorVersionChangedException.java index 4f637cb46be..2c0c1ccd68b 100755 --- a/utils/src/com/cloud/utils/exception/HypervisorVersionChangedException.java +++ b/utils/src/com/cloud/utils/exception/HypervisorVersionChangedException.java @@ -18,10 +18,10 @@ package com.cloud.utils.exception; import com.cloud.utils.SerialVersionUID; -public class HypervisorVersionChangedException extends RuntimeCloudException { +public class HypervisorVersionChangedException extends CloudRuntimeException { private static final long serialVersionUID = SerialVersionUID.CloudRuntimeException; - + public HypervisorVersionChangedException(String message) { super(message); } diff --git a/utils/src/com/cloud/utils/exception/RuntimeCloudException.java b/utils/src/com/cloud/utils/exception/RuntimeCloudException.java deleted file mode 100644 index a2de5161596..00000000000 --- a/utils/src/com/cloud/utils/exception/RuntimeCloudException.java +++ /dev/null @@ -1,78 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.utils.exception; - -import java.util.ArrayList; - -import com.cloud.utils.AnnotationHelper; - -/** - * by the API response serializer. Any exceptions that are thrown by - * class, which extends Exception instead of RuntimeException like this - * class does. - */ - -public class RuntimeCloudException extends RuntimeException { - - private static final long serialVersionUID = 1783478684819198850L; - - // This holds a list of uuids and their names. Add uuid:fieldname pairs - protected ArrayList idList = new ArrayList(); - - protected int csErrorCode; - - public void addProxyObject(String uuid) { - idList.add(uuid); - return; - } - - public RuntimeCloudException(String message) { - super(message); - setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); - } - - public RuntimeCloudException(String message, Throwable cause) { - super(message, cause); - setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); - } - - public void addProxyObject(Object voObj, Long id, String idFieldName) { - // Get the VO object's table name. - String tablename = AnnotationHelper.getTableName(voObj); - if (tablename != null) { - addProxyObject(tablename, id, idFieldName); - } - return; - } - - public RuntimeCloudException() { - super(); - setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); - } - - public ArrayList getIdProxyList() { - return idList; - } - - public void setCSErrorCode(int cserrcode) { - this.csErrorCode = cserrcode; - } - - public int getCSErrorCode() { - return this.csErrorCode; - } -}