UNPKG

@openshift-assisted/ui-lib

Version:

React component library for the Assisted Installer UI

220 lines 10 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.areOnlySoftValidationsFailing = exports.getFailingHostValidations = exports.filterByHostname = exports.getInventory = exports.getHardwareTypeText = exports.getHostname = exports.getEnabledHosts = exports.getTotalHostCount = exports.getEnabledHostCount = exports.getReadyHostCount = exports.canDownloadClusterLogs = exports.canDownloadHostLogs = exports.getHostRole = exports.canHostnameBeChanged = exports.getHostProgressStageNumber = exports.getHostProgress = exports.getHostProgressStages = exports.canOpenConsole = exports.getHostStatus = exports.canInstallHost = exports.canDownloadKubeconfig = exports.canEditDisks = exports.canEditHostname = exports.canEditRole = exports.canEditHost = exports.canReset = exports.canDelete = exports.canDisable = exports.canEnable = void 0; const tslib_1 = require("tslib"); const fuse_js_1 = tslib_1.__importDefault(require("fuse.js")); const utils_1 = require("../../utils"); const config_1 = require("../../config"); const constants_1 = require("../constants"); const api_1 = require("../../api"); const canEnable = (clusterStatus, status) => ['pending-for-input', 'insufficient', 'ready', 'adding-hosts'].includes(clusterStatus) && ['disabled', 'disabled-unbound'].includes(status); exports.canEnable = canEnable; const canDisable = (clusterStatus, status) => ['pending-for-input', 'insufficient', 'ready', 'adding-hosts'].includes(clusterStatus) && [ 'discovering', 'discovering-unbound', 'disconnected', 'disconnected-unbound', 'known', 'known-unbound', 'insufficient', 'insufficient-unbound', 'pending-for-input', ].includes(status); exports.canDisable = canDisable; const canDelete = (clusterStatus, status) => ['pending-for-input', 'insufficient', 'ready', 'adding-hosts'].includes(clusterStatus) && [ 'discovering', 'discovering-unbound', 'known', 'known-unbound', 'disconnected', 'disconnected-unbound', 'disabled', 'disabled-unbound', 'insufficient', 'insufficient-unbound', 'resetting', 'resetting-pending-user-input', 'resetting-pending-user-action', 'installing-pending-user-action', 'pending-for-input', 'error', ].includes(status); exports.canDelete = canDelete; const canReset = (clusterStatus, status) => ['adding-hosts'].includes(clusterStatus) && ['error', 'installing-pending-user-action'].includes(status); exports.canReset = canReset; const canEditHost = (clusterStatus, status) => ['pending-for-input', 'insufficient', 'ready', 'adding-hosts'].includes(clusterStatus) && [ 'discovering', 'discovering-unbound', 'known', 'known-unbound', 'disconnected', 'disconnected-unbound', 'disabled', 'disabled-unbound', 'insufficient', 'insufficient-unbound', 'pending-for-input', ].includes(status); exports.canEditHost = canEditHost; const canEditRole = (clusterStatus, status, isSNO) => (0, exports.canEditHost)(clusterStatus, status) && !isSNO; exports.canEditRole = canEditRole; const canEditHostname = (clusterStatus, host) => { // First check if the cluster status allows hostname editing if (!['insufficient', 'adding-hosts', 'ready', 'pending-for-input'].includes(clusterStatus)) { return false; } // For Day2 hosts, also check the host status if (host && host.kind === 'AddToExistingClusterHost') { return (0, exports.canHostnameBeChanged)(host.status); } return true; }; exports.canEditHostname = canEditHostname; exports.canEditDisks = exports.canEditHost; const canDownloadKubeconfig = (clusterStatus) => ['installing', 'finalizing', 'error', 'cancelled', 'installed', 'adding-hosts'].includes(clusterStatus); exports.canDownloadKubeconfig = canDownloadKubeconfig; const canInstallHost = (cluster, hostStatus) => cluster.kind === 'AddHostsCluster' && cluster.status === 'adding-hosts' && hostStatus === 'known'; exports.canInstallHost = canInstallHost; const getHostStatus = (hostStatus, clusterStatus) => { if (api_1.isInOcm && hostStatus === 'installed' && clusterStatus !== 'installed') { return 'finalizing'; } return hostStatus; }; exports.getHostStatus = getHostStatus; const canOpenConsole = (clusterStatus) => { return ['finalizing', 'installed'].includes(clusterStatus); }; exports.canOpenConsole = canOpenConsole; const getHostProgressStages = (host) => host.progressStages || []; exports.getHostProgressStages = getHostProgressStages; const getHostProgress = (host) => { var _a; return ((_a = host.progress) === null || _a === void 0 ? void 0 : _a.currentStage) ? host.progress : { currentStage: 'Starting installation', progressInfo: undefined, installationPercentage: undefined, }; }; exports.getHostProgress = getHostProgress; const getHostProgressStageNumber = (host) => { const stages = (0, exports.getHostProgressStages)(host); const progress = (0, exports.getHostProgress)(host); return Math.round((((progress === null || progress === void 0 ? void 0 : progress.installationPercentage) || 0) / 100) * stages.length); }; exports.getHostProgressStageNumber = getHostProgressStageNumber; const canHostnameBeChanged = (hostStatus) => [ 'discovering', 'discovering-unbound', 'known', 'known-unbound', 'disconnected', 'disconnected-unbound', 'insufficient', 'insufficient-unbound', 'pending-for-input', ].includes(hostStatus); exports.canHostnameBeChanged = canHostnameBeChanged; const getHostRole = (host, t, schedulableMasters, clusterKind) => { var _a; let roleLabel = `${((_a = (0, config_1.hostRoles)(t).find((role) => role.value === host.role)) === null || _a === void 0 ? void 0 : _a.label) || (0, config_1.hostRoles)(t)[0].label}`; if (schedulableMasters && host.role === 'master') { roleLabel = clusterKind === 'AddHostsCluster' ? t('ai:Control plane node') : t('ai:Control plane node, Worker'); } return `${roleLabel}${host.bootstrap ? ' (bootstrap)' : ''}`; }; exports.getHostRole = getHostRole; const canDownloadHostLogs = (host) => !!host.logsCollectedAt && host.logsCollectedAt !== config_1.TIME_ZERO; exports.canDownloadHostLogs = canDownloadHostLogs; const canDownloadClusterLogs = (cluster) => cluster.controllerLogsCollectedAt !== config_1.TIME_ZERO || !!(cluster.hosts || []).find((host) => (0, exports.canDownloadHostLogs)(host)); exports.canDownloadClusterLogs = canDownloadClusterLogs; const getReadyHostCount = (cluster) => cluster.readyHostCount || 0; exports.getReadyHostCount = getReadyHostCount; const getEnabledHostCount = (cluster) => cluster.enabledHostCount || 0; exports.getEnabledHostCount = getEnabledHostCount; const getTotalHostCount = (cluster) => cluster.totalHostCount || 0; exports.getTotalHostCount = getTotalHostCount; const getEnabledHosts = (hosts = []) => hosts.filter((host) => host.status !== 'disabled'); exports.getEnabledHosts = getEnabledHosts; const getHostname = (host, inventory) => host.requestedHostname || inventory.hostname || ''; exports.getHostname = getHostname; const getHardwareTypeText = (inventory, t) => { let hardwareTypeText = constants_1.DASH; const { systemVendor } = inventory; if (systemVendor !== undefined) { if (systemVendor.virtual) { hardwareTypeText = t('ai:Virtual machine'); } else { hardwareTypeText = t('ai:Bare metal'); } } return hardwareTypeText; }; exports.getHardwareTypeText = getHardwareTypeText; const getInventory = (host) => { const { inventory: inventoryString = '' } = host; return (0, utils_1.stringToJSON)(inventoryString) || {}; }; exports.getInventory = getInventory; const filterByHostname = (hosts, hostnameFilter) => { if (!hostnameFilter) { return { hosts, sorted: false }; } const hostsWithHostname = hosts.map((host) => { const { inventory: inventoryString = '' } = host; const inventory = (0, utils_1.stringToJSON)(inventoryString) || {}; const hostname = (0, exports.getHostname)(host, inventory); return { hostname, host, }; }); const fuse = new fuse_js_1.default(hostsWithHostname, { includeScore: true, ignoreLocation: true, threshold: 0.3, keys: ['hostname'], }); const filteredHosts = fuse.search(hostnameFilter); const sortedHosts = filteredHosts .sort((a, b) => (a.score || 0) - (b.score || 0)) .map(({ item }) => item.host); const sorted = filteredHosts.length > 1 && filteredHosts.some((result, index) => index > 0 && (result.score || 0) !== (filteredHosts[0].score || 0)); return { hosts: sortedHosts, sorted, }; }; exports.filterByHostname = filterByHostname; const getFailingHostValidations = (validationsInfo) => Object.keys(validationsInfo).reduce((curr, groupStr) => { const group = groupStr; const failingValidations = validationsInfo[group].filter((validation) => validation.status === 'failure'); return [...curr, ...failingValidations]; }, []); exports.getFailingHostValidations = getFailingHostValidations; const areOnlySoftValidationsFailing = (validationsInfo) => { const failingValidationIds = (0, exports.getFailingHostValidations)(validationsInfo).map((validation) => validation.id); if (!failingValidationIds.length) return false; for (const id of failingValidationIds) { if (!['ntp-synced', 'container-images-available', 'mtu-valid'].includes(id)) { return false; } } return true; }; exports.areOnlySoftValidationsFailing = areOnlySoftValidationsFailing; //# sourceMappingURL=utils.js.map