use of org.jboss.as.cli.Attachments in project wildfly-core by wildfly.
the class DeployArchiveCommand method execute.
public CommandResult execute(CommandContext ctx) throws CommandException {
checkArgument();
Attachments attachments = new Attachments();
try {
ModelNode request = buildRequest(ctx, attachments);
// if script had no server-side commands, just return
if (!request.get("steps").isDefined()) {
return CommandResult.SUCCESS;
}
OperationBuilder op = new OperationBuilder(request, true);
for (String f : attachments.getAttachedFiles()) {
op.addFileAsAttachment(new File(f));
}
ModelNode result;
try (Operation operation = op.build()) {
result = ctx.getModelControllerClient().execute(operation);
}
if (!Util.isSuccess(result)) {
throw new CommandException(Util.getFailureDescription(result));
}
} catch (IOException e) {
throw new CommandException("Failed to deploy archive", e);
} catch (CommandFormatException ex) {
throw new CommandException(ex);
} finally {
attachments.done();
}
return CommandResult.SUCCESS;
}
use of org.jboss.as.cli.Attachments in project wildfly-core by wildfly.
the class DeployArchiveCommand method buildRequest.
/**
* null attachments means that the command is in a batch, non null means
* command executed.
*
* Inside a batch, the attachments must be added to the existing batch and
* NOT to the temporary batch created to build the composite request.
* Outside of a batch, the attachments MUST be added to the passed non null
* attachments.
*
* @param context
* @param attachments
* @return
* @throws CommandFormatException
*/
@Override
public ModelNode buildRequest(CommandContext context, Attachments attachments) throws CommandFormatException {
CommandContext ctx = context;
TempFileProvider tempFileProvider;
MountHandle root;
try {
String name = "cli-" + System.currentTimeMillis();
tempFileProvider = TempFileProvider.create(name, Executors.newSingleThreadScheduledExecutor((r) -> new Thread(r, "CLI (un)deploy archive tempFile")), true);
root = extractArchive(file, tempFileProvider, name);
} catch (IOException e) {
e.printStackTrace();
throw new OperationFormatException("Unable to extract archive '" + file.getAbsolutePath() + "' to temporary location");
}
Consumer<Attachments> cl = (a) -> {
VFSUtils.safeClose(root, tempFileProvider);
};
if (attachments != null) {
attachments.addConsumer(cl);
}
final File currentDir = ctx.getCurrentDir();
ctx.setCurrentDir(root.getMountSource());
String holdbackBatch = activateNewBatch(ctx);
try {
if (script == null) {
script = getDefaultScript();
}
File scriptFile = new File(ctx.getCurrentDir(), script);
if (!scriptFile.exists()) {
throw new CommandFormatException("ERROR: script '" + script + "' not found.");
}
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(scriptFile));
String line = reader.readLine();
while (!ctx.isTerminated() && line != null) {
context.handle(line);
line = reader.readLine();
}
} catch (FileNotFoundException e) {
throw new CommandFormatException("ERROR: script '" + script + "' not found.");
} catch (IOException e) {
throw new CommandFormatException("Failed to read the next command from " + scriptFile.getName() + ": " + e.getMessage(), e);
} catch (CommandLineException ex) {
throw new CommandFormatException(ex);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}
return ctx.getBatchManager().getActiveBatch().toRequest();
} catch (CommandFormatException cfex) {
cl.accept(attachments);
throw cfex;
} finally {
// reset current dir in context
ctx.setCurrentDir(currentDir);
discardBatch(ctx, holdbackBatch, attachments, cl);
}
}
use of org.jboss.as.cli.Attachments in project wildfly-core by wildfly.
the class DeployArchiveCommand method discardBatch.
static void discardBatch(CommandContext ctx, String holdbackBatch, Attachments attachments, Consumer<Attachments> listener) {
BatchManager batchManager = ctx.getBatchManager();
// Get the files attached by the CLI script.
// Must then add them to the passed attachemnts if non null.
// If null, then we should have an heldback batch to which we need to add them
Attachments archiveAttachments = batchManager.getActiveBatch().getAttachments();
if (attachments != null) {
for (String f : archiveAttachments.getAttachedFiles()) {
attachments.addFileAttachment(f);
}
}
batchManager.discardActiveBatch();
if (holdbackBatch != null) {
batchManager.activateHeldbackBatch(holdbackBatch);
Attachments activeAttachments = batchManager.getActiveBatch().getAttachments();
// that have been transfered when creating the archive batch.
for (int i = activeAttachments.getAttachedFiles().size(); i < archiveAttachments.getAttachedFiles().size(); i++) {
activeAttachments.addFileAttachment(archiveAttachments.getAttachedFiles().get(i));
}
activeAttachments.addConsumer(listener);
}
}
use of org.jboss.as.cli.Attachments in project wildfly-core by wildfly.
the class CommandContextImpl method handleOperation.
private void handleOperation(ParsedCommandLine parsedLine) throws CommandFormatException, CommandLineException {
if (isBatchMode()) {
String line = parsedLine.getOriginalLine();
Batch batch = getBatchManager().getActiveBatch();
final ModelNode request = Util.toOperationRequest(this, parsedLine, batch.getAttachments());
StringBuilder op = new StringBuilder();
op.append(getNodePathFormatter().format(parsedLine.getAddress()));
op.append(line.substring(line.indexOf(':')));
DefaultBatchedCommand batchedCmd = new DefaultBatchedCommand(this, op.toString(), request, null);
batch.add(batchedCmd);
} else {
Attachments attachments = new Attachments();
final ModelNode op = Util.toOperationRequest(CommandContextImpl.this, parsedLine, attachments);
RequestWithAttachments req = new RequestWithAttachments(op, attachments);
set(Scope.REQUEST, "OP_REQ", req);
operationHandler.handle(this);
}
}
use of org.jboss.as.cli.Attachments in project wildfly-core by wildfly.
the class DeployArchiveCommand method activateNewBatch.
static String activateNewBatch(CommandContext ctx) {
String currentBatch = null;
BatchManager batchManager = ctx.getBatchManager();
Attachments attachments = null;
if (batchManager.isBatchActive()) {
Batch current = batchManager.getActiveBatch();
attachments = current.getAttachments();
currentBatch = "batch" + System.currentTimeMillis();
batchManager.holdbackActiveBatch(currentBatch);
}
batchManager.activateNewBatch();
Batch archiveBatch = batchManager.getActiveBatch();
// computation.
if (attachments != null) {
for (String f : attachments.getAttachedFiles()) {
archiveBatch.getAttachments().addFileAttachment(f);
}
}
return currentBatch;
}
Aggregations