[pve-devel] [RFC PATCH installer] fix #5973: auto: first boot: allow snake- and kebabcased property names

Daniel Kral d.kral at proxmox.com
Thu Dec 5 15:07:21 CET 2024


Allow the names for the [first-boot] properties to be parsed as either
snake_cased or kebab-cased strings, i.e. `cert_fingerprint` or
`cert-fingerprint`, to have consistent property name casings. Currently,
this only affects the `cert_fingerprint`.

This change does not break API as it preserves the kebabcased variant
`cert-fingerprint`, but as this change propagates to the auto-installer,
using the snakecased `cert_fingerprint` will result in a parse error
during auto installation on any unpatched ISO (e.g. Proxmox VE 8.3-1).

Signed-off-by: Daniel Kral <d.kral at proxmox.com>
---
I have tested this by setting up a small HTTPS server with Python's
`http.server` and `ssl.wrap_socket()` on my local machine and creating
two different ISOs (with the Proxmox VE 8.3-1 ISO):

- with `cert-fingerprint` (which works correctly as expected), and
- with `cert_fingerprint` (which will fail at a parser error with the
newest Proxmox VE 8.3-1 ISO).

I've also tested the change by booting the ISO in debug mode and copying
over the recompiled binaries, setting up the environment and running the
auto installation with `proxmox-fetch-answer | proxmox-auto-installer`,
which worked as expected.

 proxmox-auto-installer/src/answer.rs | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/proxmox-auto-installer/src/answer.rs b/proxmox-auto-installer/src/answer.rs
index c206fcc..04c0ace 100644
--- a/proxmox-auto-installer/src/answer.rs
+++ b/proxmox-auto-installer/src/answer.rs
@@ -107,7 +107,7 @@ impl FirstBootHookServiceOrdering {
 /// Describes from where to fetch the first-boot hook script, either being baked into the ISO or
 /// from a URL.
 #[derive(Clone, Deserialize, Debug)]
-#[serde(rename_all = "kebab-case", deny_unknown_fields)]
+#[serde(deny_unknown_fields)]
 pub struct FirstBootHookInfo {
     /// Mode how to retrieve the first-boot executable file, either from an URL or from the ISO if
     /// it has been baked-in.
@@ -118,6 +118,7 @@ pub struct FirstBootHookInfo {
     /// Retrieve the post-install script from a URL, if source == "from-url".
     pub url: Option<String>,
     /// SHA256 cert fingerprint if certificate pinning should be used, if source == "from-url".
+    #[serde(alias = "cert-fingerprint")]
     pub cert_fingerprint: Option<String>,
 }
 
-- 
2.39.5





More information about the pve-devel mailing list