From 2f573d9598f8a0472074a816717e01cd8de9c638 Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Fri, 3 Aug 2018 14:31:39 -0700 Subject: [PATCH 1/4] Update gitignore. --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 98391c87c2..c6fc936a21 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,6 @@ node_modules /node-client/src/git_push.sh /node-client/src/tsconfig.json /node-client/src/typings.json +.vscode/* +examples/package-lock.json From 007c4dff3b056c10bfde66ab948b2f119ca3b8da Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Fri, 3 Aug 2018 14:28:23 -0700 Subject: [PATCH 2/4] Rev the release version. --- node-client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node-client/package.json b/node-client/package.json index 4645edcecd..9e5d087301 100644 --- a/node-client/package.json +++ b/node-client/package.json @@ -1,6 +1,6 @@ { "name": "@kubernetes/client-node", - "version": "0.4.0", + "version": "0.5.0", "description": "NodeJS client for kubernetes", "repository": { "type": "git", From 73e15d1b4ba7a4ec73dfe2547aed80072e7c1875 Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Mon, 30 Jul 2018 16:45:34 -0700 Subject: [PATCH 3/4] Fix auth for simple users. --- node-client/src/config_types.ts | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/node-client/src/config_types.ts b/node-client/src/config_types.ts index cd040c35bc..521962642d 100644 --- a/node-client/src/config_types.ts +++ b/node-client/src/config_types.ts @@ -53,22 +53,24 @@ function userIterator(): u.ListIterator { throw new Error(`users[${i}].name is missing`); } let token = null; - if (elt.user.token) { - token = elt.user.token; - } - if (elt.user['token-file']) { - token = fs.readFileSync(elt.user['token-file']); + if (elt.user) { + if (elt.user.token) { + token = elt.user.token; + } + if (elt.user['token-file']) { + token = fs.readFileSync(elt.user['token-file']); + } } return { - authProvider: elt.user['auth-provider'], - certData: elt.user['client-certificate-data'], - certFile: elt.user['client-certificate'], - keyData: elt.user['client-key-data'], - keyFile: elt.user['client-key'], + authProvider: elt.user ? elt.user['auth-provider'] : null, + certData: elt.user ? elt.user['client-certificate-data'] : null, + certFile: elt.user ? elt.user['client-certificate'] : null, + keyData: elt.user ? elt.user['client-key-data'] : null, + keyFile: elt.user ? elt.user['client-key'] : null, name: elt.name, - password: elt.user.password, + password: elt.user ? elt.user.password : null, token, - username: elt.user.username, + username: elt.user ? elt.user.username : null, }; }; } From 4557e42cc92f9f9e3522027808671d36ebf2fef0 Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Fri, 3 Aug 2018 14:28:45 -0700 Subject: [PATCH 4/4] Fix up web sockets --- node-client/src/attach.ts | 10 ++++++++-- node-client/src/web-socket-handler.ts | 9 +++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/node-client/src/attach.ts b/node-client/src/attach.ts index 4c7d27df32..672e286541 100644 --- a/node-client/src/attach.ts +++ b/node-client/src/attach.ts @@ -3,6 +3,8 @@ import stream = require('stream'); import { KubeConfig } from './config'; import { WebSocketHandler } from './web-socket-handler'; +import { connection } from 'websocket'; +import { resolve } from 'url'; export class Attach { public 'handler': WebSocketHandler; @@ -13,7 +15,7 @@ export class Attach { public attach(namespace: string, podName: string, containerName: string, stdout: stream.Writable | any, stderr: stream.Writable | any, stdin: stream.Readable | any, - tty: boolean) { + tty: boolean): Promise { const query = { container: containerName, stderr: stderr != null, @@ -23,8 +25,12 @@ export class Attach { }; const queryStr = querystring.stringify(query); const path = `/api/v1/namespaces/${namespace}/pods/${podName}/attach?${queryStr}`; - this.handler.connect(path, null, (streamNum: number, buff: Buffer) => { + const promise = this.handler.connect(path, null, (streamNum: number, buff: Buffer) => { WebSocketHandler.handleStandardStreams(streamNum, buff, stdout, stderr); }); + const result = new Promise((resolvePromise, reject) => { + promise.then(() => resolvePromise(), (err) => reject(err)); + }); + return result; } } diff --git a/node-client/src/web-socket-handler.ts b/node-client/src/web-socket-handler.ts index 2206eaf648..e764f66cf0 100644 --- a/node-client/src/web-socket-handler.ts +++ b/node-client/src/web-socket-handler.ts @@ -69,8 +69,10 @@ export class WebSocketHandler { binaryHandler: (stream: number, buff: Buffer) => void): Promise { const server = this.config.getCurrentCluster().server; - const target = server.startsWith('https://') ? server.substr(8) : server.substr(7); - const uri = `wss://${target}${path}`; + const ssl = server.startsWith('https://'); + const target = ssl ? server.substr(8) : server.substr(7); + const proto = ssl ? 'wss' : 'ws'; + const uri = `${proto}://${target}${path}`; const opts: https.RequestOptions = {}; this.config.applytoHTTPSOptions(opts); @@ -97,8 +99,7 @@ export class WebSocketHandler { client.on('connectFailed', (err) => { reject(err); }); - - client.connect(uri, protocols); + client.connect(uri, protocols); }); } }