@veecode-platform/safira-cli
Version:
Generate a microservice project from your spec.
56 lines (55 loc) • 3.09 kB
JavaScript
;
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 = {}));