Skip to content
This repository has been archived by the owner on Apr 20, 2024. It is now read-only.

Commit

Permalink
Add a --replace option
Browse files Browse the repository at this point in the history
This adds a --replace option to the various device addition commands
to allow for "modifying" devices.

Affects: #25
  • Loading branch information
io7m committed Jul 19, 2020
1 parent 434ed7e commit 667d393
Show file tree
Hide file tree
Showing 27 changed files with 746 additions and 158 deletions.
Expand Up @@ -23,13 +23,13 @@
import com.io7m.waxmill.client.api.WXMClientType;
import com.io7m.waxmill.machines.WXMDeviceAHCIDisk;
import com.io7m.waxmill.machines.WXMDeviceSlot;
import com.io7m.waxmill.machines.WXMDeviceSlots;
import com.io7m.waxmill.machines.WXMDeviceType;
import com.io7m.waxmill.machines.WXMMachineMessages;
import com.io7m.waxmill.machines.WXMOpenOption;
import com.io7m.waxmill.machines.WXMStorageBackendFile;
import com.io7m.waxmill.machines.WXMStorageBackendZFSVolume;
import com.io7m.waxmill.machines.WXMVirtualMachine;
import com.io7m.waxmill.machines.WXMVirtualMachines;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -87,6 +87,14 @@ public final class WXMCommandVMAddAHCIDisk extends
)
private WXMStorageBackendType backend;

@Parameter(
names = "--replace",
description = "Replace an existing device, if one exists",
required = false,
arity = 1
)
private boolean replace;

