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 <[email protected]> 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>
