@openshift-assisted/ui-lib
Version:
React component library for the Assisted Installer UI
110 lines • 4.96 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getRouteConfig = exports.getInterface = exports.getDnsSection = exports.getNmstateProtocolConfig = exports.getProtocolType = exports.getMachineNetworks = exports.toYamlWithComments = exports.getYamlComments = exports.yamlToNmstateObject = exports.getProtocolVersionIdx = exports.getVlanNicName = exports.getMachineNetworkFieldName = exports.FORM_VIEW_PREFIX = exports.YAML_COMMENT_CHAR = void 0;
const tslib_1 = require("tslib");
const js_yaml_1 = require("js-yaml");
const nmstateTypes_1 = require("./nmstateTypes");
const dataTypes_1 = require("./dataTypes");
const findLastIndex_js_1 = tslib_1.__importDefault(require("lodash-es/findLastIndex.js"));
const REAL_NIC_NAME = 'eth0';
const REAL_NIC_NAME_1 = 'eth1';
const ROUTE_DESTINATIONS = {
ipv4: '0.0.0.0/0',
ipv6: '::/0',
};
const TABLE_ID = 254;
exports.YAML_COMMENT_CHAR = '#';
exports.FORM_VIEW_PREFIX = 'generated by ui form view';
const getMachineNetworkFieldName = (protocolVersion) => {
return `${protocolVersion}MachineNetwork`;
};
exports.getMachineNetworkFieldName = getMachineNetworkFieldName;
const getVlanNicName = (nicName, vlanId) => `${nicName}.${vlanId}`;
exports.getVlanNicName = getVlanNicName;
const getProtocolVersionIdx = (protocolVersion) => {
return protocolVersion === dataTypes_1.ProtocolVersion.ipv4 ? 0 : 1;
};
exports.getProtocolVersionIdx = getProtocolVersionIdx;
const yamlToNmstateObject = (yaml) => {
return (0, js_yaml_1.load)(yaml);
};
exports.yamlToNmstateObject = yamlToNmstateObject;
const getYamlComments = (yaml) => {
const lines = yaml.split('\n');
const lastCommentIdx = (0, findLastIndex_js_1.default)(lines, (line) => line.startsWith(exports.YAML_COMMENT_CHAR));
return lines.slice(0, lastCommentIdx + 1).map((line) => line.slice(1));
};
exports.getYamlComments = getYamlComments;
const toYamlWithComments = (json, comments) => {
const yamlComments = comments.map((comment) => `${exports.YAML_COMMENT_CHAR}${comment}`);
return `${yamlComments.join('\n')}\n${(0, js_yaml_1.dump)(json)}`;
};
exports.toYamlWithComments = toYamlWithComments;
const getMachineNetwork = (comments, protocolVersion) => {
const line = comments.find((comment) => comment.startsWith((0, exports.getMachineNetworkFieldName)(protocolVersion)));
return line ? line.split(' ')[1] : '';
};
const getMachineNetworks = (comments) => {
return {
ipv4: getMachineNetwork(comments, dataTypes_1.ProtocolVersion.ipv4),
ipv6: getMachineNetwork(comments, dataTypes_1.ProtocolVersion.ipv6),
};
};
exports.getMachineNetworks = getMachineNetworks;
const getProtocolType = (comments) => {
const machineNetworks = (0, exports.getMachineNetworks)(comments);
if (machineNetworks[dataTypes_1.ProtocolVersion.ipv4] && machineNetworks[dataTypes_1.ProtocolVersion.ipv6]) {
return 'dualStack';
}
if (machineNetworks[dataTypes_1.ProtocolVersion.ipv4]) {
return 'ipv4';
}
return null;
};
exports.getProtocolType = getProtocolType;
const getNmstateProtocolConfig = (ipAddress, prefixLength) => {
return {
address: [
{
ip: ipAddress,
'prefix-length': prefixLength,
},
],
enabled: true,
dhcp: false,
};
};
exports.getNmstateProtocolConfig = getNmstateProtocolConfig;
const getDnsSection = (dns) => {
const dnsServers = dns.split(',');
return { config: { server: dnsServers } };
};
exports.getDnsSection = getDnsSection;
const getInterface = (nicName, protocolConfigs, networkWide, bondType, hasBondsConfigured, createBondInterface) => {
if (networkWide.useVlan && networkWide.vlanId && !createBondInterface) {
return Object.assign({ name: (0, exports.getVlanNicName)(nicName, networkWide.vlanId), type: nmstateTypes_1.NmstateInterfaceType.VLAN, state: 'up', vlan: { 'base-iface': nicName, id: networkWide.vlanId } }, protocolConfigs);
}
else if (bondType && hasBondsConfigured) {
return Object.assign(Object.assign({ name: nicName, type: nmstateTypes_1.NmstateInterfaceType.BOND, state: 'up' }, (networkWide.useVlan ? {} : protocolConfigs)), { 'link-aggregation': {
mode: bondType,
options: {
miimon: '100',
},
port: [REAL_NIC_NAME, REAL_NIC_NAME_1],
} });
}
else {
return Object.assign({ name: nicName, type: nmstateTypes_1.NmstateInterfaceType.ETHERNET, state: 'up' }, protocolConfigs);
}
};
exports.getInterface = getInterface;
const getRouteConfig = (protocolVersion, gatewayAddress, nicName) => {
return {
destination: ROUTE_DESTINATIONS[protocolVersion],
'next-hop-address': gatewayAddress,
'next-hop-interface': nicName,
'table-id': TABLE_ID,
};
};
exports.getRouteConfig = getRouteConfig;
//# sourceMappingURL=nmstateYaml.js.map
;