mirror of
https://github.com/Azure/k8s-set-context.git
synced 2026-06-30 03:09:27 +08:00
Refactor entire project (#39)
- Use more modern TypeScript conventions - Use JavaScript Kubernetes Client - Add unit tests - Add integration tests - Add TypeScript compile verify workflow - Switch codeowners
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
import * as core from "@actions/core";
|
||||
import * as jsyaml from "js-yaml";
|
||||
import { K8sSecret, parseK8sSecret } from "../types/k8sSecret";
|
||||
import { Method, parseMethod } from "../types/method";
|
||||
|
||||
/**
|
||||
* Gets the kubeconfig based on provided method for a default Kubernetes cluster
|
||||
* @returns The kubeconfig
|
||||
*/
|
||||
export function getDefaultKubeconfig(): string {
|
||||
const method: Method | undefined = parseMethod(
|
||||
core.getInput("method", { required: true })
|
||||
);
|
||||
|
||||
switch (method) {
|
||||
case Method.SERVICE_ACCOUNT: {
|
||||
const clusterUrl = core.getInput("k8s-url", { required: true });
|
||||
core.debug(
|
||||
"Found clusterUrl. Creating kubeconfig using certificate and token"
|
||||
);
|
||||
|
||||
const k8sSecret: string = core.getInput("k8s-secret", {
|
||||
required: true,
|
||||
});
|
||||
const parsedK8sSecret: K8sSecret = parseK8sSecret(jsyaml.load(k8sSecret));
|
||||
const certAuth: string = parsedK8sSecret.data["ca.crt"];
|
||||
const token: string = Buffer.from(
|
||||
parsedK8sSecret.data.token,
|
||||
"base64"
|
||||
).toString();
|
||||
|
||||
return createKubeconfig(certAuth, token, clusterUrl);
|
||||
}
|
||||
case Method.SERVICE_PRINCIPAL: {
|
||||
core.warning(
|
||||
"Service Principal method not supported for default cluster type"
|
||||
);
|
||||
}
|
||||
case undefined: {
|
||||
core.warning("Defaulting to kubeconfig method");
|
||||
}
|
||||
default: {
|
||||
core.debug("Setting context using kubeconfig");
|
||||
return core.getInput("kubeconfig", { required: true });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a kubeconfig and returns the string representation
|
||||
* @param certAuth The certificate authentication of the cluster
|
||||
* @param token The user token
|
||||
* @param clusterUrl The server url of the cluster
|
||||
* @returns The kubeconfig as a string
|
||||
*/
|
||||
export function createKubeconfig(
|
||||
certAuth: string,
|
||||
token: string,
|
||||
clusterUrl: string
|
||||
): string {
|
||||
const kubeconfig = {
|
||||
apiVersion: "v1",
|
||||
kind: "Config",
|
||||
clusters: [
|
||||
{
|
||||
cluster: {
|
||||
"certificate-authority-data": certAuth,
|
||||
server: clusterUrl,
|
||||
},
|
||||
},
|
||||
],
|
||||
users: [
|
||||
{
|
||||
user: {
|
||||
token: token,
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
return JSON.stringify(kubeconfig);
|
||||
}
|
||||
Reference in New Issue
Block a user