/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.emc.sa.service.vipr.compute;
import static com.emc.sa.service.vipr.ViPRExecutionUtils.addAffectedResource;
import static com.emc.sa.service.vipr.ViPRExecutionUtils.addRollback;
import java.net.URI;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.emc.sa.engine.ExecutionContext;
import com.emc.sa.engine.ExecutionException;
import com.emc.sa.engine.ExecutionUtils;
import com.emc.sa.engine.ExecutionUtils.ViPRTaskHandler;
import com.emc.sa.engine.ViPRTaskMonitor;
import com.emc.sa.service.vipr.compute.tasks.DeactivateHost;
import com.emc.storageos.model.compute.OsInstallParam;
import com.emc.storageos.model.host.HostRestRep;
import com.emc.vipr.client.Task;
public class InstallOsHelper implements ViPRTaskHandler<HostRestRep> {
private Set<URI> successfulHostIds = new HashSet<>();
private Map<HostRestRep, OsInstallParam> hostToOsInstall;
public InstallOsHelper(Map<HostRestRep, OsInstallParam> hostToOsInstall) {
this.hostToOsInstall = hostToOsInstall;
}
public Set<URI> getSuccessfulHostIds() {
return successfulHostIds;
}
public void installOs() {
ExecutionContext context = ExecutionUtils.currentContext();
List<ViPRTaskMonitor<HostRestRep>> tasks = new ArrayList<>();
for (HostRestRep host : hostToOsInstall.keySet()) {
OsInstallParam osInstall = hostToOsInstall.get(host);
if (osInstall != null) {
try {
//tasks.add(ExecutionUtils.startViprTask(new InstallOs(host, osInstall)));
} catch (ExecutionException e) {
context.logError("computeutils.installOs.failure", host.getId(), e.getMessage());
}
}
}
if (!ExecutionUtils.waitForTask(tasks, this)) {
// TODO: Re-throw the error?
// ExecutionUtils.checkForError(tasks);
}
}
@Override
public void onSuccess(Task<HostRestRep> task, HostRestRep host) {
ExecutionUtils.currentContext().logInfo("computeutils.installOs.success", host.getHostName());
addAffectedResource(host);
addRollback(new DeactivateHost(host.getId(), true));
successfulHostIds.add(host.getId());
}
@Override
public void onFailure(Task<HostRestRep> task, ExecutionException e) {
ExecutionUtils.currentContext().logError("computeutils.installOs.installing.failure.task",
task.getResource().getName(), task.getMessage());
}
}