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 2022/10/20 01:41:23 UTC
[camel-karavan] 02/02: Deploy project
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 c70c1bd1c68ed17f3c50c37e83e2740f9374743e
Author: Marat Gubaidullin <ma...@gmail.com>
AuthorDate: Wed Oct 19 21:41:10 2022 -0400
Deploy project
---
karavan-vscode/package.json | 58 +++++++++++++++++++++++++++++------------
karavan-vscode/src/extension.ts | 8 +++++-
karavan-vscode/src/jbang.ts | 54 ++++++++++++++++++++++++++++++++------
karavan-vscode/src/utils.ts | 2 +-
4 files changed, 95 insertions(+), 27 deletions(-)
diff --git a/karavan-vscode/package.json b/karavan-vscode/package.json
index 85e9a13..6db1b1e 100644
--- a/karavan-vscode/package.json
+++ b/karavan-vscode/package.json
@@ -42,6 +42,7 @@
"onCommand:karavan.create-crd",
"onCommand:karavan.create-yaml",
"onCommand:karavan.create-application",
+ "onCommand:karavan.deploy",
"onCommand:karavan.open",
"onCommand:karavan.open-file",
"onCommand:karavan.jbang-run-file",
@@ -186,7 +187,7 @@
"type": "string"
},
"default": [
- "quarkus.container-image.group=${KUBERNETES_NAMESPACE}",
+ "quarkus.container-image.group=${NAMESPACE}",
"quarkus.container-image.name=$NAME",
"quarkus.container-image.builder=jib",
"quarkus.container-image.build=true",
@@ -212,7 +213,7 @@
"quarkus.kubernetes.labels.\"app.openshift.io/runtime\"=camel",
"quarkus.kubernetes-client.trust-certs=true",
"quarkus.kubernetes-client.master-url=kubernetes.default.svc",
- "quarkus.kubernetes-client.namespace=${KUBERNETES_NAMESPACE}",
+ "quarkus.kubernetes-client.namespace=${NAMESPACE}",
"quarkus.kubernetes-client.token=${TOKEN}",
"quarkus.openshift.deployment-kind=Deployment",
"quarkus.openshift.add-version-to-label-selectors=false",
@@ -268,6 +269,11 @@
"title": "Karavan: Export",
"icon": "$(export)"
},
+ {
+ "command": "karavan.deploy",
+ "title": "Karavan: Deploy",
+ "icon": "$(layers)"
+ },
{
"command": "karavan.generate-rest",
"title": "Karavan: Generate REST API"
@@ -303,35 +309,48 @@
"explorer/context": [
{
"command": "karavan.create-crd",
- "when": "explorerResourceIsFolder || explorerResourceIsRoot"
+ "when": "explorerResourceIsFolder || explorerResourceIsRoot",
+ "group": "karavan@1"
},
{
"command": "karavan.create-yaml",
- "when": "explorerResourceIsFolder || explorerResourceIsRoot"
+ "when": "explorerResourceIsFolder || explorerResourceIsRoot",
+ "group": "karavan@2"
},
{
"command": "karavan.create-application",
- "when": "explorerResourceIsFolder || explorerResourceIsRoot"
+ "when": "explorerResourceIsFolder || explorerResourceIsRoot",
+ "group": "karavan@3"
},
{
"command": "karavan.open",
- "when": "resourceExtname == .yaml"
+ "when": "resourceExtname == .yaml",
+ "group": "karavan@4"
},
{
"command": "karavan.jbang-run-file",
- "when": "resourceExtname == .yaml"
+ "when": "resourceExtname == .yaml",
+ "group": "karavan@5"
},
{
"command": "karavan.jbang-run-project",
- "when": "explorerResourceIsFolder || explorerResourceIsRoot"
+ "when": "explorerResourceIsFolder || explorerResourceIsRoot",
+ "group": "karavan@6"
},
{
"command": "karavan.jbang-export",
- "when": "explorerResourceIsFolder || explorerResourceIsRoot"
+ "when": "explorerResourceIsFolder || explorerResourceIsRoot",
+ "group": "karavan@7"
+ },
+ {
+ "command": "karavan.deploy",
+ "when": "explorerResourceIsFolder || explorerResourceIsRoot",
+ "group": "karavan@8"
},
{
"command": "karavan.generate-rest",
- "when": "resourceExtname == .json"
+ "when": "resourceExtname == .json",
+ "group": "karavan@9"
}
],
"editor/title": [
@@ -348,24 +367,29 @@
],
"view/title": [
{
- "command": "integrations.refresh",
+ "command": "karavan.jbang-run-project",
"when": "view == integrations",
- "group": "navigation@4"
+ "group": "navigation@1"
},
{
- "command": "karavan.jbang-run-project",
+ "command": "karavan.deploy",
"when": "view == integrations",
- "group": "navigation@1"
+ "group": "navigation@2"
},
{
- "command": "karavan.create-crd",
+ "command": "karavan.jbang-export",
"when": "view == integrations",
"group": "navigation@3"
},
{
- "command": "karavan.jbang-export",
+ "command": "karavan.create-crd",
"when": "view == integrations",
- "group": "navigation@2"
+ "group": "navigation@4"
+ },
+ {
+ "command": "integrations.refresh",
+ "when": "view == integrations",
+ "group": "navigation@5"
},
{
"command": "openapi.refresh",
diff --git a/karavan-vscode/src/extension.ts b/karavan-vscode/src/extension.ts
index bef26f8..8b54520 100644
--- a/karavan-vscode/src/extension.ts
+++ b/karavan-vscode/src/extension.ts
@@ -145,6 +145,12 @@ export function activate(context: ExtensionContext) {
});
context.subscriptions.push(exportCommand);
+ // Deploy project
+ const deployCommand = commands.registerCommand("karavan.deploy", (...args: any[]) => {
+ jbang.camelDeploy(rootPath + path.sep + ".export");
+ });
+ context.subscriptions.push(deployCommand);
+
// Run Integration in designer command
const run = commands.registerCommand("karavan.jbang-run-file", (...args: any[]) => designer.jbangRun(args[0].fsPath));
context.subscriptions.push(run);
@@ -155,7 +161,7 @@ export function activate(context: ExtensionContext) {
});
context.subscriptions.push(runProjectCommand);
- // Generate RST API from OpenAPI specification command
+ // Generate REST API from OpenAPI specification command
const generateOptions = ["Create new CRD", "Create new YAML", "Add to existing file"];
const generateRest = commands.registerCommand('karavan.generate-rest', async (...args: any[]) => {
const openApi: OpenApiItem = args[0];
diff --git a/karavan-vscode/src/jbang.ts b/karavan-vscode/src/jbang.ts
index 612e583..c9e3c02 100644
--- a/karavan-vscode/src/jbang.ts
+++ b/karavan-vscode/src/jbang.ts
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-import { workspace, window, Terminal } from "vscode";
+import { workspace, window, Terminal, ThemeIcon } from "vscode";
import * as path from "path";
import * as shell from 'shelljs';
import { CamelDefinitionYaml } from "core/api/CamelDefinitionYaml";
@@ -23,7 +23,7 @@ import * as utils from "./utils";
const TERMINALS: Map<string, Terminal> = new Map<string, Terminal>();
export async function camelJbangGenerate(rootPath: string, openApiFullPath: string, fullPath: string, add: boolean, crd?: boolean, generateRoutes?: boolean) {
- let command = prepareCommand("generate rest -i " + openApiFullPath);
+ let command = prepareCommand("generate rest -i " + openApiFullPath);
if (generateRoutes === true) command = command + " --routes";
executeJbangCommand(rootPath, command, (code, stdout, stderr) => {
console.log('Exit code:', code);
@@ -80,7 +80,7 @@ export function camelJbangRun(filename?: string) {
const maxMessages: number = workspace.getConfiguration().get("camel.maxMessages") || -1;
const kameletsPath: string | undefined = workspace.getConfiguration().get("Karavan.kameletsPath");
const dev: boolean = workspace.getConfiguration().get("camel.dev") || false;
- const cmd = (filename ? "run " + filename : "run * ")
+ const cmd = (filename ? "run " + filename : "run * ")
+ (maxMessages > -1 ? " --max-messages=" + maxMessages : "")
+ (kameletsPath && kameletsPath.trim().length > 0 ? " --local-kamelet-dir=" + kameletsPath : "");
const command = prepareCommand(cmd) + (dev === true ? " --dev" : "");
@@ -94,19 +94,57 @@ export function camelJbangRun(filename?: string) {
}
export function camelJbangExport(directory: string) {
- const kameletsPath: string | undefined = workspace.getConfiguration().get("Karavan.kameletsPath");
- const cmd = "export --directory=" + directory
- + (kameletsPath && kameletsPath.trim().length >0 ? " --local-kamelet-dir=" + kameletsPath : "");
- const command = prepareCommand(cmd);
+ const command = createExportCommand(directory);
const terminalId = "export";
const existTerminal = TERMINALS.get(terminalId);
if (existTerminal) existTerminal.dispose();
- const terminal = window.createTerminal('Camel export');
+ const terminal = window.createTerminal('export');
TERMINALS.set(terminalId, terminal);
terminal.show();
terminal.sendText(command);
}
+export function createExportCommand(directory: string) {
+ const kameletsPath: string | undefined = workspace.getConfiguration().get("Karavan.kameletsPath");
+ const cmd = "export --directory=" + directory
+ + (kameletsPath && kameletsPath.trim().length > 0 ? " --local-kamelet-dir=" + kameletsPath : "");
+ return prepareCommand(cmd);
+}
+
+export function camelDeploy(directory: string) {
+ const command = createExportCommand(directory).concat(" && ").concat(createPackageCommand(directory));
+
+ utils.readFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace")
+ .then((readData: Uint8Array) => {
+ const namespace = Buffer.from(readData).toString('utf8');
+ utils.readFile("/var/run/secrets/kubernetes.io/serviceaccount/token")
+ .then((readData: Uint8Array) => {
+ const token = Buffer.from(readData).toString('utf8');
+ const env = { "TOKEN":token, "NAMESPACE": namespace, "DATE": Date.now().toString() };
+ camelRunDeploy(command, env);
+
+ }).catch((reason: any) => {
+ window.showErrorMessage("Token file not found. Set TOKEN environment variable!\n" + reason.message);
+ });
+ }).catch((reason: any) => {
+ window.showErrorMessage("Namespace file not found. Set NAMESPACE environment variable!\n" + reason.message);
+ });
+}
+
+export function camelRunDeploy(command: string, env?: { [key: string]: string | null | undefined }) {
+ const terminalId = "deploy";
+ const existTerminal = TERMINALS.get(terminalId);
+ if (existTerminal) existTerminal.dispose();
+ const terminal = window.createTerminal({ name: terminalId, env: env, iconPath: new ThemeIcon("layers") });
+ TERMINALS.set(terminalId, terminal);
+ terminal.show();
+ terminal.sendText(command);
+}
+
+export function createPackageCommand(directory: string) {
+ return "mvn clean package -f " + directory;
+}
+
function executeJbangCommand(rootPath: string, command: string, callback: (code: number, stdout: any, stderr: any) => any) {
console.log("excute command", command)
const jbang = shell.which('jbang');
diff --git a/karavan-vscode/src/utils.ts b/karavan-vscode/src/utils.ts
index 7949a46..e498e63 100644
--- a/karavan-vscode/src/utils.ts
+++ b/karavan-vscode/src/utils.ts
@@ -221,7 +221,7 @@ export async function createApplicationproperties(runtime: string, gav: string,
const runtimeDefaults: [] = (runtime === 'quarkus')
? workspace.getConfiguration().get("Karavan.quarkusApplicationProperties") || []
: [];
- const text = props.concat(runtimeDefaults).concat(imageBuildProps).concat(targetProps).map(v => {
+ const text = props.concat(runtimeDefaults).concat("\n").concat(imageBuildProps).concat("\n").concat(targetProps).map(v => {
if (v.includes('$NAME')) return v.replace('$NAME', name)
else if (v.includes('$GAV')) return v.replace('$GAV', gav)
else if (v.includes('$RUNTIME_VERSION')) return v.replace('$RUNTIME_VERSION', runtimeVersion) // $RUNTIME_VERSION should be before $RUNTIME