Skip to content

Commit 64f1610

Browse files
code refactoring
1 parent 8843062 commit 64f1610

File tree

4 files changed

+68
-62
lines changed

4 files changed

+68
-62
lines changed

plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtConvertInstanceCommandWrapper.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ public Answer execute(ConvertInstanceCommand cmd, LibvirtComputingResource serve
113113
String vddkTransports = resolveVddkSetting(cmd.getVddkTransports(), serverResource.getVddkTransports());
114114
String configuredVddkThumbprint = resolveVddkSetting(cmd.getVddkThumbprint(), serverResource.getVddkThumbprint());
115115
String passwordOption = serverResource.getDetectedPasswordFileOption();
116-
result = performInstanceConversionVddk(sourceInstance, originalVMName, temporaryConvertPath,
116+
result = performInstanceConversionUsingVddk(sourceInstance, originalVMName, temporaryConvertPath,
117117
vddkLibDir, libguestfsBackend, vddkTransports, configuredVddkThumbprint,
118118
timeout, verboseModeEnabled, extraParams, temporaryConvertUuid, passwordOption);
119119
} else {
@@ -157,9 +157,7 @@ public Answer execute(ConvertInstanceCommand cmd, LibvirtComputingResource serve
157157
logger.error("({}) {}", originalVMName, err);
158158
return new Answer(cmd, false, err);
159159
}
160-
161160
return new ConvertInstanceAnswer(cmd, temporaryConvertUuid);
162-
163161
} catch (Exception e) {
164162
String error = String.format("Error converting instance %s from %s, due to: %s", sourceInstanceName, sourceHypervisorType, e.getMessage());
165163
logger.error("({}) {}", originalVMName, error, e);
@@ -304,21 +302,22 @@ private String resolveVddkSetting(String commandValue, String agentValue) {
304302
return StringUtils.defaultIfBlank(StringUtils.trimToNull(commandValue), StringUtils.trimToNull(agentValue));
305303
}
306304

307-
protected boolean performInstanceConversionVddk(RemoteInstanceTO vmwareInstance, String originalVMName,
308-
String temporaryConvertFolder, String vddkLibDir,
309-
String libguestfsBackend, String vddkTransports,
310-
String configuredVddkThumbprint,
311-
long timeout, boolean verboseModeEnabled, String extraParams,
312-
String temporaryConvertUuid, String passwordOption) {
305+
protected boolean performInstanceConversionUsingVddk(RemoteInstanceTO vmwareInstance, String originalVMName,
306+
String temporaryConvertFolder, String vddkLibDir,
307+
String libguestfsBackend, String vddkTransports,
308+
String configuredVddkThumbprint,
309+
long timeout, boolean verboseModeEnabled, String extraParams,
310+
String temporaryConvertUuid, String passwordOption) {
313311

314312
String vcenterPassword = vmwareInstance.getVcenterPassword();
315313
if (StringUtils.isBlank(vcenterPassword)) {
316314
logger.error("({}) Could not determine vCenter password for {}", originalVMName, vmwareInstance.getVcenterHost());
317315
return false;
318316
}
319317

320-
String passwordFilePath = String.format("/root/v2v.pass.cloud.%s",
321-
StringUtils.defaultIfBlank(vmwareInstance.getVcenterHost(), "unknown"));
318+
String passwordFilePath = String.format("/root/v2v.pass.cloud.%s.%s",
319+
StringUtils.defaultIfBlank(vmwareInstance.getVcenterHost(), "unknown"),
320+
UUID.randomUUID());
322321
try {
323322
Files.writeString(Path.of(passwordFilePath), vcenterPassword);
324323
logger.debug("({}) Written vCenter password to {}", originalVMName, passwordFilePath);
@@ -396,7 +395,6 @@ protected boolean performInstanceConversionVddk(RemoteInstanceTO vmwareInstance,
396395
return exitValue == 0;
397396
}
398397

399-
400398
protected String getVcenterThumbprint(String vcenterHost, long timeout, String originalVMName) {
401399
if (StringUtils.isBlank(vcenterHost)) {
402400
return null;

plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtConvertInstanceCommandWrapperTest.java

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
package com.cloud.hypervisor.kvm.resource.wrapper;
2020

2121
import java.nio.file.Files;
22-
import java.nio.file.Path;
2322
import java.util.List;
2423
import java.util.UUID;
2524

@@ -193,7 +192,7 @@ public void testAddExtraParamsToScriptDifferentArgs() {
193192
}
194193

195194
@Test
196-
public void testPerformInstanceConversionVddkUsesConfiguredLibguestfsBackend() {
195+
public void testPerformInstanceConversionUsingVddkUsesConfiguredLibguestfsBackend() {
197196
RemoteInstanceTO remoteInstanceTO = Mockito.mock(RemoteInstanceTO.class);
198197
Mockito.when(remoteInstanceTO.getVcenterHost()).thenReturn("vcenter.local");
199198
Mockito.when(remoteInstanceTO.getVcenterUsername()).thenReturn("administrator@vsphere.local");
@@ -209,25 +208,26 @@ public void testPerformInstanceConversionVddkUsesConfiguredLibguestfsBackend() {
209208
Mockito.when(mock.execute(Mockito.any())).thenReturn("");
210209
Mockito.when(mock.getExitValue()).thenReturn(0);
211210
})) {
212-
Path passwordFilePath = Path.of("/root/v2v.pass.cloud.vcenter.local");
213-
filesMock.when(() -> Files.writeString(passwordFilePath, "secret")).thenReturn(passwordFilePath);
214-
filesMock.when(() -> Files.deleteIfExists(passwordFilePath)).thenReturn(true);
211+
filesMock.when(() -> Files.writeString(Mockito.argThat(path -> path.toString().contains("/root/v2v.pass.cloud.vcenter.local.")), Mockito.eq("secret")))
212+
.thenAnswer(invocation -> invocation.getArgument(0));
213+
filesMock.when(() -> Files.deleteIfExists(Mockito.argThat(path -> path.toString().contains("/root/v2v.pass.cloud.vcenter.local."))))
214+
.thenReturn(true);
215215

216-
boolean result = convertInstanceCommandWrapper.performInstanceConversionVddk(
216+
boolean result = convertInstanceCommandWrapper.performInstanceConversionUsingVddk(
217217
remoteInstanceTO, vmName, "/tmp/convert", "/opt/vddk", "libvirt", null, null, 1000L, false, null, "tmp-uuid", "-ip");
218218

219219
Assert.assertTrue(result);
220220
Script scriptMock = ignored.constructed().get(0);
221221
Mockito.verify(scriptMock).add("-c");
222222
Mockito.verify(scriptMock).add(Mockito.contains("export LIBGUESTFS_BACKEND=libvirt &&"));
223-
Mockito.verify(scriptMock).add(Mockito.contains("-ip /root/v2v.pass.cloud.vcenter.local "));
223+
Mockito.verify(scriptMock).add(Mockito.contains("-ip /root/v2v.pass.cloud.vcenter.local."));
224224
Mockito.verify(scriptMock).add(Mockito.contains(" -on tmp-uuid "));
225225
Mockito.verify(scriptMock).add(Mockito.contains("-io vddk-thumbprint=28:19:A6:1C:90:ED:46:D7:1C:86:BC:F6:13:52:F0:B9:19:81:0D:81 "));
226226
}
227227
}
228228

229229
@Test
230-
public void testPerformInstanceConversionVddkUsesConfiguredTransportsOrder() {
230+
public void testPerformInstanceConversionUsingVddkUsesConfiguredTransportsOrder() {
231231
RemoteInstanceTO remoteInstanceTO = Mockito.mock(RemoteInstanceTO.class);
232232
Mockito.when(remoteInstanceTO.getVcenterHost()).thenReturn("vcenter.local");
233233
Mockito.when(remoteInstanceTO.getVcenterUsername()).thenReturn("administrator@vsphere.local");
@@ -243,11 +243,12 @@ public void testPerformInstanceConversionVddkUsesConfiguredTransportsOrder() {
243243
Mockito.when(mock.execute(Mockito.any())).thenReturn("");
244244
Mockito.when(mock.getExitValue()).thenReturn(0);
245245
})) {
246-
Path passwordFilePath = Path.of("/root/v2v.pass.cloud.vcenter.local");
247-
filesMock.when(() -> Files.writeString(passwordFilePath, "secret")).thenReturn(passwordFilePath);
248-
filesMock.when(() -> Files.deleteIfExists(passwordFilePath)).thenReturn(true);
246+
filesMock.when(() -> Files.writeString(Mockito.argThat(path -> path.toString().contains("/root/v2v.pass.cloud.vcenter.local.")), Mockito.eq("secret")))
247+
.thenAnswer(invocation -> invocation.getArgument(0));
248+
filesMock.when(() -> Files.deleteIfExists(Mockito.argThat(path -> path.toString().contains("/root/v2v.pass.cloud.vcenter.local."))))
249+
.thenReturn(true);
249250

250-
boolean result = convertInstanceCommandWrapper.performInstanceConversionVddk(
251+
boolean result = convertInstanceCommandWrapper.performInstanceConversionUsingVddk(
251252
remoteInstanceTO, vmName, "/tmp/convert", "/opt/vddk", "direct", "nbd:nbdssl", null, 1000L, false, null, "tmp-uuid", "-ip");
252253

253254
Assert.assertTrue(result);
@@ -257,7 +258,7 @@ public void testPerformInstanceConversionVddkUsesConfiguredTransportsOrder() {
257258
}
258259

259260
@Test
260-
public void testPerformInstanceConversionVddkFailsWhenThumbprintUnavailable() {
261+
public void testPerformInstanceConversionUsingVddkFailsWhenThumbprintUnavailable() {
261262
RemoteInstanceTO remoteInstanceTO = Mockito.mock(RemoteInstanceTO.class);
262263
Mockito.when(remoteInstanceTO.getVcenterHost()).thenReturn("vcenter.local");
263264
Mockito.when(remoteInstanceTO.getVcenterUsername()).thenReturn("administrator@vsphere.local");
@@ -269,19 +270,20 @@ public void testPerformInstanceConversionVddkFailsWhenThumbprintUnavailable() {
269270
.when(convertInstanceCommandWrapper).getVcenterThumbprint(Mockito.anyString(), Mockito.anyLong(), Mockito.anyString());
270271

271272
try (MockedStatic<Files> filesMock = Mockito.mockStatic(Files.class)) {
272-
Path passwordFilePath = Path.of("/root/v2v.pass.cloud.vcenter.local");
273-
filesMock.when(() -> Files.writeString(passwordFilePath, "secret")).thenReturn(passwordFilePath);
274-
filesMock.when(() -> Files.deleteIfExists(passwordFilePath)).thenReturn(true);
273+
filesMock.when(() -> Files.writeString(Mockito.argThat(path -> path.toString().contains("/root/v2v.pass.cloud.vcenter.local.")), Mockito.eq("secret")))
274+
.thenAnswer(invocation -> invocation.getArgument(0));
275+
filesMock.when(() -> Files.deleteIfExists(Mockito.argThat(path -> path.toString().contains("/root/v2v.pass.cloud.vcenter.local."))))
276+
.thenReturn(true);
275277

276-
boolean result = convertInstanceCommandWrapper.performInstanceConversionVddk(
278+
boolean result = convertInstanceCommandWrapper.performInstanceConversionUsingVddk(
277279
remoteInstanceTO, vmName, "/tmp/convert", "/opt/vddk", "direct", null, null, 1000L, false, null, "tmp-uuid", "-ip");
278280

279281
Assert.assertFalse(result);
280282
}
281283
}
282284

283285
@Test
284-
public void testPerformInstanceConversionVddkUsesConfiguredThumbprintFromAgentProperty() {
286+
public void testPerformInstanceConversionUsingVddkUsesConfiguredThumbprintFromAgentProperty() {
285287
RemoteInstanceTO remoteInstanceTO = Mockito.mock(RemoteInstanceTO.class);
286288
Mockito.when(remoteInstanceTO.getVcenterHost()).thenReturn("vcenter.local");
287289
Mockito.when(remoteInstanceTO.getVcenterUsername()).thenReturn("administrator@vsphere.local");
@@ -295,11 +297,12 @@ public void testPerformInstanceConversionVddkUsesConfiguredThumbprintFromAgentPr
295297
Mockito.when(mock.execute(Mockito.any())).thenReturn("");
296298
Mockito.when(mock.getExitValue()).thenReturn(0);
297299
})) {
298-
Path passwordFilePath = Path.of("/root/v2v.pass.cloud.vcenter.local");
299-
filesMock.when(() -> Files.writeString(passwordFilePath, "secret")).thenReturn(passwordFilePath);
300-
filesMock.when(() -> Files.deleteIfExists(passwordFilePath)).thenReturn(true);
300+
filesMock.when(() -> Files.writeString(Mockito.argThat(path -> path.toString().contains("/root/v2v.pass.cloud.vcenter.local.")), Mockito.eq("secret")))
301+
.thenAnswer(invocation -> invocation.getArgument(0));
302+
filesMock.when(() -> Files.deleteIfExists(Mockito.argThat(path -> path.toString().contains("/root/v2v.pass.cloud.vcenter.local."))))
303+
.thenReturn(true);
301304

302-
boolean result = convertInstanceCommandWrapper.performInstanceConversionVddk(
305+
boolean result = convertInstanceCommandWrapper.performInstanceConversionUsingVddk(
303306
remoteInstanceTO, vmName, "/tmp/convert", "/opt/vddk", "direct", null,
304307
"AA:BB:CC:DD:EE", 1000L, false, null, "tmp-uuid", "-ip");
305308

0 commit comments

Comments
 (0)