From 95ae57b5a9992b272734e919e8dbe39b1fecdfc4 Mon Sep 17 00:00:00 2001 From: Christopher Lucas Date: Mon, 10 Dec 2018 13:52:41 +0100 Subject: Fix issue with device id being in config file --- src/main/java/org/openslx/util/vm/QemuConfig.java | 95 ++++++++++++++-------- .../java/org/openslx/util/vm/QemuMetaData.java | 5 +- src/main/java/org/openslx/util/vm/VmMetaData.java | 2 +- 3 files changed, 67 insertions(+), 35 deletions(-) (limited to 'src/main/java/org/openslx/util') diff --git a/src/main/java/org/openslx/util/vm/QemuConfig.java b/src/main/java/org/openslx/util/vm/QemuConfig.java index 3bf1742..e6154d8 100644 --- a/src/main/java/org/openslx/util/vm/QemuConfig.java +++ b/src/main/java/org/openslx/util/vm/QemuConfig.java @@ -11,6 +11,7 @@ import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Set; import java.util.TreeMap; import org.apache.log4j.Logger; import static org.openslx.util.vm.QemuConfig.Header.*; @@ -30,7 +31,7 @@ public final class QemuConfig { // BOOT("netdev", "net0") -> toString -> "[netdev "net0"]" public static enum Header { - BOOT("boot-opts", null), DEVICE("device", ""), DRIVE("drive", ""), + BOOT("boot-opts", null), DEVICE("device", null), DRIVE("drive", ""), MACHINE("machine", null), MEMORY("memory", null), NAME("name", null), NETDEV("netdev", ""), SMP("smp-opts", null); @@ -57,7 +58,13 @@ public final class QemuConfig { @Override public String toString() { - return "[" + header + " \"" + id + "\"]"; + String result; + if (id == null) { + result = "[" + header + "]"; + } else { + result = "[" + header + " \"" + id + "\"]"; + } + return result; } } @@ -75,11 +82,11 @@ public final class QemuConfig { while ((line = stream.readLine()) != null) { if (line.startsWith("#") == false) { if (line.isEmpty() == false) { - if (line.contains(DEVICE.getHeader())) { - result.add(DEVICE.getHeader()); - } else { - result.add(line.trim()); - } +// if (line.contains(DEVICE.getHeader())) { +// result.add("[" + DEVICE.getHeader() + "]"); +// } else { + result.add(line.trim()); +// } } } } @@ -170,11 +177,11 @@ public final class QemuConfig { listID.add(DRIVE.getID()); headers.put(option, DRIVE.getID()); nbDrive++; - } else if (option.contains(NETDEV.getHeader()) && option.contains(quote)){//Check netdev with id + } else if (option.contains(NETDEV.getHeader()) && option.contains(quote)) {//Check netdev with id String[] netdev = option.split(quote); for (String id : listID) { if (netdev[1].equals(id)) { - NETDEV.setID("id-netdev-"+nbNetDev); + NETDEV.setID("id-netdev-" + nbNetDev); listID.add(NETDEV.getID()); exist = true; } @@ -186,13 +193,13 @@ public final class QemuConfig { headers.put(NETDEV.getHeader(), NETDEV.getID()); nbNetDev++; exist = false; - } else if (option.equals(NETDEV.toString())){//Check drive without id - NETDEV.setID("id-netdev-"+nbNetDev); + } else if (option.equals(NETDEV.toString())) {//Check drive without id + NETDEV.setID("id-netdev-" + nbNetDev); listID.add(NETDEV.getID()); headers.put(option, NETDEV.getID()); } else if (option.equals(DEVICE.getHeader())) {//This will alwas come as [device] - DRIVE.setID("dev" + nbDev); - headers.put(option, DRIVE.getID()); + DEVICE.setID("dev" + nbDev); + headers.put(option, DEVICE.getID()); nbDev++; } else { headers.put(option, null); @@ -264,9 +271,11 @@ public final class QemuConfig { public void setHdds() { int dev = 0; String filename = null; + String busType = null; DriveBusType bus = null; String controllerDevice = null; - TreeMap options = new TreeMap<>(); + LinkedHashMap keys; + TreeMap options; for (Map.Entry, TreeMap> entry : entries.entrySet()) { if (entry.getKey().containsKey(DRIVE.getHeader())) { if (entry.getValue().containsKey("index")) { @@ -278,7 +287,7 @@ public final class QemuConfig { LOGGER.error("Please make sure your harddrive has a path"); } //Get Bus Type - String busType = entry.getValue().get("if"); + busType = entry.getValue().get("if"); if (busType != null) { switch (busType) { case "ide": @@ -294,7 +303,13 @@ public final class QemuConfig { break; } } else { - bus = DriveBusType.NONE; + bus = DriveBusType.SCSI; + busType = "scsi"; + keys = new LinkedHashMap<>(); + keys.put(DRIVE.getHeader(), DRIVE.getID()); + options = entries.get(entry.getKey()); + options.put("if", busType); + entries.put(keys, options); } } } @@ -302,14 +317,16 @@ public final class QemuConfig { if (entry.getKey().containsKey(DEVICE.getHeader())) { String drive = entry.getValue().get("drive"); if (drive != null && drive.equals(DRIVE.getID())) { - DEVICE.setID(drive); controllerDevice = entry.getValue().get("driver"); - } - } - for (String key : entry.getKey().keySet()) { - if (key.contains(DEVICE.getHeader())) { dev++; } + } else { +// for (String key : entry.getKey().keySet()) { + for (LinkedHashMap key : entries.keySet()) { + if (key.containsKey(DEVICE.getHeader())) { + dev++; + } + } } //No device if (dev == 0) { @@ -321,21 +338,24 @@ public final class QemuConfig { case SCSI: controllerDevice = "scsi-hd"; break; - case NONE: - controllerDevice = ""; - break; default: + controllerDevice = "scsi-hd"; break; } - { - - } - } else { - controllerDevice = ""; } } if ((bus != null) && (filename != null) && (controllerDevice != null)) { - hddsArray.add(new VmMetaData.HardDisk(controllerDevice, bus, filename)); + hddsArray.add(new VmMetaData.HardDisk(controllerDevice, bus, filename));; + + if (dev == 0) { + keys = new LinkedHashMap<>(); + options = new TreeMap<>(); + DEVICE.setID(DRIVE.getID()); + keys.put(DEVICE.getHeader(), DEVICE.getID()); + options.put("drive", DRIVE.getID()); + options.put("driver", controllerDevice); + entries.put(keys, options); + } break; } } @@ -351,8 +371,13 @@ public final class QemuConfig { if (filtered) { sortedArray = new LinkedHashMap<>(); for (Map.Entry, TreeMap> entry : entries.entrySet()) { + if (entry.getKey().containsKey(DEVICE.getHeader())) { + DEVICE.setID(null); + entry.getKey().replace(DEVICE.getHeader(), null); + sortedArray.put(entry.getKey(), entry.getValue()); + } + if (entry.getKey().containsKey(NAME.getHeader()) || entry.getKey().containsKey(DRIVE.getHeader())) { - if ((entry.getKey().keySet().equals(NAME.getHeader())) || (entry.getKey().keySet().equals(DRIVE.getHeader()) || entry.getKey().keySet().equals(DEVICE.getHeader()))) { sortedArray.put(entry.getKey(), entry.getValue()); } } @@ -383,7 +408,13 @@ public final class QemuConfig { } if (entry.getKey().containsKey(DEVICE.getHeader())) { - header = "[" + DEVICE.getHeader() + "]"; + DEVICE.setID(null); + entry.getKey().replace(DEVICE.getHeader(), null); + header = DEVICE.toString(); + } + + if (entry.getKey().containsKey(NETDEV.getHeader())) { + header = NETDEV.toString(); } sb.append(header + "\n"); diff --git a/src/main/java/org/openslx/util/vm/QemuMetaData.java b/src/main/java/org/openslx/util/vm/QemuMetaData.java index 8dca91e..73612ab 100644 --- a/src/main/java/org/openslx/util/vm/QemuMetaData.java +++ b/src/main/java/org/openslx/util/vm/QemuMetaData.java @@ -115,6 +115,7 @@ public final class QemuMetaData extends VmMetaData(); header = new LinkedHashMap<>(); - header.put(DEVICE.getHeader(), ""); + header.put(DEVICE.getHeader(), null); option.put("drive",DRIVE.getID()); if (bus != null) { diff --git a/src/main/java/org/openslx/util/vm/VmMetaData.java b/src/main/java/org/openslx/util/vm/VmMetaData.java index 1d9fb1b..b260bc1 100644 --- a/src/main/java/org/openslx/util/vm/VmMetaData.java +++ b/src/main/java/org/openslx/util/vm/VmMetaData.java @@ -88,7 +88,7 @@ public abstract class VmMetaData { } public static enum DriveBusType { - SCSI, IDE, SATA, NONE; + SCSI, IDE, SATA; } public static class HardDisk { -- cgit v1.2.3-55-g7522