You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2023/07/04 15:18:27 UTC
[camel-karavan] 03/03: JBANG_OPTIONS for #757
This is an automated email from the ASF dual-hosted git repository.
marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
commit 75732c34c1149139c1ca67d0cad3b562067704ae
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Tue Jul 4 11:18:15 2023 -0400
JBANG_OPTIONS for #757
---
.../java/org/apache/camel/karavan/api/RunnerResource.java | 12 ++++++++++--
.../apache/camel/karavan/service/KubernetesService.java | 7 ++++---
karavan-app/src/main/webui/src/api/KaravanApi.tsx | 4 ++--
karavan-app/src/main/webui/src/api/ProjectService.ts | 4 ++--
karavan-app/src/main/webui/src/project/RunnerToolbar.tsx | 14 +++++++++++---
5 files changed, 29 insertions(+), 12 deletions(-)
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/api/RunnerResource.java b/karavan-app/src/main/java/org/apache/camel/karavan/api/RunnerResource.java
index 52f985bc..b728f7f4 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/api/RunnerResource.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/api/RunnerResource.java
@@ -57,17 +57,25 @@ public class RunnerResource {
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
- public Response runProject(Project project) {
+ @Path("/{jBangOptions}")
+ public Response runProjectWithJBangOptions(Project project, @PathParam("jBangOptions") String jBangOptions) {
String runnerName = project.getProjectId() + "-" + RUNNER_SUFFIX;
String status = infinispanService.getRunnerStatus(runnerName, RunnerStatus.NAME.context);
if (status == null) {
Project p = infinispanService.getProject(project.getProjectId());
infinispanService.saveRunnerStatus(runnerName, STATUS_NEED_INITIAL_LOAD, STATUS_NEED_INITIAL_LOAD);
- return Response.ok(kubernetesService.tryCreateRunner(p, runnerName)).build();
+ return Response.ok(kubernetesService.tryCreateRunner(p, runnerName, jBangOptions)).build();
}
return Response.notModified().build();
}
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Response runProject(Project project) {
+ return runProjectWithJBangOptions(project, "");
+ }
+
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/reload/{projectId}")
diff --git a/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java b/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
index d5b3b7e1..cc538db7 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/KubernetesService.java
@@ -386,14 +386,14 @@ public class KubernetesService implements HealthCheck{
return result;
}
- public String tryCreateRunner(Project project, String runnerName) {
+ public String tryCreateRunner(Project project, String runnerName, String jBangOptions) {
createPVC(runnerName);
Pod old = kubernetesClient().pods().inNamespace(getNamespace()).withName(runnerName).get();
if (old == null) {
ProjectFile properties = infinispanService.getProjectFile(project.getProjectId(), APPLICATION_PROPERTIES_FILENAME);
Map<String,String> containerResources = ServiceUtil
.getRunnerContainerResourcesMap(properties, isOpenshift(), project.getRuntime().equals("quarkus"));
- Pod pod = getRunnerPod(project.getProjectId(), runnerName, containerResources);
+ Pod pod = getRunnerPod(project.getProjectId(), runnerName, jBangOptions, containerResources);
Pod result = kubernetesClient().resource(pod).createOrReplace();
LOGGER.info("Created pod " + result.getMetadata().getName());
}
@@ -423,7 +423,7 @@ public class KubernetesService implements HealthCheck{
.build();
}
- private Pod getRunnerPod(String projectId, String name, Map<String,String> containerResources) {
+ private Pod getRunnerPod(String projectId, String name, String jbangOptions, Map<String,String> containerResources) {
Map<String,String> labels = new HashMap<>();
labels.putAll(getRuntimeLabels());
labels.putAll(getKaravanRunnerLabels(name));
@@ -449,6 +449,7 @@ public class KubernetesService implements HealthCheck{
.withPorts(port)
.withResources(resources)
.withImagePullPolicy("Always")
+ .withEnv(new EnvVarBuilder().withName("JBANG_OPTIONS").withValue(jbangOptions).build())
.withVolumeMounts(
new VolumeMountBuilder().withName(name).withMountPath("/karavan/.jbang/cache").build(),
new VolumeMountBuilder().withName("maven-settings").withSubPath("maven-settings.xml")
diff --git a/karavan-app/src/main/webui/src/api/KaravanApi.tsx b/karavan-app/src/main/webui/src/api/KaravanApi.tsx
index f29f453b..c4358fd5 100644
--- a/karavan-app/src/main/webui/src/api/KaravanApi.tsx
+++ b/karavan-app/src/main/webui/src/api/KaravanApi.tsx
@@ -330,8 +330,8 @@ export class KaravanApi {
});
}
- static async runProject(project: Project, after: (res: AxiosResponse<string>) => void) {
- instance.post('/api/runner', project)
+ static async runProject(project: Project, verbose: boolean, after: (res: AxiosResponse<string>) => void) {
+ instance.post('/api/runner' + (verbose ? '/-verbose' : ''), project)
.then(res => {
after(res);
}).catch(err => {
diff --git a/karavan-app/src/main/webui/src/api/ProjectService.ts b/karavan-app/src/main/webui/src/api/ProjectService.ts
index f4bb71ec..204a9cf2 100644
--- a/karavan-app/src/main/webui/src/api/ProjectService.ts
+++ b/karavan-app/src/main/webui/src/api/ProjectService.ts
@@ -15,9 +15,9 @@ import {ProjectEventBus} from "./ProjectEventBus";
export class ProjectService {
- public static startRunner(project: Project) {
+ public static startRunner(project: Project, verbose: boolean) {
useRunnerStore.setState({status: "starting"})
- KaravanApi.runProject(project, res => {
+ KaravanApi.runProject(project, verbose, res => {
if (res.status === 200 || res.status === 201) {
ProjectEventBus.sendLog("set", '');
useLogStore.setState({showLog: true, type: 'container', podName: res.data})
diff --git a/karavan-app/src/main/webui/src/project/RunnerToolbar.tsx b/karavan-app/src/main/webui/src/project/RunnerToolbar.tsx
index 1594c7c0..6d2f0d11 100644
--- a/karavan-app/src/main/webui/src/project/RunnerToolbar.tsx
+++ b/karavan-app/src/main/webui/src/project/RunnerToolbar.tsx
@@ -1,6 +1,6 @@
-import React from 'react';
+import React, {useState} from 'react';
import {
- Button, FlexItem,
+ Button, FlexItem, Switch,
Tooltip,
TooltipPosition
} from '@patternfly/react-core';
@@ -21,6 +21,7 @@ export const RunnerToolbar = (props: Props) => {
const [status] = useRunnerStore((state) => [state.status], shallow )
const [project] = useProjectStore((state) => [state.project], shallow )
+ const [verbose, setVerbose] = useState(false);
const isRunning = status === "running";
const isStartingPod = status === "starting";
@@ -39,6 +40,13 @@ export const RunnerToolbar = (props: Props) => {
</Button>
</Tooltip>
</FlexItem>}
+ {!isRunning && !isReloadingPod && props.reloadOnly !== true && <FlexItem>
+ <Switch aria-label="refresh"
+ id="refresh"
+ isChecked={verbose}
+ onChange={checked => setVerbose(checked)}
+ />
+ </FlexItem>}
{!isRunning && !isReloadingPod && props.reloadOnly !== true && <FlexItem>
<Tooltip content="Run in development mode" position={TooltipPosition.bottom}>
<Button isLoading={isStartingPod ? true : undefined}
@@ -46,7 +54,7 @@ export const RunnerToolbar = (props: Props) => {
variant={"primary"}
className="project-button"
icon={!isStartingPod ? <RocketIcon/> : <div></div>}
- onClick={() => ProjectService.startRunner(project)}>
+ onClick={() => ProjectService.startRunner(project, verbose)}>
{isStartingPod ? "..." : "Run"}
</Button>
</Tooltip>