Automatic driver selection for disks.

This commit is contained in:
Michael Lipp 2023-06-13 11:28:21 +02:00
parent f16bb7a1e5
commit 0669aa3daa
2 changed files with 27 additions and 3 deletions

View file

@ -84,10 +84,13 @@
# and "raw". All types support a "bootindex" property.
# Type "raw" can have a property "file" (if backed by a file on
# the host) or a property "device" (if backed by a device).
# Alternatively you can use "resource", which automatically be
# interpreted as file or device as appropriate
# (see https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/Files.html#isRegularFile(java.nio.file.Path,java.nio.file.LinkOption...)).
# "drives":
# - "type": "ide-cd"
# "bootindex": (undefined)
# "file": (undefined)
# "resource": (undefined)
# "spice":
# "port": 5900

View file

@ -132,7 +132,7 @@ class Configuration implements Dto {
public String rtcClock = "rt";
public int powerdownTimeout = 900;
public Network[] network = { new Network() };
public Drive[] drives;
public Drive[] drives = new Drive[0];
public Spice spice;
/**
@ -173,6 +173,7 @@ class Configuration implements Dto {
public Integer bootindex;
public String device;
public String file;
public String resource;
}
/**
@ -202,9 +203,29 @@ class Configuration implements Dto {
vm.maximumCpus = vm.currentCpus;
}
checkDrives();
return true;
}
private void checkDrives() {
for (Drive drive : vm.drives) {
if (drive.file != null || drive.device != null) {
continue;
}
if (drive.resource == null) {
logger.severe(
() -> "Drive configuration is missing its resource.");
}
if (Files.isRegularFile(Path.of(drive.resource))) {
drive.file = drive.resource;
} else {
drive.device = drive.resource;
}
}
}
@SuppressWarnings("PMD.AvoidDeeplyNestedIfStmts")
private boolean checkRuntimeDir() {
// Runtime directory (sockets)