diff --git a/pkg/client/node.go b/pkg/client/node.go index 1998b423..088d71d4 100644 --- a/pkg/client/node.go +++ b/pkg/client/node.go @@ -265,6 +265,14 @@ func NodeStart(ctx context.Context, runtime runtimes.Runtime, node *k3d.Node, no return err } + if node.State.Started != "" { + ts, err := time.Parse("2006-01-02T15:04:05.999999999Z", node.State.Started) + if err != nil { + log.Debugf("Failed to parse '%s.State.Started' timestamp '%s', falling back to calulated time", node.Name, node.State.Started) + } + startTime = ts + } + if nodeStartOpts.Wait { if nodeStartOpts.ReadyLogMessage == "" { nodeStartOpts.ReadyLogMessage = k3d.ReadyLogMessageByRole[node.Role] diff --git a/pkg/runtimes/docker/node.go b/pkg/runtimes/docker/node.go index 747c4399..27b9678b 100644 --- a/pkg/runtimes/docker/node.go +++ b/pkg/runtimes/docker/node.go @@ -127,6 +127,16 @@ func (d Docker) StartNode(ctx context.Context, node *k3d.Node) error { return err } + // get container which represents the node + nodeContainerJSON, err := docker.ContainerInspect(ctx, nodeContainer.ID) + if err != nil { + return fmt.Errorf("Failed to inspect container %s for node %s: %+v", node.Name, nodeContainer.ID, err) + } + + node.Created = nodeContainerJSON.Created + node.State.Running = nodeContainerJSON.State.Running + node.State.Started = nodeContainerJSON.State.StartedAt + return nil } @@ -297,7 +307,7 @@ func (d Docker) GetNodeLogs(ctx context.Context, node *k3d.Node, since time.Time sinceStr := "" if !since.IsZero() { - sinceStr = since.Format("2006-01-02T15:04:05") + sinceStr = since.Format("2006-01-02T15:04:05.999999999Z") } logreader, err := docker.ContainerLogs(ctx, container.ID, types.ContainerLogsOptions{ShowStdout: true, ShowStderr: true, Since: sinceStr}) if err != nil { diff --git a/pkg/types/types.go b/pkg/types/types.go index 936f16a2..34245449 100644 --- a/pkg/types/types.go +++ b/pkg/types/types.go @@ -358,6 +358,7 @@ func GetDefaultObjectName(name string) string { type NodeState struct { Running bool Status string + Started string } /*