@openshift-assisted/ui-lib
Version:
React component library for the Assisted Installer UI
126 lines • 5.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mapCloudProviderToPlatformType = exports.getApiVipDnsName = void 0;
const tslib_1 = require("tslib");
const _1 = require(".");
const apis_1 = require("./apis");
const common_1 = require("../../common");
const CpuArchitectureService_1 = require("./CpuArchitectureService");
const getApiVipDnsName = (ocmCluster) => {
var _a, _b;
let apiVipDnsname = '';
let urlType = '';
try {
// Format of cluster.api.url: protocol://domain:port
if ((_a = ocmCluster.api) === null || _a === void 0 ? void 0 : _a.url) {
urlType = 'api';
const apiVipUrl = new URL(ocmCluster.api.url);
apiVipDnsname = apiVipUrl.hostname; // just domain is needed
}
else if ((_b = ocmCluster.console) === null || _b === void 0 ? void 0 : _b.url) {
urlType = 'console';
// Try to guess API URL from Console URL.
// Assumption: the cluster is originated by Assisted Installer, so console URL format should be of a fixed format.
// protocol://console-openshift-console.apps.[CLUSTER_NAME].[BASE_DOMAIN]"
const consoleUrlHostname = new URL(ocmCluster.console.url).hostname;
const APPS = '.apps.';
apiVipDnsname =
'api.' + consoleUrlHostname.substring(consoleUrlHostname.indexOf(APPS) + APPS.length);
}
}
catch (e) {
// can be ignored, the error type has been set already
}
return { apiVipDnsname, errorType: apiVipDnsname ? '' : urlType };
};
exports.getApiVipDnsName = getApiVipDnsName;
const mapCloudProviderToPlatformType = (cloudProviderId) => {
let platformType = cloudProviderId;
if (!common_1.SupportedPlatformIntegrations.includes(platformType) &&
!common_1.NonPlatformIntegrations.includes(platformType)) {
platformType = 'baremetal';
}
const platform = {
type: platformType || 'baremetal',
};
if (platformType === 'external') {
platform.external = {
platformName: 'oci',
cloudControllerManager: 'External',
};
}
return platform;
};
exports.mapCloudProviderToPlatformType = mapCloudProviderToPlatformType;
const Day2ClusterService = {
getOpenshiftClusterId(ocmCluster) {
return ocmCluster && ocmCluster.external_id;
},
fetchCluster(ocmCluster, pullSecret) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const openshiftClusterId = Day2ClusterService.getOpenshiftClusterId(ocmCluster);
if (!openshiftClusterId) {
// error?
return;
}
const day2ClusterId = yield Day2ClusterService.getDay2ClusterId(openshiftClusterId);
if (day2ClusterId) {
return Day2ClusterService.fetchClusterById(day2ClusterId);
}
return Day2ClusterService.createCluster(openshiftClusterId, ocmCluster.display_name || ocmCluster.name || openshiftClusterId, (0, exports.getApiVipDnsName)(ocmCluster).apiVipDnsname, pullSecret, ocmCluster.openshift_version, (0, CpuArchitectureService_1.mapOcmArchToCpuArchitecture)(ocmCluster.cpu_architecture) || common_1.CpuArchitecture.x86);
});
},
fetchClusterById(clusterId) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const { data } = yield apis_1.ClustersAPI.get(clusterId);
return data;
});
},
getDay2ClusterId(openshiftClusterId) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const { data: clusters } = yield apis_1.ClustersAPI.listByOpenshiftId(openshiftClusterId);
const day2Clusters = clusters.filter((cluster) => cluster.kind === 'AddHostsCluster');
if (day2Clusters.length > 0) {
return day2Clusters[0].id;
}
return undefined;
});
},
createCluster(openshiftClusterId, clusterName, apiVipDnsname, pullSecret, openshiftVersion, cpuArchitecture) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const { data: day2Cluster } = yield apis_1.ClustersAPI.registerAddHosts({
openshiftClusterId,
name: `scale-up-${clusterName}`,
apiVipDnsname,
openshiftVersion,
});
// Create only the infraenv for the day1 cpu architecture
yield _1.InfraEnvsService.create({
name: _1.InfraEnvsService.makeInfraEnvName(cpuArchitecture, day2Cluster.name),
pullSecret,
clusterId: day2Cluster.id,
openshiftVersion,
cpuArchitecture,
});
return day2Cluster;
});
},
/**
* Complete the day2Cluster coming from AI polling with the data in the OCM cluster
* @param day2Cluster Day2 cluster
* @param ocmCluster OCM cluster
*/
completeAiClusterWithOcmCluster: (day2Cluster, ocmCluster) => {
var _a;
let treakedCluster = day2Cluster;
if (ocmCluster && day2Cluster) {
treakedCluster = Object.assign(Object.assign({}, day2Cluster), { openshiftVersion: ocmCluster.openshift_version,
// The field "cpu_architecture" is calculated based on the existing hosts' architecture
// It can be a specific architecture, or "multi" if hosts from several architectures have been discovered
cpuArchitecture: (0, CpuArchitectureService_1.mapOcmArchToCpuArchitecture)(ocmCluster.cpu_architecture), platform: (0, exports.mapCloudProviderToPlatformType)((_a = ocmCluster.cloud_provider) === null || _a === void 0 ? void 0 : _a.id) });
}
return treakedCluster;
},
};
exports.default = Day2ClusterService;
//# sourceMappingURL=Day2ClusterService.js.map