Skip to content

Commit

Permalink
Custom kamelets (#117)
Browse files Browse the repository at this point in the history
* Load custom Kamelets

* Fixed #114
  • Loading branch information
mgubaidullin committed Nov 23, 2021
1 parent f92e6b7 commit 54b821e
Show file tree
Hide file tree
Showing 10 changed files with 51 additions and 14 deletions.
2 changes: 1 addition & 1 deletion karavan-app/src/main/docker/Dockerfile.distroless
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
# limitations under the License.
FROM gcr.io/distroless/java:11
COPY target/*-runner.jar /deployments/karavan.jar
COPY src/main/resources/kamelets/* /deployments/kamelets/
COPY src/main/resources/kamelets/* /deployments/kamelets-buildin/
COPY src/main/resources/components/* /deployments/components/
WORKDIR /deployments
CMD ["karavan.jar"]
3 changes: 2 additions & 1 deletion karavan-app/src/main/docker/Dockerfile.legacy-jar
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \

# Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size.
ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
COPY src/main/resources/kamelets/* /deployments/kamelets/
COPY src/main/resources/kamelets/* /deployments/kamelets-buildin/
COPY src/main/resources/components/* /deployments/components/
COPY target/*-runner.jar /deployments/app.jar

EXPOSE 8080
Expand Down
2 changes: 1 addition & 1 deletion karavan-app/src/main/docker/Dockerfile.multistage
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ RUN ./mvnw clean package -Pnative -f karavan-app
## Stage 2 : create the docker final image
FROM quay.io/quarkus/quarkus-distroless-image:1.0
COPY --chown=nonroot --from=build /code/karavan-app/target/*-runner /deployments/application
COPY --chown=nonroot --from=build /code/karavan-app/src/main/resources/kamelets/* /deployments/kamelets/
COPY --chown=nonroot --from=build /code/karavan-app/src/main/resources/kamelets/* /deployments/kamelets-buildin/
COPY --chown=nonroot --from=build /code/karavan-app/src/main/resources/components/* /deployments/components/

EXPOSE 8080
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,36 @@
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;

@Path("/kamelet")
public class KameletResources {

@ConfigProperty(name = "karavan.folder.kamelets")
String kamelets;
@ConfigProperty(name = "karavan.folder.kamelets-buildin")
String kameletsBuildin;

@ConfigProperty(name = "karavan.folder.kamelets-custom")
String kameletsCustom;

@Inject
Vertx vertx;

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<String> getList() {
return vertx.fileSystem().readDirBlocking(Paths.get(kamelets).toString())
List<String> kameletList = getList(kameletsBuildin);
if (Files.exists(Paths.get(kameletsCustom))) {
List<String> customKameletList = getList(kameletsCustom);
kameletList.addAll(customKameletList);
}
return kameletList;
}

public List<String> getList(String folder) {
return vertx.fileSystem().readDirBlocking(Paths.get(folder).toString())
.stream()
.filter(s -> s.endsWith(".yaml"))
.map(s -> {
Expand All @@ -54,6 +67,10 @@ public List<String> getList() {
@Produces(MediaType.TEXT_PLAIN)
@Path("/{name}")
public String getYaml(@PathParam("name") String name) {
return vertx.fileSystem().readFileBlocking(Paths.get(kamelets, name).toString()).toString();
if (Files.exists(Paths.get(kameletsBuildin, name))) {
return vertx.fileSystem().readFileBlocking(Paths.get(kameletsBuildin, name).toString()).toString();
} else {
return vertx.fileSystem().readFileBlocking(Paths.get(kameletsCustom, name).toString()).toString();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ private void createFolder(String name) throws IOException {
LOGGER.info("Creating folder " + name);
if (!Files.exists(Paths.get(name))) {
Path path = Files.createDirectory(Path.of(name));
LOGGER.info("Folder " + path + " created");
LOGGER.info("Folder " + path.toAbsolutePath() + " created");
} else {
getIntegrationList().forEach(s -> LOGGER.info("Integration found: " + s));
}
Expand Down Expand Up @@ -80,6 +80,7 @@ public String getFile(String folder, String name) throws GitAPIException {
}

public void saveIntegrationsFile(String name, String yaml) throws GitAPIException, IOException {
System.out.println(integrations);
vertx.fileSystem().writeFileBlocking(Paths.get(integrations, name).toString(), Buffer.buffer(yaml));
}

Expand Down
3 changes: 2 additions & 1 deletion karavan-app/src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
karavan.version=0.0.7

karavan.folder.kamelets=kamelets
karavan.folder.components=components
karavan.folder.kamelets-buildin=kamelets-buildin
karavan.folder.kamelets-custom=kamelets

karavan.mode=local
karavan.folder.integrations=integrations
Expand Down
1 change: 0 additions & 1 deletion karavan-app/src/main/webapp/src/Main.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,6 @@ export class Main extends React.Component<Props, State> {
this.onGetIntegrations();
}
this.setState({
isNavOpen: result.itemId !== 'designer',
pageId: result.itemId,
});
};
Expand Down
11 changes: 8 additions & 3 deletions karavan-designer/src/designer/api/KameletApi.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,12 @@ export const KameletApi = {
},

getKamelets: (): KameletModel[] => {
return Kamelets;
return Kamelets.sort((a, b) => {
if (a.title().toLowerCase() < b.title().toLowerCase()) {
return -1;
}
return a.title().toLowerCase() > b.title().toLowerCase() ? 1 : 0;
});
},

jsonToKamelet: (json: string) => {
Expand All @@ -73,10 +78,10 @@ export const KameletApi = {
saveKamelets: (kameletYamls: string[]) => {
const kamelets:KameletModel[] = kameletYamls.map(text => KameletApi.yamlToKamelet(text));
Kamelets.push(...kamelets.sort((a, b) => {
if (a.spec.definition.title < b.spec.definition.title) {
if (a.spec.definition.title.toLowerCase() < b.spec.definition.title.toLowerCase()) {
return -1;
}
return a.spec.definition.title > b.spec.definition.title ? 1 : 0;
return a.spec.definition.title.toLowerCase() > b.spec.definition.title.toLowerCase() ? 1 : 0;
})
);
},
Expand Down
5 changes: 5 additions & 0 deletions karavan-vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@
"type": "boolean",
"default": "true",
"description": "Reload routes on change"
},
"Karavan.kameletsPath": {
"type": "string",
"default": "",
"description": "Custom Kamelets Path"
}
}
},
Expand Down
10 changes: 9 additions & 1 deletion karavan-vscode/src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { CamelYaml } from "../designer/api/CamelYaml";
import { CamelUi } from "../designer/api/CamelUi";
import * as jsyaml from 'js-yaml';
import { Integration } from "../designer/model/CamelModel";
import { homedir } from "os";

const KARAVAN_LOADED = "karavan:loaded";
const KARAVAN_PANELS: Map<any, string> = new Map<string, string>();
Expand Down Expand Up @@ -131,7 +132,6 @@ function openKaravanWebView(context: vscode.ExtensionContext, webviewContent: st
// Handle messages from the webview
panel.webview.onDidReceiveMessage(
message => {
console.log(message);
switch (message.command) {
case 'save':
if (vscode.workspace.workspaceFolders) {
Expand Down Expand Up @@ -179,6 +179,14 @@ function createIntegration(context: vscode.ExtensionContext, webviewContent: str
function readKamelets(context: vscode.ExtensionContext): string[] {
const dir = path.join(context.extensionPath, 'kamelets');
const yamls: string[] = fs.readdirSync(dir).filter(file => file.endsWith("yaml")).map(file => fs.readFileSync(dir + "/" + file, 'utf-8'));
try {
const kameletsPath:string = vscode.workspace.getConfiguration().get("Karavan.kameletsPath") || '';
const kameletsDir = path.isAbsolute(kameletsPath) ? kameletsPath : path.resolve(kameletsPath);
const customKamelets: string[] = fs.readdirSync(kameletsDir).filter(file => file.endsWith("yaml")).map(file => fs.readFileSync(kameletsDir + "/" + file, 'utf-8'));
if (customKamelets && customKamelets.length > 0) yamls.push(...customKamelets);
} catch(e) {

}
return yamls;
}

Expand Down

0 comments on commit 54b821e

Please sign in to comment.