UNPKG

@pubgcorp/pk-template

Version:
118 lines 11.7 kB
"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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