-
-
Notifications
You must be signed in to change notification settings - Fork 773
Description
Bug Report
Description
I tried to run Talos on Exoscale private instances. In that case the instances don't have access to the metadata service (169.254.169.254). Due to the fact that they are private I can't use the exoscale disk image, since that one expects metadata coming from that link-local address.
Because of that I used the nocloud disk image instead. With that Exoscale falls back to using a CIDATA ISO instead which contains the user-data.
However, Talos fails to parse the user-data with:
failed to load config via platform nocloud: decode error: yaml: line 4: could not find expected ':'
The issue is that Exoscale provides the user-data as a MIME multi-part archive and the nocloud platform doesn't recognize this format and tries to parse the entire contents as YAML.
As an example this is how Exoscale provides the user-data to the machines:
Content-Type: multipart/mixed; boundary="===============OTc5MDFkZDQtMzkxOS00OWI2LWJhMjAtZGNhNGEzZjFmNjc4=="
MIME-Version: 1.0
--===============OTc5MDFkZDQtMzkxOS00OWI2LWJhMjAtZGNhNGEzZjFmNjc4==
Content-Type: text/cloud-config; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="user-data-0"
dmVyc2lvbjogdjFhbHBoYTEKZGVidWc6IGZhbHNlCnBlcn...
--===============OTc5MDFkZDQtMzkxOS00OWI2LWJhMjAtZGNhNGEzZjFmNjc4==
The actual machineconfig is base64 encoded inside one of the MIME parts.
I have a working fix that handles this MIME multi-part format. I'd be happy to submit a PR, though it still needs a bit of polishing. For now I wanted to report the issue to have it as a reference.
Logs
Errors with nocloud 1.12.1
user: warning: [2026-01-20T10:53:29.653647055Z]: [talos] downloading config {"component": "controller-runtime", "controller": "config.AcquireController", "platform": "nocloud"}
user: warning: [2026-01-20T10:53:29.756267055Z]: [talos] volume status {"component": "controller-runtime", "controller": "block.VolumeManagerController", "volume": "platform/cidata/config", "phase": "waiting -> ready", "location": "/dev/vdb"}
kern: debug: [2026-01-20T10:53:29.759089055Z]: ISO 9660 Extensions: Microsoft Joliet Level 3
kern: debug: [2026-01-20T10:53:29.759218055Z]: ISO 9660 Extensions: RRIP_1991A
user: warning: [2026-01-20T10:53:29.759264055Z]: [talos] found config disk (cidata) at /dev/vdb
user: warning: [2026-01-20T10:53:29.759934055Z]: [talos] fetching meta config from: cidata/meta-data
user: warning: [2026-01-20T10:53:29.760729055Z]: [talos] fetching network config from: cidata/network-config
user: warning: [2026-01-20T10:53:29.761454055Z]: [talos] failed to read network-config: no such file or directory
user: warning: [2026-01-20T10:53:29.762189055Z]: [talos] fetching machine config from: cidata/user-data
user: warning: [2026-01-20T10:53:29.764171055Z]: [talos] volume status {"component": "controller-runtime", "controller": "block.VolumeManagerController", "volume": "platform/cidata/config", "phase": "ready -> closed", "location": "/dev/vdb"}
user: warning: [2026-01-20T10:53:29.771281055Z]: [talos] controller failed {"component": "controller-runtime", "controller": "config.AcquireController", "error": "failed to load config via platform nocloud: decode error: yaml: line 4: could not find expected ':'"}
Success with fix which adds mime parsing to nocloud.
user: warning: [2026-01-21T14:08:04.126057033Z]: [talos] found config disk (cidata) at /dev/vdb
user: warning: [2026-01-21T14:08:04.126488033Z]: [talos] fetching meta config from: cidata/meta-data
user: warning: [2026-01-21T14:08:04.127150033Z]: [talos] fetching network config from: cidata/network-config
user: warning: [2026-01-21T14:08:04.127679033Z]: [talos] failed to read network-config: no such file or directory
user: warning: [2026-01-21T14:08:04.128185033Z]: [talos] fetching machine config from: cidata/user-data
user: warning: [2026-01-21T14:08:04.129245033Z]: [talos] volume status {"component": "controller-runtime", "controller":
"block.VolumeManagerController", "volume": "platform/cidata/config", "phase": "ready -> closed", "location": "/dev/vdb"}
user: warning: [2026-01-21T14:08:04.131139033Z]: [talos] nocloud: parsed 1 MIME parts
user: warning: [2026-01-21T14:08:04.133195033Z]: [talos] machine config loaded successfully {"component": "controller-runtime",
"controller": "config.AcquireController", "sources": ["nocloud"]}
user: warning: [2026-01-21T14:08:04.134278033Z]: [talos] task loadConfig (1/1): done, 113.216524ms
user: warning: [2026-01-21T14:08:04.134716033Z]: [talos] phase config (9/9): done, 114.412797ms
user: warning: [2026-01-21T14:08:04.135139033Z]: [talos] initialize sequence: done: 2.442343847s
Environment
- Talos version: v1.12.1
- Kubernetes version: v1.35.0
- Platform: nocloud