From d47dbe8e12681ee2b233da86fbeb6523223f7033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20F=20Bj=C3=B6rklund?= Date: Sun, 7 Sep 2025 17:31:09 +0200 Subject: [PATCH] Don't read VMOpts.VZ struct from cidata directly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is supposed to be provided by the driver, and passed to the hostagent as features. The cidata and hostagent doesn't know VZ. Note: this also excludes the VMOpts.VZ from default and override, similar to the change made to VMOpts.QEMU already. It is unknown. Signed-off-by: Anders F Björklund --- pkg/cidata/cidata.go | 31 +++++++++++++------------------ pkg/driver/driver.go | 2 ++ pkg/driver/vz/vz_driver_darwin.go | 19 ++++++++++++++++--- pkg/hostagent/hostagent.go | 10 +++++++++- pkg/limayaml/defaults.go | 18 ------------------ 5 files changed, 40 insertions(+), 40 deletions(-) diff --git a/pkg/cidata/cidata.go b/pkg/cidata/cidata.go index ad024acba14..888e17c5198 100644 --- a/pkg/cidata/cidata.go +++ b/pkg/cidata/cidata.go @@ -118,7 +118,7 @@ func setupEnv(instConfigEnv map[string]string, propagateProxyEnv bool, slirpGate return env, nil } -func templateArgs(ctx context.Context, bootScripts bool, instDir, name string, instConfig *limatype.LimaYAML, udpDNSLocalPort, tcpDNSLocalPort, vsockPort int, virtioPort string, noCloudInit bool) (*TemplateArgs, error) { +func templateArgs(ctx context.Context, bootScripts bool, instDir, name string, instConfig *limatype.LimaYAML, udpDNSLocalPort, tcpDNSLocalPort, vsockPort int, virtioPort string, noCloudInit, rosettaEnabled, rosettaBinFmt bool) (*TemplateArgs, error) { if err := limayaml.Validate(instConfig, false); err != nil { return nil, err } @@ -138,20 +138,15 @@ func templateArgs(ctx context.Context, bootScripts bool, instDir, name string, i Containerd: Containerd{System: *instConfig.Containerd.System, User: *instConfig.Containerd.User, Archive: archive}, SlirpNICName: networks.SlirpNICName, - VMType: *instConfig.VMType, - VSockPort: vsockPort, - VirtioPort: virtioPort, - Plain: *instConfig.Plain, - TimeZone: *instConfig.TimeZone, - NoCloudInit: noCloudInit, - Param: instConfig.Param, - } - - if instConfig.VMOpts.VZ.Rosetta.Enabled != nil { - args.RosettaEnabled = *instConfig.VMOpts.VZ.Rosetta.Enabled - } - if instConfig.VMOpts.VZ.Rosetta.BinFmt != nil { - args.RosettaBinFmt = *instConfig.VMOpts.VZ.Rosetta.BinFmt + VMType: *instConfig.VMType, + VSockPort: vsockPort, + VirtioPort: virtioPort, + RosettaEnabled: rosettaEnabled, + RosettaBinFmt: rosettaBinFmt, + Plain: *instConfig.Plain, + TimeZone: *instConfig.TimeZone, + NoCloudInit: noCloudInit, + Param: instConfig.Param, } firstUsernetIndex := limayaml.FirstUsernetIndex(instConfig) @@ -351,7 +346,7 @@ func templateArgs(ctx context.Context, bootScripts bool, instDir, name string, i } func GenerateCloudConfig(ctx context.Context, instDir, name string, instConfig *limatype.LimaYAML) error { - args, err := templateArgs(ctx, false, instDir, name, instConfig, 0, 0, 0, "", false) + args, err := templateArgs(ctx, false, instDir, name, instConfig, 0, 0, 0, "", false, false, false) if err != nil { return err } @@ -373,8 +368,8 @@ func GenerateCloudConfig(ctx context.Context, instDir, name string, instConfig * return os.WriteFile(filepath.Join(instDir, filenames.CloudConfig), config, 0o444) } -func GenerateISO9660(ctx context.Context, drv driver.Driver, instDir, name string, instConfig *limatype.LimaYAML, udpDNSLocalPort, tcpDNSLocalPort int, guestAgentBinary, nerdctlArchive string, vsockPort int, virtioPort string, noCloudInit bool) error { - args, err := templateArgs(ctx, true, instDir, name, instConfig, udpDNSLocalPort, tcpDNSLocalPort, vsockPort, virtioPort, noCloudInit) +func GenerateISO9660(ctx context.Context, drv driver.Driver, instDir, name string, instConfig *limatype.LimaYAML, udpDNSLocalPort, tcpDNSLocalPort int, guestAgentBinary, nerdctlArchive string, vsockPort int, virtioPort string, noCloudInit, rosettaEnabled, rosettaBinFmt bool) error { + args, err := templateArgs(ctx, true, instDir, name, instConfig, udpDNSLocalPort, tcpDNSLocalPort, vsockPort, virtioPort, noCloudInit, rosettaEnabled, rosettaBinFmt) if err != nil { return err } diff --git a/pkg/driver/driver.go b/pkg/driver/driver.go index fc3a1afd653..199119e7b7b 100644 --- a/pkg/driver/driver.go +++ b/pkg/driver/driver.go @@ -107,4 +107,6 @@ type DriverFeatures struct { DynamicSSHAddress bool `json:"dynamicSSHAddress"` SkipSocketForwarding bool `json:"skipSocketForwarding"` NoCloudInit bool `json:"noCloudInit"` + RosettaEnabled bool `json:"rosettaEnabled"` + RosettaBinFmt bool `json:"rosettaBinFmt"` } diff --git a/pkg/driver/vz/vz_driver_darwin.go b/pkg/driver/vz/vz_driver_darwin.go index 235557e552f..ec901b73227 100644 --- a/pkg/driver/vz/vz_driver_darwin.go +++ b/pkg/driver/vz/vz_driver_darwin.go @@ -74,9 +74,11 @@ const Enabled = true type LimaVzDriver struct { Instance *limatype.Instance - SSHLocalPort int - vSockPort int - virtioPort string + SSHLocalPort int + vSockPort int + virtioPort string + rosettaEnabled bool + rosettaBinFmt bool machine *virtualMachineWrapper } @@ -106,6 +108,15 @@ func (l *LimaVzDriver) Configure(inst *limatype.Instance) *driver.ConfiguredDriv } } + if runtime.GOOS == "darwin" && limayaml.IsNativeArch(limatype.AARCH64) { + if l.Instance.Config.VMOpts.VZ.Rosetta.Enabled != nil { + l.rosettaEnabled = *l.Instance.Config.VMOpts.VZ.Rosetta.Enabled + } + } + if l.Instance.Config.VMOpts.VZ.Rosetta.BinFmt != nil { + l.rosettaBinFmt = *l.Instance.Config.VMOpts.VZ.Rosetta.BinFmt + } + return &driver.ConfiguredDriver{ Driver: l, } @@ -351,6 +362,8 @@ func (l *LimaVzDriver) Info() driver.Info { DynamicSSHAddress: false, SkipSocketForwarding: false, CanRunGUI: guiFlag, + RosettaEnabled: l.rosettaEnabled, + RosettaBinFmt: l.rosettaBinFmt, } return info } diff --git a/pkg/hostagent/hostagent.go b/pkg/hostagent/hostagent.go index 45c7cea4bf9..1c61c7e34cc 100644 --- a/pkg/hostagent/hostagent.go +++ b/pkg/hostagent/hostagent.go @@ -163,11 +163,19 @@ func New(ctx context.Context, instName string, stdout io.Writer, signalCh chan o vSockPort := limaDriver.Info().VsockPort virtioPort := limaDriver.Info().VirtioPort noCloudInit := limaDriver.Info().Features.NoCloudInit + rosettaEnabled := limaDriver.Info().Features.RosettaEnabled + rosettaBinFmt := limaDriver.Info().Features.RosettaBinFmt + + // Disable Rosetta in Plain mode + if *inst.Config.Plain { + rosettaEnabled = false + rosettaBinFmt = false + } if err := cidata.GenerateCloudConfig(ctx, inst.Dir, instName, inst.Config); err != nil { return nil, err } - if err := cidata.GenerateISO9660(ctx, limaDriver, inst.Dir, instName, inst.Config, udpDNSLocalPort, tcpDNSLocalPort, o.guestAgentBinary, o.nerdctlArchive, vSockPort, virtioPort, noCloudInit); err != nil { + if err := cidata.GenerateISO9660(ctx, limaDriver, inst.Dir, instName, inst.Config, udpDNSLocalPort, tcpDNSLocalPort, o.guestAgentBinary, o.nerdctlArchive, vSockPort, virtioPort, noCloudInit, rosettaEnabled, rosettaBinFmt); err != nil { return nil, err } diff --git a/pkg/limayaml/defaults.go b/pkg/limayaml/defaults.go index c0d95eff9fd..5e121d64c1b 100644 --- a/pkg/limayaml/defaults.go +++ b/pkg/limayaml/defaults.go @@ -768,22 +768,6 @@ func FillDefault(ctx context.Context, y, d, o *limatype.LimaYAML, filePath strin y.CACertificates.Files = unique(slices.Concat(d.CACertificates.Files, y.CACertificates.Files, o.CACertificates.Files)) y.CACertificates.Certs = unique(slices.Concat(d.CACertificates.Certs, y.CACertificates.Certs, o.CACertificates.Certs)) - if runtime.GOOS == "darwin" && IsNativeArch(limatype.AARCH64) { - if y.VMOpts.VZ.Rosetta.Enabled == nil { - y.VMOpts.VZ.Rosetta.Enabled = d.VMOpts.VZ.Rosetta.Enabled - } - if o.VMOpts.VZ.Rosetta.Enabled != nil { - y.VMOpts.VZ.Rosetta.Enabled = o.VMOpts.VZ.Rosetta.Enabled - } - } - - if y.VMOpts.VZ.Rosetta.BinFmt == nil { - y.VMOpts.VZ.Rosetta.BinFmt = d.VMOpts.VZ.Rosetta.BinFmt - } - if o.VMOpts.VZ.Rosetta.BinFmt != nil { - y.VMOpts.VZ.Rosetta.BinFmt = o.VMOpts.VZ.Rosetta.BinFmt - } - if y.NestedVirtualization == nil { y.NestedVirtualization = d.NestedVirtualization } @@ -831,8 +815,6 @@ func fixUpForPlainMode(y *limatype.LimaYAML) { y.Mounts = nil y.Containerd.System = ptr.Of(false) y.Containerd.User = ptr.Of(false) - y.VMOpts.VZ.Rosetta.BinFmt = ptr.Of(false) - y.VMOpts.VZ.Rosetta.Enabled = ptr.Of(false) y.TimeZone = ptr.Of("") }