mirror of
https://github.com/Azure/k8s-set-context.git
synced 2026-04-03 11:12:21 +08:00
* updated action file with node16 * Code consistency using prettier and its workflow * Enforce Prettier * code fix * code fix * code fix Co-authored-by: Vidya Reddy <vidyareddy@microsoft.com>
79 lines
2.2 KiB
TypeScript
79 lines
2.2 KiB
TypeScript
import * as core from '@actions/core'
|
|
import * as jsyaml from 'js-yaml'
|
|
import {KubeConfig} from '@kubernetes/client-node'
|
|
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 kc = new KubeConfig()
|
|
kc.loadFromClusterAndUser(
|
|
{
|
|
name: 'default',
|
|
server: clusterUrl,
|
|
caData: certAuth,
|
|
skipTLSVerify: false
|
|
},
|
|
{
|
|
name: 'default-user',
|
|
token
|
|
}
|
|
)
|
|
return kc.exportConfig()
|
|
}
|