From c2cc226b67a70be48fcb6a213f10ac9de7a47d91 Mon Sep 17 00:00:00 2001 From: David Edler Date: Wed, 13 Mar 2024 10:58:35 +0100 Subject: [PATCH] feat(network) use config api for network form help texts and defaults, unify network form key handling WD-7391 Signed-off-by: David Edler --- src/pages/networks/forms/NetworkForm.tsx | 57 ++++++------ .../networks/forms/NetworkFormBridge.tsx | 3 - src/pages/networks/forms/NetworkFormDns.tsx | 2 - src/pages/networks/forms/NetworkFormIpv4.tsx | 3 - src/pages/networks/forms/NetworkFormIpv6.tsx | 3 - .../storage/forms/StorageVolumeFormMain.tsx | 2 - src/types/config.d.ts | 2 + src/util/configInheritance.tsx | 24 +++++- src/util/networkForm.tsx | 86 +++++++------------ src/util/networks.tsx | 82 +++++++++++------- tests/networks.spec.ts | 14 +-- 11 files changed, 140 insertions(+), 138 deletions(-) diff --git a/src/pages/networks/forms/NetworkForm.tsx b/src/pages/networks/forms/NetworkForm.tsx index 3c0e4c0166..0e3d8119f4 100644 --- a/src/pages/networks/forms/NetworkForm.tsx +++ b/src/pages/networks/forms/NetworkForm.tsx @@ -10,6 +10,7 @@ import { import { LxdNetwork, LxdNetworkBridgeDriver, + LxdNetworkConfig, LxdNetworkDnsMode, LxdNetworkType, } from "types/network"; @@ -31,9 +32,9 @@ import NetworkFormDns from "pages/networks/forms/NetworkFormDns"; import NetworkFormIpv4 from "pages/networks/forms/NetworkFormIpv4"; import NetworkFormIpv6 from "pages/networks/forms/NetworkFormIpv6"; import { slugify } from "util/slugify"; -import { handleConfigKeys } from "util/networkForm"; import { useDocs } from "context/useDocs"; import YamlConfirmation from "components/forms/YamlConfirmation"; +import { getHandledNetworkConfigKeys, getNetworkKey } from "util/networks"; export interface NetworkFormValues { readOnly: boolean; @@ -88,10 +89,12 @@ export const toNetwork = (values: NetworkFormValues): Partial => { ), ); - const excludeConfigKeys = new Set(handleConfigKeys); + const excludeConfigKeys = getHandledNetworkConfigKeys(); const missingConfigFields = Object.fromEntries( Object.entries(values.bareNetwork?.config ?? {}).filter( - (e) => !excludeConfigKeys.has(e[0]) && !e[0].startsWith("volatile"), + (e) => + !excludeConfigKeys.has(e[0] as keyof LxdNetworkConfig) && + !e[0].startsWith("volatile"), ), ); @@ -102,30 +105,30 @@ export const toNetwork = (values: NetworkFormValues): Partial => { type: values.networkType, config: { ...missingConfigFields, - ["bridge.driver"]: values.bridge_driver, - ["bridge.hwaddr"]: values.bridge_hwaddr, - ["bridge.mtu"]: values.bridge_mtu, - ["dns.domain"]: values.dns_domain, - ["dns.mode"]: values.dns_mode, - ["dns.search"]: values.dns_search, - ["ipv4.address"]: values.ipv4_address, - ["ipv4.dhcp"]: values.ipv4_dhcp, - ["ipv4.dhcp.expiry"]: values.ipv4_dhcp_expiry, - ["ipv4.dhcp.ranges"]: values.ipv4_dhcp_ranges, - ["ipv4.l3only"]: values.ipv4_l3only, - ["ipv4.nat"]: values.ipv4_nat, - ["ipv4.nat.address"]: values.ipv4_nat_address, - ["ipv4.ovn.ranges"]: values.ipv4_ovn_ranges, - ["ipv6.address"]: values.ipv6_address, - ["ipv6.dhcp"]: values.ipv6_dhcp, - ["ipv6.dhcp.expiry"]: values.ipv6_dhcp_expiry, - ["ipv6.dhcp.ranges"]: values.ipv6_dhcp_ranges, - ["ipv6.dhcp.stateful"]: values.ipv6_dhcp_stateful, - ["ipv6.l3only"]: values.ipv6_l3only, - ["ipv6.nat"]: values.ipv6_nat, - ["ipv6.nat.address"]: values.ipv6_nat_address, - ["ipv6.ovn.ranges"]: values.ipv6_ovn_ranges, - ["network"]: values.network, + [getNetworkKey("bridge_driver")]: values.bridge_driver, + [getNetworkKey("bridge_hwaddr")]: values.bridge_hwaddr, + [getNetworkKey("bridge_mtu")]: values.bridge_mtu, + [getNetworkKey("dns_domain")]: values.dns_domain, + [getNetworkKey("dns_mode")]: values.dns_mode, + [getNetworkKey("dns_search")]: values.dns_search, + [getNetworkKey("ipv4_address")]: values.ipv4_address, + [getNetworkKey("ipv4_dhcp")]: values.ipv4_dhcp, + [getNetworkKey("ipv4_dhcp_expiry")]: values.ipv4_dhcp_expiry, + [getNetworkKey("ipv4_dhcp_ranges")]: values.ipv4_dhcp_ranges, + [getNetworkKey("ipv4_l3only")]: values.ipv4_l3only, + [getNetworkKey("ipv4_nat")]: values.ipv4_nat, + [getNetworkKey("ipv4_nat_address")]: values.ipv4_nat_address, + [getNetworkKey("ipv4_ovn_ranges")]: values.ipv4_ovn_ranges, + [getNetworkKey("ipv6_address")]: values.ipv6_address, + [getNetworkKey("ipv6_dhcp")]: values.ipv6_dhcp, + [getNetworkKey("ipv6_dhcp_expiry")]: values.ipv6_dhcp_expiry, + [getNetworkKey("ipv6_dhcp_ranges")]: values.ipv6_dhcp_ranges, + [getNetworkKey("ipv6_dhcp_stateful")]: values.ipv6_dhcp_stateful, + [getNetworkKey("ipv6_l3only")]: values.ipv6_l3only, + [getNetworkKey("ipv6_nat")]: values.ipv6_nat, + [getNetworkKey("ipv6_nat_address")]: values.ipv6_nat_address, + [getNetworkKey("ipv6_ovn_ranges")]: values.ipv6_ovn_ranges, + [getNetworkKey("network")]: values.network, }, }; }; diff --git a/src/pages/networks/forms/NetworkFormBridge.tsx b/src/pages/networks/forms/NetworkFormBridge.tsx index 628d93d9d8..51ab30d105 100644 --- a/src/pages/networks/forms/NetworkFormBridge.tsx +++ b/src/pages/networks/forms/NetworkFormBridge.tsx @@ -17,7 +17,6 @@ const NetworkFormBridge: FC = ({ formik }) => { formik, name: "bridge_mtu", label: "MTU", - help: "Bridge MTU (default varies if tunnel or fan setup)", defaultValue: "", children: , }), @@ -26,7 +25,6 @@ const NetworkFormBridge: FC = ({ formik }) => { formik, name: "bridge_hwaddr", label: "Hardware address", - help: "MAC address for the bridge", defaultValue: "", children: , }), @@ -37,7 +35,6 @@ const NetworkFormBridge: FC = ({ formik }) => { formik, name: "bridge_driver", label: "Bridge driver", - help: "Native or openvswitch", defaultValue: "", children: ( , }), @@ -60,7 +59,6 @@ const NetworkFormDns: FC = ({ formik }) => { formik, name: "dns_search", label: "DNS search", - help: "Full comma-separated domain search list, defaulting to DNS domain value", defaultValue: "", children: