@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
JavaScript
;
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