use @kubernetes/client-node to generate default config (#51)

This commit is contained in:
Sigurd Fosseng
2022-06-22 16:58:10 +02:00
committed by GitHub
parent b19619f34c
commit e972a5b196
4 changed files with 2248 additions and 9338 deletions

11500
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -18,16 +18,16 @@
"dependencies": { "dependencies": {
"@actions/core": "^1.2.6", "@actions/core": "^1.2.6",
"@actions/exec": "^1.0.0", "@actions/exec": "^1.0.0",
"@actions/tool-cache": "^1.0.0", "@actions/io": "^1.1.2",
"@kubernetes/client-node": "^0.16.0", "@kubernetes/client-node": "^0.16.0",
"js-yaml": "^3.13.1" "js-yaml": "^4.1.0"
}, },
"devDependencies": { "devDependencies": {
"@types/jest": "^25.2.2", "@types/jest": "^28.1.2",
"@types/js-yaml": "^4.0.4", "@types/js-yaml": "^4.0.4",
"@types/node": "^12.0.4", "@types/node": "^16.0.0",
"jest": "^26.6.3", "jest": "^28.1.1",
"ts-jest": "^25.5.1", "ts-jest": "^28.0.5",
"typescript": "3.9.2" "typescript": "4.7.4"
} }
} }

View File

@ -14,19 +14,27 @@ describe("Default kubeconfig", () => {
kind: "Config", kind: "Config",
clusters: [ clusters: [
{ {
name: "default",
cluster: { cluster: {
"certificate-authority-data": certAuth,
server: clusterUrl, server: clusterUrl,
"certificate-authority-data": certAuth,
"insecure-skip-tls-verify": false,
}, },
}, },
], ],
users: [ users: [{ name: "default-user", user: { token } }],
contexts: [
{ {
user: { name: "loaded-context",
token: token, context: {
cluster: "default",
user: "default-user",
name: "loaded-context",
}, },
}, },
], ],
preferences: {},
"current-context": "loaded-context",
}); });
expect(kc).toBe(expected); expect(kc).toBe(expected);
@ -108,20 +116,34 @@ describe("Default kubeconfig", () => {
kind: "Config", kind: "Config",
clusters: [ clusters: [
{ {
name: "default",
cluster: { cluster: {
"certificate-authority-data": cert,
server: k8sUrl, server: k8sUrl,
"certificate-authority-data": cert,
"insecure-skip-tls-verify": false,
}, },
}, },
], ],
users: [ users: [
{ {
user: { name: "default-user",
token: Buffer.from(token, "base64").toString(), user: { token: Buffer.from(token, "base64").toString() },
},
],
contexts: [
{
name: "loaded-context",
context: {
cluster: "default",
user: "default-user",
name: "loaded-context",
}, },
}, },
], ],
preferences: {},
"current-context": "loaded-context",
}); });
expect(getDefaultKubeconfig()).toBe(expectedConfig); expect(getDefaultKubeconfig()).toBe(expectedConfig);
}); });
}); });

View File

@ -1,5 +1,6 @@
import * as core from "@actions/core"; import * as core from "@actions/core";
import * as jsyaml from "js-yaml"; import * as jsyaml from "js-yaml";
import { KubeConfig } from "@kubernetes/client-node";
import { K8sSecret, parseK8sSecret } from "../types/k8sSecret"; import { K8sSecret, parseK8sSecret } from "../types/k8sSecret";
import { Method, parseMethod } from "../types/method"; import { Method, parseMethod } from "../types/method";
@ -58,25 +59,18 @@ export function createKubeconfig(
token: string, token: string,
clusterUrl: string clusterUrl: string
): string { ): string {
const kubeconfig = { const kc = new KubeConfig();
apiVersion: "v1", kc.loadFromClusterAndUser(
kind: "Config", {
clusters: [ name: "default",
{ server: clusterUrl,
cluster: { caData: certAuth,
"certificate-authority-data": certAuth, skipTLSVerify: false,
server: clusterUrl, },
}, {
}, name: "default-user",
], token,
users: [ }
{ );
user: { return kc.exportConfig();
token: token,
},
},
],
};
return JSON.stringify(kubeconfig);
} }