summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/util/vm/QemuConfig.java
diff options
context:
space:
mode:
authorChristopher Lucas2018-12-10 13:52:41 +0100
committerChristopher Lucas2018-12-10 13:52:41 +0100
commit95ae57b5a9992b272734e919e8dbe39b1fecdfc4 (patch)
treeb529caa7337ad7c6365efb49a8a1fcb2db844106 /src/main/java/org/openslx/util/vm/QemuConfig.java
parentUpload and Download working (diff)
downloadmaster-sync-shared-95ae57b5a9992b272734e919e8dbe39b1fecdfc4.tar.gz
master-sync-shared-95ae57b5a9992b272734e919e8dbe39b1fecdfc4.tar.xz
master-sync-shared-95ae57b5a9992b272734e919e8dbe39b1fecdfc4.zip
Fix issue with device id being in config file
Diffstat (limited to 'src/main/java/org/openslx/util/vm/QemuConfig.java')
-rw-r--r--src/main/java/org/openslx/util/vm/QemuConfig.java95
1 files changed, 63 insertions, 32 deletions
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<String, String> options = new TreeMap<>();
+ LinkedHashMap<String, String> keys;
+ TreeMap<String, String> options;
for (Map.Entry<LinkedHashMap<String, String>, TreeMap<String, String>> 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<String, String> 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<LinkedHashMap<String, String>, TreeMap<String, String>> 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");