/**
* Construct a command.
*
Expand Down Expand Up @@ -163,12 +171,6 @@ protected Status executeActualWithConfiguration(
{
try (var client = WXMServices.clients().open(configurationPath)) {
final var machine = client.vmFind(this.id);
this.deviceSlot =
WXMDeviceSlots.checkDeviceSlotNotUsed(
WXMMachineMessages.create(),
machine,
this.deviceSlot
);

switch (this.backend.kind()) {
case WXM_STORAGE_FILE:
Expand Down Expand Up @@ -198,10 +200,12 @@ protected Status executeActualWithConfiguration(
.build();

final var updatedMachine =
WXMVirtualMachine.builder()
.from(machine)
.addDevices(disk)
.build();
WXMVirtualMachines.updateWithDevice(
WXMMachineMessages.create(),
machine,
disk,
this.replace
);

client.vmUpdate(updatedMachine);
this.showCreated(client, machine);
Expand Down
Expand Up @@ -21,10 +21,9 @@
import com.io7m.claypot.core.CLPCommandContextType;
import com.io7m.waxmill.machines.WXMDeviceAHCIOpticalDisk;
import com.io7m.waxmill.machines.WXMDeviceSlot;
import com.io7m.waxmill.machines.WXMDeviceSlots;
import com.io7m.waxmill.machines.WXMDeviceType;
import com.io7m.waxmill.machines.WXMMachineMessages;
import com.io7m.waxmill.machines.WXMVirtualMachine;
import com.io7m.waxmill.machines.WXMVirtualMachines;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -64,6 +63,14 @@ public final class WXMCommandVMAddAHCIOptical extends
)
private WXMDeviceSlot deviceSlot;

@Parameter(
names = "--replace",
description = "Replace an existing device, if one exists",
required = false,
arity = 1
)
private boolean replace;

/**
* Construct a command.
*
Expand All @@ -89,12 +96,6 @@ protected Status executeActualWithConfiguration(
{
try (var client = WXMServices.clients().open(configurationPath)) {
final var machine = client.vmFind(this.id);
this.deviceSlot =
WXMDeviceSlots.checkDeviceSlotNotUsed(
WXMMachineMessages.create(),
machine,
this.deviceSlot
);

final WXMDeviceType disk =
WXMDeviceAHCIOpticalDisk.builder()
Expand All @@ -103,10 +104,12 @@ protected Status executeActualWithConfiguration(
.build();

final var updatedMachine =
WXMVirtualMachine.builder()
.from(machine)
.addDevices(disk)
.build();
WXMVirtualMachines.updateWithDevice(
WXMMachineMessages.create(),
machine,
disk,
this.replace
);

client.vmUpdate(updatedMachine);
}
Expand Down
Expand Up @@ -21,11 +21,11 @@
import com.io7m.claypot.core.CLPCommandContextType;
import com.io7m.waxmill.machines.WXMDeviceE1000;
import com.io7m.waxmill.machines.WXMDeviceSlot;
import com.io7m.waxmill.machines.WXMDeviceSlots;
import com.io7m.waxmill.machines.WXMMachineMessages;
import com.io7m.waxmill.machines.WXMNetworkDeviceBackendType;
import com.io7m.waxmill.machines.WXMTap;
import com.io7m.waxmill.machines.WXMVMNet;
import com.io7m.waxmill.machines.WXMVirtualMachine;
import com.io7m.waxmill.machines.WXMVirtualMachines;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -35,8 +35,6 @@

import static com.io7m.claypot.core.CLPCommandType.Status.SUCCESS;

import com.io7m.waxmill.machines.WXMNetworkDeviceBackendType;

@Parameters(commandDescription = "Add an e1000 network device to a virtual machine.")
public final class WXMCommandVMAddE1000NetworkDevice
extends WXMAbstractCommandWithConfiguration
Expand Down Expand Up @@ -75,6 +73,14 @@ public final class WXMCommandVMAddE1000NetworkDevice
)
private WXMNetworkDeviceBackendType backend;

@Parameter(
names = "--replace",
description = "Replace an existing device, if one exists",
required = false,
arity = 1
)
private boolean replace;

/**
* Construct a command.
*
Expand Down Expand Up @@ -110,12 +116,6 @@ protected Status executeActualWithConfiguration(
{
try (var client = WXMServices.clients().open(configurationPath)) {
final var machine = client.vmFind(this.id);
this.deviceSlot =
WXMDeviceSlots.checkDeviceSlotNotUsed(
WXMMachineMessages.create(),
machine,
this.deviceSlot
);

final var virtio =
WXMDeviceE1000.builder()
Expand All @@ -125,10 +125,12 @@ protected Status executeActualWithConfiguration(
.build();

final var updatedMachine =
WXMVirtualMachine.builder()
.from(machine)
.addDevices(virtio)
.build();
WXMVirtualMachines.updateWithDevice(
WXMMachineMessages.create(),
machine,
virtio,
this.replace
);

client.vmUpdate(updatedMachine);

Expand Down
Expand Up @@ -21,9 +21,8 @@
import com.io7m.claypot.core.CLPCommandContextType;
import com.io7m.waxmill.machines.WXMDeviceFramebuffer;
import com.io7m.waxmill.machines.WXMDeviceSlot;
import com.io7m.waxmill.machines.WXMDeviceSlots;
import com.io7m.waxmill.machines.WXMMachineMessages;
import com.io7m.waxmill.machines.WXMVirtualMachine;
import com.io7m.waxmill.machines.WXMVirtualMachines;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -109,6 +108,14 @@ public final class WXMCommandVMAddFramebufferDevice
)
private boolean waitForVNC;

@Parameter(
names = "--replace",
description = "Replace an existing device, if one exists",
required = false,
arity = 1
)
private boolean replace;

/**
* Construct a command.
*
Expand Down Expand Up @@ -143,12 +150,6 @@ protected Status executeActualWithConfiguration(
{
try (var client = WXMServices.clients().open(configurationPath)) {
final var machine = client.vmFind(this.id);
this.deviceSlot =
WXMDeviceSlots.checkDeviceSlotNotUsed(
WXMMachineMessages.create(),
machine,
this.deviceSlot
);

final var virtio =
WXMDeviceFramebuffer.builder()
Expand All @@ -163,10 +164,12 @@ protected Status executeActualWithConfiguration(
.build();

final var updatedMachine =
WXMVirtualMachine.builder()
.from(machine)
.addDevices(virtio)
.build();
WXMVirtualMachines.updateWithDevice(
WXMMachineMessages.create(),
machine,
virtio,
this.replace
);

client.vmUpdate(updatedMachine);
}
Expand Down
Expand Up @@ -21,13 +21,12 @@
import com.io7m.claypot.core.CLPCommandContextType;
import com.io7m.waxmill.machines.WXMDeviceLPC;
import com.io7m.waxmill.machines.WXMDeviceSlot;
import com.io7m.waxmill.machines.WXMDeviceSlots;
import com.io7m.waxmill.machines.WXMMachineMessages;
import com.io7m.waxmill.machines.WXMTTYBackendFile;
import com.io7m.waxmill.machines.WXMTTYBackendNMDM;
import com.io7m.waxmill.machines.WXMTTYBackendStdio;
import com.io7m.waxmill.machines.WXMTTYBackends;
import com.io7m.waxmill.machines.WXMVirtualMachine;
import com.io7m.waxmill.machines.WXMVirtualMachines;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -81,6 +80,14 @@ public final class WXMCommandVMAddLPC extends
)
private List<WXMTTYBackendType> backends = List.of();

@Parameter(
names = "--replace",
description = "Replace an existing device, if one exists",
required = false,
arity = 1
)
private boolean replace;

/**
* Construct a command.
*
Expand Down Expand Up @@ -116,12 +123,6 @@ protected Status executeActualWithConfiguration(
{
try (var client = WXMServices.clients().open(configurationPath)) {
final var machine = client.vmFind(this.id);
this.deviceSlot =
WXMDeviceSlots.checkDeviceSlotNotUsed(
WXMMachineMessages.create(),
machine,
this.deviceSlot
);

final Map<String, WXMTTYBackendType> backendMap = new HashMap<>(3);
for (final WXMTTYBackendType backend : this.backends) {
Expand All @@ -140,10 +141,12 @@ protected Status executeActualWithConfiguration(
.build();

final var updatedMachine =
WXMVirtualMachine.builder()
.from(machine)
.addDevices(lpc)
.build();
WXMVirtualMachines.updateWithDevice(
WXMMachineMessages.create(),
machine,
lpc,
this.replace
);

client.vmUpdate(updatedMachine);

Expand Down
Expand Up @@ -21,9 +21,8 @@
import com.io7m.claypot.core.CLPCommandContextType;
import com.io7m.waxmill.machines.WXMDevicePassthru;
import com.io7m.waxmill.machines.WXMDeviceSlot;
import com.io7m.waxmill.machines.WXMDeviceSlots;
import com.io7m.waxmill.machines.WXMMachineMessages;
import com.io7m.waxmill.machines.WXMVirtualMachine;
import com.io7m.waxmill.machines.WXMVirtualMachines;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -71,6 +70,14 @@ public final class WXMCommandVMAddPassthru extends
)
private WXMDeviceSlot hostDeviceSlot;

@Parameter(
names = "--replace",
description = "Replace an existing device, if one exists",
required = false,
arity = 1
)
private boolean replace;

/**
* Construct a command.
*
Expand Down Expand Up @@ -106,12 +113,6 @@ protected Status executeActualWithConfiguration(
{
try (var client = WXMServices.clients().open(configurationPath)) {
final var machine = client.vmFind(this.id);
this.deviceSlot =
WXMDeviceSlots.checkDeviceSlotNotUsed(
WXMMachineMessages.create(),
machine,
this.deviceSlot
);

final var passthru =
WXMDevicePassthru.builder()
Expand All @@ -121,10 +122,12 @@ protected Status executeActualWithConfiguration(
.build();

final var updatedMachine =
WXMVirtualMachine.builder()
.from(machine)
.addDevices(passthru)
.build();
WXMVirtualMachines.updateWithDevice(
WXMMachineMessages.create(),
machine,
passthru,
this.replace
);

client.vmUpdate(updatedMachine);
}
Expand Down

0 comments on commit 667d393

Please sign in to comment.