From 6ecf9fdcc2efaf21742b9d4945a3e08eceb6aa60 Mon Sep 17 00:00:00 2001 From: lstocchi Date: Wed, 5 Nov 2025 17:29:48 +0100 Subject: [PATCH 1/2] update podman lib with ipv4 localhost fix update podman to version containining IPv4 fix https://github.com/cfergeau/podman/pull/38 Signed-off-by: lstocchi --- go.mod | 2 +- go.sum | 4 +- .../v5/pkg/domain/infra/abi/play_linux.go | 18 ++ .../pkg/domain/infra/abi/play_unsupported.go | 13 ++ .../v5/pkg/machine/cloudinit/cloudinit.go | 55 +++--- .../pkg/machine/cloudinit/cloudinit_unix.go | 44 +++++ .../machine/cloudinit/cloudinit_windows.go | 161 ++++++++++++++++++ .../v5/pkg/machine/hyperv/hutil/hutil.go | 35 ++++ .../podman/v5/pkg/machine/hyperv/stubber.go | 57 ++----- .../v5/pkg/machine/vmconfigs/machine.go | 8 +- vendor/modules.txt | 5 +- 11 files changed, 323 insertions(+), 79 deletions(-) create mode 100644 vendor/github.com/containers/podman/v5/pkg/domain/infra/abi/play_linux.go create mode 100644 vendor/github.com/containers/podman/v5/pkg/domain/infra/abi/play_unsupported.go create mode 100644 vendor/github.com/containers/podman/v5/pkg/machine/cloudinit/cloudinit_unix.go create mode 100644 vendor/github.com/containers/podman/v5/pkg/machine/cloudinit/cloudinit_windows.go create mode 100644 vendor/github.com/containers/podman/v5/pkg/machine/hyperv/hutil/hutil.go diff --git a/go.mod b/go.mod index 83817db9..5f16611f 100644 --- a/go.mod +++ b/go.mod @@ -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-20251105160820-19a42bf7c31b replace github.com/crc-org/machine => github.com/cfergeau/machine v0.0.0-20241127155529-1b8b9b8d1078 diff --git a/go.sum b/go.sum index 8c759670..313d3461 100644 --- a/go.sum +++ b/go.sum @@ -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-20251105160820-19a42bf7c31b h1:32WZftqp+QHDJYA5wY5POlZ7h/NOjrxDAkaFxeF5Tgw= +github.com/cfergeau/podman/v5 v5.0.0-20251105160820-19a42bf7c31b/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= diff --git a/vendor/github.com/containers/podman/v5/pkg/domain/infra/abi/play_linux.go b/vendor/github.com/containers/podman/v5/pkg/domain/infra/abi/play_linux.go new file mode 100644 index 00000000..a0f98115 --- /dev/null +++ b/vendor/github.com/containers/podman/v5/pkg/domain/infra/abi/play_linux.go @@ -0,0 +1,18 @@ +//go:build !remote + +package abi + +import ( + "os" + + securejoin "github.com/cyphar/filepath-securejoin" +) + +// openSymlinkPath opens the path under root using securejoin.OpenatInRoot(). +func openSymlinkPath(root *os.File, unsafePath string, flags int) (*os.File, error) { + file, err := securejoin.OpenatInRoot(root, unsafePath) + if err != nil { + return nil, err + } + return securejoin.Reopen(file, flags) +} diff --git a/vendor/github.com/containers/podman/v5/pkg/domain/infra/abi/play_unsupported.go b/vendor/github.com/containers/podman/v5/pkg/domain/infra/abi/play_unsupported.go new file mode 100644 index 00000000..3ecbae7c --- /dev/null +++ b/vendor/github.com/containers/podman/v5/pkg/domain/infra/abi/play_unsupported.go @@ -0,0 +1,13 @@ +//go:build !linux && !remote + +package abi + +import ( + "errors" + "os" +) + +// openSymlinkPath is not supported on this platform. +func openSymlinkPath(root *os.File, unsafePath string, flags int) (*os.File, error) { + return nil, errors.New("cannot safely open symlink on this platform") +} diff --git a/vendor/github.com/containers/podman/v5/pkg/machine/cloudinit/cloudinit.go b/vendor/github.com/containers/podman/v5/pkg/machine/cloudinit/cloudinit.go index c87a14cc..e9bcdc1a 100644 --- a/vendor/github.com/containers/podman/v5/pkg/machine/cloudinit/cloudinit.go +++ b/vendor/github.com/containers/podman/v5/pkg/machine/cloudinit/cloudinit.go @@ -6,12 +6,10 @@ import ( "os" "path/filepath" - "github.com/containers/podman/v5/pkg/machine" "github.com/containers/podman/v5/pkg/machine/define" "github.com/containers/podman/v5/pkg/machine/vmconfigs" "github.com/kdomanski/iso9660" "github.com/sirupsen/logrus" - "gopkg.in/yaml.v3" ) type User struct { @@ -22,38 +20,24 @@ type User struct { SSHKeys []string `yaml:"ssh_authorized_keys"` } -type UserData struct { - Users []User `yaml:"users"` +type WriteFile struct { + Path string `yaml:"path,omitempty"` + Content string `yaml:"content,omitempty"` + Encoding string `yaml:"encoding,omitempty"` + Owner string `yaml:"owner,omitempty"` + Permissions string `yaml:"permissions,omitempty"` } -func GenerateUserData(mc *vmconfigs.MachineConfig) ([]byte, error) { - sshKey, err := machine.GetSSHKeys(mc.SSH.IdentityPath) - if err != nil { - return nil, err - } - - userData := UserData{ - Users: []User{ - User{ - Name: mc.SSH.RemoteUsername, - Sudo: "ALL=(ALL) NOPASSWD:ALL", - Shell: "/bin/bash", - Groups: []string{"users"}, - SSHKeys: []string{sshKey}, - }, - }, - } - - yamlBytes, err := yaml.Marshal(&userData) - if err != nil { - logrus.Errorf("Error marshaling to YAML: %v", err) - return nil, err - } - - headerLine := "#cloud-config\n" - yamlBytes = append([]byte(headerLine), yamlBytes...) +type UserData struct { + Users []User `yaml:"users"` + WriteFiles []WriteFile `yaml:"write_files,omitempty"` + RunCmd []string `yaml:"runcmd,omitempty"` + Mounts [][]string `yaml:"mounts,omitempty"` +} - return yamlBytes, nil +type EmbeddedResource struct { + Name string `yaml:"name"` + Content []byte `yaml:"content"` } func GenerateUserDataFile(mc *vmconfigs.MachineConfig) (string, error) { @@ -138,6 +122,15 @@ func GenerateISO(mc *vmconfigs.MachineConfig) (*define.VMFile, error) { return nil, err } + resources := GetEmbeddedResources(mc) + if resources != nil { + for _, res := range resources { + if err := writer.AddFile(bytes.NewReader(res.Content), res.Name); err != nil { + return nil, err + } + } + } + vmFile, err := GetCloudInitISOVMFile(mc) if err != nil { return nil, err diff --git a/vendor/github.com/containers/podman/v5/pkg/machine/cloudinit/cloudinit_unix.go b/vendor/github.com/containers/podman/v5/pkg/machine/cloudinit/cloudinit_unix.go new file mode 100644 index 00000000..1deae6e6 --- /dev/null +++ b/vendor/github.com/containers/podman/v5/pkg/machine/cloudinit/cloudinit_unix.go @@ -0,0 +1,44 @@ +//go:build !windows + +package cloudinit + +import ( + "github.com/containers/podman/v5/pkg/machine" + "github.com/containers/podman/v5/pkg/machine/vmconfigs" + "github.com/sirupsen/logrus" + "gopkg.in/yaml.v3" +) + +func GenerateUserData(mc *vmconfigs.MachineConfig) ([]byte, error) { + sshKey, err := machine.GetSSHKeys(mc.SSH.IdentityPath) + if err != nil { + return nil, err + } + + userData := UserData{ + Users: []User{ + User{ + Name: mc.SSH.RemoteUsername, + Sudo: "ALL=(ALL) NOPASSWD:ALL", + Shell: "/bin/bash", + Groups: []string{"users"}, + SSHKeys: []string{sshKey}, + }, + }, + } + + yamlBytes, err := yaml.Marshal(&userData) + if err != nil { + logrus.Errorf("Error marshaling to YAML: %v", err) + return nil, err + } + + headerLine := "#cloud-config\n" + yamlBytes = append([]byte(headerLine), yamlBytes...) + + return yamlBytes, nil +} + +func GetEmbeddedResources(_ *vmconfigs.MachineConfig) []EmbeddedResource { + return nil +} diff --git a/vendor/github.com/containers/podman/v5/pkg/machine/cloudinit/cloudinit_windows.go b/vendor/github.com/containers/podman/v5/pkg/machine/cloudinit/cloudinit_windows.go new file mode 100644 index 00000000..e0c7de5a --- /dev/null +++ b/vendor/github.com/containers/podman/v5/pkg/machine/cloudinit/cloudinit_windows.go @@ -0,0 +1,161 @@ +//go:build windows + +package cloudinit + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + + "github.com/containers/podman/v5/pkg/machine" + "github.com/containers/podman/v5/pkg/machine/hyperv/hutil" + "github.com/containers/podman/v5/pkg/machine/vmconfigs" + "github.com/sirupsen/logrus" + "gopkg.in/yaml.v3" +) + +func GenerateUserData(mc *vmconfigs.MachineConfig) ([]byte, error) { + sshKey, err := machine.GetSSHKeys(mc.SSH.IdentityPath) + if err != nil { + return nil, err + } + + userData := UserData{ + Users: []User{ + User{ + Name: mc.SSH.RemoteUsername, + Sudo: "ALL=(ALL) NOPASSWD:ALL", + Shell: "/bin/bash", + Groups: []string{"users"}, + SSHKeys: []string{sshKey}, + }, + }, + } + + if mc.HyperVHypervisor != nil && mc.HyperVHypervisor.UserModeNetworking { + netUnitFile, err := hutil.CreateNetworkUnit(mc.HyperVHypervisor.NetworkVSock.Port) + if err != nil { + return nil, err + } + + userData.WriteFiles = []WriteFile{ + { + Path: "/etc/NetworkManager/system-connections/vsock0.nmconnection", + Content: hutil.HyperVVsockNMConnection, + Permissions: "0600", + Owner: "root", + }, + { + Path: "/etc/systemd/system/vsock-network.service", + Content: netUnitFile, + Permissions: "0644", + Owner: "root", + }, + } + + userData.RunCmd = []string{ + "install -o root -g root -m 0755 /mnt/gvforwarder /usr/local/bin/gvforwarder", + "nmcli connection reload", + "systemctl daemon-reload", + "systemctl enable --now vsock-network.service", + } + + userData.Mounts = [][]string{ + {"/dev/sr0", "/mnt", "iso9660", "defaults,ro", "0", "0"}, + } + } + + yamlBytes, err := yaml.Marshal(&userData) + if err != nil { + logrus.Errorf("Error marshaling to YAML: %v", err) + return nil, err + } + + headerLine := "#cloud-config\n" + yamlBytes = append([]byte(headerLine), yamlBytes...) + return yamlBytes, nil +} + +func getGvForwarderBytes() ([]byte, error) { + url, err := getGvForwarderDownloadUrl() + if err != nil { + return nil, err + } + + resp, err := http.Get(url) + if err != nil { + return nil, fmt.Errorf("failed to download gvforwarder: %w", err) + } + + defer func() { + if err := resp.Body.Close(); err != nil { + logrus.Error(err) + } + }() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("failed to download gvforwarder: %s", resp.Status) + } + + bytes, err := io.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("failed to read gvforwarder response body: %w", err) + } + + return bytes, nil +} + +func getGvForwarderDownloadUrl() (string, error) { + apiURL := "https://api.github.com/repos/containers/gvisor-tap-vsock/releases/latest" + resp, err := http.Get(apiURL) + if err != nil { + return "", err + } + defer func() { + if err := resp.Body.Close(); err != nil { + logrus.Error(err) + } + }() + + if resp.StatusCode != http.StatusOK { + return "", fmt.Errorf("failed to get latest gvforwarder release information: %s", resp.Status) + } + + var releaseInfo struct { + Assets []struct { + Name string `json:"name"` + DownloadUrl string `json:"browser_download_url"` + } `json:"assets"` + } + if err := json.NewDecoder(resp.Body).Decode(&releaseInfo); err != nil { + return "", err + } + + for _, asset := range releaseInfo.Assets { + if asset.Name == "gvforwarder" { + return asset.DownloadUrl, nil + } + } + + return "", fmt.Errorf("gvforwarder latest release not found") +} + +func GetEmbeddedResources(mc *vmconfigs.MachineConfig) []EmbeddedResource { + // Only add gvforwarder if using Hyper-V with user-mode networking + if mc.HyperVHypervisor == nil || !mc.HyperVHypervisor.UserModeNetworking { + return nil + } + + extraFiles := []EmbeddedResource{} + gvforwarderBytes, err := getGvForwarderBytes() + if err != nil { + logrus.Errorf("Failed to get gvforwarder: %v", err) + return extraFiles + } + extraFiles = append(extraFiles, EmbeddedResource{ + Name: "gvforwarder", + Content: gvforwarderBytes, + }) + return extraFiles +} diff --git a/vendor/github.com/containers/podman/v5/pkg/machine/hyperv/hutil/hutil.go b/vendor/github.com/containers/podman/v5/pkg/machine/hyperv/hutil/hutil.go new file mode 100644 index 00000000..3a77de1a --- /dev/null +++ b/vendor/github.com/containers/podman/v5/pkg/machine/hyperv/hutil/hutil.go @@ -0,0 +1,35 @@ +package hutil + +import ( + "fmt" + + "github.com/containers/podman/v5/pkg/systemd/parser" +) + +const HyperVVsockNMConnection = ` +[connection] +id=vsock0 +type=tun +interface-name=vsock0 + +[tun] +mode=2 + +[802-3-ethernet] +cloned-mac-address=5A:94:EF:E4:0C:EE + +[ipv4] +method=auto + +[proxy] +` + +func CreateNetworkUnit(netPort uint64) (string, error) { + netUnit := parser.NewUnitFile() + netUnit.Add("Unit", "Description", "vsock_network") + netUnit.Add("Unit", "After", "NetworkManager.service") + netUnit.Add("Service", "ExecStart", fmt.Sprintf("/usr/libexec/podman/gvforwarder -preexisting -iface vsock0 -url vsock://2:%d/connect", netPort)) + netUnit.Add("Service", "ExecStartPost", "/usr/bin/nmcli c up vsock0") + netUnit.Add("Install", "WantedBy", "multi-user.target") + return netUnit.ToString() +} diff --git a/vendor/github.com/containers/podman/v5/pkg/machine/hyperv/stubber.go b/vendor/github.com/containers/podman/v5/pkg/machine/hyperv/stubber.go index c17e2dd7..c719228b 100644 --- a/vendor/github.com/containers/podman/v5/pkg/machine/hyperv/stubber.go +++ b/vendor/github.com/containers/podman/v5/pkg/machine/hyperv/stubber.go @@ -24,10 +24,10 @@ import ( "github.com/containers/podman/v5/pkg/machine/cloudinit" "github.com/containers/podman/v5/pkg/machine/define" "github.com/containers/podman/v5/pkg/machine/env" + "github.com/containers/podman/v5/pkg/machine/hyperv/hutil" "github.com/containers/podman/v5/pkg/machine/hyperv/vsock" "github.com/containers/podman/v5/pkg/machine/ignition" "github.com/containers/podman/v5/pkg/machine/vmconfigs" - "github.com/containers/podman/v5/pkg/systemd/parser" "github.com/sirupsen/logrus" ) @@ -77,17 +77,9 @@ func (h HyperVStubber) CreateVM(opts define.CreateVMOpts, mc *vmconfigs.MachineC } // Set userModeNetworking based on cloudInit value for backwards compatibility - // Usermode networking with hyperv requires gvforwarder in the guest, and the cloud init code cannot inject it for now, - // so it has to be disabled. - mc.HyperVHypervisor.UserModeNetworking = !mc.CloudInit - if mc.CloudInit { - // Generate cloud-init ISO - iso, err := cloudinit.GenerateISO(mc) - if err != nil { - return fmt.Errorf("generating cloud-init ISO: %w", err) - } - hwConfig.DVDDiskPath = iso.GetPath() - } + // Usermode networking is true by default when working with ignition + // If cloud-init is enabled, use userModeNetworking from options + mc.HyperVHypervisor.UserModeNetworking = !mc.CloudInit || opts.UserModeNetworking if mc.HyperVHypervisor.UserModeNetworking { networkHVSock, err := vsock.NewHVSockRegistryEntry(mc.Name, vsock.Network) @@ -101,6 +93,15 @@ func (h HyperVStubber) CreateVM(opts define.CreateVMOpts, mc *vmconfigs.MachineC hwConfig.Network = true } + if mc.CloudInit { + // Generate cloud-init ISO + iso, err := cloudinit.GenerateISO(mc) + if err != nil { + return fmt.Errorf("generating cloud-init ISO: %w", err) + } + hwConfig.DVDDiskPath = iso.GetPath() + } + // Add vsock port numbers to mounts err = createShares(mc) if err != nil { @@ -119,7 +120,7 @@ func (h HyperVStubber) CreateVM(opts define.CreateVMOpts, mc *vmconfigs.MachineC callbackFuncs.Add(removeRegistrySockets) if builder != nil { - netUnitFile, err := createNetworkUnit(mc.HyperVHypervisor.NetworkVSock.Port) + netUnitFile, err := hutil.CreateNetworkUnit(mc.HyperVHypervisor.NetworkVSock.Port) if err != nil { return err } @@ -137,7 +138,7 @@ func (h HyperVStubber) CreateVM(opts define.CreateVMOpts, mc *vmconfigs.MachineC FileEmbedded1: ignition.FileEmbedded1{ Append: nil, Contents: ignition.Resource{ - Source: ignition.EncodeDataURLPtr(hyperVVsockNMConnection), + Source: ignition.EncodeDataURLPtr(hutil.HyperVVsockNMConnection), }, Mode: ignition.IntToPtr(0600), }, @@ -648,34 +649,6 @@ func logCommandToFile(c *exec.Cmd, filename string) (*os.File, error) { return log, nil } -const hyperVVsockNMConnection = ` -[connection] -id=vsock0 -type=tun -interface-name=vsock0 - -[tun] -mode=2 - -[802-3-ethernet] -cloned-mac-address=5A:94:EF:E4:0C:EE - -[ipv4] -method=auto - -[proxy] -` - -func createNetworkUnit(netPort uint64) (string, error) { - netUnit := parser.NewUnitFile() - netUnit.Add("Unit", "Description", "vsock_network") - netUnit.Add("Unit", "After", "NetworkManager.service") - netUnit.Add("Service", "ExecStart", fmt.Sprintf("/usr/libexec/podman/gvforwarder -preexisting -iface vsock0 -url vsock://2:%d/connect", netPort)) - netUnit.Add("Service", "ExecStartPost", "/usr/bin/nmcli c up vsock0") - netUnit.Add("Install", "WantedBy", "multi-user.target") - return netUnit.ToString() -} - func (h HyperVStubber) GetRosetta(mc *vmconfigs.MachineConfig) (bool, error) { return false, nil } diff --git a/vendor/github.com/containers/podman/v5/pkg/machine/vmconfigs/machine.go b/vendor/github.com/containers/podman/v5/pkg/machine/vmconfigs/machine.go index 18ed5f0a..f5387b20 100644 --- a/vendor/github.com/containers/podman/v5/pkg/machine/vmconfigs/machine.go +++ b/vendor/github.com/containers/podman/v5/pkg/machine/vmconfigs/machine.go @@ -316,7 +316,13 @@ func (mc *MachineConfig) GetAddress() string { if mc.IPAddress != "" { return mc.IPAddress } - return "localhost" + + // Default to the IPv4 localhost address "127.0.0.1". + // When using mirrored networking mode in WSL, attempting to connect by the name "localhost" + // often resolves to the IPv6 address (::1) first. Mirrored networking + // does not support this IPv6 localhost address resolution, leading to connection timeouts. + // By using "127.0.0.1" it avoids this resolution issue. + return "127.0.0.1" } // LoadMachineByName returns a machine config based on the vm name and provider diff --git a/vendor/modules.txt b/vendor/modules.txt index 8ecf683c..eab97c0e 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -317,7 +317,7 @@ github.com/containers/ocicrypt/keywrap/pkcs7 github.com/containers/ocicrypt/spec github.com/containers/ocicrypt/utils github.com/containers/ocicrypt/utils/keyprovider -# github.com/containers/podman/v5 v5.3.1 => github.com/cfergeau/podman/v5 v5.0.0-20250924155458-168a7bca9bee +# github.com/containers/podman/v5 v5.3.1 => github.com/cfergeau/podman/v5 v5.0.0-20251105160820-19a42bf7c31b ## explicit; go 1.23.3 github.com/containers/podman/v5/cmd/podman/parse github.com/containers/podman/v5/cmd/podman/registry @@ -396,6 +396,7 @@ github.com/containers/podman/v5/pkg/machine/connection github.com/containers/podman/v5/pkg/machine/define github.com/containers/podman/v5/pkg/machine/env github.com/containers/podman/v5/pkg/machine/hyperv +github.com/containers/podman/v5/pkg/machine/hyperv/hutil github.com/containers/podman/v5/pkg/machine/hyperv/vsock github.com/containers/podman/v5/pkg/machine/ignition github.com/containers/podman/v5/pkg/machine/libkrun @@ -1321,5 +1322,5 @@ tags.cncf.io/container-device-interface/pkg/parser # tags.cncf.io/container-device-interface/specs-go v1.0.0 ## explicit; go 1.19 tags.cncf.io/container-device-interface/specs-go -# github.com/containers/podman/v5 => github.com/cfergeau/podman/v5 v5.0.0-20250924155458-168a7bca9bee +# github.com/containers/podman/v5 => github.com/cfergeau/podman/v5 v5.0.0-20251105160820-19a42bf7c31b # github.com/crc-org/machine => github.com/cfergeau/machine v0.0.0-20241127155529-1b8b9b8d1078 From 8c79d9d66b0d2ea9c524d5ef5dae3f583cbd1ae7 Mon Sep 17 00:00:00 2001 From: lstocchi Date: Wed, 5 Nov 2025 17:31:03 +0100 Subject: [PATCH 2/2] retrieve IP address by using machineConfig function Signed-off-by: lstocchi --- cmd/macadam/ssh.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/cmd/macadam/ssh.go b/cmd/macadam/ssh.go index 2d6e7d5f..45e5892c 100644 --- a/cmd/macadam/ssh.go +++ b/cmd/macadam/ssh.go @@ -116,11 +116,6 @@ func ssh(cmd *cobra.Command, args []string) error { username = mc.SSH.RemoteUsername } - address := "localhost" - if mc.IPAddress != "" { - address = mc.IPAddress - } - - err = machine.LocalhostSSHShellWithAddress(username, mc.SSH.IdentityPath, mc.Name, address, mc.SSH.Port, sshOpts.Args) + err = machine.LocalhostSSHShellWithAddress(username, mc.SSH.IdentityPath, mc.Name, mc.GetAddress(), mc.SSH.Port, sshOpts.Args) return utils.HandleOSExecError(err) }