Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor AnsibleRunner execution #261

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -13,7 +13,7 @@
import org.ovirt.engine.core.common.action.AnsibleCommandParameters;
import org.ovirt.engine.core.common.utils.ansible.AnsibleReturnCode;
import org.ovirt.engine.core.common.utils.ansible.AnsibleReturnValue;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerHttpClient;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerClient;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerLogger;
import org.ovirt.engine.core.compat.CommandStatus;
import org.ovirt.engine.core.compat.Guid;
Expand All @@ -35,7 +35,7 @@ public class AnsibleCallback implements CommandCallback {
private CommandCoordinatorUtil commandCoordinatorUtil;

@Inject
private AnsibleRunnerHttpClient runnerClient;
private AnsibleRunnerClient runnerClient;

@Inject
private VdsDao vdsDao;
Expand All @@ -62,18 +62,14 @@ public void doPolling(Guid cmdId, List<Guid> childCmdIds) {
AnsibleReturnValue ret = new AnsibleReturnValue(AnsibleReturnCode.ERROR);
ret.setLogFile(runnerClient.getLogger().getLogFile());
String msg = "";
int totalEvents;
// Get the current status of the playbook:
AnsibleRunnerHttpClient.PlaybookStatus playbookStatus = runnerClient.getPlaybookStatus(playUuid);
AnsibleRunnerClient.PlaybookStatus playbookStatus = runnerClient.getPlaybookStatus(playUuid);
String status = playbookStatus.getStatus();
msg = playbookStatus.getMsg();
// Process the events if the playbook is running:
totalEvents = runnerClient.getTotalEvents(playUuid);

if (msg.equalsIgnoreCase("running") || msg.equalsIgnoreCase("successful")
&& command.getParameters().getLastEventId() < totalEvents) {
if (msg.equalsIgnoreCase("running")) {
command.getParameters().setLastEventId(runnerClient.processEvents(
playUuid, command.getParameters().getLastEventId(), fn, msg, ret.getLogFile()));
playUuid, fn));
return;
} else if (msg.equalsIgnoreCase("successful")) {
log.info("Playbook (Play uuid = {}, command = {}) has completed!",
Expand Down
Expand Up @@ -17,7 +17,7 @@
import org.ovirt.engine.core.common.utils.ansible.AnsibleExecutor;
import org.ovirt.engine.core.common.utils.ansible.AnsibleReturnCode;
import org.ovirt.engine.core.common.utils.ansible.AnsibleReturnValue;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerHttpClient;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerClient;
import org.ovirt.engine.core.compat.CommandStatus;

public abstract class AnsibleCommandBase <T extends AnsibleCommandParameters> extends CommandBase<T> {
Expand All @@ -26,7 +26,7 @@ public abstract class AnsibleCommandBase <T extends AnsibleCommandParameters> ex
private AnsibleExecutor ansibleExecutor;

@Inject
private AnsibleRunnerHttpClient runnerClient;
private AnsibleRunnerClient runnerClient;

@Inject
@Typed(AnsibleCallback.class)
Expand Down
Expand Up @@ -13,14 +13,14 @@
import org.ovirt.engine.core.common.errors.EngineException;
import org.ovirt.engine.core.common.utils.ansible.AnsibleCommandConfig;
import org.ovirt.engine.core.common.utils.ansible.AnsibleConstants;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerHttpClient;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerClient;

@NonTransactiveCommandAttribute
public class AnsibleImageMeasureCommand <T extends AnsibleImageMeasureCommandParameters> extends AnsibleCommandBase<T> {
public static final Pattern DISK_TARGET_SIZE_PATTERN = Pattern.compile("required size: ([0-9]+).*", Pattern.DOTALL);

@Inject
private AnsibleRunnerHttpClient runnerClient;
private AnsibleRunnerClient runnerClient;

public AnsibleImageMeasureCommand(T parameters, CommandContext cmdContext) {
super(parameters, cmdContext);
Expand Down
Expand Up @@ -21,7 +21,7 @@
import org.ovirt.engine.core.common.utils.ansible.AnsibleExecutor;
import org.ovirt.engine.core.common.utils.ansible.AnsibleReturnCode;
import org.ovirt.engine.core.common.utils.ansible.AnsibleReturnValue;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerHttpClient;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerClient;
import org.ovirt.engine.core.dao.VdsDao;
import org.ovirt.engine.core.utils.EngineLocalConfig;

Expand All @@ -32,7 +32,7 @@ public abstract class GetFromOvaQuery <T, P extends GetVmFromOvaQueryParameters>
@Inject
private AnsibleExecutor ansibleExecutor;
@Inject
private AnsibleRunnerHttpClient runnerClient;
private AnsibleRunnerClient runnerClient;

public GetFromOvaQuery(P parameters, EngineContext engineContext) {
super(parameters, engineContext);
Expand Down
Expand Up @@ -32,7 +32,7 @@
import org.ovirt.engine.core.common.utils.ansible.AnsibleExecutor;
import org.ovirt.engine.core.common.utils.ansible.AnsibleReturnCode;
import org.ovirt.engine.core.common.utils.ansible.AnsibleReturnValue;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerHttpClient;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerClient;
import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
import org.ovirt.engine.core.compat.CommandStatus;
import org.ovirt.engine.core.compat.Guid;
Expand All @@ -50,7 +50,7 @@ public class ExtractOvaCommand<T extends ConvertOvaParameters> extends VmCommand
@Inject
private AnsibleExecutor ansibleExecutor;
@Inject
private AnsibleRunnerHttpClient runnerClient;
private AnsibleRunnerClient runnerClient;
@Inject
private VmHandler vmHandler;
@Inject
Expand Down
Expand Up @@ -24,7 +24,7 @@
import org.ovirt.engine.core.common.utils.ansible.AnsibleExecutor;
import org.ovirt.engine.core.common.utils.ansible.AnsibleReturnCode;
import org.ovirt.engine.core.common.utils.ansible.AnsibleReturnValue;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerHttpClient;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerClient;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableImpl;
Expand All @@ -51,7 +51,7 @@ public class HostUpgradeManager implements UpdateAvailable, Updateable {
private AnsibleExecutor ansibleExecutor;

@Inject
private AnsibleRunnerHttpClient runnerClient;
private AnsibleRunnerClient runnerClient;

@Inject
private ClusterDao clusterDao;
Expand Down
Expand Up @@ -49,7 +49,7 @@
import org.ovirt.engine.core.common.utils.ansible.AnsibleExecutor;
import org.ovirt.engine.core.common.utils.ansible.AnsibleReturnCode;
import org.ovirt.engine.core.common.utils.ansible.AnsibleReturnValue;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerHttpClient;
import org.ovirt.engine.core.common.utils.ansible.AnsibleRunnerClient;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogable;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableImpl;
Expand Down Expand Up @@ -91,7 +91,7 @@ public class InstallVdsInternalCommand<T extends InstallVdsParameters> extends V
private AnsibleExecutor ansibleExecutor;

@Inject
private AnsibleRunnerHttpClient runnerClient;
private AnsibleRunnerClient runnerClient;

@Inject
private NetworkHelper networkHelper;
Expand Down
Expand Up @@ -9,9 +9,9 @@ public class AnsibleClientFactory {
@Inject
private AnsibleCommandLogFileFactory ansibleCommandLogFileFactory;

public AnsibleRunnerHttpClient create(AnsibleCommandConfig command) {
public AnsibleRunnerClient create(AnsibleCommandConfig command) {
AnsibleRunnerLogger runnerLogger = ansibleCommandLogFileFactory.create(command);
AnsibleRunnerHttpClient client = new AnsibleRunnerHttpClient();
AnsibleRunnerClient client = new AnsibleRunnerClient();
client.setLogger(runnerLogger);
return client;
}
Expand Down
Expand Up @@ -279,8 +279,8 @@ public List<String> build() {
}

private File setupAnsibleRunnerExecutionDir() throws IOException {
File tempProject = new File(String.format("%1$s/%2$s/", AnsibleConstants.ANSIBLE_RUNNER_PATH, this.uuid));
tempProject.mkdirs();
File privateDataDir = new File(String.format("%1$s/%2$s/", AnsibleConstants.ANSIBLE_RUNNER_PATH, this.uuid));
privateDataDir.mkdirs();

File env = new File(String.format("%1$s/%2$s/env", AnsibleConstants.ANSIBLE_RUNNER_PATH, this.uuid));
env.mkdir();
Expand All @@ -290,7 +290,7 @@ private File setupAnsibleRunnerExecutionDir() throws IOException {
EngineLocalConfig.getInstance().getPKIDir().toString(),
"/keys/engine_id_rsa");
Path linkToEngineSshKey = Paths.get(
tempProject.toString(),
privateDataDir.toString(),
"/env/ssh_key");
Files.createSymbolicLink(linkToEngineSshKey, engineSshKey);

Expand All @@ -303,7 +303,7 @@ private File setupAnsibleRunnerExecutionDir() throws IOException {
// Create a host inventory file in project inventory/host, which will be passed to the playbook by ansible-runner.
createHostFile(inventory);

return tempProject;
return privateDataDir;
}

private void createHostFile(File inventory) {
Expand Down
Expand Up @@ -147,11 +147,9 @@ public AnsibleReturnValue runCommand(AnsibleCommandConfig commandConfig, int tim
}

AnsibleReturnValue ret = new AnsibleReturnValue(AnsibleReturnCode.ERROR);
int lastEventId = 0;

String playUuid = null;
String msg = "";
AnsibleRunnerHttpClient runnerClient = null;
AnsibleRunnerClient runnerClient = null;
try {
runnerClient = ansibleClientFactory.create(commandConfig);
playUuid = commandConfig.getUuid().toString();
Expand All @@ -160,15 +158,15 @@ public AnsibleReturnValue runCommand(AnsibleCommandConfig commandConfig, int tim
List<String> command = commandConfig.build();

// Run the playbook:
runnerClient.runPlaybook(command, timeout);
runnerClient.runPlaybook(command, timeout, playUuid);

if (async) {
ret.setPlayUuid(playUuid);
ret.setAnsibleReturnCode(AnsibleReturnCode.OK);
return ret;
}

ret = runnerClient.artifactHandler(commandConfig.getUuid(), lastEventId, timeout, fn);
ret = runnerClient.artifactHandler(commandConfig.getUuid(), timeout, fn);
} catch (InventoryException ex) {
String message = ex.getMessage();
log.error("Error executing playbook: {}", message);
Expand All @@ -182,8 +180,7 @@ public AnsibleReturnValue runCommand(AnsibleCommandConfig commandConfig, int tim
} finally {
// Make sure all events are proccessed even in case of failure:
if (playUuid != null && runnerClient != null && !async) {
lastEventId = runnerClient.getLastEventId();
runnerClient.processEvents(playUuid, lastEventId, fn, msg, ret.getLogFile());
runnerClient.processEvents(playUuid, fn);
}
}

Expand Down