UNPKG

@stolostron/multicluster-sdk

Version:

Provides extensions and APIs that dynamic plugins can use to leverage multicluster capabilities provided by Red Hat Advanced Cluster Management.

188 lines 8.75 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.fleetWatch = exports.getResourceURL = exports.buildResourceURL = exports.getResourcePath = void 0; exports.fleetK8sGet = fleetK8sGet; exports.fleetK8sUpdate = fleetK8sUpdate; exports.fleetK8sPatch = fleetK8sPatch; exports.fleetK8sCreate = fleetK8sCreate; exports.fleetK8sDelete = fleetK8sDelete; /* Copyright Contributors to the Open Cluster Management project */ const dynamic_plugin_sdk_1 = require("@openshift-console/dynamic-plugin-sdk"); const requirements_1 = require("./utils/requirements"); const api_resource_list_1 = require("./utils/api-resource-list"); const constants_1 = require("./constants"); const commonHeaders = { 'Content-Type': 'application/json', }; const getK8sAPIPath = ({ apiGroup = 'core', apiVersion }) => { const isLegacy = apiGroup === 'core' && apiVersion === 'v1'; let p = isLegacy ? '/api/' : '/apis/'; if (!isLegacy && apiGroup) { p += `${apiGroup}/`; } p += apiVersion; return p; }; const getResourcePath = (model, options) => { let url = getK8sAPIPath(model); if (options.ns) { url += `/namespaces/${options.ns}`; } url += `/${model.plural}`; if (options.name) { // Some resources like Users can have special characters in the name. url += `/${encodeURIComponent(options.name)}`; } if (options.path) { url += `/${options.path}`; } if (Object.keys((options === null || options === void 0 ? void 0 : options.queryParams) || {}).length > 0) { const queryString = new URLSearchParams(options.queryParams).toString(); url += `?${queryString}`; } return url; }; exports.getResourcePath = getResourcePath; const buildResourceURL = (params) => { const { model, ns, name, cluster, queryParams, basePath = constants_1.BASE_K8S_API_PATH } = params; const resourcePath = (0, exports.getResourcePath)(model, { ns, name, queryParams, cluster }); return `${basePath}${resourcePath}`; }; exports.buildResourceURL = buildResourceURL; const getResourceURL = (params) => __awaiter(void 0, void 0, void 0, function* () { const backendURL = yield (0, api_resource_list_1.getBackendUrl)(); return (0, exports.buildResourceURL)(Object.assign(Object.assign({}, params), { basePath: backendURL })); }); exports.getResourceURL = getResourceURL; function fleetK8sGet(options) { return __awaiter(this, void 0, void 0, function* () { const { model, name, ns, cluster } = options; if (cluster === undefined) { return (0, dynamic_plugin_sdk_1.k8sGet)(options); } const requestPath = yield (0, exports.getResourceURL)({ model, ns, name, cluster, queryParams: options.queryParams }); return (0, dynamic_plugin_sdk_1.consoleFetchJSON)(requestPath, 'GET'); }); } function fleetK8sUpdate(options) { return __awaiter(this, void 0, void 0, function* () { var _a, _b; const { model, name, ns, data } = options; const cluster = options.cluster || data.cluster; if (cluster === undefined) { return (0, dynamic_plugin_sdk_1.k8sUpdate)(options); } const requestPath = yield (0, exports.getResourceURL)({ model, ns: ((_a = data === null || data === void 0 ? void 0 : data.metadata) === null || _a === void 0 ? void 0 : _a.namespace) || ns, name: ((_b = data === null || data === void 0 ? void 0 : data.metadata) === null || _b === void 0 ? void 0 : _b.name) || name, cluster: cluster, queryParams: options.queryParams, }); return (0, dynamic_plugin_sdk_1.consoleFetchJSON)(requestPath, 'PUT'); }); } function fleetK8sPatch(options) { return __awaiter(this, void 0, void 0, function* () { var _a, _b; const { resource, model, ns, name } = options !== null && options !== void 0 ? options : {}; const cluster = options.cluster || resource.cluster; if (cluster === undefined) { return (0, dynamic_plugin_sdk_1.k8sPatch)(options); } const headers = {}; if (Array.isArray(options.data)) { headers['Content-Type'] = 'application/json-patch+json'; } else { headers['Content-Type'] = 'application/merge-patch+json'; } const requestPath = yield (0, exports.getResourceURL)({ model, ns: ((_a = resource === null || resource === void 0 ? void 0 : resource.metadata) === null || _a === void 0 ? void 0 : _a.namespace) || ns, name: ((_b = resource === null || resource === void 0 ? void 0 : resource.metadata) === null || _b === void 0 ? void 0 : _b.name) || name, cluster, queryParams: options.queryParams, }); return (0, dynamic_plugin_sdk_1.consoleFetchJSON)(requestPath, 'PATCH', { body: JSON.stringify(options.data), headers }); }); } function fleetK8sCreate(options) { return __awaiter(this, void 0, void 0, function* () { var _a, _b; const { data, model, ns, name } = options; const cluster = options.cluster || data.cluster; if (cluster === undefined) { return (0, dynamic_plugin_sdk_1.k8sCreate)(options); } const requestPath = yield (0, exports.getResourceURL)({ model, ns: ((_a = data === null || data === void 0 ? void 0 : data.metadata) === null || _a === void 0 ? void 0 : _a.namespace) || ns, name: ((_b = data.metadata) === null || _b === void 0 ? void 0 : _b.name) || name, cluster, queryParams: options.queryParams, }); return (0, dynamic_plugin_sdk_1.consoleFetchJSON)(requestPath, 'POST', { body: JSON.stringify(data), headers: commonHeaders, }); }); } function fleetK8sDelete(options) { return __awaiter(this, void 0, void 0, function* () { var _a, _b; const { model, name, ns, json, resource } = options; const cluster = (resource === null || resource === void 0 ? void 0 : resource.cluster) || (options === null || options === void 0 ? void 0 : options.cluster); if (cluster === undefined) { return (0, dynamic_plugin_sdk_1.k8sDelete)(options); } const { propagationPolicy } = model; const jsonData = json !== null && json !== void 0 ? json : (propagationPolicy && { kind: 'DeleteOptions', apiVersion: 'v1', propagationPolicy }); const requestPath = yield (0, exports.getResourceURL)({ model, ns: ns || ((_a = resource === null || resource === void 0 ? void 0 : resource.metadata) === null || _a === void 0 ? void 0 : _a.namespace), name: name || ((_b = resource === null || resource === void 0 ? void 0 : resource.metadata) === null || _b === void 0 ? void 0 : _b.name), cluster, queryParams: options === null || options === void 0 ? void 0 : options.queryParams, }); return (0, dynamic_plugin_sdk_1.consoleFetchJSON)(requestPath, 'DELETE', { headers: commonHeaders, body: JSON.stringify(jsonData), }); }); } const fleetWatch = (model, query = {}, backendURL) => { const queryParams = { watch: 'true' }; const { labelSelector } = query; if (labelSelector) { const encodedSelector = (0, requirements_1.selectorToString)(labelSelector); if (encodedSelector) { queryParams.labelSelector = encodedSelector; } } if (query.fieldSelector) { queryParams.fieldSelector = query.fieldSelector; } if (query.resourceVersion) { queryParams.resourceVersion = query.resourceVersion; } const requestPath = (0, exports.buildResourceURL)({ model, cluster: query.cluster, queryParams, ns: query.ns, basePath: backendURL, }); return new WebSocket(requestPath); }; exports.fleetWatch = fleetWatch; //# sourceMappingURL=apiRequests.js.map