mirror of
https://github.com/psviderski/uncloud.git
synced 2026-08-26 11:03:34 +00:00
feat: make connection method using system 'ssh' the default (add ssh+go:// fallback)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user