mirror of https://github.com/apache/jclouds.git
Renamed DetachDistroMediumFromMachine and inject port and device instead of hard-coding.
This commit is contained in:
parent
40e603d7e0
commit
d06394514f
|
@ -67,7 +67,7 @@ public class CloneAndRegisterMachineFromIMachineIfNotAlreadyExists implements Fu
|
||||||
VirtualBoxManager manager, ComputeServiceContext context,
|
VirtualBoxManager manager, ComputeServiceContext context,
|
||||||
String settingsFile, String osTypeId, String vmId,
|
String settingsFile, String osTypeId, String vmId,
|
||||||
boolean forceOverwrite, String cloneName, String hostId,
|
boolean forceOverwrite, String cloneName, String hostId,
|
||||||
String snashotName, String snapshotDesc, String controllerIDE) {
|
String snapshotName, String snapshotDesc, String controllerIDE) {
|
||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.settingsFile = settingsFile;
|
this.settingsFile = settingsFile;
|
||||||
|
@ -76,7 +76,7 @@ public class CloneAndRegisterMachineFromIMachineIfNotAlreadyExists implements Fu
|
||||||
this.forceOverwrite = forceOverwrite;
|
this.forceOverwrite = forceOverwrite;
|
||||||
this.cloneName = cloneName;
|
this.cloneName = cloneName;
|
||||||
this.hostId = hostId;
|
this.hostId = hostId;
|
||||||
this.snapshotName = snashotName;
|
this.snapshotName = snapshotName;
|
||||||
this.snapshotDesc = snapshotDesc;
|
this.snapshotDesc = snapshotDesc;
|
||||||
this.controllerIDE = controllerIDE;
|
this.controllerIDE = controllerIDE;
|
||||||
}
|
}
|
||||||
|
@ -123,20 +123,24 @@ public class CloneAndRegisterMachineFromIMachineIfNotAlreadyExists implements Fu
|
||||||
|
|
||||||
// TODO this behavior can be improved
|
// TODO this behavior can be improved
|
||||||
String bridgedInterface = activeBridgedInterfaces.get(0);
|
String bridgedInterface = activeBridgedInterfaces.get(0);
|
||||||
ensureBridgedNetworkingIsAppliedToMachine(cloneName, macAddress, bridgedInterface);
|
long adapterSlot = 0l;
|
||||||
|
ensureBridgedNetworkingIsAppliedToMachine(adapterSlot, cloneName, macAddress, bridgedInterface);
|
||||||
|
|
||||||
// detach iso
|
// detach iso
|
||||||
ensureMachineHasDistroMediumDetached(cloneName, controllerIDE);
|
// TODO: also hard-coded values here
|
||||||
|
int controllerPort = 0;
|
||||||
|
int device = 0;
|
||||||
|
ensureMachineHasDistroMediumDetached(cloneName, controllerIDE, controllerPort, device);
|
||||||
|
|
||||||
return clonedMachine;
|
return clonedMachine;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ensureBridgedNetworkingIsAppliedToMachine(String vmName, String macAddress, String hostInterface) {
|
private void ensureBridgedNetworkingIsAppliedToMachine(long adapterSlot, String vmName, String macAddress, String hostInterface) {
|
||||||
lockMachineAndApply(manager, Write, vmName, new AttachBridgedAdapterToMachine(0l, macAddress, hostInterface));
|
lockMachineAndApply(manager, Write, vmName, new AttachBridgedAdapterToMachine(adapterSlot, macAddress, hostInterface));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ensureMachineHasDistroMediumDetached(String vmName, String controllerIDE) {
|
private void ensureMachineHasDistroMediumDetached(String vmName, String controllerIDE, int controllerPort, int device) {
|
||||||
lockMachineAndApply(manager, Write, vmName, new DetachDistroMediumToMachine(checkNotNull(controllerIDE, "controllerIDE")));
|
lockMachineAndApply(manager, Write, vmName, new DetachDistroMediumFromMachine(checkNotNull(controllerIDE, "controllerIDE"), controllerPort, device));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/**
|
/*
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
* contributor license agreements. See the NOTICE file
|
* contributor license agreements. See the NOTICE file
|
||||||
* distributed with this work for additional information
|
* distributed with this work for additional information
|
||||||
|
@ -29,19 +29,21 @@ import com.google.common.base.Function;
|
||||||
/**
|
/**
|
||||||
* @author Andrea Turli
|
* @author Andrea Turli
|
||||||
*/
|
*/
|
||||||
public class DetachDistroMediumToMachine implements Function<IMachine, Void> {
|
public class DetachDistroMediumFromMachine implements Function<IMachine, Void> {
|
||||||
|
|
||||||
private final String controller;
|
private final String controller;
|
||||||
|
private int controllerPort;
|
||||||
|
private int device;
|
||||||
|
|
||||||
public DetachDistroMediumToMachine(String controller) {
|
public DetachDistroMediumFromMachine(String controller, int controllerPort, int device) {
|
||||||
this.controller = controller;
|
this.controller = controller;
|
||||||
|
this.controllerPort = controllerPort;
|
||||||
|
this.device = device;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void apply(@Nullable IMachine machine) {
|
public Void apply(@Nullable IMachine machine) {
|
||||||
try {
|
try {
|
||||||
int controllerPort = 0;
|
|
||||||
int device = 0;
|
|
||||||
machine.detachDevice(controller, controllerPort, device);
|
machine.detachDevice(controller, controllerPort, device);
|
||||||
machine.saveSettings();
|
machine.saveSettings();
|
||||||
} catch (VBoxException e) {
|
} catch (VBoxException e) {
|
||||||
|
@ -52,7 +54,7 @@ public class DetachDistroMediumToMachine implements Function<IMachine, Void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean alreadyDetached(VBoxException e) {
|
private boolean alreadyDetached(VBoxException e) {
|
||||||
return e.getMessage().indexOf("is already detached from port") != -1;
|
return e.getMessage().contains("is already detached from port");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -31,8 +31,8 @@ import org.virtualbox_4_1.VBoxException;
|
||||||
/**
|
/**
|
||||||
* @author Andrea Turli
|
* @author Andrea Turli
|
||||||
*/
|
*/
|
||||||
@Test(groups = "unit", testName = "DetachDistroMediumToMachineTest")
|
@Test(groups = "unit", testName = "DetachDistroMediumFromMachineTest")
|
||||||
public class DetachDistroMediumToMachineTest {
|
public class DetachDistroMediumFromMachineTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDetachDistroMedium() throws Exception {
|
public void testDetachDistroMedium() throws Exception {
|
||||||
|
@ -40,12 +40,15 @@ public class DetachDistroMediumToMachineTest {
|
||||||
String controller = "IDE Controller";
|
String controller = "IDE Controller";
|
||||||
IMachine machine = createMock(IMachine.class);
|
IMachine machine = createMock(IMachine.class);
|
||||||
|
|
||||||
|
int controllerPort = 0;
|
||||||
|
int device = 1;
|
||||||
|
|
||||||
machine.saveSettings();
|
machine.saveSettings();
|
||||||
machine.detachDevice(controller, 0, 0);
|
machine.detachDevice(controller, controllerPort, device);
|
||||||
|
|
||||||
replay(machine);
|
replay(machine);
|
||||||
|
|
||||||
new DetachDistroMediumToMachine(controller).apply(machine);
|
new DetachDistroMediumFromMachine(controller, controllerPort, device).apply(machine);
|
||||||
|
|
||||||
verify(machine);
|
verify(machine);
|
||||||
|
|
||||||
|
@ -65,14 +68,16 @@ public class DetachDistroMediumToMachineTest {
|
||||||
errorBuilder.append("of this virtual machine (0x80BB000C)");
|
errorBuilder.append("of this virtual machine (0x80BB000C)");
|
||||||
String isoAlreadyAttachedException = errorBuilder.toString();
|
String isoAlreadyAttachedException = errorBuilder.toString();
|
||||||
|
|
||||||
VBoxException isoAttachedException = new VBoxException(createNiceMock(Throwable.class),
|
int controllerPort = 0;
|
||||||
isoAlreadyAttachedException);
|
int device = 1;
|
||||||
machine.detachDevice(controller, 0, 0);
|
|
||||||
|
VBoxException isoAttachedException = new VBoxException(createNiceMock(Throwable.class), isoAlreadyAttachedException);
|
||||||
|
machine.detachDevice(controller, controllerPort, device);
|
||||||
expectLastCall().andThrow(isoAttachedException);
|
expectLastCall().andThrow(isoAttachedException);
|
||||||
|
|
||||||
replay(machine);
|
replay(machine);
|
||||||
|
|
||||||
new DetachDistroMediumToMachine(controller).apply(machine);
|
new DetachDistroMediumFromMachine(controller, controllerPort, device).apply(machine);
|
||||||
|
|
||||||
verify(machine);
|
verify(machine);
|
||||||
|
|
||||||
|
@ -81,7 +86,7 @@ public class DetachDistroMediumToMachineTest {
|
||||||
@Test(expectedExceptions = VBoxException.class)
|
@Test(expectedExceptions = VBoxException.class)
|
||||||
public void testFailOnOtherVBoxErrors() throws Exception {
|
public void testFailOnOtherVBoxErrors() throws Exception {
|
||||||
|
|
||||||
String controller = "IDE Controller";
|
String controllerName = "IDE Controller";
|
||||||
|
|
||||||
IMachine machine = createNiceMock(IMachine.class);
|
IMachine machine = createNiceMock(IMachine.class);
|
||||||
|
|
||||||
|
@ -90,14 +95,16 @@ public class DetachDistroMediumToMachineTest {
|
||||||
errorBuilder.append("Some other VBox error");
|
errorBuilder.append("Some other VBox error");
|
||||||
String isoAlreadyAttachedException = errorBuilder.toString();
|
String isoAlreadyAttachedException = errorBuilder.toString();
|
||||||
|
|
||||||
VBoxException isoAttachedException = new VBoxException(createNiceMock(Throwable.class),
|
int controllerPort = 0;
|
||||||
isoAlreadyAttachedException);
|
int device = 1;
|
||||||
machine.detachDevice(controller, 0, 0);
|
|
||||||
|
VBoxException isoAttachedException = new VBoxException(createNiceMock(Throwable.class), isoAlreadyAttachedException);
|
||||||
|
machine.detachDevice(controllerName, controllerPort, device);
|
||||||
expectLastCall().andThrow(isoAttachedException);
|
expectLastCall().andThrow(isoAttachedException);
|
||||||
|
|
||||||
replay(machine);
|
replay(machine);
|
||||||
|
|
||||||
new DetachDistroMediumToMachine(controller).apply(machine);
|
new DetachDistroMediumFromMachine(controllerName, controllerPort, device).apply(machine);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue