Skip to content

Commit 843b0e0

Browse files
nvazquezLocharla, Sandeep
authored andcommitted
[VMware to KVM Migration] Fix unused convert env vars (apache#11947)
* Fix unused convert env vars * Address review comments * Small fix to invoke internal method
1 parent 24522c1 commit 843b0e0

3 files changed

Lines changed: 34 additions & 9 deletions

File tree

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -884,7 +884,7 @@ protected enum HealthCheckResult {
884884
protected StorageSubsystemCommandHandler storageHandler;
885885

886886
private boolean convertInstanceVerboseMode = false;
887-
private String[] convertInstanceEnv = null;
887+
private Map<String, String> convertInstanceEnv = null;
888888
protected boolean dpdkSupport = false;
889889
protected String dpdkOvsPath;
890890
protected String directDownloadTemporaryDownloadPath;
@@ -949,7 +949,7 @@ public boolean isConvertInstanceVerboseModeEnabled() {
949949
return convertInstanceVerboseMode;
950950
}
951951

952-
public String[] getConvertInstanceEnv() {
952+
public Map<String, String> getConvertInstanceEnv() {
953953
return convertInstanceEnv;
954954
}
955955

@@ -1439,14 +1439,14 @@ private void setConvertInstanceEnv(String convertEnvTmpDir, String convertEnvVir
14391439
return;
14401440
}
14411441
if (StringUtils.isNotBlank(convertEnvTmpDir) && StringUtils.isNotBlank(convertEnvVirtv2vTmpDir)) {
1442-
convertInstanceEnv = new String[2];
1443-
convertInstanceEnv[0] = String.format("%s=%s", "TMPDIR", convertEnvTmpDir);
1444-
convertInstanceEnv[1] = String.format("%s=%s", "VIRT_V2V_TMPDIR", convertEnvVirtv2vTmpDir);
1442+
convertInstanceEnv = new HashMap<>(2);
1443+
convertInstanceEnv.put("TMPDIR", convertEnvTmpDir);
1444+
convertInstanceEnv.put("VIRT_V2V_TMPDIR", convertEnvVirtv2vTmpDir);
14451445
} else {
1446-
convertInstanceEnv = new String[1];
1446+
convertInstanceEnv = new HashMap<>(1);
14471447
String key = StringUtils.isNotBlank(convertEnvTmpDir) ? "TMPDIR" : "VIRT_V2V_TMPDIR";
14481448
String value = StringUtils.isNotBlank(convertEnvTmpDir) ? convertEnvTmpDir : convertEnvVirtv2vTmpDir;
1449-
convertInstanceEnv[0] = String.format("%s=%s", key, value);
1449+
convertInstanceEnv.put(key, value);
14501450
}
14511451
}
14521452

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@
2222
import java.nio.charset.Charset;
2323
import java.util.Arrays;
2424
import java.util.List;
25+
import java.util.Map;
2526
import java.util.UUID;
2627

2728
import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
29+
import org.apache.commons.collections4.MapUtils;
2830
import org.apache.commons.lang3.StringUtils;
2931

3032
import com.cloud.agent.api.Answer;
@@ -244,7 +246,12 @@ protected boolean performInstanceConversion(String originalVMName, String source
244246

245247
String logPrefix = String.format("(%s) virt-v2v ovf source: %s progress", originalVMName, sourceOVFDirPath);
246248
OutputInterpreter.LineByLineOutputLogger outputLogger = new OutputInterpreter.LineByLineOutputLogger(logger, logPrefix);
247-
script.execute(outputLogger);
249+
Map<String, String> convertInstanceEnv = serverResource.getConvertInstanceEnv();
250+
if (MapUtils.isEmpty(convertInstanceEnv)) {
251+
script.execute(outputLogger);
252+
} else {
253+
script.execute(outputLogger, convertInstanceEnv);
254+
}
248255
int exitValue = script.getExitValue();
249256
return exitValue == 0;
250257
}

utils/src/main/java/com/cloud/utils/script/Script.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.util.Arrays;
3232
import java.util.HashSet;
3333
import java.util.List;
34+
import java.util.Map;
3435
import java.util.Properties;
3536
import java.util.Set;
3637
import java.util.concurrent.Callable;
@@ -44,6 +45,7 @@
4445
import java.util.concurrent.atomic.AtomicReference;
4546
import java.util.stream.Collectors;
4647

48+
import org.apache.commons.collections4.MapUtils;
4749
import org.apache.commons.collections.CollectionUtils;
4850
import org.apache.commons.io.IOUtils;
4951
import org.apache.logging.log4j.LogManager;
@@ -243,6 +245,14 @@ static String stackTraceAsString(Throwable throwable) {
243245
}
244246

245247
public String execute(OutputInterpreter interpreter) {
248+
return executeInternal(interpreter, null);
249+
}
250+
251+
public String execute(OutputInterpreter interpreter, Map<String, String> environment) {
252+
return executeInternal(interpreter, environment);
253+
}
254+
255+
private String executeInternal(OutputInterpreter interpreter, Map<String, String> environment) {
246256
String[] command = _command.toArray(new String[_command.size()]);
247257
String commandLine = buildCommandLine(command);
248258
if (_logger.isDebugEnabled() ) {
@@ -254,11 +264,19 @@ public String execute(OutputInterpreter interpreter) {
254264

255265
ProcessBuilder pb = new ProcessBuilder(command);
256266
pb.redirectErrorStream(true);
257-
if (_workDir != null)
267+
268+
if (MapUtils.isNotEmpty(environment)) {
269+
Map<String, String> processEnvironment = pb.environment();
270+
processEnvironment.putAll(environment);
271+
}
272+
273+
if (_workDir != null) {
258274
pb.directory(new File(_workDir));
275+
}
259276

260277
_logger.trace(String.format("Starting process for command [%s].", commandLine));
261278
_process = pb.start();
279+
262280
if (_process == null) {
263281
_logger.warn(String.format("Unable to execute command [%s] because no process was created.", commandLine));
264282
return "Unable to execute the command: " + command[0];

0 commit comments

Comments
 (0)