summaryrefslogtreecommitdiff
path: root/libkpod
diff options
context:
space:
mode:
authorumohnani8 <umohnani@redhat.com>2017-11-29 16:56:18 -0500
committerumohnani8 <umohnani@redhat.com>2017-12-12 09:46:23 -0500
commit74ee579375654c79fa710f13b7c2ee3810366f82 (patch)
tree36f1b98582875e497b7e76457cb969d85cef6426 /libkpod
parent88121e0747c03084c233d22fadfd3c227e73a885 (diff)
downloadpodman-74ee579375654c79fa710f13b7c2ee3810366f82.tar.gz
podman-74ee579375654c79fa710f13b7c2ee3810366f82.tar.bz2
podman-74ee579375654c79fa710f13b7c2ee3810366f82.zip
Update kpod inspect to use the new container state
kpod inspect now uses the new libpod container state and closely matches the output of docker inspect some aspects of it are still WIP as the libpod container state is still being worked on Signed-off-by: umohnani8 <umohnani@redhat.com>
Diffstat (limited to 'libkpod')
-rw-r--r--libkpod/container_data.go210
1 files changed, 0 insertions, 210 deletions
diff --git a/libkpod/container_data.go b/libkpod/container_data.go
deleted file mode 100644
index eb84aa42d..000000000
--- a/libkpod/container_data.go
+++ /dev/null
@@ -1,210 +0,0 @@
-package libkpod
-
-import (
- "encoding/json"
- "os"
- "time"
-
- "k8s.io/apimachinery/pkg/fields"
- pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime"
-
- "github.com/opencontainers/image-spec/specs-go/v1"
- specs "github.com/opencontainers/runtime-spec/specs-go"
- "github.com/pkg/errors"
- "github.com/projectatomic/libpod/libpod/driver"
- "github.com/projectatomic/libpod/libpod/images"
- "github.com/projectatomic/libpod/oci"
-)
-
-// ContainerData handles the data used when inspecting a container
-type ContainerData struct {
- ID string
- Name string
- LogPath string
- Labels fields.Set
- Annotations fields.Set
- State *ContainerState
- Metadata *pb.ContainerMetadata
- BundlePath string
- StopSignal string
- FromImage string `json:"Image,omitempty"`
- FromImageID string `json:"ImageID"`
- MountPoint string `json:"Mountpoint,omitempty"`
- MountLabel string
- Mounts []specs.Mount
- AppArmorProfile string
- ImageAnnotations map[string]string `json:"Annotations,omitempty"`
- ImageCreatedBy string `json:"CreatedBy,omitempty"`
- Config v1.ImageConfig `json:"Config,omitempty"`
- SizeRw uint `json:"SizeRw,omitempty"`
- SizeRootFs uint `json:"SizeRootFs,omitempty"`
- Args []string
- ResolvConfPath string
- HostnamePath string
- HostsPath string
- GraphDriver driverData
-}
-
-type driverData struct {
- Name string
- Data map[string]string
-}
-
-// ContainerState represents the status of a container.
-type ContainerState struct {
- specs.State
- Created time.Time `json:"created"`
- Started time.Time `json:"started,omitempty"`
- Finished time.Time `json:"finished,omitempty"`
- ExitCode int32 `json:"exitCode"`
- OOMKilled bool `json:"oomKilled,omitempty"`
- Error string `json:"error,omitempty"`
-}
-
-// GetContainerData gets the ContainerData for a container with the given name in the given store.
-// If size is set to true, it will also determine the size of the container
-func (c *ContainerServer) GetContainerData(name string, size bool) (*ContainerData, error) {
- ctr, err := c.inspectContainer(name)
- if err != nil {
- return nil, errors.Wrapf(err, "error reading build container %q", name)
- }
- container, err := c.store.Container(name)
- if err != nil {
- return nil, errors.Wrapf(err, "error reading container data")
- }
-
- // The runtime configuration won't exist if the container has never been started by cri-o or kpod,
- // so treat a not-exist error as non-fatal.
- m := getBlankSpec()
- config, err := c.store.FromContainerDirectory(ctr.ID(), "config.json")
- if err != nil && !os.IsNotExist(errors.Cause(err)) {
- return nil, err
- }
- if len(config) > 0 {
- if err = json.Unmarshal(config, &m); err != nil {
- return nil, err
- }
- }
-
- if container.ImageID == "" {
- return nil, errors.Errorf("error reading container image data: container is not based on an image")
- }
- imageData, err := images.GetData(c.store, container.ImageID)
- if err != nil {
- return nil, errors.Wrapf(err, "error reading container image data")
- }
-
- driverName, err := driver.GetDriverName(c.store)
- if err != nil {
- return nil, err
- }
- topLayer, err := c.GetContainerTopLayerID(ctr.ID())
- if err != nil {
- return nil, err
- }
- layer, err := c.store.Layer(topLayer)
- if err != nil {
- return nil, err
- }
- driverMetadata, err := driver.GetDriverMetadata(c.store, topLayer)
- if err != nil {
- return nil, err
- }
- imageName := ""
- if len(imageData.Tags) > 0 {
- imageName = imageData.Tags[0]
- } else if len(imageData.Digests) > 0 {
- imageName = imageData.Digests[0]
- }
- data := &ContainerData{
- ID: ctr.ID(),
- Name: ctr.Name(),
- LogPath: ctr.LogPath(),
- Labels: ctr.Labels(),
- Annotations: ctr.Annotations(),
- State: c.State(ctr),
- Metadata: ctr.Metadata(),
- BundlePath: ctr.BundlePath(),
- StopSignal: ctr.GetStopSignal(),
- Args: m.Process.Args,
- FromImage: imageName,
- FromImageID: container.ImageID,
- MountPoint: layer.MountPoint,
- ImageAnnotations: imageData.Annotations,
- ImageCreatedBy: imageData.CreatedBy,
- Config: imageData.Config,
- GraphDriver: driverData{
- Name: driverName,
- Data: driverMetadata,
- },
- MountLabel: m.Linux.MountLabel,
- Mounts: m.Mounts,
- AppArmorProfile: m.Process.ApparmorProfile,
- ResolvConfPath: "",
- HostnamePath: "",
- HostsPath: "",
- }
-
- if size {
- sizeRootFs, err := c.GetContainerRootFsSize(data.ID)
- if err != nil {
-
- return nil, errors.Wrapf(err, "error reading size for container %q", name)
- }
- data.SizeRootFs = uint(sizeRootFs)
- sizeRw, err := c.GetContainerRwSize(data.ID)
- if err != nil {
- return nil, errors.Wrapf(err, "error reading RWSize for container %q", name)
- }
- data.SizeRw = uint(sizeRw)
- }
-
- return data, nil
-}
-
-// Get an oci.Container and update its status
-func (c *ContainerServer) inspectContainer(container string) (*oci.Container, error) {
- ociCtr, err := c.LookupContainer(container)
- if err != nil {
- return nil, err
- }
- // call runtime.UpdateStatus()
- err = c.Runtime().UpdateStatus(ociCtr)
- if err != nil {
- return nil, err
- }
- return ociCtr, nil
-}
-
-func getBlankSpec() specs.Spec {
- return specs.Spec{
- Process: &specs.Process{},
- Root: &specs.Root{},
- Mounts: []specs.Mount{},
- Hooks: &specs.Hooks{},
- Annotations: make(map[string]string),
- Linux: &specs.Linux{},
- Solaris: &specs.Solaris{},
- Windows: &specs.Windows{},
- }
-}
-
-// State copies the crio container state to ContainerState type for kpod
-func (c *ContainerServer) State(ctr *oci.Container) *ContainerState {
- crioState := ctr.State()
- specState := specs.State{
- Version: crioState.Version,
- ID: crioState.ID,
- Status: crioState.Status,
- Pid: crioState.Pid,
- Bundle: crioState.Bundle,
- Annotations: crioState.Annotations,
- }
- cState := &ContainerState{
- Started: crioState.Started,
- Created: crioState.Created,
- Finished: crioState.Finished,
- }
- cState.State = specState
- return cState
-}