mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	Add API command remove management server (#10325)
* Add API command remove management server * Apply suggestions from code review Co-authored-by: Bernardo De Marco Gonçalves <bernardomg2004@gmail.com> * Apply sugestions from code review * Update log message with current management server state Co-authored-by: Bernardo De Marco Gonçalves <bernardomg2004@gmail.com> * Apply suggestions from code review Co-authored-by: Fabricio Duarte <fabricio.duarte.jr@gmail.com> * Update api/src/main/java/org/apache/cloudstack/api/command/admin/management/RemoveManagementServerCmd.java Co-authored-by: Fabricio Duarte <fabricio.duarte.jr@gmail.com> * Remove unused imports --------- Co-authored-by: Bernardo De Marco Gonçalves <bernardomg2004@gmail.com> Co-authored-by: Fabricio Duarte <fabricio.duarte.jr@gmail.com>
This commit is contained in:
		
							parent
							
								
									3e3a0c0678
								
							
						
					
					
						commit
						d5fd3ec36e
					
				| @ -801,6 +801,9 @@ public class EventTypes { | |||||||
|     // Resource Limit |     // Resource Limit | ||||||
|     public static final String EVENT_RESOURCE_LIMIT_UPDATE = "RESOURCE.LIMIT.UPDATE"; |     public static final String EVENT_RESOURCE_LIMIT_UPDATE = "RESOURCE.LIMIT.UPDATE"; | ||||||
| 
 | 
 | ||||||
|  |     // Management Server | ||||||
|  |     public static final String EVENT_MANAGEMENT_SERVER_REMOVE = "MANAGEMENT.SERVER.REMOVE"; | ||||||
|  | 
 | ||||||
|     public static final String VM_LEASE_EXPIRED = "VM.LEASE.EXPIRED"; |     public static final String VM_LEASE_EXPIRED = "VM.LEASE.EXPIRED"; | ||||||
|     public static final String VM_LEASE_DISABLED = "VM.LEASE.DISABLED"; |     public static final String VM_LEASE_DISABLED = "VM.LEASE.DISABLED"; | ||||||
|     public static final String VM_LEASE_CANCELLED = "VM.LEASE.CANCELLED"; |     public static final String VM_LEASE_CANCELLED = "VM.LEASE.CANCELLED"; | ||||||
| @ -1301,6 +1304,9 @@ public class EventTypes { | |||||||
|         entityEventDetails.put(EVENT_SHAREDFS_EXPUNGE, SharedFS.class); |         entityEventDetails.put(EVENT_SHAREDFS_EXPUNGE, SharedFS.class); | ||||||
|         entityEventDetails.put(EVENT_SHAREDFS_RECOVER, SharedFS.class); |         entityEventDetails.put(EVENT_SHAREDFS_RECOVER, SharedFS.class); | ||||||
| 
 | 
 | ||||||
|  |         // Management Server | ||||||
|  |         entityEventDetails.put(EVENT_MANAGEMENT_SERVER_REMOVE, "ManagementServer"); | ||||||
|  | 
 | ||||||
|         // VM Lease |         // VM Lease | ||||||
|         entityEventDetails.put(VM_LEASE_EXPIRED, VirtualMachine.class); |         entityEventDetails.put(VM_LEASE_EXPIRED, VirtualMachine.class); | ||||||
|         entityEventDetails.put(VM_LEASE_EXPIRING, VirtualMachine.class); |         entityEventDetails.put(VM_LEASE_EXPIRING, VirtualMachine.class); | ||||||
|  | |||||||
| @ -38,6 +38,7 @@ 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.guest.UpdateGuestOsMappingCmd; | ||||||
| import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; | 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.host.UpdateHostPasswordCmd; | ||||||
|  | import org.apache.cloudstack.api.command.admin.management.RemoveManagementServerCmd; | ||||||
| import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd; | 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.ArchiveAlertsCmd; | ||||||
| import org.apache.cloudstack.api.command.admin.resource.DeleteAlertsCmd; | import org.apache.cloudstack.api.command.admin.resource.DeleteAlertsCmd; | ||||||
| @ -506,4 +507,6 @@ public interface ManagementService { | |||||||
| 
 | 
 | ||||||
|     Pair<Boolean, String> patchSystemVM(PatchSystemVMCmd cmd); |     Pair<Boolean, String> patchSystemVM(PatchSystemVMCmd cmd); | ||||||
| 
 | 
 | ||||||
|  |     boolean removeManagementServer(RemoveManagementServerCmd cmd); | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,61 @@ | |||||||
|  | // 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.management; | ||||||
|  | 
 | ||||||
|  | import com.cloud.event.EventTypes; | ||||||
|  | import org.apache.cloudstack.acl.RoleType; | ||||||
|  | import org.apache.cloudstack.api.APICommand; | ||||||
|  | import org.apache.cloudstack.api.Parameter; | ||||||
|  | import org.apache.cloudstack.api.ServerApiException; | ||||||
|  | import org.apache.cloudstack.api.ApiConstants; | ||||||
|  | import org.apache.cloudstack.api.ApiErrorCode; | ||||||
|  | import org.apache.cloudstack.api.BaseCmd; | ||||||
|  | import org.apache.cloudstack.api.response.ManagementServerResponse; | ||||||
|  | import org.apache.cloudstack.api.response.SuccessResponse; | ||||||
|  | import org.apache.cloudstack.context.CallContext; | ||||||
|  | 
 | ||||||
|  | @APICommand(name = "removeManagementServer", description = "Removes a Management Server.", responseObject = SuccessResponse.class, | ||||||
|  |         requestHasSensitiveInfo = false, responseHasSensitiveInfo = false, authorized = RoleType.Admin) | ||||||
|  | public class RemoveManagementServerCmd extends BaseCmd { | ||||||
|  | 
 | ||||||
|  |     @Parameter(name = ApiConstants.ID, type = CommandType.UUID, entityType = ManagementServerResponse.class, required = true, description = "the ID of the Management Server") | ||||||
|  |     private Long id; | ||||||
|  | 
 | ||||||
|  |     public Long getId() { | ||||||
|  |         return id; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void execute() { | ||||||
|  |         boolean result = _mgr.removeManagementServer(this); | ||||||
|  |         if (result) { | ||||||
|  |             SuccessResponse response = new SuccessResponse(getCommandName()); | ||||||
|  |             this.setResponseObject(response); | ||||||
|  |         } else { | ||||||
|  |             throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to remove Management Server."); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public long getEntityOwnerId() { | ||||||
|  |         return CallContext.current().getCallingAccountId(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getEventType() { | ||||||
|  |         return EventTypes.EVENT_MANAGEMENT_SERVER_REMOVE; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -170,4 +170,8 @@ public class ManagementServerJoinVO { | |||||||
|     public String getJavaVersion() { |     public String getJavaVersion() { | ||||||
|         return javaVersion; |         return javaVersion; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public void setRemoved(Date removedDate) { | ||||||
|  |         removed = removedDate; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -44,6 +44,8 @@ import javax.crypto.spec.SecretKeySpec; | |||||||
| import javax.inject.Inject; | import javax.inject.Inject; | ||||||
| import javax.naming.ConfigurationException; | import javax.naming.ConfigurationException; | ||||||
| 
 | 
 | ||||||
|  | import com.cloud.api.query.dao.ManagementServerJoinDao; | ||||||
|  | import com.cloud.api.query.vo.ManagementServerJoinVO; | ||||||
| import org.apache.cloudstack.acl.ControlledEntity; | import org.apache.cloudstack.acl.ControlledEntity; | ||||||
| import org.apache.cloudstack.acl.SecurityChecker; | import org.apache.cloudstack.acl.SecurityChecker; | ||||||
| import org.apache.cloudstack.affinity.AffinityGroupProcessor; | import org.apache.cloudstack.affinity.AffinityGroupProcessor; | ||||||
| @ -128,6 +130,7 @@ import org.apache.cloudstack.api.command.admin.iso.ListIsosCmdByAdmin; | |||||||
| import org.apache.cloudstack.api.command.admin.iso.RegisterIsoCmdByAdmin; | import org.apache.cloudstack.api.command.admin.iso.RegisterIsoCmdByAdmin; | ||||||
| import org.apache.cloudstack.api.command.admin.loadbalancer.ListLoadBalancerRuleInstancesCmdByAdmin; | import org.apache.cloudstack.api.command.admin.loadbalancer.ListLoadBalancerRuleInstancesCmdByAdmin; | ||||||
| import org.apache.cloudstack.api.command.admin.management.ListMgmtsCmd; | import org.apache.cloudstack.api.command.admin.management.ListMgmtsCmd; | ||||||
|  | import org.apache.cloudstack.api.command.admin.management.RemoveManagementServerCmd; | ||||||
| import org.apache.cloudstack.api.command.admin.network.AddNetworkDeviceCmd; | import org.apache.cloudstack.api.command.admin.network.AddNetworkDeviceCmd; | ||||||
| import org.apache.cloudstack.api.command.admin.network.AddNetworkServiceProviderCmd; | import org.apache.cloudstack.api.command.admin.network.AddNetworkServiceProviderCmd; | ||||||
| import org.apache.cloudstack.api.command.admin.network.CreateManagementNetworkIpRangeCmd; | import org.apache.cloudstack.api.command.admin.network.CreateManagementNetworkIpRangeCmd; | ||||||
| @ -634,6 +637,7 @@ import org.apache.cloudstack.framework.config.impl.ConfigurationSubGroupVO; | |||||||
| import org.apache.cloudstack.framework.config.impl.ConfigurationVO; | import org.apache.cloudstack.framework.config.impl.ConfigurationVO; | ||||||
| import org.apache.cloudstack.framework.security.keystore.KeystoreManager; | import org.apache.cloudstack.framework.security.keystore.KeystoreManager; | ||||||
| import org.apache.cloudstack.managed.context.ManagedContextRunnable; | import org.apache.cloudstack.managed.context.ManagedContextRunnable; | ||||||
|  | import org.apache.cloudstack.management.ManagementServerHost; | ||||||
| import org.apache.cloudstack.query.QueryService; | import org.apache.cloudstack.query.QueryService; | ||||||
| import org.apache.cloudstack.resourcedetail.dao.GuestOsDetailsDao; | import org.apache.cloudstack.resourcedetail.dao.GuestOsDetailsDao; | ||||||
| import org.apache.cloudstack.storage.datastore.db.ImageStoreDao; | import org.apache.cloudstack.storage.datastore.db.ImageStoreDao; | ||||||
| @ -1024,6 +1028,8 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe | |||||||
|     UserDataManager userDataManager; |     UserDataManager userDataManager; | ||||||
|     @Inject |     @Inject | ||||||
|     StoragePoolTagsDao storagePoolTagsDao; |     StoragePoolTagsDao storagePoolTagsDao; | ||||||
|  |     @Inject | ||||||
|  |     protected ManagementServerJoinDao managementServerJoinDao; | ||||||
| 
 | 
 | ||||||
|     @Inject |     @Inject | ||||||
|     private PublicIpQuarantineDao publicIpQuarantineDao; |     private PublicIpQuarantineDao publicIpQuarantineDao; | ||||||
| @ -4161,6 +4167,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe | |||||||
|         cmdList.add(ListTemplateDirectDownloadCertificatesCmd.class); |         cmdList.add(ListTemplateDirectDownloadCertificatesCmd.class); | ||||||
|         cmdList.add(ProvisionTemplateDirectDownloadCertificateCmd.class); |         cmdList.add(ProvisionTemplateDirectDownloadCertificateCmd.class); | ||||||
|         cmdList.add(ListMgmtsCmd.class); |         cmdList.add(ListMgmtsCmd.class); | ||||||
|  |         cmdList.add(RemoveManagementServerCmd.class); | ||||||
|         cmdList.add(GetUploadParamsForIsoCmd.class); |         cmdList.add(GetUploadParamsForIsoCmd.class); | ||||||
|         cmdList.add(GetRouterHealthCheckResultsCmd.class); |         cmdList.add(GetRouterHealthCheckResultsCmd.class); | ||||||
|         cmdList.add(StartRollingMaintenanceCmd.class); |         cmdList.add(StartRollingMaintenanceCmd.class); | ||||||
| @ -5701,4 +5708,24 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe | |||||||
|         _lockControllerListener = lockControllerListener; |         _lockControllerListener = lockControllerListener; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @Override | ||||||
|  |     @DB | ||||||
|  |     @ActionEvent(eventType = EventTypes.EVENT_MANAGEMENT_SERVER_REMOVE, eventDescription = "removing Management Server") | ||||||
|  |     public boolean removeManagementServer(RemoveManagementServerCmd cmd) { | ||||||
|  |         final Long id = cmd.getId(); | ||||||
|  |         ManagementServerJoinVO managementServer = managementServerJoinDao.findById(id); | ||||||
|  | 
 | ||||||
|  |         if (managementServer == null) { | ||||||
|  |             throw new InvalidParameterValueException(String.format("Unable to find a Management Server with ID equal to [%s].", managementServer.getUuid())); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if (!ManagementServerHost.State.Down.equals(managementServer.getState())) { | ||||||
|  |             throw new InvalidParameterValueException(String.format("Unable to remove Management Server with ID [%s]. It can only be removed when it is in the [%s] state, however currently it is in the [%s] state.", managementServer.getUuid(), ManagementServerHost.State.Down.name(), managementServer.getState().name())); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         managementServer.setRemoved(new Date()); | ||||||
|  |         return managementServerJoinDao.update(id, managementServer); | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user