Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions cmd/macadam/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ var (
ValidArgsFunction: completion.AutocompleteNone,
}

initOptsFromFlags = define.InitOptions{}
// initOptionalFlags = InitOptionalFlags{}
initOptsFromFlags = define.InitOptions{}
initOptionalFlags = InitOptionalFlags{}
defaultMachineName = "macadam"
// now bool
)
Expand Down Expand Up @@ -82,6 +82,10 @@ func init() {
flags.StringSliceVarP(&initOptsFromFlags.CloudInitPaths, CloudInitPathFlagName, "", []string{}, "Path to user-data, meta-data and network-config cloud-init configuration files")
_ = initCmd.RegisterFlagCompletionFunc(CloudInitPathFlagName, completion.AutocompleteDefault)

userModeNetFlagName := "user-mode-networking"
flags.BoolVar(&initOptionalFlags.UserModeNetworking, userModeNetFlagName, false,
"Whether this machine should use user-mode networking, routing traffic through a host user-space process (Hyperv-only, requires --provider=hyperv)")

/* flags := initCmd.Flags()
cfg := registry.PodmanConfig()

Expand Down Expand Up @@ -142,11 +146,7 @@ func init() {
_ = initCmd.RegisterFlagCompletionFunc(IgnitionPathFlagName, completion.AutocompleteDefault)

rootfulFlagName := "rootful"
flags.BoolVar(&initOpts.Rootful, rootfulFlagName, false, "Whether this machine should prefer rootful container execution")

userModeNetFlagName := "user-mode-networking"
flags.BoolVar(&initOptionalFlags.UserModeNetworking, userModeNetFlagName, false,
"Whether this machine should use user-mode networking, routing traffic through a host user-space process") */
flags.BoolVar(&initOpts.Rootful, rootfulFlagName, false, "Whether this machine should prefer rootful container execution") */
}

