From 0b080cfd8207887039c471e95e88931406bb6a4e Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Mon, 4 Mar 2024 14:13:32 +0530 Subject: [PATCH 1/8] [UI] Allow detach ISO from instance toolbar when ISO is attached (#8716) --- ui/src/config/section/compute.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/src/config/section/compute.js b/ui/src/config/section/compute.js index 0ef53012ba0..9bf8c949144 100644 --- a/ui/src/config/section/compute.js +++ b/ui/src/config/section/compute.js @@ -32,9 +32,9 @@ export default { permission: ['listVirtualMachinesMetrics'], resourceType: 'UserVm', params: () => { - var params = { details: 'servoff,tmpl,nics,backoff' } + var params = { details: 'servoff,tmpl,iso,nics,backoff' } if (store.getters.metrics) { - params = { details: 'servoff,tmpl,nics,backoff,stats' } + params = { details: 'servoff,tmpl,iso,nics,backoff,stats' } } return params }, From a7ec8738a27aaa7fae7a03f1f1aa8bdbaea1def3 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Mon, 4 Mar 2024 09:46:28 +0100 Subject: [PATCH 2/8] kvm: fix NPE while import KVM VMs from other hosts (#8720) --- .../kvm/resource/LibvirtDomainXMLParser.java | 11 +- .../resource/LibvirtDomainXMLParserTest.java | 122 ++++++++++++++++++ 2 files changed, 132 insertions(+), 1 deletion(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java index f165796adef..a0dd270f999 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParser.java @@ -419,6 +419,9 @@ public class LibvirtDomainXMLParser { } private static String getTagValue(String tag, Element eElement) { + if (eElement == null) { + return null; + } NodeList tagNodeList = eElement.getElementsByTagName(tag); if (tagNodeList == null || tagNodeList.getLength() == 0) { return null; @@ -426,14 +429,20 @@ public class LibvirtDomainXMLParser { NodeList nlList = tagNodeList.item(0).getChildNodes(); + if (nlList == null || nlList.getLength() == 0) { + return null; + } Node nValue = nlList.item(0); return nValue.getNodeValue(); } private static String getAttrValue(String tag, String attr, Element eElement) { + if (eElement == null) { + return null; + } NodeList tagNode = eElement.getElementsByTagName(tag); - if (tagNode.getLength() == 0) { + if (tag == null || tagNode.getLength() == 0) { return null; } Element node = (Element)tagNode.item(0); diff --git a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParserTest.java b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParserTest.java index 53a745134cf..3813cb39f3c 100644 --- a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParserTest.java +++ b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtDomainXMLParserTest.java @@ -259,4 +259,126 @@ public class LibvirtDomainXMLParserTest extends TestCase { assertEquals(WatchDogDef.WatchDogModel.I6300ESB, watchDogs.get(0).getModel()); assertEquals(WatchDogDef.WatchDogAction.RESET, watchDogs.get(0).getAction()); } + + @Test + public void testDomainXMLParserWithoutModelName() { + String xml = "\n" + + " testkiran\n" + + " aafaaabc-8657-4efc-9c52-3422d4e04088\n" + + " 2097152\n" + + " 2097152\n" + + " 2\n" + + " \n" + + " hvm\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " destroy\n" + + " restart\n" + + " destroy\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " /usr/libexec/qemu-kvm\n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + "
\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "
\n" + + " \n" + + "