diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 19c6e7145a6d..2d63a6696612 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -1797,6 +1797,20 @@ private String matchPifFileInDirectory(final String bridgeName) { return ""; } + public Integer getVlanIdForBridge(final String bridge) { + String pif = matchPifFileInDirectory(bridge); + final File vlanfile = new File("/proc/net/vlan/" + pif); + if (vlanfile.isFile()) { + String vlan = Script.runSimpleBashScript("awk '/VID:/ {print $3}' /proc/net/vlan/" + pif); + try { + return Integer.parseInt(vlan); + } catch (final NumberFormatException e) { + return null; + } + } + return null; + } + static String [] ifNamePatterns = { "^eth", "^bond", diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetUnmanagedInstancesCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetUnmanagedInstancesCommandWrapper.java index 70b1715cc20a..b2a098563f6e 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetUnmanagedInstancesCommandWrapper.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetUnmanagedInstancesCommandWrapper.java @@ -132,7 +132,7 @@ private UnmanagedInstanceTO getUnmanagedInstance(LibvirtComputingResource libvir } instance.setPowerState(getPowerState(libvirtComputingResource.getVmState(conn,domain.getName()))); instance.setMemory((int) LibvirtComputingResource.getDomainMemory(domain) / 1024); - instance.setNics(getUnmanagedInstanceNics(parser.getInterfaces())); + instance.setNics(getUnmanagedInstanceNics(libvirtComputingResource, parser.getInterfaces())); instance.setDisks(getUnmanagedInstanceDisks(parser.getDisks(),libvirtComputingResource, conn, domain.getName())); instance.setVncPassword(getFormattedVncPassword(parser.getVncPasswd())); @@ -163,7 +163,7 @@ private UnmanagedInstanceTO.PowerState getPowerState(VirtualMachine.PowerState v } } - private List getUnmanagedInstanceNics(List interfaces) { + private List getUnmanagedInstanceNics(LibvirtComputingResource libvirtComputingResource, List interfaces) { final ArrayList nics = new ArrayList<>(interfaces.size()); int counter = 0; for (LibvirtVMDef.InterfaceDef interfaceDef : interfaces) { @@ -174,6 +174,10 @@ private List getUnmanagedInstanceNics(List Number(x.vlan) === item.vlanid) + if (matched.length > 0) { + network = matched[0] + } + } + if (!network) { + network = this.validNetworks[item.id]?.[0] || null + } this.values[item.id] = network ? network.id : '' this.ipAddresses[item.id] = (!network || network.type === 'L2') ? null : 'auto' this.setIpAddressEnabled(item, network) @@ -280,6 +289,9 @@ export default { } this.sendValuesTimed() }, + getDefaultNetwork (record) { + return this.values[record.id] || this.validNetworks[record.id]?.[0]?.id + }, sendValuesTimed () { clearTimeout(this.sendValuesTimer) this.sendValuesTimer = setTimeout(() => {