func initMachine(cmd *cobra.Command, args []string) error {
Expand All @@ -155,7 +155,7 @@ func initMachine(cmd *cobra.Command, args []string) error {
return err
}

if err := preflights.RunPreflights(vmProvider); err != nil {
if err := preflights.RunPreflights(vmProvider, initOptionalFlags.UserModeNetworking); err != nil {
slog.Error(err.Error())
os.Exit(1)
}
Expand Down Expand Up @@ -215,6 +215,7 @@ func initMachine(cmd *cobra.Command, args []string) error {
HasReadyUnit: false,
ForwardSockets: false,
}
initOpts.UserModeNetworking = &initOptionalFlags.UserModeNetworking
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Preserve the tri-state semantics for UserModeNetworking

define.InitOptions documents nil as “use backend/system default”, false as “force disable”, and true as “force enable”. Assigning &initOptionalFlags.UserModeNetworking unconditionally forces false whenever the flag isn’t provided, overriding the provider’s default behaviour. This regresses existing flows (e.g. providers that rely on nil to auto-select networking).

Only populate the pointer when the user explicitly sets the flag; otherwise leave it nil.

[suggested diff]

-	initOpts.UserModeNetworking = &initOptionalFlags.UserModeNetworking
+	if flag := initCmd.Flags().Lookup("user-mode-networking"); flag != nil && flag.Changed {
+		initOpts.UserModeNetworking = &initOptionalFlags.UserModeNetworking
+	}

As per coding guidelines

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
initOpts.UserModeNetworking = &initOptionalFlags.UserModeNetworking
if flag := initCmd.Flags().Lookup("user-mode-networking"); flag != nil && flag.Changed {
initOpts.UserModeNetworking = &initOptionalFlags.UserModeNetworking
}
🤖 Prompt for AI Agents
In cmd/macadam/init.go around line 218, the code currently always sets
initOpts.UserModeNetworking = &initOptionalFlags.UserModeNetworking which
collapses the tri-state into false when the flag isn't provided; change it to
only populate initOpts.UserModeNetworking when the user explicitly set the flag
(e.g. check the command flag was provided via
Flags().Changed("user-mode-networking") or an explicit UserModeNetworkingSet
boolean) and otherwise leave initOpts.UserModeNetworking nil so backend/system
defaults are preserved.

/*
_, _, err = shim.VMExists(machineName, []vmconfigs.VMProvider{provider})
if err == nil {
Expand Down
2 changes: 1 addition & 1 deletion cmd/macadam/preflight.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@ func preflight(_ *cobra.Command, args []string) error {
if err != nil {
return err
}
return preflights.RunPreflights(vmProvider)
return preflights.RunPreflights(vmProvider, false)
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,6 @@ require (
tags.cncf.io/container-device-interface/specs-go v1.0.0 // indirect
)

replace github.com/containers/podman/v5 => github.com/cfergeau/podman/v5 v5.0.0-20250924155458-168a7bca9bee
replace github.com/containers/podman/v5 => github.com/cfergeau/podman/v5 v5.0.0-20251015161310-92f0af92dc3e

replace github.com/crc-org/machine => github.com/cfergeau/machine v0.0.0-20241127155529-1b8b9b8d1078
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cfergeau/machine v0.0.0-20241127155529-1b8b9b8d1078 h1:KpgRncgq6ZiWDnLe6R58dJjd6QSuU7RDqRrpl11Dxcg=
github.com/cfergeau/machine v0.0.0-20241127155529-1b8b9b8d1078/go.mod h1:trWeQimjfE3dJ8qWOxI4ePtYm13aecK42bf01s6h/Nc=
github.com/cfergeau/podman/v5 v5.0.0-20250924155458-168a7bca9bee h1:FZnjrAe2f40Y+lbGTzs48fwPI5q3zM4PyiTOlVLLtMM=
github.com/cfergeau/podman/v5 v5.0.0-20250924155458-168a7bca9bee/go.mod h1:/M4sKOScoXIFFAfLURDYibSSBDcx67Q+Mi9tdT5guV0=
github.com/cfergeau/podman/v5 v5.0.0-20251015161310-92f0af92dc3e h1:CVsF1j6brKiUWio1eN2lZ+75sZWoUX15eCogz0vkr04=
github.com/cfergeau/podman/v5 v5.0.0-20251015161310-92f0af92dc3e/go.mod h1:/M4sKOScoXIFFAfLURDYibSSBDcx67Q+Mi9tdT5guV0=
github.com/checkpoint-restore/checkpointctl v1.3.0 h1:bNz5b6s+lxFdG5ZGDba3qSkBtXDDTCG2494dfAbQJ4E=
github.com/checkpoint-restore/checkpointctl v1.3.0/go.mod h1:dqZH4wDvbjnsqFGK2LdUDk21yFQ1dCAtzgRMlG44KDM=
github.com/checkpoint-restore/go-criu/v7 v7.2.0 h1:qGiWA4App1gGlEfIJ68WR9jbezV9J7yZdjzglezcqKo=
Expand Down
19 changes: 15 additions & 4 deletions pkg/preflights/preflights.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,12 @@ import (
"github.com/containers/podman/v5/pkg/machine/vmconfigs"
)

func RunPreflights(provider vmconfigs.VMProvider) error {
if err := checkGvproxyVersion(provider); err != nil {
func RunPreflights(provider vmconfigs.VMProvider, userModeNetworking bool) error {
if err := validateOptions(provider, userModeNetworking); err != nil {
return err
}

if err := checkGvproxyVersion(provider, userModeNetworking); err != nil {
return fmt.Errorf("invalid gvproxy binary: %w", err)
}

Expand All @@ -28,10 +32,17 @@ func RunPreflights(provider vmconfigs.VMProvider) error {
return nil
}

func validateOptions(provider vmconfigs.VMProvider, userModeNetworking bool) error {
if provider.VMType() == define.WSLVirt && userModeNetworking {
return fmt.Errorf("user-mode networking is not supported on WSL. Please run the command without the --user-mode-networking flag")
}
return nil
}

// macadam/podman needs a gvproxy version which supports the --services
// argument
func checkGvproxyVersion(provider vmconfigs.VMProvider) error {
if provider.VMType() == define.WSLVirt || provider.VMType() == define.HyperVVirt {
func checkGvproxyVersion(provider vmconfigs.VMProvider, userModeNetworking bool) error {
if provider.VMType() == define.WSLVirt || (provider.VMType() == define.HyperVVirt && !userModeNetworking) {
return nil
}
if err := checkBinaryArg(machine.ForwarderBinaryName, "-services"); err != nil {
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading