UNPKG

@openshift-assisted/ui-lib

Version:

React component library for the Assisted Installer UI

165 lines 7.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.networkWideToInfraEnvField = exports.formViewHostsToInfraEnvField = exports.getMapInterfaceMap = void 0; const js_yaml_1 = require("js-yaml"); const nmstateYaml_1 = require("./nmstateYaml"); const protocolVersion_1 = require("./protocolVersion"); const formDataFromInfraEnvField_1 = require("./formDataFromInfraEnvField"); const fromInfraEnv_1 = require("./fromInfraEnv"); const dummyData_1 = require("./dummyData"); const machineNetwork_1 = require("./machineNetwork"); const emptyData_1 = require("./emptyData"); const REAL_NIC_NAME = 'eth0'; const REAL_NIC_NAME_1 = 'eth1'; const BOND_NIC_NAME = 'bond0'; const getPrefixLength = (networkWide, protocolVersion) => { const machineNetwork = networkWide.ipConfigs[protocolVersion].machineNetwork; if (machineNetwork.prefixLength === '') { throw 'Subnet prefix length not configured'; } return machineNetwork.prefixLength; }; const toYamlWithComments = (json, comments) => { const yamlComments = comments.map((comment) => `${nmstateYaml_1.YAML_COMMENT_CHAR}${comment}`); return `${yamlComments.join('\n')}\n${(0, js_yaml_1.dump)(json, { noRefs: true })}`; }; const getNmstateObject = (networkWide, hostIps, bondType, hasBondsConfigured) => { const interfaces = []; const routeConfigs = []; const dns = (0, nmstateYaml_1.getDnsSection)(networkWide.dns); const realProtocolConfigs = {}; for (const protocolVersion of (0, protocolVersion_1.getShownProtocolVersions)(networkWide.protocolType)) { const hostIp = hostIps[protocolVersion]; let nicName = ''; if (hostIp) { nicName = bondType && hasBondsConfigured ? BOND_NIC_NAME : REAL_NIC_NAME; realProtocolConfigs[protocolVersion] = (0, nmstateYaml_1.getNmstateProtocolConfig)(hostIp, getPrefixLength(networkWide, protocolVersion)); if (networkWide.useVlan && networkWide.vlanId) { if (bondType && hasBondsConfigured) { interfaces.push((0, nmstateYaml_1.getInterface)(BOND_NIC_NAME, realProtocolConfigs, networkWide, bondType, hasBondsConfigured, true)); } } } else { //this happens when a host was particall configured, or not configured at all const protocolConfigs = { [protocolVersion]: (0, nmstateYaml_1.getNmstateProtocolConfig)(dummyData_1.DUMMY_NMSTATE_ADDRESSES[protocolVersion].ip, dummyData_1.DUMMY_NMSTATE_ADDRESSES[protocolVersion].prefixLength), }; nicName = (0, dummyData_1.getDummyNicName)(protocolVersion); interfaces.push((0, nmstateYaml_1.getInterface)(nicName, protocolConfigs, networkWide, bondType, hasBondsConfigured)); if (bondType && hasBondsConfigured) { interfaces.push((0, nmstateYaml_1.getInterface)(BOND_NIC_NAME, protocolConfigs, networkWide, bondType, hasBondsConfigured, true)); } } routeConfigs.push((0, nmstateYaml_1.getRouteConfig)(protocolVersion, networkWide.ipConfigs[protocolVersion].gateway, networkWide.useVlan && networkWide.vlanId ? (0, nmstateYaml_1.getVlanNicName)(nicName, networkWide.vlanId) : nicName)); } if (Object.keys(realProtocolConfigs).length > 0) { interfaces.unshift((0, nmstateYaml_1.getInterface)(bondType && hasBondsConfigured ? BOND_NIC_NAME : REAL_NIC_NAME, realProtocolConfigs, networkWide, bondType, hasBondsConfigured)); } const nmstate = { interfaces, 'dns-resolver': dns, routes: { config: routeConfigs }, }; return nmstate; }; const toYaml = (networkWideConfiguration, formHostData) => { const comments = [nmstateYaml_1.FORM_VIEW_PREFIX]; for (const protocolVersion of (0, protocolVersion_1.getShownProtocolVersions)(networkWideConfiguration.protocolType)) { comments.push(`${(0, nmstateYaml_1.getMachineNetworkFieldName)(protocolVersion)} ${(0, machineNetwork_1.getMachineNetworkCidr)(networkWideConfiguration.ipConfigs[protocolVersion].machineNetwork)}`); } const hostIps = formHostData ? formHostData.ips : (0, emptyData_1.getEmptyHostIps)(); const bondType = formHostData ? formHostData.bondType : ''; const hasBondsConfigured = formHostData && formHostData.bondPrimaryInterface !== '' && formHostData.bondSecondaryInterface !== ''; const nmstate = getNmstateObject(networkWideConfiguration, hostIps, bondType, hasBondsConfigured); return toYamlWithComments(nmstate, comments); }; const formDataToInfraEnvField = (formData) => { let ret = []; if (formData.hosts.length === 0) { //user only filled in network wide configuration and didn't fill in host specific configurations ret = [ { networkYaml: toYaml(formData.networkWide), macInterfaceMap: (0, dummyData_1.getDummyMacInterfaceMap)(formData.networkWide), }, ]; } else { for (const host of formData.hosts) { ret.push({ networkYaml: toYaml(formData.networkWide, host), macInterfaceMap: (0, exports.getMapInterfaceMap)(host), }); } } return ret; }; const getMapInterfaceMap = (host) => { if (host.bondPrimaryInterface && host.bondPrimaryInterface !== '' && host.bondSecondaryInterface && host.bondSecondaryInterface !== '') { return [ { macAddress: host.bondPrimaryInterface, logicalNicName: REAL_NIC_NAME, }, { macAddress: host.bondSecondaryInterface, logicalNicName: REAL_NIC_NAME_1, }, ]; } else { return [ { macAddress: host.macAddress, logicalNicName: REAL_NIC_NAME, }, ]; } }; exports.getMapInterfaceMap = getMapInterfaceMap; const formViewHostsToInfraEnvField = (currentInfraEnv, formViewHosts) => { const staticNetworkConfig = (0, fromInfraEnv_1.getStaticNetworkConfig)(currentInfraEnv); if (!staticNetworkConfig) { throw `Infra env doesn't contain static ip values`; } const currentFormData = (0, formDataFromInfraEnvField_1.formDataFromInfraEnvField)(staticNetworkConfig); const networkWide = currentFormData.networkWide; return formDataToInfraEnvField({ networkWide: networkWide, hosts: formViewHosts, }); }; exports.formViewHostsToInfraEnvField = formViewHostsToInfraEnvField; const fixHostIps = (networkWide, hosts) => { //fix host ips following changes in network wide configuration protocol type for (const host of hosts) { const newHostIps = (0, emptyData_1.getEmptyHostIps)(); for (const protocolVersion of (0, protocolVersion_1.getShownProtocolVersions)(networkWide.protocolType)) { newHostIps[protocolVersion] = host.ips[protocolVersion]; } host.ips = newHostIps; } }; const networkWideToInfraEnvField = (currentInfraEnv, networkWide) => { const staticNetworkConfig = (0, fromInfraEnv_1.getStaticNetworkConfig)(currentInfraEnv); if (!staticNetworkConfig) { throw `Infra env doesn't contain static ip values`; } const currentFormData = (0, formDataFromInfraEnvField_1.formDataFromInfraEnvField)(staticNetworkConfig); fixHostIps(networkWide, currentFormData.hosts); //Transform vlanId to number if (networkWide.vlanId !== '') { networkWide.vlanId = Number(networkWide.vlanId); } return formDataToInfraEnvField({ networkWide, hosts: currentFormData.hosts }); }; exports.networkWideToInfraEnvField = networkWideToInfraEnvField; //# sourceMappingURL=formDataToInfraEnvField.js.map