mirror of
https://github.com/containers/podman.git
synced 2025-12-09 07:09:03 +08:00
podman-remote inspect
base enablement of the inspect command. Signed-off-by: baude <bbaude@redhat.com>
This commit is contained in:
@@ -2,12 +2,13 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"strings"
|
||||
|
||||
"github.com/containers/libpod/cmd/podman/formats"
|
||||
"github.com/containers/libpod/cmd/podman/libpodruntime"
|
||||
"github.com/containers/libpod/cmd/podman/shared"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/adapter"
|
||||
cc "github.com/containers/libpod/pkg/spec"
|
||||
"github.com/containers/libpod/pkg/util"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/urfave/cli"
|
||||
@@ -63,7 +64,7 @@ func inspectCmd(c *cli.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
runtime, err := libpodruntime.GetRuntime(c)
|
||||
runtime, err := adapter.GetRuntime(c)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "error creating libpod runtime")
|
||||
}
|
||||
@@ -104,7 +105,7 @@ func inspectCmd(c *cli.Context) error {
|
||||
}
|
||||
|
||||
// func iterateInput iterates the images|containers the user has requested and returns the inspect data and error
|
||||
func iterateInput(ctx context.Context, c *cli.Context, args []string, runtime *libpod.Runtime, inspectType string) ([]interface{}, error) {
|
||||
func iterateInput(ctx context.Context, c *cli.Context, args []string, runtime *adapter.LocalRuntime, inspectType string) ([]interface{}, error) {
|
||||
var (
|
||||
data interface{}
|
||||
inspectedItems []interface{}
|
||||
@@ -124,13 +125,18 @@ func iterateInput(ctx context.Context, c *cli.Context, args []string, runtime *l
|
||||
inspectError = errors.Wrapf(err, "error getting libpod container inspect data %s", ctr.ID())
|
||||
break
|
||||
}
|
||||
data, err = shared.GetCtrInspectInfo(ctr, libpodInspectData)
|
||||
artifact, err := getArtifact(ctr)
|
||||
if inspectError != nil {
|
||||
inspectError = err
|
||||
break
|
||||
}
|
||||
data, err = shared.GetCtrInspectInfo(ctr.Config(), libpodInspectData, artifact)
|
||||
if err != nil {
|
||||
inspectError = errors.Wrapf(err, "error parsing container data %q", ctr.ID())
|
||||
break
|
||||
}
|
||||
case inspectTypeImage:
|
||||
image, err := runtime.ImageRuntime().NewFromLocal(input)
|
||||
image, err := runtime.NewImageFromLocal(input)
|
||||
if err != nil {
|
||||
inspectError = errors.Wrapf(err, "error getting image %q", input)
|
||||
break
|
||||
@@ -143,7 +149,7 @@ func iterateInput(ctx context.Context, c *cli.Context, args []string, runtime *l
|
||||
case inspectAll:
|
||||
ctr, err := runtime.LookupContainer(input)
|
||||
if err != nil {
|
||||
image, err := runtime.ImageRuntime().NewFromLocal(input)
|
||||
image, err := runtime.NewImageFromLocal(input)
|
||||
if err != nil {
|
||||
inspectError = errors.Wrapf(err, "error getting image %q", input)
|
||||
break
|
||||
@@ -159,7 +165,12 @@ func iterateInput(ctx context.Context, c *cli.Context, args []string, runtime *l
|
||||
inspectError = errors.Wrapf(err, "error getting libpod container inspect data %s", ctr.ID())
|
||||
break
|
||||
}
|
||||
data, err = shared.GetCtrInspectInfo(ctr, libpodInspectData)
|
||||
artifact, inspectError := getArtifact(ctr)
|
||||
if inspectError != nil {
|
||||
inspectError = err
|
||||
break
|
||||
}
|
||||
data, err = shared.GetCtrInspectInfo(ctr.Config(), libpodInspectData, artifact)
|
||||
if err != nil {
|
||||
inspectError = errors.Wrapf(err, "error parsing container data %s", ctr.ID())
|
||||
break
|
||||
@@ -172,3 +183,15 @@ func iterateInput(ctx context.Context, c *cli.Context, args []string, runtime *l
|
||||
}
|
||||
return inspectedItems, inspectError
|
||||
}
|
||||
|
||||
func getArtifact(ctr *adapter.Container) (*cc.CreateConfig, error) {
|
||||
var createArtifact cc.CreateConfig
|
||||
artifact, err := ctr.GetArtifact("create-config")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := json.Unmarshal(artifact, &createArtifact); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &createArtifact, nil
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package shared
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/google/shlex"
|
||||
"io"
|
||||
@@ -446,8 +445,7 @@ func getStrFromSquareBrackets(cmd string) string {
|
||||
|
||||
// GetCtrInspectInfo takes container inspect data and collects all its info into a ContainerData
|
||||
// structure for inspection related methods
|
||||
func GetCtrInspectInfo(ctr *libpod.Container, ctrInspectData *inspect.ContainerInspectData) (*inspect.ContainerData, error) {
|
||||
config := ctr.Config()
|
||||
func GetCtrInspectInfo(config *libpod.ContainerConfig, ctrInspectData *inspect.ContainerInspectData, createArtifact *cc.CreateConfig) (*inspect.ContainerData, error) {
|
||||
spec := config.Spec
|
||||
|
||||
cpus, mems, period, quota, realtimePeriod, realtimeRuntime, shares := getCPUInfo(spec)
|
||||
@@ -456,16 +454,6 @@ func GetCtrInspectInfo(ctr *libpod.Container, ctrInspectData *inspect.ContainerI
|
||||
pidsLimit := getPidsInfo(spec)
|
||||
cgroup := getCgroup(spec)
|
||||
|
||||
var createArtifact cc.CreateConfig
|
||||
artifact, err := ctr.GetArtifact("create-config")
|
||||
if err == nil {
|
||||
if err := json.Unmarshal(artifact, &createArtifact); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
logrus.Errorf("couldn't get some inspect information, error getting artifact %q: %v", ctr.ID(), err)
|
||||
}
|
||||
|
||||
data := &inspect.ContainerData{
|
||||
ctrInspectData,
|
||||
&inspect.HostConfig{
|
||||
@@ -493,7 +481,7 @@ func GetCtrInspectInfo(ctr *libpod.Container, ctrInspectData *inspect.ContainerI
|
||||
PidsLimit: pidsLimit,
|
||||
Privileged: config.Privileged,
|
||||
ReadonlyRootfs: spec.Root.Readonly,
|
||||
Runtime: ctr.RuntimeName(),
|
||||
Runtime: config.OCIRuntime,
|
||||
NetworkMode: string(createArtifact.NetMode),
|
||||
IpcMode: string(createArtifact.IpcMode),
|
||||
Cgroup: cgroup,
|
||||
|
||||
@@ -1035,6 +1035,22 @@ method GenerateKubeService() -> (notimplemented: NotImplemented)
|
||||
# like that created by GenerateKube. See also [GenerateKube](GenerateKube).
|
||||
method ReplayKube() -> (notimplemented: NotImplemented)
|
||||
|
||||
# ContainerConfig returns a container's config in string form. This call is for
|
||||
# development of Podman only and generally should not be used.
|
||||
method ContainerConfig(name: string) -> (config: string)
|
||||
|
||||
# ContainerArtifacts returns a container's artifacts in string form. This call is for
|
||||
# development of Podman only and generally should not be used.
|
||||
method ContainerArtifacts(name: string, artifactName: string) -> (config: string)
|
||||
|
||||
# ContainerInspectData returns a container's inspect data in string form. This call is for
|
||||
# development of Podman only and generally should not be used.
|
||||
method ContainerInspectData(name: string) -> (config: string)
|
||||
|
||||
# ContainerStateData returns a container's state config in string form. This call is for
|
||||
# development of Podman only and generally should not be used.
|
||||
method ContainerStateData(name: string) -> (config: string)
|
||||
|
||||
# ImageNotFound means the image could not be found by the provided name or ID in local storage.
|
||||
error ImageNotFound (name: string)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user