From dbf3ff81721de5837261a0a9b84c6982d1c3966e Mon Sep 17 00:00:00 2001 From: iwilltry42 Date: Fri, 5 Mar 2021 14:57:32 +0100 Subject: [PATCH] getNodeContainer: regex to allow k3d-prefixed or non-prefixed name - fixes #495 - additionally brings in a fix for a nil-pointer exception in case someone inputs a regex that would result in multiple containers being returned --- pkg/runtimes/docker/container.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pkg/runtimes/docker/container.go b/pkg/runtimes/docker/container.go index 83fa74f7..fb28c973 100644 --- a/pkg/runtimes/docker/container.go +++ b/pkg/runtimes/docker/container.go @@ -140,6 +140,7 @@ func pullImage(ctx context.Context, docker *client.Client, image string) error { } func getNodeContainer(ctx context.Context, node *k3d.Node) (*types.Container, error) { + // (0) create docker client docker, err := GetDockerClient() if err != nil { @@ -153,8 +154,12 @@ func getNodeContainer(ctx context.Context, node *k3d.Node) (*types.Container, er for k, v := range node.Labels { filters.Add("label", fmt.Sprintf("%s=%s", k, v)) } - // See https://github.com/moby/moby/issues/29997 for explanation around initial / - filters.Add("name", fmt.Sprintf("^/?%s$", node.Name)) // regex filtering for exact name match + + // regex filtering for exact name match + // Assumptions: + // -> container names start with a / (see https://github.com/moby/moby/issues/29997) + // -> user input may or may not have the "k3d-" prefix + filters.Add("name", fmt.Sprintf("^/?(%s-)?%s$", k3d.DefaultObjectNamePrefix, node.Name)) containers, err := docker.ContainerList(ctx, types.ContainerListOptions{ Filters: filters, @@ -165,8 +170,7 @@ func getNodeContainer(ctx context.Context, node *k3d.Node) (*types.Container, er } if len(containers) > 1 { - log.Errorln("Failed to get a single container") - return nil, err + return nil, fmt.Errorf("Failed to get a single container for name '%s'. Found: %d", node.Name, len(containers)) } if len(containers) == 0 {