mirror of https://github.com/containers/podman.git
remove libpod from main
the compilation demands of having libpod in main is a burden for the remote client compilations. to combat this, we should move the use of libpod structs, vars, constants, and functions into the adapter code where it will only be compiled by the local client. this should result in cleaner code organization and smaller binaries. it should also help if we ever need to compile the remote client on non-Linux operating systems natively (not cross-compiled). Signed-off-by: baude <bbaude@redhat.com>
This commit is contained in:
parent
a1a4a75abe
commit
dd81a44ccf
|
@ -2,7 +2,6 @@ package main
|
|||
|
||||
import (
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/pkg/adapter"
|
||||
"github.com/containers/libpod/pkg/rootless"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -59,13 +58,7 @@ func checkpointCmd(c *cliconfig.CheckpointValues) error {
|
|||
if err != nil {
|
||||
return errors.Wrapf(err, "could not get runtime")
|
||||
}
|
||||
defer runtime.Shutdown(false)
|
||||
|
||||
options := libpod.ContainerCheckpointOptions{
|
||||
Keep: c.Keep,
|
||||
KeepRunning: c.LeaveRunning,
|
||||
TCPEstablished: c.TcpEstablished,
|
||||
TargetFile: c.Export,
|
||||
}
|
||||
return runtime.Checkpoint(c, options)
|
||||
defer runtime.Shutdown(false)
|
||||
return runtime.Checkpoint(c)
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/pkg/adapter"
|
||||
"github.com/containers/libpod/pkg/util"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -30,6 +29,9 @@ var (
|
|||
podman commit -q --author "firstName lastName" reverent_golick image-committed
|
||||
podman commit -q --pause=false containerID image-committed`,
|
||||
}
|
||||
|
||||
// ChangeCmds is the list of valid Changes commands to passed to the Commit call
|
||||
ChangeCmds = []string{"CMD", "ENTRYPOINT", "ENV", "EXPOSE", "LABEL", "ONBUILD", "STOPSIGNAL", "USER", "VOLUME", "WORKDIR"}
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
@ -37,7 +39,7 @@ func init() {
|
|||
commitCommand.SetHelpTemplate(HelpTemplate())
|
||||
commitCommand.SetUsageTemplate(UsageTemplate())
|
||||
flags := commitCommand.Flags()
|
||||
flags.StringArrayVarP(&commitCommand.Change, "change", "c", []string{}, fmt.Sprintf("Apply the following possible instructions to the created image (default []): %s", strings.Join(libpod.ChangeCmds, " | ")))
|
||||
flags.StringArrayVarP(&commitCommand.Change, "change", "c", []string{}, fmt.Sprintf("Apply the following possible instructions to the created image (default []): %s", strings.Join(ChangeCmds, " | ")))
|
||||
flags.StringVarP(&commitCommand.Format, "format", "f", "oci", "`Format` of the image manifest and metadata")
|
||||
flags.StringVarP(&commitCommand.Message, "message", "m", "", "Set commit message for imported image")
|
||||
flags.StringVarP(&commitCommand.Author, "author", "a", "", "Set the author for the image committed")
|
||||
|
@ -66,7 +68,7 @@ func commitCmd(c *cliconfig.CommitValues) error {
|
|||
if len(splitChange) == 1 {
|
||||
splitChange = strings.Split(strings.ToUpper(change), " ")
|
||||
}
|
||||
if !util.StringInSlice(splitChange[0], libpod.ChangeCmds) {
|
||||
if !util.StringInSlice(splitChange[0], ChangeCmds) {
|
||||
return errors.Errorf("invalid syntax for --change: %s", change)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ import (
|
|||
|
||||
"github.com/containers/buildah"
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/rootless"
|
||||
"github.com/containers/storage"
|
||||
"github.com/fatih/camelcase"
|
||||
|
@ -80,58 +80,6 @@ func commandRunE() func(*cobra.Command, []string) error {
|
|||
}
|
||||
}
|
||||
|
||||
// getAllOrLatestContainers tries to return the correct list of containers
|
||||
// depending if --all, --latest or <container-id> is used.
|
||||
// It requires the Context (c) and the Runtime (runtime). As different
|
||||
// commands are using different container state for the --all option
|
||||
// the desired state has to be specified in filterState. If no filter
|
||||
// is desired a -1 can be used to get all containers. For a better
|
||||
// error message, if the filter fails, a corresponding verb can be
|
||||
// specified which will then appear in the error message.
|
||||
func getAllOrLatestContainers(c *cliconfig.PodmanCommand, runtime *libpod.Runtime, filterState libpod.ContainerStatus, verb string) ([]*libpod.Container, error) {
|
||||
var containers []*libpod.Container
|
||||
var lastError error
|
||||
var err error
|
||||
if c.Bool("all") {
|
||||
if filterState != -1 {
|
||||
var filterFuncs []libpod.ContainerFilter
|
||||
filterFuncs = append(filterFuncs, func(c *libpod.Container) bool {
|
||||
state, _ := c.State()
|
||||
return state == filterState
|
||||
})
|
||||
containers, err = runtime.GetContainers(filterFuncs...)
|
||||
} else {
|
||||
containers, err = runtime.GetContainers()
|
||||
}
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to get %s containers", verb)
|
||||
}
|
||||
} else if c.Bool("latest") {
|
||||
lastCtr, err := runtime.GetLatestContainer()
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to get latest container")
|
||||
}
|
||||
containers = append(containers, lastCtr)
|
||||
} else {
|
||||
args := c.InputArgs
|
||||
for _, i := range args {
|
||||
container, err := runtime.LookupContainer(i)
|
||||
if err != nil {
|
||||
if lastError != nil {
|
||||
fmt.Fprintln(os.Stderr, lastError)
|
||||
}
|
||||
lastError = errors.Wrapf(err, "unable to find container %s", i)
|
||||
}
|
||||
if container != nil {
|
||||
// This is here to make sure this does not return [<nil>] but only nil
|
||||
containers = append(containers, container)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return containers, lastError
|
||||
}
|
||||
|
||||
// getContext returns a non-nil, empty context
|
||||
func getContext() context.Context {
|
||||
if Ctx != nil {
|
||||
|
@ -333,7 +281,7 @@ func getCreateFlags(c *cliconfig.PodmanCommand) {
|
|||
createFlags.String(
|
||||
"init-path", "",
|
||||
// Do not use the Value field for setting the default value to determine user input (i.e., non-empty string)
|
||||
fmt.Sprintf("Path to the container-init binary (default: %q)", libpod.DefaultInitPath),
|
||||
fmt.Sprintf("Path to the container-init binary (default: %q)", define.DefaultInitPath),
|
||||
)
|
||||
createFlags.BoolP(
|
||||
"interactive", "i", false,
|
||||
|
@ -472,7 +420,7 @@ func getCreateFlags(c *cliconfig.PodmanCommand) {
|
|||
"Signal to stop a container. Default is SIGTERM",
|
||||
)
|
||||
createFlags.Uint(
|
||||
"stop-timeout", libpod.CtrRemoveTimeout,
|
||||
"stop-timeout", define.CtrRemoveTimeout,
|
||||
"Timeout (in seconds) to stop a container. Default is 10",
|
||||
)
|
||||
createFlags.StringSlice(
|
||||
|
|
|
@ -0,0 +1,64 @@
|
|||
//build !remoteclient
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// getAllOrLatestContainers tries to return the correct list of containers
|
||||
// depending if --all, --latest or <container-id> is used.
|
||||
// It requires the Context (c) and the Runtime (runtime). As different
|
||||
// commands are using different container state for the --all option
|
||||
// the desired state has to be specified in filterState. If no filter
|
||||
// is desired a -1 can be used to get all containers. For a better
|
||||
// error message, if the filter fails, a corresponding verb can be
|
||||
// specified which will then appear in the error message.
|
||||
func getAllOrLatestContainers(c *cliconfig.PodmanCommand, runtime *libpod.Runtime, filterState libpod.ContainerStatus, verb string) ([]*libpod.Container, error) {
|
||||
var containers []*libpod.Container
|
||||
var lastError error
|
||||
var err error
|
||||
if c.Bool("all") {
|
||||
if filterState != -1 {
|
||||
var filterFuncs []libpod.ContainerFilter
|
||||
filterFuncs = append(filterFuncs, func(c *libpod.Container) bool {
|
||||
state, _ := c.State()
|
||||
return state == filterState
|
||||
})
|
||||
containers, err = runtime.GetContainers(filterFuncs...)
|
||||
} else {
|
||||
containers, err = runtime.GetContainers()
|
||||
}
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to get %s containers", verb)
|
||||
}
|
||||
} else if c.Bool("latest") {
|
||||
lastCtr, err := runtime.GetLatestContainer()
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "unable to get latest container")
|
||||
}
|
||||
containers = append(containers, lastCtr)
|
||||
} else {
|
||||
args := c.InputArgs
|
||||
for _, i := range args {
|
||||
container, err := runtime.LookupContainer(i)
|
||||
if err != nil {
|
||||
if lastError != nil {
|
||||
fmt.Fprintln(os.Stderr, lastError)
|
||||
}
|
||||
lastError = errors.Wrapf(err, "unable to find container %s", i)
|
||||
}
|
||||
if container != nil {
|
||||
// This is here to make sure this does not return [<nil>] but only nil
|
||||
containers = append(containers, container)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return containers, lastError
|
||||
}
|
|
@ -3,7 +3,7 @@ package main
|
|||
import (
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/cmd/podman/shared"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/adapter"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
|
@ -51,7 +51,7 @@ func pruneContainersCmd(c *cliconfig.PruneContainersValues) error {
|
|||
}
|
||||
ok, failures, err := runtime.Prune(getContext(), maxWorkers, c.Force)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == libpod.ErrNoSuchCtr {
|
||||
if errors.Cause(err) == define.ErrNoSuchCtr {
|
||||
if len(c.InputArgs) > 1 {
|
||||
exitCode = 125
|
||||
} else {
|
||||
|
|
|
@ -13,14 +13,15 @@ import (
|
|||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/cmd/podman/libpodruntime"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/rootless"
|
||||
"github.com/containers/storage"
|
||||
"github.com/containers/storage/pkg/archive"
|
||||
"github.com/containers/storage/pkg/chrootarchive"
|
||||
"github.com/containers/storage/pkg/idtools"
|
||||
securejoin "github.com/cyphar/filepath-securejoin"
|
||||
digest "github.com/opencontainers/go-digest"
|
||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/go-digest"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/spf13/cobra"
|
||||
|
@ -114,7 +115,7 @@ func copyBetweenHostAndContainer(runtime *libpod.Runtime, src string, dest strin
|
|||
// TODO: We can potentially start the container while
|
||||
// the copy is running, which still allows a race where
|
||||
// malicious code could mess with the symlink.
|
||||
if errors.Cause(err) != libpod.ErrCtrStateInvalid {
|
||||
if errors.Cause(err) != define.ErrCtrStateInvalid {
|
||||
return err
|
||||
}
|
||||
} else if err == nil {
|
||||
|
|
|
@ -10,6 +10,7 @@ import (
|
|||
"github.com/containers/libpod/cmd/podman/libpodruntime"
|
||||
"github.com/containers/libpod/cmd/podman/shared/parse"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
@ -126,7 +127,7 @@ func execCmd(c *cliconfig.ExecValues) error {
|
|||
streams.AttachInput = true
|
||||
|
||||
err = ctr.Exec(c.Tty, c.Privileged, envs, cmd, c.User, c.Workdir, streams, c.PreserveFDs)
|
||||
if errors.Cause(err) == libpod.ErrCtrStateInvalid {
|
||||
if errors.Cause(err) == define.ErrCtrStateInvalid {
|
||||
exitCode = 126
|
||||
}
|
||||
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/spf13/cobra"
|
||||
"os"
|
||||
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/image"
|
||||
"github.com/containers/libpod/pkg/adapter"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -113,7 +113,7 @@ func containerExistsCmd(c *cliconfig.ContainerExistsValues) error {
|
|||
}
|
||||
defer runtime.Shutdown(false)
|
||||
if _, err := runtime.LookupContainer(args[0]); err != nil {
|
||||
if errors.Cause(err) == libpod.ErrNoSuchCtr || err.Error() == "io.podman.ContainerNotFound" {
|
||||
if errors.Cause(err) == define.ErrNoSuchCtr || err.Error() == "io.podman.ContainerNotFound" {
|
||||
os.Exit(1)
|
||||
}
|
||||
return err
|
||||
|
@ -133,7 +133,7 @@ func podExistsCmd(c *cliconfig.PodExistsValues) error {
|
|||
defer runtime.Shutdown(false)
|
||||
|
||||
if _, err := runtime.LookupPod(args[0]); err != nil {
|
||||
if errors.Cause(err) == libpod.ErrNoSuchPod || err.Error() == "io.podman.PodNotFound" {
|
||||
if errors.Cause(err) == define.ErrNoSuchPod || err.Error() == "io.podman.PodNotFound" {
|
||||
os.Exit(1)
|
||||
}
|
||||
return err
|
||||
|
|
|
@ -4,7 +4,7 @@ import (
|
|||
"os"
|
||||
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/adapter"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
|
@ -55,7 +55,7 @@ func pauseCmd(c *cliconfig.PauseValues) error {
|
|||
}
|
||||
ok, failures, err := runtime.PauseContainers(getContext(), c)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == libpod.ErrNoSuchCtr {
|
||||
if errors.Cause(err) == define.ErrNoSuchCtr {
|
||||
if len(c.InputArgs) > 1 {
|
||||
exitCode = 125
|
||||
} else {
|
||||
|
|
|
@ -13,6 +13,7 @@ import (
|
|||
"github.com/containers/buildah/pkg/formats"
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/adapter"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
|
@ -153,7 +154,7 @@ func podStatsCmd(c *cliconfig.PodStatsValues) error {
|
|||
for _, p := range pods {
|
||||
prevStat := getPreviousPodContainerStats(p.ID(), previousPodStats)
|
||||
newPodStats, err := p.GetPodStats(prevStat)
|
||||
if errors.Cause(err) == libpod.ErrNoSuchPod {
|
||||
if errors.Cause(err) == define.ErrNoSuchPod {
|
||||
continue
|
||||
}
|
||||
if err != nil {
|
||||
|
|
|
@ -2,7 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/adapter"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
|
@ -39,8 +39,8 @@ func init() {
|
|||
flags.BoolVarP(&restartCommand.All, "all", "a", false, "Restart all non-running containers")
|
||||
flags.BoolVarP(&restartCommand.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
|
||||
flags.BoolVar(&restartCommand.Running, "running", false, "Restart only running containers when --all is used")
|
||||
flags.UintVarP(&restartCommand.Timeout, "timeout", "t", libpod.CtrRemoveTimeout, "Seconds to wait for stop before killing the container")
|
||||
flags.UintVar(&restartCommand.Timeout, "time", libpod.CtrRemoveTimeout, "Seconds to wait for stop before killing the container")
|
||||
flags.UintVarP(&restartCommand.Timeout, "timeout", "t", define.CtrRemoveTimeout, "Seconds to wait for stop before killing the container")
|
||||
flags.UintVar(&restartCommand.Timeout, "time", define.CtrRemoveTimeout, "Seconds to wait for stop before killing the container")
|
||||
|
||||
markFlagHiddenForRemoteClient("latest", flags)
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ func init() {
|
|||
func restartCmd(c *cliconfig.RestartValues) error {
|
||||
all := c.All
|
||||
if len(c.InputArgs) < 1 && !c.Latest && !all {
|
||||
return errors.Wrapf(libpod.ErrInvalidArg, "you must provide at least one container name or ID")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "you must provide at least one container name or ID")
|
||||
}
|
||||
|
||||
runtime, err := adapter.GetRuntime(getContext(), &c.PodmanCommand)
|
||||
|
@ -59,7 +59,7 @@ func restartCmd(c *cliconfig.RestartValues) error {
|
|||
|
||||
ok, failures, err := runtime.Restart(getContext(), c)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == libpod.ErrNoSuchCtr {
|
||||
if errors.Cause(err) == define.ErrNoSuchCtr {
|
||||
if len(c.InputArgs) > 1 {
|
||||
exitCode = 125
|
||||
} else {
|
||||
|
|
|
@ -4,7 +4,7 @@ import (
|
|||
"fmt"
|
||||
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/adapter"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
|
@ -65,7 +65,7 @@ func rmCmd(c *cliconfig.RmValues) error {
|
|||
|
||||
ok, failures, err := runtime.RemoveContainers(getContext(), c)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == libpod.ErrNoSuchCtr {
|
||||
if errors.Cause(err) == define.ErrNoSuchCtr {
|
||||
if len(c.InputArgs) > 1 {
|
||||
exitCode = 125
|
||||
} else {
|
||||
|
|
|
@ -10,7 +10,7 @@ import (
|
|||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/cmd/podman/libpodruntime"
|
||||
"github.com/containers/libpod/cmd/podman/shared"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/image"
|
||||
"github.com/containers/libpod/pkg/util"
|
||||
"github.com/containers/libpod/utils"
|
||||
|
@ -169,7 +169,7 @@ func runlabelCmd(c *cliconfig.RunlabelValues) error {
|
|||
name := cmd[i+1]
|
||||
ctr, err := runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
if errors.Cause(err) != libpod.ErrNoSuchCtr {
|
||||
if errors.Cause(err) != define.ErrNoSuchCtr {
|
||||
logrus.Debugf("Error occurred searching for container %s: %s", name, err.Error())
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ import (
|
|||
|
||||
"github.com/containers/image/types"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/image"
|
||||
"github.com/containers/libpod/pkg/util"
|
||||
"github.com/cri-o/ocicni/pkg/ocicni"
|
||||
|
@ -824,7 +825,7 @@ func GenerateKube(name string, service bool, r *libpod.Runtime) (*v1.Pod, *v1.Se
|
|||
podYAML, servicePorts, err = pod.GenerateForKube()
|
||||
} else {
|
||||
if len(container.Dependencies()) > 0 {
|
||||
return nil, nil, errors.Wrapf(libpod.ErrNotImplemented, "containers with dependencies")
|
||||
return nil, nil, errors.Wrapf(define.ErrNotImplemented, "containers with dependencies")
|
||||
}
|
||||
podYAML, err = container.GenerateForKube()
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/adapter"
|
||||
"github.com/opentracing/opentracing-go"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -62,7 +62,7 @@ func startCmd(c *cliconfig.StartValues) error {
|
|||
sigProxy := c.SigProxy || attach
|
||||
|
||||
if sigProxy && !attach {
|
||||
return errors.Wrapf(libpod.ErrInvalidArg, "you cannot use sig-proxy without --attach")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "you cannot use sig-proxy without --attach")
|
||||
}
|
||||
|
||||
runtime, err := adapter.GetRuntime(getContext(), &c.PodmanCommand)
|
||||
|
|
|
@ -12,6 +12,7 @@ import (
|
|||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/cmd/podman/libpodruntime"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/docker/go-units"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
|
@ -127,7 +128,7 @@ func statsCmd(c *cliconfig.StatsValues) error {
|
|||
initialStats, err := ctr.GetContainerStats(&libpod.ContainerStats{})
|
||||
if err != nil {
|
||||
// when doing "all", dont worry about containers that are not running
|
||||
if c.All && errors.Cause(err) == libpod.ErrCtrRemoved || errors.Cause(err) == libpod.ErrNoSuchCtr || errors.Cause(err) == libpod.ErrCtrStateInvalid {
|
||||
if c.All && errors.Cause(err) == define.ErrCtrRemoved || errors.Cause(err) == define.ErrNoSuchCtr || errors.Cause(err) == define.ErrCtrStateInvalid {
|
||||
continue
|
||||
}
|
||||
return err
|
||||
|
@ -148,7 +149,7 @@ func statsCmd(c *cliconfig.StatsValues) error {
|
|||
id := ctr.ID()
|
||||
if _, ok := containerStats[ctr.ID()]; !ok {
|
||||
initialStats, err := ctr.GetContainerStats(&libpod.ContainerStats{})
|
||||
if errors.Cause(err) == libpod.ErrCtrRemoved || errors.Cause(err) == libpod.ErrNoSuchCtr || errors.Cause(err) == libpod.ErrCtrStateInvalid {
|
||||
if errors.Cause(err) == define.ErrCtrRemoved || errors.Cause(err) == define.ErrNoSuchCtr || errors.Cause(err) == define.ErrCtrStateInvalid {
|
||||
// skip dealing with a container that is gone
|
||||
continue
|
||||
}
|
||||
|
@ -158,7 +159,7 @@ func statsCmd(c *cliconfig.StatsValues) error {
|
|||
containerStats[id] = initialStats
|
||||
}
|
||||
stats, err := ctr.GetContainerStats(containerStats[id])
|
||||
if err != nil && errors.Cause(err) != libpod.ErrNoSuchCtr {
|
||||
if err != nil && errors.Cause(err) != define.ErrNoSuchCtr {
|
||||
return err
|
||||
}
|
||||
// replace the previous measurement with the current one
|
||||
|
|
|
@ -2,7 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/adapter"
|
||||
"github.com/opentracing/opentracing-go"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -40,8 +40,8 @@ func init() {
|
|||
flags := stopCommand.Flags()
|
||||
flags.BoolVarP(&stopCommand.All, "all", "a", false, "Stop all running containers")
|
||||
flags.BoolVarP(&stopCommand.Latest, "latest", "l", false, "Act on the latest container podman is aware of")
|
||||
flags.UintVar(&stopCommand.Timeout, "time", libpod.CtrRemoveTimeout, "Seconds to wait for stop before killing the container")
|
||||
flags.UintVarP(&stopCommand.Timeout, "timeout", "t", libpod.CtrRemoveTimeout, "Seconds to wait for stop before killing the container")
|
||||
flags.UintVar(&stopCommand.Timeout, "time", define.CtrRemoveTimeout, "Seconds to wait for stop before killing the container")
|
||||
flags.UintVarP(&stopCommand.Timeout, "timeout", "t", define.CtrRemoveTimeout, "Seconds to wait for stop before killing the container")
|
||||
markFlagHiddenForRemoteClient("latest", flags)
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import (
|
|||
"os"
|
||||
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/adapter"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
|
@ -54,7 +54,7 @@ func unpauseCmd(c *cliconfig.UnpauseValues) error {
|
|||
}
|
||||
ok, failures, err := runtime.UnpauseContainers(getContext(), c)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == libpod.ErrNoSuchCtr {
|
||||
if errors.Cause(err) == define.ErrNoSuchCtr {
|
||||
if len(c.InputArgs) > 1 {
|
||||
exitCode = 125
|
||||
} else {
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
bolt "github.com/etcd-io/bbolt"
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -133,7 +134,7 @@ func (s *BoltState) Close() error {
|
|||
// Refresh clears container and pod states after a reboot
|
||||
func (s *BoltState) Refresh() error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
db, err := s.getDBCon()
|
||||
|
@ -171,13 +172,13 @@ func (s *BoltState) Refresh() error {
|
|||
if podBkt == nil {
|
||||
// This is neither a pod nor a container
|
||||
// Error out on the dangling ID
|
||||
return errors.Wrapf(ErrInternal, "id %s is not a pod or a container", string(id))
|
||||
return errors.Wrapf(define.ErrInternal, "id %s is not a pod or a container", string(id))
|
||||
}
|
||||
|
||||
// Get the state
|
||||
stateBytes := podBkt.Get(stateKey)
|
||||
if stateBytes == nil {
|
||||
return errors.Wrapf(ErrInternal, "pod %s missing state key", string(id))
|
||||
return errors.Wrapf(define.ErrInternal, "pod %s missing state key", string(id))
|
||||
}
|
||||
|
||||
state := new(podState)
|
||||
|
@ -210,7 +211,7 @@ func (s *BoltState) Refresh() error {
|
|||
stateBytes := ctrBkt.Get(stateKey)
|
||||
if stateBytes == nil {
|
||||
// Badly formatted container bucket
|
||||
return errors.Wrapf(ErrInternal, "container %s missing state in DB", string(id))
|
||||
return errors.Wrapf(define.ErrInternal, "container %s missing state in DB", string(id))
|
||||
}
|
||||
|
||||
state := new(ContainerState)
|
||||
|
@ -243,7 +244,7 @@ func (s *BoltState) Refresh() error {
|
|||
// the database was first initialized
|
||||
func (s *BoltState) GetDBConfig() (*DBConfig, error) {
|
||||
if !s.valid {
|
||||
return nil, ErrDBClosed
|
||||
return nil, define.ErrDBClosed
|
||||
}
|
||||
|
||||
cfg := new(DBConfig)
|
||||
|
@ -290,7 +291,7 @@ func (s *BoltState) GetDBConfig() (*DBConfig, error) {
|
|||
// ValidateDBConfig validates paths in the given runtime against the database
|
||||
func (s *BoltState) ValidateDBConfig(runtime *Runtime) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
db, err := s.getDBCon()
|
||||
|
@ -324,11 +325,11 @@ func (s *BoltState) SetNamespace(ns string) error {
|
|||
// Container retrieves a single container from the state by its full ID
|
||||
func (s *BoltState) Container(id string) (*Container, error) {
|
||||
if id == "" {
|
||||
return nil, ErrEmptyID
|
||||
return nil, define.ErrEmptyID
|
||||
}
|
||||
|
||||
if !s.valid {
|
||||
return nil, ErrDBClosed
|
||||
return nil, define.ErrDBClosed
|
||||
}
|
||||
|
||||
ctrID := []byte(id)
|
||||
|
@ -362,11 +363,11 @@ func (s *BoltState) Container(id string) (*Container, error) {
|
|||
// partial ID or name
|
||||
func (s *BoltState) LookupContainer(idOrName string) (*Container, error) {
|
||||
if idOrName == "" {
|
||||
return nil, ErrEmptyID
|
||||
return nil, define.ErrEmptyID
|
||||
}
|
||||
|
||||
if !s.valid {
|
||||
return nil, ErrDBClosed
|
||||
return nil, define.ErrDBClosed
|
||||
}
|
||||
|
||||
ctr := new(Container)
|
||||
|
@ -446,7 +447,7 @@ func (s *BoltState) LookupContainer(idOrName string) (*Container, error) {
|
|||
}
|
||||
if strings.HasPrefix(string(checkID), idOrName) {
|
||||
if exists {
|
||||
return errors.Wrapf(ErrCtrExists, "more than one result for container ID %s", idOrName)
|
||||
return errors.Wrapf(define.ErrCtrExists, "more than one result for container ID %s", idOrName)
|
||||
}
|
||||
id = checkID
|
||||
exists = true
|
||||
|
@ -458,9 +459,9 @@ func (s *BoltState) LookupContainer(idOrName string) (*Container, error) {
|
|||
return err
|
||||
} else if !exists {
|
||||
if isPod {
|
||||
return errors.Wrapf(ErrNoSuchCtr, "%s is a pod, not a container", idOrName)
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "%s is a pod, not a container", idOrName)
|
||||
}
|
||||
return errors.Wrapf(ErrNoSuchCtr, "no container with name or ID %s found", idOrName)
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "no container with name or ID %s found", idOrName)
|
||||
}
|
||||
|
||||
return s.getContainerFromDB(id, ctr, ctrBucket)
|
||||
|
@ -475,11 +476,11 @@ func (s *BoltState) LookupContainer(idOrName string) (*Container, error) {
|
|||
// HasContainer checks if a container is present in the state
|
||||
func (s *BoltState) HasContainer(id string) (bool, error) {
|
||||
if id == "" {
|
||||
return false, ErrEmptyID
|
||||
return false, define.ErrEmptyID
|
||||
}
|
||||
|
||||
if !s.valid {
|
||||
return false, ErrDBClosed
|
||||
return false, define.ErrDBClosed
|
||||
}
|
||||
|
||||
ctrID := []byte(id)
|
||||
|
@ -523,15 +524,15 @@ func (s *BoltState) HasContainer(id string) (bool, error) {
|
|||
// The container being added cannot belong to a pod
|
||||
func (s *BoltState) AddContainer(ctr *Container) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !ctr.valid {
|
||||
return ErrCtrRemoved
|
||||
return define.ErrCtrRemoved
|
||||
}
|
||||
|
||||
if ctr.config.Pod != "" {
|
||||
return errors.Wrapf(ErrInvalidArg, "cannot add a container that belongs to a pod with AddContainer - use AddContainerToPod")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "cannot add a container that belongs to a pod with AddContainer - use AddContainerToPod")
|
||||
}
|
||||
|
||||
return s.addContainer(ctr, nil)
|
||||
|
@ -542,11 +543,11 @@ func (s *BoltState) AddContainer(ctr *Container) error {
|
|||
// pod, use RemoveContainerFromPod
|
||||
func (s *BoltState) RemoveContainer(ctr *Container) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if ctr.config.Pod != "" {
|
||||
return errors.Wrapf(ErrPodExists, "container %s is part of a pod, use RemoveContainerFromPod instead", ctr.ID())
|
||||
return errors.Wrapf(define.ErrPodExists, "container %s is part of a pod, use RemoveContainerFromPod instead", ctr.ID())
|
||||
}
|
||||
|
||||
db, err := s.getDBCon()
|
||||
|
@ -564,15 +565,15 @@ func (s *BoltState) RemoveContainer(ctr *Container) error {
|
|||
// UpdateContainer updates a container's state from the database
|
||||
func (s *BoltState) UpdateContainer(ctr *Container) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !ctr.valid {
|
||||
return ErrCtrRemoved
|
||||
return define.ErrCtrRemoved
|
||||
}
|
||||
|
||||
if s.namespace != "" && s.namespace != ctr.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "container %s is in namespace %q, does not match our namespace %q", ctr.ID(), ctr.config.Namespace, s.namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "container %s is in namespace %q, does not match our namespace %q", ctr.ID(), ctr.config.Namespace, s.namespace)
|
||||
}
|
||||
|
||||
newState := new(ContainerState)
|
||||
|
@ -595,12 +596,12 @@ func (s *BoltState) UpdateContainer(ctr *Container) error {
|
|||
ctrToUpdate := ctrBucket.Bucket(ctrID)
|
||||
if ctrToUpdate == nil {
|
||||
ctr.valid = false
|
||||
return errors.Wrapf(ErrNoSuchCtr, "container %s does not exist in database", ctr.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "container %s does not exist in database", ctr.ID())
|
||||
}
|
||||
|
||||
newStateBytes := ctrToUpdate.Get(stateKey)
|
||||
if newStateBytes == nil {
|
||||
return errors.Wrapf(ErrInternal, "container %s does not have a state key in DB", ctr.ID())
|
||||
return errors.Wrapf(define.ErrInternal, "container %s does not have a state key in DB", ctr.ID())
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(newStateBytes, newState); err != nil {
|
||||
|
@ -632,15 +633,15 @@ func (s *BoltState) UpdateContainer(ctr *Container) error {
|
|||
// SaveContainer saves a container's current state in the database
|
||||
func (s *BoltState) SaveContainer(ctr *Container) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !ctr.valid {
|
||||
return ErrCtrRemoved
|
||||
return define.ErrCtrRemoved
|
||||
}
|
||||
|
||||
if s.namespace != "" && s.namespace != ctr.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "container %s is in namespace %q, does not match our namespace %q", ctr.ID(), ctr.config.Namespace, s.namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "container %s is in namespace %q, does not match our namespace %q", ctr.ID(), ctr.config.Namespace, s.namespace)
|
||||
}
|
||||
|
||||
stateJSON, err := json.Marshal(ctr.state)
|
||||
|
@ -666,7 +667,7 @@ func (s *BoltState) SaveContainer(ctr *Container) error {
|
|||
ctrToSave := ctrBucket.Bucket(ctrID)
|
||||
if ctrToSave == nil {
|
||||
ctr.valid = false
|
||||
return errors.Wrapf(ErrNoSuchCtr, "container %s does not exist in DB", ctr.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "container %s does not exist in DB", ctr.ID())
|
||||
}
|
||||
|
||||
// Update the state
|
||||
|
@ -695,15 +696,15 @@ func (s *BoltState) SaveContainer(ctr *Container) error {
|
|||
// container. If the slice is empty, no containers depend on the given container
|
||||
func (s *BoltState) ContainerInUse(ctr *Container) ([]string, error) {
|
||||
if !s.valid {
|
||||
return nil, ErrDBClosed
|
||||
return nil, define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !ctr.valid {
|
||||
return nil, ErrCtrRemoved
|
||||
return nil, define.ErrCtrRemoved
|
||||
}
|
||||
|
||||
if s.namespace != "" && s.namespace != ctr.config.Namespace {
|
||||
return nil, errors.Wrapf(ErrNSMismatch, "container %s is in namespace %q, does not match our namespace %q", ctr.ID(), ctr.config.Namespace, s.namespace)
|
||||
return nil, errors.Wrapf(define.ErrNSMismatch, "container %s is in namespace %q, does not match our namespace %q", ctr.ID(), ctr.config.Namespace, s.namespace)
|
||||
}
|
||||
|
||||
depCtrs := []string{}
|
||||
|
@ -723,12 +724,12 @@ func (s *BoltState) ContainerInUse(ctr *Container) ([]string, error) {
|
|||
ctrDB := ctrBucket.Bucket([]byte(ctr.ID()))
|
||||
if ctrDB == nil {
|
||||
ctr.valid = false
|
||||
return errors.Wrapf(ErrNoSuchCtr, "no container with ID %s found in DB", ctr.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "no container with ID %s found in DB", ctr.ID())
|
||||
}
|
||||
|
||||
dependsBkt := ctrDB.Bucket(dependenciesBkt)
|
||||
if dependsBkt == nil {
|
||||
return errors.Wrapf(ErrInternal, "container %s has no dependencies bucket", ctr.ID())
|
||||
return errors.Wrapf(define.ErrInternal, "container %s has no dependencies bucket", ctr.ID())
|
||||
}
|
||||
|
||||
// Iterate through and add dependencies
|
||||
|
@ -754,7 +755,7 @@ func (s *BoltState) ContainerInUse(ctr *Container) ([]string, error) {
|
|||
// AllContainers retrieves all the containers in the database
|
||||
func (s *BoltState) AllContainers() ([]*Container, error) {
|
||||
if !s.valid {
|
||||
return nil, ErrDBClosed
|
||||
return nil, define.ErrDBClosed
|
||||
}
|
||||
|
||||
ctrs := []*Container{}
|
||||
|
@ -782,7 +783,7 @@ func (s *BoltState) AllContainers() ([]*Container, error) {
|
|||
// be much less helpful.
|
||||
ctrExists := ctrBucket.Bucket(id)
|
||||
if ctrExists == nil {
|
||||
return errors.Wrapf(ErrInternal, "state is inconsistent - container ID %s in all containers, but container not found", string(id))
|
||||
return errors.Wrapf(define.ErrInternal, "state is inconsistent - container ID %s in all containers, but container not found", string(id))
|
||||
}
|
||||
|
||||
ctr := new(Container)
|
||||
|
@ -794,7 +795,7 @@ func (s *BoltState) AllContainers() ([]*Container, error) {
|
|||
// ignore it safely.
|
||||
// We just won't include the container in the
|
||||
// results.
|
||||
if errors.Cause(err) != ErrNSMismatch {
|
||||
if errors.Cause(err) != define.ErrNSMismatch {
|
||||
// Even if it's not an NS mismatch, it's
|
||||
// not worth erroring over.
|
||||
// If we do, a single bad container JSON
|
||||
|
@ -821,11 +822,11 @@ func (s *BoltState) AllContainers() ([]*Container, error) {
|
|||
// comment on this function in state.go.
|
||||
func (s *BoltState) RewriteContainerConfig(ctr *Container, newCfg *ContainerConfig) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !ctr.valid {
|
||||
return ErrCtrRemoved
|
||||
return define.ErrCtrRemoved
|
||||
}
|
||||
|
||||
newCfgJSON, err := json.Marshal(newCfg)
|
||||
|
@ -848,7 +849,7 @@ func (s *BoltState) RewriteContainerConfig(ctr *Container, newCfg *ContainerConf
|
|||
ctrDB := ctrBkt.Bucket([]byte(ctr.ID()))
|
||||
if ctrDB == nil {
|
||||
ctr.valid = false
|
||||
return errors.Wrapf(ErrNoSuchCtr, "no container with ID %s found in DB", ctr.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "no container with ID %s found in DB", ctr.ID())
|
||||
}
|
||||
|
||||
if err := ctrDB.Put(configKey, newCfgJSON); err != nil {
|
||||
|
@ -865,11 +866,11 @@ func (s *BoltState) RewriteContainerConfig(ctr *Container, newCfg *ContainerConf
|
|||
// comment on this function in state.go.
|
||||
func (s *BoltState) RewritePodConfig(pod *Pod, newCfg *PodConfig) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !pod.valid {
|
||||
return ErrPodRemoved
|
||||
return define.ErrPodRemoved
|
||||
}
|
||||
|
||||
newCfgJSON, err := json.Marshal(newCfg)
|
||||
|
@ -892,7 +893,7 @@ func (s *BoltState) RewritePodConfig(pod *Pod, newCfg *PodConfig) error {
|
|||
podDB := podBkt.Bucket([]byte(pod.ID()))
|
||||
if podDB == nil {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "no pod with ID %s found in DB", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "no pod with ID %s found in DB", pod.ID())
|
||||
}
|
||||
|
||||
if err := podDB.Put(configKey, newCfgJSON); err != nil {
|
||||
|
@ -907,11 +908,11 @@ func (s *BoltState) RewritePodConfig(pod *Pod, newCfg *PodConfig) error {
|
|||
// Pod retrieves a pod given its full ID
|
||||
func (s *BoltState) Pod(id string) (*Pod, error) {
|
||||
if id == "" {
|
||||
return nil, ErrEmptyID
|
||||
return nil, define.ErrEmptyID
|
||||
}
|
||||
|
||||
if !s.valid {
|
||||
return nil, ErrDBClosed
|
||||
return nil, define.ErrDBClosed
|
||||
}
|
||||
|
||||
podID := []byte(id)
|
||||
|
@ -944,11 +945,11 @@ func (s *BoltState) Pod(id string) (*Pod, error) {
|
|||
// LookupPod retrieves a pod from full or unique partial ID or name
|
||||
func (s *BoltState) LookupPod(idOrName string) (*Pod, error) {
|
||||
if idOrName == "" {
|
||||
return nil, ErrEmptyID
|
||||
return nil, define.ErrEmptyID
|
||||
}
|
||||
|
||||
if !s.valid {
|
||||
return nil, ErrDBClosed
|
||||
return nil, define.ErrDBClosed
|
||||
}
|
||||
|
||||
pod := new(Pod)
|
||||
|
@ -1025,7 +1026,7 @@ func (s *BoltState) LookupPod(idOrName string) (*Pod, error) {
|
|||
}
|
||||
if strings.HasPrefix(string(checkID), idOrName) {
|
||||
if exists {
|
||||
return errors.Wrapf(ErrPodExists, "more than one result for ID or name %s", idOrName)
|
||||
return errors.Wrapf(define.ErrPodExists, "more than one result for ID or name %s", idOrName)
|
||||
}
|
||||
id = checkID
|
||||
exists = true
|
||||
|
@ -1037,9 +1038,9 @@ func (s *BoltState) LookupPod(idOrName string) (*Pod, error) {
|
|||
return err
|
||||
} else if !exists {
|
||||
if isCtr {
|
||||
return errors.Wrapf(ErrNoSuchPod, "%s is a container, not a pod", idOrName)
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "%s is a container, not a pod", idOrName)
|
||||
}
|
||||
return errors.Wrapf(ErrNoSuchPod, "no pod with name or ID %s found", idOrName)
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "no pod with name or ID %s found", idOrName)
|
||||
}
|
||||
|
||||
// We might have found a container ID, but it's OK
|
||||
|
@ -1056,11 +1057,11 @@ func (s *BoltState) LookupPod(idOrName string) (*Pod, error) {
|
|||
// HasPod checks if a pod with the given ID exists in the state
|
||||
func (s *BoltState) HasPod(id string) (bool, error) {
|
||||
if id == "" {
|
||||
return false, ErrEmptyID
|
||||
return false, define.ErrEmptyID
|
||||
}
|
||||
|
||||
if !s.valid {
|
||||
return false, ErrDBClosed
|
||||
return false, define.ErrDBClosed
|
||||
}
|
||||
|
||||
podID := []byte(id)
|
||||
|
@ -1103,19 +1104,19 @@ func (s *BoltState) HasPod(id string) (bool, error) {
|
|||
// PodHasContainer checks if the given pod has a container with the given ID
|
||||
func (s *BoltState) PodHasContainer(pod *Pod, id string) (bool, error) {
|
||||
if id == "" {
|
||||
return false, ErrEmptyID
|
||||
return false, define.ErrEmptyID
|
||||
}
|
||||
|
||||
if !s.valid {
|
||||
return false, ErrDBClosed
|
||||
return false, define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !pod.valid {
|
||||
return false, ErrPodRemoved
|
||||
return false, define.ErrPodRemoved
|
||||
}
|
||||
|
||||
if s.namespace != "" && s.namespace != pod.config.Namespace {
|
||||
return false, errors.Wrapf(ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
return false, errors.Wrapf(define.ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
}
|
||||
|
||||
ctrID := []byte(id)
|
||||
|
@ -1139,13 +1140,13 @@ func (s *BoltState) PodHasContainer(pod *Pod, id string) (bool, error) {
|
|||
podDB := podBkt.Bucket(podID)
|
||||
if podDB == nil {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "pod %s not found in database", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "pod %s not found in database", pod.ID())
|
||||
}
|
||||
|
||||
// Get pod containers bucket
|
||||
podCtrs := podDB.Bucket(containersBkt)
|
||||
if podCtrs == nil {
|
||||
return errors.Wrapf(ErrInternal, "pod %s missing containers bucket in DB", pod.ID())
|
||||
return errors.Wrapf(define.ErrInternal, "pod %s missing containers bucket in DB", pod.ID())
|
||||
}
|
||||
|
||||
// Don't bother with a namespace check on the container -
|
||||
|
@ -1170,15 +1171,15 @@ func (s *BoltState) PodHasContainer(pod *Pod, id string) (bool, error) {
|
|||
// PodContainersByID returns the IDs of all containers present in the given pod
|
||||
func (s *BoltState) PodContainersByID(pod *Pod) ([]string, error) {
|
||||
if !s.valid {
|
||||
return nil, ErrDBClosed
|
||||
return nil, define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !pod.valid {
|
||||
return nil, ErrPodRemoved
|
||||
return nil, define.ErrPodRemoved
|
||||
}
|
||||
|
||||
if s.namespace != "" && s.namespace != pod.config.Namespace {
|
||||
return nil, errors.Wrapf(ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
return nil, errors.Wrapf(define.ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
}
|
||||
|
||||
podID := []byte(pod.ID())
|
||||
|
@ -1201,13 +1202,13 @@ func (s *BoltState) PodContainersByID(pod *Pod) ([]string, error) {
|
|||
podDB := podBkt.Bucket(podID)
|
||||
if podDB == nil {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "pod %s not found in database", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "pod %s not found in database", pod.ID())
|
||||
}
|
||||
|
||||
// Get pod containers bucket
|
||||
podCtrs := podDB.Bucket(containersBkt)
|
||||
if podCtrs == nil {
|
||||
return errors.Wrapf(ErrInternal, "pod %s missing containers bucket in DB", pod.ID())
|
||||
return errors.Wrapf(define.ErrInternal, "pod %s missing containers bucket in DB", pod.ID())
|
||||
}
|
||||
|
||||
// Iterate through all containers in the pod
|
||||
|
@ -1232,15 +1233,15 @@ func (s *BoltState) PodContainersByID(pod *Pod) ([]string, error) {
|
|||
// PodContainers returns all the containers present in the given pod
|
||||
func (s *BoltState) PodContainers(pod *Pod) ([]*Container, error) {
|
||||
if !s.valid {
|
||||
return nil, ErrDBClosed
|
||||
return nil, define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !pod.valid {
|
||||
return nil, ErrPodRemoved
|
||||
return nil, define.ErrPodRemoved
|
||||
}
|
||||
|
||||
if s.namespace != "" && s.namespace != pod.config.Namespace {
|
||||
return nil, errors.Wrapf(ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
return nil, errors.Wrapf(define.ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
}
|
||||
|
||||
podID := []byte(pod.ID())
|
||||
|
@ -1268,13 +1269,13 @@ func (s *BoltState) PodContainers(pod *Pod) ([]*Container, error) {
|
|||
podDB := podBkt.Bucket(podID)
|
||||
if podDB == nil {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "pod %s not found in database", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "pod %s not found in database", pod.ID())
|
||||
}
|
||||
|
||||
// Get pod containers bucket
|
||||
podCtrs := podDB.Bucket(containersBkt)
|
||||
if podCtrs == nil {
|
||||
return errors.Wrapf(ErrInternal, "pod %s missing containers bucket in DB", pod.ID())
|
||||
return errors.Wrapf(define.ErrInternal, "pod %s missing containers bucket in DB", pod.ID())
|
||||
}
|
||||
|
||||
// Iterate through all containers in the pod
|
||||
|
@ -1303,11 +1304,11 @@ func (s *BoltState) PodContainers(pod *Pod) ([]*Container, error) {
|
|||
// the sub bucket holding the container dependencies that this volume has
|
||||
func (s *BoltState) AddVolume(volume *Volume) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !volume.valid {
|
||||
return ErrVolumeRemoved
|
||||
return define.ErrVolumeRemoved
|
||||
}
|
||||
|
||||
volName := []byte(volume.Name())
|
||||
|
@ -1337,7 +1338,7 @@ func (s *BoltState) AddVolume(volume *Volume) error {
|
|||
// Check if we already have a volume with the given name
|
||||
volExists := allVolsBkt.Get(volName)
|
||||
if volExists != nil {
|
||||
return errors.Wrapf(ErrVolumeExists, "name %s is in use", volume.Name())
|
||||
return errors.Wrapf(define.ErrVolumeExists, "name %s is in use", volume.Name())
|
||||
}
|
||||
|
||||
// We are good to add the volume
|
||||
|
@ -1369,7 +1370,7 @@ func (s *BoltState) AddVolume(volume *Volume) error {
|
|||
// RemoveVolume removes the given volume from the state
|
||||
func (s *BoltState) RemoveVolume(volume *Volume) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
volName := []byte(volume.Name())
|
||||
|
@ -1400,7 +1401,7 @@ func (s *BoltState) RemoveVolume(volume *Volume) error {
|
|||
volDB := volBkt.Bucket(volName)
|
||||
if volDB == nil {
|
||||
volume.valid = false
|
||||
return errors.Wrapf(ErrNoSuchVolume, "volume %s does not exist in DB", volume.Name())
|
||||
return errors.Wrapf(define.ErrNoSuchVolume, "volume %s does not exist in DB", volume.Name())
|
||||
}
|
||||
|
||||
// Check if volume is not being used by any container
|
||||
|
@ -1430,7 +1431,7 @@ func (s *BoltState) RemoveVolume(volume *Volume) error {
|
|||
return errors.Wrapf(err, "error getting list of dependencies from dependencies bucket for volumes %q", volume.Name())
|
||||
}
|
||||
if len(deps) > 0 {
|
||||
return errors.Wrapf(ErrVolumeBeingUsed, "volume %s is being used by container(s) %s", volume.Name(), strings.Join(deps, ","))
|
||||
return errors.Wrapf(define.ErrVolumeBeingUsed, "volume %s is being used by container(s) %s", volume.Name(), strings.Join(deps, ","))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1451,7 +1452,7 @@ func (s *BoltState) RemoveVolume(volume *Volume) error {
|
|||
// AllVolumes returns all volumes present in the state
|
||||
func (s *BoltState) AllVolumes() ([]*Volume, error) {
|
||||
if !s.valid {
|
||||
return nil, ErrDBClosed
|
||||
return nil, define.ErrDBClosed
|
||||
}
|
||||
|
||||
volumes := []*Volume{}
|
||||
|
@ -1477,14 +1478,14 @@ func (s *BoltState) AllVolumes() ([]*Volume, error) {
|
|||
// This check can be removed if performance becomes an
|
||||
// issue, but much less helpful errors will be produced
|
||||
if volExists == nil {
|
||||
return errors.Wrapf(ErrInternal, "inconsistency in state - volume %s is in all volumes bucket but volume not found", string(id))
|
||||
return errors.Wrapf(define.ErrInternal, "inconsistency in state - volume %s is in all volumes bucket but volume not found", string(id))
|
||||
}
|
||||
|
||||
volume := new(Volume)
|
||||
volume.config = new(VolumeConfig)
|
||||
|
||||
if err := s.getVolumeFromDB(id, volume, volBucket); err != nil {
|
||||
if errors.Cause(err) != ErrNSMismatch {
|
||||
if errors.Cause(err) != define.ErrNSMismatch {
|
||||
logrus.Errorf("Error retrieving volume %s from the database: %v", string(id), err)
|
||||
}
|
||||
} else {
|
||||
|
@ -1505,11 +1506,11 @@ func (s *BoltState) AllVolumes() ([]*Volume, error) {
|
|||
// Volume retrieves a volume from full name
|
||||
func (s *BoltState) Volume(name string) (*Volume, error) {
|
||||
if name == "" {
|
||||
return nil, ErrEmptyID
|
||||
return nil, define.ErrEmptyID
|
||||
}
|
||||
|
||||
if !s.valid {
|
||||
return nil, ErrDBClosed
|
||||
return nil, define.ErrDBClosed
|
||||
}
|
||||
|
||||
volName := []byte(name)
|
||||
|
@ -1541,11 +1542,11 @@ func (s *BoltState) Volume(name string) (*Volume, error) {
|
|||
// HasVolume returns true if the given volume exists in the state, otherwise it returns false
|
||||
func (s *BoltState) HasVolume(name string) (bool, error) {
|
||||
if name == "" {
|
||||
return false, ErrEmptyID
|
||||
return false, define.ErrEmptyID
|
||||
}
|
||||
|
||||
if !s.valid {
|
||||
return false, ErrDBClosed
|
||||
return false, define.ErrDBClosed
|
||||
}
|
||||
|
||||
volName := []byte(name)
|
||||
|
@ -1583,11 +1584,11 @@ func (s *BoltState) HasVolume(name string) (bool, error) {
|
|||
// volume. If the slice is empty, no containers use the given volume
|
||||
func (s *BoltState) VolumeInUse(volume *Volume) ([]string, error) {
|
||||
if !s.valid {
|
||||
return nil, ErrDBClosed
|
||||
return nil, define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !volume.valid {
|
||||
return nil, ErrVolumeRemoved
|
||||
return nil, define.ErrVolumeRemoved
|
||||
}
|
||||
|
||||
depCtrs := []string{}
|
||||
|
@ -1612,12 +1613,12 @@ func (s *BoltState) VolumeInUse(volume *Volume) ([]string, error) {
|
|||
volDB := volBucket.Bucket([]byte(volume.Name()))
|
||||
if volDB == nil {
|
||||
volume.valid = false
|
||||
return errors.Wrapf(ErrNoSuchVolume, "no volume with name %s found in DB", volume.Name())
|
||||
return errors.Wrapf(define.ErrNoSuchVolume, "no volume with name %s found in DB", volume.Name())
|
||||
}
|
||||
|
||||
dependsBkt := volDB.Bucket(volDependenciesBkt)
|
||||
if dependsBkt == nil {
|
||||
return errors.Wrapf(ErrInternal, "volume %s has no dependencies bucket", volume.Name())
|
||||
return errors.Wrapf(define.ErrInternal, "volume %s has no dependencies bucket", volume.Name())
|
||||
}
|
||||
|
||||
// Iterate through and add dependencies
|
||||
|
@ -1649,15 +1650,15 @@ func (s *BoltState) VolumeInUse(volume *Volume) ([]string, error) {
|
|||
// AddPod adds the given pod to the state.
|
||||
func (s *BoltState) AddPod(pod *Pod) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !pod.valid {
|
||||
return ErrPodRemoved
|
||||
return define.ErrPodRemoved
|
||||
}
|
||||
|
||||
if s.namespace != "" && s.namespace != pod.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
}
|
||||
|
||||
podID := []byte(pod.ID())
|
||||
|
@ -1713,11 +1714,11 @@ func (s *BoltState) AddPod(pod *Pod) error {
|
|||
// Check if we already have something with the given ID and name
|
||||
idExist := idsBkt.Get(podID)
|
||||
if idExist != nil {
|
||||
return errors.Wrapf(ErrPodExists, "ID %s is in use", pod.ID())
|
||||
return errors.Wrapf(define.ErrPodExists, "ID %s is in use", pod.ID())
|
||||
}
|
||||
nameExist := namesBkt.Get(podName)
|
||||
if nameExist != nil {
|
||||
return errors.Wrapf(ErrPodExists, "name %s is in use", pod.Name())
|
||||
return errors.Wrapf(define.ErrPodExists, "name %s is in use", pod.Name())
|
||||
}
|
||||
|
||||
// We are good to add the pod
|
||||
|
@ -1773,15 +1774,15 @@ func (s *BoltState) AddPod(pod *Pod) error {
|
|||
// Only empty pods can be removed
|
||||
func (s *BoltState) RemovePod(pod *Pod) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !pod.valid {
|
||||
return ErrPodRemoved
|
||||
return define.ErrPodRemoved
|
||||
}
|
||||
|
||||
if s.namespace != "" && s.namespace != pod.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
}
|
||||
|
||||
podID := []byte(pod.ID())
|
||||
|
@ -1823,7 +1824,7 @@ func (s *BoltState) RemovePod(pod *Pod) error {
|
|||
podDB := podBkt.Bucket(podID)
|
||||
if podDB == nil {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "pod %s does not exist in DB", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "pod %s does not exist in DB", pod.ID())
|
||||
}
|
||||
|
||||
// Check if pod is empty
|
||||
|
@ -1835,7 +1836,7 @@ func (s *BoltState) RemovePod(pod *Pod) error {
|
|||
if podCtrsBkt != nil {
|
||||
cursor := podCtrsBkt.Cursor()
|
||||
if id, _ := cursor.First(); id != nil {
|
||||
return errors.Wrapf(ErrCtrExists, "pod %s is not empty", pod.ID())
|
||||
return errors.Wrapf(define.ErrCtrExists, "pod %s is not empty", pod.ID())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1869,15 +1870,15 @@ func (s *BoltState) RemovePod(pod *Pod) error {
|
|||
// RemovePodContainers removes all containers in a pod
|
||||
func (s *BoltState) RemovePodContainers(pod *Pod) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !pod.valid {
|
||||
return ErrPodRemoved
|
||||
return define.ErrPodRemoved
|
||||
}
|
||||
|
||||
if s.namespace != "" && s.namespace != pod.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
}
|
||||
|
||||
podID := []byte(pod.ID())
|
||||
|
@ -1918,12 +1919,12 @@ func (s *BoltState) RemovePodContainers(pod *Pod) error {
|
|||
podDB := podBkt.Bucket(podID)
|
||||
if podDB == nil {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "pod %s does not exist in DB", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "pod %s does not exist in DB", pod.ID())
|
||||
}
|
||||
|
||||
podCtrsBkt := podDB.Bucket(containersBkt)
|
||||
if podCtrsBkt == nil {
|
||||
return errors.Wrapf(ErrInternal, "pod %s does not have a containers bucket", pod.ID())
|
||||
return errors.Wrapf(define.ErrInternal, "pod %s does not have a containers bucket", pod.ID())
|
||||
}
|
||||
|
||||
// Traverse all containers in the pod with a cursor
|
||||
|
@ -1934,7 +1935,7 @@ func (s *BoltState) RemovePodContainers(pod *Pod) error {
|
|||
if ctr == nil {
|
||||
// This should never happen
|
||||
// State is inconsistent
|
||||
return errors.Wrapf(ErrNoSuchCtr, "pod %s referenced nonexistant container %s", pod.ID(), string(id))
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "pod %s referenced nonexistant container %s", pod.ID(), string(id))
|
||||
}
|
||||
ctrDeps := ctr.Bucket(dependenciesBkt)
|
||||
// This should never be nil, but if it is, we're
|
||||
|
@ -1943,7 +1944,7 @@ func (s *BoltState) RemovePodContainers(pod *Pod) error {
|
|||
err = ctrDeps.ForEach(func(depID, name []byte) error {
|
||||
exists := podCtrsBkt.Get(depID)
|
||||
if exists == nil {
|
||||
return errors.Wrapf(ErrCtrExists, "container %s has dependency %s outside of pod %s", string(id), string(depID), pod.ID())
|
||||
return errors.Wrapf(define.ErrCtrExists, "container %s has dependency %s outside of pod %s", string(id), string(depID), pod.ID())
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
@ -1955,7 +1956,7 @@ func (s *BoltState) RemovePodContainers(pod *Pod) error {
|
|||
// Dependencies are set, we're clear to remove
|
||||
|
||||
if err := ctrBkt.DeleteBucket(id); err != nil {
|
||||
return errors.Wrapf(ErrInternal, "error deleting container %s from DB", string(id))
|
||||
return errors.Wrapf(define.ErrInternal, "error deleting container %s from DB", string(id))
|
||||
}
|
||||
|
||||
if err := idsBkt.Delete(id); err != nil {
|
||||
|
@ -1997,19 +1998,19 @@ func (s *BoltState) RemovePodContainers(pod *Pod) error {
|
|||
// The container will be added to the state and the pod
|
||||
func (s *BoltState) AddContainerToPod(pod *Pod, ctr *Container) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !pod.valid {
|
||||
return ErrPodRemoved
|
||||
return define.ErrPodRemoved
|
||||
}
|
||||
|
||||
if !ctr.valid {
|
||||
return ErrCtrRemoved
|
||||
return define.ErrCtrRemoved
|
||||
}
|
||||
|
||||
if ctr.config.Pod != pod.ID() {
|
||||
return errors.Wrapf(ErrNoSuchCtr, "container %s is not part of pod %s", ctr.ID(), pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "container %s is not part of pod %s", ctr.ID(), pod.ID())
|
||||
}
|
||||
|
||||
return s.addContainer(ctr, pod)
|
||||
|
@ -2019,28 +2020,28 @@ func (s *BoltState) AddContainerToPod(pod *Pod, ctr *Container) error {
|
|||
// The container will also be removed from the state
|
||||
func (s *BoltState) RemoveContainerFromPod(pod *Pod, ctr *Container) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !pod.valid {
|
||||
return ErrPodRemoved
|
||||
return define.ErrPodRemoved
|
||||
}
|
||||
|
||||
if s.namespace != "" {
|
||||
if s.namespace != pod.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
}
|
||||
if s.namespace != ctr.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "container %s in in namespace %q but we are in namespace %q", ctr.ID(), ctr.config.Namespace, s.namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "container %s in in namespace %q but we are in namespace %q", ctr.ID(), ctr.config.Namespace, s.namespace)
|
||||
}
|
||||
}
|
||||
|
||||
if ctr.config.Pod == "" {
|
||||
return errors.Wrapf(ErrNoSuchPod, "container %s is not part of a pod, use RemoveContainer instead", ctr.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "container %s is not part of a pod, use RemoveContainer instead", ctr.ID())
|
||||
}
|
||||
|
||||
if ctr.config.Pod != pod.ID() {
|
||||
return errors.Wrapf(ErrInvalidArg, "container %s is not part of pod %s", ctr.ID(), pod.ID())
|
||||
return errors.Wrapf(define.ErrInvalidArg, "container %s is not part of pod %s", ctr.ID(), pod.ID())
|
||||
}
|
||||
|
||||
db, err := s.getDBCon()
|
||||
|
@ -2058,15 +2059,15 @@ func (s *BoltState) RemoveContainerFromPod(pod *Pod, ctr *Container) error {
|
|||
// UpdatePod updates a pod's state from the database
|
||||
func (s *BoltState) UpdatePod(pod *Pod) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !pod.valid {
|
||||
return ErrPodRemoved
|
||||
return define.ErrPodRemoved
|
||||
}
|
||||
|
||||
if s.namespace != "" && s.namespace != pod.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
}
|
||||
|
||||
newState := new(podState)
|
||||
|
@ -2088,13 +2089,13 @@ func (s *BoltState) UpdatePod(pod *Pod) error {
|
|||
podDB := podBkt.Bucket(podID)
|
||||
if podDB == nil {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "no pod with ID %s found in database", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "no pod with ID %s found in database", pod.ID())
|
||||
}
|
||||
|
||||
// Get the pod state JSON
|
||||
podStateBytes := podDB.Get(stateKey)
|
||||
if podStateBytes == nil {
|
||||
return errors.Wrapf(ErrInternal, "pod %s is missing state key in DB", pod.ID())
|
||||
return errors.Wrapf(define.ErrInternal, "pod %s is missing state key in DB", pod.ID())
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(podStateBytes, newState); err != nil {
|
||||
|
@ -2115,15 +2116,15 @@ func (s *BoltState) UpdatePod(pod *Pod) error {
|
|||
// SavePod saves a pod's state to the database
|
||||
func (s *BoltState) SavePod(pod *Pod) error {
|
||||
if !s.valid {
|
||||
return ErrDBClosed
|
||||
return define.ErrDBClosed
|
||||
}
|
||||
|
||||
if !pod.valid {
|
||||
return ErrPodRemoved
|
||||
return define.ErrPodRemoved
|
||||
}
|
||||
|
||||
if s.namespace != "" && s.namespace != pod.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "pod %s is in namespace %q but we are in namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
}
|
||||
|
||||
stateJSON, err := json.Marshal(pod.state)
|
||||
|
@ -2148,7 +2149,7 @@ func (s *BoltState) SavePod(pod *Pod) error {
|
|||
podDB := podBkt.Bucket(podID)
|
||||
if podDB == nil {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "no pod with ID %s found in database", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "no pod with ID %s found in database", pod.ID())
|
||||
}
|
||||
|
||||
// Set the pod state JSON
|
||||
|
@ -2168,7 +2169,7 @@ func (s *BoltState) SavePod(pod *Pod) error {
|
|||
// AllPods returns all pods present in the state
|
||||
func (s *BoltState) AllPods() ([]*Pod, error) {
|
||||
if !s.valid {
|
||||
return nil, ErrDBClosed
|
||||
return nil, define.ErrDBClosed
|
||||
}
|
||||
|
||||
pods := []*Pod{}
|
||||
|
@ -2195,7 +2196,7 @@ func (s *BoltState) AllPods() ([]*Pod, error) {
|
|||
// This check can be removed if performance becomes an
|
||||
// issue, but much less helpful errors will be produced
|
||||
if podExists == nil {
|
||||
return errors.Wrapf(ErrInternal, "inconsistency in state - pod %s is in all pods bucket but pod not found", string(id))
|
||||
return errors.Wrapf(define.ErrInternal, "inconsistency in state - pod %s is in all pods bucket but pod not found", string(id))
|
||||
}
|
||||
|
||||
pod := new(Pod)
|
||||
|
@ -2203,7 +2204,7 @@ func (s *BoltState) AllPods() ([]*Pod, error) {
|
|||
pod.state = new(podState)
|
||||
|
||||
if err := s.getPodFromDB(id, pod, podBucket); err != nil {
|
||||
if errors.Cause(err) != ErrNSMismatch {
|
||||
if errors.Cause(err) != define.ErrNSMismatch {
|
||||
logrus.Errorf("Error retrieving pod %s from the database: %v", string(id), err)
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
"runtime"
|
||||
"strings"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/rootless"
|
||||
"github.com/containers/storage"
|
||||
bolt "github.com/etcd-io/bbolt"
|
||||
|
@ -222,7 +223,7 @@ func readOnlyValidateConfig(bucket *bolt.Bucket, toCheck dbConfigValidation) (bo
|
|||
return true, nil
|
||||
}
|
||||
|
||||
return true, errors.Wrapf(ErrDBBadConfig, "database %s %q does not match our %s %q",
|
||||
return true, errors.Wrapf(define.ErrDBBadConfig, "database %s %q does not match our %s %q",
|
||||
toCheck.name, dbValue, toCheck.name, toCheck.runtimeValue)
|
||||
}
|
||||
|
||||
|
@ -260,7 +261,7 @@ func (s *BoltState) closeDBCon(db *bolt.DB) error {
|
|||
func getIDBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
||||
bkt := tx.Bucket(idRegistryBkt)
|
||||
if bkt == nil {
|
||||
return nil, errors.Wrapf(ErrDBBadConfig, "id registry bucket not found in DB")
|
||||
return nil, errors.Wrapf(define.ErrDBBadConfig, "id registry bucket not found in DB")
|
||||
}
|
||||
return bkt, nil
|
||||
}
|
||||
|
@ -268,7 +269,7 @@ func getIDBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
|||
func getNamesBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
||||
bkt := tx.Bucket(nameRegistryBkt)
|
||||
if bkt == nil {
|
||||
return nil, errors.Wrapf(ErrDBBadConfig, "name registry bucket not found in DB")
|
||||
return nil, errors.Wrapf(define.ErrDBBadConfig, "name registry bucket not found in DB")
|
||||
}
|
||||
return bkt, nil
|
||||
}
|
||||
|
@ -276,7 +277,7 @@ func getNamesBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
|||
func getNSBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
||||
bkt := tx.Bucket(nsRegistryBkt)
|
||||
if bkt == nil {
|
||||
return nil, errors.Wrapf(ErrDBBadConfig, "namespace registry bucket not found in DB")
|
||||
return nil, errors.Wrapf(define.ErrDBBadConfig, "namespace registry bucket not found in DB")
|
||||
}
|
||||
return bkt, nil
|
||||
}
|
||||
|
@ -284,7 +285,7 @@ func getNSBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
|||
func getCtrBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
||||
bkt := tx.Bucket(ctrBkt)
|
||||
if bkt == nil {
|
||||
return nil, errors.Wrapf(ErrDBBadConfig, "containers bucket not found in DB")
|
||||
return nil, errors.Wrapf(define.ErrDBBadConfig, "containers bucket not found in DB")
|
||||
}
|
||||
return bkt, nil
|
||||
}
|
||||
|
@ -292,7 +293,7 @@ func getCtrBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
|||
func getAllCtrsBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
||||
bkt := tx.Bucket(allCtrsBkt)
|
||||
if bkt == nil {
|
||||
return nil, errors.Wrapf(ErrDBBadConfig, "all containers bucket not found in DB")
|
||||
return nil, errors.Wrapf(define.ErrDBBadConfig, "all containers bucket not found in DB")
|
||||
}
|
||||
return bkt, nil
|
||||
}
|
||||
|
@ -300,7 +301,7 @@ func getAllCtrsBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
|||
func getPodBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
||||
bkt := tx.Bucket(podBkt)
|
||||
if bkt == nil {
|
||||
return nil, errors.Wrapf(ErrDBBadConfig, "pods bucket not found in DB")
|
||||
return nil, errors.Wrapf(define.ErrDBBadConfig, "pods bucket not found in DB")
|
||||
}
|
||||
return bkt, nil
|
||||
}
|
||||
|
@ -308,7 +309,7 @@ func getPodBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
|||
func getAllPodsBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
||||
bkt := tx.Bucket(allPodsBkt)
|
||||
if bkt == nil {
|
||||
return nil, errors.Wrapf(ErrDBBadConfig, "all pods bucket not found in DB")
|
||||
return nil, errors.Wrapf(define.ErrDBBadConfig, "all pods bucket not found in DB")
|
||||
}
|
||||
return bkt, nil
|
||||
}
|
||||
|
@ -316,7 +317,7 @@ func getAllPodsBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
|||
func getVolBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
||||
bkt := tx.Bucket(volBkt)
|
||||
if bkt == nil {
|
||||
return nil, errors.Wrapf(ErrDBBadConfig, "volumes bucket not found in DB")
|
||||
return nil, errors.Wrapf(define.ErrDBBadConfig, "volumes bucket not found in DB")
|
||||
}
|
||||
return bkt, nil
|
||||
}
|
||||
|
@ -324,7 +325,7 @@ func getVolBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
|||
func getAllVolsBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
||||
bkt := tx.Bucket(allVolsBkt)
|
||||
if bkt == nil {
|
||||
return nil, errors.Wrapf(ErrDBBadConfig, "all volumes bucket not found in DB")
|
||||
return nil, errors.Wrapf(define.ErrDBBadConfig, "all volumes bucket not found in DB")
|
||||
}
|
||||
return bkt, nil
|
||||
}
|
||||
|
@ -332,7 +333,7 @@ func getAllVolsBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
|||
func getRuntimeConfigBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
|
||||
bkt := tx.Bucket(runtimeConfigBkt)
|
||||
if bkt == nil {
|
||||
return nil, errors.Wrapf(ErrDBBadConfig, "runtime configuration bucket not found in DB")
|
||||
return nil, errors.Wrapf(define.ErrDBBadConfig, "runtime configuration bucket not found in DB")
|
||||
}
|
||||
return bkt, nil
|
||||
}
|
||||
|
@ -341,19 +342,19 @@ func (s *BoltState) getContainerFromDB(id []byte, ctr *Container, ctrsBkt *bolt.
|
|||
valid := true
|
||||
ctrBkt := ctrsBkt.Bucket(id)
|
||||
if ctrBkt == nil {
|
||||
return errors.Wrapf(ErrNoSuchCtr, "container %s not found in DB", string(id))
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "container %s not found in DB", string(id))
|
||||
}
|
||||
|
||||
if s.namespaceBytes != nil {
|
||||
ctrNamespaceBytes := ctrBkt.Get(namespaceKey)
|
||||
if !bytes.Equal(s.namespaceBytes, ctrNamespaceBytes) {
|
||||
return errors.Wrapf(ErrNSMismatch, "cannot retrieve container %s as it is part of namespace %q and we are in namespace %q", string(id), string(ctrNamespaceBytes), s.namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "cannot retrieve container %s as it is part of namespace %q and we are in namespace %q", string(id), string(ctrNamespaceBytes), s.namespace)
|
||||
}
|
||||
}
|
||||
|
||||
configBytes := ctrBkt.Get(configKey)
|
||||
if configBytes == nil {
|
||||
return errors.Wrapf(ErrInternal, "container %s missing config key in DB", string(id))
|
||||
return errors.Wrapf(define.ErrInternal, "container %s missing config key in DB", string(id))
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(configBytes, ctr.config); err != nil {
|
||||
|
@ -379,7 +380,7 @@ func (s *BoltState) getContainerFromDB(id []byte, ctr *Container, ctrsBkt *bolt.
|
|||
|
||||
ociRuntime, ok := s.runtime.ociRuntimes[runtimeName]
|
||||
if !ok {
|
||||
return errors.Wrapf(ErrInternal, "container %s was created with OCI runtime %s, but that runtime is not available in the current configuration", ctr.ID(), ctr.config.OCIRuntime)
|
||||
return errors.Wrapf(define.ErrInternal, "container %s was created with OCI runtime %s, but that runtime is not available in the current configuration", ctr.ID(), ctr.config.OCIRuntime)
|
||||
}
|
||||
ctr.ociRuntime = ociRuntime
|
||||
}
|
||||
|
@ -393,19 +394,19 @@ func (s *BoltState) getContainerFromDB(id []byte, ctr *Container, ctrsBkt *bolt.
|
|||
func (s *BoltState) getPodFromDB(id []byte, pod *Pod, podBkt *bolt.Bucket) error {
|
||||
podDB := podBkt.Bucket(id)
|
||||
if podDB == nil {
|
||||
return errors.Wrapf(ErrNoSuchPod, "pod with ID %s not found", string(id))
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "pod with ID %s not found", string(id))
|
||||
}
|
||||
|
||||
if s.namespaceBytes != nil {
|
||||
podNamespaceBytes := podDB.Get(namespaceKey)
|
||||
if !bytes.Equal(s.namespaceBytes, podNamespaceBytes) {
|
||||
return errors.Wrapf(ErrNSMismatch, "cannot retrieve pod %s as it is part of namespace %q and we are in namespace %q", string(id), string(podNamespaceBytes), s.namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "cannot retrieve pod %s as it is part of namespace %q and we are in namespace %q", string(id), string(podNamespaceBytes), s.namespace)
|
||||
}
|
||||
}
|
||||
|
||||
podConfigBytes := podDB.Get(configKey)
|
||||
if podConfigBytes == nil {
|
||||
return errors.Wrapf(ErrInternal, "pod %s is missing configuration key in DB", string(id))
|
||||
return errors.Wrapf(define.ErrInternal, "pod %s is missing configuration key in DB", string(id))
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(podConfigBytes, pod.config); err != nil {
|
||||
|
@ -428,12 +429,12 @@ func (s *BoltState) getPodFromDB(id []byte, pod *Pod, podBkt *bolt.Bucket) error
|
|||
func (s *BoltState) getVolumeFromDB(name []byte, volume *Volume, volBkt *bolt.Bucket) error {
|
||||
volDB := volBkt.Bucket(name)
|
||||
if volDB == nil {
|
||||
return errors.Wrapf(ErrNoSuchVolume, "volume with name %s not found", string(name))
|
||||
return errors.Wrapf(define.ErrNoSuchVolume, "volume with name %s not found", string(name))
|
||||
}
|
||||
|
||||
volConfigBytes := volDB.Get(configKey)
|
||||
if volConfigBytes == nil {
|
||||
return errors.Wrapf(ErrInternal, "volume %s is missing configuration key in DB", string(name))
|
||||
return errors.Wrapf(define.ErrInternal, "volume %s is missing configuration key in DB", string(name))
|
||||
}
|
||||
|
||||
if err := json.Unmarshal(volConfigBytes, volume.config); err != nil {
|
||||
|
@ -450,7 +451,7 @@ func (s *BoltState) getVolumeFromDB(name []byte, volume *Volume, volBkt *bolt.Bu
|
|||
// If pod is not nil, the container is added to the pod as well
|
||||
func (s *BoltState) addContainer(ctr *Container, pod *Pod) error {
|
||||
if s.namespace != "" && s.namespace != ctr.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "cannot add container %s as it is in namespace %q and we are in namespace %q",
|
||||
return errors.Wrapf(define.ErrNSMismatch, "cannot add container %s as it is in namespace %q and we are in namespace %q",
|
||||
ctr.ID(), s.namespace, ctr.config.Namespace)
|
||||
}
|
||||
|
||||
|
@ -526,16 +527,16 @@ func (s *BoltState) addContainer(ctr *Container, pod *Pod) error {
|
|||
podDB = podBucket.Bucket(podID)
|
||||
if podDB == nil {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "pod %s does not exist in database", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "pod %s does not exist in database", pod.ID())
|
||||
}
|
||||
podCtrs = podDB.Bucket(containersBkt)
|
||||
if podCtrs == nil {
|
||||
return errors.Wrapf(ErrInternal, "pod %s does not have a containers bucket", pod.ID())
|
||||
return errors.Wrapf(define.ErrInternal, "pod %s does not have a containers bucket", pod.ID())
|
||||
}
|
||||
|
||||
podNS := podDB.Get(namespaceKey)
|
||||
if !bytes.Equal(podNS, ctrNamespace) {
|
||||
return errors.Wrapf(ErrNSMismatch, "container %s is in namespace %s and pod %s is in namespace %s",
|
||||
return errors.Wrapf(define.ErrNSMismatch, "container %s is in namespace %s and pod %s is in namespace %s",
|
||||
ctr.ID(), ctr.config.Namespace, pod.ID(), pod.config.Namespace)
|
||||
}
|
||||
}
|
||||
|
@ -543,11 +544,11 @@ func (s *BoltState) addContainer(ctr *Container, pod *Pod) error {
|
|||
// Check if we already have a container with the given ID and name
|
||||
idExist := idsBucket.Get(ctrID)
|
||||
if idExist != nil {
|
||||
return errors.Wrapf(ErrCtrExists, "ID %s is in use", ctr.ID())
|
||||
return errors.Wrapf(define.ErrCtrExists, "ID %s is in use", ctr.ID())
|
||||
}
|
||||
nameExist := namesBucket.Get(ctrName)
|
||||
if nameExist != nil {
|
||||
return errors.Wrapf(ErrCtrExists, "name %s is in use", ctr.Name())
|
||||
return errors.Wrapf(define.ErrCtrExists, "name %s is in use", ctr.Name())
|
||||
}
|
||||
|
||||
// No overlapping containers
|
||||
|
@ -603,34 +604,34 @@ func (s *BoltState) addContainer(ctr *Container, pod *Pod) error {
|
|||
|
||||
depCtrBkt := ctrBucket.Bucket(depCtrID)
|
||||
if depCtrBkt == nil {
|
||||
return errors.Wrapf(ErrNoSuchCtr, "container %s depends on container %s, but it does not exist in the DB", ctr.ID(), dependsCtr)
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "container %s depends on container %s, but it does not exist in the DB", ctr.ID(), dependsCtr)
|
||||
}
|
||||
|
||||
depCtrPod := depCtrBkt.Get(podIDKey)
|
||||
if pod != nil {
|
||||
// If we're part of a pod, make sure the dependency is part of the same pod
|
||||
if depCtrPod == nil {
|
||||
return errors.Wrapf(ErrInvalidArg, "container %s depends on container %s which is not in pod %s", ctr.ID(), dependsCtr, pod.ID())
|
||||
return errors.Wrapf(define.ErrInvalidArg, "container %s depends on container %s which is not in pod %s", ctr.ID(), dependsCtr, pod.ID())
|
||||
}
|
||||
|
||||
if string(depCtrPod) != pod.ID() {
|
||||
return errors.Wrapf(ErrInvalidArg, "container %s depends on container %s which is in a different pod (%s)", ctr.ID(), dependsCtr, string(depCtrPod))
|
||||
return errors.Wrapf(define.ErrInvalidArg, "container %s depends on container %s which is in a different pod (%s)", ctr.ID(), dependsCtr, string(depCtrPod))
|
||||
}
|
||||
} else {
|
||||
// If we're not part of a pod, we cannot depend on containers in a pod
|
||||
if depCtrPod != nil {
|
||||
return errors.Wrapf(ErrInvalidArg, "container %s depends on container %s which is in a pod - containers not in pods cannot depend on containers in pods", ctr.ID(), dependsCtr)
|
||||
return errors.Wrapf(define.ErrInvalidArg, "container %s depends on container %s which is in a pod - containers not in pods cannot depend on containers in pods", ctr.ID(), dependsCtr)
|
||||
}
|
||||
}
|
||||
|
||||
depNamespace := depCtrBkt.Get(namespaceKey)
|
||||
if !bytes.Equal(ctrNamespace, depNamespace) {
|
||||
return errors.Wrapf(ErrNSMismatch, "container %s in namespace %q depends on container %s in namespace %q - namespaces must match", ctr.ID(), ctr.config.Namespace, dependsCtr, string(depNamespace))
|
||||
return errors.Wrapf(define.ErrNSMismatch, "container %s in namespace %q depends on container %s in namespace %q - namespaces must match", ctr.ID(), ctr.config.Namespace, dependsCtr, string(depNamespace))
|
||||
}
|
||||
|
||||
depCtrDependsBkt := depCtrBkt.Bucket(dependenciesBkt)
|
||||
if depCtrDependsBkt == nil {
|
||||
return errors.Wrapf(ErrInternal, "container %s does not have a dependencies bucket", dependsCtr)
|
||||
return errors.Wrapf(define.ErrInternal, "container %s does not have a dependencies bucket", dependsCtr)
|
||||
}
|
||||
if err := depCtrDependsBkt.Put(ctrID, ctrName); err != nil {
|
||||
return errors.Wrapf(err, "error adding ctr %s as dependency of container %s", ctr.ID(), dependsCtr)
|
||||
|
@ -648,7 +649,7 @@ func (s *BoltState) addContainer(ctr *Container, pod *Pod) error {
|
|||
for _, vol := range ctr.config.NamedVolumes {
|
||||
volDB := volBkt.Bucket([]byte(vol.Name))
|
||||
if volDB == nil {
|
||||
return errors.Wrapf(ErrNoSuchVolume, "no volume with name %s found in database when adding container %s", vol.Name, ctr.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchVolume, "no volume with name %s found in database when adding container %s", vol.Name, ctr.ID())
|
||||
}
|
||||
|
||||
ctrDepsBkt := volDB.Bucket(volDependenciesBkt)
|
||||
|
@ -714,7 +715,7 @@ func (s *BoltState) removeContainer(ctr *Container, pod *Pod, tx *bolt.Tx) error
|
|||
podDB = podBucket.Bucket(podID)
|
||||
if podDB == nil {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "no pod with ID %s found in DB", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "no pod with ID %s found in DB", pod.ID())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -722,17 +723,17 @@ func (s *BoltState) removeContainer(ctr *Container, pod *Pod, tx *bolt.Tx) error
|
|||
ctrExists := ctrBucket.Bucket(ctrID)
|
||||
if ctrExists == nil {
|
||||
ctr.valid = false
|
||||
return errors.Wrapf(ErrNoSuchCtr, "no container with ID %s found in DB", ctr.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "no container with ID %s found in DB", ctr.ID())
|
||||
}
|
||||
|
||||
// Compare namespace
|
||||
// We can't remove containers not in our namespace
|
||||
if s.namespace != "" {
|
||||
if s.namespace != ctr.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "container %s is in namespace %q, does not match our namespace %q", ctr.ID(), ctr.config.Namespace, s.namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "container %s is in namespace %q, does not match our namespace %q", ctr.ID(), ctr.config.Namespace, s.namespace)
|
||||
}
|
||||
if pod != nil && s.namespace != pod.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "pod %s is in namespace %q, does not match out namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "pod %s is in namespace %q, does not match out namespace %q", pod.ID(), pod.config.Namespace, s.namespace)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -745,7 +746,7 @@ func (s *BoltState) removeContainer(ctr *Container, pod *Pod, tx *bolt.Tx) error
|
|||
} else {
|
||||
ctrInPod := podCtrs.Get(ctrID)
|
||||
if ctrInPod == nil {
|
||||
return errors.Wrapf(ErrNoSuchCtr, "container %s is not in pod %s", ctr.ID(), pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "container %s is not in pod %s", ctr.ID(), pod.ID())
|
||||
}
|
||||
if err := podCtrs.Delete(ctrID); err != nil {
|
||||
return errors.Wrapf(err, "error removing container %s from pod %s", ctr.ID(), pod.ID())
|
||||
|
@ -756,7 +757,7 @@ func (s *BoltState) removeContainer(ctr *Container, pod *Pod, tx *bolt.Tx) error
|
|||
// Does the container have dependencies?
|
||||
ctrDepsBkt := ctrExists.Bucket(dependenciesBkt)
|
||||
if ctrDepsBkt == nil {
|
||||
return errors.Wrapf(ErrInternal, "container %s does not have a dependencies bucket", ctr.ID())
|
||||
return errors.Wrapf(define.ErrInternal, "container %s does not have a dependencies bucket", ctr.ID())
|
||||
}
|
||||
deps := []string{}
|
||||
err = ctrDepsBkt.ForEach(func(id, value []byte) error {
|
||||
|
@ -768,11 +769,11 @@ func (s *BoltState) removeContainer(ctr *Container, pod *Pod, tx *bolt.Tx) error
|
|||
return err
|
||||
}
|
||||
if len(deps) != 0 {
|
||||
return errors.Wrapf(ErrCtrExists, "container %s is a dependency of the following containers: %s", ctr.ID(), strings.Join(deps, ", "))
|
||||
return errors.Wrapf(define.ErrCtrExists, "container %s is a dependency of the following containers: %s", ctr.ID(), strings.Join(deps, ", "))
|
||||
}
|
||||
|
||||
if err := ctrBucket.DeleteBucket(ctrID); err != nil {
|
||||
return errors.Wrapf(ErrInternal, "error deleting container %s from DB", ctr.ID())
|
||||
return errors.Wrapf(define.ErrInternal, "error deleting container %s from DB", ctr.ID())
|
||||
}
|
||||
|
||||
if err := idsBucket.Delete(ctrID); err != nil {
|
||||
|
|
|
@ -11,6 +11,7 @@ import (
|
|||
"github.com/containernetworking/cni/pkg/types"
|
||||
cnitypes "github.com/containernetworking/cni/pkg/types/current"
|
||||
"github.com/containers/image/manifest"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/lock"
|
||||
"github.com/containers/libpod/pkg/namespaces"
|
||||
"github.com/containers/storage"
|
||||
|
@ -463,7 +464,7 @@ func StringToContainerStatus(status string) (ContainerStatus, error) {
|
|||
case ContainerStateExited.String():
|
||||
return ContainerStateExited, nil
|
||||
default:
|
||||
return ContainerStateUnknown, errors.Wrapf(ErrInvalidArg, "unknown container state: %s", status)
|
||||
return ContainerStateUnknown, errors.Wrapf(define.ErrInvalidArg, "unknown container state: %s", status)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -962,7 +963,7 @@ func (c *Container) ExecSession(id string) (*ExecSession, error) {
|
|||
|
||||
session, ok := c.state.ExecSessions[id]
|
||||
if !ok {
|
||||
return nil, errors.Wrapf(ErrNoSuchCtr, "no exec session with ID %s found in container %s", id, c.ID())
|
||||
return nil, errors.Wrapf(define.ErrNoSuchCtr, "no exec session with ID %s found in container %s", id, c.ID())
|
||||
}
|
||||
|
||||
returnSession := new(ExecSession)
|
||||
|
@ -987,7 +988,7 @@ func (c *Container) IPs() ([]net.IPNet, error) {
|
|||
}
|
||||
|
||||
if !c.config.CreateNetNS {
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "container %s network namespace is not managed by libpod", c.ID())
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "container %s network namespace is not managed by libpod", c.ID())
|
||||
}
|
||||
|
||||
ips := make([]net.IPNet, 0)
|
||||
|
@ -1015,7 +1016,7 @@ func (c *Container) Routes() ([]types.Route, error) {
|
|||
}
|
||||
|
||||
if !c.config.CreateNetNS {
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "container %s network namespace is not managed by libpod", c.ID())
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "container %s network namespace is not managed by libpod", c.ID())
|
||||
}
|
||||
|
||||
routes := make([]types.Route, 0)
|
||||
|
@ -1092,11 +1093,11 @@ func (c *Container) NamespacePath(ns LinuxNS) (string, error) {
|
|||
}
|
||||
|
||||
if c.state.State != ContainerStateRunning && c.state.State != ContainerStatePaused {
|
||||
return "", errors.Wrapf(ErrCtrStopped, "cannot get namespace path unless container %s is running", c.ID())
|
||||
return "", errors.Wrapf(define.ErrCtrStopped, "cannot get namespace path unless container %s is running", c.ID())
|
||||
}
|
||||
|
||||
if ns == InvalidNS {
|
||||
return "", errors.Wrapf(ErrInvalidArg, "invalid namespace requested from container %s", c.ID())
|
||||
return "", errors.Wrapf(define.ErrInvalidArg, "invalid namespace requested from container %s", c.ID())
|
||||
}
|
||||
|
||||
return fmt.Sprintf("/proc/%d/ns/%s", c.state.PID, ns.String()), nil
|
||||
|
@ -1110,7 +1111,7 @@ func (c *Container) CGroupPath() (string, error) {
|
|||
case SystemdCgroupsManager:
|
||||
return filepath.Join(c.config.CgroupParent, createUnitName("libpod", c.ID())), nil
|
||||
default:
|
||||
return "", errors.Wrapf(ErrInvalidArg, "unsupported CGroup manager %s in use", c.runtime.config.CgroupManager)
|
||||
return "", errors.Wrapf(define.ErrInvalidArg, "unsupported CGroup manager %s in use", c.runtime.config.CgroupManager)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ import (
|
|||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/events"
|
||||
"github.com/containers/libpod/pkg/lookup"
|
||||
"github.com/containers/storage/pkg/stringid"
|
||||
|
@ -39,7 +40,7 @@ func (c *Container) Init(ctx context.Context) (err error) {
|
|||
if !(c.state.State == ContainerStateConfigured ||
|
||||
c.state.State == ContainerStateStopped ||
|
||||
c.state.State == ContainerStateExited) {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "container %s has already been created in runtime", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "container %s has already been created in runtime", c.ID())
|
||||
}
|
||||
|
||||
// don't recursively start
|
||||
|
@ -180,12 +181,12 @@ func (c *Container) StopWithTimeout(timeout uint) error {
|
|||
if c.state.State == ContainerStateConfigured ||
|
||||
c.state.State == ContainerStateUnknown ||
|
||||
c.state.State == ContainerStatePaused {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "can only stop created, running, or stopped containers. %s is in state %s", c.ID(), c.state.State.String())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "can only stop created, running, or stopped containers. %s is in state %s", c.ID(), c.state.State.String())
|
||||
}
|
||||
|
||||
if c.state.State == ContainerStateStopped ||
|
||||
c.state.State == ContainerStateExited {
|
||||
return ErrCtrStopped
|
||||
return define.ErrCtrStopped
|
||||
}
|
||||
defer c.newContainerEvent(events.Stop)
|
||||
return c.stop(timeout)
|
||||
|
@ -203,7 +204,7 @@ func (c *Container) Kill(signal uint) error {
|
|||
}
|
||||
|
||||
if c.state.State != ContainerStateRunning {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "can only kill running containers. %s is in state %s", c.ID(), c.state.State.String())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "can only kill running containers. %s is in state %s", c.ID(), c.state.State.String())
|
||||
}
|
||||
|
||||
defer c.newContainerEvent(events.Kill)
|
||||
|
@ -241,7 +242,7 @@ func (c *Container) Exec(tty, privileged bool, env, cmd []string, user, workDir
|
|||
|
||||
// TODO can probably relax this once we track exec sessions
|
||||
if conState != ContainerStateRunning {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "cannot exec into container that is not running")
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "cannot exec into container that is not running")
|
||||
}
|
||||
if privileged || c.config.Privileged {
|
||||
capList = caps.GetAllCapabilities()
|
||||
|
@ -401,7 +402,7 @@ func (c *Container) Attach(streams *AttachStreams, keys string, resize <-chan re
|
|||
if c.state.State != ContainerStateCreated &&
|
||||
c.state.State != ContainerStateRunning &&
|
||||
c.state.State != ContainerStateExited {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "can only attach to created or running containers")
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "can only attach to created or running containers")
|
||||
}
|
||||
defer c.newContainerEvent(events.Attach)
|
||||
return c.attach(streams, keys, resize, false, nil)
|
||||
|
@ -440,12 +441,12 @@ func (c *Container) Unmount(force bool) error {
|
|||
}
|
||||
if mounted == 1 {
|
||||
if c.state.State == ContainerStateRunning || c.state.State == ContainerStatePaused {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "cannot unmount storage for container %s as it is running or paused", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "cannot unmount storage for container %s as it is running or paused", c.ID())
|
||||
}
|
||||
if len(c.state.ExecSessions) != 0 {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "container %s has active exec sessions, refusing to unmount", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "container %s has active exec sessions, refusing to unmount", c.ID())
|
||||
}
|
||||
return errors.Wrapf(ErrInternal, "can't unmount %s last mount, it is still in use", c.ID())
|
||||
return errors.Wrapf(define.ErrInternal, "can't unmount %s last mount, it is still in use", c.ID())
|
||||
}
|
||||
}
|
||||
defer c.newContainerEvent(events.Unmount)
|
||||
|
@ -464,10 +465,10 @@ func (c *Container) Pause() error {
|
|||
}
|
||||
|
||||
if c.state.State == ContainerStatePaused {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "%q is already paused", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "%q is already paused", c.ID())
|
||||
}
|
||||
if c.state.State != ContainerStateRunning {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "%q is not running, can't pause", c.state.State)
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "%q is not running, can't pause", c.state.State)
|
||||
}
|
||||
defer c.newContainerEvent(events.Pause)
|
||||
return c.pause()
|
||||
|
@ -485,7 +486,7 @@ func (c *Container) Unpause() error {
|
|||
}
|
||||
|
||||
if c.state.State != ContainerStatePaused {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "%q is not paused, can't unpause", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "%q is not paused, can't unpause", c.ID())
|
||||
}
|
||||
defer c.newContainerEvent(events.Unpause)
|
||||
return c.unpause()
|
||||
|
@ -509,7 +510,7 @@ func (c *Container) Export(path string) error {
|
|||
// AddArtifact creates and writes to an artifact file for the container
|
||||
func (c *Container) AddArtifact(name string, data []byte) error {
|
||||
if !c.valid {
|
||||
return ErrCtrRemoved
|
||||
return define.ErrCtrRemoved
|
||||
}
|
||||
|
||||
return ioutil.WriteFile(c.getArtifactPath(name), data, 0740)
|
||||
|
@ -518,7 +519,7 @@ func (c *Container) AddArtifact(name string, data []byte) error {
|
|||
// GetArtifact reads the specified artifact file from the container
|
||||
func (c *Container) GetArtifact(name string) ([]byte, error) {
|
||||
if !c.valid {
|
||||
return nil, ErrCtrRemoved
|
||||
return nil, define.ErrCtrRemoved
|
||||
}
|
||||
|
||||
return ioutil.ReadFile(c.getArtifactPath(name))
|
||||
|
@ -527,7 +528,7 @@ func (c *Container) GetArtifact(name string) ([]byte, error) {
|
|||
// RemoveArtifact deletes the specified artifacts file
|
||||
func (c *Container) RemoveArtifact(name string) error {
|
||||
if !c.valid {
|
||||
return ErrCtrRemoved
|
||||
return define.ErrCtrRemoved
|
||||
}
|
||||
|
||||
return os.Remove(c.getArtifactPath(name))
|
||||
|
@ -542,7 +543,7 @@ func (c *Container) Wait() (int32, error) {
|
|||
// code. The argument is the interval at which checks the container's status.
|
||||
func (c *Container) WaitWithInterval(waitTimeout time.Duration) (int32, error) {
|
||||
if !c.valid {
|
||||
return -1, ErrCtrRemoved
|
||||
return -1, define.ErrCtrRemoved
|
||||
}
|
||||
err := wait.PollImmediateInfinite(waitTimeout,
|
||||
func() (bool, error) {
|
||||
|
@ -578,7 +579,7 @@ func (c *Container) Cleanup(ctx context.Context) error {
|
|||
|
||||
// Check if state is good
|
||||
if c.state.State == ContainerStateRunning || c.state.State == ContainerStatePaused {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "container %s is running or paused, refusing to clean up", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "container %s is running or paused, refusing to clean up", c.ID())
|
||||
}
|
||||
|
||||
// Handle restart policy.
|
||||
|
@ -596,7 +597,7 @@ func (c *Container) Cleanup(ctx context.Context) error {
|
|||
|
||||
// Check if we have active exec sessions
|
||||
if len(c.state.ExecSessions) != 0 {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "container %s has active exec sessions, refusing to clean up", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "container %s has active exec sessions, refusing to clean up", c.ID())
|
||||
}
|
||||
defer c.newContainerEvent(events.Cleanup)
|
||||
return c.cleanup(ctx)
|
||||
|
|
|
@ -10,6 +10,7 @@ import (
|
|||
"path/filepath"
|
||||
"sync"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/kubeutils"
|
||||
"github.com/containers/libpod/utils"
|
||||
"github.com/docker/docker/pkg/term"
|
||||
|
@ -34,7 +35,7 @@ const (
|
|||
// Does not check if state is appropriate
|
||||
func (c *Container) attach(streams *AttachStreams, keys string, resize <-chan remotecommand.TerminalSize, startContainer bool, wg *sync.WaitGroup) error {
|
||||
if !streams.AttachOutput && !streams.AttachError && !streams.AttachInput {
|
||||
return errors.Wrapf(ErrInvalidArg, "must provide at least one stream to attach to")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "must provide at least one stream to attach to")
|
||||
}
|
||||
|
||||
// Check the validity of the provided keys first
|
||||
|
@ -57,7 +58,7 @@ func (c *Container) attach(streams *AttachStreams, keys string, resize <-chan re
|
|||
// TODO add a channel to allow interrupting
|
||||
func (c *Container) attachContainerSocket(resize <-chan remotecommand.TerminalSize, detachKeys []byte, streams *AttachStreams, startContainer bool, wg *sync.WaitGroup) error {
|
||||
if startContainer && wg == nil {
|
||||
return errors.Wrapf(ErrInternal, "wait group not passed when startContainer set")
|
||||
return errors.Wrapf(define.ErrInternal, "wait group not passed when startContainer set")
|
||||
}
|
||||
|
||||
kubeutils.HandleResizing(resize, func(size remotecommand.TerminalSize) {
|
||||
|
@ -118,7 +119,7 @@ func (c *Container) attachContainerSocket(resize <-chan remotecommand.TerminalSi
|
|||
case err := <-receiveStdoutError:
|
||||
return err
|
||||
case err := <-stdinDone:
|
||||
if err == ErrDetach {
|
||||
if err == define.ErrDetach {
|
||||
return err
|
||||
}
|
||||
if streams.AttachOutput || streams.AttachError {
|
||||
|
|
|
@ -5,9 +5,10 @@ package libpod
|
|||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"k8s.io/client-go/tools/remotecommand"
|
||||
)
|
||||
|
||||
func (c *Container) attach(streams *AttachStreams, keys string, resize <-chan remotecommand.TerminalSize, startContainer bool, wg *sync.WaitGroup) error {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
|
|
@ -28,9 +28,6 @@ type ContainerCommitOptions struct {
|
|||
Changes []string
|
||||
}
|
||||
|
||||
// ChangeCmds is the list of valid Changes commands to passed to the Commit call
|
||||
var ChangeCmds = []string{"CMD", "ENTRYPOINT", "ENV", "EXPOSE", "LABEL", "ONBUILD", "STOPSIGNAL", "USER", "VOLUME", "WORKDIR"}
|
||||
|
||||
// Commit commits the changes between a container and its image, creating a new
|
||||
// image
|
||||
func (c *Container) Commit(ctx context.Context, destImage string, options ContainerCommitOptions) (*image.Image, error) {
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
@ -43,7 +44,7 @@ func buildContainerGraph(ctrs []*Container) (*containerGraph, error) {
|
|||
// Get the dep's node
|
||||
depNode, ok := graph.nodes[dep]
|
||||
if !ok {
|
||||
return nil, errors.Wrapf(ErrNoSuchCtr, "container %s depends on container %s not found in input list", node.id, dep)
|
||||
return nil, errors.Wrapf(define.ErrNoSuchCtr, "container %s depends on container %s not found in input list", node.id, dep)
|
||||
}
|
||||
|
||||
// Add the dependent node to the node's dependencies
|
||||
|
@ -68,7 +69,7 @@ func buildContainerGraph(ctrs []*Container) (*containerGraph, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
} else if cycle {
|
||||
return nil, errors.Wrapf(ErrInternal, "cycle found in container dependency graph")
|
||||
return nil, errors.Wrapf(define.ErrInternal, "cycle found in container dependency graph")
|
||||
}
|
||||
|
||||
return graph, nil
|
||||
|
@ -133,7 +134,7 @@ func detectCycles(graph *containerGraph) (bool, error) {
|
|||
if info.lowLink == info.index {
|
||||
l := len(stack)
|
||||
if l == 0 {
|
||||
return false, errors.Wrapf(ErrInternal, "empty stack in detectCycles")
|
||||
return false, errors.Wrapf(define.ErrInternal, "empty stack in detectCycles")
|
||||
}
|
||||
|
||||
// Pop off the stack
|
||||
|
@ -143,7 +144,7 @@ func detectCycles(graph *containerGraph) (bool, error) {
|
|||
// Popped item is no longer on the stack, mark as such
|
||||
topInfo, ok := nodes[topOfStack.id]
|
||||
if !ok {
|
||||
return false, errors.Wrapf(ErrInternal, "error finding node info for %s", topOfStack.id)
|
||||
return false, errors.Wrapf(define.ErrInternal, "error finding node info for %s", topOfStack.id)
|
||||
}
|
||||
topInfo.onStack = false
|
||||
|
||||
|
@ -186,7 +187,7 @@ func startNode(ctx context.Context, node *containerNode, setError bool, ctrError
|
|||
if setError {
|
||||
// Mark us as visited, and set an error
|
||||
ctrsVisited[node.id] = true
|
||||
ctrErrors[node.id] = errors.Wrapf(ErrCtrStateInvalid, "a dependency of container %s failed to start", node.id)
|
||||
ctrErrors[node.id] = errors.Wrapf(define.ErrCtrStateInvalid, "a dependency of container %s failed to start", node.id)
|
||||
|
||||
// Hit anyone who depends on us, and set errors on them too
|
||||
for _, successor := range node.dependedOn {
|
||||
|
@ -226,7 +227,7 @@ func startNode(ctx context.Context, node *containerNode, setError bool, ctrError
|
|||
} else if len(depsStopped) > 0 {
|
||||
// Our dependencies are not running
|
||||
depsList := strings.Join(depsStopped, ",")
|
||||
ctrErrors[node.id] = errors.Wrapf(ErrCtrStateInvalid, "the following dependencies of container %s are not running: %s", node.id, depsList)
|
||||
ctrErrors[node.id] = errors.Wrapf(define.ErrCtrStateInvalid, "the following dependencies of container %s are not running: %s", node.id, depsList)
|
||||
ctrErrored = true
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/events"
|
||||
"github.com/containers/libpod/pkg/ctime"
|
||||
"github.com/containers/libpod/pkg/hooks"
|
||||
|
@ -23,7 +24,7 @@ import (
|
|||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/runtime-tools/generate"
|
||||
"github.com/opencontainers/selinux/go-selinux/label"
|
||||
opentracing "github.com/opentracing/opentracing-go"
|
||||
"github.com/opentracing/opentracing-go"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
@ -243,7 +244,7 @@ func (c *Container) handleRestartPolicy(ctx context.Context) (restarted bool, er
|
|||
if c.state.State == ContainerStateRunning || c.state.State == ContainerStatePaused {
|
||||
return false, nil
|
||||
} else if c.state.State == ContainerStateUnknown {
|
||||
return false, errors.Wrapf(ErrInternal, "invalid container state encountered in restart attempt!")
|
||||
return false, errors.Wrapf(define.ErrInternal, "invalid container state encountered in restart attempt!")
|
||||
}
|
||||
|
||||
c.newContainerEvent(events.Restart)
|
||||
|
@ -319,7 +320,7 @@ func (c *Container) syncContainer() error {
|
|||
}
|
||||
|
||||
if !c.valid {
|
||||
return errors.Wrapf(ErrCtrRemoved, "container %s is not valid", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrRemoved, "container %s is not valid", c.ID())
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -332,16 +333,16 @@ func (c *Container) setupStorage(ctx context.Context) error {
|
|||
defer span.Finish()
|
||||
|
||||
if !c.valid {
|
||||
return errors.Wrapf(ErrCtrRemoved, "container %s is not valid", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrRemoved, "container %s is not valid", c.ID())
|
||||
}
|
||||
|
||||
if c.state.State != ContainerStateConfigured {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "container %s must be in Configured state to have storage set up", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "container %s must be in Configured state to have storage set up", c.ID())
|
||||
}
|
||||
|
||||
// Need both an image ID and image name, plus a bool telling us whether to use the image configuration
|
||||
if c.config.Rootfs == "" && (c.config.RootfsImageID == "" || c.config.RootfsImageName == "") {
|
||||
return errors.Wrapf(ErrInvalidArg, "must provide image ID and image name to use an image")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "must provide image ID and image name to use an image")
|
||||
}
|
||||
|
||||
options := storage.ContainerOptions{
|
||||
|
@ -418,7 +419,7 @@ func (c *Container) setupStorage(ctx context.Context) error {
|
|||
// Tear down a container's storage prior to removal
|
||||
func (c *Container) teardownStorage() error {
|
||||
if c.state.State == ContainerStateRunning || c.state.State == ContainerStatePaused {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "cannot remove storage for container %s as it is running or paused", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "cannot remove storage for container %s as it is running or paused", c.ID())
|
||||
}
|
||||
|
||||
artifacts := filepath.Join(c.config.StaticDir, artifactsDir)
|
||||
|
@ -478,7 +479,7 @@ func (c *Container) refresh() error {
|
|||
}
|
||||
|
||||
if !c.valid {
|
||||
return errors.Wrapf(ErrCtrRemoved, "container %s is not valid - may have been removed", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrRemoved, "container %s is not valid - may have been removed", c.ID())
|
||||
}
|
||||
|
||||
// We need to get the container's temporary directory from c/storage
|
||||
|
@ -628,7 +629,7 @@ func (c *Container) prepareToStart(ctx context.Context, recursive bool) (err err
|
|||
c.state.State == ContainerStateCreated ||
|
||||
c.state.State == ContainerStateStopped ||
|
||||
c.state.State == ContainerStateExited) {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "container %s must be in Created or Stopped state to be started", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "container %s must be in Created or Stopped state to be started", c.ID())
|
||||
}
|
||||
|
||||
if !recursive {
|
||||
|
@ -676,7 +677,7 @@ func (c *Container) checkDependenciesAndHandleError(ctx context.Context) error {
|
|||
}
|
||||
if len(notRunning) > 0 {
|
||||
depString := strings.Join(notRunning, ",")
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "some dependencies of container %s are not started: %s", c.ID(), depString)
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "some dependencies of container %s are not started: %s", c.ID(), depString)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -714,7 +715,7 @@ func (c *Container) startDependencies(ctx context.Context) error {
|
|||
if len(graph.nodes) == 0 {
|
||||
return nil
|
||||
}
|
||||
return errors.Wrapf(ErrNoSuchCtr, "All dependencies have dependencies of %s", c.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "All dependencies have dependencies of %s", c.ID())
|
||||
}
|
||||
|
||||
ctrErrors := make(map[string]error)
|
||||
|
@ -730,7 +731,7 @@ func (c *Container) startDependencies(ctx context.Context) error {
|
|||
for _, e := range ctrErrors {
|
||||
logrus.Errorf("%q", e)
|
||||
}
|
||||
return errors.Wrapf(ErrInternal, "error starting some containers")
|
||||
return errors.Wrapf(define.ErrInternal, "error starting some containers")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -816,7 +817,7 @@ func (c *Container) checkDependenciesRunningLocked(depCtrs map[string]*Container
|
|||
for _, dep := range deps {
|
||||
depCtr, ok := depCtrs[dep]
|
||||
if !ok {
|
||||
return nil, errors.Wrapf(ErrNoSuchCtr, "container %s depends on container %s but it is not on containers passed to checkDependenciesRunning", c.ID(), dep)
|
||||
return nil, errors.Wrapf(define.ErrNoSuchCtr, "container %s depends on container %s but it is not on containers passed to checkDependenciesRunning", c.ID(), dep)
|
||||
}
|
||||
|
||||
if err := c.syncContainer(); err != nil {
|
||||
|
@ -964,7 +965,7 @@ func (c *Container) reinit(ctx context.Context, retainRetries bool) error {
|
|||
func (c *Container) initAndStart(ctx context.Context) (err error) {
|
||||
// If we are ContainerStateUnknown, throw an error
|
||||
if c.state.State == ContainerStateUnknown {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "container %s is in an unknown state", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "container %s is in an unknown state", c.ID())
|
||||
}
|
||||
|
||||
// If we are running, do nothing
|
||||
|
@ -973,7 +974,7 @@ func (c *Container) initAndStart(ctx context.Context) (err error) {
|
|||
}
|
||||
// If we are paused, throw an error
|
||||
if c.state.State == ContainerStatePaused {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "cannot start paused container %s", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "cannot start paused container %s", c.ID())
|
||||
}
|
||||
|
||||
defer func() {
|
||||
|
@ -1080,7 +1081,7 @@ func (c *Container) unpause() error {
|
|||
// Internal, non-locking function to restart a container
|
||||
func (c *Container) restartWithTimeout(ctx context.Context, timeout uint) (err error) {
|
||||
if c.state.State == ContainerStateUnknown || c.state.State == ContainerStatePaused {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "unable to restart a container in a paused or unknown state")
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "unable to restart a container in a paused or unknown state")
|
||||
}
|
||||
|
||||
c.newContainerEvent(events.Restart)
|
||||
|
@ -1489,16 +1490,16 @@ func (c *Container) copyWithTarFromImage(src, dest string) error {
|
|||
// Returns nil if safe to remove, or an error describing why it's unsafe if not.
|
||||
func (c *Container) checkReadyForRemoval() error {
|
||||
if c.state.State == ContainerStateUnknown {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "container %s is in invalid state", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "container %s is in invalid state", c.ID())
|
||||
}
|
||||
|
||||
if c.state.State == ContainerStateRunning ||
|
||||
c.state.State == ContainerStatePaused {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "cannot remove container %s as it is %s - running or paused containers cannot be removed", c.ID(), c.state.State.String())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "cannot remove container %s as it is %s - running or paused containers cannot be removed", c.ID(), c.state.State.String())
|
||||
}
|
||||
|
||||
if len(c.state.ExecSessions) != 0 {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "cannot remove container %s as it has active exec sessions", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "cannot remove container %s as it has active exec sessions", c.ID())
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
@ -20,6 +20,7 @@ import (
|
|||
cnitypes "github.com/containernetworking/cni/pkg/types/current"
|
||||
"github.com/containernetworking/plugins/pkg/ns"
|
||||
"github.com/containers/buildah/pkg/secrets"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
crioAnnotations "github.com/containers/libpod/pkg/annotations"
|
||||
"github.com/containers/libpod/pkg/apparmor"
|
||||
"github.com/containers/libpod/pkg/criu"
|
||||
|
@ -568,7 +569,7 @@ func (c *Container) checkpoint(ctx context.Context, options ContainerCheckpointO
|
|||
}
|
||||
|
||||
if c.state.State != ContainerStateRunning {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "%q is not running, cannot checkpoint", c.state.State)
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "%q is not running, cannot checkpoint", c.state.State)
|
||||
}
|
||||
|
||||
if err := c.checkpointRestoreLabelLog("dump.log"); err != nil {
|
||||
|
@ -659,7 +660,7 @@ func (c *Container) restore(ctx context.Context, options ContainerCheckpointOpti
|
|||
}
|
||||
|
||||
if (c.state.State != ContainerStateConfigured) && (c.state.State != ContainerStateExited) {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "container %s is running or paused, cannot restore", c.ID())
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "container %s is running or paused, cannot restore", c.ID())
|
||||
}
|
||||
|
||||
if options.TargetFile != "" {
|
||||
|
|
|
@ -5,35 +5,36 @@ package libpod
|
|||
import (
|
||||
"context"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
)
|
||||
|
||||
func (c *Container) mountSHM(shmOptions string) error {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (c *Container) unmountSHM(mount string) error {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (c *Container) prepare() (err error) {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (c *Container) cleanupNetwork() error {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (c *Container) generateSpec(ctx context.Context) (*spec.Spec, error) {
|
||||
return nil, ErrNotImplemented
|
||||
return nil, define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (c *Container) checkpoint(ctx context.Context, options ContainerCheckpointOptions) error {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (c *Container) restore(ctx context.Context, options ContainerCheckpointOptions) error {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (c *Container) copyOwnerAndPerms(source, dest string) error {
|
||||
|
|
|
@ -3,9 +3,10 @@
|
|||
package libpod
|
||||
|
||||
import (
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func (c *Container) readFromJournal(options *LogOptions, logChannel chan *LogLine) error {
|
||||
return errors.Wrapf(ErrOSNotSupported, "Journald logging only enabled with systemd on linux")
|
||||
return errors.Wrapf(define.ErrOSNotSupported, "Journald logging only enabled with systemd on linux")
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
package libpod
|
||||
|
||||
import "github.com/containers/libpod/libpod/define"
|
||||
|
||||
// GetContainerPidInformation returns process-related data of all processes in
|
||||
// the container. The output data can be controlled via the `descriptors`
|
||||
// argument which expects format descriptors and supports all AIXformat
|
||||
|
@ -11,11 +13,11 @@ package libpod
|
|||
//
|
||||
// For more details, please refer to github.com/containers/psgo.
|
||||
func (c *Container) GetContainerPidInformation(descriptors []string) ([]string, error) {
|
||||
return nil, ErrNotImplemented
|
||||
return nil, define.ErrNotImplemented
|
||||
}
|
||||
|
||||
// GetContainerPidInformationDescriptors returns a string slice of all supported
|
||||
// format descriptors of GetContainerPidInformation.
|
||||
func GetContainerPidInformationDescriptors() ([]string, error) {
|
||||
return nil, ErrNotImplemented
|
||||
return nil, define.ErrNotImplemented
|
||||
}
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
package define
|
||||
|
||||
var (
|
||||
// DefaultInitPath is the default path to the container-init binary
|
||||
DefaultInitPath = "/usr/libexec/podman/catatonit"
|
||||
)
|
||||
|
||||
// CtrRemoveTimeout is the default number of seconds to wait after stopping a container
|
||||
// before sending the kill signal
|
||||
const CtrRemoveTimeout = 10
|
|
@ -1,4 +1,4 @@
|
|||
package libpod
|
||||
package define
|
||||
|
||||
import (
|
||||
"errors"
|
|
@ -2,18 +2,20 @@
|
|||
|
||||
package libpod
|
||||
|
||||
import "github.com/containers/libpod/libpod/define"
|
||||
|
||||
// createTimer systemd timers for healthchecks of a container
|
||||
func (c *Container) createTimer() error {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
// startTimer starts a systemd timer for the healthchecks
|
||||
func (c *Container) startTimer() error {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
// removeTimer removes the systemd timer and unit files
|
||||
// for the container
|
||||
func (c *Container) removeTimer() error {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package libpod
|
|||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/registrar"
|
||||
"github.com/containers/storage/pkg/truncindex"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -99,12 +100,12 @@ func (s *InMemoryState) SetNamespace(ns string) error {
|
|||
// Container retrieves a container from its full ID
|
||||
func (s *InMemoryState) Container(id string) (*Container, error) {
|
||||
if id == "" {
|
||||
return nil, ErrEmptyID
|
||||
return nil, define.ErrEmptyID
|
||||
}
|
||||
|
||||
ctr, ok := s.containers[id]
|
||||
if !ok {
|
||||
return nil, errors.Wrapf(ErrNoSuchCtr, "no container with ID %s found", id)
|
||||
return nil, errors.Wrapf(define.ErrNoSuchCtr, "no container with ID %s found", id)
|
||||
}
|
||||
|
||||
if err := s.checkNSMatch(ctr.ID(), ctr.Namespace()); err != nil {
|
||||
|
@ -122,7 +123,7 @@ func (s *InMemoryState) LookupContainer(idOrName string) (*Container, error) {
|
|||
)
|
||||
|
||||
if idOrName == "" {
|
||||
return nil, ErrEmptyID
|
||||
return nil, define.ErrEmptyID
|
||||
}
|
||||
|
||||
if s.namespace != "" {
|
||||
|
@ -130,7 +131,7 @@ func (s *InMemoryState) LookupContainer(idOrName string) (*Container, error) {
|
|||
if !ok {
|
||||
// We have no containers in the namespace
|
||||
// Return false
|
||||
return nil, errors.Wrapf(ErrNoSuchCtr, "no container found with name or ID %s", idOrName)
|
||||
return nil, errors.Wrapf(define.ErrNoSuchCtr, "no container found with name or ID %s", idOrName)
|
||||
}
|
||||
nameIndex = nsIndex.nameIndex
|
||||
idIndex = nsIndex.idIndex
|
||||
|
@ -146,7 +147,7 @@ func (s *InMemoryState) LookupContainer(idOrName string) (*Container, error) {
|
|||
fullID, err = idIndex.Get(idOrName)
|
||||
if err != nil {
|
||||
if err == truncindex.ErrNotExist {
|
||||
return nil, errors.Wrapf(ErrNoSuchCtr, "no container found with name or ID %s", idOrName)
|
||||
return nil, errors.Wrapf(define.ErrNoSuchCtr, "no container found with name or ID %s", idOrName)
|
||||
}
|
||||
return nil, errors.Wrapf(err, "error performing truncindex lookup for ID %s", idOrName)
|
||||
}
|
||||
|
@ -158,7 +159,7 @@ func (s *InMemoryState) LookupContainer(idOrName string) (*Container, error) {
|
|||
ctr, ok := s.containers[fullID]
|
||||
if !ok {
|
||||
// It's a pod, not a container
|
||||
return nil, errors.Wrapf(ErrNoSuchCtr, "name or ID %s is a pod, not a container", idOrName)
|
||||
return nil, errors.Wrapf(define.ErrNoSuchCtr, "name or ID %s is a pod, not a container", idOrName)
|
||||
}
|
||||
|
||||
return ctr, nil
|
||||
|
@ -167,7 +168,7 @@ func (s *InMemoryState) LookupContainer(idOrName string) (*Container, error) {
|
|||
// HasContainer checks if a container with the given ID is present in the state
|
||||
func (s *InMemoryState) HasContainer(id string) (bool, error) {
|
||||
if id == "" {
|
||||
return false, ErrEmptyID
|
||||
return false, define.ErrEmptyID
|
||||
}
|
||||
|
||||
ctr, ok := s.containers[id]
|
||||
|
@ -182,15 +183,15 @@ func (s *InMemoryState) HasContainer(id string) (bool, error) {
|
|||
// Containers in a pod cannot be added to the state
|
||||
func (s *InMemoryState) AddContainer(ctr *Container) error {
|
||||
if !ctr.valid {
|
||||
return errors.Wrapf(ErrCtrRemoved, "container with ID %s is not valid", ctr.ID())
|
||||
return errors.Wrapf(define.ErrCtrRemoved, "container with ID %s is not valid", ctr.ID())
|
||||
}
|
||||
|
||||
if _, ok := s.containers[ctr.ID()]; ok {
|
||||
return errors.Wrapf(ErrCtrExists, "container with ID %s already exists in state", ctr.ID())
|
||||
return errors.Wrapf(define.ErrCtrExists, "container with ID %s already exists in state", ctr.ID())
|
||||
}
|
||||
|
||||
if ctr.config.Pod != "" {
|
||||
return errors.Wrapf(ErrInvalidArg, "cannot add a container that is in a pod with AddContainer, use AddContainerToPod")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "cannot add a container that is in a pod with AddContainer, use AddContainerToPod")
|
||||
}
|
||||
|
||||
if err := s.checkNSMatch(ctr.ID(), ctr.Namespace()); err != nil {
|
||||
|
@ -204,12 +205,12 @@ func (s *InMemoryState) AddContainer(ctr *Container) error {
|
|||
for _, depID := range depCtrs {
|
||||
depCtr, ok := s.containers[depID]
|
||||
if !ok {
|
||||
return errors.Wrapf(ErrNoSuchCtr, "cannot depend on nonexistent container %s", depID)
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "cannot depend on nonexistent container %s", depID)
|
||||
} else if depCtr.config.Pod != "" {
|
||||
return errors.Wrapf(ErrInvalidArg, "cannot depend on container in a pod if not part of same pod")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "cannot depend on container in a pod if not part of same pod")
|
||||
}
|
||||
if depCtr.config.Namespace != ctr.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "container %s is in namespace %s and cannot depend on container %s in namespace %s", ctr.ID(), ctr.config.Namespace, depID, depCtr.config.Namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "container %s is in namespace %s and cannot depend on container %s in namespace %s", ctr.ID(), ctr.config.Namespace, depID, depCtr.config.Namespace)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -270,12 +271,12 @@ func (s *InMemoryState) RemoveContainer(ctr *Container) error {
|
|||
deps, ok := s.ctrDepends[ctr.ID()]
|
||||
if ok && len(deps) != 0 {
|
||||
depsStr := strings.Join(deps, ", ")
|
||||
return errors.Wrapf(ErrCtrExists, "the following containers depend on container %s: %s", ctr.ID(), depsStr)
|
||||
return errors.Wrapf(define.ErrCtrExists, "the following containers depend on container %s: %s", ctr.ID(), depsStr)
|
||||
}
|
||||
|
||||
if _, ok := s.containers[ctr.ID()]; !ok {
|
||||
ctr.valid = false
|
||||
return errors.Wrapf(ErrNoSuchCtr, "no container exists in state with ID %s", ctr.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "no container exists in state with ID %s", ctr.ID())
|
||||
}
|
||||
|
||||
if err := s.idIndex.Delete(ctr.ID()); err != nil {
|
||||
|
@ -289,7 +290,7 @@ func (s *InMemoryState) RemoveContainer(ctr *Container) error {
|
|||
if ctr.config.Namespace != "" {
|
||||
nsIndex, ok := s.namespaceIndexes[ctr.config.Namespace]
|
||||
if !ok {
|
||||
return errors.Wrapf(ErrInternal, "error retrieving index for namespace %q", ctr.config.Namespace)
|
||||
return errors.Wrapf(define.ErrInternal, "error retrieving index for namespace %q", ctr.config.Namespace)
|
||||
}
|
||||
if err := nsIndex.idIndex.Delete(ctr.ID()); err != nil {
|
||||
return errors.Wrapf(err, "error removing container %s from namespace ID index", ctr.ID())
|
||||
|
@ -317,13 +318,13 @@ func (s *InMemoryState) RemoveContainer(ctr *Container) error {
|
|||
func (s *InMemoryState) UpdateContainer(ctr *Container) error {
|
||||
// If the container is invalid, return error
|
||||
if !ctr.valid {
|
||||
return errors.Wrapf(ErrCtrRemoved, "container with ID %s is not valid", ctr.ID())
|
||||
return errors.Wrapf(define.ErrCtrRemoved, "container with ID %s is not valid", ctr.ID())
|
||||
}
|
||||
|
||||
// If the container does not exist, return error
|
||||
if _, ok := s.containers[ctr.ID()]; !ok {
|
||||
ctr.valid = false
|
||||
return errors.Wrapf(ErrNoSuchCtr, "container with ID %s not found in state", ctr.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "container with ID %s not found in state", ctr.ID())
|
||||
}
|
||||
|
||||
return s.checkNSMatch(ctr.ID(), ctr.Namespace())
|
||||
|
@ -336,13 +337,13 @@ func (s *InMemoryState) UpdateContainer(ctr *Container) error {
|
|||
func (s *InMemoryState) SaveContainer(ctr *Container) error {
|
||||
// If the container is invalid, return error
|
||||
if !ctr.valid {
|
||||
return errors.Wrapf(ErrCtrRemoved, "container with ID %s is not valid", ctr.ID())
|
||||
return errors.Wrapf(define.ErrCtrRemoved, "container with ID %s is not valid", ctr.ID())
|
||||
}
|
||||
|
||||
// If the container does not exist, return error
|
||||
if _, ok := s.containers[ctr.ID()]; !ok {
|
||||
ctr.valid = false
|
||||
return errors.Wrapf(ErrNoSuchCtr, "container with ID %s not found in state", ctr.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "container with ID %s not found in state", ctr.ID())
|
||||
}
|
||||
|
||||
return s.checkNSMatch(ctr.ID(), ctr.Namespace())
|
||||
|
@ -351,13 +352,13 @@ func (s *InMemoryState) SaveContainer(ctr *Container) error {
|
|||
// ContainerInUse checks if the given container is being used by other containers
|
||||
func (s *InMemoryState) ContainerInUse(ctr *Container) ([]string, error) {
|
||||
if !ctr.valid {
|
||||
return nil, ErrCtrRemoved
|
||||
return nil, define.ErrCtrRemoved
|
||||
}
|
||||
|
||||
// If the container does not exist, return error
|
||||
if _, ok := s.containers[ctr.ID()]; !ok {
|
||||
ctr.valid = false
|
||||
return nil, errors.Wrapf(ErrNoSuchCtr, "container with ID %s not found in state", ctr.ID())
|
||||
return nil, errors.Wrapf(define.ErrNoSuchCtr, "container with ID %s not found in state", ctr.ID())
|
||||
}
|
||||
|
||||
if err := s.checkNSMatch(ctr.ID(), ctr.Namespace()); err != nil {
|
||||
|
@ -389,14 +390,14 @@ func (s *InMemoryState) AllContainers() ([]*Container, error) {
|
|||
// Please read the full comment on it in state.go before using it.
|
||||
func (s *InMemoryState) RewriteContainerConfig(ctr *Container, newCfg *ContainerConfig) error {
|
||||
if !ctr.valid {
|
||||
return ErrCtrRemoved
|
||||
return define.ErrCtrRemoved
|
||||
}
|
||||
|
||||
// If the container does not exist, return error
|
||||
stateCtr, ok := s.containers[ctr.ID()]
|
||||
if !ok {
|
||||
ctr.valid = false
|
||||
return errors.Wrapf(ErrNoSuchCtr, "container with ID %s not found in state", ctr.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "container with ID %s not found in state", ctr.ID())
|
||||
}
|
||||
|
||||
stateCtr.config = newCfg
|
||||
|
@ -409,14 +410,14 @@ func (s *InMemoryState) RewriteContainerConfig(ctr *Container, newCfg *Container
|
|||
// Please read the full comment on it in state.go before using it.
|
||||
func (s *InMemoryState) RewritePodConfig(pod *Pod, newCfg *PodConfig) error {
|
||||
if !pod.valid {
|
||||
return ErrPodRemoved
|
||||
return define.ErrPodRemoved
|
||||
}
|
||||
|
||||
// If the pod does not exist, return error
|
||||
statePod, ok := s.pods[pod.ID()]
|
||||
if !ok {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "pod with ID %s not found in state", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "pod with ID %s not found in state", pod.ID())
|
||||
}
|
||||
|
||||
statePod.config = newCfg
|
||||
|
@ -427,12 +428,12 @@ func (s *InMemoryState) RewritePodConfig(pod *Pod, newCfg *PodConfig) error {
|
|||
// Volume retrieves a volume from its full name
|
||||
func (s *InMemoryState) Volume(name string) (*Volume, error) {
|
||||
if name == "" {
|
||||
return nil, ErrEmptyID
|
||||
return nil, define.ErrEmptyID
|
||||
}
|
||||
|
||||
vol, ok := s.volumes[name]
|
||||
if !ok {
|
||||
return nil, errors.Wrapf(ErrNoSuchCtr, "no volume with name %s found", name)
|
||||
return nil, errors.Wrapf(define.ErrNoSuchCtr, "no volume with name %s found", name)
|
||||
}
|
||||
|
||||
return vol, nil
|
||||
|
@ -441,7 +442,7 @@ func (s *InMemoryState) Volume(name string) (*Volume, error) {
|
|||
// HasVolume checks if a volume with the given name is present in the state
|
||||
func (s *InMemoryState) HasVolume(name string) (bool, error) {
|
||||
if name == "" {
|
||||
return false, ErrEmptyID
|
||||
return false, define.ErrEmptyID
|
||||
}
|
||||
|
||||
_, ok := s.volumes[name]
|
||||
|
@ -455,11 +456,11 @@ func (s *InMemoryState) HasVolume(name string) (bool, error) {
|
|||
// AddVolume adds a volume to the state
|
||||
func (s *InMemoryState) AddVolume(volume *Volume) error {
|
||||
if !volume.valid {
|
||||
return errors.Wrapf(ErrVolumeRemoved, "volume with name %s is not valid", volume.Name())
|
||||
return errors.Wrapf(define.ErrVolumeRemoved, "volume with name %s is not valid", volume.Name())
|
||||
}
|
||||
|
||||
if _, ok := s.volumes[volume.Name()]; ok {
|
||||
return errors.Wrapf(ErrVolumeExists, "volume with name %s already exists in state", volume.Name())
|
||||
return errors.Wrapf(define.ErrVolumeExists, "volume with name %s already exists in state", volume.Name())
|
||||
}
|
||||
|
||||
s.volumes[volume.Name()] = volume
|
||||
|
@ -473,12 +474,12 @@ func (s *InMemoryState) RemoveVolume(volume *Volume) error {
|
|||
deps, ok := s.volumeDepends[volume.Name()]
|
||||
if ok && len(deps) != 0 {
|
||||
depsStr := strings.Join(deps, ", ")
|
||||
return errors.Wrapf(ErrVolumeExists, "the following containers depend on volume %s: %s", volume.Name(), depsStr)
|
||||
return errors.Wrapf(define.ErrVolumeExists, "the following containers depend on volume %s: %s", volume.Name(), depsStr)
|
||||
}
|
||||
|
||||
if _, ok := s.volumes[volume.Name()]; !ok {
|
||||
volume.valid = false
|
||||
return errors.Wrapf(ErrVolumeRemoved, "no volume exists in state with name %s", volume.Name())
|
||||
return errors.Wrapf(define.ErrVolumeRemoved, "no volume exists in state with name %s", volume.Name())
|
||||
}
|
||||
|
||||
delete(s.volumes, volume.Name())
|
||||
|
@ -489,13 +490,13 @@ func (s *InMemoryState) RemoveVolume(volume *Volume) error {
|
|||
// VolumeInUse checks if the given volume is being used by at least one container
|
||||
func (s *InMemoryState) VolumeInUse(volume *Volume) ([]string, error) {
|
||||
if !volume.valid {
|
||||
return nil, ErrVolumeRemoved
|
||||
return nil, define.ErrVolumeRemoved
|
||||
}
|
||||
|
||||
// If the volume does not exist, return error
|
||||
if _, ok := s.volumes[volume.Name()]; !ok {
|
||||
volume.valid = false
|
||||
return nil, errors.Wrapf(ErrNoSuchVolume, "volume with name %s not found in state", volume.Name())
|
||||
return nil, errors.Wrapf(define.ErrNoSuchVolume, "volume with name %s not found in state", volume.Name())
|
||||
}
|
||||
|
||||
arr, ok := s.volumeDepends[volume.Name()]
|
||||
|
@ -519,12 +520,12 @@ func (s *InMemoryState) AllVolumes() ([]*Volume, error) {
|
|||
// Pod retrieves a pod from the state from its full ID
|
||||
func (s *InMemoryState) Pod(id string) (*Pod, error) {
|
||||
if id == "" {
|
||||
return nil, ErrEmptyID
|
||||
return nil, define.ErrEmptyID
|
||||
}
|
||||
|
||||
pod, ok := s.pods[id]
|
||||
if !ok {
|
||||
return nil, errors.Wrapf(ErrNoSuchPod, "no pod with id %s found", id)
|
||||
return nil, errors.Wrapf(define.ErrNoSuchPod, "no pod with id %s found", id)
|
||||
}
|
||||
|
||||
if err := s.checkNSMatch(pod.ID(), pod.Namespace()); err != nil {
|
||||
|
@ -543,7 +544,7 @@ func (s *InMemoryState) LookupPod(idOrName string) (*Pod, error) {
|
|||
)
|
||||
|
||||
if idOrName == "" {
|
||||
return nil, ErrEmptyID
|
||||
return nil, define.ErrEmptyID
|
||||
}
|
||||
|
||||
if s.namespace != "" {
|
||||
|
@ -551,7 +552,7 @@ func (s *InMemoryState) LookupPod(idOrName string) (*Pod, error) {
|
|||
if !ok {
|
||||
// We have no containers in the namespace
|
||||
// Return false
|
||||
return nil, errors.Wrapf(ErrNoSuchCtr, "no container found with name or ID %s", idOrName)
|
||||
return nil, errors.Wrapf(define.ErrNoSuchCtr, "no container found with name or ID %s", idOrName)
|
||||
}
|
||||
nameIndex = nsIndex.nameIndex
|
||||
idIndex = nsIndex.idIndex
|
||||
|
@ -567,7 +568,7 @@ func (s *InMemoryState) LookupPod(idOrName string) (*Pod, error) {
|
|||
fullID, err = idIndex.Get(idOrName)
|
||||
if err != nil {
|
||||
if err == truncindex.ErrNotExist {
|
||||
return nil, errors.Wrapf(ErrNoSuchPod, "no pod found with name or ID %s", idOrName)
|
||||
return nil, errors.Wrapf(define.ErrNoSuchPod, "no pod found with name or ID %s", idOrName)
|
||||
}
|
||||
return nil, errors.Wrapf(err, "error performing truncindex lookup for ID %s", idOrName)
|
||||
}
|
||||
|
@ -579,7 +580,7 @@ func (s *InMemoryState) LookupPod(idOrName string) (*Pod, error) {
|
|||
pod, ok := s.pods[fullID]
|
||||
if !ok {
|
||||
// It's a container not a pod
|
||||
return nil, errors.Wrapf(ErrNoSuchPod, "id or name %s is a container not a pod", idOrName)
|
||||
return nil, errors.Wrapf(define.ErrNoSuchPod, "id or name %s is a container not a pod", idOrName)
|
||||
}
|
||||
|
||||
return pod, nil
|
||||
|
@ -588,7 +589,7 @@ func (s *InMemoryState) LookupPod(idOrName string) (*Pod, error) {
|
|||
// HasPod checks if a pod with the given ID is present in the state
|
||||
func (s *InMemoryState) HasPod(id string) (bool, error) {
|
||||
if id == "" {
|
||||
return false, ErrEmptyID
|
||||
return false, define.ErrEmptyID
|
||||
}
|
||||
|
||||
pod, ok := s.pods[id]
|
||||
|
@ -602,11 +603,11 @@ func (s *InMemoryState) HasPod(id string) (bool, error) {
|
|||
// PodHasContainer checks if the given pod has a container with the given ID
|
||||
func (s *InMemoryState) PodHasContainer(pod *Pod, ctrID string) (bool, error) {
|
||||
if !pod.valid {
|
||||
return false, errors.Wrapf(ErrPodRemoved, "pod %s is not valid", pod.ID())
|
||||
return false, errors.Wrapf(define.ErrPodRemoved, "pod %s is not valid", pod.ID())
|
||||
}
|
||||
|
||||
if ctrID == "" {
|
||||
return false, ErrEmptyID
|
||||
return false, define.ErrEmptyID
|
||||
}
|
||||
|
||||
if err := s.checkNSMatch(pod.ID(), pod.Namespace()); err != nil {
|
||||
|
@ -616,7 +617,7 @@ func (s *InMemoryState) PodHasContainer(pod *Pod, ctrID string) (bool, error) {
|
|||
podCtrs, ok := s.podContainers[pod.ID()]
|
||||
if !ok {
|
||||
pod.valid = false
|
||||
return false, errors.Wrapf(ErrNoSuchPod, "no pod with ID %s found in state", pod.ID())
|
||||
return false, errors.Wrapf(define.ErrNoSuchPod, "no pod with ID %s found in state", pod.ID())
|
||||
}
|
||||
|
||||
_, ok = podCtrs[ctrID]
|
||||
|
@ -626,7 +627,7 @@ func (s *InMemoryState) PodHasContainer(pod *Pod, ctrID string) (bool, error) {
|
|||
// PodContainersByID returns the IDs of all containers in the given pod
|
||||
func (s *InMemoryState) PodContainersByID(pod *Pod) ([]string, error) {
|
||||
if !pod.valid {
|
||||
return nil, errors.Wrapf(ErrPodRemoved, "pod %s is not valid", pod.ID())
|
||||
return nil, errors.Wrapf(define.ErrPodRemoved, "pod %s is not valid", pod.ID())
|
||||
}
|
||||
|
||||
if err := s.checkNSMatch(pod.ID(), pod.Namespace()); err != nil {
|
||||
|
@ -636,7 +637,7 @@ func (s *InMemoryState) PodContainersByID(pod *Pod) ([]string, error) {
|
|||
podCtrs, ok := s.podContainers[pod.ID()]
|
||||
if !ok {
|
||||
pod.valid = false
|
||||
return nil, errors.Wrapf(ErrNoSuchPod, "no pod with ID %s found in state", pod.ID())
|
||||
return nil, errors.Wrapf(define.ErrNoSuchPod, "no pod with ID %s found in state", pod.ID())
|
||||
}
|
||||
|
||||
length := len(podCtrs)
|
||||
|
@ -655,7 +656,7 @@ func (s *InMemoryState) PodContainersByID(pod *Pod) ([]string, error) {
|
|||
// PodContainers retrieves the containers from a pod
|
||||
func (s *InMemoryState) PodContainers(pod *Pod) ([]*Container, error) {
|
||||
if !pod.valid {
|
||||
return nil, errors.Wrapf(ErrPodRemoved, "pod %s is not valid", pod.ID())
|
||||
return nil, errors.Wrapf(define.ErrPodRemoved, "pod %s is not valid", pod.ID())
|
||||
}
|
||||
|
||||
if err := s.checkNSMatch(pod.ID(), pod.Namespace()); err != nil {
|
||||
|
@ -665,7 +666,7 @@ func (s *InMemoryState) PodContainers(pod *Pod) ([]*Container, error) {
|
|||
podCtrs, ok := s.podContainers[pod.ID()]
|
||||
if !ok {
|
||||
pod.valid = false
|
||||
return nil, errors.Wrapf(ErrNoSuchPod, "no pod with ID %s found in state", pod.ID())
|
||||
return nil, errors.Wrapf(define.ErrNoSuchPod, "no pod with ID %s found in state", pod.ID())
|
||||
}
|
||||
|
||||
length := len(podCtrs)
|
||||
|
@ -684,7 +685,7 @@ func (s *InMemoryState) PodContainers(pod *Pod) ([]*Container, error) {
|
|||
// AddPod adds a given pod to the state
|
||||
func (s *InMemoryState) AddPod(pod *Pod) error {
|
||||
if !pod.valid {
|
||||
return errors.Wrapf(ErrPodRemoved, "pod %s is not valid and cannot be added", pod.ID())
|
||||
return errors.Wrapf(define.ErrPodRemoved, "pod %s is not valid and cannot be added", pod.ID())
|
||||
}
|
||||
|
||||
if err := s.checkNSMatch(pod.ID(), pod.Namespace()); err != nil {
|
||||
|
@ -692,11 +693,11 @@ func (s *InMemoryState) AddPod(pod *Pod) error {
|
|||
}
|
||||
|
||||
if _, ok := s.pods[pod.ID()]; ok {
|
||||
return errors.Wrapf(ErrPodExists, "pod with ID %s already exists in state", pod.ID())
|
||||
return errors.Wrapf(define.ErrPodExists, "pod with ID %s already exists in state", pod.ID())
|
||||
}
|
||||
|
||||
if _, ok := s.podContainers[pod.ID()]; ok {
|
||||
return errors.Wrapf(ErrPodExists, "pod with ID %s already exists in state", pod.ID())
|
||||
return errors.Wrapf(define.ErrPodExists, "pod with ID %s already exists in state", pod.ID())
|
||||
}
|
||||
|
||||
if err := s.nameIndex.Reserve(pod.Name(), pod.ID()); err != nil {
|
||||
|
@ -746,15 +747,15 @@ func (s *InMemoryState) RemovePod(pod *Pod) error {
|
|||
|
||||
if _, ok := s.pods[pod.ID()]; !ok {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "no pod exists in state with ID %s", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "no pod exists in state with ID %s", pod.ID())
|
||||
}
|
||||
podCtrs, ok := s.podContainers[pod.ID()]
|
||||
if !ok {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "no pod exists in state with ID %s", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "no pod exists in state with ID %s", pod.ID())
|
||||
}
|
||||
if len(podCtrs) != 0 {
|
||||
return errors.Wrapf(ErrCtrExists, "pod %s is not empty and cannot be removed", pod.ID())
|
||||
return errors.Wrapf(define.ErrCtrExists, "pod %s is not empty and cannot be removed", pod.ID())
|
||||
}
|
||||
|
||||
if err := s.idIndex.Delete(pod.ID()); err != nil {
|
||||
|
@ -767,7 +768,7 @@ func (s *InMemoryState) RemovePod(pod *Pod) error {
|
|||
if pod.config.Namespace != "" {
|
||||
nsIndex, ok := s.namespaceIndexes[pod.config.Namespace]
|
||||
if !ok {
|
||||
return errors.Wrapf(ErrInternal, "error retrieving index for namespace %q", pod.config.Namespace)
|
||||
return errors.Wrapf(define.ErrInternal, "error retrieving index for namespace %q", pod.config.Namespace)
|
||||
}
|
||||
if err := nsIndex.idIndex.Delete(pod.ID()); err != nil {
|
||||
return errors.Wrapf(err, "error removing container %s from namespace ID index", pod.ID())
|
||||
|
@ -784,7 +785,7 @@ func (s *InMemoryState) RemovePod(pod *Pod) error {
|
|||
// Will only remove containers if no dependencies outside of the pod are present
|
||||
func (s *InMemoryState) RemovePodContainers(pod *Pod) error {
|
||||
if !pod.valid {
|
||||
return errors.Wrapf(ErrPodRemoved, "pod %s is not valid", pod.ID())
|
||||
return errors.Wrapf(define.ErrPodRemoved, "pod %s is not valid", pod.ID())
|
||||
}
|
||||
|
||||
if err := s.checkNSMatch(pod.ID(), pod.Namespace()); err != nil {
|
||||
|
@ -795,7 +796,7 @@ func (s *InMemoryState) RemovePodContainers(pod *Pod) error {
|
|||
podCtrs, ok := s.podContainers[pod.ID()]
|
||||
if !ok {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "no pod exists in state with ID %s", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "no pod exists in state with ID %s", pod.ID())
|
||||
}
|
||||
|
||||
// Go through container dependencies. Check to see if any are outside the pod.
|
||||
|
@ -804,7 +805,7 @@ func (s *InMemoryState) RemovePodContainers(pod *Pod) error {
|
|||
if ok {
|
||||
for _, dep := range ctrDeps {
|
||||
if _, ok := podCtrs[dep]; !ok {
|
||||
return errors.Wrapf(ErrCtrExists, "container %s has dependency %s outside of pod %s", ctr, dep, pod.ID())
|
||||
return errors.Wrapf(define.ErrCtrExists, "container %s has dependency %s outside of pod %s", ctr, dep, pod.ID())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -830,18 +831,18 @@ func (s *InMemoryState) RemovePodContainers(pod *Pod) error {
|
|||
// state
|
||||
func (s *InMemoryState) AddContainerToPod(pod *Pod, ctr *Container) error {
|
||||
if !pod.valid {
|
||||
return errors.Wrapf(ErrPodRemoved, "pod %s is not valid", pod.ID())
|
||||
return errors.Wrapf(define.ErrPodRemoved, "pod %s is not valid", pod.ID())
|
||||
}
|
||||
if !ctr.valid {
|
||||
return errors.Wrapf(ErrCtrRemoved, "container %s is not valid", ctr.ID())
|
||||
return errors.Wrapf(define.ErrCtrRemoved, "container %s is not valid", ctr.ID())
|
||||
}
|
||||
|
||||
if ctr.config.Pod != pod.ID() {
|
||||
return errors.Wrapf(ErrInvalidArg, "container %s is not in pod %s", ctr.ID(), pod.ID())
|
||||
return errors.Wrapf(define.ErrInvalidArg, "container %s is not in pod %s", ctr.ID(), pod.ID())
|
||||
}
|
||||
|
||||
if ctr.config.Namespace != pod.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "container %s is in namespace %s and pod %s is in namespace %s",
|
||||
return errors.Wrapf(define.ErrNSMismatch, "container %s is in namespace %s and pod %s is in namespace %s",
|
||||
ctr.ID(), ctr.config.Namespace, pod.ID(), pod.config.Namespace)
|
||||
}
|
||||
|
||||
|
@ -853,12 +854,12 @@ func (s *InMemoryState) AddContainerToPod(pod *Pod, ctr *Container) error {
|
|||
podCtrs, ok := s.podContainers[pod.ID()]
|
||||
if !ok {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrPodRemoved, "pod %s not found in state", pod.ID())
|
||||
return errors.Wrapf(define.ErrPodRemoved, "pod %s not found in state", pod.ID())
|
||||
}
|
||||
|
||||
// Is the container already in the pod?
|
||||
if _, ok = podCtrs[ctr.ID()]; ok {
|
||||
return errors.Wrapf(ErrCtrExists, "container with ID %s already exists in pod %s", ctr.ID(), pod.ID())
|
||||
return errors.Wrapf(define.ErrCtrExists, "container with ID %s already exists in pod %s", ctr.ID(), pod.ID())
|
||||
}
|
||||
|
||||
// There are potential race conditions with this
|
||||
|
@ -867,20 +868,20 @@ func (s *InMemoryState) AddContainerToPod(pod *Pod, ctr *Container) error {
|
|||
depCtrs := ctr.Dependencies()
|
||||
for _, depCtr := range depCtrs {
|
||||
if _, ok = s.containers[depCtr]; !ok {
|
||||
return errors.Wrapf(ErrNoSuchCtr, "cannot depend on nonexistent container %s", depCtr)
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "cannot depend on nonexistent container %s", depCtr)
|
||||
}
|
||||
depCtrStruct, ok := podCtrs[depCtr]
|
||||
if !ok {
|
||||
return errors.Wrapf(ErrInvalidArg, "cannot depend on container %s as it is not in pod %s", depCtr, pod.ID())
|
||||
return errors.Wrapf(define.ErrInvalidArg, "cannot depend on container %s as it is not in pod %s", depCtr, pod.ID())
|
||||
}
|
||||
if depCtrStruct.config.Namespace != ctr.config.Namespace {
|
||||
return errors.Wrapf(ErrNSMismatch, "container %s is in namespace %s and cannot depend on container %s in namespace %s", ctr.ID(), ctr.config.Namespace, depCtr, depCtrStruct.config.Namespace)
|
||||
return errors.Wrapf(define.ErrNSMismatch, "container %s is in namespace %s and cannot depend on container %s in namespace %s", ctr.ID(), ctr.config.Namespace, depCtr, depCtrStruct.config.Namespace)
|
||||
}
|
||||
}
|
||||
|
||||
// Add container to state
|
||||
if _, ok = s.containers[ctr.ID()]; ok {
|
||||
return errors.Wrapf(ErrCtrExists, "container with ID %s already exists in state", ctr.ID())
|
||||
return errors.Wrapf(define.ErrCtrExists, "container with ID %s already exists in state", ctr.ID())
|
||||
}
|
||||
|
||||
if err := s.nameIndex.Reserve(ctr.Name(), ctr.ID()); err != nil {
|
||||
|
@ -928,10 +929,10 @@ func (s *InMemoryState) AddContainerToPod(pod *Pod, ctr *Container) error {
|
|||
// The container is also removed from the state
|
||||
func (s *InMemoryState) RemoveContainerFromPod(pod *Pod, ctr *Container) error {
|
||||
if !pod.valid {
|
||||
return errors.Wrapf(ErrPodRemoved, "pod %s is not valid and containers cannot be removed", pod.ID())
|
||||
return errors.Wrapf(define.ErrPodRemoved, "pod %s is not valid and containers cannot be removed", pod.ID())
|
||||
}
|
||||
if !ctr.valid {
|
||||
return errors.Wrapf(ErrCtrRemoved, "container %s is not valid and cannot be removed from the pod", ctr.ID())
|
||||
return errors.Wrapf(define.ErrCtrRemoved, "container %s is not valid and cannot be removed from the pod", ctr.ID())
|
||||
}
|
||||
|
||||
if err := s.checkNSMatch(ctr.ID(), ctr.Namespace()); err != nil {
|
||||
|
@ -942,30 +943,30 @@ func (s *InMemoryState) RemoveContainerFromPod(pod *Pod, ctr *Container) error {
|
|||
deps, ok := s.ctrDepends[ctr.ID()]
|
||||
if ok && len(deps) != 0 {
|
||||
depsStr := strings.Join(deps, ", ")
|
||||
return errors.Wrapf(ErrCtrExists, "the following containers depend on container %s: %s", ctr.ID(), depsStr)
|
||||
return errors.Wrapf(define.ErrCtrExists, "the following containers depend on container %s: %s", ctr.ID(), depsStr)
|
||||
}
|
||||
|
||||
// Retrieve pod containers
|
||||
podCtrs, ok := s.podContainers[pod.ID()]
|
||||
if !ok {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrPodRemoved, "pod %s has been removed", pod.ID())
|
||||
return errors.Wrapf(define.ErrPodRemoved, "pod %s has been removed", pod.ID())
|
||||
}
|
||||
|
||||
// Does the container exist?
|
||||
if _, ok := s.containers[ctr.ID()]; !ok {
|
||||
ctr.valid = false
|
||||
return errors.Wrapf(ErrNoSuchCtr, "container %s does not exist in state", ctr.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "container %s does not exist in state", ctr.ID())
|
||||
}
|
||||
|
||||
// Is the container in the pod?
|
||||
if _, ok := podCtrs[ctr.ID()]; !ok {
|
||||
return errors.Wrapf(ErrNoSuchCtr, "container with ID %s not found in pod %s", ctr.ID(), pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "container with ID %s not found in pod %s", ctr.ID(), pod.ID())
|
||||
}
|
||||
|
||||
// Remove container from state
|
||||
if _, ok := s.containers[ctr.ID()]; !ok {
|
||||
return errors.Wrapf(ErrNoSuchCtr, "no container exists in state with ID %s", ctr.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "no container exists in state with ID %s", ctr.ID())
|
||||
}
|
||||
|
||||
if err := s.idIndex.Delete(ctr.ID()); err != nil {
|
||||
|
@ -980,7 +981,7 @@ func (s *InMemoryState) RemoveContainerFromPod(pod *Pod, ctr *Container) error {
|
|||
if ctr.config.Namespace != "" {
|
||||
nsIndex, ok := s.namespaceIndexes[ctr.config.Namespace]
|
||||
if !ok {
|
||||
return errors.Wrapf(ErrInternal, "error retrieving index for namespace %q", ctr.config.Namespace)
|
||||
return errors.Wrapf(define.ErrInternal, "error retrieving index for namespace %q", ctr.config.Namespace)
|
||||
}
|
||||
if err := nsIndex.idIndex.Delete(ctr.ID()); err != nil {
|
||||
return errors.Wrapf(err, "error removing container %s from namespace ID index", ctr.ID())
|
||||
|
@ -1001,7 +1002,7 @@ func (s *InMemoryState) RemoveContainerFromPod(pod *Pod, ctr *Container) error {
|
|||
// This is a no-op as there is no backing store
|
||||
func (s *InMemoryState) UpdatePod(pod *Pod) error {
|
||||
if !pod.valid {
|
||||
return ErrPodRemoved
|
||||
return define.ErrPodRemoved
|
||||
}
|
||||
|
||||
if err := s.checkNSMatch(pod.ID(), pod.Namespace()); err != nil {
|
||||
|
@ -1010,7 +1011,7 @@ func (s *InMemoryState) UpdatePod(pod *Pod) error {
|
|||
|
||||
if _, ok := s.pods[pod.ID()]; !ok {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "no pod exists in state with ID %s", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "no pod exists in state with ID %s", pod.ID())
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -1020,7 +1021,7 @@ func (s *InMemoryState) UpdatePod(pod *Pod) error {
|
|||
// This is a no-op at there is no backing store
|
||||
func (s *InMemoryState) SavePod(pod *Pod) error {
|
||||
if !pod.valid {
|
||||
return ErrPodRemoved
|
||||
return define.ErrPodRemoved
|
||||
}
|
||||
|
||||
if err := s.checkNSMatch(pod.ID(), pod.Namespace()); err != nil {
|
||||
|
@ -1029,7 +1030,7 @@ func (s *InMemoryState) SavePod(pod *Pod) error {
|
|||
|
||||
if _, ok := s.pods[pod.ID()]; !ok {
|
||||
pod.valid = false
|
||||
return errors.Wrapf(ErrNoSuchPod, "no pod exists in state with ID %s", pod.ID())
|
||||
return errors.Wrapf(define.ErrNoSuchPod, "no pod exists in state with ID %s", pod.ID())
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -1133,7 +1134,7 @@ func (s *InMemoryState) removeCtrFromVolDependsMap(depCtrID, volName string) {
|
|||
// namespaces.
|
||||
func (s *InMemoryState) checkNSMatch(id, ns string) error {
|
||||
if s.namespace != "" && s.namespace != ns {
|
||||
return errors.Wrapf(ErrNSMismatch, "cannot access %s as it is in namespace %q and we are in namespace %q",
|
||||
return errors.Wrapf(define.ErrNSMismatch, "cannot access %s as it is in namespace %q and we are in namespace %q",
|
||||
id, ns, s.namespace)
|
||||
}
|
||||
return nil
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/lookup"
|
||||
"github.com/containers/libpod/pkg/util"
|
||||
"github.com/cri-o/ocicni/pkg/ocicni"
|
||||
|
@ -209,7 +210,7 @@ func containerToV1Container(c *Container) (v1.Container, error) {
|
|||
return kubeContainer, err
|
||||
}
|
||||
kubeContainer.VolumeDevices = devices
|
||||
return kubeContainer, errors.Wrapf(ErrNotImplemented, "linux devices")
|
||||
return kubeContainer, errors.Wrapf(define.ErrNotImplemented, "linux devices")
|
||||
}
|
||||
|
||||
if len(c.config.UserVolumes) > 0 {
|
||||
|
|
|
@ -2,20 +2,22 @@
|
|||
|
||||
package libpod
|
||||
|
||||
import "github.com/containers/libpod/libpod/define"
|
||||
|
||||
func (r *Runtime) setupRootlessNetNS(ctr *Container) (err error) {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (r *Runtime) setupNetNS(ctr *Container) (err error) {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (r *Runtime) teardownNetNS(ctr *Container) error {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (r *Runtime) createNetNS(ctr *Container) (err error) {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (c *Container) getContainerNetworkInfo(data *InspectContainerData) *InspectContainerData {
|
||||
|
|
|
@ -11,6 +11,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/util"
|
||||
"github.com/cri-o/ocicni/pkg/ocicni"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
|
@ -79,7 +80,7 @@ type ociError struct {
|
|||
// The first path that points to a valid executable will be used.
|
||||
func newOCIRuntime(name string, paths []string, conmonPath string, runtimeCfg *RuntimeConfig, supportsJSON bool) (*OCIRuntime, error) {
|
||||
if name == "" {
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "the OCI runtime must be provided a non-empty name")
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "the OCI runtime must be provided a non-empty name")
|
||||
}
|
||||
|
||||
runtime := new(OCIRuntime)
|
||||
|
@ -114,14 +115,14 @@ func newOCIRuntime(name string, paths []string, conmonPath string, runtimeCfg *R
|
|||
break
|
||||
}
|
||||
if !foundPath {
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "no valid executable found for OCI runtime %s", name)
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "no valid executable found for OCI runtime %s", name)
|
||||
}
|
||||
|
||||
runtime.exitsDir = filepath.Join(runtime.tmpDir, "exits")
|
||||
runtime.socketsDir = filepath.Join(runtime.tmpDir, "socket")
|
||||
|
||||
if runtime.cgroupManager != CgroupfsCgroupsManager && runtime.cgroupManager != SystemdCgroupsManager {
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "invalid cgroup manager specified: %s", runtime.cgroupManager)
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "invalid cgroup manager specified: %s", runtime.cgroupManager)
|
||||
}
|
||||
|
||||
// Create the exit files and attach sockets directories
|
||||
|
@ -290,7 +291,7 @@ func (r *OCIRuntime) updateContainerStatus(ctr *Container, useRuntime bool) erro
|
|||
case "stopped":
|
||||
ctr.state.State = ContainerStateStopped
|
||||
default:
|
||||
return errors.Wrapf(ErrInternal, "unrecognized status returned by runtime for container %s: %s",
|
||||
return errors.Wrapf(define.ErrInternal, "unrecognized status returned by runtime for container %s: %s",
|
||||
ctr.ID(), state.Status)
|
||||
}
|
||||
|
||||
|
@ -390,11 +391,11 @@ func (r *OCIRuntime) unpauseContainer(ctr *Container) error {
|
|||
// TODO: add --pid-file and use that to generate exec session tracking
|
||||
func (r *OCIRuntime) execContainer(c *Container, cmd, capAdd, env []string, tty bool, cwd, user, sessionID string, streams *AttachStreams, preserveFDs int) (*exec.Cmd, error) {
|
||||
if len(cmd) == 0 {
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "must provide a command to execute")
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "must provide a command to execute")
|
||||
}
|
||||
|
||||
if sessionID == "" {
|
||||
return nil, errors.Wrapf(ErrEmptyID, "must provide a session ID for exec")
|
||||
return nil, errors.Wrapf(define.ErrEmptyID, "must provide a session ID for exec")
|
||||
}
|
||||
|
||||
runtimeDir, err := util.GetRootlessRuntimeDir()
|
||||
|
|
|
@ -16,6 +16,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/containerd/cgroups"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/rootless"
|
||||
"github.com/containers/libpod/pkg/util"
|
||||
"github.com/containers/libpod/utils"
|
||||
|
@ -430,19 +431,19 @@ func (r *OCIRuntime) createOCIContainer(ctr *Container, cgroupParent string, res
|
|||
if err == nil {
|
||||
var ociErr ociError
|
||||
if err := json.Unmarshal(data, &ociErr); err == nil {
|
||||
return errors.Wrapf(ErrOCIRuntime, "%s", strings.Trim(ociErr.Msg, "\n"))
|
||||
return errors.Wrapf(define.ErrOCIRuntime, "%s", strings.Trim(ociErr.Msg, "\n"))
|
||||
}
|
||||
}
|
||||
}
|
||||
// If we failed to parse the JSON errors, then print the output as it is
|
||||
if ss.si.Message != "" {
|
||||
return errors.Wrapf(ErrOCIRuntime, "%s", ss.si.Message)
|
||||
return errors.Wrapf(define.ErrOCIRuntime, "%s", ss.si.Message)
|
||||
}
|
||||
return errors.Wrapf(ErrInternal, "container create failed")
|
||||
return errors.Wrapf(define.ErrInternal, "container create failed")
|
||||
}
|
||||
ctr.state.PID = ss.si.Pid
|
||||
case <-time.After(ContainerCreateTimeout):
|
||||
return errors.Wrapf(ErrInternal, "container creation timeout")
|
||||
return errors.Wrapf(define.ErrInternal, "container creation timeout")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -5,18 +5,20 @@ package libpod
|
|||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
)
|
||||
|
||||
func (r *OCIRuntime) moveConmonToCgroup(ctr *Container, cgroupParent string, cmd *exec.Cmd) error {
|
||||
return ErrOSNotSupported
|
||||
return define.ErrOSNotSupported
|
||||
}
|
||||
|
||||
func newPipe() (parent *os.File, child *os.File, err error) {
|
||||
return nil, nil, ErrNotImplemented
|
||||
return nil, nil, define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (r *OCIRuntime) createContainer(ctr *Container, cgroupParent string, restoreOptions *ContainerCheckpointOptions) (err error) {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (r *OCIRuntime) pathPackage() string {
|
||||
|
@ -28,13 +30,13 @@ func (r *OCIRuntime) conmonPackage() string {
|
|||
}
|
||||
|
||||
func (r *OCIRuntime) createOCIContainer(ctr *Container, cgroupParent string, restoreOptions *ContainerCheckpointOptions) (err error) {
|
||||
return ErrOSNotSupported
|
||||
return define.ErrOSNotSupported
|
||||
}
|
||||
|
||||
func (r *OCIRuntime) execStopContainer(ctr *Container, timeout uint) error {
|
||||
return ErrOSNotSupported
|
||||
return define.ErrOSNotSupported
|
||||
}
|
||||
|
||||
func (r *OCIRuntime) stopContainer(ctr *Container, timeout uint) error {
|
||||
return ErrOSNotSupported
|
||||
return define.ErrOSNotSupported
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -3,6 +3,7 @@ package libpod
|
|||
import (
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/lock"
|
||||
"github.com/cri-o/ocicni/pkg/ocicni"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -190,7 +191,7 @@ func (p *Pod) CgroupPath() (string, error) {
|
|||
// HasContainer checks if a container is present in the pod
|
||||
func (p *Pod) HasContainer(id string) (bool, error) {
|
||||
if !p.valid {
|
||||
return false, ErrPodRemoved
|
||||
return false, define.ErrPodRemoved
|
||||
}
|
||||
|
||||
return p.runtime.state.PodHasContainer(p, id)
|
||||
|
@ -202,7 +203,7 @@ func (p *Pod) AllContainersByID() ([]string, error) {
|
|||
defer p.lock.Unlock()
|
||||
|
||||
if !p.valid {
|
||||
return nil, ErrPodRemoved
|
||||
return nil, define.ErrPodRemoved
|
||||
}
|
||||
|
||||
return p.runtime.state.PodContainersByID(p)
|
||||
|
@ -211,7 +212,7 @@ func (p *Pod) AllContainersByID() ([]string, error) {
|
|||
// AllContainers retrieves the containers in the pod
|
||||
func (p *Pod) AllContainers() ([]*Container, error) {
|
||||
if !p.valid {
|
||||
return nil, ErrPodRemoved
|
||||
return nil, define.ErrPodRemoved
|
||||
}
|
||||
p.lock.Lock()
|
||||
defer p.lock.Unlock()
|
||||
|
@ -280,7 +281,7 @@ func (p *Pod) GetPodStats(previousContainerStats map[string]*ContainerStats) (ma
|
|||
newStats, err := c.GetContainerStats(prevStat)
|
||||
// If the container wasn't running, don't include it
|
||||
// but also suppress the error
|
||||
if err != nil && errors.Cause(err) != ErrCtrStateInvalid {
|
||||
if err != nil && errors.Cause(err) != define.ErrCtrStateInvalid {
|
||||
return nil, err
|
||||
}
|
||||
if err == nil {
|
||||
|
|
|
@ -3,6 +3,7 @@ package libpod
|
|||
import (
|
||||
"context"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/events"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
|
@ -27,7 +28,7 @@ func (p *Pod) Start(ctx context.Context) (map[string]error, error) {
|
|||
defer p.lock.Unlock()
|
||||
|
||||
if !p.valid {
|
||||
return nil, ErrPodRemoved
|
||||
return nil, define.ErrPodRemoved
|
||||
}
|
||||
|
||||
allCtrs, err := p.runtime.state.PodContainers(p)
|
||||
|
@ -47,7 +48,7 @@ func (p *Pod) Start(ctx context.Context) (map[string]error, error) {
|
|||
// If there are no containers without dependencies, we can't start
|
||||
// Error out
|
||||
if len(graph.noDepNodes) == 0 {
|
||||
return nil, errors.Wrapf(ErrNoSuchCtr, "no containers in pod %s have no dependencies, cannot start pod", p.ID())
|
||||
return nil, errors.Wrapf(define.ErrNoSuchCtr, "no containers in pod %s have no dependencies, cannot start pod", p.ID())
|
||||
}
|
||||
|
||||
// Traverse the graph beginning at nodes with no dependencies
|
||||
|
@ -56,7 +57,7 @@ func (p *Pod) Start(ctx context.Context) (map[string]error, error) {
|
|||
}
|
||||
|
||||
if len(ctrErrors) > 0 {
|
||||
return ctrErrors, errors.Wrapf(ErrCtrExists, "error starting some containers")
|
||||
return ctrErrors, errors.Wrapf(define.ErrCtrExists, "error starting some containers")
|
||||
}
|
||||
defer p.newPodEvent(events.Start)
|
||||
return nil, nil
|
||||
|
@ -88,7 +89,7 @@ func (p *Pod) StopWithTimeout(ctx context.Context, cleanup bool, timeout int) (m
|
|||
defer p.lock.Unlock()
|
||||
|
||||
if !p.valid {
|
||||
return nil, ErrPodRemoved
|
||||
return nil, define.ErrPodRemoved
|
||||
}
|
||||
|
||||
allCtrs, err := p.runtime.state.PodContainers(p)
|
||||
|
@ -136,7 +137,7 @@ func (p *Pod) StopWithTimeout(ctx context.Context, cleanup bool, timeout int) (m
|
|||
}
|
||||
|
||||
if len(ctrErrors) > 0 {
|
||||
return ctrErrors, errors.Wrapf(ErrCtrExists, "error stopping some containers")
|
||||
return ctrErrors, errors.Wrapf(define.ErrCtrExists, "error stopping some containers")
|
||||
}
|
||||
defer p.newPodEvent(events.Stop)
|
||||
return nil, nil
|
||||
|
@ -159,7 +160,7 @@ func (p *Pod) Pause() (map[string]error, error) {
|
|||
defer p.lock.Unlock()
|
||||
|
||||
if !p.valid {
|
||||
return nil, ErrPodRemoved
|
||||
return nil, define.ErrPodRemoved
|
||||
}
|
||||
|
||||
allCtrs, err := p.runtime.state.PodContainers(p)
|
||||
|
@ -195,7 +196,7 @@ func (p *Pod) Pause() (map[string]error, error) {
|
|||
}
|
||||
|
||||
if len(ctrErrors) > 0 {
|
||||
return ctrErrors, errors.Wrapf(ErrCtrExists, "error pausing some containers")
|
||||
return ctrErrors, errors.Wrapf(define.ErrCtrExists, "error pausing some containers")
|
||||
}
|
||||
defer p.newPodEvent(events.Pause)
|
||||
return nil, nil
|
||||
|
@ -218,7 +219,7 @@ func (p *Pod) Unpause() (map[string]error, error) {
|
|||
defer p.lock.Unlock()
|
||||
|
||||
if !p.valid {
|
||||
return nil, ErrPodRemoved
|
||||
return nil, define.ErrPodRemoved
|
||||
}
|
||||
|
||||
allCtrs, err := p.runtime.state.PodContainers(p)
|
||||
|
@ -254,7 +255,7 @@ func (p *Pod) Unpause() (map[string]error, error) {
|
|||
}
|
||||
|
||||
if len(ctrErrors) > 0 {
|
||||
return ctrErrors, errors.Wrapf(ErrCtrExists, "error unpausing some containers")
|
||||
return ctrErrors, errors.Wrapf(define.ErrCtrExists, "error unpausing some containers")
|
||||
}
|
||||
|
||||
defer p.newPodEvent(events.Unpause)
|
||||
|
@ -279,7 +280,7 @@ func (p *Pod) Restart(ctx context.Context) (map[string]error, error) {
|
|||
defer p.lock.Unlock()
|
||||
|
||||
if !p.valid {
|
||||
return nil, ErrPodRemoved
|
||||
return nil, define.ErrPodRemoved
|
||||
}
|
||||
|
||||
allCtrs, err := p.runtime.state.PodContainers(p)
|
||||
|
@ -299,7 +300,7 @@ func (p *Pod) Restart(ctx context.Context) (map[string]error, error) {
|
|||
// If there are no containers without dependencies, we can't start
|
||||
// Error out
|
||||
if len(graph.noDepNodes) == 0 {
|
||||
return nil, errors.Wrapf(ErrNoSuchCtr, "no containers in pod %s have no dependencies, cannot start pod", p.ID())
|
||||
return nil, errors.Wrapf(define.ErrNoSuchCtr, "no containers in pod %s have no dependencies, cannot start pod", p.ID())
|
||||
}
|
||||
|
||||
// Traverse the graph beginning at nodes with no dependencies
|
||||
|
@ -308,7 +309,7 @@ func (p *Pod) Restart(ctx context.Context) (map[string]error, error) {
|
|||
}
|
||||
|
||||
if len(ctrErrors) > 0 {
|
||||
return ctrErrors, errors.Wrapf(ErrCtrExists, "error stopping some containers")
|
||||
return ctrErrors, errors.Wrapf(define.ErrCtrExists, "error stopping some containers")
|
||||
}
|
||||
p.newPodEvent(events.Stop)
|
||||
p.newPodEvent(events.Start)
|
||||
|
@ -331,7 +332,7 @@ func (p *Pod) Kill(signal uint) (map[string]error, error) {
|
|||
defer p.lock.Unlock()
|
||||
|
||||
if !p.valid {
|
||||
return nil, ErrPodRemoved
|
||||
return nil, define.ErrPodRemoved
|
||||
}
|
||||
|
||||
allCtrs, err := p.runtime.state.PodContainers(p)
|
||||
|
@ -374,7 +375,7 @@ func (p *Pod) Kill(signal uint) (map[string]error, error) {
|
|||
}
|
||||
|
||||
if len(ctrErrors) > 0 {
|
||||
return ctrErrors, errors.Wrapf(ErrCtrExists, "error killing some containers")
|
||||
return ctrErrors, errors.Wrapf(define.ErrCtrExists, "error killing some containers")
|
||||
}
|
||||
defer p.newPodEvent(events.Kill)
|
||||
return nil, nil
|
||||
|
@ -387,7 +388,7 @@ func (p *Pod) Status() (map[string]ContainerStatus, error) {
|
|||
defer p.lock.Unlock()
|
||||
|
||||
if !p.valid {
|
||||
return nil, ErrPodRemoved
|
||||
return nil, define.ErrPodRemoved
|
||||
}
|
||||
|
||||
allCtrs, err := p.runtime.state.PodContainers(p)
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/storage/pkg/stringid"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
|
@ -52,7 +53,7 @@ func (p *Pod) refresh() error {
|
|||
}
|
||||
|
||||
if !p.valid {
|
||||
return ErrPodRemoved
|
||||
return define.ErrPodRemoved
|
||||
}
|
||||
|
||||
// Retrieve the pod's lock
|
||||
|
@ -76,7 +77,7 @@ func (p *Pod) refresh() error {
|
|||
|
||||
logrus.Debugf("setting pod cgroup to %s", p.state.CgroupPath)
|
||||
default:
|
||||
return errors.Wrapf(ErrInvalidArg, "unknown cgroups manager %s specified", p.runtime.config.CgroupManager)
|
||||
return errors.Wrapf(define.ErrInvalidArg, "unknown cgroups manager %s specified", p.runtime.config.CgroupManager)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
package libpod
|
||||
|
||||
import "github.com/containers/libpod/libpod/define"
|
||||
|
||||
// GetPodPidInformation is exclusive to linux
|
||||
func (p *Pod) GetPodPidInformation(descriptors []string) ([]string, error) {
|
||||
return nil, ErrNotImplemented
|
||||
return nil, define.ErrNotImplemented
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ import (
|
|||
"github.com/BurntSushi/toml"
|
||||
is "github.com/containers/image/storage"
|
||||
"github.com/containers/image/types"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/events"
|
||||
"github.com/containers/libpod/libpod/image"
|
||||
"github.com/containers/libpod/libpod/lock"
|
||||
|
@ -75,9 +76,6 @@ var (
|
|||
// DefaultInfraCommand to be run in an infra container
|
||||
DefaultInfraCommand = "/pause"
|
||||
|
||||
// DefaultInitPath is the default path to the container-init binary
|
||||
DefaultInitPath = "/usr/libexec/podman/catatonit"
|
||||
|
||||
// DefaultSHMLockPath is the default path for SHM locks
|
||||
DefaultSHMLockPath = "/libpod_lock"
|
||||
// DefaultRootlessSHMLockPath is the default path for rootless SHM locks
|
||||
|
@ -298,7 +296,7 @@ func defaultRuntimeConfig() (RuntimeConfig, error) {
|
|||
ConmonEnvVars: []string{
|
||||
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
||||
},
|
||||
InitPath: DefaultInitPath,
|
||||
InitPath: define.DefaultInitPath,
|
||||
CgroupManager: SystemdCgroupsManager,
|
||||
StaticDir: filepath.Join(storeOpts.GraphRoot, "libpod"),
|
||||
TmpDir: "",
|
||||
|
@ -598,7 +596,7 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (err error) {
|
|||
break
|
||||
}
|
||||
if !foundConmon {
|
||||
return errors.Wrapf(ErrInvalidArg,
|
||||
return errors.Wrapf(define.ErrInvalidArg,
|
||||
"could not find a working conmon binary (configured options: %v)",
|
||||
runtime.config.ConmonPath)
|
||||
}
|
||||
|
@ -621,7 +619,7 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (err error) {
|
|||
}
|
||||
runtime.state = state
|
||||
case SQLiteStateStore:
|
||||
return errors.Wrapf(ErrInvalidArg, "SQLite state is currently disabled")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "SQLite state is currently disabled")
|
||||
case BoltDBStateStore:
|
||||
dbPath := filepath.Join(runtime.config.StaticDir, "bolt_state.db")
|
||||
|
||||
|
@ -631,7 +629,7 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (err error) {
|
|||
}
|
||||
runtime.state = state
|
||||
default:
|
||||
return errors.Wrapf(ErrInvalidArg, "unrecognized state type passed")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "unrecognized state type passed")
|
||||
}
|
||||
|
||||
// Grab config from the database so we can reset some defaults
|
||||
|
@ -791,7 +789,7 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (err error) {
|
|||
}
|
||||
|
||||
if len(runtime.config.RuntimePath) == 0 {
|
||||
return errors.Wrapf(ErrInvalidArg, "empty runtime path array passed")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "empty runtime path array passed")
|
||||
}
|
||||
|
||||
name := filepath.Base(runtime.config.RuntimePath[0])
|
||||
|
@ -816,7 +814,7 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (err error) {
|
|||
// Initialize remaining OCI runtimes
|
||||
for name, paths := range runtime.config.OCIRuntimes {
|
||||
if len(paths) == 0 {
|
||||
return errors.Wrapf(ErrInvalidArg, "must provide at least 1 path to OCI runtime %s", name)
|
||||
return errors.Wrapf(define.ErrInvalidArg, "must provide at least 1 path to OCI runtime %s", name)
|
||||
}
|
||||
|
||||
supportsJSON := false
|
||||
|
@ -865,7 +863,7 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (err error) {
|
|||
} else {
|
||||
ociRuntime, ok := runtime.ociRuntimes[runtime.config.OCIRuntime]
|
||||
if !ok {
|
||||
return errors.Wrapf(ErrInvalidArg, "default OCI runtime %q not found", runtime.config.OCIRuntime)
|
||||
return errors.Wrapf(define.ErrInvalidArg, "default OCI runtime %q not found", runtime.config.OCIRuntime)
|
||||
}
|
||||
runtime.defaultOCIRuntime = ociRuntime
|
||||
}
|
||||
|
@ -873,12 +871,12 @@ func makeRuntime(ctx context.Context, runtime *Runtime) (err error) {
|
|||
|
||||
// Do we have at least one valid OCI runtime?
|
||||
if len(runtime.ociRuntimes) == 0 {
|
||||
return errors.Wrapf(ErrInvalidArg, "no OCI runtime has been configured")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "no OCI runtime has been configured")
|
||||
}
|
||||
|
||||
// Do we have a default runtime?
|
||||
if runtime.defaultOCIRuntime == nil {
|
||||
return errors.Wrapf(ErrInvalidArg, "no default OCI runtime was configured")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "no default OCI runtime was configured")
|
||||
}
|
||||
|
||||
// Make the per-boot files directory if it does not exist
|
||||
|
@ -1030,7 +1028,7 @@ func (r *Runtime) GetConfig() (*RuntimeConfig, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
config := new(RuntimeConfig)
|
||||
|
@ -1052,7 +1050,7 @@ func (r *Runtime) Shutdown(force bool) error {
|
|||
defer r.lock.Unlock()
|
||||
|
||||
if !r.valid {
|
||||
return ErrRuntimeStopped
|
||||
return define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
r.valid = false
|
||||
|
@ -1064,7 +1062,7 @@ func (r *Runtime) Shutdown(force bool) error {
|
|||
logrus.Errorf("Error retrieving containers from database: %v", err)
|
||||
} else {
|
||||
for _, ctr := range ctrs {
|
||||
if err := ctr.StopWithTimeout(CtrRemoveTimeout); err != nil {
|
||||
if err := ctr.StopWithTimeout(define.CtrRemoveTimeout); err != nil {
|
||||
logrus.Errorf("Error stopping container %s: %v", ctr.ID(), err)
|
||||
}
|
||||
}
|
||||
|
@ -1185,7 +1183,7 @@ func (r *Runtime) generateName() (string, error) {
|
|||
if _, err := r.state.LookupContainer(name); err == nil {
|
||||
continue
|
||||
} else {
|
||||
if errors.Cause(err) != ErrNoSuchCtr {
|
||||
if errors.Cause(err) != define.ErrNoSuchCtr {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
@ -1193,7 +1191,7 @@ func (r *Runtime) generateName() (string, error) {
|
|||
if _, err := r.state.LookupPod(name); err == nil {
|
||||
continue
|
||||
} else {
|
||||
if errors.Cause(err) != ErrNoSuchPod {
|
||||
if errors.Cause(err) != define.ErrNoSuchPod {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package libpod
|
||||
|
||||
import (
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/storage"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
|
@ -56,7 +57,7 @@ func (r *Runtime) RemoveStorageContainer(idOrName string, force bool) error {
|
|||
targetID, err := r.store.Lookup(idOrName)
|
||||
if err != nil {
|
||||
if err == storage.ErrLayerUnknown {
|
||||
return errors.Wrapf(ErrNoSuchCtr, "no container with ID or name %q found", idOrName)
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "no container with ID or name %q found", idOrName)
|
||||
}
|
||||
return errors.Wrapf(err, "error looking up container %q", idOrName)
|
||||
}
|
||||
|
@ -66,7 +67,7 @@ func (r *Runtime) RemoveStorageContainer(idOrName string, force bool) error {
|
|||
ctr, err := r.store.Container(targetID)
|
||||
if err != nil {
|
||||
if err == storage.ErrContainerUnknown {
|
||||
return errors.Wrapf(ErrNoSuchCtr, "%q does not refer to a container", idOrName)
|
||||
return errors.Wrapf(define.ErrNoSuchCtr, "%q does not refer to a container", idOrName)
|
||||
}
|
||||
return errors.Wrapf(err, "error retrieving container %q", idOrName)
|
||||
}
|
||||
|
@ -77,7 +78,7 @@ func (r *Runtime) RemoveStorageContainer(idOrName string, force bool) error {
|
|||
return err
|
||||
}
|
||||
if exists {
|
||||
return errors.Wrapf(ErrCtrExists, "refusing to remove %q as it exists in libpod as container %s", idOrName, ctr.ID)
|
||||
return errors.Wrapf(define.ErrCtrExists, "refusing to remove %q as it exists in libpod as container %s", idOrName, ctr.ID)
|
||||
}
|
||||
|
||||
if !force {
|
||||
|
@ -92,7 +93,7 @@ func (r *Runtime) RemoveStorageContainer(idOrName string, force bool) error {
|
|||
return errors.Wrapf(err, "error looking up container %q mounts", idOrName)
|
||||
}
|
||||
if timesMounted > 0 {
|
||||
return errors.Wrapf(ErrCtrStateInvalid, "container %q is mounted and cannot be removed without using force", idOrName)
|
||||
return errors.Wrapf(define.ErrCtrStateInvalid, "container %q is mounted and cannot be removed without using force", idOrName)
|
||||
}
|
||||
} else {
|
||||
if _, err := r.store.Unmount(ctr.ID, true); err != nil {
|
||||
|
|
|
@ -8,20 +8,17 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
config2 "github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/events"
|
||||
"github.com/containers/libpod/pkg/rootless"
|
||||
"github.com/containers/storage/pkg/stringid"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/runtime-tools/generate"
|
||||
opentracing "github.com/opentracing/opentracing-go"
|
||||
"github.com/opentracing/opentracing-go"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// CtrRemoveTimeout is the default number of seconds to wait after stopping a container
|
||||
// before sending the kill signal
|
||||
const CtrRemoveTimeout = 10
|
||||
|
||||
// Contains the public Runtime API for containers
|
||||
|
||||
// A CtrCreateOption is a functional option which alters the Container created
|
||||
|
@ -38,7 +35,7 @@ func (r *Runtime) NewContainer(ctx context.Context, rSpec *spec.Spec, options ..
|
|||
r.lock.Lock()
|
||||
defer r.lock.Unlock()
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, config2.ErrRuntimeStopped
|
||||
}
|
||||
return r.newContainer(ctx, rSpec, options...)
|
||||
}
|
||||
|
@ -48,7 +45,7 @@ func (r *Runtime) RestoreContainer(ctx context.Context, rSpec *spec.Spec, config
|
|||
r.lock.Lock()
|
||||
defer r.lock.Unlock()
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, config2.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
ctr, err := r.initContainerVariables(rSpec, config)
|
||||
|
@ -60,7 +57,7 @@ func (r *Runtime) RestoreContainer(ctx context.Context, rSpec *spec.Spec, config
|
|||
|
||||
func (r *Runtime) initContainerVariables(rSpec *spec.Spec, config *ContainerConfig) (c *Container, err error) {
|
||||
if rSpec == nil {
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "must provide a valid runtime spec to create container")
|
||||
return nil, errors.Wrapf(config2.ErrInvalidArg, "must provide a valid runtime spec to create container")
|
||||
}
|
||||
ctr := new(Container)
|
||||
ctr.config = new(ContainerConfig)
|
||||
|
@ -92,7 +89,7 @@ func (r *Runtime) initContainerVariables(rSpec *spec.Spec, config *ContainerConf
|
|||
|
||||
ctr.state.BindMounts = make(map[string]string)
|
||||
|
||||
ctr.config.StopTimeout = CtrRemoveTimeout
|
||||
ctr.config.StopTimeout = config2.CtrRemoveTimeout
|
||||
|
||||
ctr.config.OCIRuntime = r.defaultOCIRuntime.name
|
||||
|
||||
|
@ -144,7 +141,7 @@ func (r *Runtime) setupContainer(ctx context.Context, ctr *Container, restore bo
|
|||
} else {
|
||||
ociRuntime, ok := r.ociRuntimes[ctr.config.OCIRuntime]
|
||||
if !ok {
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "requested OCI runtime %s is not available", ctr.config.OCIRuntime)
|
||||
return nil, errors.Wrapf(config2.ErrInvalidArg, "requested OCI runtime %s is not available", ctr.config.OCIRuntime)
|
||||
}
|
||||
ctr.ociRuntime = ociRuntime
|
||||
}
|
||||
|
@ -177,14 +174,14 @@ func (r *Runtime) setupContainer(ctx context.Context, ctr *Container, restore bo
|
|||
return nil, errors.Wrapf(err, "error retrieving pod %s cgroup", pod.ID())
|
||||
}
|
||||
if podCgroup == "" {
|
||||
return nil, errors.Wrapf(ErrInternal, "pod %s cgroup is not set", pod.ID())
|
||||
return nil, errors.Wrapf(config2.ErrInternal, "pod %s cgroup is not set", pod.ID())
|
||||
}
|
||||
ctr.config.CgroupParent = podCgroup
|
||||
} else {
|
||||
ctr.config.CgroupParent = CgroupfsDefaultCgroupParent
|
||||
}
|
||||
} else if strings.HasSuffix(path.Base(ctr.config.CgroupParent), ".slice") {
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "systemd slice received as cgroup parent when using cgroupfs")
|
||||
return nil, errors.Wrapf(config2.ErrInvalidArg, "systemd slice received as cgroup parent when using cgroupfs")
|
||||
}
|
||||
case SystemdCgroupsManager:
|
||||
if ctr.config.CgroupParent == "" {
|
||||
|
@ -198,10 +195,10 @@ func (r *Runtime) setupContainer(ctx context.Context, ctr *Container, restore bo
|
|||
ctr.config.CgroupParent = SystemdDefaultCgroupParent
|
||||
}
|
||||
} else if len(ctr.config.CgroupParent) < 6 || !strings.HasSuffix(path.Base(ctr.config.CgroupParent), ".slice") {
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "did not receive systemd slice as cgroup parent when using systemd to manage cgroups")
|
||||
return nil, errors.Wrapf(config2.ErrInvalidArg, "did not receive systemd slice as cgroup parent when using systemd to manage cgroups")
|
||||
}
|
||||
default:
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "unsupported CGroup manager: %s - cannot validate cgroup parent", r.config.CgroupManager)
|
||||
return nil, errors.Wrapf(config2.ErrInvalidArg, "unsupported CGroup manager: %s - cannot validate cgroup parent", r.config.CgroupManager)
|
||||
}
|
||||
|
||||
if restore {
|
||||
|
@ -241,7 +238,7 @@ func (r *Runtime) setupContainer(ctx context.Context, ctr *Container, restore bo
|
|||
if err == nil {
|
||||
// The volume exists, we're good
|
||||
continue
|
||||
} else if errors.Cause(err) != ErrNoSuchVolume {
|
||||
} else if errors.Cause(err) != config2.ErrNoSuchVolume {
|
||||
return nil, errors.Wrapf(err, "error retrieving named volume %s for new container", vol.Name)
|
||||
}
|
||||
|
||||
|
@ -355,7 +352,7 @@ func (r *Runtime) removeContainer(ctx context.Context, c *Container, force bool,
|
|||
}
|
||||
|
||||
if !r.valid {
|
||||
return ErrRuntimeStopped
|
||||
return config2.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
// Update the container to get current state
|
||||
|
@ -413,7 +410,7 @@ func (r *Runtime) removeContainer(ctx context.Context, c *Container, force bool,
|
|||
}
|
||||
if len(deps) != 0 {
|
||||
depsStr := strings.Join(deps, ", ")
|
||||
return errors.Wrapf(ErrCtrExists, "container %s has dependent containers which must be removed before it: %s", c.ID(), depsStr)
|
||||
return errors.Wrapf(config2.ErrCtrExists, "container %s has dependent containers which must be removed before it: %s", c.ID(), depsStr)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -496,7 +493,7 @@ func (r *Runtime) removeContainer(ctx context.Context, c *Container, force bool,
|
|||
if !volume.IsCtrSpecific() {
|
||||
continue
|
||||
}
|
||||
if err := runtime.removeVolume(ctx, volume, false); err != nil && err != ErrNoSuchVolume && err != ErrVolumeBeingUsed {
|
||||
if err := runtime.removeVolume(ctx, volume, false); err != nil && err != config2.ErrNoSuchVolume && err != config2.ErrVolumeBeingUsed {
|
||||
logrus.Errorf("cleanup volume (%s): %v", v, err)
|
||||
}
|
||||
}
|
||||
|
@ -511,7 +508,7 @@ func (r *Runtime) GetContainer(id string) (*Container, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, config2.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
return r.state.Container(id)
|
||||
|
@ -523,7 +520,7 @@ func (r *Runtime) HasContainer(id string) (bool, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return false, ErrRuntimeStopped
|
||||
return false, config2.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
return r.state.HasContainer(id)
|
||||
|
@ -536,7 +533,7 @@ func (r *Runtime) LookupContainer(idOrName string) (*Container, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, config2.ErrRuntimeStopped
|
||||
}
|
||||
return r.state.LookupContainer(idOrName)
|
||||
}
|
||||
|
@ -550,7 +547,7 @@ func (r *Runtime) GetContainers(filters ...ContainerFilter) ([]*Container, error
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, config2.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
ctrs, err := r.state.AllContainers()
|
||||
|
@ -611,7 +608,7 @@ func (r *Runtime) GetLatestContainer() (*Container, error) {
|
|||
return nil, errors.Wrapf(err, "unable to find latest container")
|
||||
}
|
||||
if len(ctrs) == 0 {
|
||||
return nil, ErrNoSuchCtr
|
||||
return nil, config2.ErrNoSuchCtr
|
||||
}
|
||||
for containerIndex, ctr := range ctrs {
|
||||
createdTime := ctr.config.CreatedTime
|
||||
|
|
|
@ -10,6 +10,7 @@ import (
|
|||
"os"
|
||||
|
||||
"github.com/containers/buildah/imagebuildah"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/image"
|
||||
"github.com/containers/libpod/pkg/util"
|
||||
"github.com/containers/storage"
|
||||
|
@ -31,7 +32,7 @@ func (r *Runtime) RemoveImage(ctx context.Context, img *image.Image, force bool)
|
|||
defer r.lock.Unlock()
|
||||
|
||||
if !r.valid {
|
||||
return "", ErrRuntimeStopped
|
||||
return "", define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
// Get all containers, filter to only those using the image, and remove those containers
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/util"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
@ -30,7 +31,7 @@ func (r *Runtime) RemovePod(ctx context.Context, p *Pod, removeCtrs, force bool)
|
|||
defer r.lock.Unlock()
|
||||
|
||||
if !r.valid {
|
||||
return ErrRuntimeStopped
|
||||
return define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
if !p.valid {
|
||||
|
@ -53,7 +54,7 @@ func (r *Runtime) GetPod(id string) (*Pod, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
return r.state.Pod(id)
|
||||
|
@ -65,7 +66,7 @@ func (r *Runtime) HasPod(id string) (bool, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return false, ErrRuntimeStopped
|
||||
return false, define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
return r.state.HasPod(id)
|
||||
|
@ -78,7 +79,7 @@ func (r *Runtime) LookupPod(idOrName string) (*Pod, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
return r.state.LookupPod(idOrName)
|
||||
|
@ -93,7 +94,7 @@ func (r *Runtime) Pods(filters ...PodFilter) ([]*Pod, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
pods, err := r.state.AllPods()
|
||||
|
@ -122,7 +123,7 @@ func (r *Runtime) GetAllPods() ([]*Pod, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
return r.state.AllPods()
|
||||
|
@ -137,7 +138,7 @@ func (r *Runtime) GetLatestPod() (*Pod, error) {
|
|||
return nil, errors.Wrapf(err, "unable to get all pods")
|
||||
}
|
||||
if len(pods) == 0 {
|
||||
return nil, ErrNoSuchPod
|
||||
return nil, define.ErrNoSuchPod
|
||||
}
|
||||
for podIndex, pod := range pods {
|
||||
createdTime := pod.config.CreatedTime
|
||||
|
@ -159,7 +160,7 @@ func (r *Runtime) GetRunningPods() ([]*Pod, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, define.ErrRuntimeStopped
|
||||
}
|
||||
containers, err := r.GetRunningContainers()
|
||||
if err != nil {
|
||||
|
@ -171,7 +172,7 @@ func (r *Runtime) GetRunningPods() ([]*Pod, error) {
|
|||
pods = append(pods, c.PodID())
|
||||
pod, err := r.GetPod(c.PodID())
|
||||
if err != nil {
|
||||
if errors.Cause(err) == ErrPodRemoved || errors.Cause(err) == ErrNoSuchPod {
|
||||
if errors.Cause(err) == define.ErrPodRemoved || errors.Cause(err) == define.ErrNoSuchPod {
|
||||
continue
|
||||
}
|
||||
return nil, err
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/image"
|
||||
"github.com/containers/libpod/pkg/rootless"
|
||||
"github.com/opencontainers/image-spec/specs-go/v1"
|
||||
|
@ -104,7 +105,7 @@ func (r *Runtime) makeInfraContainer(ctx context.Context, p *Pod, imgName, imgID
|
|||
// containers in the pod.
|
||||
func (r *Runtime) createInfraContainer(ctx context.Context, p *Pod) (*Container, error) {
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
newImage, err := r.ImageRuntime().New(ctx, r.config.InfraImage, "", "", nil, nil, image.SigningOptions{}, false, nil)
|
||||
|
|
|
@ -10,6 +10,7 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/containerd/cgroups"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/events"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -22,7 +23,7 @@ func (r *Runtime) NewPod(ctx context.Context, options ...PodCreateOption) (*Pod,
|
|||
defer r.lock.Unlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
pod, err := newPod(r)
|
||||
|
@ -66,7 +67,7 @@ func (r *Runtime) NewPod(ctx context.Context, options ...PodCreateOption) (*Pod,
|
|||
if pod.config.CgroupParent == "" {
|
||||
pod.config.CgroupParent = CgroupfsDefaultCgroupParent
|
||||
} else if strings.HasSuffix(path.Base(pod.config.CgroupParent), ".slice") {
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "systemd slice received as cgroup parent when using cgroupfs")
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "systemd slice received as cgroup parent when using cgroupfs")
|
||||
}
|
||||
// If we are set to use pod cgroups, set the cgroup parent that
|
||||
// all containers in the pod will share
|
||||
|
@ -79,7 +80,7 @@ func (r *Runtime) NewPod(ctx context.Context, options ...PodCreateOption) (*Pod,
|
|||
if pod.config.CgroupParent == "" {
|
||||
pod.config.CgroupParent = SystemdDefaultCgroupParent
|
||||
} else if len(pod.config.CgroupParent) < 6 || !strings.HasSuffix(path.Base(pod.config.CgroupParent), ".slice") {
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "did not receive systemd slice as cgroup parent when using systemd to manage cgroups")
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "did not receive systemd slice as cgroup parent when using systemd to manage cgroups")
|
||||
}
|
||||
// If we are set to use pod cgroups, set the cgroup parent that
|
||||
// all containers in the pod will share
|
||||
|
@ -91,7 +92,7 @@ func (r *Runtime) NewPod(ctx context.Context, options ...PodCreateOption) (*Pod,
|
|||
pod.state.CgroupPath = cgroupPath
|
||||
}
|
||||
default:
|
||||
return nil, errors.Wrapf(ErrInvalidArg, "unsupported CGroup manager: %s - cannot validate cgroup parent", r.config.CgroupManager)
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "unsupported CGroup manager: %s - cannot validate cgroup parent", r.config.CgroupManager)
|
||||
}
|
||||
|
||||
if pod.config.UsePodCgroup {
|
||||
|
@ -146,7 +147,7 @@ func (r *Runtime) removePod(ctx context.Context, p *Pod, removeCtrs, force bool)
|
|||
force = true
|
||||
}
|
||||
if !removeCtrs && numCtrs > 0 {
|
||||
return errors.Wrapf(ErrCtrExists, "pod %s contains containers and cannot be removed", p.ID())
|
||||
return errors.Wrapf(define.ErrCtrExists, "pod %s contains containers and cannot be removed", p.ID())
|
||||
}
|
||||
|
||||
// Go through and lock all containers so we can operate on them all at
|
||||
|
@ -290,7 +291,7 @@ func (r *Runtime) removePod(ctx context.Context, p *Pod, removeCtrs, force bool)
|
|||
// keep going so we make sure to evict the pod before
|
||||
// ending up with an inconsistent state.
|
||||
if removalErr == nil {
|
||||
removalErr = errors.Wrapf(ErrInternal, "unrecognized cgroup manager %s when removing pod %s cgroups", p.runtime.config.CgroupManager, p.ID())
|
||||
removalErr = errors.Wrapf(define.ErrInternal, "unrecognized cgroup manager %s when removing pod %s cgroups", p.runtime.config.CgroupManager, p.ID())
|
||||
} else {
|
||||
logrus.Errorf("Unknown cgroups manager %s specified - cannot remove pod %s cgroup", p.runtime.config.CgroupManager, p.ID())
|
||||
}
|
||||
|
|
|
@ -4,13 +4,15 @@ package libpod
|
|||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
)
|
||||
|
||||
// NewPod makes a new, empty pod
|
||||
func (r *Runtime) NewPod(ctx context.Context, options ...PodCreateOption) (*Pod, error) {
|
||||
return nil, ErrOSNotSupported
|
||||
return nil, define.ErrOSNotSupported
|
||||
}
|
||||
|
||||
func (r *Runtime) removePod(ctx context.Context, p *Pod, removeCtrs, force bool) error {
|
||||
return ErrOSNotSupported
|
||||
return define.ErrOSNotSupported
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/events"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
|
@ -26,7 +27,7 @@ func (r *Runtime) RemoveVolume(ctx context.Context, v *Volume, force bool) error
|
|||
defer r.lock.Unlock()
|
||||
|
||||
if !r.valid {
|
||||
return ErrRuntimeStopped
|
||||
return define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
if !v.valid {
|
||||
|
@ -77,7 +78,7 @@ func (r *Runtime) GetVolume(name string) (*Volume, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
vol, err := r.state.Volume(name)
|
||||
|
@ -103,7 +104,7 @@ func (r *Runtime) HasVolume(name string) (bool, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return false, ErrRuntimeStopped
|
||||
return false, define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
return r.state.HasVolume(name)
|
||||
|
@ -118,7 +119,7 @@ func (r *Runtime) Volumes(filters ...VolumeFilter) ([]*Volume, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
vols, err := r.state.AllVolumes()
|
||||
|
@ -147,7 +148,7 @@ func (r *Runtime) GetAllVolumes() ([]*Volume, error) {
|
|||
defer r.lock.RUnlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, define.ErrRuntimeStopped
|
||||
}
|
||||
|
||||
return r.state.AllVolumes()
|
||||
|
@ -167,7 +168,7 @@ func (r *Runtime) PruneVolumes(ctx context.Context) ([]string, []error) {
|
|||
|
||||
for _, vol := range vols {
|
||||
if err := r.RemoveVolume(ctx, vol, false); err != nil {
|
||||
if errors.Cause(err) != ErrVolumeBeingUsed && errors.Cause(err) != ErrVolumeRemoved {
|
||||
if errors.Cause(err) != define.ErrVolumeBeingUsed && errors.Cause(err) != define.ErrVolumeRemoved {
|
||||
pruneErrors = append(pruneErrors, err)
|
||||
}
|
||||
continue
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/events"
|
||||
"github.com/containers/storage/pkg/stringid"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -20,7 +21,7 @@ func (r *Runtime) NewVolume(ctx context.Context, options ...VolumeCreateOption)
|
|||
defer r.lock.Unlock()
|
||||
|
||||
if !r.valid {
|
||||
return nil, ErrRuntimeStopped
|
||||
return nil, define.ErrRuntimeStopped
|
||||
}
|
||||
return r.newVolume(ctx, options...)
|
||||
}
|
||||
|
@ -86,7 +87,7 @@ func (r *Runtime) removeVolume(ctx context.Context, v *Volume, force bool) error
|
|||
if ok, _ := r.state.HasVolume(v.Name()); !ok {
|
||||
return nil
|
||||
}
|
||||
return ErrVolumeRemoved
|
||||
return define.ErrVolumeRemoved
|
||||
}
|
||||
|
||||
deps, err := r.state.VolumeInUse(v)
|
||||
|
@ -96,7 +97,7 @@ func (r *Runtime) removeVolume(ctx context.Context, v *Volume, force bool) error
|
|||
if len(deps) != 0 {
|
||||
depsStr := strings.Join(deps, ", ")
|
||||
if !force {
|
||||
return errors.Wrapf(ErrVolumeBeingUsed, "volume %s is being used by the following container(s): %s", v.Name(), depsStr)
|
||||
return errors.Wrapf(define.ErrVolumeBeingUsed, "volume %s is being used by the following container(s): %s", v.Name(), depsStr)
|
||||
}
|
||||
|
||||
// We need to remove all containers using the volume
|
||||
|
@ -105,7 +106,7 @@ func (r *Runtime) removeVolume(ctx context.Context, v *Volume, force bool) error
|
|||
if err != nil {
|
||||
// If the container's removed, no point in
|
||||
// erroring.
|
||||
if errors.Cause(err) == ErrNoSuchCtr || errors.Cause(err) == ErrCtrRemoved {
|
||||
if errors.Cause(err) == define.ErrNoSuchCtr || errors.Cause(err) == define.ErrCtrRemoved {
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
|
@ -4,16 +4,18 @@ package libpod
|
|||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
)
|
||||
|
||||
func (r *Runtime) removeVolume(ctx context.Context, v *Volume, force bool) error {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (r *Runtime) newVolume(ctx context.Context, options ...VolumeCreateOption) (*Volume, error) {
|
||||
return nil, ErrNotImplemented
|
||||
return nil, define.ErrNotImplemented
|
||||
}
|
||||
|
||||
func (r *Runtime) NewVolume(ctx context.Context, options ...VolumeCreateOption) (*Volume, error) {
|
||||
return nil, ErrNotImplemented
|
||||
return nil, define.ErrNotImplemented
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/containerd/cgroups"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
|
@ -26,7 +27,7 @@ func (c *Container) GetContainerStats(previousStats *ContainerStats) (*Container
|
|||
}
|
||||
|
||||
if c.state.State != ContainerStateRunning {
|
||||
return stats, ErrCtrStateInvalid
|
||||
return stats, define.ErrCtrStateInvalid
|
||||
}
|
||||
|
||||
cgroupPath, err := c.CGroupPath()
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
package libpod
|
||||
|
||||
import "github.com/containers/libpod/libpod/define"
|
||||
|
||||
// GetContainerStats gets the running stats for a given container
|
||||
func (c *Container) GetContainerStats(previousStats *ContainerStats) (*ContainerStats, error) {
|
||||
return nil, ErrOSNotSupported
|
||||
return nil, define.ErrOSNotSupported
|
||||
}
|
||||
|
|
|
@ -6,9 +6,10 @@ import (
|
|||
|
||||
istorage "github.com/containers/image/storage"
|
||||
"github.com/containers/image/types"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/storage"
|
||||
"github.com/opencontainers/image-spec/specs-go/v1"
|
||||
opentracing "github.com/opentracing/opentracing-go"
|
||||
"github.com/opentracing/opentracing-go"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
@ -71,7 +72,7 @@ func (r *storageService) CreateContainerStorage(ctx context.Context, systemConte
|
|||
if imageName != "" {
|
||||
var ref types.ImageReference
|
||||
if containerName == "" {
|
||||
return ContainerInfo{}, ErrEmptyID
|
||||
return ContainerInfo{}, define.ErrEmptyID
|
||||
}
|
||||
// Check if we have the specified image.
|
||||
ref, err := istorage.Transport.ParseStoreReference(r.store, imageID)
|
||||
|
@ -175,7 +176,7 @@ func (r *storageService) CreateContainerStorage(ctx context.Context, systemConte
|
|||
|
||||
func (r *storageService) DeleteContainer(idOrName string) error {
|
||||
if idOrName == "" {
|
||||
return ErrEmptyID
|
||||
return define.ErrEmptyID
|
||||
}
|
||||
container, err := r.store.Container(idOrName)
|
||||
if err != nil {
|
||||
|
@ -214,7 +215,7 @@ func (r *storageService) MountContainerImage(idOrName string) (string, error) {
|
|||
container, err := r.store.Container(idOrName)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == storage.ErrContainerUnknown {
|
||||
return "", ErrNoSuchCtr
|
||||
return "", define.ErrNoSuchCtr
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
@ -233,7 +234,7 @@ func (r *storageService) MountContainerImage(idOrName string) (string, error) {
|
|||
|
||||
func (r *storageService) UnmountContainerImage(idOrName string, force bool) (bool, error) {
|
||||
if idOrName == "" {
|
||||
return false, ErrEmptyID
|
||||
return false, define.ErrEmptyID
|
||||
}
|
||||
container, err := r.store.Container(idOrName)
|
||||
if err != nil {
|
||||
|
@ -260,7 +261,7 @@ func (r *storageService) UnmountContainerImage(idOrName string, force bool) (boo
|
|||
|
||||
func (r *storageService) MountedContainerImage(idOrName string) (int, error) {
|
||||
if idOrName == "" {
|
||||
return 0, ErrEmptyID
|
||||
return 0, define.ErrEmptyID
|
||||
}
|
||||
container, err := r.store.Container(idOrName)
|
||||
if err != nil {
|
||||
|
@ -277,7 +278,7 @@ func (r *storageService) GetMountpoint(id string) (string, error) {
|
|||
container, err := r.store.Container(id)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == storage.ErrContainerUnknown {
|
||||
return "", ErrNoSuchCtr
|
||||
return "", define.ErrNoSuchCtr
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
@ -293,7 +294,7 @@ func (r *storageService) GetWorkDir(id string) (string, error) {
|
|||
container, err := r.store.Container(id)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == storage.ErrContainerUnknown {
|
||||
return "", ErrNoSuchCtr
|
||||
return "", define.ErrNoSuchCtr
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
@ -304,7 +305,7 @@ func (r *storageService) GetRunDir(id string) (string, error) {
|
|||
container, err := r.store.Container(id)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == storage.ErrContainerUnknown {
|
||||
return "", ErrNoSuchCtr
|
||||
return "", define.ErrNoSuchCtr
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import (
|
|||
|
||||
"github.com/containers/image/signature"
|
||||
"github.com/containers/image/types"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/fsnotify/fsnotify"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -126,7 +127,7 @@ func WaitForFile(path string, chWait chan error, timeout time.Duration) (bool, e
|
|||
return false, errors.Wrapf(err, "checking file %s", path)
|
||||
}
|
||||
case <-timeoutChan:
|
||||
return false, errors.Wrapf(ErrInternal, "timed out waiting for file %s", path)
|
||||
return false, errors.Wrapf(define.ErrInternal, "timed out waiting for file %s", path)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -156,15 +157,15 @@ func sortMounts(m []spec.Mount) []spec.Mount {
|
|||
|
||||
func validPodNSOption(p *Pod, ctrPod string) error {
|
||||
if p == nil {
|
||||
return errors.Wrapf(ErrInvalidArg, "pod passed in was nil. Container may not be associated with a pod")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "pod passed in was nil. Container may not be associated with a pod")
|
||||
}
|
||||
|
||||
if ctrPod == "" {
|
||||
return errors.Wrapf(ErrInvalidArg, "container is not a member of any pod")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "container is not a member of any pod")
|
||||
}
|
||||
|
||||
if ctrPod != p.ID() {
|
||||
return errors.Wrapf(ErrInvalidArg, "pod passed in is not the pod the container is associated with")
|
||||
return errors.Wrapf(define.ErrInvalidArg, "pod passed in is not the pod the container is associated with")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/containerd/cgroups"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/util"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/selinux/go-selinux/label"
|
||||
|
@ -61,7 +62,7 @@ func assembleSystemdCgroupName(baseSlice, newSlice string) (string, error) {
|
|||
const sliceSuffix = ".slice"
|
||||
|
||||
if !strings.HasSuffix(baseSlice, sliceSuffix) {
|
||||
return "", errors.Wrapf(ErrInvalidArg, "cannot assemble cgroup path with base %q - must end in .slice", baseSlice)
|
||||
return "", errors.Wrapf(define.ErrInvalidArg, "cannot assemble cgroup path with base %q - must end in .slice", baseSlice)
|
||||
}
|
||||
|
||||
noSlice := strings.TrimSuffix(baseSlice, sliceSuffix)
|
||||
|
|
|
@ -3,27 +3,28 @@
|
|||
package libpod
|
||||
|
||||
import (
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func systemdSliceFromPath(parent, name string) (string, error) {
|
||||
return "", errors.Wrapf(ErrOSNotSupported, "cgroups are not supported on non-linux OSes")
|
||||
return "", errors.Wrapf(define.ErrOSNotSupported, "cgroups are not supported on non-linux OSes")
|
||||
}
|
||||
|
||||
func makeSystemdCgroup(path string) error {
|
||||
return errors.Wrapf(ErrOSNotSupported, "cgroups are not supported on non-linux OSes")
|
||||
return errors.Wrapf(define.ErrOSNotSupported, "cgroups are not supported on non-linux OSes")
|
||||
}
|
||||
|
||||
func deleteSystemdCgroup(path string) error {
|
||||
return errors.Wrapf(ErrOSNotSupported, "cgroups are not supported on non-linux OSes")
|
||||
return errors.Wrapf(define.ErrOSNotSupported, "cgroups are not supported on non-linux OSes")
|
||||
}
|
||||
|
||||
func assembleSystemdCgroupName(baseSlice, newSlice string) (string, error) {
|
||||
return "", errors.Wrapf(ErrOSNotSupported, "cgroups are not supported on non-linux OSes")
|
||||
return "", errors.Wrapf(define.ErrOSNotSupported, "cgroups are not supported on non-linux OSes")
|
||||
}
|
||||
|
||||
// LabelVolumePath takes a mount path for a volume and gives it an
|
||||
// selinux label of either shared or not
|
||||
func LabelVolumePath(path string, shared bool) error {
|
||||
return ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ import (
|
|||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/cmd/podman/shared"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/image"
|
||||
"github.com/containers/libpod/pkg/adapter/shortcuts"
|
||||
"github.com/containers/libpod/pkg/systemdgen"
|
||||
|
@ -96,10 +97,10 @@ func (r *LocalRuntime) StopContainers(ctx context.Context, cli *cliconfig.StopVa
|
|||
func() error {
|
||||
err := c.StopWithTimeout(*timeout)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == libpod.ErrCtrStopped {
|
||||
if errors.Cause(err) == define.ErrCtrStopped {
|
||||
logrus.Debugf("Container %s is already stopped", c.ID())
|
||||
return nil
|
||||
} else if cli.All && errors.Cause(err) == libpod.ErrCtrStateInvalid {
|
||||
} else if cli.All && errors.Cause(err) == define.ErrCtrStateInvalid {
|
||||
logrus.Debugf("Container %s is not running, could not stop", c.ID())
|
||||
return nil
|
||||
}
|
||||
|
@ -165,7 +166,7 @@ func (r *LocalRuntime) InitContainers(ctx context.Context, cli *cliconfig.InitVa
|
|||
err := ctr.Init(ctx)
|
||||
if err != nil {
|
||||
// If we're initializing all containers, ignore invalid state errors
|
||||
if cli.All && errors.Cause(err) == libpod.ErrCtrStateInvalid {
|
||||
if cli.All && errors.Cause(err) == define.ErrCtrStateInvalid {
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
|
@ -376,7 +377,7 @@ func (r *LocalRuntime) Run(ctx context.Context, c *cliconfig.RunValues, exitCode
|
|||
case "stdin":
|
||||
inputStream = os.Stdin
|
||||
default:
|
||||
return exitCode, errors.Wrapf(libpod.ErrInvalidArg, "invalid stream %q for --attach - must be one of stdin, stdout, or stderr", stream)
|
||||
return exitCode, errors.Wrapf(define.ErrInvalidArg, "invalid stream %q for --attach - must be one of stdin, stdout, or stderr", stream)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -385,7 +386,7 @@ func (r *LocalRuntime) Run(ctx context.Context, c *cliconfig.RunValues, exitCode
|
|||
// We've manually detached from the container
|
||||
// Do not perform cleanup, or wait for container exit code
|
||||
// Just exit immediately
|
||||
if errors.Cause(err) == libpod.ErrDetach {
|
||||
if errors.Cause(err) == define.ErrDetach {
|
||||
exitCode = 0
|
||||
return exitCode, nil
|
||||
}
|
||||
|
@ -403,7 +404,7 @@ func (r *LocalRuntime) Run(ctx context.Context, c *cliconfig.RunValues, exitCode
|
|||
}
|
||||
|
||||
if ecode, err := ctr.Wait(); err != nil {
|
||||
if errors.Cause(err) == libpod.ErrNoSuchCtr {
|
||||
if errors.Cause(err) == define.ErrNoSuchCtr {
|
||||
// The container may have been removed
|
||||
// Go looking for an exit file
|
||||
config, err := r.Runtime.GetConfig()
|
||||
|
@ -496,19 +497,25 @@ func (r *LocalRuntime) Attach(ctx context.Context, c *cliconfig.AttachValues) er
|
|||
inputStream = nil
|
||||
}
|
||||
// If the container is in a pod, also set to recursively start dependencies
|
||||
if err := StartAttachCtr(ctx, ctr, os.Stdout, os.Stderr, inputStream, c.DetachKeys, c.SigProxy, false, ctr.PodID() != ""); err != nil && errors.Cause(err) != libpod.ErrDetach {
|
||||
if err := StartAttachCtr(ctx, ctr, os.Stdout, os.Stderr, inputStream, c.DetachKeys, c.SigProxy, false, ctr.PodID() != ""); err != nil && errors.Cause(err) != define.ErrDetach {
|
||||
return errors.Wrapf(err, "error attaching to container %s", ctr.ID())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Checkpoint one or more containers
|
||||
func (r *LocalRuntime) Checkpoint(c *cliconfig.CheckpointValues, options libpod.ContainerCheckpointOptions) error {
|
||||
func (r *LocalRuntime) Checkpoint(c *cliconfig.CheckpointValues) error {
|
||||
var (
|
||||
containers []*libpod.Container
|
||||
err, lastError error
|
||||
)
|
||||
|
||||
options := libpod.ContainerCheckpointOptions{
|
||||
Keep: c.Keep,
|
||||
KeepRunning: c.LeaveRunning,
|
||||
TCPEstablished: c.TcpEstablished,
|
||||
TargetFile: c.Export,
|
||||
}
|
||||
if c.All {
|
||||
containers, err = r.Runtime.GetRunningContainers()
|
||||
} else {
|
||||
|
@ -610,7 +617,7 @@ func (r *LocalRuntime) Start(ctx context.Context, c *cliconfig.StartValues, sigP
|
|||
// attach to the container and also start it not already running
|
||||
// If the container is in a pod, also set to recursively start dependencies
|
||||
err = StartAttachCtr(ctx, ctr.Container, os.Stdout, os.Stderr, inputStream, c.DetachKeys, sigProxy, !ctrRunning, ctr.PodID() != "")
|
||||
if errors.Cause(err) == libpod.ErrDetach {
|
||||
if errors.Cause(err) == define.ErrDetach {
|
||||
// User manually detached
|
||||
// Exit cleanly immediately
|
||||
exitCode = 0
|
||||
|
@ -626,7 +633,7 @@ func (r *LocalRuntime) Start(ctx context.Context, c *cliconfig.StartValues, sigP
|
|||
}
|
||||
|
||||
if ecode, err := ctr.Wait(); err != nil {
|
||||
if errors.Cause(err) == libpod.ErrNoSuchCtr {
|
||||
if errors.Cause(err) == define.ErrNoSuchCtr {
|
||||
// The container may have been removed
|
||||
// Go looking for an exit file
|
||||
rtc, err := r.GetConfig()
|
||||
|
|
|
@ -16,6 +16,7 @@ import (
|
|||
"github.com/containers/libpod/cmd/podman/shared"
|
||||
iopodman "github.com/containers/libpod/cmd/podman/varlink"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/varlinkapi/virtwriter"
|
||||
"github.com/cri-o/ocicni/pkg/ocicni"
|
||||
"github.com/docker/docker/pkg/term"
|
||||
|
@ -239,11 +240,11 @@ func (r *LocalRuntime) StopContainers(ctx context.Context, cli *cliconfig.StopVa
|
|||
for _, id := range ids {
|
||||
if _, err := iopodman.StopContainer().Call(r.Conn, id, int64(cli.Timeout)); err != nil {
|
||||
transError := TranslateError(err)
|
||||
if errors.Cause(transError) == libpod.ErrCtrStopped {
|
||||
if errors.Cause(transError) == define.ErrCtrStopped {
|
||||
ok = append(ok, id)
|
||||
continue
|
||||
}
|
||||
if errors.Cause(transError) == libpod.ErrCtrStateInvalid && cli.All {
|
||||
if errors.Cause(transError) == define.ErrCtrStateInvalid && cli.All {
|
||||
ok = append(ok, id)
|
||||
continue
|
||||
}
|
||||
|
@ -476,7 +477,7 @@ func (r *LocalRuntime) Run(ctx context.Context, c *cliconfig.RunValues, exitCode
|
|||
}
|
||||
|
||||
func ReadExitFile(runtimeTmp, ctrID string) (int, error) {
|
||||
return 0, libpod.ErrNotImplemented
|
||||
return 0, define.ErrNotImplemented
|
||||
}
|
||||
|
||||
// Ps lists containers based on criteria from user
|
||||
|
@ -662,7 +663,7 @@ func (r *LocalRuntime) Attach(ctx context.Context, c *cliconfig.AttachValues) er
|
|||
}
|
||||
|
||||
// Checkpoint one or more containers
|
||||
func (r *LocalRuntime) Checkpoint(c *cliconfig.CheckpointValues, options libpod.ContainerCheckpointOptions) error {
|
||||
func (r *LocalRuntime) Checkpoint(c *cliconfig.CheckpointValues) error {
|
||||
if c.Export != "" {
|
||||
return errors.New("the remote client does not support exporting checkpoints")
|
||||
}
|
||||
|
@ -689,7 +690,7 @@ func (r *LocalRuntime) Checkpoint(c *cliconfig.CheckpointValues, options libpod.
|
|||
}
|
||||
|
||||
for _, id := range ids {
|
||||
if _, err := iopodman.ContainerCheckpoint().Call(r.Conn, id, options.Keep, options.KeepRunning, options.TCPEstablished); err != nil {
|
||||
if _, err := iopodman.ContainerCheckpoint().Call(r.Conn, id, c.Keep, c.Keep, c.TcpEstablished); err != nil {
|
||||
if lastError != nil {
|
||||
fmt.Fprintln(os.Stderr, lastError)
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ package adapter
|
|||
|
||||
import (
|
||||
iopodman "github.com/containers/libpod/cmd/podman/varlink"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
|
@ -21,11 +21,11 @@ func TranslateMapErrors(failures map[string]error) map[string]error {
|
|||
func TranslateError(err error) error {
|
||||
switch err.(type) {
|
||||
case *iopodman.ContainerNotFound:
|
||||
return errors.Wrap(libpod.ErrNoSuchCtr, err.Error())
|
||||
return errors.Wrap(define.ErrNoSuchCtr, err.Error())
|
||||
case *iopodman.ErrCtrStopped:
|
||||
return errors.Wrap(libpod.ErrCtrStopped, err.Error())
|
||||
return errors.Wrap(define.ErrCtrStopped, err.Error())
|
||||
case *iopodman.InvalidState:
|
||||
return errors.Wrap(libpod.ErrCtrStateInvalid, err.Error())
|
||||
return errors.Wrap(define.ErrCtrStateInvalid, err.Error())
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import (
|
|||
"github.com/containers/libpod/cmd/podman/shared"
|
||||
"github.com/containers/libpod/cmd/podman/varlink"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/varlinkapi"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
|
@ -509,7 +510,7 @@ func (p *Pod) GetPodStats(previousContainerStats map[string]*libpod.ContainerSta
|
|||
newStats := varlinkapi.ContainerStatsToLibpodContainerStats(stats)
|
||||
// If the container wasn't running, don't include it
|
||||
// but also suppress the error
|
||||
if err != nil && errors.Cause(err) != libpod.ErrCtrStateInvalid {
|
||||
if err != nil && errors.Cause(err) != define.ErrCtrStateInvalid {
|
||||
return nil, err
|
||||
}
|
||||
if err == nil {
|
||||
|
|
|
@ -23,6 +23,7 @@ import (
|
|||
"github.com/containers/libpod/cmd/podman/remoteclientconfig"
|
||||
"github.com/containers/libpod/cmd/podman/varlink"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/events"
|
||||
"github.com/containers/libpod/libpod/image"
|
||||
"github.com/containers/libpod/utils"
|
||||
|
@ -527,12 +528,12 @@ func (r *LocalRuntime) SendFileOverVarlink(source string) (string, error) {
|
|||
|
||||
// GetAllVolumes retrieves all the volumes
|
||||
func (r *LocalRuntime) GetAllVolumes() ([]*libpod.Volume, error) {
|
||||
return nil, libpod.ErrNotImplemented
|
||||
return nil, define.ErrNotImplemented
|
||||
}
|
||||
|
||||
// RemoveVolume removes a volumes
|
||||
func (r *LocalRuntime) RemoveVolume(ctx context.Context, v *libpod.Volume, force, prune bool) error {
|
||||
return libpod.ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
// GetContainers retrieves all containers from the state
|
||||
|
@ -540,14 +541,14 @@ func (r *LocalRuntime) RemoveVolume(ctx context.Context, v *libpod.Volume, force
|
|||
// the output. Multiple filters are handled by ANDing their output, so only
|
||||
// containers matching all filters are returned
|
||||
func (r *LocalRuntime) GetContainers(filters ...libpod.ContainerFilter) ([]*libpod.Container, error) {
|
||||
return nil, libpod.ErrNotImplemented
|
||||
return nil, define.ErrNotImplemented
|
||||
}
|
||||
|
||||
// RemoveContainer removes the given container
|
||||
// If force is specified, the container will be stopped first
|
||||
// Otherwise, RemoveContainer will return an error if the container is running
|
||||
func (r *LocalRuntime) RemoveContainer(ctx context.Context, c *libpod.Container, force, volumes bool) error {
|
||||
return libpod.ErrNotImplemented
|
||||
return define.ErrNotImplemented
|
||||
}
|
||||
|
||||
// CreateVolume creates a volume over a varlink connection for the remote client
|
||||
|
@ -771,7 +772,7 @@ func IsImageNotFound(err error) bool {
|
|||
|
||||
// HealthCheck executes a container's healthcheck over a varlink connection
|
||||
func (r *LocalRuntime) HealthCheck(c *cliconfig.HealthCheckValues) (libpod.HealthCheckStatus, error) {
|
||||
return -1, libpod.ErrNotImplemented
|
||||
return -1, define.ErrNotImplemented
|
||||
}
|
||||
|
||||
// Events monitors libpod/podman events over a varlink connection
|
||||
|
|
|
@ -2,6 +2,7 @@ package createconfig
|
|||
|
||||
import (
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
|
@ -11,9 +12,9 @@ import (
|
|||
// container with libpod from a completed CreateConfig struct.
|
||||
func (config *CreateConfig) MakeContainerConfig(runtime *libpod.Runtime, pod *libpod.Pod) (*spec.Spec, []libpod.CtrCreateOption, error) {
|
||||
if config.Pod != "" && pod == nil {
|
||||
return nil, nil, errors.Wrapf(libpod.ErrInvalidArg, "pod was specified but no pod passed")
|
||||
return nil, nil, errors.Wrapf(define.ErrInvalidArg, "pod was specified but no pod passed")
|
||||
} else if config.Pod == "" && pod != nil {
|
||||
return nil, nil, errors.Wrapf(libpod.ErrInvalidArg, "pod was given but no pod is specified")
|
||||
return nil, nil, errors.Wrapf(define.ErrInvalidArg, "pod was given but no pod is specified")
|
||||
}
|
||||
|
||||
// Parse volumes flag into OCI spec mounts and libpod Named Volumes.
|
||||
|
|
|
@ -9,6 +9,7 @@ import (
|
|||
|
||||
"github.com/containers/image/manifest"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/namespaces"
|
||||
"github.com/containers/storage"
|
||||
"github.com/cri-o/ocicni/pkg/ocicni"
|
||||
|
@ -331,9 +332,9 @@ func (c *CreateConfig) getContainerCreateOptions(runtime *libpod.Runtime, pod *l
|
|||
if c.IPAddress != "" {
|
||||
ip := net.ParseIP(c.IPAddress)
|
||||
if ip == nil {
|
||||
return nil, errors.Wrapf(libpod.ErrInvalidArg, "cannot parse %s as IP address", c.IPAddress)
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "cannot parse %s as IP address", c.IPAddress)
|
||||
} else if ip.To4() == nil {
|
||||
return nil, errors.Wrapf(libpod.ErrInvalidArg, "%s is not an IPv4 address", c.IPAddress)
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "%s is not an IPv4 address", c.IPAddress)
|
||||
}
|
||||
options = append(options, libpod.WithStaticIP(ip))
|
||||
}
|
||||
|
@ -371,7 +372,7 @@ func (c *CreateConfig) getContainerCreateOptions(runtime *libpod.Runtime, pod *l
|
|||
|
||||
if c.RestartPolicy != "" {
|
||||
if c.RestartPolicy == "unless-stopped" {
|
||||
return nil, errors.Wrapf(libpod.ErrInvalidArg, "the unless-stopped restart policy is not supported")
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "the unless-stopped restart policy is not supported")
|
||||
}
|
||||
|
||||
split := strings.Split(c.RestartPolicy, ":")
|
||||
|
@ -381,7 +382,7 @@ func (c *CreateConfig) getContainerCreateOptions(runtime *libpod.Runtime, pod *l
|
|||
return nil, errors.Wrapf(err, "%s is not a valid number of retries for restart policy", split[1])
|
||||
}
|
||||
if numTries < 0 {
|
||||
return nil, errors.Wrapf(libpod.ErrInvalidArg, "restart policy requires a positive number of retries")
|
||||
return nil, errors.Wrapf(define.ErrInvalidArg, "restart policy requires a positive number of retries")
|
||||
}
|
||||
options = append(options, libpod.WithRestartRetries(uint(numTries)))
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
|
||||
"github.com/containers/libpod/cmd/podman/varlink"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/varlinkapi/virtwriter"
|
||||
"github.com/sirupsen/logrus"
|
||||
"k8s.io/client-go/tools/remotecommand"
|
||||
|
@ -78,7 +79,7 @@ func (i *LibpodAPI) Attach(call iopodman.VarlinkCall, name string, detachKeys st
|
|||
finalErr = startAndAttach(ctr, streams, detachKeys, resize, errChan)
|
||||
}
|
||||
|
||||
if finalErr != libpod.ErrDetach && finalErr != nil {
|
||||
if finalErr != define.ErrDetach && finalErr != nil {
|
||||
logrus.Error(finalErr)
|
||||
}
|
||||
quitWriter := virtwriter.NewVirtWriteCloser(writer, virtwriter.Quit)
|
||||
|
|
|
@ -16,6 +16,7 @@ import (
|
|||
"github.com/containers/libpod/cmd/podman/shared"
|
||||
"github.com/containers/libpod/cmd/podman/varlink"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/adapter/shortcuts"
|
||||
cc "github.com/containers/libpod/pkg/spec"
|
||||
"github.com/containers/storage/pkg/archive"
|
||||
|
@ -119,7 +120,7 @@ func (i *LibpodAPI) GetContainersByContext(call iopodman.VarlinkCall, all, lates
|
|||
|
||||
ctrs, err := shortcuts.GetContainersByContext(all, latest, input, i.Runtime)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == libpod.ErrNoSuchCtr {
|
||||
if errors.Cause(err) == define.ErrNoSuchCtr {
|
||||
return call.ReplyContainerNotFound("", err.Error())
|
||||
}
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
|
@ -326,7 +327,7 @@ func (i *LibpodAPI) GetContainerStats(call iopodman.VarlinkCall, name string) er
|
|||
}
|
||||
containerStats, err := ctr.GetContainerStats(&libpod.ContainerStats{})
|
||||
if err != nil {
|
||||
if errors.Cause(err) == libpod.ErrCtrStateInvalid {
|
||||
if errors.Cause(err) == define.ErrCtrStateInvalid {
|
||||
return call.ReplyNoContainerRunning()
|
||||
}
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
|
@ -379,7 +380,7 @@ func (i *LibpodAPI) InitContainer(call iopodman.VarlinkCall, name string) error
|
|||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
}
|
||||
if err := ctr.Init(getContext()); err != nil {
|
||||
if errors.Cause(err) == libpod.ErrCtrStateInvalid {
|
||||
if errors.Cause(err) == define.ErrCtrStateInvalid {
|
||||
return call.ReplyInvalidState(ctr.ID(), err.Error())
|
||||
}
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
|
@ -394,10 +395,10 @@ func (i *LibpodAPI) StopContainer(call iopodman.VarlinkCall, name string, timeou
|
|||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
}
|
||||
if err := ctr.StopWithTimeout(uint(timeout)); err != nil {
|
||||
if errors.Cause(err) == libpod.ErrCtrStopped {
|
||||
if errors.Cause(err) == define.ErrCtrStopped {
|
||||
return call.ReplyErrCtrStopped(ctr.ID())
|
||||
}
|
||||
if errors.Cause(err) == libpod.ErrCtrStateInvalid {
|
||||
if errors.Cause(err) == define.ErrCtrStateInvalid {
|
||||
return call.ReplyInvalidState(ctr.ID(), err.Error())
|
||||
}
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
|
@ -420,7 +421,7 @@ func (i *LibpodAPI) RestartContainer(call iopodman.VarlinkCall, name string, tim
|
|||
// ContainerExists looks in local storage for the existence of a container
|
||||
func (i *LibpodAPI) ContainerExists(call iopodman.VarlinkCall, name string) error {
|
||||
_, err := i.Runtime.LookupContainer(name)
|
||||
if errors.Cause(err) == libpod.ErrNoSuchCtr {
|
||||
if errors.Cause(err) == define.ErrNoSuchCtr {
|
||||
return call.ReplyContainerExists(1)
|
||||
}
|
||||
if err != nil {
|
||||
|
|
|
@ -23,6 +23,7 @@ import (
|
|||
"github.com/containers/libpod/cmd/podman/shared"
|
||||
"github.com/containers/libpod/cmd/podman/varlink"
|
||||
"github.com/containers/libpod/libpod"
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/libpod/image"
|
||||
"github.com/containers/libpod/pkg/util"
|
||||
"github.com/containers/libpod/utils"
|
||||
|
@ -760,7 +761,7 @@ func (i *LibpodAPI) ImagesPrune(call iopodman.VarlinkCall, all bool) error {
|
|||
func (i *LibpodAPI) ImageSave(call iopodman.VarlinkCall, options iopodman.ImageSaveOptions) error {
|
||||
newImage, err := i.Runtime.ImageRuntime().NewFromLocal(options.Name)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == libpod.ErrNoSuchImage {
|
||||
if errors.Cause(err) == define.ErrNoSuchImage {
|
||||
return call.ReplyImageNotFound(options.Name, err.Error())
|
||||
}
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
|
|
Loading…
Reference in New Issue