@pubgcorp/pk-template
Version:
p template engine for kubernetes
118 lines • 11.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PkKubeCtl = void 0;
const exec_1 = require("./exec");
const kubectl_1 = require("./kubectl");
class PkKubeCtl extends kubectl_1.KubeCtl {
constructor(config, progress) {
super(config, progress);
this.progress = progress;
}
get version() {
this.clientVersion || (this.clientVersion = this.loadClientVersion());
return this.clientVersion;
}
get unnamespacables() {
return this._unnamespacables || (this._unnamespacables = this.clientVersionIsGT(1, 19) ?
this.queryUnnamespacables() :
this.queryUnnamespacables_1_19());
}
get kubeconfigArgs() {
return `--kubeconfig ${this.config.kubeConfig}${this.config.context ? ' --context ' + this.config.context : ''}`;
}
loadClientVersion() {
const { major, minor } = JSON.parse((0, exec_1.execPipeSync)('kubectl version --client -ojson')).clientVersion;
return { major: +major, minor: +minor };
}
clientVersionIsGT(major, minor) {
return this.version.major !== major ?
this.version.major > major :
this.version.minor > minor;
}
queryUnnamespacables_1_19() {
const command = `kubectl api-resources --no-headers --namespaced=false ${this.kubeconfigArgs}`;
const result = (0, exec_1.execPipeSync)(command);
const lines = result.split('\n').filter(l => l);
const set = {};
// Time-to-black-magic. Please refer to https://jira.krafton.com/browse/PUBG-8902 to see the background.
const mustHaveElement = 'storage.k8s.io';
const mustHaveElementIdx = result.indexOf(mustHaveElement);
const lineIdentifier = '\n';
const mustHaveElementLineIdx = result.lastIndexOf(lineIdentifier, mustHaveElementIdx) + lineIdentifier.length;
const apiGroupIdx = mustHaveElementIdx - mustHaveElementLineIdx;
for (const line of lines) {
const sp = line.substring(apiGroupIdx).trim().split(/\s+/);
const key = sp.length == 2
? `/${sp[1]}`
: `${sp[0]}/${sp[2]}`;
set[key] = true;
}
return set;
}
queryUnnamespacables() {
const command = `kubectl api-resources --no-headers --namespaced=false ${this.kubeconfigArgs}`;
const result = (0, exec_1.execPipeSync)(command);
const lines = result.split('\n').filter(l => l);
const set = {};
for (const line of lines) {
const args = line.split(/\s+/);
const lastIndex = args.length - 1;
const [apiVersion, _namespaced, kind] = [args[lastIndex - 2], args[lastIndex - 1], args[lastIndex]];
const [apiGroup, _version] = apiVersion.includes('/') ? apiVersion.split('/') : ['', apiVersion];
const key = `${apiGroup}/${kind}`;
set[key] = true;
}
return set;
}
getObject(kind, name, namespace) {
const command = `kubectl get ${kind} ${name} ${this.kubeconfigArgs} ${namespace ? `--namespace ${namespace}` : ''} -ojson`;
const result = (0, exec_1.execPipeSync)(command, '(NotFound)');
if (result) {
const obj = JSON.parse(result);
return obj;
}
return null;
}
getPkzSpec(name) {
const command = `kubectl get configmap ${name} ${this.kubeconfigArgs} --namespace pk-deployments -ojson`;
const result = (0, exec_1.execPipeSync)(command, '(NotFound)');
if (result) {
const configmap = JSON.parse(result);
return configmap;
}
return null;
}
toApiGroup(apiVersion) {
const sp = apiVersion.split('/');
return sp.length == 2 ? sp[0] : '';
}
isNamespacedType(apiGroup, kind) {
return !this.unnamespacables[`${apiGroup}/${kind}`];
}
isNamespacedObject(object) {
const apiGroup = this.toApiGroup(object.apiVersion);
return this.isNamespacedType(apiGroup, object.kind);
}
deleteObjects(keys) {
for (const key of keys) {
if (key.apiGroup == '' && key.kind == 'Namespace' && key.name == 'default') {
this.progress.verbose(' skip default namespaces');
continue;
}
const namespaced = this.isNamespacedType(key.apiGroup, key.kind);
if (namespaced && !key.namespace) {
this.progress.error(`!!! cannot determine object to delete (apigroup=${key.apiGroup}, kind=${key.kind}, name=${key.name}), namespace is missing`);
continue;
}
this.progress.confirm(`delete ${key.kind} ${namespaced ? key.namespace + '/' : ''}${key.name}`);
if (namespaced) {
this.deleteRaw(this.config, key.kind, key.name, key.namespace);
}
else {
this.deleteRaw(this.config, key.kind, key.name);
}
}
}
}
exports.PkKubeCtl = PkKubeCtl;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGsta3ViZWN0bC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9way1rdWJlY3RsL3BrLWt1YmVjdGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQXNDO0FBRXRDLHVDQUFvQztBQUVwQyxNQUFhLFNBQVUsU0FBUSxpQkFBTztJQUlwQyxZQUNFLE1BQXNCLEVBQ2YsUUFBbUI7UUFDMUIsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQURqQixhQUFRLEdBQVIsUUFBUSxDQUFXO0lBRTVCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxJQUFJLENBQUMsYUFBYSxLQUFsQixJQUFJLENBQUMsYUFBYSxHQUFLLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixLQUFyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUM7SUFDckMsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLGdCQUFnQixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuSCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFBLG1CQUFZLEVBQUMsaUNBQWlDLENBQUMs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