use of org.apache.camel.k.Runtime in project camel-k-runtime by apache.
the class LoaderSupport method inspectSource.
public static JsonObject inspectSource(CamelContext context, String location, byte[] code) throws Exception {
final Runtime runtime = Runtime.on(context);
final RoutesLoader loader = context.adapt(ExtendedCamelContext.class).getRoutesLoader();
final Collection<RoutesBuilder> builders = loader.findRoutesBuilders(ResourceHelper.fromBytes(location, code));
for (RoutesBuilder builder : builders) {
runtime.addRoutes(builder);
}
return Json.createObjectBuilder().add("components", extractComponents(context)).add("routes", extractRoutes(context)).add("endpoints", extractEndpoints(context)).build();
}
use of org.apache.camel.k.Runtime in project camel-k-runtime by apache.
the class SourcesSupport method load.
public static void load(Runtime runtime, Source source) {
final List<RouteBuilderLifecycleStrategy> interceptors;
switch(source.getType()) {
case source:
interceptors = RuntimeSupport.loadInterceptors(runtime.getCamelContext(), source);
interceptors.forEach(interceptor -> {
if (interceptor instanceof RuntimeAware) {
((RuntimeAware) interceptor).setRuntime(runtime);
}
});
break;
case template:
if (!source.getInterceptors().isEmpty()) {
LOGGER.warn("Interceptors associated to the route template {} will be ignored", source.getName());
}
interceptors = List.of(new RouteBuilderLifecycleStrategy() {
@Override
public void afterConfigure(RouteBuilder builder) {
List<RouteDefinition> routes = builder.getRouteCollection().getRoutes();
List<RouteTemplateDefinition> templates = builder.getRouteTemplateCollection().getRouteTemplates();
if (routes.size() != 1) {
throw new IllegalArgumentException("There should be a single route definition, got " + routes.size());
}
if (!templates.isEmpty()) {
throw new IllegalArgumentException("There should not be any template, got " + templates.size());
}
// create a new template from the source
RouteTemplateDefinition templatesDefinition = builder.getRouteTemplateCollection().routeTemplate(source.getId());
templatesDefinition.setRoute(routes.get(0));
source.getPropertyNames().forEach(templatesDefinition::templateParameter);
// remove all routes definitions as they have been translated
// in the related route template
routes.clear();
}
});
break;
case errorHandler:
if (!source.getInterceptors().isEmpty()) {
LOGGER.warn("Interceptors associated to the route template {} will be ignored", source.getName());
}
interceptors = List.of(new RouteBuilderLifecycleStrategy() {
@Override
public void afterConfigure(RouteBuilder builder) {
List<RouteDefinition> routes = builder.getRouteCollection().getRoutes();
List<RouteTemplateDefinition> templates = builder.getRouteTemplateCollection().getRouteTemplates();
if (!routes.isEmpty()) {
throw new IllegalArgumentException("There should be no route definition, got " + routes.size());
}
if (!templates.isEmpty()) {
throw new IllegalArgumentException("There should not be any template, got " + templates.size());
}
if (hasErrorHandlerBuilder(builder)) {
LOGGER.debug("Setting default error handler builder factory as {}", builder.getErrorHandlerBuilder());
runtime.getCamelContext().adapt(ExtendedCamelContext.class).setErrorHandlerFactory(builder.getErrorHandlerBuilder());
}
}
});
break;
default:
throw new IllegalArgumentException("Unknown source type: " + source.getType());
}
try {
final Resource resource = Sources.asResource(runtime.getCamelContext(), source);
final ExtendedCamelContext ecc = runtime.getCamelContext(ExtendedCamelContext.class);
final Collection<RoutesBuilder> builders = ecc.getRoutesLoader().findRoutesBuilders(resource);
builders.stream().map(RouteBuilder.class::cast).peek(b -> interceptors.forEach(b::addLifecycleInterceptor)).forEach(runtime::addRoutes);
} catch (Exception e) {
throw RuntimeCamelException.wrapRuntimeCamelException(e);
}
}
use of org.apache.camel.k.Runtime in project camel-k-runtime by apache.
the class PropertiesFunctionsConfigurerTest method testKubernetesFunction.
@Test
public void testKubernetesFunction() {
Runtime runtime = Runtime.on(new DefaultCamelContext());
runtime.setProperties("my.property", "{{secret:my-secret/my-property}}");
new PropertiesConfigurer().accept(runtime);
assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{secret:my-secret/my-property}}")).isEqualTo("my-secret-property");
assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{secret:none/my-property:my-default-secret}}")).isEqualTo("my-default-secret");
CamelContext context = runtime.getCamelContext();
assertThatThrownBy(() -> context.resolvePropertyPlaceholders("{{secret:none/my-property}}")).isInstanceOf(IllegalArgumentException.class).hasMessageContaining("returned null value which is not allowed, from input");
assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{configmap:my-cm/my-property}}")).isEqualTo("my-cm-property");
assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{configmap:my-cm/my-property:my-default-cm}}")).isEqualTo("my-default-cm");
assertThatThrownBy(() -> context.resolvePropertyPlaceholders("{{configmap:none/my-property}}")).isInstanceOf(IllegalArgumentException.class).hasMessageContaining("returned null value which is not allowed, from input");
assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{my.property}}")).isEqualTo("my-secret-property");
}
use of org.apache.camel.k.Runtime in project camel-k-runtime by apache.
the class CronTest method testCronTimerActivation.
@ParameterizedTest
@MethodSource("parameters")
public void testCronTimerActivation(String code, String cronOverride) throws Exception {
final Runtime runtime = Runtime.on(new DefaultCamelContext());
runtime.getRegistry().bind("__camel_k_resolver", new CustomResolver());
final YamlRoutesBuilderLoader loader = new YamlRoutesBuilderLoader();
loader.setCamelContext(runtime.getCamelContext());
loader.start();
final CronSourceLoaderInterceptor interceptor = new CronSourceLoaderInterceptor();
interceptor.setRuntime(runtime);
interceptor.setOverridableComponents(cronOverride);
final RouteBuilder builder = (RouteBuilder) loader.loadRoutesBuilder(ResourceHelper.fromBytes("my-cron.yaml", code.getBytes(StandardCharsets.UTF_8)));
builder.addLifecycleInterceptor(interceptor);
runtime.getCamelContext().addRoutes(builder);
CountDownLatch termination = new CountDownLatch(1);
runtime.getCamelContext().addLifecycleStrategy(new LifecycleStrategySupport() {
@Override
public void onContextStopped(CamelContext context) {
termination.countDown();
}
});
MockEndpoint mock = runtime.getCamelContext().getEndpoint("mock:result", MockEndpoint.class);
mock.expectedMessageCount(1);
mock.setResultWaitTime(10000);
runtime.getCamelContext().start();
mock.assertIsSatisfied();
termination.await(10, TimeUnit.SECONDS);
assertThat(termination.getCount()).isZero();
}
use of org.apache.camel.k.Runtime in project camel-k-runtime by apache.
the class Application method load.
@GET
@Path("/load")
@Produces(MediaType.TEXT_PLAIN)
public String load() throws Exception {
final String code = "" + "\n- from:" + "\n uri: \"timer:tick?period=1&delay=60000\"" + "\n steps:" + "\n - log: \"${body}\"";
final YamlRoutesBuilderLoader loader = new YamlRoutesBuilderLoader();
loader.setCamelContext(context);
loader.build();
final Runtime rt = new DelegatingRuntime(runtime) {
@Override
public void stop() throws Exception {
stopped.set(true);
}
};
final CronSourceLoaderInterceptor interceptor = new CronSourceLoaderInterceptor();
interceptor.setRuntime(rt);
interceptor.setOverridableComponents("timer");
final RouteBuilder builder = (RouteBuilder) loader.loadRoutesBuilder(ResourceHelper.fromBytes("my-cron.yaml", code.getBytes(StandardCharsets.UTF_8)));
builder.addLifecycleInterceptor(interceptor);
try {
context.addRoutes(builder);
} catch (Exception e) {
throw new RuntimeException(e);
}
return "" + context.getRoutesSize();
}
Aggregations