Skip to content

Commit 7ca9efb

Browse files
committed
Refactor SSH wait: Move Conditional. Extract timeout. Remove Password Auth. Clarify error.
1 parent d7cf3f6 commit 7ca9efb

File tree

2 files changed

+29
-37
lines changed

2 files changed

+29
-37
lines changed

cmd/ignite/run/start.go

+29-35
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,11 @@ func Start(so *startOptions) error {
5252
return err
5353
}
5454

55-
if err := waitForSSH(so.vm, 10); err != nil {
56-
return err
55+
// When --ssh is enabled, wait until SSH service started on port 22 at most N seconds
56+
if ssh := so.vm.Spec.SSH; ssh != nil && ssh.Generate && len(so.vm.Status.IPAddresses) > 0 {
57+
if err := waitForSSH(so.vm, 10, 5); err != nil {
58+
return err
59+
}
5760
}
5861

5962
// If starting interactively, attach after starting
@@ -64,36 +67,32 @@ func Start(so *startOptions) error {
6467
}
6568

6669
func dialSuccess(vm *ignite.VM, seconds int) error {
67-
// When --ssh is enabled, wait until SSH service started on port 22 at most N seconds
68-
ssh := vm.Spec.SSH
69-
if ssh != nil && ssh.Generate && len(vm.Status.IPAddresses) > 0 {
70-
addr := vm.Status.IPAddresses[0].String() + ":22"
71-
perSecond := 10
72-
delay := time.Second / time.Duration(perSecond)
73-
var err error
74-
for i := 0; i < seconds*perSecond; i++ {
75-
conn, dialErr := net.DialTimeout("tcp", addr, delay)
76-
if conn != nil {
77-
defer conn.Close()
78-
err = nil
79-
break
80-
}
81-
err = dialErr
82-
time.Sleep(delay)
70+
addr := vm.Status.IPAddresses[0].String() + ":22"
71+
perSecond := 10
72+
delay := time.Second / time.Duration(perSecond)
73+
var err error
74+
for i := 0; i < seconds*perSecond; i++ {
75+
conn, dialErr := net.DialTimeout("tcp", addr, delay)
76+
if conn != nil {
77+
defer conn.Close()
78+
err = nil
79+
break
8380
}
84-
if err != nil {
85-
if err, ok := err.(*net.OpError); ok && err.Timeout() {
86-
return fmt.Errorf("Tried connecting to SSH but timed out %s", err)
87-
}
88-
return err
81+
err = dialErr
82+
time.Sleep(delay)
83+
}
84+
if err != nil {
85+
if err, ok := err.(*net.OpError); ok && err.Timeout() {
86+
return fmt.Errorf("Tried connecting to SSH but timed out %s", err)
8987
}
88+
return err
9089
}
9190

9291
return nil
9392
}
9493

95-
func waitForSSH(vm *ignite.VM, seconds int) error {
96-
if err := dialSuccess(vm, seconds); err != nil {
94+
func waitForSSH(vm *ignite.VM, dialSeconds, sshTimeout int) error {
95+
if err := dialSuccess(vm, dialSeconds); err != nil {
9796
return err
9897
}
9998

@@ -110,25 +109,20 @@ func waitForSSH(vm *ignite.VM, seconds int) error {
110109
}
111110

112111
config := &ssh.ClientConfig{
113-
User: "user",
114-
Auth: []ssh.AuthMethod{
115-
ssh.Password("password"),
116-
},
117112
HostKeyCallback: certCheck.CheckHostKey,
118-
Timeout: 5 * time.Second,
113+
Timeout: time.Duration(sshTimeout) * time.Second,
119114
}
120115

121116
addr := vm.Status.IPAddresses[0].String() + ":22"
122117
sshConn, err := ssh.Dial("tcp", addr, config)
123118
if err != nil {
124-
// If error contains "unable to authenticate", it seems able to connect the server
125-
errString := err.Error()
126-
if strings.Contains(errString, "unable to authenticate") {
119+
if strings.Contains(err.Error(), "unable to authenticate") {
120+
// we connected to the ssh server and recieved the expected failure
127121
return nil
128122
}
129123
return err
130124
}
131125

132-
sshConn.Close()
133-
return fmt.Errorf("timed out checking SSH server")
126+
defer sshConn.Close()
127+
return fmt.Errorf("waitForSSH: connected successfully with no authentication -- failure was expected")
134128
}

e2e/run_test.go

-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
"os/exec"
1616
"path"
1717
"testing"
18-
"time"
1918

2019
"gotest.tools/assert"
2120
)
@@ -111,7 +110,6 @@ func runCurl(t *testing.T, vmName, runtime, networkPlugin string) {
111110
return
112111
}
113112

114-
time.Sleep(2 * time.Second) // TODO(https://github.com/weaveworks/ignite/issues/423): why is this necessary? Can we work to eliminate this?
115113
curlCmd := exec.Command(
116114
igniteBin,
117115
"--runtime="+runtime,

0 commit comments

Comments
 (0)