diff --git a/src/pages/networks/forms/NetworkForm.tsx b/src/pages/networks/forms/NetworkForm.tsx index 5d1573919a..fdfb2b326b 100644 --- a/src/pages/networks/forms/NetworkForm.tsx +++ b/src/pages/networks/forms/NetworkForm.tsx @@ -99,9 +99,7 @@ export const toNetwork = (values: NetworkFormValues): Partial => { const excludeConfigKeys = getHandledNetworkConfigKeys(); const missingConfigFields = Object.fromEntries( Object.entries(values.bareNetwork?.config ?? {}).filter( - (e) => - !excludeConfigKeys.has(e[0] as keyof LxdNetworkConfig) && - !e[0].startsWith("volatile"), + (e) => !excludeConfigKeys.has(e[0] as keyof LxdNetworkConfig), ), ); diff --git a/src/types/network.d.ts b/src/types/network.d.ts index 7ad9dbae54..91d46b105b 100644 --- a/src/types/network.d.ts +++ b/src/types/network.d.ts @@ -57,6 +57,7 @@ export interface LxdNetworkConfig { network?: string; parent?: string; [key: `user.${string}`]: string; + [key: `volatile.${string}`]: string; } export interface LxdNetwork { diff --git a/src/util/networkForm.spec.ts b/src/util/networkForm.spec.ts index be2a9ef4bb..14402c543a 100644 --- a/src/util/networkForm.spec.ts +++ b/src/util/networkForm.spec.ts @@ -29,4 +29,19 @@ describe("conversion to form values and back with toNetworkFormValues and toNetw expect(payload.config?.["user.key"]).toBe("custom-config-value"); }); + + it("preserves volatile keys in network config", () => { + const network = { + devices: {}, + config: { + "user.key": "custom-config-value", + "volatile.network.ipv4.address": "1.2.3.4", + }, + } as unknown as LxdNetwork; + + const formValues = toNetworkFormValues(network); + const payload = toNetwork(formValues); + + expect(payload.config?.["volatile.network.ipv4.address"]).toBe("1.2.3.4"); + }); });