Skip to content

Commit 71f0ac8

Browse files
committed
Add better functionality for instantiating other API clients.
Revise examples.
1 parent a73f904 commit 71f0ac8

File tree

10 files changed

+67
-29
lines changed

10 files changed

+67
-29
lines changed

README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ $ npm install @kubernetes/client-node
2121
```javascript
2222
const k8s = require('@kubernetes/client-node');
2323

24-
var k8sApi = k8s.Config.defaultClient();
24+
25+
const kc = new k8s.KubeConfig();
26+
kc.loadFromDefault();
27+
28+
const k8sApi = kc.makeApiClient(k8s.Core_v1Api);
29+
2530
k8sApi.listNamespacedPod('default')
2631
.then((res) => {
2732
console.log(res.body);
@@ -32,7 +37,10 @@ k8sApi.listNamespacedPod('default')
3237
```javascript
3338
const k8s = require('@kubernetes/client-node');
3439

35-
var k8sApi = k8s.Config.defaultClient();
40+
const kc = new k8s.KubeConfig();
41+
kc.loadFromDefault();
42+
43+
const k8sApi = kc.makeApiClient(k8s.Core_v1Api);
3644

3745
var namespace = {
3846
metadata: {

examples/example.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
const k8s = require('@kubernetes/client-node');
22

3-
let k8sApi = k8s.Config.defaultClient();
3+
const kc = new k8s.KubeConfig();
4+
kc.loadFromDefault();
5+
6+
const k8sApi = kc.makeApiClient(k8s.Core_v1Api);
7+
48
k8sApi.listNamespacedPod('default')
59
.then((res) => {
610
console.log(res.body);

examples/in-cluster.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
const k8s = require('@kubernetes/client-node');
22

3-
let kc = new k8s.KubeConfig();
3+
const kc = new k8s.KubeConfig();
44
kc.loadFromCluster();
55

6-
let k8sApi = new k8s.Core_v1Api(kc.getCurrentCluster()['server']);
7-
k8sApi.setDefaultAuthentication(kc);
6+
const k8sApi = kc.makeApiClient(k8s.Core_v1Api);
87

98
k8sApi.listNamespacedPod('default')
109
.then((res) => {

examples/namespace.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
const k8s = require('@kubernetes/client-node');
22

3-
var k8sApi = k8s.Config.defaultClient();
3+
const kc = new k8s.KubeConfig();
4+
kc.loadFromDefault();
5+
6+
const k8sApi = kc.makeApiClient(k8s.Core_v1Api);
47

58
var namespace = {
69
metadata: {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import k8s = require('@kubernetes/client-node');
22

33
let kc = new k8s.KubeConfig();
4-
kc.loadFromFile(process.env['HOME'] + '/.kube/config');
4+
kc.loadFromDefault();
55

66
let attach = new k8s.Attach(kc);
77
attach.attach('default', 'nginx-4217019353-9gl4s', 'nginx', process.stdout, process.stderr, null /* stdin */, false /* tty */);

examples/typescript/exec/exec-example.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import k8s = require('@kubernetes/client-node');
33
let command = process.argv[2];
44

55
let kc = new k8s.KubeConfig();
6-
kc.loadFromFile(process.env['HOME'] + '/.kube/config');
6+
kc.loadFromDefault();
77

88
let exec = new k8s.Exec(kc);
99
exec.exec('default', 'nginx-4217019353-9gl4s', 'nginx', command, process.stdout, process.stderr, process.stdin, true /* tty */);

examples/typescript/simple/example.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import k8s = require('@kubernetes/client-node');
2+
const kc = new k8s.KubeConfig();
3+
kc.loadFromDefault();
24

3-
let k8sApi = k8s.Config.defaultClient();
5+
const k8sApi = kc.makeApiClient(k8s.Core_v1Api);
46

57
k8sApi.listNamespacedPod('default')
68
.then((res) => {

examples/typescript/watch/watch-example.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import k8s = require('@kubernetes/client-node');
22

33
let kc = new k8s.KubeConfig();
4-
kc.loadFromFile(process.env['HOME'] + '/.kube/config');
4+
kc.loadFromDefault();
55

66
let watch = new k8s.Watch(kc);
77
let req = watch.watch('/api/v1/namespaces',

node-client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@kubernetes/client-node",
3-
"version": "0.5.2",
3+
"version": "0.5.3",
44
"description": "NodeJS client for kubernetes",
55
"repository": {
66
"type": "git",

node-client/src/config.ts

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,36 @@ export class KubeConfig {
196196
this.currentContext = contextName;
197197
}
198198

199+
public loadFromDefault() {
200+
if (process.env.KUBECONFIG) {
201+
this.loadFromFile(process.env.KUBECONFIG);
202+
return;
203+
}
204+
205+
const config = path.join(process.env.HOME, '.kube', 'config');
206+
if (fs.existsSync(config)) {
207+
this.loadFromFile(config);
208+
return;
209+
}
210+
211+
if (fs.existsSync(Config.SERVICEACCOUNT_TOKEN_PATH)) {
212+
this.loadFromCluster();
213+
return;
214+
}
215+
216+
this.loadFromClusterAndUser(
217+
{name: 'cluster', server: 'http://localhost:8080'} as Cluster,
218+
{name: 'user'} as User,
219+
);
220+
}
221+
222+
public makeApiClient<T extends ApiType>(apiClientType: { new(server: string): T}) {
223+
const apiClient = new apiClientType(this.getCurrentCluster().server);
224+
apiClient.setDefaultAuthentication(this);
225+
226+
return apiClient;
227+
}
228+
199229
private getCurrentContextObject() {
200230
return this.getContextObject(this.currentContext);
201231
}
@@ -276,6 +306,11 @@ export class KubeConfig {
276306
}
277307
}
278308

309+
export interface ApiType {
310+
setDefaultAuthentication(config: KubeConfig);
311+
}
312+
313+
// This class is deprecated and will eventually be removed.
279314
export class Config {
280315
public static SERVICEACCOUNT_ROOT =
281316
'/var/run/secrets/kubernetes.io/serviceaccount';
@@ -288,10 +323,7 @@ export class Config {
288323
const kc = new KubeConfig();
289324
kc.loadFromFile(filename);
290325

291-
const k8sApi = new client.Core_v1Api(kc.getCurrentCluster().server);
292-
k8sApi.setDefaultAuthentication(kc);
293-
294-
return k8sApi;
326+
return kc.makeApiClient(api.Core_v1Api);
295327
}
296328

297329
public static fromCluster(): api.Core_v1Api {
@@ -317,19 +349,9 @@ export class Config {
317349
}
318350

319351
public static defaultClient(): api.Core_v1Api {
320-
if (process.env.KUBECONFIG) {
321-
return Config.fromFile(process.env.KUBECONFIG);
322-
}
323-
324-
const config = path.join(process.env.HOME, '.kube', 'config');
325-
if (fs.existsSync(config)) {
326-
return Config.fromFile(config);
327-
}
328-
329-
if (fs.existsSync(Config.SERVICEACCOUNT_TOKEN_PATH)) {
330-
return Config.fromCluster();
331-
}
352+
const kc = new KubeConfig();
353+
kc.loadFromDefault();
332354

333-
return new client.Core_v1Api('http://localhost:8080');
355+
return kc.makeApiClient(api.Core_v1Api);
334356
}
335357
}

0 commit comments

Comments
 (0)