| // 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.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.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); |
| |
| /** |
| * 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(); |
| |
| |
| } |