From b62b5c96e8bf2620ad2a92c05cbc5ede5c9a56ff Mon Sep 17 00:00:00 2001 From: Nicolas Vazquez Date: Fri, 20 May 2022 11:31:47 -0300 Subject: [PATCH 1/2] Prevent NPE on reboot stopped VM and startVM output with null displayname (#6397) * Prevent NPE on reboot stopped VM * Use VM UUID instead of VM ID * Apply suggestion * Refactor and fix start VM output * Use format instead of concatenation --- engine/schema/src/main/java/com/cloud/vm/UserVmVO.java | 5 +++++ .../com/cloud/api/query/dao/UserVmJoinDaoImpl.java | 2 +- .../src/main/java/com/cloud/vm/UserVmManagerImpl.java | 10 ++++++++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/vm/UserVmVO.java b/engine/schema/src/main/java/com/cloud/vm/UserVmVO.java index e62162e2596..465d00f0b82 100644 --- a/engine/schema/src/main/java/com/cloud/vm/UserVmVO.java +++ b/engine/schema/src/main/java/com/cloud/vm/UserVmVO.java @@ -28,6 +28,7 @@ import javax.persistence.Table; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.uservm.UserVm; +import org.apache.commons.lang3.StringUtils; @Entity @Table(name = "user_vm") @@ -141,4 +142,8 @@ public class UserVmVO extends VMInstanceVO implements UserVm { public String getName() { return instanceName; } + + public String getDisplayNameOrHostName() { + return StringUtils.isNotBlank(displayName) ? displayName : getHostName(); + } } diff --git a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java index 7a867620900..03fdb542d2f 100644 --- a/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/UserVmJoinDaoImpl.java @@ -127,7 +127,7 @@ public class UserVmJoinDaoImpl extends GenericDaoBaseWithTagInformation Date: Fri, 20 May 2022 11:36:43 -0300 Subject: [PATCH 2/2] Backport: kvm: truncate vnc password to 8 chars (#6244) (#6402) * kvm: truncate vnc password to 8 chars (#6244) This PR truncates the vnc password of kvm vms to 8 chars to support latest versions of libvirt. * Use lang3 string utils Co-authored-by: Wei Zhou --- .../java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java | 4 ++-- .../hypervisor/kvm/resource/LibvirtComputingResourceTest.java | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java index d8b1d4e289a..7c65f7970ad 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java @@ -23,7 +23,7 @@ import java.util.List; import java.util.Map; import org.apache.commons.lang.StringEscapeUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; public class LibvirtVMDef { @@ -1764,7 +1764,7 @@ public class LibvirtVMDef { graphicBuilder.append(" listen=''"); } if (_passwd != null) { - graphicBuilder.append(" passwd='" + _passwd + "'"); + graphicBuilder.append(" passwd='" + StringUtils.truncate(_passwd, 8) + "'"); } else if (_keyMap != null) { graphicBuilder.append(" _keymap='" + _keyMap + "'"); } diff --git a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java index 4106cc05799..3632cf299d3 100644 --- a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java +++ b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java @@ -60,6 +60,7 @@ import org.apache.cloudstack.utils.linux.CPUStat; import org.apache.cloudstack.utils.linux.MemStat; import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat; import org.apache.commons.lang.SystemUtils; +import org.apache.commons.lang3.StringUtils; import org.joda.time.Duration; import org.junit.Assert; import org.junit.Before; @@ -773,7 +774,7 @@ public class LibvirtComputingResourceTest { assertXpath(domainDoc, prefix + "/graphics/@type", "vnc"); assertXpath(domainDoc, prefix + "/graphics/@listen", to.getVncAddr()); assertXpath(domainDoc, prefix + "/graphics/@autoport", "yes"); - assertXpath(domainDoc, prefix + "/graphics/@passwd", to.getVncPassword()); + assertXpath(domainDoc, prefix + "/graphics/@passwd", StringUtils.truncate(to.getVncPassword(), 8)); } private void verifySerialDevices(Document domainDoc, String prefix) {