Skip to content
This repository has been archived by the owner on Dec 7, 2023. It is now read-only.

Commit

Permalink
Merge pull request #429 from chanwit/ssh_wait
Browse files Browse the repository at this point in the history
implement ssh wait for a VM
  • Loading branch information
stealthybox committed Sep 17, 2019
2 parents e8a2996 + 929acaf commit e66ca30
Showing 1 changed file with 37 additions and 0 deletions.
37 changes: 37 additions & 0 deletions cmd/ignite/run/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ package run

import (
"fmt"
"net"
"time"

"github.com/weaveworks/ignite/pkg/apis/ignite"

"github.com/weaveworks/ignite/pkg/operations"
"github.com/weaveworks/ignite/pkg/preflight/checkers"
Expand Down Expand Up @@ -47,9 +51,42 @@ func Start(so *startOptions) error {
return err
}

if err := waitForSSH(so.vm, 10); err != nil {
return err
}

// If starting interactively, attach after starting
if so.Interactive {
return Attach(so.attachOptions)
}
return nil
}

func waitForSSH(vm *ignite.VM, seconds int) error {
// When --ssh is enabled, wait until SSH service started on port 22 at most N seconds
ssh := vm.Spec.SSH
if ssh != nil && ssh.Generate && len(vm.Status.IPAddresses) > 0 {
addr := vm.Status.IPAddresses[0].String() + ":22"
perSecond := 10
delay := time.Second / time.Duration(perSecond)
var err error
for i := 0; i < seconds*perSecond; i++ {
conn, dialErr := net.DialTimeout("tcp", addr, delay)
if conn != nil {
defer conn.Close()
err = nil
break
}
err = dialErr
time.Sleep(delay)
}
if err != nil {
if err, ok := err.(*net.OpError); ok && err.Timeout() {
return fmt.Errorf("Tried connecting to SSH but timed out %s", err)
}
return err
}
}

return nil
}

0 comments on commit e66ca30

Please sign in to comment.