mirror of
https://github.com/apache/cloudstack
synced 2026-08-02 13:35:41 +00:00
Reviewed-By: Rashmi Dixit
Problem: All the hosts suitable for VM Migration are not shown in the UI. This could
confuse the user as the target host might never be shown in the UI.
Root Cause: The API (findHostsForMigration) always returned page 1 results which would
be always <= default.page.size global parameter. Therefore, in case of large
no. of hosts where the result can map to multiple pages, this issue would arise.
Solution: 1. Replace drop-down with listView widget.
2. Allow lazy-loading of records on listView's scroll.
3. Show additional parameters (CPU/Memory used) to assist admin in decision making.
4. Provide 'Search by host name' to limit the results.
Added change where if there are no hosts found, an empty row with message will
appear.
440 lines
15 KiB
Java
440 lines
15 KiB
Java
// 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.server;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd;
|
|
import org.apache.cloudstack.api.command.admin.config.ListCfgsByCmd;
|
|
import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd;
|
|
import org.apache.cloudstack.api.command.admin.guest.AddGuestOsCmd;
|
|
import org.apache.cloudstack.api.command.admin.guest.AddGuestOsMappingCmd;
|
|
import org.apache.cloudstack.api.command.admin.guest.ListGuestOsMappingCmd;
|
|
import org.apache.cloudstack.api.command.admin.guest.RemoveGuestOsCmd;
|
|
import org.apache.cloudstack.api.command.admin.guest.RemoveGuestOsMappingCmd;
|
|
import org.apache.cloudstack.api.command.admin.guest.UpdateGuestOsCmd;
|
|
import org.apache.cloudstack.api.command.admin.guest.UpdateGuestOsMappingCmd;
|
|
import org.apache.cloudstack.api.command.admin.host.ListHostsCmd;
|
|
import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd;
|
|
import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd;
|
|
import org.apache.cloudstack.api.command.admin.resource.ArchiveAlertsCmd;
|
|
import org.apache.cloudstack.api.command.admin.resource.DeleteAlertsCmd;
|
|
import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd;
|
|
import org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd;
|
|
import org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd;
|
|
import org.apache.cloudstack.api.command.admin.systemvm.DestroySystemVmCmd;
|
|
import org.apache.cloudstack.api.command.admin.systemvm.ListSystemVMsCmd;
|
|
import org.apache.cloudstack.api.command.admin.systemvm.RebootSystemVmCmd;
|
|
import org.apache.cloudstack.api.command.admin.systemvm.ScaleSystemVMCmd;
|
|
import org.apache.cloudstack.api.command.admin.systemvm.StopSystemVmCmd;
|
|
import org.apache.cloudstack.api.command.admin.systemvm.UpgradeSystemVMCmd;
|
|
import org.apache.cloudstack.api.command.admin.vlan.ListVlanIpRangesCmd;
|
|
import org.apache.cloudstack.api.command.user.address.ListPublicIpAddressesCmd;
|
|
import org.apache.cloudstack.api.command.user.config.ListCapabilitiesCmd;
|
|
import org.apache.cloudstack.api.command.user.event.ArchiveEventsCmd;
|
|
import org.apache.cloudstack.api.command.user.event.DeleteEventsCmd;
|
|
import org.apache.cloudstack.api.command.user.guest.ListGuestOsCategoriesCmd;
|
|
import org.apache.cloudstack.api.command.user.guest.ListGuestOsCmd;
|
|
import org.apache.cloudstack.api.command.user.ssh.CreateSSHKeyPairCmd;
|
|
import org.apache.cloudstack.api.command.user.ssh.DeleteSSHKeyPairCmd;
|
|
import org.apache.cloudstack.api.command.user.ssh.ListSSHKeyPairsCmd;
|
|
import org.apache.cloudstack.api.command.user.ssh.RegisterSSHKeyPairCmd;
|
|
import org.apache.cloudstack.api.command.user.vm.GetVMPasswordCmd;
|
|
import org.apache.cloudstack.api.command.user.vmgroup.UpdateVMGroupCmd;
|
|
import org.apache.cloudstack.config.Configuration;
|
|
|
|
import com.cloud.alert.Alert;
|
|
import com.cloud.capacity.Capacity;
|
|
import com.cloud.dc.Pod;
|
|
import com.cloud.dc.Vlan;
|
|
import com.cloud.domain.Domain;
|
|
import com.cloud.exception.ConcurrentOperationException;
|
|
import com.cloud.exception.ManagementServerException;
|
|
import com.cloud.exception.ResourceUnavailableException;
|
|
import com.cloud.exception.VirtualMachineMigrationException;
|
|
import com.cloud.host.Host;
|
|
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
|
import com.cloud.hypervisor.HypervisorCapabilities;
|
|
import com.cloud.network.IpAddress;
|
|
import com.cloud.org.Cluster;
|
|
import com.cloud.storage.GuestOS;
|
|
import com.cloud.storage.GuestOSHypervisor;
|
|
import com.cloud.storage.GuestOsCategory;
|
|
import com.cloud.storage.StoragePool;
|
|
import com.cloud.user.SSHKeyPair;
|
|
import com.cloud.utils.Pair;
|
|
import com.cloud.utils.Ternary;
|
|
import com.cloud.vm.InstanceGroup;
|
|
import com.cloud.vm.VirtualMachine;
|
|
import com.cloud.vm.VirtualMachine.Type;
|
|
|
|
/**
|
|
* Hopefully this is temporary.
|
|
*
|
|
*/
|
|
public interface ManagementService {
|
|
static final String Name = "management-server";
|
|
|
|
/**
|
|
* returns the a map of the names/values in the configuraton table
|
|
*
|
|
* @return map of configuration name/values
|
|
*/
|
|
Pair<List<? extends Configuration>, Integer> searchForConfigurations(ListCfgsByCmd c);
|
|
|
|
/**
|
|
* Searches for Clusters by the specified search criteria
|
|
*
|
|
* @param c
|
|
* @return
|
|
*/
|
|
Pair<List<? extends Cluster>, Integer> searchForClusters(ListClustersCmd c);
|
|
|
|
/**
|
|
* Searches for Clusters by the specified zone Id.
|
|
* @param zoneId
|
|
* @return
|
|
*/
|
|
List<? extends Cluster> searchForClusters(long zoneId, Long startIndex, Long pageSizeVal, String hypervisorType);
|
|
|
|
/**
|
|
* Searches for Pods by the specified search criteria Can search by: pod name and/or zone name
|
|
*
|
|
* @param cmd
|
|
* @return List of Pods
|
|
*/
|
|
Pair<List<? extends Pod>, Integer> searchForPods(ListPodsByCmd cmd);
|
|
|
|
/**
|
|
* Searches for servers by the specified search criteria Can search by: "name", "type", "state", "dataCenterId",
|
|
* "podId"
|
|
*
|
|
* @param cmd
|
|
* @return List of Hosts
|
|
*/
|
|
Pair<List<? extends Host>, Integer> searchForServers(ListHostsCmd cmd);
|
|
|
|
/**
|
|
* Obtains a list of IP Addresses by the specified search criteria. Can search by: "userId", "dataCenterId",
|
|
* "address"
|
|
*
|
|
* @param cmd
|
|
* the command that wraps the search criteria
|
|
* @return List of IPAddresses
|
|
*/
|
|
Pair<List<? extends IpAddress>, Integer> searchForIPAddresses(ListPublicIpAddressesCmd cmd);
|
|
|
|
/**
|
|
* Obtains a list of all guest OS.
|
|
*
|
|
* @return list of GuestOS
|
|
*/
|
|
Pair<List<? extends GuestOS>, Integer> listGuestOSByCriteria(ListGuestOsCmd cmd);
|
|
|
|
/**
|
|
* Obtains a list of all guest OS categories.
|
|
*
|
|
* @return list of GuestOSCategories
|
|
*/
|
|
Pair<List<? extends GuestOsCategory>, Integer> listGuestOSCategoriesByCriteria(ListGuestOsCategoriesCmd cmd);
|
|
|
|
/**
|
|
* Obtains a list of all guest OS mappings
|
|
*
|
|
* @return list of GuestOSHypervisor
|
|
*/
|
|
Pair<List<? extends GuestOSHypervisor>, Integer> listGuestOSMappingByCriteria(ListGuestOsMappingCmd cmd);
|
|
|
|
/**
|
|
* Adds a new guest OS mapping
|
|
*
|
|
* @return A VO containing the new mapping, with its hypervisor, hypervisor type, guest OS name, and the name of guest OS specific to hypervisor
|
|
*/
|
|
GuestOSHypervisor addGuestOsMapping(AddGuestOsMappingCmd addGuestOsMappingCmd);
|
|
|
|
/**
|
|
* Find newly added guest OS mapping by ID
|
|
*
|
|
* @return A VO containing the guest OS mapping specified by ID, with its hypervisor, hypervisor type, guest OS name, and the name of guest OS specific to hypervisor
|
|
*/
|
|
GuestOSHypervisor getAddedGuestOsMapping(Long guestOsHypervisorId);
|
|
|
|
/**
|
|
* Adds a new guest OS
|
|
*
|
|
* @return A VO containing the new guest OS, with its category ID, name and display name
|
|
*/
|
|
GuestOS addGuestOs(AddGuestOsCmd addGuestOsCmd);
|
|
|
|
/**
|
|
* Find newly added guest OS by ID
|
|
*
|
|
* @return A VO containing the guest OS specified by ID, with its category ID, name and display name
|
|
*/
|
|
GuestOS getAddedGuestOs(Long guestOsId);
|
|
|
|
/**
|
|
* Updates an existing guest OS
|
|
*
|
|
* @return A VO containing the updated display name
|
|
*/
|
|
GuestOS updateGuestOs(UpdateGuestOsCmd updateGuestOsCmd);
|
|
|
|
/**
|
|
* Updates an existing guest OS mapping
|
|
*
|
|
* @return A VO containing the updated OS name for hypervisor
|
|
*/
|
|
GuestOSHypervisor updateGuestOsMapping(UpdateGuestOsMappingCmd updateGuestOsMappingCmd);
|
|
|
|
/**
|
|
* Removes an existing guest OS
|
|
*
|
|
* @return True is successfully marked for delete, false otherwise
|
|
*/
|
|
boolean removeGuestOs(RemoveGuestOsCmd removeGuestOsCmd);
|
|
|
|
/**
|
|
* Removes an existing guest OS mapping
|
|
*
|
|
* @return True is successfully marked for delete, false otherwise
|
|
*/
|
|
boolean removeGuestOsMapping(RemoveGuestOsMappingCmd removeGuestOsMappingCmd);
|
|
|
|
VirtualMachine stopSystemVM(StopSystemVmCmd cmd) throws ResourceUnavailableException, ConcurrentOperationException;
|
|
|
|
VirtualMachine startSystemVM(long vmId);
|
|
|
|
VirtualMachine rebootSystemVM(RebootSystemVmCmd cmd);
|
|
|
|
VirtualMachine destroySystemVM(DestroySystemVmCmd cmd);
|
|
|
|
VirtualMachine upgradeSystemVM(UpgradeSystemVMCmd cmd);
|
|
|
|
/**
|
|
* update an existing domain
|
|
*
|
|
* @param cmd
|
|
* - the command containing domainId and new domainName
|
|
* @return Domain object if the command succeeded
|
|
*/
|
|
Domain updateDomain(UpdateDomainCmd cmd);
|
|
|
|
/**
|
|
* Searches for alerts
|
|
*
|
|
* @param c
|
|
* @return List of Alerts
|
|
*/
|
|
Pair<List<? extends Alert>, Integer> searchForAlerts(ListAlertsCmd cmd);
|
|
|
|
/**
|
|
* Archive alerts
|
|
* @param cmd
|
|
* @return True on success. False otherwise.
|
|
*/
|
|
boolean archiveAlerts(ArchiveAlertsCmd cmd);
|
|
|
|
/**
|
|
* Delete alerts
|
|
* @param cmd
|
|
* @return True on success. False otherwise.
|
|
*/
|
|
boolean deleteAlerts(DeleteAlertsCmd cmd);
|
|
|
|
/**
|
|
* Archive events
|
|
* @param cmd
|
|
* @return True on success. False otherwise.
|
|
*/
|
|
boolean archiveEvents(ArchiveEventsCmd cmd);
|
|
|
|
/**
|
|
* Delete events
|
|
* @param cmd
|
|
* @return True on success. False otherwise.
|
|
*/
|
|
boolean deleteEvents(DeleteEventsCmd cmd);
|
|
|
|
/**
|
|
* list all the capacity rows in capacity operations table
|
|
*
|
|
* @param cmd
|
|
* @return List of capacities
|
|
*/
|
|
List<? extends Capacity> listCapacities(ListCapacityCmd cmd);
|
|
|
|
/**
|
|
* List system VMs by the given search criteria
|
|
*
|
|
* @param cmd
|
|
* the command that wraps the search criteria (host, name, state, type, zone, pod, and/or id)
|
|
* @return the list of system vms that match the given criteria
|
|
*/
|
|
Pair<List<? extends VirtualMachine>, Integer> searchForSystemVm(ListSystemVMsCmd cmd);
|
|
|
|
/**
|
|
* Returns back a SHA1 signed response
|
|
*
|
|
* @param userId
|
|
* -- id for the user
|
|
* @return -- ArrayList of <CloudId+Signature>
|
|
*/
|
|
ArrayList<String> getCloudIdentifierResponse(long userId);
|
|
|
|
boolean updateHostPassword(UpdateHostPasswordCmd cmd);
|
|
|
|
boolean updateClusterPassword(UpdateHostPasswordCmd cmd);
|
|
|
|
InstanceGroup updateVmGroup(UpdateVMGroupCmd cmd);
|
|
|
|
Map<String, Object> listCapabilities(ListCapabilitiesCmd cmd);
|
|
|
|
/**
|
|
* return an array of available hypervisors
|
|
*
|
|
* @param zoneId
|
|
* TODO
|
|
*
|
|
* @return an array of available hypervisors in the cloud
|
|
*/
|
|
List<String> getHypervisors(Long zoneId);
|
|
|
|
/**
|
|
* This method uploads a custom cert to the db, and patches every cpvm with it on the current ms
|
|
*
|
|
* @param cmd
|
|
* -- upload certificate cmd
|
|
* @return -- returns a string on success
|
|
*/
|
|
String uploadCertificate(UploadCustomCertificateCmd cmd);
|
|
|
|
String getVersion();
|
|
|
|
/**
|
|
* Searches for vlan by the specified search criteria Can search by: "id", "vlan", "name", "zoneID"
|
|
*
|
|
* @param cmd
|
|
* @return List of Vlans
|
|
*/
|
|
Pair<List<? extends Vlan>, Integer> searchForVlans(ListVlanIpRangesCmd cmd);
|
|
|
|
/**
|
|
* Generates a random password that will be used (initially) by newly created and started virtual machines
|
|
*
|
|
* @return a random password
|
|
*/
|
|
String generateRandomPassword();
|
|
|
|
/**
|
|
* Search registered key pairs for the logged in user.
|
|
*
|
|
* @param cmd
|
|
* The api command class.
|
|
* @return The list of key pairs found.
|
|
*/
|
|
Pair<List<? extends SSHKeyPair>, Integer> listSSHKeyPairs(ListSSHKeyPairsCmd cmd);
|
|
|
|
/**
|
|
* Registers a key pair for a given public key.
|
|
*
|
|
* @param cmd
|
|
* The api command class.
|
|
* @return A VO with the key pair name and a finger print for the public key.
|
|
*/
|
|
SSHKeyPair registerSSHKeyPair(RegisterSSHKeyPairCmd cmd);
|
|
|
|
/**
|
|
* Creates a new
|
|
*
|
|
* @param cmd
|
|
* The api command class.
|
|
* @return A VO containing the key pair name, finger print for the public key and the private key material of the
|
|
* key pair.
|
|
*/
|
|
SSHKeyPair createSSHKeyPair(CreateSSHKeyPairCmd cmd);
|
|
|
|
/**
|
|
* Deletes a key pair by name.
|
|
*
|
|
* @param cmd
|
|
* The api command class.
|
|
* @return True on success. False otherwise.
|
|
*/
|
|
boolean deleteSSHKeyPair(DeleteSSHKeyPairCmd cmd);
|
|
|
|
/**
|
|
* Finds and returns an encrypted password for a VM.
|
|
*
|
|
* @param cmd
|
|
* The api command class.
|
|
* @return The encrypted password.
|
|
*/
|
|
String getVMPassword(GetVMPasswordCmd cmd);
|
|
|
|
Type findSystemVMTypeById(long instanceId);
|
|
|
|
/**
|
|
* List hosts for migrating the given VM. The API returns list of all hosts in the VM's cluster minus the current
|
|
* host and
|
|
* also a list of hosts that seem to have enough CPU and RAM capacity to host this VM.
|
|
*
|
|
* @param Long
|
|
* vmId
|
|
* Id of The VM to migrate
|
|
* @return Ternary<List<? extends Host>, List<? extends Host>, Map<Host, Boolean>> List of all Hosts to which a VM
|
|
* can be migrated, list of Hosts with enough capacity and hosts requiring storage motion for migration.
|
|
*/
|
|
Ternary<Pair<List<? extends Host>, Integer>, List<? extends Host>, Map<Host, Boolean>> listHostsForMigrationOfVM(Long vmId, Long startIndex, Long pageSize, String keyword);
|
|
|
|
/**
|
|
* List storage pools for live migrating of a volume. The API returns list of all pools in the cluster to which the
|
|
* volume can be migrated. Current pool is not included in the list.
|
|
*
|
|
* @param Long volumeId
|
|
* @return Pair<List<? extends StoragePool>, List<? extends StoragePool>> List of storage pools in cluster and list
|
|
* of pools with enough capacity.
|
|
*/
|
|
Pair<List<? extends StoragePool>, List<? extends StoragePool>> listStoragePoolsForMigrationOfVolume(Long volumeId);
|
|
|
|
String[] listEventTypes();
|
|
|
|
Pair<List<? extends HypervisorCapabilities>, Integer> listHypervisorCapabilities(Long id, HypervisorType hypervisorType, String keyword, Long startIndex,
|
|
Long pageSizeVal);
|
|
|
|
HypervisorCapabilities updateHypervisorCapabilities(Long id, Long maxGuestsLimit, Boolean securityGroupEnabled);
|
|
|
|
/**
|
|
* list all the top consumed resources across different capacity types
|
|
*
|
|
* @param cmd
|
|
* @return List of capacities
|
|
*/
|
|
List<? extends Capacity> listTopConsumedResources(ListCapacityCmd cmd);
|
|
|
|
List<String> listDeploymentPlanners();
|
|
|
|
VirtualMachine upgradeSystemVM(ScaleSystemVMCmd cmd) throws ResourceUnavailableException, ManagementServerException, VirtualMachineMigrationException,
|
|
ConcurrentOperationException;
|
|
|
|
void cleanupVMReservations();
|
|
|
|
|
|
}
|