From 53fd4a7997034478f422f6b996644ca9a0ea7919 Mon Sep 17 00:00:00 2001 From: Nathan Johnson Date: Thu, 11 Aug 2016 07:52:05 -0500 Subject: [PATCH 1/2] CLOUDSTACK-9451 Honor the forced parameter to stop virtual machine api call. --- .../api/src/com/cloud/vm/VirtualMachineManager.java | 2 ++ .../cloud/entity/api/VirtualMachineEntity.java | 6 ++++++ .../src/com/cloud/vm/VirtualMachineManagerImpl.java | 12 ++++++++++++ .../engine/cloud/entity/api/VMEntityManager.java | 2 ++ .../engine/cloud/entity/api/VMEntityManagerImpl.java | 6 ++++++ .../cloud/entity/api/VirtualMachineEntityImpl.java | 5 +++++ server/src/com/cloud/vm/UserVmManagerImpl.java | 7 ++++++- 7 files changed, 39 insertions(+), 1 deletion(-) diff --git a/engine/api/src/com/cloud/vm/VirtualMachineManager.java b/engine/api/src/com/cloud/vm/VirtualMachineManager.java index 8b226564229..a389e13d7eb 100644 --- a/engine/api/src/com/cloud/vm/VirtualMachineManager.java +++ b/engine/api/src/com/cloud/vm/VirtualMachineManager.java @@ -90,6 +90,8 @@ public interface VirtualMachineManager extends Manager { void stop(String vmUuid) throws ResourceUnavailableException; + void stopForced(String vmUuid) throws ResourceUnavailableException; + void expunge(String vmUuid) throws ResourceUnavailableException; void registerGuru(VirtualMachine.Type type, VirtualMachineGuru guru); diff --git a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java index 37501f014d0..1c3af621f7d 100644 --- a/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java +++ b/engine/api/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntity.java @@ -114,6 +114,12 @@ public interface VirtualMachineEntity extends CloudStackEntity { */ boolean stop(String caller) throws ResourceUnavailableException, CloudException; + /** + * Stop the virtual machine, by force if necessary + * + */ + boolean stopForced(String caller) throws ResourceUnavailableException, CloudException; + /** * Cleans up after any botched starts. CloudStack Orchestration Platform * will attempt a best effort to actually shutdown any resource but diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java index 2136f8eeb5a..18c2bebc6f8 100644 --- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -1239,6 +1239,18 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } catch (final ConcurrentOperationException e) { throw new CloudRuntimeException("Unable to stop vm because of a concurrent operation", e); } + + } + + @Override + public void stopForced(String vmUuid) throws ResourceUnavailableException { + try { + advanceStop(vmUuid, true); + } catch (final OperationTimedoutException e) { + throw new AgentUnavailableException("Unable to stop vm because the operation to stop timed out", e.getAgentId(), e); + } catch (final ConcurrentOperationException e) { + throw new CloudRuntimeException("Unable to stop vm because of a concurrent operation", e); + } } diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManager.java b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManager.java index 314531459d6..0c357ca0313 100644 --- a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManager.java +++ b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManager.java @@ -44,5 +44,7 @@ public interface VMEntityManager { boolean stopvirtualmachine(VMEntityVO vmEntityVO, String caller) throws ResourceUnavailableException; + boolean stopvirtualmachineforced(VMEntityVO vmEntityVO, String caller) throws ResourceUnavailableException; + boolean destroyVirtualMachine(VMEntityVO vmEntityVO, String caller) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException; } diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java index 829ed107022..a944b937342 100644 --- a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java +++ b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VMEntityManagerImpl.java @@ -254,6 +254,12 @@ public class VMEntityManagerImpl implements VMEntityManager { return true; } + @Override + public boolean stopvirtualmachineforced(VMEntityVO vmEntityVO, String caller) throws ResourceUnavailableException { + _itMgr.stopForced(vmEntityVO.getUuid()); + return true; + } + @Override public boolean destroyVirtualMachine(VMEntityVO vmEntityVO, String caller) throws AgentUnavailableException, OperationTimedoutException, ConcurrentOperationException { diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java index 706748f4f75..2f4de36b05a 100644 --- a/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java +++ b/engine/orchestration/src/org/apache/cloudstack/engine/cloud/entity/api/VirtualMachineEntityImpl.java @@ -217,6 +217,11 @@ public class VirtualMachineEntityImpl implements VirtualMachineEntity { return manager.stopvirtualmachine(this.vmEntityVO, caller); } + @Override + public boolean stopForced(String caller) throws ResourceUnavailableException { + return manager.stopvirtualmachineforced(this.vmEntityVO, caller); + } + @Override public void cleanup() { // TODO Auto-generated method stub diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index cc007d90210..e205f2cc1db 100644 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -3866,7 +3866,12 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir boolean status = false; try { VirtualMachineEntity vmEntity = _orchSrvc.getVirtualMachine(vm.getUuid()); - status = vmEntity.stop(Long.toString(userId)); + + if(forced) { + status = vmEntity.stopForced(Long.toString(userId)); + } else { + status = vmEntity.stop(Long.toString(userId)); + } if (status) { return _vmDao.findById(vmId); } else { From 759a92d2516a99b90b59dc096f23e2e903d0673b Mon Sep 17 00:00:00 2001 From: Sudharma Jain Date: Thu, 27 Oct 2016 13:50:39 +0530 Subject: [PATCH 2/2] CLOUDSTACK-9566 instance-id metadata for baremetal VM returns ID --- .../cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java index ea3245ccdcb..22f93959733 100644 --- a/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java +++ b/plugins/hypervisors/baremetal/src/com/cloud/baremetal/networkservice/BaremetalPxeManagerImpl.java @@ -200,7 +200,7 @@ public class BaremetalPxeManagerImpl extends ManagerBase implements BaremetalPxe cmd.addVmData("metadata", "local-hostname", StringUtils.unicodeEscape(vm.getInstanceName())); cmd.addVmData("metadata", "public-ipv4", nic.getIPv4Address()); cmd.addVmData("metadata", "public-hostname", StringUtils.unicodeEscape(vm.getInstanceName())); - cmd.addVmData("metadata", "instance-id", String.valueOf(vm.getId())); + cmd.addVmData("metadata", "instance-id", String.valueOf(vm.getUuid())); cmd.addVmData("metadata", "vm-id", String.valueOf(vm.getInstanceName())); cmd.addVmData("metadata", "public-keys", null); String cloudIdentifier = _configDao.getValue("cloud.identifier");