From c27410ea329e79f9db75a26f59a4049084fe1200 Mon Sep 17 00:00:00 2001 From: iwilltry42 Date: Wed, 7 Oct 2020 11:02:46 +0200 Subject: [PATCH] createCluster: Fix getHostIP edge cases - sometimes, the exec process returns a non-zero exit code but still has logs which are helpful for us - sometimes everything fails and we should gracefully handle this --- pkg/cluster/host.go | 10 ++++++++++ pkg/runtimes/docker/node.go | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/pkg/cluster/host.go b/pkg/cluster/host.go index c785a767..99f85cc9 100644 --- a/pkg/cluster/host.go +++ b/pkg/cluster/host.go @@ -80,6 +80,16 @@ func resolveHostnameFromInside(ctx context.Context, rtime rt.Runtime, node *k3d. submatches := map[string]string{} scanner := bufio.NewScanner(logreader) + if scanner == nil { + if execErr != nil { + return nil, execErr + } + return nil, fmt.Errorf("Failed to scan logs for host IP") + } + if scanner != nil && execErr != nil { + log.Debugln("Exec Process Failed, but we still got logs, so we're at least trying to get the IP from there...") + log.Tracef("-> Exec Process Error was: %+v", execErr) + } for scanner.Scan() { log.Tracef("Scanning Log Line '%s'", scanner.Text()) match := nsLookupAddressRegexp.FindStringSubmatch(scanner.Text()) diff --git a/pkg/runtimes/docker/node.go b/pkg/runtimes/docker/node.go index 72cf389d..968ac049 100644 --- a/pkg/runtimes/docker/node.go +++ b/pkg/runtimes/docker/node.go @@ -308,7 +308,7 @@ func (d Docker) GetNodeLogs(ctx context.Context, node *k3d.Node, since time.Time func (d Docker) ExecInNodeGetLogs(ctx context.Context, node *k3d.Node, cmd []string) (*bufio.Reader, error) { resp, err := executeInNode(ctx, node, cmd) if err != nil { - return nil, err + return resp.Reader, err } return resp.Reader, nil }