feat: make connection method using system 'ssh' the default (add ssh+go:// fallback)

This commit is contained in:
Pasha Sviderski
2026-03-27 20:27:36 +10:00
parent 0a9a1db815
commit 06c2bc55f2
60 changed files with 206 additions and 152 deletions
+14 -5
View File
@@ -12,8 +12,12 @@ import (
)
type MachineConnection struct {
SSH SSHDestination `yaml:"ssh,omitempty"`
SSHCLI SSHDestination `yaml:"ssh_cli,omitempty"`
// SSH uses the system ssh CLI command to connect. This is the default SSH connection method.
SSH SSHDestination `yaml:"ssh,omitempty"`
// SSHCLI is a backward-compatible alias for SSH.
SSHCLI SSHDestination `yaml:"ssh_cli,omitempty"`
// SSHGo uses Go's built-in SSH library to connect.
SSHGo SSHDestination `yaml:"ssh_go,omitempty"`
SSHKeyFile string `yaml:"ssh_key_file,omitempty"`
// TCP is the address and port of the machine's API server.
// The pointer is used to omit the field when not set. Otherwise, yaml marshalling includes an empty object.
@@ -29,7 +33,9 @@ func (c *MachineConnection) String() string {
if c.SSH != "" {
return "ssh://" + string(c.SSH)
} else if c.SSHCLI != "" {
return "ssh+cli://" + string(c.SSHCLI)
return "ssh://" + string(c.SSHCLI)
} else if c.SSHGo != "" {
return "ssh+go://" + string(c.SSHGo)
} else if c.TCP != nil && c.TCP.IsValid() {
return fmt.Sprintf("tcp://%s", c.TCP)
} else if c.Unix != "" {
@@ -46,6 +52,9 @@ func (c *MachineConnection) Validate() error {
if c.SSHCLI != "" {
setCount++
}
if c.SSHGo != "" {
setCount++
}
if c.TCP != nil && c.TCP.IsValid() {
setCount++
}
@@ -54,10 +63,10 @@ func (c *MachineConnection) Validate() error {
}
if setCount == 0 {
return errors.New("no connection method specified (ssh, ssh_cli, tcp, or unix required)")
return errors.New("no connection method specified (ssh, ssh_go, tcp, or unix required)")
}
if setCount > 1 {
return errors.New("only one connection method allowed per connection (ssh, ssh_cli, tcp, or unix)")
return errors.New("only one connection method allowed per connection (ssh, ssh_go, tcp, or unix)")
}
return nil
+35 -5
View File
@@ -30,18 +30,32 @@ func TestMachineConnection_String(t *testing.T) {
want: "ssh://user@host.com:2222",
},
{
name: "ssh_cli connection",
name: "ssh_cli connection (backward compat alias for ssh)",
conn: MachineConnection{
SSHCLI: "user@host.com",
},
want: "ssh+cli://user@host.com",
want: "ssh://user@host.com",
},
{
name: "ssh_cli connection with port",
name: "ssh_cli connection with port (backward compat alias for ssh)",
conn: MachineConnection{
SSHCLI: "user@host.com:2222",
},
want: "ssh+cli://user@host.com:2222",
want: "ssh://user@host.com:2222",
},
{
name: "ssh_go connection",
conn: MachineConnection{
SSHGo: "user@host.com",
},
want: "ssh+go://user@host.com",
},
{
name: "ssh_go connection with port",
conn: MachineConnection{
SSHGo: "user@host.com:2222",
},
want: "ssh+go://user@host.com:2222",
},
{
name: "tcp connection",
@@ -103,12 +117,19 @@ func TestMachineConnection_Validate(t *testing.T) {
wantErr: false,
},
{
name: "ssh_cli only - valid",
name: "ssh_cli only - valid (backward compat)",
conn: MachineConnection{
SSHCLI: "user@host",
},
wantErr: false,
},
{
name: "ssh_go only - valid",
conn: MachineConnection{
SSHGo: "user@host",
},
wantErr: false,
},
{
name: "tcp only - valid",
conn: MachineConnection{
@@ -141,6 +162,15 @@ func TestMachineConnection_Validate(t *testing.T) {
wantErr: true,
errMsg: "only one connection method allowed",
},
{
name: "ssh and ssh_go - error",
conn: MachineConnection{
SSH: "user@host",
SSHGo: "user@host",
},
wantErr: true,
errMsg: "only one connection method allowed",
},
{
name: "ssh and unix - error",
conn: MachineConnection{