mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Merge branch '4.19' of https://github.com/apache/cloudstack into 4.20
This commit is contained in:
commit
0785ba046e
@ -477,12 +477,11 @@ public class ApiConstants {
|
||||
public static final String STATE = "state";
|
||||
public static final String STATS = "stats";
|
||||
public static final String STATUS = "status";
|
||||
public static final String STORAGE_TYPE = "storagetype";
|
||||
public static final String STORAGE_POLICY = "storagepolicy";
|
||||
public static final String STORAGE_MOTION_ENABLED = "storagemotionenabled";
|
||||
public static final String STORAGE_CAPABILITIES = "storagecapabilities";
|
||||
public static final String STORAGE_CUSTOM_STATS = "storagecustomstats";
|
||||
public static final String STORAGE_MOTION_ENABLED = "storagemotionenabled";
|
||||
public static final String STORAGE_POLICY = "storagepolicy";
|
||||
public static final String STORAGE_POOL = "storagepool";
|
||||
public static final String STORAGE_TYPE = "storagetype";
|
||||
public static final String SUBNET = "subnet";
|
||||
public static final String OWNER = "owner";
|
||||
public static final String SWAP_OWNER = "swapowner";
|
||||
|
||||
@ -152,7 +152,7 @@ public class HostResponse extends BaseResponseWithAnnotations {
|
||||
@Deprecated
|
||||
@SerializedName("memoryallocated")
|
||||
@Param(description = "the amount of the host's memory currently allocated")
|
||||
private Long memoryAllocated;
|
||||
private long memoryAllocated;
|
||||
|
||||
@SerializedName("memoryallocatedpercentage")
|
||||
@Param(description = "the amount of the host's memory currently allocated in percentage")
|
||||
@ -407,7 +407,7 @@ public class HostResponse extends BaseResponseWithAnnotations {
|
||||
this.memWithOverprovisioning=memWithOverprovisioning;
|
||||
}
|
||||
|
||||
public void setMemoryAllocated(Long memoryAllocated) {
|
||||
public void setMemoryAllocated(long memoryAllocated) {
|
||||
this.memoryAllocated = memoryAllocated;
|
||||
}
|
||||
|
||||
@ -687,8 +687,8 @@ public class HostResponse extends BaseResponseWithAnnotations {
|
||||
return memoryTotal;
|
||||
}
|
||||
|
||||
public Long getMemoryAllocated() {
|
||||
return memoryAllocated == null ? 0 : memoryAllocated;
|
||||
public long getMemoryAllocated() {
|
||||
return memoryAllocated;
|
||||
}
|
||||
|
||||
public void setMemoryAllocatedPercentage(String memoryAllocatedPercentage) {
|
||||
|
||||
@ -25,14 +25,16 @@ import java.util.Map;
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import com.cloud.network.Network;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.cloudstack.framework.events.Event;
|
||||
import org.apache.cloudstack.framework.events.EventBus;
|
||||
import org.apache.cloudstack.framework.events.EventDistributor;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||
|
||||
import com.cloud.dc.DataCenterVO;
|
||||
import com.cloud.dc.dao.DataCenterDao;
|
||||
@ -243,4 +245,22 @@ public class UsageEventUtils {
|
||||
|
||||
static final String Name = "management-server";
|
||||
|
||||
public static void publishNetworkCreation(Network network) {
|
||||
publishUsageEvent(EventTypes.EVENT_NETWORK_CREATE, network.getAccountId(), network.getDataCenterId(),
|
||||
network.getId(), network.getName(), network.getNetworkOfferingId(), null, null, null, network.getState().name(),
|
||||
network.getUuid());
|
||||
}
|
||||
|
||||
public static void publishNetworkUpdate(Network network) {
|
||||
publishUsageEvent(EventTypes.EVENT_NETWORK_UPDATE, network.getAccountId(), network.getDataCenterId(),
|
||||
network.getId(), network.getName(), network.getNetworkOfferingId(), null, network.getState().name(),
|
||||
Network.class.getName(), network.getUuid(), true);
|
||||
}
|
||||
|
||||
public static void publishNetworkDeletion(Network network) {
|
||||
publishUsageEvent(EventTypes.EVENT_NETWORK_DELETE, network.getAccountId(), network.getDataCenterId(),
|
||||
network.getId(), network.getName(), network.getNetworkOfferingId(), null, null, null,
|
||||
Network.class.getName(), network.getUuid());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1528,8 +1528,6 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
||||
if (isNetworkImplemented(network)) {
|
||||
logger.debug("Network {} is already implemented", network);
|
||||
implemented.set(guru, network);
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_UPDATE, network.getAccountId(), network.getDataCenterId(), network.getId(),
|
||||
network.getName(), network.getNetworkOfferingId(), null, network.getState().name(), Network.class.getName(), network.getUuid(), true);
|
||||
return implemented;
|
||||
}
|
||||
|
||||
@ -1585,9 +1583,8 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
||||
|
||||
network.setRestartRequired(false);
|
||||
_networksDao.update(network.getId(), network);
|
||||
UsageEventUtils.publishNetworkUpdate(network);
|
||||
implemented.set(guru, network);
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_CREATE, network.getAccountId(), network.getDataCenterId(), network.getId(),
|
||||
network.getName(), network.getNetworkOfferingId(), null, null, null, network.getState().name(), network.getUuid());
|
||||
return implemented;
|
||||
} catch (final NoTransitionException e) {
|
||||
logger.error(e.getMessage());
|
||||
@ -3087,6 +3084,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
||||
if (updateResourceCount) {
|
||||
_resourceLimitMgr.incrementResourceCount(owner.getId(), ResourceType.network, isDisplayNetworkEnabled);
|
||||
}
|
||||
UsageEventUtils.publishNetworkCreation(network);
|
||||
|
||||
return network;
|
||||
}
|
||||
@ -3168,13 +3166,14 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
||||
}
|
||||
logger.debug("Lock is acquired for network {} as a part of network shutdown", network);
|
||||
|
||||
if (network.getState() == Network.State.Allocated) {
|
||||
logger.debug("Network is already shutdown: {}", network);
|
||||
final Network.State initialState = network.getState();
|
||||
if (initialState == Network.State.Allocated) {
|
||||
logger.debug(String.format("Network [%s] is in Allocated state, no need to shutdown.", network));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (network.getState() != Network.State.Implemented && network.getState() != Network.State.Shutdown) {
|
||||
logger.debug("Network is not implemented: {}", network);
|
||||
if (initialState != Network.State.Implemented && initialState != Network.State.Shutdown) {
|
||||
logger.debug("Network is not implemented: " + network);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -3218,6 +3217,9 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
||||
}
|
||||
_networksDao.update(networkFinal.getId(), networkFinal);
|
||||
_networksDao.clearCheckForGc(networkId);
|
||||
if (initialState == Network.State.Implemented) {
|
||||
UsageEventUtils.publishNetworkUpdate(networkFinal);
|
||||
}
|
||||
result = true;
|
||||
} else {
|
||||
try {
|
||||
@ -3469,8 +3471,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
||||
final Pair<Class<?>, Long> networkMsg = new Pair<Class<?>, Long>(Network.class, networkFinal.getId());
|
||||
_messageBus.publish(_name, EntityManager.MESSAGE_REMOVE_ENTITY_EVENT, PublishScope.LOCAL, networkMsg);
|
||||
}
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_DELETE, network.getAccountId(), network.getDataCenterId(), network.getId(),
|
||||
network.getName(), network.getNetworkOfferingId(), null, null, null, Network.class.getName(), network.getUuid());
|
||||
UsageEventUtils.publishNetworkDeletion(network);
|
||||
return true;
|
||||
} catch (final CloudRuntimeException e) {
|
||||
logger.error("Failed to delete network", e);
|
||||
|
||||
@ -891,7 +891,7 @@ public class NetworkOrchestratorTest extends TestCase {
|
||||
boolean shutdownNetworkStatus = testOrchestrator.shutdownNetwork(networkId, reservationContext, false);
|
||||
Assert.assertFalse(shutdownNetworkStatus);
|
||||
|
||||
verify(network, times(3)).getState();
|
||||
verify(network).getState();
|
||||
verify(testOrchestrator._networksDao, times(1)).acquireInLockTable(networkId, NetworkLockTimeout.value());
|
||||
verify(testOrchestrator._networksDao, times(1)).releaseFromLockTable(networkId);
|
||||
}
|
||||
|
||||
@ -47,7 +47,7 @@ public class DynamicRoleBasedAPIAccessChecker extends AdapterBase implements API
|
||||
private RoleService roleService;
|
||||
|
||||
private List<PluggableService> services;
|
||||
private Map<RoleType, Set<String>> annotationRoleBasedApisMap = new HashMap<>();
|
||||
private Map<RoleType, Set<String>> annotationRoleBasedApisMap = new HashMap<RoleType, Set<String>>();
|
||||
|
||||
private LazyCache<Long, Account> accountCache;
|
||||
private LazyCache<Long, Pair<Role, List<RolePermission>>> rolePermissionsCache;
|
||||
@ -56,7 +56,7 @@ public class DynamicRoleBasedAPIAccessChecker extends AdapterBase implements API
|
||||
protected DynamicRoleBasedAPIAccessChecker() {
|
||||
super();
|
||||
for (RoleType roleType : RoleType.values()) {
|
||||
annotationRoleBasedApisMap.put(roleType, new HashSet<>());
|
||||
annotationRoleBasedApisMap.put(roleType, new HashSet<String>());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -22,15 +22,12 @@ import com.cloud.dc.VmwareDatacenterVO;
|
||||
import com.cloud.dc.VsphereStoragePolicy;
|
||||
import com.cloud.exception.DiscoveryException;
|
||||
import com.cloud.exception.ResourceInUseException;
|
||||
import com.cloud.hypervisor.vmware.mo.HostMO;
|
||||
import com.cloud.storage.StoragePool;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.component.PluggableService;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import org.apache.cloudstack.api.command.admin.zone.AddVmwareDcCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ImportVsphereStoragePoliciesCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ListVmwareDcVmsCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ListVmwareDcHostsCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ListVmwareDcsCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ListVsphereStoragePoliciesCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ListVsphereStoragePolicyCompatiblePoolsCmd;
|
||||
@ -56,7 +53,5 @@ public interface VmwareDatacenterService extends PluggableService {
|
||||
|
||||
List<StoragePool> listVsphereStoragePolicyCompatibleStoragePools(ListVsphereStoragePolicyCompatiblePoolsCmd cmd);
|
||||
|
||||
List<HostMO> listHostsInDatacenter(ListVmwareDcHostsCmd cmd);
|
||||
|
||||
Pair<String, List<UnmanagedInstanceTO>> listVMsInDatacenter(ListVmwareDcVmsCmd cmd);
|
||||
List<UnmanagedInstanceTO> listVMsInDatacenter(ListVmwareDcVmsCmd cmd);
|
||||
}
|
||||
|
||||
@ -19,12 +19,10 @@ package com.cloud.hypervisor.vmware.manager;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.net.URLDecoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.rmi.RemoteException;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
@ -45,11 +43,10 @@ import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
import javax.persistence.EntityExistsException;
|
||||
|
||||
import com.cloud.hypervisor.vmware.util.VmwareClient;
|
||||
import org.apache.cloudstack.api.command.admin.zone.AddVmwareDcCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ImportVsphereStoragePoliciesCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ListVmwareDcVmsCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ListVmwareDcHostsCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ListVmwareDcItems;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ListVmwareDcsCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ListVsphereStoragePoliciesCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ListVsphereStoragePolicyCompatiblePoolsCmd;
|
||||
@ -89,7 +86,6 @@ import com.cloud.dc.ClusterDetailsDao;
|
||||
import com.cloud.dc.ClusterVO;
|
||||
import com.cloud.dc.ClusterVSMMapVO;
|
||||
import com.cloud.dc.DataCenterVO;
|
||||
import com.cloud.dc.VmwareDatacenter;
|
||||
import com.cloud.dc.VsphereStoragePolicy;
|
||||
import com.cloud.dc.VsphereStoragePolicyVO;
|
||||
import com.cloud.dc.dao.ClusterDao;
|
||||
@ -115,8 +111,7 @@ import com.cloud.hypervisor.HypervisorGuruManager;
|
||||
import com.cloud.hypervisor.dao.HypervisorCapabilitiesDao;
|
||||
import com.cloud.hypervisor.vmware.LegacyZoneVO;
|
||||
import com.cloud.hypervisor.vmware.VmwareCleanupMaid;
|
||||
import com.cloud.hypervisor.vmware.util.VmwareClient;
|
||||
import com.cloud.hypervisor.vmware.util.VmwareClientException;
|
||||
import com.cloud.dc.VmwareDatacenter;
|
||||
import com.cloud.hypervisor.vmware.VmwareDatacenterService;
|
||||
import com.cloud.dc.VmwareDatacenterVO;
|
||||
import com.cloud.hypervisor.vmware.VmwareDatacenterZoneMap;
|
||||
@ -173,16 +168,9 @@ import com.cloud.utils.ssh.SshHelper;
|
||||
import com.cloud.vm.DomainRouterVO;
|
||||
import com.cloud.vm.dao.UserVmCloneSettingDao;
|
||||
import com.cloud.vm.dao.VMInstanceDao;
|
||||
|
||||
// TODO move these items upstream?
|
||||
import com.vmware.pbm.PbmProfile;
|
||||
import com.vmware.vim25.AboutInfo;
|
||||
import com.vmware.vim25.ManagedObjectReference;
|
||||
import com.vmware.vim25.InvalidLocaleFaultMsg;
|
||||
import com.vmware.vim25.InvalidLoginFaultMsg;
|
||||
import com.vmware.vim25.RuntimeFaultFaultMsg;
|
||||
import com.vmware.vim25.InvalidPropertyFaultMsg;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class VmwareManagerImpl extends ManagerBase implements VmwareManager, VmwareStorageMount, Listener, VmwareDatacenterService, Configurable {
|
||||
|
||||
@ -257,11 +245,11 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
private StorageLayer _storage;
|
||||
private final String _privateNetworkVSwitchName = "vSwitch0";
|
||||
|
||||
private final int _portsPerDvPortGroup = DEFAULT_PORTS_PER_DV_PORT_GROUP;
|
||||
private int _portsPerDvPortGroup = DEFAULT_PORTS_PER_DV_PORT_GROUP;
|
||||
private boolean _fullCloneFlag;
|
||||
private boolean _instanceNameFlag;
|
||||
private String _serviceConsoleName;
|
||||
private String _managementPortGroupName;
|
||||
private String _managemetPortGroupName;
|
||||
private String _defaultSystemVmNicAdapterType = VirtualEthernetCardType.E1000.toString();
|
||||
private String _recycleHungWorker = "false";
|
||||
private int _additionalPortRangeStart;
|
||||
@ -275,7 +263,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
|
||||
private final Random _rand = new Random(System.currentTimeMillis());
|
||||
|
||||
private static final ScheduledExecutorService templateCleanupScheduler = Executors.newScheduledThreadPool(1, new NamedThreadFactory("Vmware-FullyClonedTemplateCheck"));
|
||||
private static ScheduledExecutorService templateCleanupScheduler = Executors.newScheduledThreadPool(1, new NamedThreadFactory("Vmware-FullyClonedTemplateCheck"));;
|
||||
|
||||
private final VmwareStorageManager _storageMgr;
|
||||
private final GlobalLock _exclusiveOpLock = GlobalLock.getInternLock("vmware.exclusive.op");
|
||||
@ -359,9 +347,9 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
_serviceConsoleName = "Service Console";
|
||||
}
|
||||
|
||||
_managementPortGroupName = _configDao.getValue(Config.VmwareManagementPortGroup.key());
|
||||
if (_managementPortGroupName == null) {
|
||||
_managementPortGroupName = "Management Network";
|
||||
_managemetPortGroupName = _configDao.getValue(Config.VmwareManagementPortGroup.key());
|
||||
if (_managemetPortGroupName == null) {
|
||||
_managemetPortGroupName = "Management Network";
|
||||
}
|
||||
|
||||
_defaultSystemVmNicAdapterType = _configDao.getValue(Config.VmwareSystemVmNicDeviceType.key());
|
||||
@ -460,7 +448,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
|
||||
logger.info("Preparing network on host " + hostMo.getContext().toString() + " for " + privateTrafficLabel);
|
||||
VirtualSwitchType vsType = VirtualSwitchType.getType(vSwitchType);
|
||||
//The management network is probably always going to be a physical network with isolation type of vlans, so assume BroadcastDomainType VLAN
|
||||
//The management network is probably always going to be a physical network with islation type of vlans, so assume BroadcastDomainType VLAN
|
||||
if (VirtualSwitchType.StandardVirtualSwitch == vsType) {
|
||||
HypervisorHostHelper.prepareNetwork(vSwitchName, "cloud.private", hostMo, vlanId, null, null, 180000, false, BroadcastDomainType.Vlan, null, null);
|
||||
}
|
||||
@ -469,7 +457,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
AboutInfo about = hostMo.getHostAboutInfo();
|
||||
if (about != null) {
|
||||
String version = about.getApiVersion();
|
||||
if (version != null && (version.equals("4.0") || version.equals("4.1")) ) { // && _portsPerDvPortGroup < DEFAULT_PORTS_PER_DV_PORT_GROUP_VSPHERE4_x)
|
||||
if (version != null && (version.equals("4.0") || version.equals("4.1")) && _portsPerDvPortGroup < DEFAULT_PORTS_PER_DV_PORT_GROUP_VSPHERE4_x) {
|
||||
portsPerDvPortGroup = DEFAULT_PORTS_PER_DV_PORT_GROUP_VSPHERE4_x;
|
||||
}
|
||||
}
|
||||
@ -492,7 +480,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
}
|
||||
|
||||
URI uriForHost = new URI(UriUtils.encodeURIComponent(clusterDetails.get("url") + "/" + host.getName()));
|
||||
morSrcHost = serviceContext.getHostMorByPath(URLDecoder.decode(uriForHost.getPath(), StandardCharsets.UTF_8));
|
||||
morSrcHost = serviceContext.getHostMorByPath(URLDecoder.decode(uriForHost.getPath(), "UTF-8"));
|
||||
if (morSrcHost == null) {
|
||||
return null;
|
||||
}
|
||||
@ -508,18 +496,19 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
throw new CloudRuntimeException("Invalid serviceContext");
|
||||
}
|
||||
ManagedObjectReference mor = serviceContext.getHostMorByPath(hostInventoryPath);
|
||||
String privateTrafficLabel;
|
||||
String privateTrafficLabel = null;
|
||||
privateTrafficLabel = serviceContext.getStockObject("privateTrafficLabel");
|
||||
if (privateTrafficLabel == null) {
|
||||
privateTrafficLabel = _privateNetworkVSwitchName;
|
||||
}
|
||||
|
||||
if (mor != null) {
|
||||
List<ManagedObjectReference> returnedHostList = new ArrayList<>();
|
||||
List<ManagedObjectReference> returnedHostList = new ArrayList<ManagedObjectReference>();
|
||||
|
||||
if (mor.getType().equals("ComputeResource")) {
|
||||
List<ManagedObjectReference> hosts = serviceContext.getVimClient().getDynamicProperty(mor, "host");
|
||||
assert (CollectionUtils.isNullOrEmpty(hosts));
|
||||
assert (hosts != null && hosts.size() > 0);
|
||||
|
||||
// For ESX host, we need to enable host firewall to allow VNC access
|
||||
HostMO hostMo = new HostMO(serviceContext, hosts.get(0));
|
||||
|
||||
@ -530,8 +519,8 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
List<ManagedObjectReference> hosts = serviceContext.getVimClient().getDynamicProperty(mor, "host");
|
||||
assert (hosts != null);
|
||||
|
||||
if (!hosts.isEmpty()) {
|
||||
AboutInfo about = serviceContext.getVimClient().getDynamicProperty(hosts.get(0), "config.product");
|
||||
if (hosts.size() > 0) {
|
||||
AboutInfo about = (AboutInfo)(serviceContext.getVimClient().getDynamicProperty(hosts.get(0), "config.product"));
|
||||
String version = about.getApiVersion();
|
||||
int maxHostsPerCluster = _hvCapabilitiesDao.getMaxHostsPerCluster(HypervisorType.VMware, version);
|
||||
if (hosts.size() > maxHostsPerCluster) {
|
||||
@ -625,13 +614,13 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
|
||||
@Override
|
||||
public String getManagementPortGroupName() {
|
||||
return _managementPortGroupName;
|
||||
return _managemetPortGroupName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getManagementPortGroupByHost(HostMO hostMo) throws Exception {
|
||||
if (hostMo.getHostType() == VmwareHostType.ESXi) {
|
||||
return _managementPortGroupName;
|
||||
return _managemetPortGroupName;
|
||||
}
|
||||
return _serviceConsoleName;
|
||||
}
|
||||
@ -641,7 +630,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
params.put("vmware.create.full.clone", _fullCloneFlag);
|
||||
params.put("vm.instancename.flag", _instanceNameFlag);
|
||||
params.put("service.console.name", _serviceConsoleName);
|
||||
params.put("management.portgroup.name", _managementPortGroupName);
|
||||
params.put("management.portgroup.name", _managemetPortGroupName);
|
||||
params.put("vmware.root.disk.controller", _rootDiskController);
|
||||
params.put("vmware.data.disk.controller", _dataDiskController);
|
||||
params.put("vmware.recycle.hung.wokervm", _recycleHungWorker);
|
||||
@ -668,23 +657,23 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
return false;
|
||||
}
|
||||
|
||||
String[] tokens = workerTag.split("-");
|
||||
String tokens[] = workerTag.split("-");
|
||||
if (tokens.length != 3) {
|
||||
logger.error("Invalid worker VM tag " + workerTag);
|
||||
return false;
|
||||
}
|
||||
|
||||
long startTick = Long.parseLong(tokens[0]);
|
||||
long msId = Long.parseLong(tokens[1]);
|
||||
long runId = Long.parseLong(tokens[2]);
|
||||
long msid = Long.parseLong(tokens[1]);
|
||||
long runid = Long.parseLong(tokens[2]);
|
||||
|
||||
if (msHostPeerDao.countStateSeenInPeers(msId, runId, ManagementServerHost.State.Down) > 0) {
|
||||
if (msHostPeerDao.countStateSeenInPeers(msid, runid, ManagementServerHost.State.Down) > 0) {
|
||||
if (logger.isInfoEnabled())
|
||||
logger.info("Worker VM's owner management server node has been detected down from peer nodes, recycle it");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (runId != clusterManager.getManagementRunId(msId)) {
|
||||
if (runid != clusterManager.getManagementRunId(msid)) {
|
||||
if (logger.isInfoEnabled())
|
||||
logger.info("Worker VM's owner management server has changed runid, recycle it");
|
||||
return true;
|
||||
@ -782,6 +771,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
isoFile = new File("/usr/share/cloudstack-common/vms/systemvm.iso");
|
||||
}
|
||||
|
||||
assert (isoFile != null);
|
||||
if (!isoFile.exists()) {
|
||||
logger.error("Unable to locate systemvm.iso in your setup at " + isoFile);
|
||||
}
|
||||
@ -798,7 +788,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
if (keyFile == null || !keyFile.exists()) {
|
||||
keyFile = new File("/usr/share/cloudstack-common/scripts/vm/systemvm/id_rsa.cloud");
|
||||
}
|
||||
|
||||
assert (keyFile != null);
|
||||
if (!keyFile.exists()) {
|
||||
logger.error("Unable to locate id_rsa.cloud in your setup at " + keyFile);
|
||||
}
|
||||
@ -807,7 +797,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
|
||||
@Override
|
||||
public String getMountPoint(String storageUrl, String nfsVersion) {
|
||||
String mountPoint;
|
||||
String mountPoint = null;
|
||||
synchronized (_storageMounts) {
|
||||
mountPoint = _storageMounts.get(storageUrl);
|
||||
if (mountPoint != null) {
|
||||
@ -837,7 +827,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
String mountPoint = null;
|
||||
long mshostId = ManagementServerNode.getManagementServerId();
|
||||
for (int i = 0; i < 10; i++) {
|
||||
String mntPt = parent + File.separator + mshostId + "." + Integer.toHexString(_rand.nextInt(Integer.MAX_VALUE));
|
||||
String mntPt = parent + File.separator + String.valueOf(mshostId) + "." + Integer.toHexString(_rand.nextInt(Integer.MAX_VALUE));
|
||||
File file = new File(mntPt);
|
||||
if (!file.exists()) {
|
||||
if (_storage.mkdir(mntPt)) {
|
||||
@ -862,9 +852,10 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
for (String mountPoint : mounts) {
|
||||
logger.info("umount NFS mount from previous session: " + mountPoint);
|
||||
|
||||
String result = null;
|
||||
Script command = new Script(true, "umount", _timeout, logger);
|
||||
command.add(mountPoint);
|
||||
String result = command.execute();
|
||||
result = command.execute();
|
||||
if (result != null) {
|
||||
logger.warn("Unable to umount " + mountPoint + " due to " + result);
|
||||
}
|
||||
@ -882,9 +873,10 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
for (String mountPoint : _storageMounts.values()) {
|
||||
logger.info("umount NFS mount: " + mountPoint);
|
||||
|
||||
String result = null;
|
||||
Script command = new Script(true, "umount", _timeout, logger);
|
||||
command.add(mountPoint);
|
||||
String result = command.execute();
|
||||
result = command.execute();
|
||||
if (result != null) {
|
||||
logger.warn("Unable to umount " + mountPoint + " due to " + result);
|
||||
}
|
||||
@ -902,8 +894,8 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
return null;
|
||||
}
|
||||
|
||||
Script script;
|
||||
String result;
|
||||
Script script = null;
|
||||
String result = null;
|
||||
Script command = new Script(true, "mount", _timeout, logger);
|
||||
command.add("-t", "nfs");
|
||||
if (nfsVersion != null){
|
||||
@ -990,9 +982,11 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
|
||||
@Override
|
||||
public void processConnect(Host host, StartupCommand cmd, boolean forRebalance) {
|
||||
if (cmd != null) {
|
||||
if (cmd instanceof StartupCommand) {
|
||||
if (host.getHypervisorType() == HypervisorType.VMware) {
|
||||
updateClusterNativeHAState(host, cmd);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1062,16 +1056,16 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
|
||||
@Override
|
||||
public Pair<Integer, Integer> getAddiionalVncPortRange() {
|
||||
return new Pair<>(_additionalPortRangeStart, _additionalPortRangeSize);
|
||||
return new Pair<Integer, Integer>(_additionalPortRangeStart, _additionalPortRangeSize);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getNexusVSMCredentialsByClusterId(Long clusterId) {
|
||||
CiscoNexusVSMDeviceVO nexusVSM;
|
||||
ClusterVSMMapVO vsmMapVO;
|
||||
CiscoNexusVSMDeviceVO nexusVSM = null;
|
||||
ClusterVSMMapVO vsmMapVO = null;
|
||||
|
||||
vsmMapVO = _vsmMapDao.findByClusterId(clusterId);
|
||||
long vsmId;
|
||||
long vsmId = 0;
|
||||
if (vsmMapVO != null) {
|
||||
vsmId = vsmMapVO.getVsmId();
|
||||
logger.info("vsmId is " + vsmId);
|
||||
@ -1082,7 +1076,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
return null;
|
||||
}
|
||||
|
||||
Map<String, String> nexusVSMCredentials = new HashMap<>();
|
||||
Map<String, String> nexusVSMCredentials = new HashMap<String, String>();
|
||||
if (nexusVSM != null) {
|
||||
nexusVSMCredentials.put("vsmip", nexusVSM.getipaddr());
|
||||
nexusVSMCredentials.put("vsmusername", nexusVSM.getUserName());
|
||||
@ -1109,7 +1103,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
|
||||
@Override
|
||||
public List<Class<?>> getCommands() {
|
||||
List<Class<?>> cmdList = new ArrayList<>();
|
||||
List<Class<?>> cmdList = new ArrayList<Class<?>>();
|
||||
cmdList.add(AddVmwareDcCmd.class);
|
||||
cmdList.add(UpdateVmwareDcCmd.class);
|
||||
cmdList.add(RemoveVmwareDcCmd.class);
|
||||
@ -1118,14 +1112,13 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
cmdList.add(ListVsphereStoragePoliciesCmd.class);
|
||||
cmdList.add(ListVsphereStoragePolicyCompatiblePoolsCmd.class);
|
||||
cmdList.add(ListVmwareDcVmsCmd.class);
|
||||
cmdList.add(ListVmwareDcHostsCmd.class);
|
||||
return cmdList;
|
||||
}
|
||||
|
||||
@Override
|
||||
@DB
|
||||
public VmwareDatacenterVO addVmwareDatacenter(AddVmwareDcCmd cmd) throws ResourceInUseException {
|
||||
VmwareDatacenterVO vmwareDc;
|
||||
VmwareDatacenterVO vmwareDc = null;
|
||||
Long zoneId = cmd.getZoneId();
|
||||
String userName = cmd.getUsername();
|
||||
String password = cmd.getPassword();
|
||||
@ -1181,10 +1174,10 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
checkIfDcIsUsed(vCenterHost, vmwareDcName, zoneId);
|
||||
|
||||
VmwareContext context = null;
|
||||
DatacenterMO dcMo;
|
||||
DatacenterMO dcMo = null;
|
||||
String dcCustomFieldValue;
|
||||
boolean addDcCustomFieldDef = false;
|
||||
boolean dcInUse;
|
||||
boolean dcInUse = false;
|
||||
String guid;
|
||||
ManagedObjectReference dcMor;
|
||||
try {
|
||||
@ -1217,7 +1210,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
// Map zone with vmware datacenter
|
||||
vmwareDcZoneMap = new VmwareDatacenterZoneMapVO(zoneId, vmwareDc.getId());
|
||||
|
||||
vmwareDatacenterZoneMapDao.persist(vmwareDcZoneMap);
|
||||
vmwareDcZoneMap = vmwareDatacenterZoneMapDao.persist(vmwareDcZoneMap);
|
||||
|
||||
// Set custom field for this DC
|
||||
if (addDcCustomFieldDef) {
|
||||
@ -1237,6 +1230,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
if (context != null) {
|
||||
context.close();
|
||||
}
|
||||
context = null;
|
||||
}
|
||||
importVsphereStoragePoliciesInternal(zoneId, vmwareDc.getId());
|
||||
return vmwareDc;
|
||||
@ -1261,9 +1255,9 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
* Check if DC is already part of zone
|
||||
* In that case vmware_data_center table should have the DC and a dc zone mapping should exist
|
||||
*
|
||||
* @param vCenterHost the vcenter appliance hostname
|
||||
* @param vmwareDcName the name of the vmware DC
|
||||
* @param zoneId zone that the DC should be connected to
|
||||
* @param vCenterHost
|
||||
* @param vmwareDcName
|
||||
* @param zoneId
|
||||
* @throws ResourceInUseException if the DC can not be used.
|
||||
*/
|
||||
private void checkIfDcIsUsed(String vCenterHost, String vmwareDcName, Long zoneId) throws ResourceInUseException {
|
||||
@ -1271,7 +1265,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
vmwareDc = vmwareDcDao.getVmwareDatacenterByGuid(vmwareDcName + "@" + vCenterHost);
|
||||
if (vmwareDc != null) {
|
||||
VmwareDatacenterZoneMapVO mapping = vmwareDatacenterZoneMapDao.findByVmwareDcId(vmwareDc.getId());
|
||||
if (mapping != null && zoneId == mapping.getZoneId()) {
|
||||
if (mapping != null && Long.compare(zoneId, mapping.getZoneId()) == 0) {
|
||||
throw new ResourceInUseException(String.format("This DC (%s) is already part of other CloudStack zone (%d). Cannot add this DC to more zones.", vmwareDc.getUuid(), zoneId));
|
||||
}
|
||||
}
|
||||
@ -1280,7 +1274,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
@Override
|
||||
@ActionEvent(eventType = EventTypes.EVENT_ZONE_EDIT, eventDescription = "updating VMware datacenter")
|
||||
public VmwareDatacenter updateVmwareDatacenter(UpdateVmwareDcCmd cmd) {
|
||||
final long zoneId = cmd.getZoneId();
|
||||
final Long zoneId = cmd.getZoneId();
|
||||
final String userName = cmd.getUsername();
|
||||
final String password = cmd.getPassword();
|
||||
final String vCenterHost = cmd.getVcenter();
|
||||
@ -1308,7 +1302,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
}
|
||||
vmwareDc.setGuid(String.format("%s@%s", vmwareDc.getVmwareDatacenterName(), vmwareDc.getVcenterHost()));
|
||||
|
||||
return Transaction.execute(new TransactionCallback<>() {
|
||||
return Transaction.execute(new TransactionCallback<VmwareDatacenter>() {
|
||||
@Override
|
||||
public VmwareDatacenter doInTransaction(TransactionStatus status) {
|
||||
if (vmwareDcDao.update(vmwareDc.getId(), vmwareDc)) {
|
||||
@ -1357,7 +1351,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
String vCenterHost;
|
||||
String userName;
|
||||
String password;
|
||||
DatacenterMO dcMo;
|
||||
DatacenterMO dcMo = null;
|
||||
final VmwareDatacenterZoneMapVO vmwareDcZoneMap = vmwareDatacenterZoneMapDao.findByZoneId(zoneId);
|
||||
// Check if zone is associated with VMware DC
|
||||
if (vmwareDcZoneMap == null) {
|
||||
@ -1394,9 +1388,11 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
throw new DiscoveryException(msg);
|
||||
}
|
||||
|
||||
assert (dcMo != null);
|
||||
|
||||
// Reset custom field property cloud.zone over this DC
|
||||
dcMo.setCustomFieldValue(CustomFieldConstants.CLOUD_ZONE, "false");
|
||||
logger.info("Sucessfully reset custom field property cloud.zone over DC {}", vmwareDcName);
|
||||
logger.info("Successfully reset custom field property cloud.zone over DC {}", vmwareDcName);
|
||||
} catch (Exception e) {
|
||||
String msg = "Unable to reset custom field property cloud.zone over DC " + vmwareDcName + " due to : " + VmwareHelper.getExceptionMessage(e);
|
||||
logger.error(msg);
|
||||
@ -1405,6 +1401,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
if (context != null) {
|
||||
context.close();
|
||||
}
|
||||
context = null;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -1425,7 +1422,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
private void validateZoneWithResources(Long zoneId, String errStr) throws ResourceInUseException {
|
||||
// Check if zone has resources? - For now look for clusters
|
||||
List<ClusterVO> clusters = clusterDao.listByZoneId(zoneId);
|
||||
if (!CollectionUtils.isNullOrEmpty(clusters)) {
|
||||
if (clusters != null && clusters.size() > 0) {
|
||||
// Look for VMware hypervisor.
|
||||
for (ClusterVO cluster : clusters) {
|
||||
if (cluster.getHypervisorType().equals(HypervisorType.VMware)) {
|
||||
@ -1446,9 +1443,9 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends VmwareDatacenter> listVmwareDatacenters(ListVmwareDcsCmd cmd) throws CloudRuntimeException {
|
||||
public List<? extends VmwareDatacenter> listVmwareDatacenters(ListVmwareDcsCmd cmd) throws CloudRuntimeException, InvalidParameterValueException {
|
||||
Long zoneId = cmd.getZoneId();
|
||||
List<VmwareDatacenterVO> vmwareDcList = new ArrayList<>();
|
||||
List<VmwareDatacenterVO> vmwareDcList = new ArrayList<VmwareDatacenterVO>();
|
||||
VmwareDatacenterZoneMapVO vmwareDcZoneMap;
|
||||
VmwareDatacenterVO vmwareDatacenter;
|
||||
long vmwareDcId;
|
||||
@ -1506,7 +1503,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
String vCenterHost = vmwareDatacenter.getVcenterHost();
|
||||
String userName = vmwareDatacenter.getUser();
|
||||
String password = vmwareDatacenter.getPassword();
|
||||
List<PbmProfile> storageProfiles;
|
||||
List<PbmProfile> storageProfiles = null;
|
||||
try {
|
||||
logger.debug(String.format("Importing vSphere Storage Policies for the vmware DC %d in zone %d", vmwareDcId, zoneId));
|
||||
VmwareContext context = VmwareContextFactory.getContext(vCenterHost, userName, password);
|
||||
@ -1534,15 +1531,16 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
List<VsphereStoragePolicyVO> allStoragePolicies = vsphereStoragePolicyDao.listAll();
|
||||
List<PbmProfile> finalStorageProfiles = storageProfiles;
|
||||
List<VsphereStoragePolicyVO> needToMarkRemoved = allStoragePolicies.stream()
|
||||
.filter(existingPolicy -> finalStorageProfiles.stream()
|
||||
.noneMatch(storageProfile -> storageProfile.getProfileId().getUniqueId().equals(existingPolicy.getPolicyId())))
|
||||
.filter(existingPolicy -> !finalStorageProfiles.stream()
|
||||
.anyMatch(storageProfile -> storageProfile.getProfileId().getUniqueId().equals(existingPolicy.getPolicyId())))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
for (VsphereStoragePolicyVO storagePolicy : needToMarkRemoved) {
|
||||
vsphereStoragePolicyDao.remove(storagePolicy.getId());
|
||||
}
|
||||
|
||||
return vsphereStoragePolicyDao.listAll();
|
||||
List<VsphereStoragePolicyVO> storagePolicies = vsphereStoragePolicyDao.listAll();
|
||||
return storagePolicies;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -1588,87 +1586,13 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HostMO> listHostsInDatacenter(ListVmwareDcHostsCmd cmd) {
|
||||
VcenterData vmwaredc = getVcenterData(cmd);
|
||||
|
||||
try {
|
||||
VmwareContext context = getVmwareContext(vmwaredc);
|
||||
DatacenterMO dcMo = getDatacenterMO(context, vmwaredc);
|
||||
return dcMo.getAllHostsOnDatacenter();
|
||||
} catch (RuntimeFaultFaultMsg | URISyntaxException | VmwareClientException | InvalidLocaleFaultMsg |
|
||||
InvalidLoginFaultMsg | InvalidPropertyFaultMsg e) {
|
||||
String errorMsg = String.format("Error retrieving stopped VMs from the VMware VC %s datacenter %s: %s",
|
||||
vmwaredc.vcenter, vmwaredc.datacenterName, e.getMessage());
|
||||
logger.error(errorMsg, e);
|
||||
throw new CloudRuntimeException(errorMsg);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<String, List<UnmanagedInstanceTO>> listVMsInDatacenter(ListVmwareDcVmsCmd cmd) {
|
||||
Integer maxObjects = cmd.getBatchSize();
|
||||
String token = cmd.getToken();
|
||||
String host = cmd.getHost();
|
||||
|
||||
VcenterData vmwaredc = getVcenterData(cmd);
|
||||
|
||||
try {
|
||||
VmwareContext context = getVmwareContext(vmwaredc);
|
||||
|
||||
DatacenterMO dcMo = getDatacenterMO(context, vmwaredc);
|
||||
|
||||
if (com.cloud.utils.StringUtils.isNotBlank(host)) {
|
||||
ManagedObjectReference hostMor = dcMo.findHost(host);
|
||||
if (hostMor == null) {
|
||||
throw new VmwareClientException(String.format("No host '%s' found on DC: %s.", host, dcMo.getName()));
|
||||
}
|
||||
HostMO hostMo = new HostMO(context, hostMor);
|
||||
return hostMo.getVms(maxObjects, token);
|
||||
} else {
|
||||
return dcMo.getVms(maxObjects, token);
|
||||
}
|
||||
} catch (InvalidParameterValueException | VmwareClientException | InvalidLocaleFaultMsg | InvalidLoginFaultMsg |
|
||||
RuntimeFaultFaultMsg | URISyntaxException | InvalidPropertyFaultMsg | InvocationTargetException |
|
||||
NoSuchMethodException | IllegalAccessException e) {
|
||||
String errorMsg = String.format("Error retrieving stopped VMs from the VMware VC %s datacenter %s: %s",
|
||||
vmwaredc.vcenter, vmwaredc.datacenterName, e.getMessage());
|
||||
logger.error(errorMsg, e);
|
||||
throw new CloudRuntimeException(errorMsg);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private DatacenterMO getDatacenterMO(VmwareContext context, VcenterData vmwaredc) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
DatacenterMO dcMo = new DatacenterMO(context, vmwaredc.datacenterName);
|
||||
ManagedObjectReference dcMor = dcMo.getMor();
|
||||
if (dcMor == null) {
|
||||
String msg = String.format("Unable to find VMware datacenter %s in vCenter %s",
|
||||
vmwaredc.datacenterName, vmwaredc.vcenter);
|
||||
logger.error(msg);
|
||||
throw new InvalidParameterValueException(msg);
|
||||
}
|
||||
return dcMo;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private VmwareContext getVmwareContext(VcenterData vmwaredc) throws RuntimeFaultFaultMsg, URISyntaxException, VmwareClientException, InvalidLocaleFaultMsg, InvalidLoginFaultMsg {
|
||||
logger.debug(String.format("Connecting to the VMware datacenter %s at vCenter %s to retrieve VMs",
|
||||
vmwaredc.datacenterName, vmwaredc.vcenter));
|
||||
String serviceUrl = String.format("https://%s/sdk/vimService", vmwaredc.vcenter);
|
||||
VmwareClient vimClient = new VmwareClient(vmwaredc.vcenter);
|
||||
vimClient.connect(serviceUrl, vmwaredc.username, vmwaredc.password);
|
||||
VmwareContext context = new VmwareContext(vimClient, vmwaredc.vcenter);
|
||||
return context;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private VcenterData getVcenterData(ListVmwareDcItems cmd) {
|
||||
public List<UnmanagedInstanceTO> listVMsInDatacenter(ListVmwareDcVmsCmd cmd) {
|
||||
String vcenter = cmd.getVcenter();
|
||||
String datacenterName = cmd.getDatacenterName();
|
||||
String username = cmd.getUsername();
|
||||
String password = cmd.getPassword();
|
||||
Long existingVcenterId = cmd.getExistingVcenterId();
|
||||
String keyword = cmd.getKeyword();
|
||||
|
||||
if ((existingVcenterId == null && StringUtils.isBlank(vcenter)) ||
|
||||
(existingVcenterId != null && StringUtils.isNotBlank(vcenter))) {
|
||||
@ -1689,27 +1613,37 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
username = vmwareDc.getUser();
|
||||
password = vmwareDc.getPassword();
|
||||
}
|
||||
VcenterData vmwaredc = new VcenterData(vcenter, datacenterName, username, password);
|
||||
return vmwaredc;
|
||||
}
|
||||
|
||||
private static class VcenterData {
|
||||
public final String vcenter;
|
||||
public final String datacenterName;
|
||||
public final String username;
|
||||
public final String password;
|
||||
try {
|
||||
logger.debug(String.format("Connecting to the VMware datacenter %s at vCenter %s to retrieve VMs",
|
||||
datacenterName, vcenter));
|
||||
String serviceUrl = String.format("https://%s/sdk/vimService", vcenter);
|
||||
VmwareClient vimClient = new VmwareClient(vcenter);
|
||||
vimClient.connect(serviceUrl, username, password);
|
||||
VmwareContext context = new VmwareContext(vimClient, vcenter);
|
||||
|
||||
public VcenterData(String vcenter, String datacenterName, String username, String password) {
|
||||
this.vcenter = vcenter;
|
||||
this.datacenterName = datacenterName;
|
||||
this.username = username;
|
||||
this.password = password;
|
||||
DatacenterMO dcMo = new DatacenterMO(context, datacenterName);
|
||||
ManagedObjectReference dcMor = dcMo.getMor();
|
||||
if (dcMor == null) {
|
||||
String msg = String.format("Unable to find VMware datacenter %s in vCenter %s",
|
||||
datacenterName, vcenter);
|
||||
logger.error(msg);
|
||||
throw new InvalidParameterValueException(msg);
|
||||
}
|
||||
List<UnmanagedInstanceTO> instances = dcMo.getAllVmsOnDatacenter();
|
||||
return StringUtils.isBlank(keyword) ? instances :
|
||||
instances.stream().filter(x -> x.getName().toLowerCase().contains(keyword.toLowerCase())).collect(Collectors.toList());
|
||||
} catch (Exception e) {
|
||||
String errorMsg = String.format("Error retrieving stopped VMs from the VMware VC %s datacenter %s: %s",
|
||||
vcenter, datacenterName, e.getMessage());
|
||||
logger.error(errorMsg, e);
|
||||
throw new CloudRuntimeException(errorMsg);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNexusVSM(Long clusterId) {
|
||||
ClusterVSMMapVO vsmMapVo;
|
||||
ClusterVSMMapVO vsmMapVo = null;
|
||||
|
||||
vsmMapVo = _vsmMapDao.findByClusterId(clusterId);
|
||||
if (vsmMapVo == null) {
|
||||
@ -1759,7 +1693,7 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
}
|
||||
|
||||
/**
|
||||
* This task is to clean-up templates from primary storage that are otherwise not cleaned by the {@see com.cloud.storage.StorageManagerImpl.StorageGarbageCollector}.
|
||||
* This task is to cleanup templates from primary storage that are otherwise not cleaned by the {@link com.cloud.storage.StorageManagerImpl.StorageGarbageCollector}.
|
||||
* it is called at regular intervals when storage.template.cleanup.enabled == true
|
||||
* It collect all templates that
|
||||
* - are deleted from cloudstack
|
||||
|
||||
@ -36,8 +36,8 @@ import com.cloud.dc.VmwareDatacenterVO;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
@APICommand(name = "addVmwareDc", description = "Adds a Vmware datacenter to specified zone",
|
||||
responseObject = VmwareDatacenterResponse.class, responseHasSensitiveInfo = false)
|
||||
@APICommand(name = "addVmwareDc", description = "Adds a VMware datacenter to specified zone", responseObject = VmwareDatacenterResponse.class,
|
||||
requestHasSensitiveInfo = true, responseHasSensitiveInfo = false)
|
||||
public class AddVmwareDcCmd extends BaseCmd {
|
||||
|
||||
@Inject
|
||||
@ -45,7 +45,7 @@ public class AddVmwareDcCmd extends BaseCmd {
|
||||
|
||||
|
||||
|
||||
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "Name of Vmware datacenter to be added to specified zone.")
|
||||
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "Name of VMware datacenter to be added to specified zone.")
|
||||
private String name;
|
||||
|
||||
@Parameter(name = ApiConstants.VCENTER,
|
||||
@ -54,10 +54,10 @@ public class AddVmwareDcCmd extends BaseCmd {
|
||||
description = "The name/ip of vCenter. Make sure it is IP address or full qualified domain name for host running vCenter server.")
|
||||
private String vCenter;
|
||||
|
||||
@Parameter(name = ApiConstants.USERNAME, type = CommandType.STRING, description = "The Username required to connect to resource.")
|
||||
@Parameter(name = ApiConstants.USERNAME, type = CommandType.STRING, required = false, description = "The Username required to connect to resource.")
|
||||
private String username;
|
||||
|
||||
@Parameter(name = ApiConstants.PASSWORD, type = CommandType.STRING, description = "The password for specified username.")
|
||||
@Parameter(name = ApiConstants.PASSWORD, type = CommandType.STRING, required = false, description = "The password for specified username.")
|
||||
private String password;
|
||||
|
||||
@Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, required = true, description = "The Zone ID.")
|
||||
@ -99,7 +99,7 @@ public class AddVmwareDcCmd extends BaseCmd {
|
||||
response.setResponseName(getCommandName());
|
||||
response.setObjectName("vmwaredc");
|
||||
} else {
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add Vmware Datacenter to zone.");
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add VMware Datacenter to zone.");
|
||||
}
|
||||
this.setResponseObject(response);
|
||||
} catch (DiscoveryException ex) {
|
||||
|
||||
@ -72,13 +72,6 @@ public class ImportVsphereStoragePoliciesCmd extends BaseCmd {
|
||||
|
||||
List<? extends VsphereStoragePolicy> storagePolicies = _vmwareDatacenterService.importVsphereStoragePolicies(this);
|
||||
final ListResponse<VsphereStoragePoliciesResponse> responseList = new ListResponse<>();
|
||||
final List<VsphereStoragePoliciesResponse> storagePoliciesResponseList = getVsphereStoragePoliciesResponses(storagePolicies, dataCenter);
|
||||
responseList.setResponses(storagePoliciesResponseList);
|
||||
responseList.setResponseName(getCommandName());
|
||||
setResponseObject(responseList);
|
||||
}
|
||||
|
||||
private static List<VsphereStoragePoliciesResponse> getVsphereStoragePoliciesResponses(List<? extends VsphereStoragePolicy> storagePolicies, DataCenter dataCenter) {
|
||||
final List<VsphereStoragePoliciesResponse> storagePoliciesResponseList = new ArrayList<>();
|
||||
for (VsphereStoragePolicy storagePolicy : storagePolicies) {
|
||||
final VsphereStoragePoliciesResponse storagePoliciesResponse = new VsphereStoragePoliciesResponse();
|
||||
@ -91,7 +84,9 @@ public class ImportVsphereStoragePoliciesCmd extends BaseCmd {
|
||||
|
||||
storagePoliciesResponseList.add(storagePoliciesResponse);
|
||||
}
|
||||
return storagePoliciesResponseList;
|
||||
responseList.setResponses(storagePoliciesResponseList);
|
||||
responseList.setResponseName(getCommandName());
|
||||
setResponseObject(responseList);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -1,144 +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 org.apache.cloudstack.api.command.admin.zone;
|
||||
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.InsufficientCapacityException;
|
||||
import com.cloud.exception.NetworkRuleConflictException;
|
||||
import com.cloud.exception.ResourceAllocationException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.hypervisor.Hypervisor;
|
||||
import com.cloud.hypervisor.vmware.VmwareDatacenterService;
|
||||
import com.cloud.hypervisor.vmware.mo.HostMO;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
import com.vmware.vim25.InvalidPropertyFaultMsg;
|
||||
import com.vmware.vim25.RuntimeFaultFaultMsg;
|
||||
|
||||
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.BaseResponse;
|
||||
import org.apache.cloudstack.api.Parameter;
|
||||
import org.apache.cloudstack.api.ServerApiException;
|
||||
import org.apache.cloudstack.api.response.HostResponse;
|
||||
import org.apache.cloudstack.api.response.VmwareDatacenterResponse;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@APICommand(name = "listVmwareDcHosts", responseObject = VmwareRequestResponse.class,
|
||||
description = "Lists the VMs in a Vmware Datacenter",
|
||||
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
|
||||
public class ListVmwareDcHostsCmd extends BaseCmd implements ListVmwareDcItems {
|
||||
|
||||
@Inject
|
||||
public VmwareDatacenterService _vmwareDatacenterService;
|
||||
|
||||
@Parameter(name = ApiConstants.EXISTING_VCENTER_ID,
|
||||
type = CommandType.UUID,
|
||||
entityType = VmwareDatacenterResponse.class,
|
||||
description = "UUID of a linked existing vCenter")
|
||||
private Long existingVcenterId;
|
||||
|
||||
@Parameter(name = ApiConstants.VCENTER,
|
||||
type = CommandType.STRING,
|
||||
description = "The name/ip of vCenter. Make sure it is IP address or full qualified domain name for host running vCenter server.")
|
||||
private String vcenter;
|
||||
|
||||
@Parameter(name = ApiConstants.DATACENTER_NAME, type = CommandType.STRING, description = "Name of Vmware datacenter.")
|
||||
private String datacenterName;
|
||||
|
||||
@Parameter(name = ApiConstants.USERNAME, type = CommandType.STRING, description = "The Username required to connect to resource.")
|
||||
private String username;
|
||||
|
||||
@Parameter(name = ApiConstants.PASSWORD, type = CommandType.STRING, description = "The password for specified username.")
|
||||
private String password;
|
||||
|
||||
public String getVcenter() {
|
||||
return vcenter;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public String getDatacenterName() {
|
||||
return datacenterName;
|
||||
}
|
||||
|
||||
public Long getExistingVcenterId() {
|
||||
return existingVcenterId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
|
||||
checkParameters();
|
||||
try {
|
||||
List<HostMO> hosts = _vmwareDatacenterService.listHostsInDatacenter(this);
|
||||
List<BaseResponse> baseResponseList = new ArrayList<>();
|
||||
if (CollectionUtils.isNotEmpty(hosts)) {
|
||||
for (HostMO vmwareHost : hosts) {
|
||||
HostResponse resp = createHostResponse(vmwareHost);
|
||||
baseResponseList.add(resp);
|
||||
}
|
||||
}
|
||||
VmwareRequestResponse<BaseResponse> response = new VmwareRequestResponse<>();
|
||||
response.setResponses(baseResponseList, baseResponseList.size());
|
||||
response.setResponseName(getCommandName());
|
||||
setResponseObject(response);
|
||||
} catch (CloudRuntimeException | InvalidPropertyFaultMsg | RuntimeFaultFaultMsg | InvocationTargetException |
|
||||
NoSuchMethodException | IllegalAccessException e) {
|
||||
String errorMsg = String.format("Error retrieving VMs from Vmware VC: %s", e.getMessage());
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, errorMsg);
|
||||
}
|
||||
}
|
||||
|
||||
private HostResponse createHostResponse(HostMO hostInstance) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
HostResponse response = new HostResponse();
|
||||
response.setHypervisor(Hypervisor.HypervisorType.VMware.toString());
|
||||
response.setName(hostInstance.getHostName());
|
||||
response.setObjectName("host");
|
||||
return response;
|
||||
}
|
||||
|
||||
private void checkParameters() {
|
||||
if ((existingVcenterId == null && vcenter == null) || (existingVcenterId != null && vcenter != null)) {
|
||||
throw new ServerApiException(ApiErrorCode.PARAM_ERROR,
|
||||
"Please provide an existing vCenter ID or a vCenter IP/Name, parameters are mutually exclusive");
|
||||
}
|
||||
if (existingVcenterId == null && StringUtils.isAnyBlank(vcenter, datacenterName, username, password)) {
|
||||
throw new ServerApiException(ApiErrorCode.PARAM_ERROR,
|
||||
"Please set all the information for a vCenter IP/Name, datacenter, username and password");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getEntityOwnerId() {
|
||||
return Account.ACCOUNT_ID_SYSTEM;
|
||||
}
|
||||
}
|
||||
@ -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.
|
||||
package org.apache.cloudstack.api.command.admin.zone;
|
||||
|
||||
public interface ListVmwareDcItems {
|
||||
String getVcenter();
|
||||
|
||||
String getDatacenterName();
|
||||
|
||||
String getUsername();
|
||||
|
||||
String getPassword();
|
||||
|
||||
Long getExistingVcenterId();
|
||||
}
|
||||
@ -23,15 +23,15 @@ import com.cloud.exception.ResourceAllocationException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.hypervisor.vmware.VmwareDatacenterService;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
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.BaseResponse;
|
||||
import org.apache.cloudstack.api.Parameter;
|
||||
import org.apache.cloudstack.api.ServerApiException;
|
||||
import org.apache.cloudstack.api.response.ListResponse;
|
||||
import org.apache.cloudstack.api.response.UnmanagedInstanceResponse;
|
||||
import org.apache.cloudstack.api.response.VmwareDatacenterResponse;
|
||||
import org.apache.cloudstack.vm.UnmanagedInstanceTO;
|
||||
@ -42,10 +42,10 @@ import javax.inject.Inject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@APICommand(name = "listVmwareDcVms", responseObject = VmwareRequestResponse.class,
|
||||
description = "Lists the VMs in a Vmware Datacenter",
|
||||
@APICommand(name = "listVmwareDcVms", responseObject = UnmanagedInstanceResponse.class,
|
||||
description = "Lists the VMs in a VMware Datacenter",
|
||||
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
|
||||
public class ListVmwareDcVmsCmd extends BaseCmd implements ListVmwareDcItems {
|
||||
public class ListVmwareDcVmsCmd extends BaseListCmd {
|
||||
|
||||
@Inject
|
||||
public VmwareDatacenterService _vmwareDatacenterService;
|
||||
@ -61,7 +61,7 @@ public class ListVmwareDcVmsCmd extends BaseCmd implements ListVmwareDcItems {
|
||||
description = "The name/ip of vCenter. Make sure it is IP address or full qualified domain name for host running vCenter server.")
|
||||
private String vcenter;
|
||||
|
||||
@Parameter(name = ApiConstants.DATACENTER_NAME, type = CommandType.STRING, description = "Name of Vmware datacenter.")
|
||||
@Parameter(name = ApiConstants.DATACENTER_NAME, type = CommandType.STRING, description = "Name of VMware datacenter.")
|
||||
private String datacenterName;
|
||||
|
||||
@Parameter(name = ApiConstants.USERNAME, type = CommandType.STRING, description = "The Username required to connect to resource.")
|
||||
@ -70,18 +70,6 @@ public class ListVmwareDcVmsCmd extends BaseCmd implements ListVmwareDcItems {
|
||||
@Parameter(name = ApiConstants.PASSWORD, type = CommandType.STRING, description = "The password for specified username.")
|
||||
private String password;
|
||||
|
||||
@Parameter(name = ApiConstants.HOST, type = CommandType.STRING, description = "get only the VMs from the specified host.")
|
||||
private String host;
|
||||
|
||||
@Parameter(name = ApiConstants.BATCH_SIZE, type = CommandType.INTEGER, description = "The maximum number of results to return.")
|
||||
private Integer batchSize;
|
||||
|
||||
@Parameter(name = ApiConstants.TOKEN, type = CommandType.STRING,
|
||||
description = "For listVmwareDcVms, if the maximum number of results (the `batchsize`) is exceeded, " +
|
||||
" a token is returned. This token can be used in subsequent calls to retrieve more results." +
|
||||
" As long as a token is returned, more results can be retrieved.")
|
||||
private String token;
|
||||
|
||||
public String getVcenter() {
|
||||
return vcenter;
|
||||
}
|
||||
@ -94,18 +82,6 @@ public class ListVmwareDcVmsCmd extends BaseCmd implements ListVmwareDcItems {
|
||||
return password;
|
||||
}
|
||||
|
||||
public Integer getBatchSize() {
|
||||
return batchSize;
|
||||
}
|
||||
|
||||
public String getHost() {
|
||||
return host;
|
||||
}
|
||||
|
||||
public String getToken() {
|
||||
return token;
|
||||
}
|
||||
|
||||
public String getDatacenterName() {
|
||||
return datacenterName;
|
||||
}
|
||||
@ -118,8 +94,7 @@ public class ListVmwareDcVmsCmd extends BaseCmd implements ListVmwareDcItems {
|
||||
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
|
||||
checkParameters();
|
||||
try {
|
||||
Pair<String, List<UnmanagedInstanceTO>> results = _vmwareDatacenterService.listVMsInDatacenter(this);
|
||||
List<UnmanagedInstanceTO> vms = results.second();
|
||||
List<UnmanagedInstanceTO> vms = _vmwareDatacenterService.listVMsInDatacenter(this);
|
||||
List<BaseResponse> baseResponseList = new ArrayList<>();
|
||||
if (CollectionUtils.isNotEmpty(vms)) {
|
||||
for (UnmanagedInstanceTO vmwareVm : vms) {
|
||||
@ -127,13 +102,16 @@ public class ListVmwareDcVmsCmd extends BaseCmd implements ListVmwareDcItems {
|
||||
baseResponseList.add(resp);
|
||||
}
|
||||
}
|
||||
VmwareRequestResponse<BaseResponse> response = new VmwareRequestResponse<>();
|
||||
response.setResponses(baseResponseList, baseResponseList.size());
|
||||
List<BaseResponse> pagingList = com.cloud.utils.StringUtils.applyPagination(baseResponseList, this.getStartIndex(), this.getPageSizeVal());
|
||||
if (CollectionUtils.isEmpty(pagingList)) {
|
||||
pagingList = baseResponseList;
|
||||
}
|
||||
ListResponse<BaseResponse> response = new ListResponse<>();
|
||||
response.setResponses(pagingList, baseResponseList.size());
|
||||
response.setResponseName(getCommandName());
|
||||
response.setToken(results.first());
|
||||
setResponseObject(response);
|
||||
} catch (CloudRuntimeException e) {
|
||||
String errorMsg = String.format("Error retrieving VMs from Vmware VC: %s", e.getMessage());
|
||||
String errorMsg = String.format("Error retrieving VMs from VMware VC: %s", e.getMessage());
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, errorMsg);
|
||||
}
|
||||
}
|
||||
@ -156,6 +134,6 @@ public class ListVmwareDcVmsCmd extends BaseCmd implements ListVmwareDcItems {
|
||||
|
||||
@Override
|
||||
public String getCommandName() {
|
||||
return "listVmwareDcVmsResponse".toLowerCase();
|
||||
return "listvmwaredcvmsresponse";
|
||||
}
|
||||
}
|
||||
|
||||
@ -42,7 +42,7 @@ import com.cloud.dc.VmwareDatacenter;
|
||||
import com.cloud.hypervisor.vmware.VmwareDatacenterService;
|
||||
import com.cloud.user.Account;
|
||||
|
||||
@APICommand(name = "listVmwareDcs", responseObject = VmwareDatacenterResponse.class, description = "Retrieves Vmware DC(s) associated with a zone.",
|
||||
@APICommand(name = "listVmwareDcs", responseObject = VmwareDatacenterResponse.class, description = "Retrieves VMware DC(s) associated with a zone.",
|
||||
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
|
||||
public class ListVmwareDcsCmd extends BaseListCmd {
|
||||
|
||||
@ -50,6 +50,7 @@ public class ListVmwareDcsCmd extends BaseListCmd {
|
||||
public VmwareDatacenterService _vmwareDatacenterService;
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
//////////////// API parameters /////////////////////
|
||||
/////////////////////////////////////////////////////
|
||||
@ -72,27 +73,20 @@ public class ListVmwareDcsCmd extends BaseListCmd {
|
||||
@Override
|
||||
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
|
||||
ResourceAllocationException {
|
||||
List<? extends VmwareDatacenter> vmwareDcList;
|
||||
List<? extends VmwareDatacenter> vmwareDcList = null;
|
||||
|
||||
try {
|
||||
vmwareDcList = _vmwareDatacenterService.listVmwareDatacenters(this);
|
||||
} catch (InvalidParameterValueException ie) {
|
||||
throw new InvalidParameterValueException("Invalid zone id " + getZoneId());
|
||||
} catch (Exception e) {
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to find associated Vmware DCs associated with zone " + getZoneId());
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to find associated VMware DCs associated with zone " + getZoneId());
|
||||
}
|
||||
|
||||
ListResponse<VmwareDatacenterResponse> response = new ListResponse<>();
|
||||
List<VmwareDatacenterResponse> vmwareDcResponses = getVmwareDatacenterResponses(vmwareDcList);
|
||||
response.setResponses(vmwareDcResponses);
|
||||
response.setResponseName(getCommandName());
|
||||
setResponseObject(response);
|
||||
}
|
||||
ListResponse<VmwareDatacenterResponse> response = new ListResponse<VmwareDatacenterResponse>();
|
||||
List<VmwareDatacenterResponse> vmwareDcResponses = new ArrayList<VmwareDatacenterResponse>();
|
||||
|
||||
private List<VmwareDatacenterResponse> getVmwareDatacenterResponses(List<? extends VmwareDatacenter> vmwareDcList) {
|
||||
List<VmwareDatacenterResponse> vmwareDcResponses = new ArrayList<>();
|
||||
|
||||
if (vmwareDcList != null && !vmwareDcList.isEmpty()) {
|
||||
if (vmwareDcList != null && vmwareDcList.size() > 0) {
|
||||
for (VmwareDatacenter vmwareDc : vmwareDcList) {
|
||||
VmwareDatacenterResponse vmwareDcResponse = new VmwareDatacenterResponse();
|
||||
|
||||
@ -100,12 +94,14 @@ public class ListVmwareDcsCmd extends BaseListCmd {
|
||||
vmwareDcResponse.setVcenter(vmwareDc.getVcenterHost());
|
||||
vmwareDcResponse.setName(vmwareDc.getVmwareDatacenterName());
|
||||
vmwareDcResponse.setZoneId(getZoneId());
|
||||
vmwareDcResponse.setObjectName(ApiConstants.VMWARE_DC);
|
||||
vmwareDcResponse.setObjectName("VMwareDC");
|
||||
|
||||
vmwareDcResponses.add(vmwareDcResponse);
|
||||
}
|
||||
}
|
||||
return vmwareDcResponses;
|
||||
response.setResponses(vmwareDcResponses);
|
||||
response.setResponseName(getCommandName());
|
||||
setResponseObject(response);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -71,13 +71,6 @@ public class ListVsphereStoragePoliciesCmd extends BaseCmd {
|
||||
|
||||
List<? extends VsphereStoragePolicy> storagePolicies = _vmwareDatacenterService.listVsphereStoragePolicies(this);
|
||||
final ListResponse<VsphereStoragePoliciesResponse> responseList = new ListResponse<>();
|
||||
final List<VsphereStoragePoliciesResponse> storagePoliciesResponseList = getVsphereStoragePoliciesResponses(storagePolicies, dataCenter);
|
||||
responseList.setResponses(storagePoliciesResponseList);
|
||||
responseList.setResponseName(getCommandName());
|
||||
setResponseObject(responseList);
|
||||
}
|
||||
|
||||
private static List<VsphereStoragePoliciesResponse> getVsphereStoragePoliciesResponses(List<? extends VsphereStoragePolicy> storagePolicies, DataCenter dataCenter) {
|
||||
final List<VsphereStoragePoliciesResponse> storagePoliciesResponseList = new ArrayList<>();
|
||||
for (VsphereStoragePolicy storagePolicy : storagePolicies) {
|
||||
final VsphereStoragePoliciesResponse storagePoliciesResponse = new VsphereStoragePoliciesResponse();
|
||||
@ -86,11 +79,13 @@ public class ListVsphereStoragePoliciesCmd extends BaseCmd {
|
||||
storagePoliciesResponse.setName(storagePolicy.getName());
|
||||
storagePoliciesResponse.setPolicyId(storagePolicy.getPolicyId());
|
||||
storagePoliciesResponse.setDescription(storagePolicy.getDescription());
|
||||
storagePoliciesResponse.setObjectName(ApiConstants.STORAGE_POLICY);
|
||||
storagePoliciesResponse.setObjectName("StoragePolicy");
|
||||
|
||||
storagePoliciesResponseList.add(storagePoliciesResponse);
|
||||
}
|
||||
return storagePoliciesResponseList;
|
||||
responseList.setResponses(storagePoliciesResponseList);
|
||||
responseList.setResponseName(getCommandName());
|
||||
setResponseObject(responseList);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -68,7 +68,7 @@ public class ListVsphereStoragePolicyCompatiblePoolsCmd extends BaseListCmd {
|
||||
List<StoragePoolResponse> poolResponses = new ArrayList<>();
|
||||
for (StoragePool pool : pools) {
|
||||
StoragePoolResponse poolResponse = _responseGenerator.createStoragePoolForMigrationResponse(pool);
|
||||
poolResponse.setObjectName(ApiConstants.STORAGE_POOL);
|
||||
poolResponse.setObjectName("storagepool");
|
||||
poolResponses.add(poolResponse);
|
||||
}
|
||||
response.setResponses(poolResponses);
|
||||
|
||||
@ -34,7 +34,7 @@ import com.cloud.hypervisor.vmware.VmwareDatacenterService;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
|
||||
@APICommand(name = "removeVmwareDc", responseObject = SuccessResponse.class, description = "Remove a Vmware datacenter from a zone.",
|
||||
@APICommand(name = "removeVmwareDc", responseObject = SuccessResponse.class, description = "Remove a VMware datacenter from a zone.",
|
||||
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
|
||||
public class RemoveVmwareDcCmd extends BaseCmd {
|
||||
|
||||
@ -47,7 +47,7 @@ public class RemoveVmwareDcCmd extends BaseCmd {
|
||||
type = CommandType.UUID,
|
||||
entityType = ZoneResponse.class,
|
||||
required = true,
|
||||
description = "The id of Zone from which Vmware datacenter has to be removed.")
|
||||
description = "The id of Zone from which VMware datacenter has to be removed.")
|
||||
private Long zoneId;
|
||||
|
||||
public Long getZoneId() {
|
||||
@ -63,7 +63,7 @@ public class RemoveVmwareDcCmd extends BaseCmd {
|
||||
response.setResponseName(getCommandName());
|
||||
setResponseObject(response);
|
||||
} else {
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to remove Vmware datacenter from zone");
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to remove VMware datacenter from zone");
|
||||
}
|
||||
} catch (ResourceInUseException ex) {
|
||||
logger.warn("The zone has one or more resources (like cluster), hence not able to remove VMware datacenter from zone."
|
||||
|
||||
@ -33,7 +33,7 @@ import com.cloud.dc.VmwareDatacenter;
|
||||
import com.cloud.hypervisor.vmware.VmwareDatacenterService;
|
||||
import com.cloud.user.Account;
|
||||
|
||||
@APICommand(name = "updateVmwareDc", description = "Updates a Vmware datacenter details for a zone",
|
||||
@APICommand(name = "updateVmwareDc", description = "Updates a VMware datacenter details for a zone",
|
||||
responseObject = VmwareDatacenterResponse.class, responseHasSensitiveInfo = false,
|
||||
since = "4.12.0", authorized = {RoleType.Admin})
|
||||
public class UpdateVmwareDcCmd extends BaseCmd {
|
||||
@ -50,7 +50,7 @@ public class UpdateVmwareDcCmd extends BaseCmd {
|
||||
private Long zoneId;
|
||||
|
||||
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING,
|
||||
description = "Vmware datacenter name.")
|
||||
description = "VMware datacenter name.")
|
||||
private String name;
|
||||
|
||||
@Parameter(name = ApiConstants.VCENTER, type = CommandType.STRING,
|
||||
@ -105,13 +105,13 @@ public class UpdateVmwareDcCmd extends BaseCmd {
|
||||
public void execute() {
|
||||
final VmwareDatacenter vmwareDatacenter = vmwareDatacenterService.updateVmwareDatacenter(this);
|
||||
if (vmwareDatacenter == null) {
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update Vmware datacenter");
|
||||
throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update VMware datacenter");
|
||||
}
|
||||
final VmwareDatacenterResponse response = new VmwareDatacenterResponse();
|
||||
response.setId(vmwareDatacenter.getUuid());
|
||||
response.setName(vmwareDatacenter.getVmwareDatacenterName());
|
||||
response.setResponseName(getCommandName());
|
||||
response.setObjectName(ApiConstants.VMWARE_DC);
|
||||
response.setObjectName("vmwaredc");
|
||||
setResponseObject(response);
|
||||
}
|
||||
|
||||
|
||||
@ -1,38 +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 org.apache.cloudstack.api.command.admin.zone;
|
||||
|
||||
import com.cloud.serializer.Param;
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.ResponseObject;
|
||||
import org.apache.cloudstack.api.response.ListResponse;
|
||||
|
||||
public class VmwareRequestResponse<T extends ResponseObject> extends ListResponse<T> {
|
||||
@SerializedName(ApiConstants.TOKEN)
|
||||
@Param(description = "The Vmware API token to use for retrieving further responses with")
|
||||
private String token;
|
||||
|
||||
public String getToken() {
|
||||
return token;
|
||||
}
|
||||
|
||||
public void setToken(String token) {
|
||||
this.token = token;
|
||||
}
|
||||
}
|
||||
@ -1783,8 +1783,8 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
||||
if (ipv4 && Objects.isNull(startIP)) {
|
||||
throw new CloudRuntimeException("IPv4 address range needs to be provided");
|
||||
}
|
||||
if (ipv6 && Objects.isNull(startIPv6)) {
|
||||
throw new CloudRuntimeException("IPv6 address range needs to be provided");
|
||||
if (ipv6) {
|
||||
logger.info(String.format("ip range for network '%s' is specified as %s - %s", name, startIPv6, endIPv6));
|
||||
}
|
||||
}
|
||||
Pair<Integer, Integer> interfaceMTUs = validateMtuConfig(publicMtu, privateMtu, zone.getId());
|
||||
@ -2174,12 +2174,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
||||
if (implementedNetwork == null || implementedNetwork.first() == null) {
|
||||
logger.warn("Failed to provision the network " + network);
|
||||
}
|
||||
Network implemented = implementedNetwork.second();
|
||||
if (implemented != null) {
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_CREATE, implemented.getAccountId(), implemented.getDataCenterId(), implemented.getId(),
|
||||
implemented.getName(), implemented.getNetworkOfferingId(), null, null, null, Network.class.getName(), implemented.getUuid());
|
||||
}
|
||||
return implemented;
|
||||
return implementedNetwork.second();
|
||||
} catch (ResourceUnavailableException ex) {
|
||||
logger.warn("Failed to implement persistent guest network " + network + "due to ", ex);
|
||||
CloudRuntimeException e = new CloudRuntimeException("Failed to implement persistent guest network");
|
||||
@ -3580,8 +3575,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
||||
}
|
||||
}
|
||||
Network updatedNetwork = getNetwork(network.getId());
|
||||
UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_UPDATE, updatedNetwork.getAccountId(), updatedNetwork.getDataCenterId(), updatedNetwork.getId(),
|
||||
updatedNetwork.getName(), updatedNetwork.getNetworkOfferingId(), null, updatedNetwork.getState().name(), Network.class.getName(), updatedNetwork.getUuid(), true);
|
||||
UsageEventUtils.publishNetworkUpdate(updatedNetwork);
|
||||
return updatedNetwork;
|
||||
}
|
||||
|
||||
|
||||
@ -24,13 +24,7 @@ from marvin.lib.common import list_hosts
|
||||
from cryptography import x509
|
||||
from cryptography.hazmat.backends import default_backend
|
||||
from cryptography.hazmat.primitives import serialization
|
||||
from OpenSSL.crypto import FILETYPE_PEM, verify, X509
|
||||
|
||||
PUBKEY_VERIFY=True
|
||||
try:
|
||||
from OpenSSL.crypto import load_publickey
|
||||
except ImportError:
|
||||
PUBKEY_VERIFY=False
|
||||
from cryptography.hazmat.primitives.asymmetric import padding
|
||||
|
||||
|
||||
class TestCARootProvider(cloudstackTestCase):
|
||||
@ -52,6 +46,20 @@ class TestCARootProvider(cloudstackTestCase):
|
||||
raise Exception("Warning: Exception during cleanup : %s" % e)
|
||||
|
||||
|
||||
def verifySignature(self, caCert, cert):
|
||||
print("Verifying Certificate")
|
||||
caPublicKey = caCert.public_key()
|
||||
try:
|
||||
caPublicKey.verify(
|
||||
cert.signature,
|
||||
cert.tbs_certificate_bytes,
|
||||
padding.PKCS1v15(),
|
||||
cert.signature_hash_algorithm,
|
||||
)
|
||||
print("Certificate is valid!")
|
||||
except Exception as e:
|
||||
print(f"Certificate verification failed: {e}")
|
||||
|
||||
def setUp(self):
|
||||
self.apiclient = self.testClient.getApiClient()
|
||||
self.dbclient = self.testClient.getDbConnection()
|
||||
@ -136,13 +144,8 @@ class TestCARootProvider(cloudstackTestCase):
|
||||
self.assertTrue(address in [str(x) for x in altNames.value.get_values_for_type(x509.IPAddress)])
|
||||
|
||||
# Validate certificate against CA public key
|
||||
global PUBKEY_VERIFY
|
||||
if not PUBKEY_VERIFY:
|
||||
return
|
||||
caCert = x509.load_pem_x509_certificate(self.getCaCertificate().encode(), default_backend())
|
||||
x = X509()
|
||||
x.set_pubkey(load_publickey(FILETYPE_PEM, caCert.public_key().public_bytes(serialization.Encoding.PEM, serialization.PublicFormat.SubjectPublicKeyInfo)))
|
||||
verify(x, cert.signature, cert.tbs_certificate_bytes, cert.signature_hash_algorithm.name)
|
||||
self.verifySignature(caCert, cert)
|
||||
|
||||
|
||||
@attr(tags=['advanced', 'simulator', 'basic', 'sg'], required_hardware=False)
|
||||
@ -165,13 +168,8 @@ class TestCARootProvider(cloudstackTestCase):
|
||||
self.assertEqual(cert.subject.get_attributes_for_oid(x509.oid.NameOID.COMMON_NAME)[0].value, 'v-1-VM')
|
||||
|
||||
# Validate certificate against CA public key
|
||||
global PUBKEY_VERIFY
|
||||
if not PUBKEY_VERIFY:
|
||||
return
|
||||
caCert = x509.load_pem_x509_certificate(self.getCaCertificate().encode(), default_backend())
|
||||
x = X509()
|
||||
x.set_pubkey(load_publickey(FILETYPE_PEM, caCert.public_key().public_bytes(serialization.Encoding.PEM, serialization.PublicFormat.SubjectPublicKeyInfo)))
|
||||
verify(x, cert.signature, cert.tbs_certificate_bytes, cert.signature_hash_algorithm.name)
|
||||
self.verifySignature(caCert, cert)
|
||||
|
||||
|
||||
@attr(tags=['advanced', 'simulator', 'basic', 'sg'], required_hardware=False)
|
||||
|
||||
@ -23,11 +23,12 @@ import logging
|
||||
import time
|
||||
from collections.abc import Iterable
|
||||
|
||||
from marvin.codes import FAILED
|
||||
from marvin.cloudstackTestCase import cloudstackTestCase
|
||||
from marvin.cloudstackAPI import (migrateSystemVm, listRouters, listSystemVms)
|
||||
from marvin.lib.base import (Cluster, Configurations, Host, Network, NetworkOffering, ServiceOffering, VirtualMachine,
|
||||
Zone)
|
||||
from marvin.lib.common import (get_domain, get_zone, get_template)
|
||||
from marvin.lib.common import (get_domain, get_zone, get_test_template)
|
||||
from marvin.lib.utils import wait_until
|
||||
from marvin import jsonHelper
|
||||
from nose.plugins.attrib import attr
|
||||
@ -43,7 +44,15 @@ class TestClusterDRS(cloudstackTestCase):
|
||||
|
||||
zone = get_zone(cls.apiclient, cls.testClient.getZoneForTests())
|
||||
cls.zone = Zone(zone.__dict__)
|
||||
cls.template = get_template(cls.apiclient, cls.zone.id)
|
||||
cls.hypervisor = cls.testClient.getHypervisorInfo()
|
||||
cls.template = get_test_template(
|
||||
cls.apiclient,
|
||||
cls.zone.id,
|
||||
cls.hypervisor
|
||||
)
|
||||
if cls.template == FAILED:
|
||||
assert False, "get_test_template() failed to return template\
|
||||
with hypervisor %s" % cls.hypervisor
|
||||
cls._cleanup = []
|
||||
|
||||
cls.logger = logging.getLogger("TestClusterDRS")
|
||||
|
||||
@ -74,7 +74,6 @@ class TestData(object):
|
||||
"listApis": "allow",
|
||||
"listAccounts": "allow",
|
||||
"listClusters": "deny",
|
||||
"*VmwareDc*": "allow",
|
||||
"*VM*": "allow",
|
||||
"*Host*": "deny"
|
||||
}
|
||||
|
||||
@ -20,10 +20,6 @@ import json
|
||||
import os
|
||||
import tempfile
|
||||
import time
|
||||
import unittest
|
||||
import urllib.error
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
@ -165,6 +161,7 @@ class TestEventsResource(cloudstackTestCase):
|
||||
self.cleanup.remove(volume)
|
||||
ts = str(time.time())
|
||||
virtual_machine.update(self.apiclient, displayname=ts)
|
||||
virtual_machine.start(self.apiclient)
|
||||
virtual_machine.delete(self.apiclient)
|
||||
self.cleanup.remove(virtual_machine)
|
||||
account_network.update(self.apiclient, name=account_network.name + ts)
|
||||
|
||||
@ -733,12 +733,17 @@ class TestNetworkPermissions(cloudstackTestCase):
|
||||
self.exec_command("self.user_apiclient", command, expected=False)
|
||||
self.exec_command("self.otheruser_apiclient", command, expected=True)
|
||||
|
||||
# 22. Destroy vm2, should succeed by vm owner
|
||||
# 22. Start VM before destroying, to recreate ROOT volume that was deleted as part of restore operation
|
||||
command = """self.virtual_machine.start({apiclient})"""
|
||||
self.exec_command("self.user_apiclient", command, expected=False)
|
||||
self.exec_command("self.otheruser_apiclient", command, expected=True)
|
||||
|
||||
# 23. Destroy vm2, should succeed by vm owner
|
||||
command = """self.virtual_machine.delete({apiclient}, expunge=False)"""
|
||||
self.exec_command("self.user_apiclient", command, expected=False)
|
||||
self.exec_command("self.otheruser_apiclient", command, expected=True)
|
||||
|
||||
# 23. Recover vm2, should succeed by vm owner
|
||||
# 24. Recover vm2, should succeed by vm owner
|
||||
allow_expunge_recover_vm = Configurations.list(self.apiclient, name="allow.user.expunge.recover.vm")[0].value
|
||||
self.logger.debug("Global configuration allow.user.expunge.recover.vm = %s", allow_expunge_recover_vm)
|
||||
if allow_expunge_recover_vm == "true":
|
||||
@ -746,12 +751,12 @@ class TestNetworkPermissions(cloudstackTestCase):
|
||||
self.exec_command("self.user_apiclient", command, expected=False)
|
||||
self.exec_command("self.otheruser_apiclient", command, expected=True)
|
||||
|
||||
# 24. Destroy vm2, should succeed by vm owner
|
||||
# 25. Destroy vm2, should succeed by vm owner
|
||||
command = """self.virtual_machine.delete({apiclient}, expunge=False)"""
|
||||
self.exec_command("self.user_apiclient", command, expected=False)
|
||||
self.exec_command("self.otheruser_apiclient", command, expected=True)
|
||||
|
||||
# 25. Expunge vm2, should succeed by vm owner
|
||||
# 26. Expunge vm2, should succeed by vm owner
|
||||
if allow_expunge_recover_vm == "true":
|
||||
command = """self.virtual_machine.expunge({apiclient})"""
|
||||
self.exec_command("self.user_apiclient", command, expected=False)
|
||||
@ -759,7 +764,7 @@ class TestNetworkPermissions(cloudstackTestCase):
|
||||
else:
|
||||
self.virtual_machine.expunge(self.apiclient)
|
||||
|
||||
# 26. Reset network permissions, should succeed by network owner
|
||||
# 27. Reset network permissions, should succeed by network owner
|
||||
command = """self.reset_network_permission({apiclient}, self.user_network, expected=True)"""
|
||||
self.exec_command("self.otheruser_apiclient", command, expected=False)
|
||||
self.exec_command("self.user_apiclient", command, expected=True)
|
||||
|
||||
@ -21,6 +21,7 @@ Tests of Non-Strict (host anti-affinity and host affinity) affinity groups
|
||||
|
||||
import logging
|
||||
|
||||
from marvin.codes import FAILED
|
||||
from nose.plugins.attrib import attr
|
||||
from marvin.cloudstackTestCase import cloudstackTestCase
|
||||
from marvin.cloudstackAPI import startVirtualMachine, stopVirtualMachine, destroyVirtualMachine
|
||||
@ -37,7 +38,8 @@ from marvin.lib.base import (Account,
|
||||
|
||||
from marvin.lib.common import (get_domain,
|
||||
get_zone,
|
||||
get_template)
|
||||
get_template,
|
||||
get_test_template)
|
||||
|
||||
|
||||
class TestNonStrictAffinityGroups(cloudstackTestCase):
|
||||
@ -54,7 +56,11 @@ class TestNonStrictAffinityGroups(cloudstackTestCase):
|
||||
|
||||
zone = get_zone(cls.apiclient, cls.testClient.getZoneForTests())
|
||||
cls.zone = Zone(zone.__dict__)
|
||||
cls.template = get_template(cls.apiclient, cls.zone.id)
|
||||
cls.hypervisor = cls.testClient.getHypervisorInfo()
|
||||
cls.template = get_test_template(cls.apiclient, cls.zone.id, cls.hypervisor)
|
||||
if cls.template == FAILED:
|
||||
assert False, "get_test_template() failed to return template\
|
||||
with hypervisor %s" % cls.hypervisor
|
||||
cls._cleanup = []
|
||||
|
||||
cls.logger = logging.getLogger("TestNonStrictAffinityGroups")
|
||||
|
||||
@ -1198,7 +1198,6 @@ export default {
|
||||
} else {
|
||||
params.existingvcenterid = this.selectedVmwareVcenter.existingvcenterid
|
||||
}
|
||||
params.host = this.selectedVmwareVcenter.host
|
||||
}
|
||||
|
||||
api(apiName, params).then(json => {
|
||||
|
||||
@ -129,33 +129,11 @@
|
||||
|
||||
<tooltip-label :title="$t('label.press.enter')" :tooltip="$t('label.press.enter.tooltip')"/>
|
||||
</div>
|
||||
<div
|
||||
v-if="selectedExistingVcenterId || (vcenterSelectedOption === 'new')">
|
||||
<a-form-item :label="$t('label.esx.host')" ref="host" name="host" v-if="hosts.length > 0">
|
||||
<a-select
|
||||
v-model:value="form.host"
|
||||
:loading="loading"
|
||||
optionFilterProp="label"
|
||||
:filterOption="(input, option) => {
|
||||
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
|
||||
}"
|
||||
:placeholder="$t('label.esx.host')"
|
||||
@change="onSelectExistingVmwareHost">
|
||||
<a-select-option key="" label="">{{ }}</a-select-option>
|
||||
<a-select-option v-for="opt in hosts" :key="opt.name">
|
||||
{{ 'ESXi: ' + opt.name }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<div v-else>
|
||||
{{ $t('message.list.zone.vmware.hosts.empty') }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<a-button
|
||||
v-if="vcenterSelectedOption == 'existing' || vcenterSelectedOption == 'new'"
|
||||
:disabled="(vcenterSelectedOption === 'new' && (vcenter === '' || datacentername === '' || username === '' || password === '')) ||
|
||||
(vcenterSelectedOption === 'existing' && selectedExistingVcenterId === '') && host === ''"
|
||||
(vcenterSelectedOption === 'existing' && selectedExistingVcenterId === '')"
|
||||
:loading="loading"
|
||||
type="primary"
|
||||
@click="listVmwareDatacenterVms">{{ $t('label.list.vmware.vcenter.vms') }}</a-button>
|
||||
@ -186,8 +164,6 @@ export default {
|
||||
zones: {},
|
||||
vcenterSelectedOption: '',
|
||||
existingvcenter: [],
|
||||
hosts: [],
|
||||
selectedHost: '',
|
||||
selectedExistingVcenterId: '',
|
||||
selectedPoweredOnVm: false,
|
||||
vmwareDcVms: [],
|
||||
@ -251,7 +227,6 @@ export default {
|
||||
} else {
|
||||
params.existingvcenterid = this.selectedExistingVcenterId
|
||||
}
|
||||
params.host = this.selectedHost
|
||||
api('listVmwareDcVms', params).then(json => {
|
||||
const obj = {
|
||||
params: params,
|
||||
@ -281,8 +256,8 @@ export default {
|
||||
listZoneVmwareDcs () {
|
||||
this.loading = true
|
||||
api('listVmwareDcs', { zoneid: this.sourcezoneid }).then(response => {
|
||||
if (response.listvmwaredcsresponse.vmwaredc && response.listvmwaredcsresponse.vmwaredc.length > 0) {
|
||||
this.existingvcenter = response.listvmwaredcsresponse.vmwaredc
|
||||
if (response.listvmwaredcsresponse.VMwareDC && response.listvmwaredcsresponse.VMwareDC.length > 0) {
|
||||
this.existingvcenter = response.listvmwaredcsresponse.VMwareDC
|
||||
}
|
||||
}).catch(error => {
|
||||
this.$notifyError(error)
|
||||
@ -290,43 +265,8 @@ export default {
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
loadZoneVmwareDcHosts (doNotify) {
|
||||
this.loading = true
|
||||
const params = {}
|
||||
if (this.vcenterSelectedOption === 'new') {
|
||||
params.datacentername = this.datacenter
|
||||
params.vcenter = this.vcenter
|
||||
params.username = this.username
|
||||
params.password = this.password
|
||||
} else {
|
||||
params.existingvcenterid = this.selectedExistingVcenterId
|
||||
}
|
||||
api('listVmwareDcHosts', params).then(response => {
|
||||
if (response.listvmwaredchostsresponse.host && response.listvmwaredchostsresponse.host.length > 0) {
|
||||
this.hosts = response.listvmwaredchostsresponse.host
|
||||
}
|
||||
}).catch(error => {
|
||||
if (doNotify) {
|
||||
this.$notifyError(error)
|
||||
}
|
||||
this.hosts = []
|
||||
return false
|
||||
}).finally(() => {
|
||||
this.loading = false
|
||||
return true
|
||||
})
|
||||
},
|
||||
onSelectExistingVmwareDatacenter (value) {
|
||||
this.selectedExistingVcenterId = value
|
||||
this.loadZoneVmwareDcHosts(true)
|
||||
},
|
||||
onSelectExternalVmwareDatacenter (value) {
|
||||
if (this.vcenterSelectedOption === 'new' && !(this.vcenter === '' || this.datacentername === '' || this.username === '' || this.password === '')) {
|
||||
this.loadZoneVmwareDcHosts(false)
|
||||
}
|
||||
},
|
||||
onSelectExistingVmwareHost (value) {
|
||||
this.selectedHost = value
|
||||
},
|
||||
onVcenterTypeChange () {
|
||||
this.$emit('onVcenterTypeChanged', this.vcenterSelectedOption)
|
||||
|
||||
@ -19,23 +19,11 @@ package com.cloud.hypervisor.vmware.mo;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
|
||||
import com.cloud.hypervisor.vmware.util.VmwareHelper;
|
||||
import com.cloud.hypervisor.vmware.util.VmwareContext;
|
||||
import com.cloud.utils.Pair;
|
||||
import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
|
||||
import org.apache.cloudstack.vm.UnmanagedInstanceTO;
|
||||
|
||||
import com.vmware.vim25.CustomFieldDef;
|
||||
import com.vmware.vim25.CustomFieldStringValue;
|
||||
import com.vmware.vim25.ManagedObjectReference;
|
||||
import com.vmware.vim25.InvalidPropertyFaultMsg;
|
||||
import com.vmware.vim25.RuntimeFaultFaultMsg;
|
||||
import com.vmware.vim25.ObjectContent;
|
||||
import com.vmware.vim25.RetrieveResult;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BaseMO {
|
||||
protected static Logger logger = LogManager.getLogger(BaseMO.class);
|
||||
@ -63,18 +51,6 @@ public class BaseMO {
|
||||
_mor.setValue(morValue);
|
||||
}
|
||||
|
||||
protected static Pair<String, List<ObjectContent>> createReturnObjectPair(RetrieveResult result) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("vmware result : {} ", ReflectionToStringBuilderUtils.reflectCollection(result));
|
||||
}
|
||||
if (result == null) {
|
||||
return new Pair<>(null, new ArrayList<>());
|
||||
}
|
||||
String tokenForRetrievingNewResults = result.getToken();
|
||||
List<ObjectContent> listOfObjects = result.getObjects();
|
||||
return new Pair<>(tokenForRetrievingNewResults, listOfObjects);
|
||||
}
|
||||
|
||||
public VmwareContext getContext() {
|
||||
return _context;
|
||||
}
|
||||
@ -162,11 +138,11 @@ public class BaseMO {
|
||||
return null;
|
||||
}
|
||||
|
||||
public int getCustomFieldKey(String fieldName) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
public int getCustomFieldKey(String fieldName) throws Exception {
|
||||
return getCustomFieldKey(getMor().getType(), fieldName);
|
||||
}
|
||||
|
||||
public int getCustomFieldKey(String morType, String fieldName) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
public int getCustomFieldKey(String morType, String fieldName) throws Exception {
|
||||
assert (morType != null);
|
||||
|
||||
ManagedObjectReference cfmMor = _context.getServiceContent().getCustomFieldsManager();
|
||||
@ -178,30 +154,4 @@ public class BaseMO {
|
||||
|
||||
return cfmMo.getCustomFieldKey(morType, fieldName);
|
||||
}
|
||||
|
||||
protected Pair<String, List<ObjectContent>> retrieveNextSetOfProperties(String tokenForPriorQuery) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
RetrieveResult result = _context.getService().continueRetrievePropertiesEx(_context.getPropertyCollector(), tokenForPriorQuery);
|
||||
return BaseMO.createReturnObjectPair(result);
|
||||
}
|
||||
|
||||
protected void objectContentToUnmanagedInstanceTO(Pair<String, List<ObjectContent>> objectContents, List<UnmanagedInstanceTO> vms) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
List<ObjectContent> ocs = objectContents.second();
|
||||
if (ocs != null) {
|
||||
for (ObjectContent oc : ocs) {
|
||||
ManagedObjectReference vmMor = oc.getObj();
|
||||
if (vmMor != null) {
|
||||
VirtualMachineMO vmMo = new VirtualMachineMO(_context, vmMor);
|
||||
try {
|
||||
if (!vmMo.isTemplate()) {
|
||||
HostMO hostMO = vmMo.getRunningHost();
|
||||
UnmanagedInstanceTO unmanagedInstance = VmwareHelper.getUnmanagedInstance(hostMO, vmMo);
|
||||
vms.add(unmanagedInstance);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.debug("Unexpected error checking unmanaged instance {}, excluding it: {}", vmMo.getVmName(), e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,14 +16,11 @@
|
||||
// under the License.
|
||||
package com.cloud.hypervisor.vmware.mo;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.List;
|
||||
|
||||
import com.vmware.vim25.CustomFieldDef;
|
||||
import com.vmware.vim25.ManagedObjectReference;
|
||||
import com.vmware.vim25.PrivilegePolicyDef;
|
||||
import com.vmware.vim25.InvalidPropertyFaultMsg;
|
||||
import com.vmware.vim25.RuntimeFaultFaultMsg;
|
||||
|
||||
import com.cloud.hypervisor.vmware.util.VmwareContext;
|
||||
|
||||
@ -53,12 +50,12 @@ public class CustomFieldsManagerMO extends BaseMO {
|
||||
_context.getService().setField(getMor(), morEntity, key, value);
|
||||
}
|
||||
|
||||
public List<CustomFieldDef> getFields() throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
public List<CustomFieldDef> getFields() throws Exception {
|
||||
return _context.getVimClient().getDynamicProperty(getMor(), "field");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCustomFieldKey(String morType, String fieldName) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
public int getCustomFieldKey(String morType, String fieldName) throws Exception {
|
||||
List<CustomFieldDef> fields = getFields();
|
||||
if (fields != null) {
|
||||
for (CustomFieldDef field : fields) {
|
||||
|
||||
@ -17,12 +17,11 @@
|
||||
|
||||
package com.cloud.hypervisor.vmware.mo;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.cloud.utils.StringUtils;
|
||||
import com.cloud.hypervisor.vmware.util.VmwareHelper;
|
||||
import org.apache.cloudstack.vm.UnmanagedInstanceTO;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
|
||||
@ -39,10 +38,6 @@ import com.vmware.vim25.PropertySpec;
|
||||
import com.vmware.vim25.SelectionSpec;
|
||||
import com.vmware.vim25.TraversalSpec;
|
||||
import com.vmware.vim25.VirtualEthernetCardDistributedVirtualPortBackingInfo;
|
||||
import com.vmware.vim25.RetrieveOptions;
|
||||
import com.vmware.vim25.RetrieveResult;
|
||||
import com.vmware.vim25.InvalidPropertyFaultMsg;
|
||||
import com.vmware.vim25.RuntimeFaultFaultMsg;
|
||||
|
||||
import com.cloud.hypervisor.vmware.util.VmwareContext;
|
||||
import com.cloud.utils.Pair;
|
||||
@ -57,7 +52,7 @@ public class DatacenterMO extends BaseMO {
|
||||
super(context, morType, morValue);
|
||||
}
|
||||
|
||||
public DatacenterMO(VmwareContext context, String dcName) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
public DatacenterMO(VmwareContext context, String dcName) throws Exception {
|
||||
super(context, null);
|
||||
|
||||
_mor = _context.getVimClient().getDecendentMoRef(_context.getRootFolder(), "Datacenter", dcName);
|
||||
@ -67,8 +62,25 @@ public class DatacenterMO extends BaseMO {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
return _context.getVimClient().getDynamicProperty(_mor, "name");
|
||||
public String getName() throws Exception {
|
||||
return (String)_context.getVimClient().getDynamicProperty(_mor, "name");
|
||||
}
|
||||
|
||||
public void registerTemplate(ManagedObjectReference morHost, String datastoreName, String templateName, String templateFileName) throws Exception {
|
||||
|
||||
ManagedObjectReference morFolder = (ManagedObjectReference)_context.getVimClient().getDynamicProperty(_mor, "vmFolder");
|
||||
assert (morFolder != null);
|
||||
|
||||
ManagedObjectReference morTask =
|
||||
_context.getService()
|
||||
.registerVMTask(morFolder, String.format("[%s] %s/%s", datastoreName, templateName, templateFileName), templateName, true, null, morHost);
|
||||
|
||||
boolean result = _context.getVimClient().waitForTask(morTask);
|
||||
if (!result) {
|
||||
throw new Exception("Unable to register template due to " + TaskMO.getTaskFailureInfo(_context, morTask));
|
||||
} else {
|
||||
_context.waitForTaskProgressDone(morTask);
|
||||
}
|
||||
}
|
||||
|
||||
public VirtualMachineMO findVm(String vmName) throws Exception {
|
||||
@ -77,7 +89,7 @@ public class DatacenterMO extends BaseMO {
|
||||
logger.warn("Custom field " + CustomFieldConstants.CLOUD_VM_INTERNAL_NAME + " is not registered ?!");
|
||||
}
|
||||
String instanceNameCustomField = "value[" + key + "]";
|
||||
List<ObjectContent> ocs = getVmProperties(new String[] {"name", instanceNameCustomField});
|
||||
List<ObjectContent> ocs = getVmPropertiesOnDatacenterVmFolder(new String[] {"name", instanceNameCustomField});
|
||||
return HypervisorHostHelper.findVmFromObjectContent(_context, ocs.toArray(new ObjectContent[0]), vmName, instanceNameCustomField);
|
||||
}
|
||||
|
||||
@ -86,10 +98,10 @@ public class DatacenterMO extends BaseMO {
|
||||
int key = cfmMo.getCustomFieldKey("VirtualMachine", CustomFieldConstants.CLOUD_UUID);
|
||||
assert (key != 0);
|
||||
|
||||
List<VirtualMachineMO> list = new ArrayList<>();
|
||||
List<VirtualMachineMO> list = new ArrayList<VirtualMachineMO>();
|
||||
|
||||
List<ObjectContent> ocs = getVmProperties(new String[] {"name", String.format("value[%d]", key)});
|
||||
if (CollectionUtils.isNotEmpty(ocs)) {
|
||||
List<ObjectContent> ocs = getVmPropertiesOnDatacenterVmFolder(new String[] {"name", String.format("value[%d]", key)});
|
||||
if (ocs != null && ocs.size() > 0) {
|
||||
for (ObjectContent oc : ocs) {
|
||||
List<DynamicProperty> props = oc.getPropSet();
|
||||
if (props != null) {
|
||||
@ -121,8 +133,8 @@ public class DatacenterMO extends BaseMO {
|
||||
logger.warn("Custom field " + CustomFieldConstants.CLOUD_VM_INTERNAL_NAME + " is not registered ?!");
|
||||
}
|
||||
|
||||
List<ObjectContent> ocs = getVmProperties(new String[] {"name", String.format("value[%d]", key)});
|
||||
if (CollectionUtils.isNotEmpty(ocs)) {
|
||||
List<ObjectContent> ocs = getVmPropertiesOnDatacenterVmFolder(new String[] {"name", String.format("value[%d]", key)});
|
||||
if (ocs != null && ocs.size() > 0) {
|
||||
for (ObjectContent oc : ocs) {
|
||||
List<DynamicProperty> props = oc.getPropSet();
|
||||
if (props != null) {
|
||||
@ -147,18 +159,31 @@ public class DatacenterMO extends BaseMO {
|
||||
return null;
|
||||
}
|
||||
|
||||
public Pair<String, List<UnmanagedInstanceTO>> getVms(Integer maxObjects, String token) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
public List<UnmanagedInstanceTO> getAllVmsOnDatacenter() throws Exception {
|
||||
List<UnmanagedInstanceTO> vms = new ArrayList<>();
|
||||
Pair<String, List<ObjectContent>> objectContents = getVmProperties(new String[] {"name"}, maxObjects, token);
|
||||
logger.debug("returning token {} for future retrievals, currently {} objects retrieved.", objectContents.first(), objectContents.second().size());
|
||||
Pair<String, List<UnmanagedInstanceTO>> retval = new Pair<>(objectContents.first(), vms);
|
||||
List<ObjectContent> ocs = getVmPropertiesOnDatacenterVmFolder(new String[] {"name"});
|
||||
if (ocs != null) {
|
||||
for (ObjectContent oc : ocs) {
|
||||
ManagedObjectReference vmMor = oc.getObj();
|
||||
if (vmMor != null) {
|
||||
VirtualMachineMO vmMo = new VirtualMachineMO(_context, vmMor);
|
||||
try {
|
||||
if (!vmMo.isTemplate()) {
|
||||
HostMO hostMO = vmMo.getRunningHost();
|
||||
UnmanagedInstanceTO unmanagedInstance = VmwareHelper.getUnmanagedInstance(hostMO, vmMo);
|
||||
vms.add(unmanagedInstance);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.debug(String.format("Unexpected error checking unmanaged instance %s, excluding it: %s", vmMo.getVmName(), e.getMessage()), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
objectContentToUnmanagedInstanceTO(objectContents, vms);
|
||||
|
||||
return retval;
|
||||
return vms;
|
||||
}
|
||||
|
||||
public List<HostMO> getAllHostsOnDatacenter() throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
public List<HostMO> getAllHostsOnDatacenter() throws Exception {
|
||||
List<HostMO> hosts = new ArrayList<>();
|
||||
|
||||
List<ObjectContent> ocs = getHostPropertiesOnDatacenterHostFolder(new String[] {"name"});
|
||||
@ -185,7 +210,21 @@ public class DatacenterMO extends BaseMO {
|
||||
return null;
|
||||
}
|
||||
|
||||
public ManagedObjectReference findHost(String name) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
public ManagedObjectReference listDatastore(String name) throws Exception {
|
||||
assert (name != null);
|
||||
|
||||
List<ObjectContent> ocs = getDatastorePropertiesOnDatacenter(new String[] {"name"});
|
||||
if (ocs != null) {
|
||||
for (ObjectContent oc : ocs) {
|
||||
if (oc.getPropSet().get(0).getVal().toString().equals(name)) {
|
||||
return oc.getObj();
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ManagedObjectReference findHost(String name) throws Exception {
|
||||
List<ObjectContent> ocs = getHostPropertiesOnDatacenterHostFolder(new String[] {"name"});
|
||||
|
||||
if (ocs != null) {
|
||||
@ -199,10 +238,10 @@ public class DatacenterMO extends BaseMO {
|
||||
}
|
||||
|
||||
public ManagedObjectReference getVmFolder() throws Exception {
|
||||
return _context.getVimClient().getDynamicProperty(_mor, "vmFolder");
|
||||
return (ManagedObjectReference)_context.getVimClient().getDynamicProperty(_mor, "vmFolder");
|
||||
}
|
||||
|
||||
public List<ObjectContent> getHostPropertiesOnDatacenterHostFolder(String[] propertyPaths) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
public List<ObjectContent> getHostPropertiesOnDatacenterHostFolder(String[] propertyPaths) throws Exception {
|
||||
PropertySpec pSpec = new PropertySpec();
|
||||
pSpec.setType("HostSystem");
|
||||
pSpec.getPathSet().addAll(Arrays.asList(propertyPaths));
|
||||
@ -236,7 +275,7 @@ public class DatacenterMO extends BaseMO {
|
||||
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
|
||||
pfSpec.getPropSet().add(pSpec);
|
||||
pfSpec.getObjectSet().add(oSpec);
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<>();
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<PropertyFilterSpec>();
|
||||
pfSpecArr.add(pfSpec);
|
||||
|
||||
return _context.getService().retrieveProperties(_context.getPropertyCollector(), pfSpecArr);
|
||||
@ -262,37 +301,14 @@ public class DatacenterMO extends BaseMO {
|
||||
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
|
||||
pfSpec.getPropSet().add(pSpec);
|
||||
pfSpec.getObjectSet().add(oSpec);
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<>();
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<PropertyFilterSpec>();
|
||||
pfSpecArr.add(pfSpec);
|
||||
|
||||
return _context.getService().retrieveProperties(_context.getPropertyCollector(), pfSpecArr);
|
||||
|
||||
}
|
||||
|
||||
public List<ObjectContent> getVmProperties(String[] propertyPaths) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
return getVmProperties(propertyPaths, null, null).second();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param propertyPaths Vmware side property names to query, for instance {"name"}
|
||||
* @param maxObjects the number of objects to retrieve
|
||||
* @param tokenForPriorQuery restart the query or continue a previous query
|
||||
* @return The propertyPaths requested for the objects of type "VirtualMachine" in a list are found/returned by the DC
|
||||
* @throws InvalidPropertyFaultMsg property does not exist as thrown by Vmware.
|
||||
* @throws RuntimeFaultFaultMsg generic vmware runtime exception
|
||||
*/
|
||||
public Pair<String, List<ObjectContent>> getVmProperties(String[] propertyPaths, Integer maxObjects, String tokenForPriorQuery) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
if(StringUtils.isNotBlank(tokenForPriorQuery)) {
|
||||
logger.debug("running repeat query with token '{}'", tokenForPriorQuery);
|
||||
return retrieveNextSetOfProperties(tokenForPriorQuery);
|
||||
} else {
|
||||
logger.debug("running query for {} propertypaths and max {} objects", propertyPaths.length, maxObjects);
|
||||
return retrieveNextSetOfProperties(propertyPaths, maxObjects);
|
||||
}
|
||||
}
|
||||
|
||||
private Pair<String, List<ObjectContent>> retrieveNextSetOfProperties(String[] propertyPaths, Integer maxObjects) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
public List<ObjectContent> getVmPropertiesOnDatacenterVmFolder(String[] propertyPaths) throws Exception {
|
||||
PropertySpec pSpec = new PropertySpec();
|
||||
pSpec.setType("VirtualMachine");
|
||||
pSpec.getPathSet().addAll(Arrays.asList(propertyPaths));
|
||||
@ -320,16 +336,10 @@ public class DatacenterMO extends BaseMO {
|
||||
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
|
||||
pfSpec.getPropSet().add(pSpec);
|
||||
pfSpec.getObjectSet().add(oSpec);
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<>();
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<PropertyFilterSpec>();
|
||||
pfSpecArr.add(pfSpec);
|
||||
|
||||
RetrieveOptions ro = new RetrieveOptions();
|
||||
if (maxObjects != null && maxObjects > 0) {
|
||||
ro.setMaxObjects(maxObjects);
|
||||
}
|
||||
|
||||
RetrieveResult result = _context.getService().retrievePropertiesEx(_context.getPropertyCollector(), pfSpecArr, ro);
|
||||
return createReturnObjectPair(result);
|
||||
return _context.getService().retrieveProperties(_context.getPropertyCollector(), pfSpecArr);
|
||||
}
|
||||
|
||||
public static Pair<DatacenterMO, String> getOwnerDatacenter(VmwareContext context, ManagedObjectReference morEntity) throws Exception {
|
||||
@ -354,18 +364,18 @@ public class DatacenterMO extends BaseMO {
|
||||
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
|
||||
pfSpec.getPropSet().add(pSpec);
|
||||
pfSpec.getObjectSet().add(oSpec);
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<>();
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<PropertyFilterSpec>();
|
||||
pfSpecArr.add(pfSpec);
|
||||
|
||||
List<ObjectContent> ocs = context.getService().retrieveProperties(context.getPropertyCollector(), pfSpecArr);
|
||||
|
||||
assert (CollectionUtils.isNotEmpty(ocs));
|
||||
assert (ocs != null && ocs.size() > 0);
|
||||
assert (ocs.get(0).getObj() != null);
|
||||
assert (ocs.get(0).getPropSet().get(0) != null);
|
||||
assert (ocs.get(0).getPropSet().get(0).getVal() != null);
|
||||
|
||||
String dcName = ocs.get(0).getPropSet().get(0).getVal().toString();
|
||||
return new Pair<>(new DatacenterMO(context, ocs.get(0).getObj()), dcName);
|
||||
return new Pair<DatacenterMO, String>(new DatacenterMO(context, ocs.get(0).getObj()), dcName);
|
||||
}
|
||||
|
||||
public ManagedObjectReference getDvPortGroupMor(String dvPortGroupName) throws Exception {
|
||||
@ -386,7 +396,7 @@ public class DatacenterMO extends BaseMO {
|
||||
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
|
||||
pfSpec.getPropSet().add(pSpec);
|
||||
pfSpec.getObjectSet().add(oSpec);
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<>();
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<PropertyFilterSpec>();
|
||||
pfSpecArr.add(pfSpec);
|
||||
|
||||
List<ObjectContent> ocs = _context.getService().retrieveProperties(_context.getPropertyCollector(), pfSpecArr);
|
||||
@ -407,7 +417,9 @@ public class DatacenterMO extends BaseMO {
|
||||
|
||||
public boolean hasDvPortGroup(String dvPortGroupName) throws Exception {
|
||||
ManagedObjectReference morNetwork = getDvPortGroupMor(dvPortGroupName);
|
||||
return morNetwork != null;
|
||||
if (morNetwork != null)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public DVPortgroupConfigInfo getDvPortGroupSpec(String dvPortGroupName) throws Exception {
|
||||
@ -431,7 +443,7 @@ public class DatacenterMO extends BaseMO {
|
||||
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
|
||||
pfSpec.getPropSet().add(pSpec);
|
||||
pfSpec.getObjectSet().add(oSpec);
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<>();
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<PropertyFilterSpec>();
|
||||
pfSpecArr.add(pfSpec);
|
||||
|
||||
List<ObjectContent> ocs = _context.getService().retrieveProperties(_context.getPropertyCollector(), pfSpecArr);
|
||||
@ -448,7 +460,7 @@ public class DatacenterMO extends BaseMO {
|
||||
nameProperty = prop.getVal().toString();
|
||||
}
|
||||
}
|
||||
if (nameProperty != null && nameProperty.equalsIgnoreCase(dvPortGroupName)) {
|
||||
if (nameProperty.equalsIgnoreCase(dvPortGroupName)) {
|
||||
return configSpec;
|
||||
}
|
||||
}
|
||||
@ -478,7 +490,7 @@ public class DatacenterMO extends BaseMO {
|
||||
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
|
||||
pfSpec.getPropSet().add(pSpec);
|
||||
pfSpec.getObjectSet().add(oSpec);
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<>();
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<PropertyFilterSpec>();
|
||||
pfSpecArr.add(pfSpec);
|
||||
|
||||
List<ObjectContent> ocs = _context.getService().retrieveProperties(_context.getPropertyCollector(), pfSpecArr);
|
||||
@ -506,7 +518,7 @@ public class DatacenterMO extends BaseMO {
|
||||
|
||||
public String getDvSwitchUuid(ManagedObjectReference dvSwitchMor) throws Exception {
|
||||
assert (dvSwitchMor != null);
|
||||
return _context.getVimClient().getDynamicProperty(dvSwitchMor, "uuid");
|
||||
return (String)_context.getVimClient().getDynamicProperty(dvSwitchMor, "uuid");
|
||||
}
|
||||
|
||||
public VirtualEthernetCardDistributedVirtualPortBackingInfo getDvPortBackingInfo(Pair<ManagedObjectReference, String> networkInfo) throws Exception {
|
||||
@ -524,8 +536,8 @@ public class DatacenterMO extends BaseMO {
|
||||
}
|
||||
|
||||
public ManagedObjectReference getDvSwitchMor(String dvSwitchName) throws Exception {
|
||||
ManagedObjectReference dvSwitchMor;
|
||||
ManagedObjectReference networkFolderMor;
|
||||
ManagedObjectReference dvSwitchMor = null;
|
||||
ManagedObjectReference networkFolderMor = null;
|
||||
networkFolderMor = _context.getVimClient().getMoRefProp(_mor, "networkFolder");
|
||||
dvSwitchMor = _context.getVimClient().getDecendentMoRef(networkFolderMor, "VmwareDistributedVirtualSwitch", dvSwitchName);
|
||||
return dvSwitchMor;
|
||||
@ -537,6 +549,7 @@ public class DatacenterMO extends BaseMO {
|
||||
}
|
||||
|
||||
public DatacenterConfigInfo getDatacenterConfigInfo() throws Exception {
|
||||
return _context.getVimClient().getDynamicProperty(_mor, "configuration");
|
||||
DatacenterConfigInfo configInfo = (DatacenterConfigInfo)_context.getVimClient().getDynamicProperty(_mor, "configuration");
|
||||
return configInfo;
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,7 +16,6 @@
|
||||
// under the License.
|
||||
package com.cloud.hypervisor.vmware.mo;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
@ -25,19 +24,10 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.apache.cloudstack.vm.UnmanagedInstanceTO;
|
||||
|
||||
import com.cloud.hypervisor.vmware.util.VmwareClientException;
|
||||
import com.cloud.hypervisor.vmware.util.VmwareContext;
|
||||
import com.cloud.hypervisor.vmware.util.VmwareHelper;
|
||||
import com.cloud.utils.LogUtils;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.StringUtils;
|
||||
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import com.vmware.vim25.AboutInfo;
|
||||
import com.vmware.vim25.AlreadyExistsFaultMsg;
|
||||
import com.vmware.vim25.ClusterDasConfigInfo;
|
||||
@ -67,7 +57,6 @@ import com.vmware.vim25.HostRuntimeInfo;
|
||||
import com.vmware.vim25.HostSystemConnectionState;
|
||||
import com.vmware.vim25.HostVirtualNic;
|
||||
import com.vmware.vim25.HostVirtualSwitch;
|
||||
import com.vmware.vim25.InvalidPropertyFaultMsg;
|
||||
import com.vmware.vim25.ManagedObjectReference;
|
||||
import com.vmware.vim25.NasDatastoreInfo;
|
||||
import com.vmware.vim25.ObjectContent;
|
||||
@ -75,12 +64,13 @@ import com.vmware.vim25.ObjectSpec;
|
||||
import com.vmware.vim25.OptionValue;
|
||||
import com.vmware.vim25.PropertyFilterSpec;
|
||||
import com.vmware.vim25.PropertySpec;
|
||||
import com.vmware.vim25.RetrieveOptions;
|
||||
import com.vmware.vim25.RetrieveResult;
|
||||
import com.vmware.vim25.RuntimeFaultFaultMsg;
|
||||
import com.vmware.vim25.TraversalSpec;
|
||||
import com.vmware.vim25.VirtualMachineConfigSpec;
|
||||
import com.vmware.vim25.VirtualNicManagerNetConfig;
|
||||
import com.cloud.hypervisor.vmware.util.VmwareContext;
|
||||
import com.cloud.hypervisor.vmware.util.VmwareHelper;
|
||||
import com.cloud.utils.LogUtils;
|
||||
import com.cloud.utils.Pair;
|
||||
|
||||
public class HostMO extends BaseMO implements VmwareHypervisorHost {
|
||||
Map<String, VirtualMachineMO> _vmCache = new HashMap<>();
|
||||
@ -542,22 +532,18 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getHostName() throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
return _context.getVimClient().getDynamicProperty(_mor, "name");
|
||||
public String getHostName() throws Exception {
|
||||
return (String)_context.getVimClient().getDynamicProperty(_mor, "name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized List<VirtualMachineMO> listVmsOnHyperHostWithHypervisorName(String vmName) throws VmwareClientException {
|
||||
public synchronized List<VirtualMachineMO> listVmsOnHyperHostWithHypervisorName(String vmName) throws Exception {
|
||||
List<VirtualMachineMO> vms = new ArrayList<>();
|
||||
try {
|
||||
if (StringUtils.isNotEmpty(vmName)) {
|
||||
vms.add(findVmOnHyperHostWithHypervisorName(vmName));
|
||||
} else {
|
||||
loadVmCache();
|
||||
vms.addAll(_vmCache.values());
|
||||
}
|
||||
} catch (InvalidPropertyFaultMsg | RuntimeFaultFaultMsg | InvocationTargetException | NoSuchMethodException | IllegalAccessException e) {
|
||||
throw new VmwareClientException("problem loading vm cache.", e);
|
||||
if (StringUtils.isNotEmpty(vmName)) {
|
||||
vms.add(findVmOnHyperHostWithHypervisorName(vmName));
|
||||
} else {
|
||||
loadVmCache();
|
||||
vms.addAll(_vmCache.values());
|
||||
}
|
||||
return vms;
|
||||
}
|
||||
@ -593,8 +579,9 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
|
||||
}
|
||||
}
|
||||
|
||||
private void loadVmCache() throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
logger.debug("load VM cache on host");
|
||||
private void loadVmCache() throws Exception {
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("load VM cache on host");
|
||||
|
||||
_vmCache.clear();
|
||||
|
||||
@ -714,16 +701,11 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectContent[] getVmPropertiesOnHyperHost(String[] propertyPaths) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
List<ObjectContent> properties = getVmProperties(propertyPaths, null).second();
|
||||
return properties.toArray(new ObjectContent[properties.size()]);
|
||||
}
|
||||
|
||||
public Pair<String, List<ObjectContent>> getVmProperties(String[] propertyPaths, Integer maxObjects) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
if (logger.isTraceEnabled()) {
|
||||
public ObjectContent[] getVmPropertiesOnHyperHost(String[] propertyPaths) throws Exception {
|
||||
if (logger.isTraceEnabled())
|
||||
logger.trace("vCenter API trace - retrieveProperties() for VM properties. target MOR: " + _mor.getValue() + ", properties: " +
|
||||
new Gson().toJson(propertyPaths));
|
||||
}
|
||||
|
||||
PropertySpec pSpec = new PropertySpec();
|
||||
pSpec.setType("VirtualMachine");
|
||||
pSpec.getPathSet().addAll(Arrays.asList(propertyPaths));
|
||||
@ -741,18 +723,14 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
|
||||
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
|
||||
pfSpec.getPropSet().add(pSpec);
|
||||
pfSpec.getObjectSet().add(oSpec);
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<>();
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<PropertyFilterSpec>();
|
||||
pfSpecArr.add(pfSpec);
|
||||
|
||||
RetrieveOptions ro = new RetrieveOptions();
|
||||
if (maxObjects != null && maxObjects > 0) {
|
||||
ro.setMaxObjects(maxObjects);
|
||||
}
|
||||
List<ObjectContent> properties = _context.getService().retrieveProperties(_context.getPropertyCollector(), pfSpecArr);
|
||||
|
||||
RetrieveResult result = _context.getService().retrievePropertiesEx(_context.getPropertyCollector(), pfSpecArr, ro);
|
||||
|
||||
logger.trace("vCenter API trace - retrieveProperties() done");
|
||||
return createReturnObjectPair(result);
|
||||
if (logger.isTraceEnabled())
|
||||
logger.trace("vCenter API trace - retrieveProperties() done");
|
||||
return properties.toArray(new ObjectContent[properties.size()]);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -778,7 +756,7 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
|
||||
PropertyFilterSpec pfSpec = new PropertyFilterSpec();
|
||||
pfSpec.getPropSet().add(pSpec);
|
||||
pfSpec.getObjectSet().add(oSpec);
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<>();
|
||||
List<PropertyFilterSpec> pfSpecArr = new ArrayList<PropertyFilterSpec>();
|
||||
pfSpecArr.add(pfSpec);
|
||||
|
||||
List<ObjectContent> properties = _context.getService().retrieveProperties(_context.getPropertyCollector(), pfSpecArr);
|
||||
@ -1337,8 +1315,9 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
|
||||
return false;
|
||||
}
|
||||
|
||||
private synchronized VirtualMachineMO findVmOnHyperHostWithHypervisorName(String vmName) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
logger.debug("find VM hypervisor name: {} on host", vmName );
|
||||
private synchronized VirtualMachineMO findVmOnHyperHostWithHypervisorName(String vmName) throws Exception {
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("find VM hypervisor name: " + vmName + " on host");
|
||||
|
||||
VirtualMachineMO vmMo = getVmWithHypervisorName(_vmCache.values(), vmName);
|
||||
if (vmMo != null) {
|
||||
@ -1367,25 +1346,4 @@ public class HostMO extends BaseMO implements VmwareHypervisorHost {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Pair<String, List<UnmanagedInstanceTO>> getVms(Integer maxObjects, String token) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvocationTargetException, NoSuchMethodException, IllegalAccessException {
|
||||
List<UnmanagedInstanceTO> vms = new ArrayList<>();
|
||||
Pair<String, List<ObjectContent>> objectContents = getVmProperties(new String[] {"name"}, maxObjects, token);
|
||||
logger.debug("returning token {} for future retrievals, currently {} objects retrieved.", objectContents.first(), objectContents.second().size());
|
||||
Pair<String, List<UnmanagedInstanceTO>> retval = new Pair<>(objectContents.first(), vms);
|
||||
|
||||
objectContentToUnmanagedInstanceTO(objectContents, vms);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
public Pair<String, List<ObjectContent>> getVmProperties(String[] propertyPaths, Integer maxObjects, String tokenForPriorQuery) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
if(com.cloud.utils.StringUtils.isNotBlank(tokenForPriorQuery)) {
|
||||
logger.debug("running repeat query with token '{}'", tokenForPriorQuery);
|
||||
return retrieveNextSetOfProperties(tokenForPriorQuery);
|
||||
} else {
|
||||
logger.debug("running query for {} propertypaths and max {} objects", propertyPaths.length, maxObjects);
|
||||
return getVmProperties(propertyPaths, maxObjects);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -16,10 +16,8 @@
|
||||
// under the License.
|
||||
package com.cloud.hypervisor.vmware.util;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
@ -38,6 +36,7 @@ import javax.xml.ws.handler.Handler;
|
||||
import javax.xml.ws.handler.HandlerResolver;
|
||||
import javax.xml.ws.handler.PortInfo;
|
||||
|
||||
|
||||
import org.apache.cloudstack.utils.security.SSLUtils;
|
||||
import org.apache.cloudstack.utils.security.SecureSSLSocketFactory;
|
||||
|
||||
@ -54,10 +53,7 @@ import org.apache.logging.log4j.LogManager;
|
||||
|
||||
import com.vmware.vim25.DynamicProperty;
|
||||
import com.vmware.vim25.InvalidCollectorVersionFaultMsg;
|
||||
import com.vmware.vim25.InvalidLocaleFaultMsg;
|
||||
import com.vmware.vim25.InvalidLoginFaultMsg;
|
||||
import com.vmware.vim25.InvalidPropertyFaultMsg;
|
||||
import com.vmware.vim25.InvalidStateFaultMsg;
|
||||
import com.vmware.vim25.LocalizedMethodFault;
|
||||
import com.vmware.vim25.ManagedObjectReference;
|
||||
import com.vmware.vim25.MethodFault;
|
||||
@ -164,7 +160,7 @@ public class VmwareClient {
|
||||
* @throws Exception
|
||||
* the exception
|
||||
*/
|
||||
public void connect(String url, String userName, String password) throws RuntimeFaultFaultMsg, URISyntaxException, VmwareClientException, InvalidLocaleFaultMsg, InvalidLoginFaultMsg {
|
||||
public void connect(String url, String userName, String password) throws Exception {
|
||||
svcInstRef.setType(SVC_INST_NAME);
|
||||
svcInstRef.setValue(SVC_INST_NAME);
|
||||
|
||||
@ -194,7 +190,7 @@ public class VmwareClient {
|
||||
if (cookies == null) {
|
||||
String msg = "Login successful, but failed to get server cookies from url :[" + url + "]";
|
||||
LOGGER.error(msg);
|
||||
throw new VmwareClientException(msg);
|
||||
throw new Exception(msg);
|
||||
}
|
||||
}
|
||||
|
||||
@ -210,7 +206,7 @@ public class VmwareClient {
|
||||
isConnected = true;
|
||||
}
|
||||
|
||||
private void pbmConnect(String url, String cookieValue) throws URISyntaxException {
|
||||
private void pbmConnect(String url, String cookieValue) throws Exception {
|
||||
URI uri = new URI(url);
|
||||
String pbmurl = "https://" + uri.getHost() + "/pbm";
|
||||
String[] tokens = cookieValue.split("=");
|
||||
@ -354,8 +350,8 @@ public class VmwareClient {
|
||||
* @return property value.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> T getDynamicProperty(ManagedObjectReference mor, String propertyName) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
|
||||
List<String> props = new ArrayList<>();
|
||||
public <T> T getDynamicProperty(ManagedObjectReference mor, String propertyName) throws Exception {
|
||||
List<String> props = new ArrayList<String>();
|
||||
props.add(propertyName);
|
||||
List<ObjectContent> objContent = retrieveMoRefProperties(mor, props);
|
||||
|
||||
@ -385,7 +381,7 @@ public class VmwareClient {
|
||||
return (T)propertyValue;
|
||||
}
|
||||
|
||||
private List<ObjectContent> retrieveMoRefProperties(ManagedObjectReference mObj, List<String> props) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
private List<ObjectContent> retrieveMoRefProperties(ManagedObjectReference mObj, List<String> props) throws Exception {
|
||||
PropertySpec pSpec = new PropertySpec();
|
||||
pSpec.setAll(false);
|
||||
pSpec.setType(mObj.getType());
|
||||
@ -415,7 +411,7 @@ public class VmwareClient {
|
||||
* @throws RuntimeFaultFaultMsg
|
||||
* @throws InvalidPropertyFaultMsg
|
||||
*/
|
||||
public boolean waitForTask(ManagedObjectReference task) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvalidCollectorVersionFaultMsg, InvocationTargetException, NoSuchMethodException, IllegalAccessException, InvalidStateFaultMsg {
|
||||
public boolean waitForTask(ManagedObjectReference task) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg, InvalidCollectorVersionFaultMsg, Exception {
|
||||
|
||||
boolean retVal = false;
|
||||
|
||||
@ -710,7 +706,7 @@ public class VmwareClient {
|
||||
*
|
||||
* @return First ManagedObjectReference of the type / name pair found
|
||||
*/
|
||||
public ManagedObjectReference getDecendentMoRef(ManagedObjectReference root, String type, String name) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg {
|
||||
public ManagedObjectReference getDecendentMoRef(ManagedObjectReference root, String type, String name) throws Exception {
|
||||
if (name == null || name.isEmpty()) {
|
||||
return 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.
|
||||
package com.cloud.hypervisor.vmware.util;
|
||||
|
||||
import com.cloud.exception.CloudException;
|
||||
|
||||
public class VmwareClientException extends CloudException {
|
||||
public VmwareClientException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public VmwareClientException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
// TODO embed vmware classes in this one for use downstream
|
||||
public VmwareClientException(String msg, Exception embedded) {
|
||||
super(msg, embedded);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user