diff options
author | baude <bbaude@redhat.com> | 2019-01-15 14:31:03 -0600 |
---|---|---|
committer | baude <bbaude@redhat.com> | 2019-01-15 14:50:30 -0600 |
commit | 341f91da480bbf337dfb13107389307835b1f0c3 (patch) | |
tree | c1ace140bfd9cfdbae370404f27159748dc2c851 | |
parent | 1b2f75298d98f59fac73a63599cdca3478bef835 (diff) | |
download | podman-341f91da480bbf337dfb13107389307835b1f0c3.tar.gz podman-341f91da480bbf337dfb13107389307835b1f0c3.tar.bz2 podman-341f91da480bbf337dfb13107389307835b1f0c3.zip |
Collaberative podman-remote container exists
Began frameout of container super structs for adapted methods. This allows for the use
of container exists.
Signed-off-by: baude <bbaude@redhat.com>
-rw-r--r-- | cmd/podman/exists.go | 8 | ||||
-rw-r--r-- | cmd/podman/images.go | 5 | ||||
-rw-r--r-- | cmd/podman/varlink/io.podman.varlink | 2 | ||||
-rw-r--r-- | libpod/adapter/runtime.go | 14 | ||||
-rw-r--r-- | libpod/adapter/runtime_remote.go | 74 |
5 files changed, 92 insertions, 11 deletions
diff --git a/cmd/podman/exists.go b/cmd/podman/exists.go index e6d2c8a11..a957e1ef7 100644 --- a/cmd/podman/exists.go +++ b/cmd/podman/exists.go @@ -88,13 +88,13 @@ func containerExistsCmd(c *cli.Context) error { if len(args) > 1 || len(args) < 1 { return errors.New("you may only check for the existence of one container at a time") } - runtime, err := libpodruntime.GetRuntime(c) + runtime, err := adapter.GetRuntime(c) if err != nil { return errors.Wrapf(err, "could not get runtime") } - defer runtime.Shutdown(false) - if _, err := runtime.LookupContainer(args[0]); err != nil { - if errors.Cause(err) == libpod.ErrNoSuchCtr { + defer runtime.Runtime.Shutdown(false) + if _, err := runtime.Runtime.LookupContainer(args[0]); err != nil { + if errors.Cause(err) == libpod.ErrNoSuchCtr || err.Error() == "io.podman.ContainerNotFound" { os.Exit(1) } return err diff --git a/cmd/podman/images.go b/cmd/podman/images.go index 2b4187a9a..7f2fb7ae0 100644 --- a/cmd/podman/images.go +++ b/cmd/podman/images.go @@ -2,14 +2,15 @@ package main import ( "context" - "github.com/containers/libpod/cmd/podman/imagefilters" - "github.com/containers/libpod/libpod/adapter" "reflect" "sort" "strings" "time" "unicode" + "github.com/containers/libpod/cmd/podman/imagefilters" + "github.com/containers/libpod/libpod/adapter" + "github.com/containers/libpod/cmd/podman/formats" "github.com/containers/libpod/libpod/image" "github.com/docker/go-units" diff --git a/cmd/podman/varlink/io.podman.varlink b/cmd/podman/varlink/io.podman.varlink index a3e8c050e..c6f1d3f1b 100644 --- a/cmd/podman/varlink/io.podman.varlink +++ b/cmd/podman/varlink/io.podman.varlink @@ -61,7 +61,7 @@ type ImageSearch ( star_count: int ) -# ListContainer is the returned struct for an individual container +# ListContainerData is the returned struct for an individual container type ListContainerData ( id: string, image: string, diff --git a/libpod/adapter/runtime.go b/libpod/adapter/runtime.go index 883ae2c76..b49c91403 100644 --- a/libpod/adapter/runtime.go +++ b/libpod/adapter/runtime.go @@ -24,6 +24,11 @@ type ContainerImage struct { *image.Image } +// Container ... +type Container struct { + *libpod.Container +} + // GetRuntime returns a LocalRuntime struct with the actual runtime embedded in it func GetRuntime(c *cli.Context) (*LocalRuntime, error) { runtime, err := libpodruntime.GetRuntime(c) @@ -85,3 +90,12 @@ func (r *LocalRuntime) New(ctx context.Context, name, signaturePolicyPath, authf func (r *LocalRuntime) RemoveImage(ctx context.Context, img *ContainerImage, force bool) (string, error) { return r.Runtime.RemoveImage(ctx, img.Image, force) } + +// LookupContainer ... +func (r *LocalRuntime) LookupContainer(idOrName string) (*Container, error) { + ctr, err := r.Runtime.LookupContainer(idOrName) + if err != nil { + return nil, err + } + return &Container{ctr}, nil +} diff --git a/libpod/adapter/runtime_remote.go b/libpod/adapter/runtime_remote.go index 5413385d2..48dcf76a9 100644 --- a/libpod/adapter/runtime_remote.go +++ b/libpod/adapter/runtime_remote.go @@ -22,8 +22,12 @@ type RemoteImageRuntime struct{} // RemoteRuntime describes a wrapper runtime struct type RemoteRuntime struct { + Conn *varlink.Connection } +//func (r *LocalRuntime) LookupContainer(idOrName string) (*Container, error) { +// if _, err := runtime.Runtime.LookupContainer(args[0]); err != nil { + // LocalRuntime describes a typical libpod runtime type LocalRuntime struct { Runtime *RemoteRuntime @@ -38,6 +42,7 @@ func GetRuntime(c *cli.Context) (*LocalRuntime, error) { if err != nil { return nil, err } + runtime.Conn = conn return &LocalRuntime{ Runtime: &runtime, Remote: true, @@ -70,6 +75,30 @@ type remoteImage struct { Runtime *LocalRuntime } +// Container ... +type Container struct { + remoteContainer +} + +// remoteContainer .... +type remoteContainer struct { + ID string + Image string + ImageID string + Command []string + Created time.Time + RunningFor string + Status string + //Ports []ocicni.PortMapping + RootFsSize int64 + RWSize int64 + Names string + Labels []map[string]string + // Mounts []string + // ContainerRunning bool + //Namespaces []LinuxNameSpace +} + // GetImages returns a slice of containerimages over a varlink connection func (r *LocalRuntime) GetImages() ([]*ContainerImage, error) { var newImages []*ContainerImage @@ -213,10 +242,6 @@ func (ci *ContainerImage) TagImage(tag string) error { return err } -func (r RemoteRuntime) RemoveImage(force bool) error { - return nil -} - // RemoveImage calls varlink to remove an image func (r *LocalRuntime) RemoveImage(ctx context.Context, img *ContainerImage, force bool) (string, error) { return iopodman.RemoveImage().Call(r.Conn, img.InputName, force) @@ -246,3 +271,44 @@ func (ci *ContainerImage) History(ctx context.Context) ([]*image.History, error) } return imageHistories, nil } + +// LookupContainer ... +func (r *RemoteRuntime) LookupContainer(idOrName string) (*Container, error) { + container, err := iopodman.GetContainer().Call(r.Conn, idOrName) + if err != nil { + return nil, err + } + + ctr, err := listContainerDataToContainer(container) + if err != nil { + return nil, err + } + return ctr, nil +} + +// listContainerDataToContainer takes a varlink listcontainerData struct and makes +// an "adapted" Container +func listContainerDataToContainer(listData iopodman.ListContainerData) (*Container, error) { + created, err := splitStringDate(listData.Createdat) + if err != nil { + return nil, err + } + rc := remoteContainer{ + ID: listData.Id, + Image: listData.Image, + ImageID: listData.Imageid, + Command: listData.Command, + Created: created, + RunningFor: listData.Runningfor, + Status: listData.Status, + //ports: //map[ocicni.portmapping] + RootFsSize: listData.Rootfssize, + RWSize: listData.Rwsize, + Names: listData.Names, + //Labels: + //Mounts + //ContainerRunning: listData.r + //namespaces: + } + return &Container{rc}, nil +} |