UNPKG

@veecode-platform/safira-cli

Version:

Generate a microservice project from your spec.

56 lines (55 loc) 3.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ResourceType = exports.AssociatePlugin = void 0; const kubectl_1 = require("../kubectl/kubectl"); const array_utils_1 = require("../utils/array-utils"); const file_system_utils_1 = require("../utils/file-system-utils"); const yaml_utils_1 = require("../utils/yaml-utils"); const commands_1 = require("../kubectl/commands"); const command_execute_1 = require("../command/command-execute"); class AssociatePlugin { constructor() { } async add(resourceName, resourceType, k8sNamespace, pluginsList) { const service = await this._loadConfig(resourceName, resourceType, k8sNamespace); let listPlugins = this._extractPlugins(service); listPlugins.push(...pluginsList); listPlugins = array_utils_1.ArrayUtils.removeDuplicates(listPlugins); service.metadata.annotations["konghq.com/plugins"] = listPlugins.join(", "); await this._applyConfig(resourceName, resourceType, k8sNamespace, service); } async remove(resourceName, resourceType, k8sNamespace, pluginsListRemove) { const service = await this._loadConfig(resourceName, resourceType, k8sNamespace); let listPlugins = this._extractPlugins(service); listPlugins = array_utils_1.ArrayUtils.removeItemsFromArray(listPlugins, pluginsListRemove); service.metadata.annotations["konghq.com/plugins"] = listPlugins.join(", "); await this._applyConfig(resourceName, resourceType, k8sNamespace, service); } _extractPlugins(service) { const kongPlugins = service.metadata.annotations["konghq.com/plugins"]; return kongPlugins?.replace(/ +/g, "")?.split(",") || []; } async _loadConfig(resourceName, resourceType, k8sNamespace) { const KubectlBin = await new kubectl_1.Kubectl().getKubectl(); const stdout = await command_execute_1.CommandExecute.instance.exec(`${KubectlBin} get ${resourceType} -n ${k8sNamespace} ${resourceName} -o yaml`, false); if (stdout) return yaml_utils_1.YamlUtils.parse(stdout); throw new Error(`Error loading ${resourceType} with name ${resourceName} in k8s namespace ${k8sNamespace}`); } async _applyConfig(resourceName, resourceType, k8sNamespace, service) { const tmpFile = file_system_utils_1.FileSystemUtils.buildPath(file_system_utils_1.FileSystemUtils.getTempDirectory(), `${resourceName}-${resourceType}.yaml`); file_system_utils_1.FileSystemUtils.writeFile(tmpFile, yaml_utils_1.YamlUtils.stringify(service)); await commands_1.KubernetesApply.instance.command([tmpFile]); file_system_utils_1.FileSystemUtils.deleteFile(tmpFile); } static get instance() { if (!this._instance) this._instance = new this(); return this._instance; } } exports.AssociatePlugin = AssociatePlugin; var ResourceType; (function (ResourceType) { ResourceType["ingress"] = "ingress"; ResourceType["service"] = "service"; })(ResourceType = exports.ResourceType || (exports.ResourceType = {}));