diff --git a/cmd/kpod/logs.go b/cmd/kpod/logs.go index 995f91cd..0f5fd8fa 100644 --- a/cmd/kpod/logs.go +++ b/cmd/kpod/logs.go @@ -46,7 +46,7 @@ func logsCmd(c *cli.Context) error { if len(args) != 1 { return errors.Errorf("'kpod logs' requires exactly one container name/ID") } - container := args[0] + container := c.Args().First() var opts libkpod.LogOptions opts.Details = c.Bool("details") opts.Follow = c.Bool("follow") diff --git a/server/container_create.go b/server/container_create.go index 55a58407..55b016e1 100644 --- a/server/container_create.go +++ b/server/container_create.go @@ -622,6 +622,7 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string, specgen.AddAnnotation(annotations.ImageName, imageName) specgen.AddAnnotation(annotations.ImageRef, imageRef) + specgen.AddAnnotation(annotations.IP, sb.IP()) // bind mount the pod shm specgen.AddBindMount(sb.ShmPath(), "/dev/shm", []string{"rw"}) diff --git a/server/sandbox_run.go b/server/sandbox_run.go index 3f8be488..ab9a6ee8 100644 --- a/server/sandbox_run.go +++ b/server/sandbox_run.go @@ -458,26 +458,23 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest sb.SetInfraContainer(container) + var ip string // setup the network if !hostNetwork { if err = s.netPlugin.SetUpPod(netNsPath, namespace, kubeName, id); err != nil { return nil, fmt.Errorf("failed to create network for container %s in sandbox %s: %v", containerName, id, err) } - if len(portMappings) != 0 { - ip, err := s.netPlugin.GetContainerNetworkStatus(netNsPath, namespace, id, containerName) - if err != nil { - return nil, fmt.Errorf("failed to get network status for container %s in sandbox %s: %v", containerName, id, err) - } + if ip, err = s.netPlugin.GetContainerNetworkStatus(netNsPath, namespace, id, kubeName); err != nil { + return nil, fmt.Errorf("failed to get network status for container %s in sandbox %s: %v", containerName, id, err) + } + if len(portMappings) != 0 { ip4 := net.ParseIP(ip).To4() if ip4 == nil { return nil, fmt.Errorf("failed to get valid ipv4 address for container %s in sandbox %s", containerName, id) } - g.AddAnnotation(annotations.IP, ip) - sb.AddIP(ip) - if err = s.hostportManager.Add(id, &hostport.PodPortMapping{ Name: name, PortMappings: portMappings, @@ -488,8 +485,13 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest } } + } else { + ip = s.BindAddress() } + g.AddAnnotation(annotations.IP, ip) + sb.AddIP(ip) + err = g.SaveToFile(filepath.Join(podContainer.Dir, "config.json"), saveOptions) if err != nil { return nil, fmt.Errorf("failed to save template configuration for pod sandbox %s(%s): %v", sb.Name(), id, err) diff --git a/server/server.go b/server/server.go index 11bc7654..63016ab6 100644 --- a/server/server.go +++ b/server/server.go @@ -66,6 +66,8 @@ type Server struct { appArmorProfile string stream streamService + + bindAddress string } // GetExec returns exec stream request @@ -233,6 +235,7 @@ func New(config *Config) (*Server, error) { return nil, err } } + s.bindAddress = bindAddress.String() _, err = net.LookupPort("tcp", config.StreamPort) if err != nil { @@ -289,6 +292,11 @@ func (s *Server) getInfraContainer(id string) *oci.Container { return s.ContainerServer.GetInfraContainer(id) } +// BindAddress is used to retrieve host's IP +func (s *Server) BindAddress() string { + return s.bindAddress +} + // GetSandboxContainer returns the infra container for a given sandbox func (s *Server) GetSandboxContainer(id string) *oci.Container { return s.ContainerServer.GetSandboxContainer(id) diff --git a/test/kpod_logs.bats b/test/kpod_logs.bats index 8dbd36c6..d11b69c1 100644 --- a/test/kpod_logs.bats +++ b/test/kpod_logs.bats @@ -5,7 +5,7 @@ load helpers IMAGE="alpine:latest" ROOT="$TESTDIR/crio" RUNROOT="$TESTDIR/crio-run" -KPOD_OPTIONS="--root $ROOT --runroot $RUNROOT $STORAGE_OPTS" +KPOD_OPTIONS="--root $ROOT --runroot $RUNROOT ${STORAGE_OPTS}" function teardown() { cleanup_test