mirror of
https://github.com/containers/podman.git
synced 2025-07-02 00:30:00 +08:00
Update kpod rm to use new container state
kpod rm now uses the new container state and runtime Signed-off-by: Urvashi Mohnani <umohnani@redhat.com> Closes: #58 Approved by: mheon
This commit is contained in:

committed by
Atomic Bot

parent
4ff251d911
commit
768fb6fe0f
@ -4,9 +4,7 @@ import (
|
||||
"fmt"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/projectatomic/libpod/libkpod"
|
||||
"github.com/urfave/cli"
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -30,40 +28,31 @@ var (
|
||||
|
||||
// saveCmd saves the image to either docker-archive or oci
|
||||
func rmCmd(c *cli.Context) error {
|
||||
args := c.Args()
|
||||
if len(args) == 0 {
|
||||
return errors.Errorf("specify one or more containers to remove")
|
||||
}
|
||||
if err := validateFlags(c, rmFlags); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
config, err := getConfig(c)
|
||||
runtime, err := getRuntime(c)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "could not get config")
|
||||
return errors.Wrapf(err, "Could not get runtime")
|
||||
}
|
||||
server, err := libkpod.New(config)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "could not get container server")
|
||||
}
|
||||
defer server.Shutdown()
|
||||
err = server.Update()
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "could not update list of containers")
|
||||
}
|
||||
force := c.Bool("force")
|
||||
defer runtime.Shutdown(false)
|
||||
|
||||
for _, container := range c.Args() {
|
||||
id, err2 := server.Remove(context.Background(), container, force)
|
||||
if err2 != nil {
|
||||
if err == nil {
|
||||
err = err2
|
||||
} else {
|
||||
err = errors.Wrapf(err, "%v. Stop the container before attempting removal or use -f\n", err2)
|
||||
}
|
||||
} else {
|
||||
fmt.Println(id)
|
||||
}
|
||||
args := c.Args()
|
||||
if len(args) == 0 {
|
||||
return errors.Errorf("specify one or more containers to remove")
|
||||
}
|
||||
return err
|
||||
|
||||
for _, container := range args {
|
||||
ctr, err := runtime.LookupContainer(container)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "error looking up container", container)
|
||||
}
|
||||
err = runtime.RemoveContainer(ctr, c.Bool("force"))
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "error removing container %q", ctr.ID())
|
||||
}
|
||||
fmt.Println(ctr.ID())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -1,53 +0,0 @@
|
||||
package libkpod
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/projectatomic/libpod/oci"
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
// Remove removes a container
|
||||
func (c *ContainerServer) Remove(ctx context.Context, container string, force bool) (string, error) {
|
||||
ctr, err := c.LookupContainer(container)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
ctrID := ctr.ID()
|
||||
|
||||
cStatus := c.runtime.ContainerStatus(ctr)
|
||||
switch cStatus.Status {
|
||||
case oci.ContainerStatePaused:
|
||||
return "", errors.Errorf("cannot remove paused container %s", ctrID)
|
||||
case oci.ContainerStateCreated, oci.ContainerStateRunning:
|
||||
if force {
|
||||
_, err = c.ContainerStop(ctx, container, 10)
|
||||
if err != nil {
|
||||
return "", errors.Wrapf(err, "unable to stop container %s", ctrID)
|
||||
}
|
||||
} else {
|
||||
return "", errors.Errorf("cannot remove running container %s", ctrID)
|
||||
}
|
||||
}
|
||||
|
||||
if err := c.runtime.DeleteContainer(ctr); err != nil {
|
||||
return "", errors.Wrapf(err, "failed to delete container %s", ctrID)
|
||||
}
|
||||
if err := os.Remove(filepath.Join(c.Config().RuntimeConfig.ContainerExitsDir, ctrID)); err != nil && !os.IsNotExist(err) {
|
||||
return "", errors.Wrapf(err, "failed to remove container exit file %s", ctrID)
|
||||
}
|
||||
c.RemoveContainer(ctr)
|
||||
|
||||
if err := c.storageRuntimeServer.DeleteContainer(ctrID); err != nil {
|
||||
return "", errors.Wrapf(err, "failed to delete storage for container %s", ctrID)
|
||||
}
|
||||
|
||||
c.ReleaseContainerName(ctr.Name())
|
||||
|
||||
if err := c.ctrIDIndex.Delete(ctrID); err != nil {
|
||||
return "", err
|
||||
}
|
||||
return ctrID, nil
|
||||
}
|
@ -59,21 +59,13 @@ function setup() {
|
||||
}
|
||||
|
||||
@test "remove a created container" {
|
||||
skip "Test needs to be converted to kpod run"
|
||||
start_crio
|
||||
run crioctl pod run --config "$TESTDATA"/sandbox_config.json
|
||||
echo "$output"
|
||||
[ "$status" -eq 0 ]
|
||||
pod_id="$output"
|
||||
run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id"
|
||||
run ${KPOD_BINARY} ${KPOD_OPTIONS} create $BB ls
|
||||
echo "$output"
|
||||
[ "$status" -eq 0 ]
|
||||
ctr_id="$output"
|
||||
run bash -c ${KPOD_BINARY} $KPOD_OPTIONS rm -f "$ctr_id"
|
||||
echo "$output"
|
||||
[ "$status" -eq 0 ]
|
||||
cleanup_pods
|
||||
stop_crio
|
||||
}
|
||||
|
||||
@test "remove a running container" {
|
||||
|
Reference in New Issue
Block a user