use of com.walmartlabs.concord.runtime.v2.runner.InjectorFactory in project concord by walmartlabs.
the class InjectorFactory method createDefault.
public static Injector createDefault(RunnerConfiguration runnerCfg) {
Path src = Paths.get(System.getProperty("user.dir"));
Provider<ProcessConfiguration> processCfgProvider = new DefaultProcessConfigurationProvider(src);
WorkingDirectory workDir = new WorkingDirectory(src);
return new InjectorFactory(workDir, runnerCfg, processCfgProvider, // bind default services
new DefaultRunnerModule(), // grab process dependencies
new ProcessDependenciesModule(workDir.getValue(), runnerCfg.dependencies(), runnerCfg.debug())).create();
}
use of com.walmartlabs.concord.runtime.v2.runner.InjectorFactory in project concord by walmartlabs.
the class MainTest method run.
private byte[] run(RunnerConfiguration baseCfg) throws Exception {
assertNotNull(processConfiguration, "save() the process configuration first");
ImmutableRunnerConfiguration.Builder runnerCfg = RunnerConfiguration.builder().logging(LoggingConfiguration.builder().segmentedLogs(false).build());
if (baseCfg != null) {
runnerCfg.from(baseCfg);
}
runnerCfg.agentId(UUID.randomUUID().toString()).api(ApiConfiguration.builder().baseUrl(// TODO make optional?
"http://localhost:8001").build());
PrintStream oldOut = System.out;
ByteArrayOutputStream logStream = new ByteArrayOutputStream();
PrintStream out = new PrintStream(logStream);
System.setOut(out);
AbstractModule runtimeModule = new AbstractModule() {
@Override
protected void configure() {
bind(DefaultTaskVariablesService.class).toProvider(new DefaultTaskVariablesProvider(processConfiguration));
bind(RunnerLogger.class).toProvider(LoggerProvider.class);
bind(LoggingClient.class).to(TestLoggingClient.class);
}
};
byte[] log;
try {
Injector injector = new InjectorFactory(new WorkingDirectory(workDir), runnerCfg.build(), () -> processConfiguration, testServices, runtimeModule).create();
injector.getInstance(Main.class).execute();
} finally {
out.flush();
System.setOut(oldOut);
log = logStream.toByteArray();
System.out.write(log, 0, log.length);
lastLog = log;
}
if (allLogs == null) {
allLogs = log;
} else {
// append the current log to allLogs
ByteArrayOutputStream baos = new ByteArrayOutputStream(allLogs.length + log.length);
baos.write(allLogs);
baos.write(log);
allLogs = baos.toByteArray();
}
return log;
}
use of com.walmartlabs.concord.runtime.v2.runner.InjectorFactory in project concord by walmartlabs.
the class Run method call.
@Override
public Integer call() throws Exception {
sourceDir = sourceDir.normalize().toAbsolutePath();
Path targetDir;
if (Files.isRegularFile(sourceDir)) {
Path src = sourceDir.toAbsolutePath();
System.out.println("Running a single Concord file: " + src);
targetDir = Files.createTempDirectory("payload");
Files.copy(src, targetDir.resolve("concord.yml"), StandardCopyOption.REPLACE_EXISTING);
} else if (Files.isDirectory(sourceDir)) {
targetDir = sourceDir.resolve("target");
if (cleanup && Files.exists(targetDir)) {
if (verbose) {
System.out.println("Cleaning target directory");
}
IOUtils.deleteRecursively(targetDir);
}
// copy everything into target except target
IOUtils.copy(sourceDir, targetDir, "^target$", new CopyNotifier(verbose ? 0 : 100), StandardCopyOption.REPLACE_EXISTING);
} else {
throw new IllegalArgumentException("Not a directory or single Concord YAML file: " + sourceDir);
}
DependencyManager dependencyManager = initDependencyManager();
ImportManager importManager = new ImportManagerFactory(dependencyManager, new CliRepositoryExporter(repoCacheDir), Collections.emptySet()).create();
ProjectLoaderV2.Result loadResult;
try {
loadResult = new ProjectLoaderV2(importManager).load(targetDir, new CliImportsNormalizer(importsSource, verbose, defaultVersion), verbose ? new CliImportsListener() : null);
} catch (ImportProcessingException e) {
ObjectMapper om = new ObjectMapper();
System.err.println("Error while processing import " + om.writeValueAsString(e.getImport()) + ": " + e.getMessage());
return -1;
} catch (Exception e) {
System.err.println("Error while loading " + targetDir);
e.printStackTrace();
return -1;
}
ProcessDefinition processDefinition = loadResult.getProjectDefinition();
UUID instanceId = UUID.randomUUID();
if (verbose && !extraVars.isEmpty()) {
System.out.println("Additional variables: " + extraVars);
}
if (verbose && !profiles.isEmpty()) {
System.out.println("Active profiles: " + profiles);
}
ProcessConfiguration cfg = from(processDefinition.configuration()).entryPoint(entryPoint).instanceId(instanceId).build();
RunnerConfiguration runnerCfg = RunnerConfiguration.builder().dependencies(new DependencyResolver(dependencyManager, verbose).resolveDeps(processDefinition)).debug(cfg.debug()).build();
Map<String, Object> profileArgs = getProfilesArguments(processDefinition, profiles);
Map<String, Object> args = ConfigurationUtils.deepMerge(cfg.arguments(), profileArgs, extraVars);
if (verbose) {
System.out.println("Process arguments: " + args);
}
args.put(Constants.Context.TX_ID_KEY, instanceId.toString());
args.put(Constants.Context.WORK_DIR_KEY, targetDir.toAbsolutePath().toString());
if (effectiveYaml) {
Map<String, List<Step>> flows = new HashMap<>(processDefinition.flows());
for (String ap : profiles) {
Profile p = processDefinition.profiles().get(ap);
if (p != null) {
flows.putAll(p.flows());
}
}
ProcessDefinition pd = ProcessDefinition.builder().from(processDefinition).configuration(ProcessDefinitionConfiguration.builder().from(processDefinition.configuration()).arguments(args).build()).flows(flows).imports(Imports.builder().build()).profiles(Collections.emptyMap()).build();
ProjectSerializerV2 serializer = new ProjectSerializerV2();
serializer.write(pd, System.out);
return 0;
}
System.out.println("Starting...");
Injector injector = new InjectorFactory(new WorkingDirectory(targetDir), runnerCfg, () -> cfg, new ProcessDependenciesModule(targetDir, runnerCfg.dependencies(), cfg.debug()), new CliServicesModule(secretStoreDir, targetDir, new VaultProvider(vaultDir, vaultId), dependencyManager)).create();
Runner runner = injector.getInstance(Runner.class);
if (cfg.debug()) {
System.out.println("Available tasks: " + injector.getInstance(TaskProviders.class).names());
}
try {
runner.start(cfg, processDefinition, args);
} catch (Exception e) {
if (verbose) {
System.err.print("Error: ");
e.printStackTrace(System.err);
} else {
System.err.println("Error: " + e.getMessage());
}
return 1;
}
System.out.println("...done!");
return 0;
}
Aggregations