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 d915c2a73a927831e9bf1c2e55c085bbdf683f3a Author: Marat Gubaidullin <marat.gubaidul...@gmail.com> AuthorDate: Thu Oct 20 18:35:25 2022 -0400 Openshift client --- karavan-vscode/package.json | 1 + karavan-vscode/src/{kubernetes.ts => exec.ts} | 32 +++------------- karavan-vscode/src/jbang.ts | 53 +++++++++++---------------- 3 files changed, 29 insertions(+), 57 deletions(-) diff --git a/karavan-vscode/package.json b/karavan-vscode/package.json index 9058b3b..8417946 100644 --- a/karavan-vscode/package.json +++ b/karavan-vscode/package.json @@ -499,6 +499,7 @@ "mocha": "^10.0.0", "prettier": "2.3.0", "run-script-os": "^1.1.6", + "@types/shelljs": "^0.8.10", "static-site-generator-webpack-plugin": "^3.4.2", "style-loader": "^2.0.0", "ts-loader": "^8.0.14", diff --git a/karavan-vscode/src/kubernetes.ts b/karavan-vscode/src/exec.ts similarity index 50% rename from karavan-vscode/src/kubernetes.ts rename to karavan-vscode/src/exec.ts index 6089d3d..7034981 100644 --- a/karavan-vscode/src/kubernetes.ts +++ b/karavan-vscode/src/exec.ts @@ -14,10 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { workspace, window, Terminal, ThemeIcon } from "vscode"; -import * as path from "path"; import * as shell from 'shelljs'; -import * as utils from "./utils"; export interface Result { result: boolean @@ -25,26 +22,9 @@ export interface Result { error: string } -export function hasOcClient(): boolean { - const oc = shell.which('oc'); - return oc !== undefined; -} - -export function getOcUser(): Result { - const oc = shell.which('oc'); - if (oc) { - shell.config.execPath = String(oc); - - shell.exec('oc whoami', {silent:true}, function(code, stdout, stderr) { - console.log('Exit code:', code); - console.log('Program output:', stdout); - console.log('Program stderr:', stderr); - }); - - const { stdout, stderr, code } = shell.exec("oc whoami", {silent:true}); - console.log(stdout, stderr, code); - return {result: code === 0, value: stdout, error: stderr}; - } else { - return {result: false, value: undefined, error: "Openshift client not found!"} - } -} +export function execCommand(cmd: string, execPath?: string): Promise<Result> { + return new Promise<Result>((resolve) => { + if (execPath) shell.cd(execPath); + shell.exec(cmd, (code, stdout, stderr) => resolve({ result: code === 0, value: stdout, error: stderr })); + }); +} \ No newline at end of file diff --git a/karavan-vscode/src/jbang.ts b/karavan-vscode/src/jbang.ts index 1a48f17..b54183c 100644 --- a/karavan-vscode/src/jbang.ts +++ b/karavan-vscode/src/jbang.ts @@ -19,7 +19,7 @@ import * as path from "path"; import * as shell from 'shelljs'; import { CamelDefinitionYaml } from "core/api/CamelDefinitionYaml"; import * as utils from "./utils"; -import * as kubernetes from "./kubernetes"; +import * as exec from "./exec"; const TERMINALS: Map<string, Terminal> = new Map<string, Terminal>(); @@ -114,25 +114,20 @@ export function createExportCommand(directory: string) { export function camelDeploy(directory: string) { const command = createExportCommand(directory).concat(" && ").concat(createPackageCommand(directory)); - const user = kubernetes.getOcUser(); - console.log("user", user); - - - // 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); - // }); + Promise.all([ + exec.execCommand("oc whoami"), // get user + exec.execCommand("oc whoami --show-token"), // get token + exec.execCommand("oc project -q") // get namespace + ]).then(val => { + let env: any = { "DATE": Date.now().toString() }; + if (val[0].result) env.USER = val[0].value; + if (val[1].result) env.TOKEN = val[1].value; + if (val[2].result) env.NAMESPACE = val[2].value; + console.log("env", env); + camelRunDeploy(command, env); + }).catch((reason: any) => { + window.showErrorMessage("Error: \n" + reason.message); + }); } export function camelRunDeploy(command: string, env?: { [key: string]: string | null | undefined }) { @@ -150,22 +145,18 @@ export function createPackageCommand(directory: string) { } function executeJbangCommand(rootPath: string, command: string, callback: (code: number, stdout: any, stderr: any) => any) { - console.log("excute command", command) + console.log("excute command", command); const jbang = shell.which('jbang'); if (jbang) { - shell.config.execPath = String(jbang); - shell.cd(rootPath); - shell.exec(command, { async: false }, (code, stdout, stderr) => { - if (code === 0) { - // vscode.window.showInformationMessage(stdout); - } else { - window.showErrorMessage(stderr); - } - callback(code, stdout, stderr); + exec.execCommand(command, rootPath).then(res => { + if (res.result) callback(0, res.value, res.error) + else window.showErrorMessage(res.error); + }).catch(error => { + window.showErrorMessage(error); }); } else { window.showErrorMessage("JBang not found!"); - } + } } function setMinikubeEnvVariables(env: string): Map<string, string> {