From b2f24d81e7d0008583527e0776ba98fc1d7b0664 Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Mon, 14 Apr 2025 15:26:22 +0200 Subject: [PATCH 1/2] Revert "Add the option to filter by host when retrieving of unregistered VMs (#9925)" This reverts commit aa6c581e405d7652916a9290e042f0bd26c3913a. --- .../apache/cloudstack/api/ApiConstants.java | 9 +- .../cloudstack/api/response/HostResponse.java | 8 +- .../acl/DynamicRoleBasedAPIAccessChecker.java | 4 +- .../vmware/VmwareDatacenterService.java | 7 +- .../vmware/manager/VmwareManagerImpl.java | 294 ++++---- .../command/admin/zone/AddVmwareDcCmd.java | 12 +- .../zone/ImportVsphereStoragePoliciesCmd.java | 15 +- .../admin/zone/ListVmwareDcHostsCmd.java | 144 ---- .../command/admin/zone/ListVmwareDcItems.java | 29 - .../admin/zone/ListVmwareDcVmsCmd.java | 52 +- .../command/admin/zone/ListVmwareDcsCmd.java | 26 +- .../zone/ListVsphereStoragePoliciesCmd.java | 17 +- ...sphereStoragePolicyCompatiblePoolsCmd.java | 2 +- .../command/admin/zone/RemoveVmwareDcCmd.java | 8 +- .../command/admin/zone/UpdateVmwareDcCmd.java | 11 +- .../admin/zone/VmwareRequestResponse.java | 38 -- test/integration/smoke/test_dynamicroles.py | 1 - ui/src/views/tools/ManageInstances.vue | 1 - ui/src/views/tools/SelectVmwareVcenter.vue | 62 +- .../cloud/hypervisor/vmware/mo/BaseMO.java | 56 +- .../vmware/mo/CustomFieldsManagerMO.java | 7 +- .../hypervisor/vmware/mo/DatacenterMO.java | 161 ++--- .../cloud/hypervisor/vmware/mo/HostMO.java | 91 +-- .../vmware/mo/VirtualMachineMO.java | 625 ++++++++++++++---- .../hypervisor/vmware/util/VmwareClient.java | 30 +- .../vmware/util/VmwareClientException.java | 33 - 26 files changed, 821 insertions(+), 922 deletions(-) delete mode 100644 plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcHostsCmd.java delete mode 100644 plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcItems.java delete mode 100644 plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/VmwareRequestResponse.java delete mode 100644 vmware-base/src/main/java/com/cloud/hypervisor/vmware/util/VmwareClientException.java diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java index efceafd1a3a2..b2042c116a7f 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java @@ -46,7 +46,6 @@ public class ApiConstants { public static final String BACKUP_OFFERING_NAME = "backupofferingname"; public static final String BACKUP_OFFERING_ID = "backupofferingid"; public static final String BASE64_IMAGE = "base64image"; - public static final String BATCH_SIZE = "batchsize"; public static final String BITS = "bits"; public static final String BOOTABLE = "bootable"; public static final String BIND_DN = "binddn"; @@ -438,12 +437,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"; @@ -1108,7 +1106,6 @@ public class ApiConstants { public static final String PARAMETER_DESCRIPTION_IS_TAG_A_RULE = "Whether the informed tag is a JS interpretable rule or not."; public static final String NFS_MOUNT_OPTIONS = "nfsmountopts"; - public static final String VMWARE_DC = "vmwaredc"; /** * This enum specifies IO Drivers, each option controls specific policies on I/O. diff --git a/api/src/main/java/org/apache/cloudstack/api/response/HostResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/HostResponse.java index cb759d9ab6d0..99aabd889134 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/HostResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/HostResponse.java @@ -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") @@ -395,7 +395,7 @@ public void setMemWithOverprovisioning(String memWithOverprovisioning){ this.memWithOverprovisioning=memWithOverprovisioning; } - public void setMemoryAllocated(Long memoryAllocated) { + public void setMemoryAllocated(long memoryAllocated) { this.memoryAllocated = memoryAllocated; } @@ -659,8 +659,8 @@ public Long getMemoryTotal() { return memoryTotal; } - public Long getMemoryAllocated() { - return memoryAllocated == null ? 0 : memoryAllocated; + public long getMemoryAllocated() { + return memoryAllocated; } public void setMemoryAllocatedPercentage(String memoryAllocatedPercentage) { diff --git a/plugins/acl/dynamic-role-based/src/main/java/org/apache/cloudstack/acl/DynamicRoleBasedAPIAccessChecker.java b/plugins/acl/dynamic-role-based/src/main/java/org/apache/cloudstack/acl/DynamicRoleBasedAPIAccessChecker.java index 005eb2a8fd4f..1dfe20a10be2 100644 --- a/plugins/acl/dynamic-role-based/src/main/java/org/apache/cloudstack/acl/DynamicRoleBasedAPIAccessChecker.java +++ b/plugins/acl/dynamic-role-based/src/main/java/org/apache/cloudstack/acl/DynamicRoleBasedAPIAccessChecker.java @@ -47,14 +47,14 @@ public class DynamicRoleBasedAPIAccessChecker extends AdapterBase implements API private RoleService roleService; private List services; - private Map> annotationRoleBasedApisMap = new HashMap<>(); + private Map> annotationRoleBasedApisMap = new HashMap>(); private static final Logger LOGGER = Logger.getLogger(DynamicRoleBasedAPIAccessChecker.class.getName()); protected DynamicRoleBasedAPIAccessChecker() { super(); for (RoleType roleType : RoleType.values()) { - annotationRoleBasedApisMap.put(roleType, new HashSet<>()); + annotationRoleBasedApisMap.put(roleType, new HashSet()); } } diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenterService.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenterService.java index 6bb473536b86..bbac78b879a4 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenterService.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/VmwareDatacenterService.java @@ -22,15 +22,12 @@ 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 listVsphereStoragePolicyCompatibleStoragePools(ListVsphereStoragePolicyCompatiblePoolsCmd cmd); - List listHostsInDatacenter(ListVmwareDcHostsCmd cmd); - - Pair> listVMsInDatacenter(ListVmwareDcVmsCmd cmd); + List listVMsInDatacenter(ListVmwareDcVmsCmd cmd); } diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java index 2d733e8a16cb..61a949f42d3e 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -19,12 +19,10 @@ 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.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; @@ -90,7 +87,6 @@ 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; @@ -116,8 +112,7 @@ 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; @@ -170,18 +165,13 @@ import com.cloud.utils.db.TransactionStatus; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.script.Script; +import com.cloud.utils.ssh.SshHelper; +import com.cloud.vm.DomainRouterVO; import com.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 { private static final Logger s_logger = Logger.getLogger(VmwareManagerImpl.class); @@ -257,11 +247,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 +265,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 +349,9 @@ public boolean configure(String name, Map params) throws Configu _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 +450,7 @@ private void prepareHost(HostMO hostMo, String privateTrafficLabel) throws Excep s_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 +459,7 @@ private void prepareHost(HostMO hostMo, String privateTrafficLabel) throws Excep 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 +482,7 @@ private HostMO getOldestExistentHostInCluster(Long clusterId, VmwareContext serv } 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 +498,19 @@ public List addHostToPodCluster(VmwareContext serviceCon 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 returnedHostList = new ArrayList<>(); + List returnedHostList = new ArrayList(); if (mor.getType().equals("ComputeResource")) { List 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 +521,8 @@ public List addHostToPodCluster(VmwareContext serviceCon List 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) { @@ -560,7 +551,7 @@ public List addHostToPodCluster(VmwareContext serviceCon returnedHostList.add(mor); return returnedHostList; } else { - s_logger.error("Unsupported host type " + mor.getType() + ":" + mor.getValue() + " from inventory path: " + hostInventoryPath); + s_logger.error("Unsupport host type " + mor.getType() + ":" + mor.getValue() + " from inventory path: " + hostInventoryPath); return null; } } @@ -625,13 +616,13 @@ public String getServiceConsolePortGroupName() { @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 +632,7 @@ public void setupResourceStartupParams(Map params) { 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,25 +659,25 @@ public boolean needRecycle(String workerTag) { return false; } - String[] tokens = workerTag.split("-"); + String tokens[] = workerTag.split("-"); if (tokens.length != 3) { s_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 (s_logger.isInfoEnabled()) s_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 (s_logger.isInfoEnabled()) - s_logger.info("Worker VM's owner management server has changed runId, recycle it"); + s_logger.info("Worker VM's owner management server has changed runid, recycle it"); return true; } @@ -721,7 +712,7 @@ public void prepareSecondaryStorageStore(String storageUrl, Long storeId) { File patchFolder = new File(mountPoint + "/systemvm"); if (!patchFolder.exists()) { if (!patchFolder.mkdirs()) { - String msg = "Unable to create systemvm folder on secondary storage. location: " + patchFolder; + String msg = "Unable to create systemvm folder on secondary storage. location: " + patchFolder.toString(); s_logger.error(msg); throw new CloudRuntimeException(msg); } @@ -740,7 +731,7 @@ public void prepareSecondaryStorageStore(String storageUrl, Long storeId) { } catch (IOException e) { s_logger.error("Unexpected exception ", e); - String msg = "Unable to copy systemvm ISO on secondary storage. src location: " + srcIso + ", dest location: " + destIso; + String msg = "Unable to copy systemvm ISO on secondary storage. src location: " + srcIso.toString() + ", dest location: " + destIso; s_logger.error(msg); throw new CloudRuntimeException(msg); } @@ -782,8 +773,9 @@ private File getSystemVMPatchIsoFile() { isoFile = new File("/usr/share/cloudstack-common/vms/systemvm.iso"); } + assert (isoFile != null); if (!isoFile.exists()) { - s_logger.error("Unable to locate systemvm.iso in your setup at " + isoFile); + s_logger.error("Unable to locate systemvm.iso in your setup at " + isoFile.toString()); } return isoFile; } @@ -798,16 +790,16 @@ public File getSystemVMKeyFile() { if (keyFile == null || !keyFile.exists()) { keyFile = new File("/usr/share/cloudstack-common/scripts/vm/systemvm/id_rsa.cloud"); } - + assert (keyFile != null); if (!keyFile.exists()) { - s_logger.error("Unable to locate id_rsa.cloud in your setup at " + keyFile); + s_logger.error("Unable to locate id_rsa.cloud in your setup at " + keyFile.toString()); } return keyFile; } @Override public String getMountPoint(String storageUrl, String nfsVersion) { - String mountPoint; + String mountPoint = null; synchronized (_storageMounts) { mountPoint = _storageMounts.get(storageUrl); if (mountPoint != null) { @@ -837,7 +829,7 @@ private String setupMountPoint(String parent) { 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 +854,10 @@ private void startupCleanup(String parent) { for (String mountPoint : mounts) { s_logger.info("umount NFS mount from previous session: " + mountPoint); + String result = null; Script command = new Script(true, "umount", _timeout, s_logger); command.add(mountPoint); - String result = command.execute(); + result = command.execute(); if (result != null) { s_logger.warn("Unable to umount " + mountPoint + " due to " + result); } @@ -882,7 +875,7 @@ private void shutdownCleanup() { for (String mountPoint : _storageMounts.values()) { s_logger.info("umount NFS mount: " + mountPoint); - String result; + String result = null; Script command = new Script(true, "umount", _timeout, s_logger); command.add(mountPoint); result = command.execute(); @@ -903,8 +896,8 @@ protected String mount(String path, String parent, String nfsVersion) { return null; } - Script script; - String result; + Script script = null; + String result = null; Script command = new Script(true, "mount", _timeout, s_logger); command.add("-t", "nfs"); if (nfsVersion != null){ @@ -991,15 +984,40 @@ public void processHostAdded(long hostId) { @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; } } } protected final static int DEFAULT_DOMR_SSHPORT = 3922; + protected boolean shutdownRouterVM(DomainRouterVO router) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Try to shutdown router VM " + router.getInstanceName() + " directly."); + } + + Pair result; + try { + result = SshHelper.sshExecute(router.getPrivateIpAddress(), DEFAULT_DOMR_SSHPORT, "root", getSystemVMKeyFile(), null, "poweroff -f"); + + if (!result.first()) { + s_logger.debug("Unable to shutdown " + router.getInstanceName() + " directly"); + return false; + } + } catch (Throwable e) { + s_logger.warn("Unable to shutdown router " + router.getInstanceName() + " directly."); + return false; + } + if (s_logger.isDebugEnabled()) { + s_logger.debug("Shutdown router " + router.getInstanceName() + " successful."); + } + return true; + } + @Override public boolean processDisconnect(long agentId, Status state) { return false; @@ -1040,16 +1058,16 @@ public void endExclusiveOperation() { @Override public Pair getAddiionalVncPortRange() { - return new Pair<>(_additionalPortRangeStart, _additionalPortRangeSize); + return new Pair(_additionalPortRangeStart, _additionalPortRangeSize); } @Override public Map 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(); s_logger.info("vsmId is " + vsmId); @@ -1060,7 +1078,7 @@ public Map getNexusVSMCredentialsByClusterId(Long clusterId) { return null; } - Map nexusVSMCredentials = new HashMap<>(); + Map nexusVSMCredentials = new HashMap(); if (nexusVSM != null) { nexusVSMCredentials.put("vsmip", nexusVSM.getipaddr()); nexusVSMCredentials.put("vsmusername", nexusVSM.getUserName()); @@ -1087,7 +1105,7 @@ public int getVcenterSessionTimeout() { @Override public List> getCommands() { - List> cmdList = new ArrayList<>(); + List> cmdList = new ArrayList>(); cmdList.add(AddVmwareDcCmd.class); cmdList.add(UpdateVmwareDcCmd.class); cmdList.add(RemoveVmwareDcCmd.class); @@ -1096,14 +1114,13 @@ public List> getCommands() { 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(); @@ -1159,10 +1176,10 @@ public VmwareDatacenterVO addVmwareDatacenter(AddVmwareDcCmd cmd) throws Resourc 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 { @@ -1195,7 +1212,7 @@ public VmwareDatacenterVO addVmwareDatacenter(AddVmwareDcCmd cmd) throws Resourc // 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) { @@ -1215,6 +1232,7 @@ public VmwareDatacenterVO addVmwareDatacenter(AddVmwareDcCmd cmd) throws Resourc if (context != null) { context.close(); } + context = null; } importVsphereStoragePoliciesInternal(zoneId, vmwareDc.getId()); return vmwareDc; @@ -1239,9 +1257,9 @@ VmwareDatacenterVO createOrUpdateDc(String guid, String name, String host, Strin * 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 { @@ -1249,7 +1267,7 @@ private void checkIfDcIsUsed(String vCenterHost, String vmwareDcName, Long zoneI 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)); } } @@ -1258,7 +1276,7 @@ private void checkIfDcIsUsed(String vCenterHost, String vmwareDcName, Long zoneI @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(); @@ -1286,7 +1304,7 @@ public VmwareDatacenter updateVmwareDatacenter(UpdateVmwareDcCmd cmd) { } vmwareDc.setGuid(String.format("%s@%s", vmwareDc.getVmwareDatacenterName(), vmwareDc.getVcenterHost())); - return Transaction.execute(new TransactionCallback<>() { + return Transaction.execute(new TransactionCallback() { @Override public VmwareDatacenter doInTransaction(TransactionStatus status) { if (vmwareDcDao.update(vmwareDc.getId(), vmwareDc)) { @@ -1335,7 +1353,7 @@ public boolean removeVmwareDatacenter(RemoveVmwareDcCmd cmd) throws ResourceInUs 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) { @@ -1372,9 +1390,11 @@ public void doInTransactionWithoutResult(TransactionStatus status) { throw new DiscoveryException(msg); } + assert (dcMo != null); + // Reset custom field property cloud.zone over this DC dcMo.setCustomFieldValue(CustomFieldConstants.CLOUD_ZONE, "false"); - s_logger.info("Successfully reset custom field property cloud.zone over DC " + vmwareDcName); + s_logger.info("Sucessfully 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); s_logger.error(msg); @@ -1383,6 +1403,7 @@ public void doInTransactionWithoutResult(TransactionStatus status) { if (context != null) { context.close(); } + context = null; } return true; } @@ -1403,7 +1424,7 @@ private void validateZone(Long zoneId) throws InvalidParameterValueException { private void validateZoneWithResources(Long zoneId, String errStr) throws ResourceInUseException { // Check if zone has resources? - For now look for clusters List 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)) { @@ -1424,9 +1445,9 @@ public boolean isLegacyZone(long dcId) { } @Override - public List listVmwareDatacenters(ListVmwareDcsCmd cmd) throws CloudRuntimeException { + public List listVmwareDatacenters(ListVmwareDcsCmd cmd) throws CloudRuntimeException, InvalidParameterValueException { Long zoneId = cmd.getZoneId(); - List vmwareDcList = new ArrayList<>(); + List vmwareDcList = new ArrayList(); VmwareDatacenterZoneMapVO vmwareDcZoneMap; VmwareDatacenterVO vmwareDatacenter; long vmwareDcId; @@ -1484,7 +1505,7 @@ public List importVsphereStoragePoliciesInternal String vCenterHost = vmwareDatacenter.getVcenterHost(); String userName = vmwareDatacenter.getUser(); String password = vmwareDatacenter.getPassword(); - List storageProfiles; + List storageProfiles = null; try { s_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); @@ -1512,15 +1533,16 @@ public List importVsphereStoragePoliciesInternal List allStoragePolicies = vsphereStoragePolicyDao.listAll(); List finalStorageProfiles = storageProfiles; List 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 storagePolicies = vsphereStoragePolicyDao.listAll(); + return storagePolicies; } @Override @@ -1566,87 +1588,13 @@ public List listVsphereStoragePolicyCompatibleStoragePools(ListVsph } @Override - public List 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()); - s_logger.error(errorMsg, e); - throw new CloudRuntimeException(errorMsg); - } - - } - - @Override - public Pair> 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()); - s_logger.error(errorMsg, e); - throw new CloudRuntimeException(errorMsg); - } - } - - @NotNull - private static 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); - s_logger.error(msg); - throw new InvalidParameterValueException(msg); - } - return dcMo; - } - - @NotNull - private static VmwareContext getVmwareContext(VcenterData vmwaredc) throws RuntimeFaultFaultMsg, URISyntaxException, VmwareClientException, InvalidLocaleFaultMsg, InvalidLoginFaultMsg { - s_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 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))) { @@ -1667,27 +1615,37 @@ private VcenterData getVcenterData(ListVmwareDcItems cmd) { 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; - - public VcenterData(String vcenter, String datacenterName, String username, String password) { - this.vcenter = vcenter; - this.datacenterName = datacenterName; - this.username = username; - this.password = password; + try { + s_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); + + 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); + s_logger.error(msg); + throw new InvalidParameterValueException(msg); + } + List 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()); + s_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) { @@ -1737,7 +1695,7 @@ private void startTemplateCleanJobSchedule() { } /** - * 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 diff --git a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/AddVmwareDcCmd.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/AddVmwareDcCmd.java index 5da2c7b70033..9f4985a1363b 100644 --- a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/AddVmwareDcCmd.java +++ b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/AddVmwareDcCmd.java @@ -37,8 +37,8 @@ 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 @@ -47,7 +47,7 @@ public class AddVmwareDcCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddVmwareDcCmd.class.getName()); - @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, @@ -56,10 +56,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.") @@ -101,7 +101,7 @@ public void execute() { 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) { diff --git a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ImportVsphereStoragePoliciesCmd.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ImportVsphereStoragePoliciesCmd.java index 40b479f809cc..c7ba63c02a77 100644 --- a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ImportVsphereStoragePoliciesCmd.java +++ b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ImportVsphereStoragePoliciesCmd.java @@ -37,6 +37,7 @@ import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.cloudstack.context.CallContext; +import org.apache.log4j.Logger; import javax.inject.Inject; import java.util.ArrayList; @@ -48,6 +49,9 @@ authorized = {RoleType.Admin}) public class ImportVsphereStoragePoliciesCmd extends BaseCmd { + public static final Logger LOGGER = Logger.getLogger(ImportVsphereStoragePoliciesCmd.class.getName()); + + @Inject public VmwareDatacenterService _vmwareDatacenterService; @@ -72,13 +76,6 @@ public void execute() throws ResourceUnavailableException, InsufficientCapacityE List storagePolicies = _vmwareDatacenterService.importVsphereStoragePolicies(this); final ListResponse responseList = new ListResponse<>(); - final List storagePoliciesResponseList = getVsphereStoragePoliciesResponses(storagePolicies, dataCenter); - responseList.setResponses(storagePoliciesResponseList); - responseList.setResponseName(getCommandName()); - setResponseObject(responseList); - } - - private static List getVsphereStoragePoliciesResponses(List storagePolicies, DataCenter dataCenter) { final List storagePoliciesResponseList = new ArrayList<>(); for (VsphereStoragePolicy storagePolicy : storagePolicies) { final VsphereStoragePoliciesResponse storagePoliciesResponse = new VsphereStoragePoliciesResponse(); @@ -91,7 +88,9 @@ private static List getVsphereStoragePoliciesRes storagePoliciesResponseList.add(storagePoliciesResponse); } - return storagePoliciesResponseList; + responseList.setResponses(storagePoliciesResponseList); + responseList.setResponseName(getCommandName()); + setResponseObject(responseList); } @Override diff --git a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcHostsCmd.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcHostsCmd.java deleted file mode 100644 index 6f193c9c1b27..000000000000 --- a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcHostsCmd.java +++ /dev/null @@ -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 hosts = _vmwareDatacenterService.listHostsInDatacenter(this); - List baseResponseList = new ArrayList<>(); - if (CollectionUtils.isNotEmpty(hosts)) { - for (HostMO vmwareHost : hosts) { - HostResponse resp = createHostResponse(vmwareHost); - baseResponseList.add(resp); - } - } - VmwareRequestResponse 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; - } -} diff --git a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcItems.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcItems.java deleted file mode 100644 index 580fb3bad9bd..000000000000 --- a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcItems.java +++ /dev/null @@ -1,29 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package org.apache.cloudstack.api.command.admin.zone; - -public interface ListVmwareDcItems { - String getVcenter(); - - String getDatacenterName(); - - String getUsername(); - - String getPassword(); - - Long getExistingVcenterId(); -} diff --git a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcVmsCmd.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcVmsCmd.java index 544e756fe807..4dd1b4beb091 100644 --- a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcVmsCmd.java +++ b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcVmsCmd.java @@ -23,15 +23,15 @@ 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 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 String getPassword() { 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 Long getExistingVcenterId() { public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException { checkParameters(); try { - Pair> results = _vmwareDatacenterService.listVMsInDatacenter(this); - List vms = results.second(); + List vms = _vmwareDatacenterService.listVMsInDatacenter(this); List baseResponseList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(vms)) { for (UnmanagedInstanceTO vmwareVm : vms) { @@ -127,13 +102,16 @@ public void execute() throws ResourceUnavailableException, InsufficientCapacityE baseResponseList.add(resp); } } - VmwareRequestResponse response = new VmwareRequestResponse<>(); - response.setResponses(baseResponseList, baseResponseList.size()); + List pagingList = com.cloud.utils.StringUtils.applyPagination(baseResponseList, this.getStartIndex(), this.getPageSizeVal()); + if (CollectionUtils.isEmpty(pagingList)) { + pagingList = baseResponseList; + } + ListResponse 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 long getEntityOwnerId() { @Override public String getCommandName() { - return "listVmwareDcVmsResponse".toLowerCase(); + return "listvmwaredcvmsresponse"; } } diff --git a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcsCmd.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcsCmd.java index 9f7c4cf2944e..61b5210bb3a5 100644 --- a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcsCmd.java +++ b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVmwareDcsCmd.java @@ -43,7 +43,7 @@ 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 { @@ -52,6 +52,7 @@ public class ListVmwareDcsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListVmwareDcsCmd.class.getName()); + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -74,27 +75,20 @@ public Long getZoneId() { @Override public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException { - List vmwareDcList; + List 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 response = new ListResponse<>(); - List vmwareDcResponses = getVmwareDatacenterResponses(vmwareDcList); - response.setResponses(vmwareDcResponses); - response.setResponseName(getCommandName()); - setResponseObject(response); - } + ListResponse response = new ListResponse(); + List vmwareDcResponses = new ArrayList(); - private List getVmwareDatacenterResponses(List vmwareDcList) { - List vmwareDcResponses = new ArrayList<>(); - - if (vmwareDcList != null && !vmwareDcList.isEmpty()) { + if (vmwareDcList != null && vmwareDcList.size() > 0) { for (VmwareDatacenter vmwareDc : vmwareDcList) { VmwareDatacenterResponse vmwareDcResponse = new VmwareDatacenterResponse(); @@ -102,12 +96,14 @@ private List getVmwareDatacenterResponses(List storagePolicies = _vmwareDatacenterService.listVsphereStoragePolicies(this); final ListResponse responseList = new ListResponse<>(); - final List storagePoliciesResponseList = getVsphereStoragePoliciesResponses(storagePolicies, dataCenter); - responseList.setResponses(storagePoliciesResponseList); - responseList.setResponseName(getCommandName()); - setResponseObject(responseList); - } - - private static List getVsphereStoragePoliciesResponses(List storagePolicies, DataCenter dataCenter) { final List storagePoliciesResponseList = new ArrayList<>(); for (VsphereStoragePolicy storagePolicy : storagePolicies) { final VsphereStoragePoliciesResponse storagePoliciesResponse = new VsphereStoragePoliciesResponse(); @@ -86,11 +83,13 @@ private static List getVsphereStoragePoliciesRes 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 diff --git a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVsphereStoragePolicyCompatiblePoolsCmd.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVsphereStoragePolicyCompatiblePoolsCmd.java index ab697fbad67f..d66972ded2e7 100644 --- a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVsphereStoragePolicyCompatiblePoolsCmd.java +++ b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/ListVsphereStoragePolicyCompatiblePoolsCmd.java @@ -68,7 +68,7 @@ public void execute() throws ServerApiException, ConcurrentOperationException { List 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); diff --git a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/RemoveVmwareDcCmd.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/RemoveVmwareDcCmd.java index d15369d2983a..735d00d6ca99 100644 --- a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/RemoveVmwareDcCmd.java +++ b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/RemoveVmwareDcCmd.java @@ -35,7 +35,7 @@ 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 { @@ -49,7 +49,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() { @@ -65,10 +65,10 @@ public void execute() { 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) { - s_logger.warn("The zone has one or more resources (like cluster), hence not able to remove Vmware datacenter from zone." + s_logger.warn("The zone has one or more resources (like cluster), hence not able to remove VMware datacenter from zone." + " Please remove all resource from zone, and retry. Exception: ", ex); ServerApiException e = new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); for (String proxyObj : ex.getIdProxyList()) { diff --git a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/UpdateVmwareDcCmd.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/UpdateVmwareDcCmd.java index 5e02d5a96c20..2b6cf5984c51 100644 --- a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/UpdateVmwareDcCmd.java +++ b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/UpdateVmwareDcCmd.java @@ -28,15 +28,18 @@ import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.VmwareDatacenterResponse; import org.apache.cloudstack.api.response.ZoneResponse; +import org.apache.log4j.Logger; 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 { + public static final Logger LOG = Logger.getLogger(UpdateVmwareDcCmd.class); + @Inject public VmwareDatacenterService vmwareDatacenterService; @@ -50,7 +53,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 +108,13 @@ public Boolean isRecursive() { 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); } diff --git a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/VmwareRequestResponse.java b/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/VmwareRequestResponse.java deleted file mode 100644 index 81c58ef27baf..000000000000 --- a/plugins/hypervisors/vmware/src/main/java/org/apache/cloudstack/api/command/admin/zone/VmwareRequestResponse.java +++ /dev/null @@ -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 extends ListResponse { - @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; - } -} diff --git a/test/integration/smoke/test_dynamicroles.py b/test/integration/smoke/test_dynamicroles.py index 39f995a14a3b..b91ba9c2eba8 100644 --- a/test/integration/smoke/test_dynamicroles.py +++ b/test/integration/smoke/test_dynamicroles.py @@ -73,7 +73,6 @@ def __init__(self): "listApis": "allow", "listAccounts": "allow", "listClusters": "deny", - "*VmwareDc*": "allow", "*VM*": "allow", "*Host*": "deny" } diff --git a/ui/src/views/tools/ManageInstances.vue b/ui/src/views/tools/ManageInstances.vue index 27ad4cc96960..2ff9052d8b98 100644 --- a/ui/src/views/tools/ManageInstances.vue +++ b/ui/src/views/tools/ManageInstances.vue @@ -1184,7 +1184,6 @@ export default { } else { params.existingvcenterid = this.selectedVmwareVcenter.existingvcenterid } - params.host = this.selectedVmwareVcenter.host } api(apiName, params).then(json => { diff --git a/ui/src/views/tools/SelectVmwareVcenter.vue b/ui/src/views/tools/SelectVmwareVcenter.vue index e93d893e9fca..4f4470779eff 100644 --- a/ui/src/views/tools/SelectVmwareVcenter.vue +++ b/ui/src/views/tools/SelectVmwareVcenter.vue @@ -129,33 +129,11 @@   -
- - - {{ }} - - {{ 'ESXi: ' + opt.name }} - - - -
- {{ $t('message.list.zone.vmware.hosts.empty') }} -
-