Skip to content

Commit 945d201

Browse files
author
Ubuntu
committed
update examples and try to add minikube test
1 parent 0e16ff7 commit 945d201

File tree

5 files changed

+52
-60
lines changed

5 files changed

+52
-60
lines changed

.github/workflows/test.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,14 @@ jobs:
2626
- run: npm run lint
2727
- run: npm audit --audit-level=critical
2828
- run: npm run build-with-tests && npm run test-transpiled
29+
- name: Extract k8s version
30+
id: extract_version
31+
run: |
32+
version=$(grep 'export KUBERNETES_BRANCH=' settings | cut -d '"' -f 2)
33+
echo "setting kubernetes version to $KUBERNETES_V_STRING"
34+
echo "KUBERNETES_V_STRING=$version" >> "$GITHUB_ENV"
35+
- name: start minikube
36+
uses: medyagh/setup-minikube@latest
37+
id: minikube
38+
with:
39+
minikube-version: env.KUBERNETES_V_STRING

examples/patch-example.js

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import * as k8s from '@kubernetes/client-node';
2-
import { PromiseMiddlewareWrapper } from '@kubernetes/client-node/dist/gen/middleware.js';
32

43
const kc = new k8s.KubeConfig();
54
kc.loadFromDefault();
@@ -18,35 +17,12 @@ try {
1817
},
1918
},
2019
];
21-
const headerPatchMiddleware = new PromiseMiddlewareWrapper({
22-
pre: async (requestContext) => {
23-
requestContext.setHeaderParam('Content-type', 'application/json-patch+json');
24-
return requestContext;
25-
},
26-
post: async (responseContext) => responseContext,
27-
});
28-
let currentCluster = kc.getCurrentCluster();
29-
if (currentCluster === null) {
30-
throw new Error('Cluster is undefined');
31-
}
32-
let server = currentCluster.server;
33-
if (server === undefined) {
34-
throw new Error('Server is undefined');
35-
}
36-
37-
const baseServerConfig = new k8s.ServerConfiguration(server, {});
38-
const configuration = k8s.createConfiguration({
39-
middleware: [headerPatchMiddleware],
40-
baseServer: baseServerConfig,
41-
authMethods: {
42-
default: kc,
43-
},
44-
});
4520

4621
await k8sApi.patchNamespacedPod(
4722
{ name: res?.items?.[0]?.metadata?.name ?? '', namespace, body: patch },
48-
configuration,
23+
k8s.WithHeaderOptions('Content-Type', 'application/json-patch+json'),
4924
);
25+
5026
console.log('Patched.');
5127
} catch (err) {
5228
console.error('Error: ');

examples/typescript/patch/patch-example.ts

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,4 @@
1-
import {
2-
CoreV1Api,
3-
RequestContext,
4-
ResponseContext,
5-
KubeConfig,
6-
createConfiguration,
7-
type Configuration,
8-
ServerConfiguration,
9-
} from '@kubernetes/client-node';
10-
import { PromiseMiddlewareWrapper } from '@kubernetes/client-node/dist/gen/middleware.js';
1+
import { CoreV1Api, KubeConfig, WithHeaderOptions } from '@kubernetes/client-node';
112

123
const kc = new KubeConfig();
134
kc.loadFromDefault();
@@ -25,30 +16,7 @@ try {
2516
},
2617
},
2718
];
28-
const headerPatchMiddleware = new PromiseMiddlewareWrapper({
29-
pre: async (requestContext: RequestContext) => {
30-
requestContext.setHeaderParam('Content-type', 'application/json-patch+json');
31-
return requestContext;
32-
},
33-
post: async (responseContext: ResponseContext) => responseContext,
34-
});
35-
const currentCluster = kc.getCurrentCluster();
36-
if (currentCluster === null) {
37-
throw new Error('Cluster is undefined');
38-
}
39-
const server = currentCluster.server;
40-
if (server === undefined) {
41-
throw new Error('Server is undefined');
42-
}
4319

44-
const baseServerConfig: ServerConfiguration<{}> = new ServerConfiguration<{}>(server, {});
45-
const configuration: Configuration = createConfiguration({
46-
middleware: [headerPatchMiddleware],
47-
baseServer: baseServerConfig,
48-
authMethods: {
49-
default: kc,
50-
},
51-
});
5220
const podName = res.items[0]?.metadata?.name;
5321
if (podName === undefined) {
5422
throw new Error('Pod name is undefined');
@@ -60,7 +28,7 @@ try {
6028
namespace: 'default',
6129
body: patch,
6230
},
63-
configuration,
31+
WithHeaderOptions('Content-Type', JsonPatch),
6432
);
6533

6634
console.log('Patched.');

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export * from './patch.js';
1515
export * from './metrics.js';
1616
export * from './object.js';
1717
export * from './health.js';
18+
export * from './middleware.js';
1819
export { type ConfigOptions, type User, type Cluster, type Context } from './config_types.js';
1920

2021
// Export FetchError so that instanceof checks in user code will definitely use the same instance

src/middleware.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import type { RequestContext, ResponseContext, ConfigurationOptions, Middleware } from './gen/index.ts';
2+
import { PromiseMiddleware } from './gen/middleware.js';
3+
4+
//WithHeaderMiddleware returns Middleware[] that sets a header value
5+
export function WithHeaderMiddleware(key: string, value: string): Middleware[] {
6+
return [
7+
{
8+
pre: (c: RequestContext) => {
9+
return new Promise<RequestContext>((resolve) => {
10+
c.setHeaderParam(key, value);
11+
resolve(c);
12+
});
13+
},
14+
post: (c: ResponseContext) => {
15+
return new Promise<ResponseContext>((resolve) => {
16+
resolve(c);
17+
});
18+
},
19+
},
20+
];
21+
}
22+
23+
// Returns ConfigurationOptions that set a header
24+
export function WithHeaderOptions(
25+
key: string,
26+
value: string,
27+
opt?: ConfigurationOptions<PromiseMiddleware>,
28+
): ConfigurationOptions<PromiseMiddleware> {
29+
const newMiddlware = WithHeaderMiddleware(key, value);
30+
const existingMiddlware = opt?.middleware || [];
31+
return {
32+
...opt,
33+
middleware: existingMiddlware.concat(newMiddlware),
34+
middlewareMergeStrategy: 'append', // preserve chained middleware from opt
35+
};
36+
}

0 commit comments

Comments
 (0)