diff --git a/KPOD_VERSION b/KPOD_VERSION deleted file mode 100644 index ceab6e11..00000000 --- a/KPOD_VERSION +++ /dev/null @@ -1 +0,0 @@ -0.1 \ No newline at end of file diff --git a/Makefile b/Makefile index 8775ae85..f28e0e5f 100644 --- a/Makefile +++ b/Makefile @@ -23,8 +23,6 @@ COMMIT_NO := $(shell git rev-parse HEAD 2> /dev/null || true) GIT_COMMIT := $(if $(shell git status --porcelain --untracked-files=no),"${COMMIT_NO}-dirty","${COMMIT_NO}") BUILD_INFO := $(shell date +%s) -KPOD_VERSION := ${shell cat ./KPOD_VERSION} - # If GOPATH not specified, use one in the local directory ifeq ($(GOPATH),) export GOPATH := $(CURDIR)/_output @@ -37,9 +35,7 @@ GOPKGBASEDIR := $(shell dirname "$(GOPKGDIR)") VPATH := $(VPATH):$(GOPATH) SHRINKFLAGS := -s -w BASE_LDFLAGS := ${SHRINKFLAGS} -X main.gitCommit=${GIT_COMMIT} -X main.buildInfo=${BUILD_INFO} -KPOD_LDFLAGS := -X main.kpodVersion=${KPOD_VERSION} LDFLAGS := -ldflags '${BASE_LDFLAGS}' -LDFLAGS_KPOD := -ldflags '${BASE_LDFLAGS} ${KPOD_LDFLAGS}' all: binaries crio.conf docs @@ -49,7 +45,7 @@ help: @echo "Usage: make " @echo @echo " * 'install' - Install binaries to system locations" - @echo " * 'binaries' - Build crio, conmon, pause, crioctl and kpod" + @echo " * 'binaries' - Build crio, conmon, pause, and crioctl" @echo " * 'integration' - Execute integration tests" @echo " * 'clean' - Clean artifacts" @echo " * 'lint' - Execute the source code linter" @@ -90,9 +86,6 @@ crio: .gopathok $(shell hack/find-godeps.sh $(GOPKGDIR) cmd/crio $(PROJECT)) crioctl: .gopathok $(shell hack/find-godeps.sh $(GOPKGDIR) cmd/crioctl $(PROJECT)) $(GO) build $(LDFLAGS) -tags "$(BUILDTAGS) containers_image_ostree_stub" -o bin/$@ $(PROJECT)/cmd/crioctl -kpod: .gopathok $(shell hack/find-godeps.sh $(GOPKGDIR) cmd/kpod $(PROJECT)) - $(GO) build $(LDFLAGS_KPOD) -tags "$(BUILDTAGS)" -o bin/$@ $(PROJECT)/cmd/kpod - crio.conf: crio ./bin/crio --config="" config --default > crio.conf @@ -105,7 +98,7 @@ endif rm -fr test/testdata/redis-image find . -name \*~ -delete find . -name \#\* -delete - rm -f bin/crioctl bin/crio bin/kpod + rm -f bin/crioctl bin/crio make -C conmon clean make -C pause clean rm -f test/bin2img/bin2img @@ -127,7 +120,7 @@ testunit: localintegration: clean binaries test-binaries ./test/test_runner.sh ${TESTFLAGS} -binaries: crio conmon pause kpod crioctl +binaries: crio conmon pause crioctl test-binaries: test/bin2img/bin2img test/copyimg/copyimg test/checkseccomp/checkseccomp MANPAGES_MD := $(wildcard docs/*.md) @@ -149,7 +142,6 @@ install: .gopathok install.bin install.man install.bin: install ${SELINUXOPT} -D -m 755 bin/crio $(BINDIR)/crio install ${SELINUXOPT} -D -m 755 bin/crioctl $(BINDIR)/crioctl - install ${SELINUXOPT} -D -m 755 bin/kpod $(BINDIR)/kpod install ${SELINUXOPT} -D -m 755 bin/conmon $(LIBEXECDIR)/crio/conmon install ${SELINUXOPT} -D -m 755 bin/pause $(LIBEXECDIR)/crio/pause @@ -168,7 +160,6 @@ install.config: install.completions: install ${SELINUXOPT} -d -m 755 ${BASHINSTALLDIR} - install ${SELINUXOPT} -m 644 -D completions/bash/kpod ${BASHINSTALLDIR} install.systemd: install ${SELINUXOPT} -D -m 644 contrib/systemd/crio.service $(PREFIX)/lib/systemd/system/crio.service diff --git a/README.md b/README.md index dd288114..d58bbde1 100644 --- a/README.md +++ b/README.md @@ -40,38 +40,8 @@ It is currently in active development in the Kubernetes community through the [d | Command | Description | Demo| | ---------------------------------------------------- | --------------------------------------------------------------------------|-----| | [crio(8)](/docs/crio.8.md) | OCI Kubernetes Container Runtime daemon || -| [kpod(1)](/docs/kpod.1.md) | Simple management tool for pods and images || -| [kpod-attach(1)](/docs/kpod-attach.1.md) | Instead of providing a `kpod attach` command, the man page `kpod-attach` describes how to use the `kpod logs` and `kpod exec` commands to achieve the same goals as `kpod attach`.|| -| [kpod-cp(1)](/docs/kpod-cp.1.md) | Instead of providing a `kpod cp` command, the man page `kpod-cp` describes how to use the `kpod mount` command to have even more flexibility and functionality.|| -| [kpod-create(1)](/docs/kpod-create.1.md) | Create a new container || -| [kpod-diff(1)](/docs/kpod-diff.1.md) | Inspect changes on a container or image's filesystem || -| [kpod-export(1)](/docs/kpod-export.1.md) | Export container's filesystem contents as a tar archive |[![...](/docs/play.png)](https://asciinema.org/a/913lBIRAg5hK8asyIhhkQVLtV)| -| [kpod-history(1)](/docs/kpod-history.1.md) | Shows the history of an image |[![...](/docs/play.png)](https://asciinema.org/a/bCvUQJ6DkxInMELZdc5DinNSx)| -| [kpod-images(1)](/docs/kpod-images.1.md) | List images in local storage |[![...](/docs/play.png)](https://asciinema.org/a/133649)| -| [kpod-info(1)](/docs/kpod-info.1.md) | Display system information || -| [kpod-inspect(1)](/docs/kpod-inspect.1.md) | Display the configuration of a container or image |[![...](/docs/play.png)](https://asciinema.org/a/133418)| -| [kpod-kill(1)](/docs/kpod-kill.1.md) | Kill the main process in one or more running containers |[![...](/docs/play.png)](https://asciinema.org/a/3jNos0A5yzO4hChu7ddKkUPw7)| -| [kpod-load(1)](/docs/kpod-load.1.md) | Load an image from docker archive or oci |[![...](/docs/play.png)](https://asciinema.org/a/kp8kOaexEhEa20P1KLZ3L5X4g)| -| [kpod-login(1)](/docs/kpod-login.1.md) | Login to a container registry |[![...](/docs/play.png)](https://asciinema.org/a/oNiPgmfo1FjV2YdesiLpvihtV)| -| [kpod-logout(1)](/docs/kpod-logout.1.md) | Logout of a container registry |[![...](/docs/play.png)](https://asciinema.org/a/oNiPgmfo1FjV2YdesiLpvihtV)| -| [kpod-logs(1)](/docs/kpod-logs.1.md) | Display the logs of a container || -| [kpod-mount(1)](/docs/kpod-mount.1.md) | Mount a working container's root filesystem || -| [kpod-pause(1)](/docs/kpod-pause.1.md) | Pause one or more running containers |[![...](/docs/play.png)](https://asciinema.org/a/141292)| -| [kpod-ps(1)](/docs/kpod-ps.1.md) | Prints out information about containers |[![...](/docs/play.png)](https://asciinema.org/a/bbT41kac6CwZ5giESmZLIaTLR)| -| [kpod-pull(1)](/docs/kpod-pull.1.md) | Pull an image from a registry |[![...](/docs/play.png)](https://asciinema.org/a/lr4zfoynHJOUNu1KaXa1dwG2X)| -| [kpod-push(1)](/docs/kpod-push.1.md) | Push an image to a specified destination |[![...](/docs/play.png)](https://asciinema.org/a/133276)| -| [kpod-rename(1)](/docs/kpod-rename.1.md) | Rename a container || -| [kpod-rm(1)](/docs/kpod-rm.1.md) | Removes one or more containers |[![...](/docs/play.png)](https://asciinema.org/a/7EMk22WrfGtKWmgHJX9Nze1Qp)| -| [kpod-rmi(1)](/docs/kpod-rmi.1.md) | Removes one or more images |[![...](/docs/play.png)](https://asciinema.org/a/133799)| -| [kpod-run(1)](/docs/kpod-run.1.md) | Run a command in a new container || -| [kpod-save(1)](/docs/kpod-save.1.md) | Saves an image to an archive |[![...](/docs/play.png)](https://asciinema.org/a/kp8kOaexEhEa20P1KLZ3L5X4g)| -| [kpod-stats(1)](/docs/kpod-stats.1.md) | Display a live stream of one or more containers' resource usage statistics|| -| [kpod-stop(1)](/docs/kpod-stop.1.md) | Stops one or more running containers || -| [kpod-tag(1)](/docs/kpod-tag.1.md) | Add an additional name to a local image |[![...](/docs/play.png)](https://asciinema.org/a/133803)| -| [kpod-umount(1)](/docs/kpod-umount.1.md) | Unmount a working container's root filesystem || -| [kpod-unpause(1)](/docs/kpod-unpause.1.md) | Unpause one or more running containers |[![...](/docs/play.png)](https://asciinema.org/a/141292)| -| [kpod-version(1)](/docs/kpod-version.1.md) | Display the version information |[![...](/docs/play.png)](https://asciinema.org/a/mfrn61pjZT9Fc8L4NbfdSqfgu)| -| [kpod-wait(1)](/docs/kpod-wait.1.md) | Wait on one or more containers to stop and print their exit codes|| + +Note that kpod and its container management and debugging commands have moved to a separate repository, located [here](https://github.com/projectatomic/libpod). ## Configuration | File | Description | diff --git a/cmd/kpod/README.md b/cmd/kpod/README.md deleted file mode 100644 index 7a79e489..00000000 --- a/cmd/kpod/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# kpod - Simple debugging tool for pods and images -kpod is a simple client only tool to help with debugging issues when daemons such as CRI runtime and the kubelet are not responding or -failing. A shared API layer could be created to share code between the daemon and kpod. kpod does not require any daemon running. kpod -utilizes the same underlying components that crio uses i.e. containers/image, container/storage, oci-runtime-tool/generate, runc or -any other OCI compatible runtime. kpod shares state with crio and so has the capability to debug pods/images created by crio. - -## Use cases -1. List pods. -2. Launch simple pods (that require no daemon support). -3. Exec commands in a container in a pod. -4. Launch additional containers in a pod. -5. List images. -6. Remove images not in use. -7. Pull images. -8. Check image size. -9. Report pod disk resource usage. diff --git a/cmd/kpod/common.go b/cmd/kpod/common.go deleted file mode 100644 index 915069bb..00000000 --- a/cmd/kpod/common.go +++ /dev/null @@ -1,450 +0,0 @@ -package main - -import ( - "os" - "reflect" - "regexp" - "strings" - - is "github.com/containers/image/storage" - "github.com/containers/storage" - "github.com/fatih/camelcase" - "github.com/kubernetes-incubator/cri-o/libkpod" - "github.com/kubernetes-incubator/cri-o/libpod" - "github.com/kubernetes-incubator/cri-o/server" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -var ( - stores = make(map[storage.Store]struct{}) -) - -func getStore(c *libkpod.Config) (storage.Store, error) { - options := storage.DefaultStoreOptions - options.GraphRoot = c.Root - options.RunRoot = c.RunRoot - options.GraphDriverName = c.Storage - options.GraphDriverOptions = c.StorageOptions - - store, err := storage.GetStore(options) - if err != nil { - return nil, err - } - is.Transport.SetStore(store) - stores[store] = struct{}{} - return store, nil -} - -func getRuntime(c *cli.Context) (*libpod.Runtime, error) { - - config, err := getConfig(c) - if err != nil { - return nil, errors.Wrapf(err, "could not get config") - } - - options := storage.DefaultStoreOptions - options.GraphRoot = config.Root - options.RunRoot = config.RunRoot - options.GraphDriverName = config.Storage - options.GraphDriverOptions = config.StorageOptions - - return libpod.NewRuntime(libpod.WithStorageConfig(options), libpod.WithConmonPath(config.Conmon), libpod.WithOCIRuntime(config.Runtime)) -} - -func shutdownStores() { - for store := range stores { - if _, err := store.Shutdown(false); err != nil { - break - } - } -} - -func getConfig(c *cli.Context) (*libkpod.Config, error) { - config := libkpod.DefaultConfig() - var configFile string - if c.GlobalIsSet("config") { - configFile = c.GlobalString("config") - } else if _, err := os.Stat(server.CrioConfigPath); err == nil { - configFile = server.CrioConfigPath - } - // load and merge the configfile from the commandline or use - // the default crio config file - if configFile != "" { - err := config.UpdateFromFile(configFile) - if err != nil { - return config, err - } - } - if c.GlobalIsSet("root") { - config.Root = c.GlobalString("root") - } - if c.GlobalIsSet("runroot") { - config.RunRoot = c.GlobalString("runroot") - } - if c.GlobalIsSet("conmon") { - config.Conmon = c.GlobalString("conmon") - } - if c.GlobalIsSet("storage-driver") { - config.Storage = c.GlobalString("storage-driver") - } - if c.GlobalIsSet("storage-opt") { - opts := c.GlobalStringSlice("storage-opt") - if len(opts) > 0 { - config.StorageOptions = opts - } - } - if c.GlobalIsSet("runtime") { - config.Runtime = c.GlobalString("runtime") - } - return config, nil -} - -func splitCamelCase(src string) string { - entries := camelcase.Split(src) - return strings.Join(entries, " ") -} - -// validateFlags searches for StringFlags or StringSlice flags that never had -// a value set. This commonly occurs when the CLI mistakenly takes the next -// option and uses it as a value. -func validateFlags(c *cli.Context, flags []cli.Flag) error { - for _, flag := range flags { - switch reflect.TypeOf(flag).String() { - case "cli.StringSliceFlag": - { - f := flag.(cli.StringSliceFlag) - name := strings.Split(f.Name, ",") - val := c.StringSlice(name[0]) - for _, v := range val { - if ok, _ := regexp.MatchString("^-.+", v); ok { - return errors.Errorf("option --%s requires a value", name[0]) - } - } - } - case "cli.StringFlag": - { - f := flag.(cli.StringFlag) - name := strings.Split(f.Name, ",") - val := c.String(name[0]) - if ok, _ := regexp.MatchString("^-.+", val); ok { - return errors.Errorf("option --%s requires a value", name[0]) - } - } - } - } - return nil -} - -// Common flags shared between commands -var createFlags = []cli.Flag{ - cli.StringSliceFlag{ - Name: "add-host", - Usage: "Add a custom host-to-IP mapping (host:ip) (default [])", - }, - cli.StringSliceFlag{ - Name: "attach, a", - Usage: "Attach to STDIN, STDOUT or STDERR (default [])", - }, - cli.StringFlag{ - Name: "blkio-weight", - Usage: "Block IO weight (relative weight) accepts a weight value between 10 and 1000.", - }, - cli.StringSliceFlag{ - Name: "blkio-weight-device", - Usage: "Block IO weight (relative device weight, format: `DEVICE_NAME:WEIGHT`)", - }, - cli.StringSliceFlag{ - Name: "cap-add", - Usage: "Add capabilities to the container", - }, - cli.StringSliceFlag{ - Name: "cap-drop", - Usage: "Drop capabilities from the container", - }, - cli.StringFlag{ - Name: "cgroup-parent", - Usage: "Optional parent cgroup for the container", - }, - cli.StringFlag{ - Name: "cidfile", - Usage: "Write the container ID to the file", - }, - cli.Uint64Flag{ - Name: "cpu-period", - Usage: "Limit the CPU CFS (Completely Fair Scheduler) period", - }, - cli.Int64Flag{ - Name: "cpu-quota", - Usage: "Limit the CPU CFS (Completely Fair Scheduler) quota", - }, - cli.Uint64Flag{ - Name: "cpu-rt-period", - Usage: "Limit the CPU real-time period in microseconds", - }, - cli.Int64Flag{ - Name: "cpu-rt-runtime", - Usage: "Limit the CPU real-time runtime in microseconds", - }, - cli.Uint64Flag{ - Name: "cpu-shares", - Usage: "CPU shares (relative weight)", - }, - cli.StringFlag{ - Name: "cpus", - Usage: "Number of CPUs. The default is 0.000 which means no limit", - }, - cli.StringFlag{ - Name: "cpuset-cpus", - Usage: "CPUs in which to allow execution (0-3, 0,1)", - }, - cli.StringFlag{ - Name: "cpuset-mems", - Usage: "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems.", - }, - cli.BoolFlag{ - Name: "detach, d", - Usage: "Run container in background and print container ID", - }, - cli.StringFlag{ - Name: "detach-keys", - Usage: "Override the key sequence for detaching a container. Format is a single character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`", - }, - cli.StringSliceFlag{ - Name: "device", - Usage: "Add a host device to the container (default [])", - }, - cli.StringSliceFlag{ - Name: "device-read-bps", - Usage: "Limit read rate (bytes per second) from a device (e.g. --device-read-bps=/dev/sda:1mb)", - }, - cli.StringSliceFlag{ - Name: "device-read-iops", - Usage: "Limit read rate (IO per second) from a device (e.g. --device-read-iops=/dev/sda:1000)", - }, - cli.StringSliceFlag{ - Name: "device-write-bps", - Usage: "Limit write rate (bytes per second) to a device (e.g. --device-write-bps=/dev/sda:1mb)", - }, - cli.StringSliceFlag{ - Name: "device-write-iops", - Usage: "Limit write rate (IO per second) to a device (e.g. --device-write-iops=/dev/sda:1000)", - }, - cli.StringSliceFlag{ - Name: "dns", - Usage: "Set custom DNS servers", - }, - cli.StringSliceFlag{ - Name: "dns-opt", - Usage: "Set custom DNS options", - }, - cli.StringSliceFlag{ - Name: "dns-search", - Usage: "Set custom DNS search domains", - }, - cli.StringFlag{ - Name: "entrypoint", - Usage: "Overwrite the default ENTRYPOINT of the image", - }, - cli.StringSliceFlag{ - Name: "env, e", - Usage: "Set environment variables in container", - }, - cli.StringSliceFlag{ - Name: "env-file", - Usage: "Read in a file of environment variables", - }, - cli.StringSliceFlag{ - Name: "expose", - Usage: "Expose a port or a range of ports (default [])", - }, - cli.StringSliceFlag{ - Name: "group-add", - Usage: "Add additional groups to join (default [])", - }, - cli.StringFlag{ - Name: "hostname", - Usage: "Set container hostname", - }, - cli.BoolFlag{ - Name: "interactive, i", - Usage: "Keep STDIN open even if not attached", - }, - cli.StringFlag{ - Name: "ip", - Usage: "Container IPv4 address (e.g. 172.23.0.9)", - }, - cli.StringFlag{ - Name: "ip6", - Usage: "Container IPv6 address (e.g. 2001:db8::1b99)", - }, - cli.StringFlag{ - Name: "ipc", - Usage: "IPC Namespace to use", - }, - cli.StringFlag{ - Name: "kernel-memory", - Usage: "Kernel memory limit (format: `[]`, where unit = b, k, m or g)", - }, - cli.StringSliceFlag{ - Name: "label", - Usage: "Set metadata on container (default [])", - }, - cli.StringSliceFlag{ - Name: "label-file", - Usage: "Read in a line delimited file of labels (default [])", - }, - cli.StringSliceFlag{ - Name: "link-local-ip", - Usage: "Container IPv4/IPv6 link-local addresses (default [])", - }, - cli.StringFlag{ - Name: "log-driver", - Usage: "Logging driver for the container", - }, - cli.StringSliceFlag{ - Name: "log-opt", - Usage: "Logging driver options (default [])", - }, - cli.StringFlag{ - Name: "mac-address", - Usage: "Container MAC address (e.g. 92:d0:c6:0a:29:33)", - }, - cli.StringFlag{ - Name: "memory, m", - Usage: "Memory limit (format: [], where unit = b, k, m or g)", - }, - cli.StringFlag{ - Name: "memory-reservation", - Usage: "Memory soft limit (format: [], where unit = b, k, m or g)", - }, - cli.StringFlag{ - Name: "memory-swap", - Usage: "Swap limit equal to memory plus swap: '-1' to enable unlimited swap", - }, - cli.Int64Flag{ - Name: "memory-swappiness", - Usage: "Tune container memory swappiness (0 to 100) (default -1)", - }, - cli.StringFlag{ - Name: "name", - Usage: "Assign a name to the container", - }, - cli.StringFlag{ - Name: "net", - Usage: "Setup the network namespace", - }, - cli.StringFlag{ - Name: "network", - Usage: "Connect a container to a network (default 'default')", - }, - cli.StringSliceFlag{ - Name: "network-alias", - Usage: "Add network-scoped alias for the container (default [])", - }, - cli.BoolFlag{ - Name: "oom-kill-disable", - Usage: "Disable OOM Killer", - }, - cli.StringFlag{ - Name: "oom-score-adj", - Usage: "Tune the host's OOM preferences (-1000 to 1000)", - }, - cli.StringFlag{ - Name: "pid", - Usage: "PID Namespace to use", - }, - cli.Int64Flag{ - Name: "pids-limit", - Usage: "Tune container pids limit (set -1 for unlimited)", - }, - cli.StringFlag{ - Name: "pod", - Usage: "Run container in an existing pod", - }, - cli.BoolFlag{ - Name: "privileged", - Usage: "Give extended privileges to container", - }, - cli.StringSliceFlag{ - Name: "publish, p", - Usage: "Publish a container's port, or a range of ports, to the host (default [])", - }, - cli.BoolFlag{ - Name: "publish-all, P", - Usage: "Publish all exposed ports to random ports on the host interface", - }, - cli.BoolFlag{ - Name: "read-only", - Usage: "Make containers root filesystem read-only", - }, - cli.BoolFlag{ - Name: "rm", - Usage: "Remove container (and pod if created) after exit", - }, - cli.StringSliceFlag{ - Name: "security-opt", - Usage: "Security Options (default [])", - }, - cli.StringFlag{ - Name: "shm-size", - Usage: "Size of `/dev/shm`. The format is ``. default is 64 MB", - }, - cli.BoolFlag{ - Name: "sig-proxy", - Usage: "Proxy received signals to the process (default true)", - }, - cli.StringFlag{ - Name: "stop-signal", - Usage: "Signal to stop a container. Default is SIGTERM", - }, - cli.IntFlag{ - Name: "stop-timeout", - Usage: "Timeout (in seconds) to stop a container. Default is 10", - }, - cli.StringSliceFlag{ - Name: "storage-opt", - Usage: "Storage driver options per container (default [])", - }, - cli.StringSliceFlag{ - Name: "sysctl", - Usage: "Sysctl options (default [])", - }, - cli.StringSliceFlag{ - Name: "tmpfs", - Usage: "Mount a temporary filesystem (`tmpfs`) into a container (default [])", - }, - cli.BoolFlag{ - Name: "tty, t", - Usage: "Allocate a pseudo-TTY for container", - }, - cli.StringSliceFlag{ - Name: "ulimit", - Usage: "Ulimit options (default [])", - }, - cli.StringFlag{ - Name: "user, u", - Usage: "Username or UID (format: [:])", - }, - cli.StringFlag{ - Name: "userns", - Usage: "User namespace to use", - }, - cli.StringFlag{ - Name: "uts", - Usage: "UTS namespace to use", - }, - cli.StringSliceFlag{ - Name: "volume, v", - Usage: "Bind mount a volume into the container (default [])", - }, - cli.StringSliceFlag{ - Name: "volumes-from", - Usage: "Mount volumes from the specified container(s) (default [])", - }, - cli.StringFlag{ - Name: "workdir, w", - Usage: "Working `directory inside the container", - Value: "/", - }, -} diff --git a/cmd/kpod/common_test.go b/cmd/kpod/common_test.go deleted file mode 100644 index 663bc41e..00000000 --- a/cmd/kpod/common_test.go +++ /dev/null @@ -1,51 +0,0 @@ -package main - -import ( - "os/exec" - "os/user" - "testing" - - "flag" - - "github.com/urfave/cli" -) - -func TestGetStore(t *testing.T) { - t.Skip("FIX THIS!") - - //cmd/kpod/common_test.go:27: cannot use c (type *cli.Context) as type *libkpod.Config in argument to getStore - - // Make sure the tests are running as root - skipTestIfNotRoot(t) - - set := flag.NewFlagSet("test", 0) - globalSet := flag.NewFlagSet("test", 0) - globalSet.String("root", "", "path to the root directory in which data, including images, is stored") - globalCtx := cli.NewContext(nil, globalSet, nil) - command := cli.Command{Name: "imagesCommand"} - c := cli.NewContext(nil, set, globalCtx) - c.Command = command - - //_, err := getStore(c) - //if err != nil { - //t.Error(err) - //} -} - -func skipTestIfNotRoot(t *testing.T) { - u, err := user.Current() - if err != nil { - t.Skip("Could not determine user. Running without root may cause tests to fail") - } else if u.Uid != "0" { - t.Skip("tests will fail unless run as root") - } -} - -func pullTestImage(name string) error { - cmd := exec.Command("crioctl", "image", "pull", name) - err := cmd.Run() - if err != nil { - return err - } - return nil -} diff --git a/cmd/kpod/create.go b/cmd/kpod/create.go deleted file mode 100644 index 30dcb8ef..00000000 --- a/cmd/kpod/create.go +++ /dev/null @@ -1,343 +0,0 @@ -package main - -import ( - "fmt" - "strconv" - - "github.com/docker/go-units" - "github.com/kubernetes-incubator/cri-o/libpod" - "github.com/pkg/errors" - "github.com/urfave/cli" - pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" -) - -type mountType string - -// Type constants -const ( - // TypeBind is the type for mounting host dir - TypeBind mountType = "bind" - // TypeVolume is the type for remote storage volumes - // TypeVolume mountType = "volume" // re-enable upon use - // TypeTmpfs is the type for mounting tmpfs - TypeTmpfs mountType = "tmpfs" -) - -var ( - defaultEnvVariables = []string{"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "TERM=xterm"} -) - -type createResourceConfig struct { - blkioDevice []string // blkio-weight-device - blkioWeight uint16 // blkio-weight - cpuPeriod uint64 // cpu-period - cpuQuota int64 // cpu-quota - cpuRtPeriod uint64 // cpu-rt-period - cpuRtRuntime int64 // cpu-rt-runtime - cpuShares uint64 // cpu-shares - cpus string // cpus - cpusetCpus string - cpusetMems string // cpuset-mems - deviceReadBps []string // device-read-bps - deviceReadIops []string // device-read-iops - deviceWriteBps []string // device-write-bps - deviceWriteIops []string // device-write-iops - disableOomKiller bool // oom-kill-disable - kernelMemory int64 // kernel-memory - memory int64 //memory - memoryReservation int64 // memory-reservation - memorySwap int64 //memory-swap - memorySwapiness uint64 // memory-swappiness - oomScoreAdj int //oom-score-adj - pidsLimit int64 // pids-limit - shmSize string - ulimit []string //ulimit -} - -type createConfig struct { - args []string - capAdd []string // cap-add - capDrop []string // cap-drop - cidFile string - cgroupParent string // cgroup-parent - command []string - detach bool // detach - devices []*pb.Device // device - dnsOpt []string //dns-opt - dnsSearch []string //dns-search - dnsServers []string //dns - entrypoint string //entrypoint - env []string //env - expose []string //expose - groupAdd []uint32 // group-add - hostname string //hostname - image string - interactive bool //interactive - ip6Address string //ipv6 - ipAddress string //ip - labels map[string]string //label - linkLocalIP []string // link-local-ip - logDriver string // log-driver - logDriverOpt []string // log-opt - macAddress string //mac-address - name string //name - network string //network - networkAlias []string //network-alias - nsIPC string // ipc - nsNet string //net - nsPID string //pid - nsUser string - pod string //pod - privileged bool //privileged - publish []string //publish - publishAll bool //publish-all - readOnlyRootfs bool //read-only - resources createResourceConfig - rm bool //rm - securityOpts []string //security-opt - sigProxy bool //sig-proxy - stopSignal string // stop-signal - stopTimeout int64 // stop-timeout - storageOpts []string //storage-opt - sysctl map[string]string //sysctl - tmpfs []string // tmpfs - tty bool //tty - user uint32 //user - group uint32 // group - volumes []string //volume - volumesFrom []string //volumes-from - workDir string //workdir -} - -var createDescription = "Creates a new container from the given image or" + - " storage and prepares it for running the specified command. The" + - " container ID is then printed to stdout. You can then start it at" + - " any time with the kpod start command. The container" + - " will be created with the initial state 'created'." - -var createCommand = cli.Command{ - Name: "create", - Usage: "create but do not start a container", - Description: createDescription, - Flags: createFlags, - Action: createCmd, - ArgsUsage: "IMAGE [COMMAND [ARG...]]", -} - -func createCmd(c *cli.Context) error { - // TODO should allow user to create based off a directory on the host not just image - // Need CLI support for this - if err := validateFlags(c, createFlags); err != nil { - return err - } - - runtime, err := getRuntime(c) - if err != nil { - return errors.Wrapf(err, "error creating libpod runtime") - } - - createConfig, err := parseCreateOpts(c, runtime) - if err != nil { - return err - } - - // Deal with the image after all the args have been checked - createImage := runtime.NewImage(createConfig.image) - if !createImage.HasImageLocal() { - // The image wasnt found by the user input'd name or its fqname - // Pull the image - fmt.Printf("Trying to pull %s...", createImage.PullName) - createImage.Pull() - } - - runtimeSpec, err := createConfigToOCISpec(createConfig) - if err != nil { - return err - } - defer runtime.Shutdown(false) - imageName, err := createImage.GetFQName() - if err != nil { - return err - } - imageID, err := createImage.GetImageID() - if err != nil { - return err - } - options, err := createConfig.GetContainerCreateOptions(c) - if err != nil { - return errors.Wrapf(err, "unable to parse new container options") - } - // Gather up the options for NewContainer which consist of With... funcs - options = append(options, libpod.WithRootFSFromImage(imageID, imageName, false)) - ctr, err := runtime.NewContainer(runtimeSpec, options...) - if err != nil { - return err - } - - if c.String("cidfile") != "" { - libpod.WriteFile(ctr.ID(), c.String("cidfile")) - } else { - fmt.Printf("%s\n", ctr.ID()) - } - - return nil -} - -// Parses CLI options related to container creation into a config which can be -// parsed into an OCI runtime spec -func parseCreateOpts(c *cli.Context, runtime *libpod.Runtime) (*createConfig, error) { - var command []string - var memoryLimit, memoryReservation, memorySwap, memoryKernel int64 - var blkioWeight uint16 - var uid, gid uint32 - - image := c.Args()[0] - - if len(c.Args()) < 1 { - return nil, errors.Errorf("image name or ID is required") - } - if len(c.Args()) > 1 { - command = c.Args()[1:] - } - - // LABEL VARIABLES - labels, err := getAllLabels(c) - if err != nil { - return &createConfig{}, errors.Wrapf(err, "unable to process labels") - } - // ENVIRONMENT VARIABLES - // TODO where should env variables be verified to be x=y format - env, err := getAllEnvironmentVariables(c) - if err != nil { - return &createConfig{}, errors.Wrapf(err, "unable to process environment variables") - } - - sysctl, err := convertStringSliceToMap(c.StringSlice("sysctl"), "=") - if err != nil { - return &createConfig{}, errors.Wrapf(err, "sysctl values must be in the form of KEY=VALUE") - } - - groupAdd, err := stringSlicetoUint32Slice(c.StringSlice("group-add")) - if err != nil { - return &createConfig{}, errors.Wrapf(err, "invalid value for groups provided") - } - - if c.String("user") != "" { - // TODO - // We need to mount the imagefs and get the uid/gid - // For now, user zeros - uid = 0 - gid = 0 - } - - if c.String("memory") != "" { - memoryLimit, err = units.RAMInBytes(c.String("memory")) - if err != nil { - return nil, errors.Wrapf(err, "invalid value for memory") - } - } - if c.String("memory-reservation") != "" { - memoryReservation, err = units.RAMInBytes(c.String("memory-reservation")) - if err != nil { - return nil, errors.Wrapf(err, "invalid value for memory-reservation") - } - } - if c.String("memory-swap") != "" { - memorySwap, err = units.RAMInBytes(c.String("memory-swap")) - if err != nil { - return nil, errors.Wrapf(err, "invalid value for memory-swap") - } - } - if c.String("kernel-memory") != "" { - memoryKernel, err = units.RAMInBytes(c.String("kernel-memory")) - if err != nil { - return nil, errors.Wrapf(err, "invalid value for kernel-memory") - } - } - if c.String("blkio-weight") != "" { - u, err := strconv.ParseUint(c.String("blkio-weight"), 10, 16) - if err != nil { - return nil, errors.Wrapf(err, "invalid value for blkio-weight") - } - blkioWeight = uint16(u) - } - - config := &createConfig{ - capAdd: c.StringSlice("cap-add"), - capDrop: c.StringSlice("cap-drop"), - cgroupParent: c.String("cgroup-parent"), - command: command, - detach: c.Bool("detach"), - dnsOpt: c.StringSlice("dns-opt"), - dnsSearch: c.StringSlice("dns-search"), - dnsServers: c.StringSlice("dns"), - entrypoint: c.String("entrypoint"), - env: env, - expose: c.StringSlice("env"), - groupAdd: groupAdd, - hostname: c.String("hostname"), - image: image, - interactive: c.Bool("interactive"), - ip6Address: c.String("ipv6"), - ipAddress: c.String("ip"), - labels: labels, - linkLocalIP: c.StringSlice("link-local-ip"), - logDriver: c.String("log-driver"), - logDriverOpt: c.StringSlice("log-opt"), - macAddress: c.String("mac-address"), - name: c.String("name"), - network: c.String("network"), - networkAlias: c.StringSlice("network-alias"), - nsIPC: c.String("ipc"), - nsNet: c.String("net"), - nsPID: c.String("pid"), - pod: c.String("pod"), - privileged: c.Bool("privileged"), - publish: c.StringSlice("publish"), - publishAll: c.Bool("publish-all"), - readOnlyRootfs: c.Bool("read-only"), - resources: createResourceConfig{ - blkioWeight: blkioWeight, - blkioDevice: c.StringSlice("blkio-weight-device"), - cpuShares: c.Uint64("cpu-shares"), - cpuPeriod: c.Uint64("cpu-period"), - cpusetCpus: c.String("cpu-period"), - cpusetMems: c.String("cpuset-mems"), - cpuQuota: c.Int64("cpu-quota"), - cpuRtPeriod: c.Uint64("cpu-rt-period"), - cpuRtRuntime: c.Int64("cpu-rt-runtime"), - cpus: c.String("cpus"), - deviceReadBps: c.StringSlice("device-read-bps"), - deviceReadIops: c.StringSlice("device-read-iops"), - deviceWriteBps: c.StringSlice("device-write-bps"), - deviceWriteIops: c.StringSlice("device-write-iops"), - disableOomKiller: c.Bool("oom-kill-disable"), - shmSize: c.String("shm-size"), - memory: memoryLimit, - memoryReservation: memoryReservation, - memorySwap: memorySwap, - memorySwapiness: c.Uint64("memory-swapiness"), - kernelMemory: memoryKernel, - oomScoreAdj: c.Int("oom-score-adj"), - - pidsLimit: c.Int64("pids-limit"), - ulimit: c.StringSlice("ulimit"), - }, - rm: c.Bool("rm"), - securityOpts: c.StringSlice("security-opt"), - sigProxy: c.Bool("sig-proxy"), - stopSignal: c.String("stop-signal"), - stopTimeout: c.Int64("stop-timeout"), - storageOpts: c.StringSlice("storage-opt"), - sysctl: sysctl, - tmpfs: c.StringSlice("tmpfs"), - tty: c.Bool("tty"), - user: uid, - group: gid, - volumes: c.StringSlice("volume"), - volumesFrom: c.StringSlice("volumes-from"), - workDir: c.String("workdir"), - } - - return config, nil -} diff --git a/cmd/kpod/create_cli.go b/cmd/kpod/create_cli.go deleted file mode 100644 index 996155ba..00000000 --- a/cmd/kpod/create_cli.go +++ /dev/null @@ -1,52 +0,0 @@ -package main - -import ( - "strings" - - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -func getAllLabels(cli *cli.Context) (map[string]string, error) { - var labelValues []string - labels := make(map[string]string) - labelValues, labelErr := readKVStrings(cli.StringSlice("label-file"), cli.StringSlice("label")) - if labelErr != nil { - return labels, errors.Wrapf(labelErr, "unable to process labels from --label and label-file") - } - // Process KEY=VALUE stringslice in string map for WithLabels func - if len(labelValues) > 0 { - for _, i := range labelValues { - spliti := strings.Split(i, "=") - if len(spliti) > 1 { - return labels, errors.Errorf("labels must be in KEY=VALUE format: %s is invalid", i) - } - labels[spliti[0]] = spliti[1] - } - } - return labels, nil -} - -func getAllEnvironmentVariables(cli *cli.Context) ([]string, error) { - env, err := readKVStrings(cli.StringSlice("env-file"), cli.StringSlice("env")) - if err != nil { - return []string{}, errors.Wrapf(err, "unable to process variables from --env and --env-file") - } - // Add default environment variables if nothing defined - if len(env) == 0 { - env = append(env, defaultEnvVariables...) - } - return env, nil -} - -func convertStringSliceToMap(strSlice []string, delimiter string) (map[string]string, error) { - sysctl := make(map[string]string) - for _, inputSysctl := range strSlice { - values := strings.Split(inputSysctl, delimiter) - if len(values) < 2 { - return sysctl, errors.Errorf("%s in an invalid sysctl value", inputSysctl) - } - sysctl[values[0]] = values[1] - } - return sysctl, nil -} diff --git a/cmd/kpod/diff.go b/cmd/kpod/diff.go deleted file mode 100644 index c28bdfce..00000000 --- a/cmd/kpod/diff.go +++ /dev/null @@ -1,128 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/containers/storage/pkg/archive" - "github.com/kubernetes-incubator/cri-o/cmd/kpod/formats" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -type diffJSONOutput struct { - Changed []string `json:"changed,omitempty"` - Added []string `json:"added,omitempty"` - Deleted []string `json:"deleted,omitempty"` -} - -type diffOutputParams struct { - Change archive.ChangeType - Path string -} - -type stdoutStruct struct { - output []diffOutputParams -} - -func (so stdoutStruct) Out() error { - for _, d := range so.output { - fmt.Printf("%s %s\n", d.Change, d.Path) - } - return nil -} - -var ( - diffFlags = []cli.Flag{ - cli.BoolFlag{ - Name: "archive", - Usage: "Save the diff as a tar archive", - Hidden: true, - }, - cli.StringFlag{ - Name: "format", - Usage: "Change the output format.", - }, - } - diffDescription = fmt.Sprint(`Displays changes on a container or image's filesystem. The - container or image will be compared to its parent layer`) - - diffCommand = cli.Command{ - Name: "diff", - Usage: "Inspect changes on container's file systems", - Description: diffDescription, - Flags: diffFlags, - Action: diffCmd, - ArgsUsage: "ID-NAME", - } -) - -func formatJSON(output []diffOutputParams) (diffJSONOutput, error) { - jsonStruct := diffJSONOutput{} - for _, output := range output { - switch output.Change { - case archive.ChangeModify: - jsonStruct.Changed = append(jsonStruct.Changed, output.Path) - case archive.ChangeAdd: - jsonStruct.Added = append(jsonStruct.Added, output.Path) - case archive.ChangeDelete: - jsonStruct.Deleted = append(jsonStruct.Deleted, output.Path) - default: - return jsonStruct, errors.Errorf("output kind %q not recognized", output.Change.String()) - } - } - return jsonStruct, nil -} - -func diffCmd(c *cli.Context) error { - if err := validateFlags(c, diffFlags); err != nil { - return err - } - - if len(c.Args()) != 1 { - return errors.Errorf("container, image, or layer name must be specified: kpod diff [options [...]] ID-NAME") - } - - runtime, err := getRuntime(c) - if err != nil { - return errors.Wrapf(err, "could not get runtime") - } - defer runtime.Shutdown(false) - - to := c.Args().Get(0) - changes, err := runtime.GetDiff("", to) - if err != nil { - return errors.Wrapf(err, "could not get changes for %q", to) - } - - diffOutput := []diffOutputParams{} - outputFormat := c.String("format") - - for _, change := range changes { - - params := diffOutputParams{ - Change: change.Kind, - Path: change.Path, - } - diffOutput = append(diffOutput, params) - } - - var out formats.Writer - - if outputFormat != "" { - switch outputFormat { - case formats.JSONString: - data, err := formatJSON(diffOutput) - if err != nil { - return err - } - out = formats.JSONStruct{Output: data} - default: - return errors.New("only valid format for diff is 'json'") - } - } else { - out = stdoutStruct{output: diffOutput} - } - formats.Writer(out).Out() - - return nil -} diff --git a/cmd/kpod/docker/types.go b/cmd/kpod/docker/types.go deleted file mode 100644 index a7e45655..00000000 --- a/cmd/kpod/docker/types.go +++ /dev/null @@ -1,271 +0,0 @@ -package docker - -// -// Types extracted from Docker -// - -import ( - "time" - - "github.com/containers/image/pkg/strslice" - "github.com/opencontainers/go-digest" -) - -// TypeLayers github.com/docker/docker/image/rootfs.go -const TypeLayers = "layers" - -// V2S2MediaTypeManifest github.com/docker/distribution/manifest/schema2/manifest.go -const V2S2MediaTypeManifest = "application/vnd.docker.distribution.manifest.v2+json" - -// V2S2MediaTypeImageConfig github.com/docker/distribution/manifest/schema2/manifest.go -const V2S2MediaTypeImageConfig = "application/vnd.docker.container.image.v1+json" - -// V2S2MediaTypeLayer github.com/docker/distribution/manifest/schema2/manifest.go -const V2S2MediaTypeLayer = "application/vnd.docker.image.rootfs.diff.tar.gzip" - -// V2S2MediaTypeUncompressedLayer github.com/docker/distribution/manifest/schema2/manifest.go -const V2S2MediaTypeUncompressedLayer = "application/vnd.docker.image.rootfs.diff.tar" - -// V2S2RootFS describes images root filesystem -// This is currently a placeholder that only supports layers. In the future -// this can be made into an interface that supports different implementations. -// github.com/docker/docker/image/rootfs.go -type V2S2RootFS struct { - Type string `json:"type"` - DiffIDs []digest.Digest `json:"diff_ids,omitempty"` -} - -// V2S2History stores build commands that were used to create an image -// github.com/docker/docker/image/image.go -type V2S2History struct { - // Created is the timestamp at which the image was created - Created time.Time `json:"created"` - // Author is the name of the author that was specified when committing the image - Author string `json:"author,omitempty"` - // CreatedBy keeps the Dockerfile command used while building the image - CreatedBy string `json:"created_by,omitempty"` - // Comment is the commit message that was set when committing the image - Comment string `json:"comment,omitempty"` - // EmptyLayer is set to true if this history item did not generate a - // layer. Otherwise, the history item is associated with the next - // layer in the RootFS section. - EmptyLayer bool `json:"empty_layer,omitempty"` -} - -// ID is the content-addressable ID of an image. -// github.com/docker/docker/image/image.go -type ID digest.Digest - -// HealthConfig holds configuration settings for the HEALTHCHECK feature. -// github.com/docker/docker/api/types/container/config.go -type HealthConfig struct { - // Test is the test to perform to check that the container is healthy. - // An empty slice means to inherit the default. - // The options are: - // {} : inherit healthcheck - // {"NONE"} : disable healthcheck - // {"CMD", args...} : exec arguments directly - // {"CMD-SHELL", command} : run command with system's default shell - Test []string `json:",omitempty"` - - // Zero means to inherit. Durations are expressed as integer nanoseconds. - Interval time.Duration `json:",omitempty"` // Interval is the time to wait between checks. - Timeout time.Duration `json:",omitempty"` // Timeout is the time to wait before considering the check to have hung. - - // Retries is the number of consecutive failures needed to consider a container as unhealthy. - // Zero means inherit. - Retries int `json:",omitempty"` -} - -// PortSet is a collection of structs indexed by Port -// github.com/docker/go-connections/nat/nat.go -type PortSet map[Port]struct{} - -// Port is a string containing port number and protocol in the format "80/tcp" -// github.com/docker/go-connections/nat/nat.go -type Port string - -// Config contains the configuration data about a container. -// It should hold only portable information about the container. -// Here, "portable" means "independent from the host we are running on". -// Non-portable information *should* appear in HostConfig. -// All fields added to this struct must be marked `omitempty` to keep getting -// predictable hashes from the old `v1Compatibility` configuration. -// github.com/docker/docker/api/types/container/config.go -type Config struct { - Hostname string // Hostname - Domainname string // Domainname - User string // User that will run the command(s) inside the container, also support user:group - AttachStdin bool // Attach the standard input, makes possible user interaction - AttachStdout bool // Attach the standard output - AttachStderr bool // Attach the standard error - ExposedPorts PortSet `json:",omitempty"` // List of exposed ports - Tty bool // Attach standard streams to a tty, including stdin if it is not closed. - OpenStdin bool // Open stdin - StdinOnce bool // If true, close stdin after the 1 attached client disconnects. - Env []string // List of environment variable to set in the container - Cmd strslice.StrSlice // Command to run when starting the container - Healthcheck *HealthConfig `json:",omitempty"` // Healthcheck describes how to check the container is healthy - ArgsEscaped bool `json:",omitempty"` // True if command is already escaped (Windows specific) - Image string // Name of the image as it was passed by the operator (e.g. could be symbolic) - Volumes map[string]struct{} // List of volumes (mounts) used for the container - WorkingDir string // Current directory (PWD) in the command will be launched - Entrypoint strslice.StrSlice // Entrypoint to run when starting the container - NetworkDisabled bool `json:",omitempty"` // Is network disabled - MacAddress string `json:",omitempty"` // Mac Address of the container - OnBuild []string // ONBUILD metadata that were defined on the image Dockerfile - Labels map[string]string // List of labels set to this container - StopSignal string `json:",omitempty"` // Signal to stop a container - StopTimeout *int `json:",omitempty"` // Timeout (in seconds) to stop a container - Shell strslice.StrSlice `json:",omitempty"` // Shell for shell-form of RUN, CMD, ENTRYPOINT -} - -// V1Compatibility - For non-top-level layers, create fake V1Compatibility -// strings that fit the format and don't collide with anything else, but -// don't result in runnable images on their own. -// github.com/docker/distribution/manifest/schema1/config_builder.go -type V1Compatibility struct { - ID string `json:"id"` - Parent string `json:"parent,omitempty"` - Comment string `json:"comment,omitempty"` - Created time.Time `json:"created"` - ContainerConfig struct { - Cmd []string - } `json:"container_config,omitempty"` - Author string `json:"author,omitempty"` - ThrowAway bool `json:"throwaway,omitempty"` -} - -// V1Image stores the V1 image configuration. -// github.com/docker/docker/image/image.go -type V1Image struct { - // ID is a unique 64 character identifier of the image - ID string `json:"id,omitempty"` - // Parent is the ID of the parent image - Parent string `json:"parent,omitempty"` - // Comment is the commit message that was set when committing the image - Comment string `json:"comment,omitempty"` - // Created is the timestamp at which the image was created - Created time.Time `json:"created"` - // Container is the id of the container used to commit - Container string `json:"container,omitempty"` - // ContainerConfig is the configuration of the container that is committed into the image - ContainerConfig Config `json:"container_config,omitempty"` - // DockerVersion specifies the version of Docker that was used to build the image - DockerVersion string `json:"docker_version,omitempty"` - // Author is the name of the author that was specified when committing the image - Author string `json:"author,omitempty"` - // Config is the configuration of the container received from the client - Config *Config `json:"config,omitempty"` - // Architecture is the hardware that the image is build and runs on - Architecture string `json:"architecture,omitempty"` - // OS is the operating system used to build and run the image - OS string `json:"os,omitempty"` - // Size is the total size of the image including all layers it is composed of - Size int64 `json:",omitempty"` -} - -// V2Image stores the image configuration -// github.com/docker/docker/image/image.go -type V2Image struct { - V1Image - Parent ID `json:"parent,omitempty"` - RootFS *V2S2RootFS `json:"rootfs,omitempty"` - History []V2S2History `json:"history,omitempty"` - OSVersion string `json:"os.version,omitempty"` - OSFeatures []string `json:"os.features,omitempty"` - - // rawJSON caches the immutable JSON associated with this image. - //rawJSON []byte - - // computedID is the ID computed from the hash of the image config. - // Not to be confused with the legacy V1 ID in V1Image. - //computedID ID -} - -// V2Versioned provides a struct with the manifest schemaVersion and mediaType. -// Incoming content with unknown schema version can be decoded against this -// struct to check the version. -// github.com/docker/distribution/manifest/versioned.go -type V2Versioned struct { - // SchemaVersion is the image manifest schema that this image follows - SchemaVersion int `json:"schemaVersion"` - - // MediaType is the media type of this schema. - MediaType string `json:"mediaType,omitempty"` -} - -// V2S1FSLayer is a container struct for BlobSums defined in an image manifest -// github.com/docker/distribution/manifest/schema1/manifest.go -type V2S1FSLayer struct { - // BlobSum is the tarsum of the referenced filesystem image layer - BlobSum digest.Digest `json:"blobSum"` -} - -// V2S1History stores unstructured v1 compatibility information -// github.com/docker/distribution/manifest/schema1/manifest.go -type V2S1History struct { - // V1Compatibility is the raw v1 compatibility information - V1Compatibility string `json:"v1Compatibility"` -} - -// V2S1Manifest provides the base accessible fields for working with V2 image -// format in the registry. -// github.com/docker/distribution/manifest/schema1/manifest.go -type V2S1Manifest struct { - V2Versioned - - // Name is the name of the image's repository - Name string `json:"name"` - - // Tag is the tag of the image specified by this manifest - Tag string `json:"tag"` - - // Architecture is the host architecture on which this image is intended to - // run - Architecture string `json:"architecture"` - - // FSLayers is a list of filesystem layer blobSums contained in this image - FSLayers []V2S1FSLayer `json:"fsLayers"` - - // History is a list of unstructured historical data for v1 compatibility - History []V2S1History `json:"history"` -} - -// V2S2Descriptor describes targeted content. Used in conjunction with a blob -// store, a descriptor can be used to fetch, store and target any kind of -// blob. The struct also describes the wire protocol format. Fields should -// only be added but never changed. -// github.com/docker/distribution/blobs.go -type V2S2Descriptor struct { - // MediaType describe the type of the content. All text based formats are - // encoded as utf-8. - MediaType string `json:"mediaType,omitempty"` - - // Size in bytes of content. - Size int64 `json:"size,omitempty"` - - // Digest uniquely identifies the content. A byte stream can be verified - // against against this digest. - Digest digest.Digest `json:"digest,omitempty"` - - // URLs contains the source URLs of this content. - URLs []string `json:"urls,omitempty"` - - // NOTE: Before adding a field here, please ensure that all - // other options have been exhausted. Much of the type relationships - // depend on the simplicity of this type. -} - -// V2S2Manifest defines a schema2 manifest. -// github.com/docker/distribution/manifest/schema2/manifest.go -type V2S2Manifest struct { - V2Versioned - - // Config references the image configuration as a blob. - Config V2S2Descriptor `json:"config"` - - // Layers lists descriptors for the layers referenced by the - // configuration. - Layers []V2S2Descriptor `json:"layers"` -} diff --git a/cmd/kpod/export.go b/cmd/kpod/export.go deleted file mode 100644 index 94f05ce1..00000000 --- a/cmd/kpod/export.go +++ /dev/null @@ -1,106 +0,0 @@ -package main - -import ( - "io" - "os" - - "fmt" - - "github.com/containers/storage" - "github.com/containers/storage/pkg/archive" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" - "github.com/urfave/cli" -) - -type exportOptions struct { - output string - container string -} - -var ( - exportFlags = []cli.Flag{ - cli.StringFlag{ - Name: "output, o", - Usage: "Write to a file, default is STDOUT", - Value: "/dev/stdout", - }, - } - exportDescription = "Exports container's filesystem contents as a tar archive" + - " and saves it on the local machine." - exportCommand = cli.Command{ - Name: "export", - Usage: "Export container's filesystem contents as a tar archive", - Description: exportDescription, - Flags: exportFlags, - Action: exportCmd, - ArgsUsage: "CONTAINER", - } -) - -// exportCmd saves a container to a tarball on disk -func exportCmd(c *cli.Context) error { - args := c.Args() - if len(args) == 0 { - return errors.Errorf("container id must be specified") - } - if len(args) > 1 { - return errors.Errorf("too many arguments given, need 1 at most.") - } - container := args[0] - if err := validateFlags(c, exportFlags); err != nil { - return err - } - - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "could not get config") - } - store, err := getStore(config) - if err != nil { - return err - } - - output := c.String("output") - if output == "/dev/stdout" { - file := os.Stdout - if logrus.IsTerminal(file) { - return errors.Errorf("refusing to export to terminal. Use -o flag or redirect") - } - } - - opts := exportOptions{ - output: output, - container: container, - } - - return exportContainer(store, opts) -} - -// exportContainer exports the contents of a container and saves it as -// a tarball on disk -func exportContainer(store storage.Store, opts exportOptions) error { - mountPoint, err := store.Mount(opts.container, "") - if err != nil { - return errors.Wrapf(err, "error finding container %q", opts.container) - } - defer func() { - if err := store.Unmount(opts.container); err != nil { - fmt.Printf("error unmounting container %q: %v\n", opts.container, err) - } - }() - - input, err := archive.Tar(mountPoint, archive.Uncompressed) - if err != nil { - return errors.Wrapf(err, "error reading container directory %q", opts.container) - } - - outFile, err := os.Create(opts.output) - if err != nil { - return errors.Wrapf(err, "error creating file %q", opts.output) - } - defer outFile.Close() - - _, err = io.Copy(outFile, input) - return err -} diff --git a/cmd/kpod/formats/formats.go b/cmd/kpod/formats/formats.go deleted file mode 100644 index 6e5dd242..00000000 --- a/cmd/kpod/formats/formats.go +++ /dev/null @@ -1,143 +0,0 @@ -package formats - -import ( - "encoding/json" - "fmt" - "os" - "strings" - "text/tabwriter" - "text/template" - - "bytes" - "github.com/ghodss/yaml" - "github.com/pkg/errors" -) - -const ( - // JSONString const to save on duplicate variable names - JSONString = "json" - // IDString const to save on duplicates for Go templates - IDString = "{{.ID}}" -) - -// Writer interface for outputs -type Writer interface { - Out() error -} - -// JSONStructArray for JSON output -type JSONStructArray struct { - Output []interface{} -} - -// StdoutTemplateArray for Go template output -type StdoutTemplateArray struct { - Output []interface{} - Template string - Fields map[string]string -} - -// JSONStruct for JSON output -type JSONStruct struct { - Output interface{} -} - -// StdoutTemplate for Go template output -type StdoutTemplate struct { - Output interface{} - Template string - Fields map[string]string -} - -// YAMLStruct for YAML output -type YAMLStruct struct { - Output interface{} -} - -// Out method for JSON Arrays -func (j JSONStructArray) Out() error { - data, err := json.MarshalIndent(j.Output, "", " ") - if err != nil { - return err - } - - // JSON returns a byte array with a literal null [110 117 108 108] in it - // if it is passed empty data. We used bytes.Compare to see if that is - // the case. - if diff := bytes.Compare(data, []byte("null")); diff == 0 { - data = []byte("[]") - } - - // If the we did get NULL back, we should spit out {} which is - // at least valid JSON for the consumer. - fmt.Printf("%s\n", data) - return nil -} - -// Out method for Go templates -func (t StdoutTemplateArray) Out() error { - w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', 0) - if strings.HasPrefix(t.Template, "table") { - // replace any spaces with tabs in template so that tabwriter can align it - t.Template = strings.Replace(strings.TrimSpace(t.Template[5:]), " ", "\t", -1) - headerTmpl, err := template.New("header").Funcs(headerFunctions).Parse(t.Template) - if err != nil { - return errors.Wrapf(err, "Template parsing error") - } - err = headerTmpl.Execute(w, t.Fields) - if err != nil { - return err - } - fmt.Fprintln(w, "") - } - t.Template = strings.Replace(t.Template, " ", "\t", -1) - tmpl, err := template.New("image").Funcs(basicFunctions).Parse(t.Template) - if err != nil { - return errors.Wrapf(err, "Template parsing error") - } - for _, img := range t.Output { - basicTmpl := tmpl.Funcs(basicFunctions) - err = basicTmpl.Execute(w, img) - if err != nil { - return err - } - fmt.Fprintln(w, "") - } - return w.Flush() -} - -// Out method for JSON struct -func (j JSONStruct) Out() error { - data, err := json.MarshalIndent(j.Output, "", " ") - if err != nil { - return err - } - fmt.Printf("%s\n", data) - return nil -} - -//Out method for Go templates -func (t StdoutTemplate) Out() error { - tmpl, err := template.New("image").Parse(t.Template) - if err != nil { - return errors.Wrapf(err, "template parsing error") - } - err = tmpl.Execute(os.Stdout, t.Output) - if err != nil { - return err - } - fmt.Println() - return nil -} - -// Out method for YAML -func (y YAMLStruct) Out() error { - var buf []byte - var err error - buf, err = yaml.Marshal(y.Output) - if err != nil { - return err - } - fmt.Println(string(buf)) - return nil -} diff --git a/cmd/kpod/formats/templates.go b/cmd/kpod/formats/templates.go deleted file mode 100644 index c2582552..00000000 --- a/cmd/kpod/formats/templates.go +++ /dev/null @@ -1,78 +0,0 @@ -package formats - -import ( - "bytes" - "encoding/json" - "strings" - "text/template" -) - -// basicFunctions are the set of initial -// functions provided to every template. -var basicFunctions = template.FuncMap{ - "json": func(v interface{}) string { - buf := &bytes.Buffer{} - enc := json.NewEncoder(buf) - enc.SetEscapeHTML(false) - _ = enc.Encode(v) - // Remove the trailing new line added by the encoder - return strings.TrimSpace(buf.String()) - }, - "split": strings.Split, - "join": strings.Join, - "title": strings.Title, - "lower": strings.ToLower, - "upper": strings.ToUpper, - "pad": padWithSpace, - "truncate": truncateWithLength, -} - -// HeaderFunctions are used to created headers of a table. -// This is a replacement of basicFunctions for header generation -// because we want the header to remain intact. -// Some functions like `split` are irrelevant so not added. -var headerFunctions = template.FuncMap{ - "json": func(v string) string { - return v - }, - "title": func(v string) string { - return v - }, - "lower": func(v string) string { - return v - }, - "upper": func(v string) string { - return v - }, - "truncate": func(v string, l int) string { - return v - }, -} - -// Parse creates a new anonymous template with the basic functions -// and parses the given format. -func Parse(format string) (*template.Template, error) { - return NewParse("", format) -} - -// NewParse creates a new tagged template with the basic functions -// and parses the given format. -func NewParse(tag, format string) (*template.Template, error) { - return template.New(tag).Funcs(basicFunctions).Parse(format) -} - -// padWithSpace adds whitespace to the input if the input is non-empty -func padWithSpace(source string, prefix, suffix int) string { - if source == "" { - return source - } - return strings.Repeat(" ", prefix) + source + strings.Repeat(" ", suffix) -} - -// truncateWithLength truncates the source string up to the length provided by the input -func truncateWithLength(source string, length int) string { - if len(source) < length { - return source - } - return source[:length] -} diff --git a/cmd/kpod/history.go b/cmd/kpod/history.go deleted file mode 100644 index dd0da38a..00000000 --- a/cmd/kpod/history.go +++ /dev/null @@ -1,243 +0,0 @@ -package main - -import ( - "reflect" - "strconv" - "strings" - "time" - - "github.com/containers/image/types" - units "github.com/docker/go-units" - "github.com/kubernetes-incubator/cri-o/cmd/kpod/formats" - "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -const ( - createdByTruncLength = 45 - idTruncLength = 13 -) - -// historyTemplateParams stores info about each layer -type historyTemplateParams struct { - ID string - Created string - CreatedBy string - Size string - Comment string -} - -// historyJSONParams is only used when the JSON format is specified, -// and is better for data processing from JSON. -// historyJSONParams will be populated by data from v1.History and types.BlobInfo, -// the members of the struct are the sama data types as their sources. -type historyJSONParams struct { - ID string `json:"id"` - Created *time.Time `json:"created"` - CreatedBy string `json:"createdBy"` - Size int64 `json:"size"` - Comment string `json:"comment"` -} - -// historyOptions stores cli flag values -type historyOptions struct { - human bool - noTrunc bool - quiet bool - format string -} - -var ( - historyFlags = []cli.Flag{ - cli.BoolTFlag{ - Name: "human, H", - Usage: "Display sizes and dates in human readable format", - }, - cli.BoolFlag{ - Name: "no-trunc, notruncate", - Usage: "Do not truncate the output", - }, - cli.BoolFlag{ - Name: "quiet, q", - Usage: "Display the numeric IDs only", - }, - cli.StringFlag{ - Name: "format", - Usage: "Change the output to JSON or a Go template", - }, - } - - historyDescription = "Displays the history of an image. The information can be printed out in an easy to read, " + - "or user specified format, and can be truncated." - historyCommand = cli.Command{ - Name: "history", - Usage: "Show history of a specified image", - Description: historyDescription, - Flags: historyFlags, - Action: historyCmd, - ArgsUsage: "", - } -) - -func historyCmd(c *cli.Context) error { - if err := validateFlags(c, historyFlags); err != nil { - return err - } - - runtime, err := getRuntime(c) - if err != nil { - return errors.Wrapf(err, "Could not get config") - } - defer runtime.Shutdown(false) - - format := genHistoryFormat(c.Bool("quiet")) - if c.IsSet("format") { - format = c.String("format") - } - - args := c.Args() - if len(args) == 0 { - return errors.Errorf("an image name must be specified") - } - if len(args) > 1 { - return errors.Errorf("Kpod history takes at most 1 argument") - } - imgName := args[0] - - opts := historyOptions{ - human: c.BoolT("human"), - noTrunc: c.Bool("no-trunc"), - quiet: c.Bool("quiet"), - format: format, - } - - history, layers, imageID, err := runtime.GetHistory(imgName) - if err != nil { - return errors.Wrapf(err, "error getting history of image %q", imgName) - } - - return generateHistoryOutput(history, layers, imageID, opts) -} - -func genHistoryFormat(quiet bool) (format string) { - if quiet { - return formats.IDString - } - return "table {{.ID}}\t{{.Created}}\t{{.CreatedBy}}\t{{.Size}}\t{{.Comment}}\t" -} - -// historyToGeneric makes an empty array of interfaces for output -func historyToGeneric(templParams []historyTemplateParams, JSONParams []historyJSONParams) (genericParams []interface{}) { - if len(templParams) > 0 { - for _, v := range templParams { - genericParams = append(genericParams, interface{}(v)) - } - return - } - for _, v := range JSONParams { - genericParams = append(genericParams, interface{}(v)) - } - return -} - -// generate the header based on the template provided -func (h *historyTemplateParams) headerMap() map[string]string { - v := reflect.Indirect(reflect.ValueOf(h)) - values := make(map[string]string) - for h := 0; h < v.NumField(); h++ { - key := v.Type().Field(h).Name - value := key - values[key] = strings.ToUpper(splitCamelCase(value)) - } - return values -} - -// getHistorytemplateOutput gets the modified history information to be printed in human readable format -func getHistoryTemplateOutput(history []v1.History, layers []types.BlobInfo, imageID string, opts historyOptions) (historyOutput []historyTemplateParams) { - var ( - outputSize string - createdTime string - createdBy string - count = 1 - ) - for i := len(history) - 1; i >= 0; i-- { - if i != len(history)-1 { - imageID = "" - } - if !opts.noTrunc && i == len(history)-1 { - imageID = imageID[:idTruncLength] - } - - var size int64 - if !history[i].EmptyLayer { - size = layers[len(layers)-count].Size - count++ - } - - if opts.human { - createdTime = units.HumanDuration(time.Since((*history[i].Created))) + " ago" - outputSize = units.HumanSize(float64(size)) - } else { - createdTime = (history[i].Created).Format(time.RFC3339) - outputSize = strconv.FormatInt(size, 10) - } - - createdBy = strings.Join(strings.Fields(history[i].CreatedBy), " ") - if !opts.noTrunc && len(createdBy) > createdByTruncLength { - createdBy = createdBy[:createdByTruncLength-3] + "..." - } - - params := historyTemplateParams{ - ID: imageID, - Created: createdTime, - CreatedBy: createdBy, - Size: outputSize, - Comment: history[i].Comment, - } - historyOutput = append(historyOutput, params) - } - return -} - -// getHistoryJSONOutput returns the history information in its raw form -func getHistoryJSONOutput(history []v1.History, layers []types.BlobInfo, imageID string) (historyOutput []historyJSONParams) { - count := 1 - for i := len(history) - 1; i >= 0; i-- { - var size int64 - if !history[i].EmptyLayer { - size = layers[len(layers)-count].Size - count++ - } - - params := historyJSONParams{ - ID: imageID, - Created: history[i].Created, - CreatedBy: history[i].CreatedBy, - Size: size, - Comment: history[i].Comment, - } - historyOutput = append(historyOutput, params) - } - return -} - -// generateHistoryOutput generates the history based on the format given -func generateHistoryOutput(history []v1.History, layers []types.BlobInfo, imageID string, opts historyOptions) error { - if len(history) == 0 { - return nil - } - - var out formats.Writer - - switch opts.format { - case formats.JSONString: - historyOutput := getHistoryJSONOutput(history, layers, imageID) - out = formats.JSONStructArray{Output: historyToGeneric([]historyTemplateParams{}, historyOutput)} - default: - historyOutput := getHistoryTemplateOutput(history, layers, imageID, opts) - out = formats.StdoutTemplateArray{Output: historyToGeneric(historyOutput, []historyJSONParams{}), Template: opts.format, Fields: historyOutput[0].headerMap()} - } - - return formats.Writer(out).Out() -} diff --git a/cmd/kpod/images.go b/cmd/kpod/images.go deleted file mode 100644 index d7824ba3..00000000 --- a/cmd/kpod/images.go +++ /dev/null @@ -1,330 +0,0 @@ -package main - -import ( - "fmt" - "reflect" - "strings" - "time" - - "github.com/containers/image/types" - "github.com/containers/storage" - "github.com/docker/go-units" - "github.com/kubernetes-incubator/cri-o/cmd/kpod/formats" - "github.com/kubernetes-incubator/cri-o/libpod" - "github.com/kubernetes-incubator/cri-o/libpod/common" - digest "github.com/opencontainers/go-digest" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -type imagesTemplateParams struct { - ID string - Name string - Digest digest.Digest - CreatedAt string - Size string -} - -type imagesJSONParams struct { - ID string `json:"id"` - Name []string `json:"names"` - Digest digest.Digest `json:"digest"` - CreatedAt time.Time `json:"created"` - Size int64 `json:"size"` -} - -type imagesOptions struct { - quiet bool - noHeading bool - noTrunc bool - digests bool - format string -} - -var ( - imagesFlags = []cli.Flag{ - cli.BoolFlag{ - Name: "quiet, q", - Usage: "display only image IDs", - }, - cli.BoolFlag{ - Name: "noheading, n", - Usage: "do not print column headings", - }, - cli.BoolFlag{ - Name: "no-trunc, notruncate", - Usage: "do not truncate output", - }, - cli.BoolFlag{ - Name: "digests", - Usage: "show digests", - }, - cli.StringFlag{ - Name: "format", - Usage: "Change the output format to JSON or a Go template", - }, - cli.StringFlag{ - Name: "filter, f", - Usage: "filter output based on conditions provided (default [])", - }, - } - - imagesDescription = "lists locally stored images." - imagesCommand = cli.Command{ - Name: "images", - Usage: "list images in local storage", - Description: imagesDescription, - Flags: imagesFlags, - Action: imagesCmd, - ArgsUsage: "", - } -) - -func imagesCmd(c *cli.Context) error { - if err := validateFlags(c, imagesFlags); err != nil { - return err - } - - runtime, err := getRuntime(c) - if err != nil { - return errors.Wrapf(err, "Could not get runtime") - } - defer runtime.Shutdown(false) - - var format string - if c.IsSet("format") { - format = c.String("format") - } else { - format = genImagesFormat(c.Bool("quiet"), c.Bool("noheading"), c.Bool("digests")) - } - - opts := imagesOptions{ - quiet: c.Bool("quiet"), - noHeading: c.Bool("noheading"), - noTrunc: c.Bool("no-trunc"), - digests: c.Bool("digests"), - format: format, - } - - var imageInput string - if len(c.Args()) == 1 { - imageInput = c.Args().Get(0) - } - if len(c.Args()) > 1 { - return errors.New("'kpod images' requires at most 1 argument") - } - - params, err := runtime.ParseImageFilter(imageInput, c.String("filter")) - if err != nil { - return errors.Wrapf(err, "error parsing filter") - } - - // generate the different filters - labelFilter := generateImagesFilter(params, "label") - beforeImageFilter := generateImagesFilter(params, "before-image") - sinceImageFilter := generateImagesFilter(params, "since-image") - danglingFilter := generateImagesFilter(params, "dangling") - referenceFilter := generateImagesFilter(params, "reference") - imageInputFilter := generateImagesFilter(params, "image-input") - - images, err := runtime.GetImages(params, labelFilter, beforeImageFilter, sinceImageFilter, danglingFilter, referenceFilter, imageInputFilter) - if err != nil { - return errors.Wrapf(err, "could not get list of images matching filter") - } - - return generateImagesOutput(runtime, images, opts) -} - -func genImagesFormat(quiet, noHeading, digests bool) (format string) { - if quiet { - return formats.IDString - } - format = "table {{.ID}}\t{{.Name}}\t" - if noHeading { - format = "{{.ID}}\t{{.Name}}\t" - } - if digests { - format += "{{.Digest}}\t" - } - format += "{{.CreatedAt}}\t{{.Size}}\t" - return -} - -// imagesToGeneric creates an empty array of interfaces for output -func imagesToGeneric(templParams []imagesTemplateParams, JSONParams []imagesJSONParams) (genericParams []interface{}) { - if len(templParams) > 0 { - for _, v := range templParams { - genericParams = append(genericParams, interface{}(v)) - } - return - } - for _, v := range JSONParams { - genericParams = append(genericParams, interface{}(v)) - } - return -} - -// generate the header based on the template provided -func (i *imagesTemplateParams) headerMap() map[string]string { - v := reflect.Indirect(reflect.ValueOf(i)) - values := make(map[string]string) - - for i := 0; i < v.NumField(); i++ { - key := v.Type().Field(i).Name - value := key - if value == "ID" || value == "Name" { - value = "Image" + value - } - values[key] = strings.ToUpper(splitCamelCase(value)) - } - return values -} - -// getImagesTemplateOutput returns the images information to be printed in human readable format -func getImagesTemplateOutput(runtime *libpod.Runtime, images []*storage.Image, opts imagesOptions) (imagesOutput []imagesTemplateParams) { - var ( - lastID string - ) - for _, img := range images { - if opts.quiet && lastID == img.ID { - continue // quiet should not show the same ID multiple times - } - createdTime := img.Created - - imageID := img.ID - if !opts.noTrunc { - imageID = imageID[:idTruncLength] - } - - imageName := "" - if len(img.Names) > 0 { - imageName = img.Names[0] - } - - info, imageDigest, size, _ := runtime.InfoAndDigestAndSize(*img) - if info != nil { - createdTime = info.Created - } - - params := imagesTemplateParams{ - ID: imageID, - Name: imageName, - Digest: imageDigest, - CreatedAt: units.HumanDuration(time.Since((createdTime))) + " ago", - Size: units.HumanSize(float64(size)), - } - imagesOutput = append(imagesOutput, params) - } - return -} - -// getImagesJSONOutput returns the images information in its raw form -func getImagesJSONOutput(runtime *libpod.Runtime, images []*storage.Image) (imagesOutput []imagesJSONParams) { - for _, img := range images { - createdTime := img.Created - - info, imageDigest, size, _ := runtime.InfoAndDigestAndSize(*img) - if info != nil { - createdTime = info.Created - } - - params := imagesJSONParams{ - ID: img.ID, - Name: img.Names, - Digest: imageDigest, - CreatedAt: createdTime, - Size: size, - } - imagesOutput = append(imagesOutput, params) - } - return -} - -// generateImagesOutput generates the images based on the format provided -func generateImagesOutput(runtime *libpod.Runtime, images []*storage.Image, opts imagesOptions) error { - if len(images) == 0 { - return nil - } - - var out formats.Writer - - switch opts.format { - case formats.JSONString: - imagesOutput := getImagesJSONOutput(runtime, images) - out = formats.JSONStructArray{Output: imagesToGeneric([]imagesTemplateParams{}, imagesOutput)} - default: - imagesOutput := getImagesTemplateOutput(runtime, images, opts) - out = formats.StdoutTemplateArray{Output: imagesToGeneric(imagesOutput, []imagesJSONParams{}), Template: opts.format, Fields: imagesOutput[0].headerMap()} - - } - - return formats.Writer(out).Out() -} - -// generateImagesFilter returns an ImageFilter based on filterType -// to add more filters, define a new case and write what the ImageFilter function should do -func generateImagesFilter(params *libpod.ImageFilterParams, filterType string) libpod.ImageFilter { - switch filterType { - case "label": - return func(image *storage.Image, info *types.ImageInspectInfo) bool { - if params == nil || params.Label == "" { - return true - } - - pair := strings.SplitN(params.Label, "=", 2) - if val, ok := info.Labels[pair[0]]; ok { - if len(pair) == 2 && val == pair[1] { - return true - } - if len(pair) == 1 { - return true - } - } - return false - } - case "before-image": - return func(image *storage.Image, info *types.ImageInspectInfo) bool { - if params == nil || params.BeforeImage.IsZero() { - return true - } - return info.Created.Before(params.BeforeImage) - } - case "since-image": - return func(image *storage.Image, info *types.ImageInspectInfo) bool { - if params == nil || params.SinceImage.IsZero() { - return true - } - return info.Created.After(params.SinceImage) - } - case "dangling": - return func(image *storage.Image, info *types.ImageInspectInfo) bool { - if params == nil || params.Dangling == "" { - return true - } - if common.IsFalse(params.Dangling) && params.ImageName != "" { - return true - } - if common.IsTrue(params.Dangling) && params.ImageName == "" { - return true - } - return false - } - case "reference": - return func(image *storage.Image, info *types.ImageInspectInfo) bool { - if params == nil || params.ReferencePattern == "" { - return true - } - return libpod.MatchesReference(params.ImageName, params.ReferencePattern) - } - case "image-input": - return func(image *storage.Image, info *types.ImageInspectInfo) bool { - if params == nil || params.ImageInput == "" { - return true - } - return libpod.MatchesReference(params.ImageName, params.ImageInput) - } - default: - fmt.Println("invalid filter type", filterType) - return nil - } -} diff --git a/cmd/kpod/info.go b/cmd/kpod/info.go deleted file mode 100644 index 22ca74c7..00000000 --- a/cmd/kpod/info.go +++ /dev/null @@ -1,200 +0,0 @@ -package main - -import ( - "bytes" - "fmt" - "io/ioutil" - "os" - "runtime" - - "github.com/docker/docker/pkg/system" - "github.com/kubernetes-incubator/cri-o/cmd/kpod/formats" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -var ( - infoDescription = "display system information" - infoCommand = cli.Command{ - Name: "info", - Usage: infoDescription, - Description: `Information display here pertain to the host, current storage stats, and build of kpod. Useful for the user and when reporting issues.`, - Flags: infoFlags, - Action: infoCmd, - ArgsUsage: "", - } - infoFlags = []cli.Flag{ - cli.BoolFlag{ - Name: "debug, D", - Usage: "display additional debug information", - }, - cli.StringFlag{ - Name: "format", - Usage: "Change the output format to JSON or a Go template", - }, - } -) - -func infoCmd(c *cli.Context) error { - if err := validateFlags(c, infoFlags); err != nil { - return err - } - info := map[string]interface{}{} - - infoGivers := []infoGiverFunc{ - storeInfo, - hostInfo, - } - - if c.Bool("debug") { - infoGivers = append(infoGivers, debugInfo) - } - - for _, giver := range infoGivers { - thisName, thisInfo, err := giver(c) - if err != nil { - info[thisName] = infoErr(err) - continue - } - info[thisName] = thisInfo - } - - var out formats.Writer - infoOutputFormat := c.String("format") - switch infoOutputFormat { - case formats.JSONString: - out = formats.JSONStruct{Output: info} - case "": - out = formats.YAMLStruct{Output: info} - default: - out = formats.StdoutTemplate{Output: info, Template: infoOutputFormat} - } - - formats.Writer(out).Out() - - return nil -} - -func infoErr(err error) map[string]interface{} { - return map[string]interface{}{ - "error": err.Error(), - } -} - -type infoGiverFunc func(c *cli.Context) (name string, info map[string]interface{}, err error) - -// top-level "debug" info -func debugInfo(c *cli.Context) (string, map[string]interface{}, error) { - info := map[string]interface{}{} - info["compiler"] = runtime.Compiler - info["go version"] = runtime.Version() - info["kpod version"] = c.App.Version - info["git commit"] = gitCommit - return "debug", info, nil -} - -// top-level "host" info -func hostInfo(c *cli.Context) (string, map[string]interface{}, error) { - // lets say OS, arch, number of cpus, amount of memory, maybe os distribution/version, hostname, kernel version, uptime - info := map[string]interface{}{} - info["os"] = runtime.GOOS - info["arch"] = runtime.GOARCH - info["cpus"] = runtime.NumCPU() - mi, err := system.ReadMemInfo() - if err != nil { - info["meminfo"] = infoErr(err) - } else { - // TODO this might be a place for github.com/dustin/go-humanize - info["MemTotal"] = mi.MemTotal - info["MemFree"] = mi.MemFree - info["SwapTotal"] = mi.SwapTotal - info["SwapFree"] = mi.SwapFree - } - if kv, err := readKernelVersion(); err != nil { - info["kernel"] = infoErr(err) - } else { - info["kernel"] = kv - } - - if up, err := readUptime(); err != nil { - info["uptime"] = infoErr(err) - } else { - info["uptime"] = up - } - if host, err := os.Hostname(); err != nil { - info["hostname"] = infoErr(err) - } else { - info["hostname"] = host - } - return "host", info, nil -} - -// top-level "store" info -func storeInfo(c *cli.Context) (string, map[string]interface{}, error) { - storeStr := "store" - config, err := getConfig(c) - if err != nil { - return storeStr, nil, errors.Wrapf(err, "Could not get config") - } - store, err := getStore(config) - if err != nil { - return storeStr, nil, err - } - - // lets say storage driver in use, number of images, number of containers - info := map[string]interface{}{} - info["GraphRoot"] = store.GraphRoot() - info["RunRoot"] = store.RunRoot() - info["GraphDriverName"] = store.GraphDriverName() - info["GraphOptions"] = store.GraphOptions() - statusPairs, err := store.Status() - if err != nil { - return storeStr, nil, err - } - status := map[string]string{} - for _, pair := range statusPairs { - status[pair[0]] = pair[1] - } - info["GraphStatus"] = status - images, err := store.Images() - if err != nil { - info["ImageStore"] = infoErr(err) - } else { - info["ImageStore"] = map[string]interface{}{ - "number": len(images), - } - } - containers, err := store.Containers() - if err != nil { - info["ContainerStore"] = infoErr(err) - } else { - info["ContainerStore"] = map[string]interface{}{ - "number": len(containers), - } - } - return storeStr, info, nil -} - -func readKernelVersion() (string, error) { - buf, err := ioutil.ReadFile("/proc/version") - if err != nil { - return "", err - } - f := bytes.Fields(buf) - if len(f) < 2 { - return string(bytes.TrimSpace(buf)), nil - } - return string(f[2]), nil -} - -func readUptime() (string, error) { - buf, err := ioutil.ReadFile("/proc/uptime") - if err != nil { - return "", err - } - f := bytes.Fields(buf) - if len(f) < 1 { - return "", fmt.Errorf("invalid uptime") - } - return string(f[0]), nil -} diff --git a/cmd/kpod/inspect.go b/cmd/kpod/inspect.go deleted file mode 100644 index 45e9d7e1..00000000 --- a/cmd/kpod/inspect.go +++ /dev/null @@ -1,120 +0,0 @@ -package main - -import ( - "github.com/kubernetes-incubator/cri-o/cmd/kpod/formats" - "github.com/kubernetes-incubator/cri-o/libkpod" - "github.com/kubernetes-incubator/cri-o/libpod/images" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -const ( - inspectTypeContainer = "container" - inspectTypeImage = "image" - inspectAll = "all" -) - -var ( - inspectFlags = []cli.Flag{ - cli.StringFlag{ - Name: "type, t", - Value: inspectAll, - Usage: "Return JSON for specified type, (e.g image, container or task)", - }, - cli.StringFlag{ - Name: "format, f", - Usage: "Change the output format to a Go template", - }, - cli.BoolFlag{ - Name: "size", - Usage: "Display total file size if the type is container", - }, - } - inspectDescription = "This displays the low-level information on containers and images identified by name or ID. By default, this will render all results in a JSON array. If the container and image have the same name, this will return container JSON for unspecified type." - inspectCommand = cli.Command{ - Name: "inspect", - Usage: "Displays the configuration of a container or image", - Description: inspectDescription, - Flags: inspectFlags, - Action: inspectCmd, - ArgsUsage: "CONTAINER-OR-IMAGE", - } -) - -func inspectCmd(c *cli.Context) error { - args := c.Args() - if len(args) == 0 { - return errors.Errorf("container or image name must be specified: kpod inspect [options [...]] name") - } - if len(args) > 1 { - return errors.Errorf("too many arguments specified") - } - if err := validateFlags(c, inspectFlags); err != nil { - return err - } - - itemType := c.String("type") - size := c.Bool("size") - - switch itemType { - case inspectTypeContainer: - case inspectTypeImage: - case inspectAll: - default: - return errors.Errorf("the only recognized types are %q, %q, and %q", inspectTypeContainer, inspectTypeImage, inspectAll) - } - - name := args[0] - - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "Could not get config") - } - server, err := libkpod.New(config) - if err != nil { - return errors.Wrapf(err, "could not get container server") - } - defer server.Shutdown() - if err = server.Update(); err != nil { - return errors.Wrapf(err, "could not update list of containers") - } - - outputFormat := c.String("format") - var data interface{} - switch itemType { - case inspectTypeContainer: - data, err = server.GetContainerData(name, size) - if err != nil { - return errors.Wrapf(err, "error parsing container data") - } - case inspectTypeImage: - data, err = images.GetData(server.Store(), name) - if err != nil { - return errors.Wrapf(err, "error parsing image data") - } - case inspectAll: - ctrData, err := server.GetContainerData(name, size) - if err != nil { - imgData, err := images.GetData(server.Store(), name) - if err != nil { - return errors.Wrapf(err, "error parsing container or image data") - } - data = imgData - - } else { - data = ctrData - } - } - - var out formats.Writer - if outputFormat != "" && outputFormat != formats.JSONString { - //template - out = formats.StdoutTemplate{Output: data, Template: outputFormat} - } else { - // default is json output - out = formats.JSONStruct{Output: data} - } - - formats.Writer(out).Out() - return nil -} diff --git a/cmd/kpod/kill.go b/cmd/kpod/kill.go deleted file mode 100644 index 8a550003..00000000 --- a/cmd/kpod/kill.go +++ /dev/null @@ -1,74 +0,0 @@ -package main - -import ( - "fmt" - "os" - - "github.com/docker/docker/pkg/signal" - "github.com/kubernetes-incubator/cri-o/libkpod" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -var ( - killFlags = []cli.Flag{ - cli.StringFlag{ - Name: "signal, s", - Usage: "Signal to send to the container", - Value: "KILL", - }, - } - killDescription = "The main process inside each container specified will be sent SIGKILL, or any signal specified with option --signal." - killCommand = cli.Command{ - Name: "kill", - Usage: "Kill one or more running containers with a specific signal", - Description: killDescription, - Flags: killFlags, - Action: killCmd, - ArgsUsage: "[CONTAINER_NAME_OR_ID]", - } -) - -// killCmd kills one or more containers with a signal -func killCmd(c *cli.Context) error { - args := c.Args() - if len(args) == 0 { - return errors.Errorf("specify one or more containers to kill") - } - if err := validateFlags(c, killFlags); err != nil { - return err - } - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "could not get config") - } - server, err := libkpod.New(config) - if err != nil { - return errors.Wrapf(err, "could not get container server") - } - killSignal := c.String("signal") - // Check if the signalString provided by the user is valid - // Invalid signals will return err - sysSignal, err := signal.ParseSignal(killSignal) - if err != nil { - return err - } - defer server.Shutdown() - err = server.Update() - if err != nil { - return errors.Wrapf(err, "could not update list of containers") - } - var lastError error - for _, container := range c.Args() { - id, err := server.ContainerKill(container, sysSignal) - if err != nil { - if lastError != nil { - fmt.Fprintln(os.Stderr, lastError) - } - lastError = errors.Wrapf(err, "unable to kill %v", container) - } else { - fmt.Println(id) - } - } - return lastError -} diff --git a/cmd/kpod/load.go b/cmd/kpod/load.go deleted file mode 100644 index b1cff1e8..00000000 --- a/cmd/kpod/load.go +++ /dev/null @@ -1,116 +0,0 @@ -package main - -import ( - "io" - "io/ioutil" - "os" - - "github.com/kubernetes-incubator/cri-o/libpod" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -var ( - loadFlags = []cli.Flag{ - cli.StringFlag{ - Name: "input, i", - Usage: "Read from archive file, default is STDIN", - Value: "/dev/stdin", - }, - cli.BoolFlag{ - Name: "quiet, q", - Usage: "Suppress the output", - }, - cli.StringFlag{ - Name: "signature-policy", - Usage: "`pathname` of signature policy file (not usually used)", - }, - } - loadDescription = "Loads the image from docker-archive stored on the local machine." - loadCommand = cli.Command{ - Name: "load", - Usage: "load an image from docker archive", - Description: loadDescription, - Flags: loadFlags, - Action: loadCmd, - ArgsUsage: "", - } -) - -// loadCmd gets the image/file to be loaded from the command line -// and calls loadImage to load the image to containers-storage -func loadCmd(c *cli.Context) error { - - args := c.Args() - var image string - if len(args) == 1 { - image = args[0] - } - if len(args) > 1 { - return errors.New("too many arguments. Requires exactly 1") - } - if err := validateFlags(c, loadFlags); err != nil { - return err - } - - runtime, err := getRuntime(c) - if err != nil { - return errors.Wrapf(err, "could not get runtime") - } - defer runtime.Shutdown(false) - - input := c.String("input") - - if input == "/dev/stdin" { - fi, err := os.Stdin.Stat() - if err != nil { - return err - } - // checking if loading from pipe - if !fi.Mode().IsRegular() { - outFile, err := ioutil.TempFile("/var/tmp", "kpod") - if err != nil { - return errors.Errorf("error creating file %v", err) - } - defer outFile.Close() - defer os.Remove(outFile.Name()) - - inFile, err := os.OpenFile(input, 0, 0666) - if err != nil { - return errors.Errorf("error reading file %v", err) - } - defer inFile.Close() - - _, err = io.Copy(outFile, inFile) - if err != nil { - return errors.Errorf("error copying file %v", err) - } - - input = outFile.Name() - } - } - - var writer io.Writer - if !c.Bool("quiet") { - writer = os.Stdout - } - - options := libpod.CopyOptions{ - SignaturePolicyPath: c.String("signature-policy"), - Writer: writer, - } - - src := libpod.DockerArchive + ":" + input - if err := runtime.PullImage(src, options); err != nil { - src = libpod.OCIArchive + ":" + input - // generate full src name with specified image:tag - if image != "" { - src = src + ":" + image - } - if err := runtime.PullImage(src, options); err != nil { - return errors.Wrapf(err, "error pulling %q", src) - } - } - - return nil -} diff --git a/cmd/kpod/login.go b/cmd/kpod/login.go deleted file mode 100644 index 17880f7a..00000000 --- a/cmd/kpod/login.go +++ /dev/null @@ -1,110 +0,0 @@ -package main - -import ( - "bufio" - "context" - "fmt" - "os" - "strings" - - "github.com/containers/image/docker" - "github.com/containers/image/pkg/docker/config" - "github.com/kubernetes-incubator/cri-o/libpod/common" - "github.com/pkg/errors" - "github.com/urfave/cli" - "golang.org/x/crypto/ssh/terminal" -) - -var ( - loginFlags = []cli.Flag{ - cli.StringFlag{ - Name: "password, p", - Usage: "Password for registry", - }, - cli.StringFlag{ - Name: "username, u", - Usage: "Username for registry", - }, - cli.StringFlag{ - Name: "authfile", - Usage: "Path of the authentication file. Default is ${XDG_RUNTIME_DIR}/containers/auth.json", - }, - } - loginDescription = "Login to a container registry on a specified server." - loginCommand = cli.Command{ - Name: "login", - Usage: "login to a container registry", - Description: loginDescription, - Flags: loginFlags, - Action: loginCmd, - ArgsUsage: "REGISTRY", - } -) - -// loginCmd uses the authentication package to store a user's authenticated credentials -// in an auth.json file for future use -func loginCmd(c *cli.Context) error { - args := c.Args() - if len(args) > 1 { - return errors.Errorf("too many arguments, login takes only 1 argument") - } - if len(args) == 0 { - return errors.Errorf("registry must be given") - } - var server string - if len(args) == 1 { - server = args[0] - } - - sc := common.GetSystemContext("", c.String("authfile")) - - // username of user logged in to server (if one exists) - userFromAuthFile := config.GetUserLoggedIn(sc, server) - username, password, err := getUserAndPass(c.String("username"), c.String("password"), userFromAuthFile) - if err != nil { - return errors.Wrapf(err, "error getting username and password") - } - - if err = docker.CheckAuth(context.TODO(), sc, username, password, server); err == nil { - if err := config.SetAuthentication(sc, server, username, password); err != nil { - return err - } - } - switch err { - case nil: - fmt.Println("Login Succeeded!") - return nil - case docker.ErrUnauthorizedForCredentials: - return errors.Errorf("error logging into %q: invalid username/password\n", server) - default: - return errors.Wrapf(err, "error authenticating creds for %q", server) - } -} - -// getUserAndPass gets the username and password from STDIN if not given -// using the -u and -p flags -func getUserAndPass(username, password, userFromAuthFile string) (string, string, error) { - var err error - reader := bufio.NewReader(os.Stdin) - if username == "" { - if userFromAuthFile != "" { - fmt.Printf("Username (%s): ", userFromAuthFile) - } else { - fmt.Print("Username: ") - } - username, err = reader.ReadString('\n') - if err != nil { - return "", "", errors.Wrapf(err, "error reading username") - } - } - if password == "" { - fmt.Print("Password: ") - pass, err := terminal.ReadPassword(0) - if err != nil { - return "", "", errors.Wrapf(err, "error reading password") - } - password = string(pass) - fmt.Println() - } - return strings.TrimSpace(username), password, err -} diff --git a/cmd/kpod/logout.go b/cmd/kpod/logout.go deleted file mode 100644 index 58734615..00000000 --- a/cmd/kpod/logout.go +++ /dev/null @@ -1,69 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/containers/image/pkg/docker/config" - "github.com/kubernetes-incubator/cri-o/libpod/common" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -var ( - logoutFlags = []cli.Flag{ - cli.StringFlag{ - Name: "authfile", - Usage: "Path of the authentication file. Default is ${XDG_RUNTIME_DIR}/containers/auth.json", - }, - cli.BoolFlag{ - Name: "all, a", - Usage: "Remove the cached credentials for all registries in the auth file", - }, - } - logoutDescription = "Remove the cached username and password for the registry." - logoutCommand = cli.Command{ - Name: "logout", - Usage: "logout of a container registry", - Description: logoutDescription, - Flags: logoutFlags, - Action: logoutCmd, - ArgsUsage: "REGISTRY", - } -) - -// logoutCmd uses the authentication package to remove the authenticated of a registry -// stored in the auth.json file -func logoutCmd(c *cli.Context) error { - args := c.Args() - if len(args) > 1 { - return errors.Errorf("too many arguments, logout takes only 1 argument") - } - if len(args) == 0 { - return errors.Errorf("registry must be given") - } - var server string - if len(args) == 1 { - server = args[0] - } - - sc := common.GetSystemContext("", c.String("authfile")) - - if c.Bool("all") { - if err := config.RemoveAllAuthentication(sc); err != nil { - return err - } - fmt.Println("Remove login credentials for all registries") - return nil - } - - err := config.RemoveAuthentication(sc, server) - switch err { - case nil: - fmt.Printf("Remove login credentials for %s\n", server) - return nil - case config.ErrNotLoggedIn: - return errors.Errorf("Not logged into %s\n", server) - default: - return errors.Wrapf(err, "error logging out of %q", server) - } -} diff --git a/cmd/kpod/logs.go b/cmd/kpod/logs.go deleted file mode 100644 index 60be4792..00000000 --- a/cmd/kpod/logs.go +++ /dev/null @@ -1,92 +0,0 @@ -package main - -import ( - "fmt" - "time" - - "github.com/kubernetes-incubator/cri-o/libkpod" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -var ( - logsFlags = []cli.Flag{ - cli.BoolFlag{ - Name: "details", - Usage: "Show extra details provided to the logs", - Hidden: true, - }, - cli.BoolFlag{ - Name: "follow, f", - Usage: "Follow log output. The default is false", - }, - cli.StringFlag{ - Name: "since", - Usage: "Show logs since TIMESTAMP", - }, - cli.Uint64Flag{ - Name: "tail", - Usage: "Output the specified number of LINES at the end of the logs. Defaults to 0, which prints all lines", - }, - } - logsDescription = "The kpod logs command batch-retrieves whatever logs are present for a container at the time of execution. This does not guarantee execution" + - "order when combined with kpod run (i.e. your run may not have generated any logs at the time you execute kpod logs" - logsCommand = cli.Command{ - Name: "logs", - Usage: "Fetch the logs of a container", - Description: logsDescription, - Flags: logsFlags, - Action: logsCmd, - ArgsUsage: "CONTAINER", - } -) - -func logsCmd(c *cli.Context) error { - args := c.Args() - if len(args) != 1 { - return errors.Errorf("'kpod logs' requires exactly one container name/ID") - } - if err := validateFlags(c, logsFlags); err != nil { - return err - } - container := c.Args().First() - var opts libkpod.LogOptions - opts.Details = c.Bool("details") - opts.Follow = c.Bool("follow") - opts.SinceTime = time.Time{} - if c.IsSet("since") { - // parse time, error out if something is wrong - since, err := time.Parse("2006-01-02T15:04:05.999999999-07:00", c.String("since")) - if err != nil { - return errors.Wrapf(err, "could not parse time: %q", c.String("since")) - } - opts.SinceTime = since - } - opts.Tail = c.Uint64("tail") - - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "could not get config") - } - server, err := libkpod.New(config) - if err != nil { - return errors.Wrapf(err, "could not create container server") - } - defer server.Shutdown() - err = server.Update() - if err != nil { - return errors.Wrapf(err, "could not update list of containers") - } - logs := make(chan string) - go func() { - err = server.GetLogs(container, logs, opts) - }() - printLogs(logs) - return err -} - -func printLogs(logs chan string) { - for line := range logs { - fmt.Println(line) - } -} diff --git a/cmd/kpod/main.go b/cmd/kpod/main.go deleted file mode 100644 index b8a7b0cb..00000000 --- a/cmd/kpod/main.go +++ /dev/null @@ -1,135 +0,0 @@ -package main - -import ( - "fmt" - "os" - - "github.com/containers/storage/pkg/reexec" - "github.com/sirupsen/logrus" - "github.com/urfave/cli" -) - -// This is populated by the Makefile from the VERSION file -// in the repository -var kpodVersion = "" - -func main() { - debug := false - - if reexec.Init() { - return - } - - app := cli.NewApp() - app.Name = "kpod" - app.Usage = "manage pods and images" - - var v string - if kpodVersion != "" { - v = kpodVersion - } - app.Version = v - - app.Commands = []cli.Command{ - createCommand, - diffCommand, - exportCommand, - historyCommand, - imagesCommand, - infoCommand, - inspectCommand, - killCommand, - loadCommand, - loginCommand, - logoutCommand, - logsCommand, - mountCommand, - pauseCommand, - psCommand, - pullCommand, - pushCommand, - renameCommand, - rmCommand, - rmiCommand, - runCommand, - saveCommand, - statsCommand, - stopCommand, - tagCommand, - umountCommand, - unpauseCommand, - versionCommand, - waitCommand, - } - app.Before = func(c *cli.Context) error { - logLevel := c.GlobalString("log-level") - if logLevel != "" { - level, err := logrus.ParseLevel(logLevel) - if err != nil { - return err - } - - logrus.SetLevel(level) - } - - if logLevel == "debug" { - debug = true - - } - - return nil - } - app.After = func(*cli.Context) error { - // called by Run() when the command handler succeeds - shutdownStores() - return nil - } - cli.OsExiter = func(code int) { - // called by Run() when the command fails, bypassing After() - shutdownStores() - os.Exit(code) - } - app.Flags = []cli.Flag{ - cli.StringFlag{ - Name: "config, c", - Usage: "path of a config file detailing container server configuration options", - }, - cli.StringFlag{ - Name: "conmon", - Usage: "path of the conmon binary", - }, - cli.StringFlag{ - Name: "log-level", - Usage: "log messages above specified level: debug, info, warn, error (default), fatal or panic", - Value: "error", - }, - cli.StringFlag{ - Name: "root", - Usage: "path to the root directory in which data, including images, is stored", - }, - cli.StringFlag{ - Name: "runroot", - Usage: "path to the 'run directory' where all state information is stored", - }, - cli.StringFlag{ - Name: "runtime", - Usage: "path to the OCI-compatible binary used to run containers, default is /usr/bin/runc", - }, - cli.StringFlag{ - Name: "storage-driver, s", - Usage: "select which storage driver is used to manage storage of images and containers (default is overlay)", - }, - cli.StringSliceFlag{ - Name: "storage-opt", - Usage: "used to pass an option to the storage driver", - }, - } - if err := app.Run(os.Args); err != nil { - if debug { - logrus.Errorf(err.Error()) - } else { - fmt.Fprintln(os.Stderr, err.Error()) - } - cli.OsExiter(1) - } -} diff --git a/cmd/kpod/mount.go b/cmd/kpod/mount.go deleted file mode 100644 index a711bede..00000000 --- a/cmd/kpod/mount.go +++ /dev/null @@ -1,121 +0,0 @@ -package main - -import ( - js "encoding/json" - "fmt" - - of "github.com/kubernetes-incubator/cri-o/cmd/kpod/formats" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -var ( - mountDescription = ` - kpod mount - Lists all mounted containers mount points - - kpod mount CONTAINER-NAME-OR-ID - Mounts the specified container and outputs the mountpoint -` - - mountFlags = []cli.Flag{ - cli.BoolFlag{ - Name: "notruncate", - Usage: "do not truncate output", - }, - cli.StringFlag{ - Name: "label", - Usage: "SELinux label for the mount point", - }, - cli.StringFlag{ - Name: "format", - Usage: "Change the output format to Go template", - }, - } - mountCommand = cli.Command{ - Name: "mount", - Usage: "Mount a working container's root filesystem", - Description: mountDescription, - Action: mountCmd, - ArgsUsage: "[CONTAINER-NAME-OR-ID]", - Flags: mountFlags, - } -) - -// MountOutputParams stores info about each layer -type jsonMountPoint struct { - ID string `json:"id"` - Names []string `json:"names"` - MountPoint string `json:"mountpoint"` -} - -func mountCmd(c *cli.Context) error { - formats := map[string]bool{ - "": true, - of.JSONString: true, - } - - args := c.Args() - json := c.String("format") == of.JSONString - if !formats[c.String("format")] { - return errors.Errorf("%q is not a supported format", c.String("format")) - } - - if len(args) > 1 { - return errors.Errorf("too many arguments specified") - } - if err := validateFlags(c, mountFlags); err != nil { - return err - } - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "Could not get config") - } - store, err := getStore(config) - if err != nil { - return errors.Wrapf(err, "error getting store") - } - if len(args) == 1 { - if json { - return errors.Wrapf(err, "json option can not be used with a container id") - } - mountPoint, err := store.Mount(args[0], c.String("label")) - if err != nil { - return errors.Wrapf(err, "error finding container %q", args[0]) - } - fmt.Printf("%s\n", mountPoint) - } else { - jsonMountPoints := []jsonMountPoint{} - containers, err2 := store.Containers() - if err2 != nil { - return errors.Wrapf(err2, "error reading list of all containers") - } - for _, container := range containers { - layer, err := store.Layer(container.LayerID) - if err != nil { - return errors.Wrapf(err, "error finding layer %q for container %q", container.LayerID, container.ID) - } - if layer.MountPoint == "" { - continue - } - if json { - jsonMountPoints = append(jsonMountPoints, jsonMountPoint{ID: container.ID, Names: container.Names, MountPoint: layer.MountPoint}) - continue - } - - if c.Bool("notruncate") { - fmt.Printf("%-64s %s\n", container.ID, layer.MountPoint) - } else { - fmt.Printf("%-12.12s %s\n", container.ID, layer.MountPoint) - } - } - if json { - data, err := js.MarshalIndent(jsonMountPoints, "", " ") - if err != nil { - return err - } - fmt.Printf("%s\n", data) - } - } - return nil -} diff --git a/cmd/kpod/parse.go b/cmd/kpod/parse.go deleted file mode 100644 index e3143a79..00000000 --- a/cmd/kpod/parse.go +++ /dev/null @@ -1,886 +0,0 @@ -//nolint -// most of these validate and parse functions have been taken from projectatomic/docker -// and modified for cri-o -package main - -import ( - "bufio" - "bytes" - "encoding/json" - "fmt" - "io/ioutil" - "net" - "os" - "os/user" - "path" - "regexp" - "strconv" - "strings" - - units "github.com/docker/go-units" - specs "github.com/opencontainers/runtime-spec/specs-go" - "github.com/pkg/errors" - pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" -) - -// Note: for flags that are in the form , use the RAMInBytes function -// from the units package in docker/go-units/size.go - -var ( - whiteSpaces = " \t" - alphaRegexp = regexp.MustCompile(`[a-zA-Z]`) - domainRegexp = regexp.MustCompile(`^(:?(:?[a-zA-Z0-9]|(:?[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]))(:?\.(:?[a-zA-Z0-9]|(:?[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])))*)\.?\s*$`) -) - -// validateExtraHost validates that the specified string is a valid extrahost and returns it. -// ExtraHost is in the form of name:ip where the ip has to be a valid ip (ipv4 or ipv6). -// for add-host flag -func validateExtraHost(val string) (string, error) { //nolint - // allow for IPv6 addresses in extra hosts by only splitting on first ":" - arr := strings.SplitN(val, ":", 2) - if len(arr) != 2 || len(arr[0]) == 0 { - return "", fmt.Errorf("bad format for add-host: %q", val) - } - if _, err := validateIPAddress(arr[1]); err != nil { - return "", fmt.Errorf("invalid IP address in add-host: %q", arr[1]) - } - return val, nil -} - -// validateIPAddress validates an Ip address. -// for dns, ip, and ip6 flags also -func validateIPAddress(val string) (string, error) { - var ip = net.ParseIP(strings.TrimSpace(val)) - if ip != nil { - return ip.String(), nil - } - return "", fmt.Errorf("%s is not an ip address", val) -} - -// validateAttach validates that the specified string is a valid attach option. -// for attach flag -func validateAttach(val string) (string, error) { //nolint - s := strings.ToLower(val) - for _, str := range []string{"stdin", "stdout", "stderr"} { - if s == str { - return s, nil - } - } - return val, fmt.Errorf("valid streams are STDIN, STDOUT and STDERR") -} - -// validate the blkioWeight falls in the range of 10 to 1000 -// for blkio-weight flag -func validateBlkioWeight(val int64) (int64, error) { //nolint - if val >= 10 && val <= 1000 { - return val, nil - } - return -1, errors.Errorf("invalid blkio weight %q, should be between 10 and 1000", val) -} - -// weightDevice is a structure that holds device:weight pair -type weightDevice struct { - path string - weight uint16 -} - -func (w *weightDevice) String() string { - return fmt.Sprintf("%s:%d", w.path, w.weight) -} - -// validateweightDevice validates that the specified string has a valid device-weight format -// for blkio-weight-device flag -func validateweightDevice(val string) (*weightDevice, error) { - split := strings.SplitN(val, ":", 2) - if len(split) != 2 { - return nil, fmt.Errorf("bad format: %s", val) - } - if !strings.HasPrefix(split[0], "/dev/") { - return nil, fmt.Errorf("bad format for device path: %s", val) - } - weight, err := strconv.ParseUint(split[1], 10, 0) - if err != nil { - return nil, fmt.Errorf("invalid weight for device: %s", val) - } - if weight > 0 && (weight < 10 || weight > 1000) { - return nil, fmt.Errorf("invalid weight for device: %s", val) - } - - return &weightDevice{ - path: split[0], - weight: uint16(weight), - }, nil -} - -// parseDevice parses a device mapping string to a container.DeviceMapping struct -// for device flag -func parseDevice(device string) (*pb.Device, error) { //nolint - _, err := validateDevice(device) - if err != nil { - return nil, errors.Wrapf(err, "device string not valid %q", device) - } - - src := "" - dst := "" - permissions := "rwm" - arr := strings.Split(device, ":") - switch len(arr) { - case 3: - permissions = arr[2] - fallthrough - case 2: - if validDeviceMode(arr[1]) { - permissions = arr[1] - } else { - dst = arr[1] - } - fallthrough - case 1: - src = arr[0] - default: - return nil, fmt.Errorf("invalid device specification: %s", device) - } - - if dst == "" { - dst = src - } - - deviceMapping := &pb.Device{ - ContainerPath: dst, - HostPath: src, - Permissions: permissions, - } - return deviceMapping, nil -} - -// validDeviceMode checks if the mode for device is valid or not. -// Valid mode is a composition of r (read), w (write), and m (mknod). -func validDeviceMode(mode string) bool { - var legalDeviceMode = map[rune]bool{ - 'r': true, - 'w': true, - 'm': true, - } - if mode == "" { - return false - } - for _, c := range mode { - if !legalDeviceMode[c] { - return false - } - legalDeviceMode[c] = false - } - return true -} - -// validateDevice validates a path for devices -// It will make sure 'val' is in the form: -// [host-dir:]container-path[:mode] -// It also validates the device mode. -func validateDevice(val string) (string, error) { - return validatePath(val, validDeviceMode) -} - -func validatePath(val string, validator func(string) bool) (string, error) { - var containerPath string - var mode string - - if strings.Count(val, ":") > 2 { - return val, fmt.Errorf("bad format for path: %s", val) - } - - split := strings.SplitN(val, ":", 3) - if split[0] == "" { - return val, fmt.Errorf("bad format for path: %s", val) - } - switch len(split) { - case 1: - containerPath = split[0] - val = path.Clean(containerPath) - case 2: - if isValid := validator(split[1]); isValid { - containerPath = split[0] - mode = split[1] - val = fmt.Sprintf("%s:%s", path.Clean(containerPath), mode) - } else { - containerPath = split[1] - val = fmt.Sprintf("%s:%s", split[0], path.Clean(containerPath)) - } - case 3: - containerPath = split[1] - mode = split[2] - if isValid := validator(split[2]); !isValid { - return val, fmt.Errorf("bad mode specified: %s", mode) - } - val = fmt.Sprintf("%s:%s:%s", split[0], containerPath, mode) - } - - if !path.IsAbs(containerPath) { - return val, fmt.Errorf("%s is not an absolute path", containerPath) - } - return val, nil -} - -// throttleDevice is a structure that holds device:rate_per_second pair -type throttleDevice struct { - path string - rate uint64 -} - -func (t *throttleDevice) String() string { - return fmt.Sprintf("%s:%d", t.path, t.rate) -} - -// validateBpsDevice validates that the specified string has a valid device-rate format -// for device-read-bps and device-write-bps flags -func validateBpsDevice(val string) (*throttleDevice, error) { - split := strings.SplitN(val, ":", 2) - if len(split) != 2 { - return nil, fmt.Errorf("bad format: %s", val) - } - if !strings.HasPrefix(split[0], "/dev/") { - return nil, fmt.Errorf("bad format for device path: %s", val) - } - rate, err := units.RAMInBytes(split[1]) - if err != nil { - return nil, fmt.Errorf("invalid rate for device: %s. The correct format is :[]. Number must be a positive integer. Unit is optional and can be kb, mb, or gb", val) - } - if rate < 0 { - return nil, fmt.Errorf("invalid rate for device: %s. The correct format is :[]. Number must be a positive integer. Unit is optional and can be kb, mb, or gb", val) - } - - return &throttleDevice{ - path: split[0], - rate: uint64(rate), - }, nil -} - -// validateIOpsDevice validates that the specified string has a valid device-rate format -// for device-write-iops and device-read-iops flags -func validateIOpsDevice(val string) (*throttleDevice, error) { //nolint - split := strings.SplitN(val, ":", 2) - if len(split) != 2 { - return nil, fmt.Errorf("bad format: %s", val) - } - if !strings.HasPrefix(split[0], "/dev/") { - return nil, fmt.Errorf("bad format for device path: %s", val) - } - rate, err := strconv.ParseUint(split[1], 10, 64) - if err != nil { - return nil, fmt.Errorf("invalid rate for device: %s. The correct format is :. Number must be a positive integer", val) - } - if rate < 0 { - return nil, fmt.Errorf("invalid rate for device: %s. The correct format is :. Number must be a positive integer", val) - } - - return &throttleDevice{ - path: split[0], - rate: uint64(rate), - }, nil -} - -// validateDNSSearch validates domain for resolvconf search configuration. -// A zero length domain is represented by a dot (.). -// for dns-search flag -func validateDNSSearch(val string) (string, error) { //nolint - if val = strings.Trim(val, " "); val == "." { - return val, nil - } - return validateDomain(val) -} - -func validateDomain(val string) (string, error) { - if alphaRegexp.FindString(val) == "" { - return "", fmt.Errorf("%s is not a valid domain", val) - } - ns := domainRegexp.FindSubmatch([]byte(val)) - if len(ns) > 0 && len(ns[1]) < 255 { - return string(ns[1]), nil - } - return "", fmt.Errorf("%s is not a valid domain", val) -} - -// validateEnv validates an environment variable and returns it. -// If no value is specified, it returns the current value using os.Getenv. -// for env flag -func validateEnv(val string) (string, error) { //nolint - arr := strings.Split(val, "=") - if len(arr) > 1 { - return val, nil - } - if !doesEnvExist(val) { - return val, nil - } - return fmt.Sprintf("%s=%s", val, os.Getenv(val)), nil -} - -func doesEnvExist(name string) bool { - for _, entry := range os.Environ() { - parts := strings.SplitN(entry, "=", 2) - if parts[0] == name { - return true - } - } - return false -} - -// reads a file of line terminated key=value pairs, and overrides any keys -// present in the file with additional pairs specified in the override parameter -// for env-file and labels-file flags -func readKVStrings(files []string, override []string) ([]string, error) { - envVariables := []string{} - for _, ef := range files { - parsedVars, err := parseEnvFile(ef) - if err != nil { - return nil, err - } - envVariables = append(envVariables, parsedVars...) - } - // parse the '-e' and '--env' after, to allow override - envVariables = append(envVariables, override...) - - return envVariables, nil -} - -// parseEnvFile reads a file with environment variables enumerated by lines -func parseEnvFile(filename string) ([]string, error) { - fh, err := os.Open(filename) - if err != nil { - return []string{}, err - } - defer fh.Close() - - lines := []string{} - scanner := bufio.NewScanner(fh) - for scanner.Scan() { - // trim the line from all leading whitespace first - line := strings.TrimLeft(scanner.Text(), whiteSpaces) - // line is not empty, and not starting with '#' - if len(line) > 0 && !strings.HasPrefix(line, "#") { - data := strings.SplitN(line, "=", 2) - - // trim the front of a variable, but nothing else - variable := strings.TrimLeft(data[0], whiteSpaces) - if strings.ContainsAny(variable, whiteSpaces) { - return []string{}, errors.Errorf("variable %q has white spaces, poorly formatted environment", variable) - } - - if len(data) > 1 { - - // pass the value through, no trimming - lines = append(lines, fmt.Sprintf("%s=%s", variable, data[1])) - } else { - // if only a pass-through variable is given, clean it up. - lines = append(lines, fmt.Sprintf("%s=%s", strings.TrimSpace(line), os.Getenv(line))) - } - } - } - return lines, scanner.Err() -} - -// NsIpc represents the container ipc stack. -// for ipc flag -type NsIpc string - -// IsPrivate indicates whether the container uses its private ipc stack. -func (n NsIpc) IsPrivate() bool { - return !(n.IsHost() || n.IsContainer()) -} - -// IsHost indicates whether the container uses the host's ipc stack. -func (n NsIpc) IsHost() bool { - return n == "host" -} - -// IsContainer indicates whether the container uses a container's ipc stack. -func (n NsIpc) IsContainer() bool { - parts := strings.SplitN(string(n), ":", 2) - return len(parts) > 1 && parts[0] == "container" -} - -// Valid indicates whether the ipc stack is valid. -func (n NsIpc) Valid() bool { - parts := strings.Split(string(n), ":") - switch mode := parts[0]; mode { - case "", "host": - case "container": - if len(parts) != 2 || parts[1] == "" { - return false - } - default: - return false - } - return true -} - -// Container returns the name of the container ipc stack is going to be used. -func (n NsIpc) Container() string { - parts := strings.SplitN(string(n), ":", 2) - if len(parts) > 1 { - return parts[1] - } - return "" -} - -// validateLabel validates that the specified string is a valid label, and returns it. -// Labels are in the form on key=value. -// for label flag -func validateLabel(val string) (string, error) { //nolint - if strings.Count(val, "=") < 1 { - return "", fmt.Errorf("bad attribute format: %s", val) - } - return val, nil -} - -// validateMACAddress validates a MAC address. -// for mac-address flag -func validateMACAddress(val string) (string, error) { //nolint - _, err := net.ParseMAC(strings.TrimSpace(val)) - if err != nil { - return "", err - } - return val, nil -} - -// validateLink validates that the specified string has a valid link format (containerName:alias). -func validateLink(val string) (string, error) { //nolint - if _, _, err := parseLink(val); err != nil { - return val, err - } - return val, nil -} - -// parseLink parses and validates the specified string as a link format (name:alias) -func parseLink(val string) (string, string, error) { - if val == "" { - return "", "", fmt.Errorf("empty string specified for links") - } - arr := strings.Split(val, ":") - if len(arr) > 2 { - return "", "", fmt.Errorf("bad format for links: %s", val) - } - if len(arr) == 1 { - return val, val, nil - } - // This is kept because we can actually get a HostConfig with links - // from an already created container and the format is not `foo:bar` - // but `/foo:/c1/bar` - if strings.HasPrefix(arr[0], "/") { - _, alias := path.Split(arr[1]) - return arr[0][1:], alias, nil - } - return arr[0], arr[1], nil -} - -// parseLoggingOpts validates the logDriver and logDriverOpts -// for log-opt and log-driver flags -func parseLoggingOpts(logDriver string, logDriverOpt []string) (map[string]string, error) { //nolint - logOptsMap := convertKVStringsToMap(logDriverOpt) - if logDriver == "none" && len(logDriverOpt) > 0 { - return map[string]string{}, errors.Errorf("invalid logging opts for driver %s", logDriver) - } - return logOptsMap, nil -} - -// NsPid represents the pid namespace of the container. -//for pid flag -type NsPid string - -// IsPrivate indicates whether the container uses its own new pid namespace. -func (n NsPid) IsPrivate() bool { - return !(n.IsHost() || n.IsContainer()) -} - -// IsHost indicates whether the container uses the host's pid namespace. -func (n NsPid) IsHost() bool { - return n == "host" -} - -// IsContainer indicates whether the container uses a container's pid namespace. -func (n NsPid) IsContainer() bool { - parts := strings.SplitN(string(n), ":", 2) - return len(parts) > 1 && parts[0] == "container" -} - -// Valid indicates whether the pid namespace is valid. -func (n NsPid) Valid() bool { - parts := strings.Split(string(n), ":") - switch mode := parts[0]; mode { - case "", "host": - case "container": - if len(parts) != 2 || parts[1] == "" { - return false - } - default: - return false - } - return true -} - -// Container returns the name of the container whose pid namespace is going to be used. -func (n NsPid) Container() string { - parts := strings.SplitN(string(n), ":", 2) - if len(parts) > 1 { - return parts[1] - } - return "" -} - -// parsePortSpecs receives port specs in the format of ip:public:private/proto and parses -// these in to the internal types -// for publish, publish-all, and expose flags -func parsePortSpecs(ports []string) ([]*pb.PortMapping, error) { //nolint - var portMappings []*pb.PortMapping - for _, rawPort := range ports { - portMapping, err := parsePortSpec(rawPort) - if err != nil { - return nil, err - } - - portMappings = append(portMappings, portMapping...) - } - return portMappings, nil -} - -func validateProto(proto string) bool { - for _, availableProto := range []string{"tcp", "udp"} { - if availableProto == proto { - return true - } - } - return false -} - -// parsePortSpec parses a port specification string into a slice of PortMappings -func parsePortSpec(rawPort string) ([]*pb.PortMapping, error) { - var proto string - rawIP, hostPort, containerPort := splitParts(rawPort) - proto, containerPort = splitProtoPort(containerPort) - - // Strip [] from IPV6 addresses - ip, _, err := net.SplitHostPort(rawIP + ":") - if err != nil { - return nil, fmt.Errorf("Invalid ip address %v: %s", rawIP, err) - } - if ip != "" && net.ParseIP(ip) == nil { - return nil, fmt.Errorf("Invalid ip address: %s", ip) - } - if containerPort == "" { - return nil, fmt.Errorf("No port specified: %s", rawPort) - } - - startPort, endPort, err := parsePortRange(containerPort) - if err != nil { - return nil, fmt.Errorf("Invalid containerPort: %s", containerPort) - } - - var startHostPort, endHostPort uint64 = 0, 0 - if len(hostPort) > 0 { - startHostPort, endHostPort, err = parsePortRange(hostPort) - if err != nil { - return nil, fmt.Errorf("Invalid hostPort: %s", hostPort) - } - } - - if hostPort != "" && (endPort-startPort) != (endHostPort-startHostPort) { - // Allow host port range iff containerPort is not a range. - // In this case, use the host port range as the dynamic - // host port range to allocate into. - if endPort != startPort { - return nil, fmt.Errorf("Invalid ranges specified for container and host Ports: %s and %s", containerPort, hostPort) - } - } - - if !validateProto(strings.ToLower(proto)) { - return nil, fmt.Errorf("invalid proto: %s", proto) - } - - protocol := pb.Protocol_TCP - if strings.ToLower(proto) == "udp" { - protocol = pb.Protocol_UDP - } - - var ports []*pb.PortMapping - for i := uint64(0); i <= (endPort - startPort); i++ { - containerPort = strconv.FormatUint(startPort+i, 10) - if len(hostPort) > 0 { - hostPort = strconv.FormatUint(startHostPort+i, 10) - } - // Set hostPort to a range only if there is a single container port - // and a dynamic host port. - if startPort == endPort && startHostPort != endHostPort { - hostPort = fmt.Sprintf("%s-%s", hostPort, strconv.FormatUint(endHostPort, 10)) - } - - ctrPort, err := strconv.ParseInt(containerPort, 10, 32) - if err != nil { - return nil, err - } - hPort, err := strconv.ParseInt(hostPort, 10, 32) - if err != nil { - return nil, err - } - - port := &pb.PortMapping{ - Protocol: protocol, - ContainerPort: int32(ctrPort), - HostPort: int32(hPort), - HostIp: ip, - } - - ports = append(ports, port) - } - return ports, nil -} - -// parsePortRange parses and validates the specified string as a port-range (8000-9000) -func parsePortRange(ports string) (uint64, uint64, error) { - if ports == "" { - return 0, 0, fmt.Errorf("empty string specified for ports") - } - if !strings.Contains(ports, "-") { - start, err := strconv.ParseUint(ports, 10, 16) - end := start - return start, end, err - } - - parts := strings.Split(ports, "-") - start, err := strconv.ParseUint(parts[0], 10, 16) - if err != nil { - return 0, 0, err - } - end, err := strconv.ParseUint(parts[1], 10, 16) - if err != nil { - return 0, 0, err - } - if end < start { - return 0, 0, fmt.Errorf("Invalid range specified for the Port: %s", ports) - } - return start, end, nil -} - -// splitParts separates the different parts of rawPort -func splitParts(rawport string) (string, string, string) { - parts := strings.Split(rawport, ":") - n := len(parts) - containerport := parts[n-1] - - switch n { - case 1: - return "", "", containerport - case 2: - return "", parts[0], containerport - case 3: - return parts[0], parts[1], containerport - default: - return strings.Join(parts[:n-2], ":"), parts[n-2], containerport - } -} - -// splitProtoPort splits a port in the format of port/proto -func splitProtoPort(rawPort string) (string, string) { - parts := strings.Split(rawPort, "/") - l := len(parts) - if len(rawPort) == 0 || l == 0 || len(parts[0]) == 0 { - return "", "" - } - if l == 1 { - return "tcp", rawPort - } - if len(parts[1]) == 0 { - return "tcp", parts[0] - } - return parts[1], parts[0] -} - -// takes a local seccomp file and reads its file contents -// for security-opt flag -func parseSecurityOpts(securityOpts []string) ([]string, error) { //nolint - for key, opt := range securityOpts { - con := strings.SplitN(opt, "=", 2) - if len(con) == 1 && con[0] != "no-new-privileges" { - if strings.Index(opt, ":") != -1 { - con = strings.SplitN(opt, ":", 2) - } else { - return securityOpts, fmt.Errorf("Invalid --security-opt: %q", opt) - } - } - if con[0] == "seccomp" && con[1] != "unconfined" { - f, err := ioutil.ReadFile(con[1]) - if err != nil { - return securityOpts, fmt.Errorf("opening seccomp profile (%s) failed: %v", con[1], err) - } - b := bytes.NewBuffer(nil) - if err := json.Compact(b, f); err != nil { - return securityOpts, fmt.Errorf("compacting json for seccomp profile (%s) failed: %v", con[1], err) - } - securityOpts[key] = fmt.Sprintf("seccomp=%s", b.Bytes()) - } - } - - return securityOpts, nil -} - -// parses storage options per container into a map -// for storage-opt flag -func parseStorageOpts(storageOpts []string) (map[string]string, error) { //nolint - m := make(map[string]string) - for _, option := range storageOpts { - if strings.Contains(option, "=") { - opt := strings.SplitN(option, "=", 2) - m[opt[0]] = opt[1] - } else { - return nil, errors.Errorf("invalid storage option %q", option) - } - } - return m, nil -} - -// parseUser parses the the uid and gid in the format [:] -// for user flag -// FIXME: Issue from https://github.com/projectatomic/buildah/issues/66 -func parseUser(rootdir, userspec string) (specs.User, error) { //nolint - var gid64 uint64 - var gerr error = user.UnknownGroupError("error looking up group") - - spec := strings.SplitN(userspec, ":", 2) - userspec = spec[0] - groupspec := "" - if userspec == "" { - return specs.User{}, nil - } - if len(spec) > 1 { - groupspec = spec[1] - } - - uid64, uerr := strconv.ParseUint(userspec, 10, 32) - if uerr == nil && groupspec == "" { - // We parsed the user name as a number, and there's no group - // component, so we need to look up the user's primary GID. - var name string - name, gid64, gerr = lookupGroupForUIDInContainer(rootdir, uid64) - if gerr == nil { - userspec = name - } else { - if userrec, err := user.LookupId(userspec); err == nil { - gid64, gerr = strconv.ParseUint(userrec.Gid, 10, 32) - userspec = userrec.Name - } - } - } - if uerr != nil { - uid64, gid64, uerr = lookupUserInContainer(rootdir, userspec) - gerr = uerr - } - if uerr != nil { - if userrec, err := user.Lookup(userspec); err == nil { - uid64, uerr = strconv.ParseUint(userrec.Uid, 10, 32) - gid64, gerr = strconv.ParseUint(userrec.Gid, 10, 32) - } - } - - if groupspec != "" { - gid64, gerr = strconv.ParseUint(groupspec, 10, 32) - if gerr != nil { - gid64, gerr = lookupGroupInContainer(rootdir, groupspec) - } - if gerr != nil { - if group, err := user.LookupGroup(groupspec); err == nil { - gid64, gerr = strconv.ParseUint(group.Gid, 10, 32) - } - } - } - - if uerr == nil && gerr == nil { - u := specs.User{ - UID: uint32(uid64), - GID: uint32(gid64), - Username: userspec, - } - return u, nil - } - - err := errors.Wrapf(uerr, "error determining run uid") - if uerr == nil { - err = errors.Wrapf(gerr, "error determining run gid") - } - return specs.User{}, err -} - -// convertKVStringsToMap converts ["key=value"] to {"key":"value"} -func convertKVStringsToMap(values []string) map[string]string { - result := make(map[string]string, len(values)) - for _, value := range values { - kv := strings.SplitN(value, "=", 2) - if len(kv) == 1 { - result[kv[0]] = "" - } else { - result[kv[0]] = kv[1] - } - } - - return result -} - -// NsUser represents userns mode in the container. -// for userns flag -type NsUser string - -// IsHost indicates whether the container uses the host's userns. -func (n NsUser) IsHost() bool { - return n == "host" -} - -// IsPrivate indicates whether the container uses the a private userns. -func (n NsUser) IsPrivate() bool { - return !(n.IsHost()) -} - -// Valid indicates whether the userns is valid. -func (n NsUser) Valid() bool { - parts := strings.Split(string(n), ":") - switch mode := parts[0]; mode { - case "", "host": - default: - return false - } - return true -} - -// NsUts represents the UTS namespace of the container. -// for uts flag -type NsUts string - -// IsPrivate indicates whether the container uses its private UTS namespace. -func (n NsUts) IsPrivate() bool { - return !(n.IsHost()) -} - -// IsHost indicates whether the container uses the host's UTS namespace. -func (n NsUts) IsHost() bool { - return n == "host" -} - -// Valid indicates whether the UTS namespace is valid. -func (n NsUts) Valid() bool { - parts := strings.Split(string(n), ":") - switch mode := parts[0]; mode { - case "", "host": - default: - return false - } - return true -} - -// Takes a stringslice and converts to a uint32slice -func stringSlicetoUint32Slice(inputSlice []string) ([]uint32, error) { - var outputSlice []uint32 - for _, v := range inputSlice { - u, err := strconv.ParseUint(v, 10, 32) - if err != nil { - return outputSlice, err - } - outputSlice = append(outputSlice, uint32(u)) - } - return outputSlice, nil -} diff --git a/cmd/kpod/pause.go b/cmd/kpod/pause.go deleted file mode 100644 index 5a8229eb..00000000 --- a/cmd/kpod/pause.go +++ /dev/null @@ -1,58 +0,0 @@ -package main - -import ( - "fmt" - "github.com/kubernetes-incubator/cri-o/libkpod" - "github.com/pkg/errors" - "github.com/urfave/cli" - "os" -) - -var ( - pauseDescription = ` - kpod pause - - Pauses one or more running containers. The container name or ID can be used. -` - pauseCommand = cli.Command{ - Name: "pause", - Usage: "Pauses all the processes in one or more containers", - Description: pauseDescription, - Action: pauseCmd, - ArgsUsage: "CONTAINER-NAME [CONTAINER-NAME ...]", - } -) - -func pauseCmd(c *cli.Context) error { - args := c.Args() - if len(args) < 1 { - return errors.Errorf("you must provide at least one container name or id") - } - - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "could not get config") - } - server, err := libkpod.New(config) - if err != nil { - return errors.Wrapf(err, "could not get container server") - } - defer server.Shutdown() - if err := server.Update(); err != nil { - return errors.Wrapf(err, "could not update list of containers") - } - var lastError error - for _, container := range c.Args() { - cid, err := server.ContainerPause(container) - if err != nil { - if lastError != nil { - fmt.Fprintln(os.Stderr, lastError) - } - lastError = errors.Wrapf(err, "failed to pause container %v", container) - } else { - fmt.Println(cid) - } - } - - return lastError -} diff --git a/cmd/kpod/ps.go b/cmd/kpod/ps.go deleted file mode 100644 index 76bc8b8b..00000000 --- a/cmd/kpod/ps.go +++ /dev/null @@ -1,665 +0,0 @@ -package main - -import ( - "os" - "path/filepath" - "reflect" - "regexp" - "strconv" - "strings" - "time" - - "github.com/docker/go-units" - specs "github.com/opencontainers/runtime-spec/specs-go" - "github.com/sirupsen/logrus" - - "k8s.io/apimachinery/pkg/fields" - - "github.com/kubernetes-incubator/cri-o/cmd/kpod/formats" - "github.com/kubernetes-incubator/cri-o/libkpod" - "github.com/kubernetes-incubator/cri-o/oci" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -type psOptions struct { - all bool - filter string - format string - last int - latest bool - noTrunc bool - quiet bool - size bool - label string - namespace bool -} - -type psTemplateParams struct { - ID string - Image string - Command string - CreatedAt string - RunningFor string - Status string - Ports string - Size string - Names string - Labels string - Mounts string - PID int - Cgroup string - IPC string - MNT string - NET string - PIDNS string - User string - UTS string -} - -// psJSONParams is only used when the JSON format is specified, -// and is better for data processing from JSON. -// psJSONParams will be populated by data from libkpod.ContainerData, -// the members of the struct are the sama data types as their sources. -type psJSONParams struct { - ID string `json:"id"` - Image string `json:"image"` - ImageID string `json:"image_id"` - Command string `json:"command"` - CreatedAt time.Time `json:"createdAt"` - RunningFor time.Duration `json:"runningFor"` - Status string `json:"status"` - Ports map[string]struct{} `json:"ports"` - Size uint `json:"size"` - Names string `json:"names"` - Labels fields.Set `json:"labels"` - Mounts []specs.Mount `json:"mounts"` - ContainerRunning bool `json:"ctrRunning"` - Namespaces *namespace `json:"namespace,omitempty"` -} - -type namespace struct { - PID string `json:"pid,omitempty"` - Cgroup string `json:"cgroup,omitempty"` - IPC string `json:"ipc,omitempty"` - MNT string `json:"mnt,omitempty"` - NET string `json:"net,omitempty"` - PIDNS string `json:"pidns,omitempty"` - User string `json:"user,omitempty"` - UTS string `json:"uts,omitempty"` -} - -var ( - psFlags = []cli.Flag{ - cli.BoolFlag{ - Name: "all, a", - Usage: "Show all the containers, default is only running containers", - }, - cli.StringFlag{ - Name: "filter, f", - Usage: "Filter output based on conditions given", - }, - cli.StringFlag{ - Name: "format", - Usage: "Pretty-print containers to JSON or using a Go template", - }, - cli.IntFlag{ - Name: "last, n", - Usage: "Print the n last created containers (all states)", - Value: -1, - }, - cli.BoolFlag{ - Name: "latest, l", - Usage: "Show the latest container created (all states)", - }, - cli.BoolFlag{ - Name: "no-trunc", - Usage: "Display the extended information", - }, - cli.BoolFlag{ - Name: "quiet, q", - Usage: "Print the numeric IDs of the containers only", - }, - cli.BoolFlag{ - Name: "size, s", - Usage: "Display the total file sizes", - }, - cli.BoolFlag{ - Name: "namespace, ns", - Usage: "Display namespace information", - }, - } - psDescription = "Prints out information about the containers" - psCommand = cli.Command{ - Name: "ps", - Usage: "List containers", - Description: psDescription, - Flags: psFlags, - Action: psCmd, - ArgsUsage: "", - } -) - -func psCmd(c *cli.Context) error { - if err := validateFlags(c, psFlags); err != nil { - return err - } - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "could not get config") - } - server, err := libkpod.New(config) - if err != nil { - return errors.Wrapf(err, "error creating server") - } - if err := server.Update(); err != nil { - return errors.Wrapf(err, "error updating list of containers") - } - - if len(c.Args()) > 0 { - return errors.Errorf("too many arguments, ps takes no arguments") - } - - format := genPsFormat(c.Bool("quiet"), c.Bool("size"), c.Bool("namespace")) - if c.IsSet("format") { - format = c.String("format") - } - - opts := psOptions{ - all: c.Bool("all"), - filter: c.String("filter"), - format: format, - last: c.Int("last"), - latest: c.Bool("latest"), - noTrunc: c.Bool("no-trunc"), - quiet: c.Bool("quiet"), - size: c.Bool("size"), - namespace: c.Bool("namespace"), - } - - // all, latest, and last are mutually exclusive. Only one flag can be used at a time - exclusiveOpts := 0 - if opts.last >= 0 { - exclusiveOpts++ - } - if opts.latest { - exclusiveOpts++ - } - if opts.all { - exclusiveOpts++ - } - if exclusiveOpts > 1 { - return errors.Errorf("Last, latest and all are mutually exclusive") - } - - containers, err := server.ListContainers() - if err != nil { - return errors.Wrapf(err, "error getting containers from server") - } - var params *FilterParamsPS - if opts.filter != "" { - params, err = parseFilter(opts.filter, containers) - if err != nil { - return errors.Wrapf(err, "error parsing filter") - } - } else { - params = nil - } - - containerList := getContainersMatchingFilter(containers, params, server) - - return generatePsOutput(containerList, server, opts) -} - -// generate the template based on conditions given -func genPsFormat(quiet, size, namespace bool) (format string) { - if quiet { - return formats.IDString - } - if namespace { - format = "table {{.ID}}\t{{.Names}}\t{{.PID}}\t{{.Cgroup}}\t{{.IPC}}\t{{.MNT}}\t{{.NET}}\t{{.PIDNS}}\t{{.User}}\t{{.UTS}}\t" - return - } - format = "table {{.ID}}\t{{.Image}}\t{{.Command}}\t{{.CreatedAt}}\t{{.Status}}\t{{.Ports}}\t{{.Names}}\t" - if size { - format += "{{.Size}}\t" - } - return -} - -func psToGeneric(templParams []psTemplateParams, JSONParams []psJSONParams) (genericParams []interface{}) { - if len(templParams) > 0 { - for _, v := range templParams { - genericParams = append(genericParams, interface{}(v)) - } - return - } - for _, v := range JSONParams { - genericParams = append(genericParams, interface{}(v)) - } - return -} - -// generate the accurate header based on template given -func (p *psTemplateParams) headerMap() map[string]string { - v := reflect.Indirect(reflect.ValueOf(p)) - values := make(map[string]string) - - for i := 0; i < v.NumField(); i++ { - key := v.Type().Field(i).Name - value := key - if value == "ID" { - value = "Container" + value - } - values[key] = strings.ToUpper(splitCamelCase(value)) - } - return values -} - -// getContainers gets the containers that match the flags given -func getContainers(containers []*libkpod.ContainerData, opts psOptions) []*libkpod.ContainerData { - var containersOutput []*libkpod.ContainerData - if opts.last >= 0 && opts.last < len(containers) { - for i := 0; i < opts.last; i++ { - containersOutput = append(containersOutput, containers[i]) - } - return containersOutput - } - if opts.latest { - return []*libkpod.ContainerData{containers[0]} - } - if opts.all || opts.last >= len(containers) { - return containers - } - for _, ctr := range containers { - if ctr.State.Status == oci.ContainerStateRunning { - containersOutput = append(containersOutput, ctr) - } - } - return containersOutput -} - -// getTemplateOutput returns the modified container information -func getTemplateOutput(containers []*libkpod.ContainerData, opts psOptions) (psOutput []psTemplateParams) { - var status string - for _, ctr := range containers { - ctrID := ctr.ID - runningFor := units.HumanDuration(time.Since(ctr.State.Created)) - createdAt := runningFor + " ago" - command := getStrFromSquareBrackets(ctr.ImageCreatedBy) - imageName := ctr.FromImage - mounts := getMounts(ctr.Mounts, opts.noTrunc) - ports := getPorts(ctr.Config.ExposedPorts) - size := units.HumanSize(float64(ctr.SizeRootFs)) - labels := getLabels(ctr.Labels) - - ns := getNamespaces(ctr.State.Pid) - - switch ctr.State.Status { - case oci.ContainerStateStopped: - status = "Exited (" + strconv.FormatInt(int64(ctr.State.ExitCode), 10) + ") " + runningFor + " ago" - case oci.ContainerStateRunning: - status = "Up " + runningFor + " ago" - case oci.ContainerStatePaused: - status = "Paused" - default: - status = "Created" - } - - if !opts.noTrunc { - ctrID = ctr.ID[:idTruncLength] - imageName = getImageName(ctr.FromImage) - } - - params := psTemplateParams{ - ID: ctrID, - Image: imageName, - Command: command, - CreatedAt: createdAt, - RunningFor: runningFor, - Status: status, - Ports: ports, - Size: size, - Names: ctr.Name, - Labels: labels, - Mounts: mounts, - PID: ctr.State.Pid, - Cgroup: ns.Cgroup, - IPC: ns.IPC, - MNT: ns.MNT, - NET: ns.NET, - PIDNS: ns.PID, - User: ns.User, - UTS: ns.UTS, - } - psOutput = append(psOutput, params) - } - return -} - -func getNamespaces(pid int) *namespace { - ctrPID := strconv.Itoa(pid) - cgroup, _ := getNamespaceInfo(filepath.Join("/proc", ctrPID, "ns", "cgroup")) - ipc, _ := getNamespaceInfo(filepath.Join("/proc", ctrPID, "ns", "ipc")) - mnt, _ := getNamespaceInfo(filepath.Join("/proc", ctrPID, "ns", "mnt")) - net, _ := getNamespaceInfo(filepath.Join("/proc", ctrPID, "ns", "net")) - pidns, _ := getNamespaceInfo(filepath.Join("/proc", ctrPID, "ns", "pid")) - user, _ := getNamespaceInfo(filepath.Join("/proc", ctrPID, "ns", "user")) - uts, _ := getNamespaceInfo(filepath.Join("/proc", ctrPID, "ns", "uts")) - - return &namespace{ - PID: ctrPID, - Cgroup: cgroup, - IPC: ipc, - MNT: mnt, - NET: net, - PIDNS: pidns, - User: user, - UTS: uts, - } -} - -func getNamespaceInfo(path string) (string, error) { - val, err := os.Readlink(path) - if err != nil { - return "", errors.Wrapf(err, "error getting info from %q", path) - } - return getStrFromSquareBrackets(val), nil -} - -// getJSONOutput returns the container info in its raw form -func getJSONOutput(containers []*libkpod.ContainerData, nSpace bool) (psOutput []psJSONParams) { - var ns *namespace - for _, ctr := range containers { - if nSpace { - ns = getNamespaces(ctr.State.Pid) - } - - params := psJSONParams{ - ID: ctr.ID, - Image: ctr.FromImage, - ImageID: ctr.FromImageID, - Command: getStrFromSquareBrackets(ctr.ImageCreatedBy), - CreatedAt: ctr.State.Created, - RunningFor: time.Since(ctr.State.Created), - Status: ctr.State.Status, - Ports: ctr.Config.ExposedPorts, - Size: ctr.SizeRootFs, - Names: ctr.Name, - Labels: ctr.Labels, - Mounts: ctr.Mounts, - ContainerRunning: ctr.State.Status == oci.ContainerStateRunning, - Namespaces: ns, - } - psOutput = append(psOutput, params) - } - return -} - -func generatePsOutput(containers []*libkpod.ContainerData, server *libkpod.ContainerServer, opts psOptions) error { - containersOutput := getContainers(containers, opts) - // In the case of JSON, we want to continue so we at least pass - // {} --valid JSON-- to the consumer - if len(containersOutput) == 0 && opts.format != formats.JSONString { - return nil - } - - var out formats.Writer - - switch opts.format { - case formats.JSONString: - psOutput := getJSONOutput(containersOutput, opts.namespace) - out = formats.JSONStructArray{Output: psToGeneric([]psTemplateParams{}, psOutput)} - default: - psOutput := getTemplateOutput(containersOutput, opts) - out = formats.StdoutTemplateArray{Output: psToGeneric(psOutput, []psJSONParams{}), Template: opts.format, Fields: psOutput[0].headerMap()} - } - - return formats.Writer(out).Out() -} - -// getStrFromSquareBrackets gets the string inside [] from a string -func getStrFromSquareBrackets(cmd string) string { - reg, err := regexp.Compile(".*\\[|\\].*") - if err != nil { - return "" - } - arr := strings.Split(reg.ReplaceAllLiteralString(cmd, ""), ",") - return strings.Join(arr, ",") -} - -// getImageName shortens the image name -func getImageName(img string) string { - arr := strings.Split(img, "/") - if arr[0] == "docker.io" && arr[1] == "library" { - img = strings.Join(arr[2:], "/") - } else if arr[0] == "docker.io" { - img = strings.Join(arr[1:], "/") - } - return img -} - -// getLabels converts the labels to a string of the form "key=value, key2=value2" -func getLabels(labels fields.Set) string { - var arr []string - if len(labels) > 0 { - for key, val := range labels { - temp := key + "=" + val - arr = append(arr, temp) - } - return strings.Join(arr, ",") - } - return "" -} - -// getMounts converts the volumes mounted to a string of the form "mount1, mount2" -// it truncates it if noTrunc is false -func getMounts(mounts []specs.Mount, noTrunc bool) string { - var arr []string - if len(mounts) == 0 { - return "" - } - for _, mount := range mounts { - if noTrunc { - arr = append(arr, mount.Source) - continue - } - tempArr := strings.SplitAfter(mount.Source, "/") - if len(tempArr) >= 3 { - arr = append(arr, strings.Join(tempArr[:3], "")) - } else { - arr = append(arr, mount.Source) - } - } - return strings.Join(arr, ",") -} - -// getPorts converts the ports used to a string of the from "port1, port2" -func getPorts(ports map[string]struct{}) string { - var arr []string - if len(ports) == 0 { - return "" - } - for key := range ports { - arr = append(arr, key) - } - return strings.Join(arr, ",") -} - -// FilterParamsPS contains the filter options for ps -type FilterParamsPS struct { - id string - label string - name string - exited int32 - status string - ancestor string - before time.Time - since time.Time - volume string -} - -// parseFilter takes a filter string and a list of containers and filters it -func parseFilter(filter string, containers []*oci.Container) (*FilterParamsPS, error) { - params := new(FilterParamsPS) - allFilters := strings.Split(filter, ",") - - for _, param := range allFilters { - pair := strings.SplitN(param, "=", 2) - switch strings.TrimSpace(pair[0]) { - case "id": - params.id = pair[1] - case "label": - params.label = pair[1] - case "name": - params.name = pair[1] - case "exited": - exitedCode, err := strconv.ParseInt(pair[1], 10, 32) - if err != nil { - return nil, errors.Errorf("exited code out of range %q", pair[1]) - } - params.exited = int32(exitedCode) - case "status": - params.status = pair[1] - case "ancestor": - params.ancestor = pair[1] - case "before": - if ctr, err := findContainer(containers, pair[1]); err == nil { - params.before = ctr.CreatedAt() - } else { - return nil, errors.Wrapf(err, "no such container %q", pair[1]) - } - case "since": - if ctr, err := findContainer(containers, pair[1]); err == nil { - params.before = ctr.CreatedAt() - } else { - return nil, errors.Wrapf(err, "no such container %q", pair[1]) - } - case "volume": - params.volume = pair[1] - default: - return nil, errors.Errorf("invalid filter %q", pair[0]) - } - } - return params, nil -} - -// findContainer finds a container with a specific name or id from a list of containers -func findContainer(containers []*oci.Container, ref string) (*oci.Container, error) { - for _, ctr := range containers { - if strings.HasPrefix(ctr.ID(), ref) || ctr.Name() == ref { - return ctr, nil - } - } - return nil, errors.Errorf("could not find container") -} - -// matchesFilter checks if a container matches all the filter parameters -func matchesFilter(ctrData *libkpod.ContainerData, params *FilterParamsPS) bool { - if params == nil { - return true - } - if params.id != "" && !matchesID(ctrData, params.id) { - return false - } - if params.name != "" && !matchesName(ctrData, params.name) { - return false - } - if !params.before.IsZero() && !matchesBeforeContainer(ctrData, params.before) { - return false - } - if !params.since.IsZero() && !matchesSinceContainer(ctrData, params.since) { - return false - } - if params.exited > 0 && !matchesExited(ctrData, params.exited) { - return false - } - if params.status != "" && !matchesStatus(ctrData, params.status) { - return false - } - if params.ancestor != "" && !matchesAncestor(ctrData, params.ancestor) { - return false - } - if params.label != "" && !matchesLabel(ctrData, params.label) { - return false - } - if params.volume != "" && !matchesVolume(ctrData, params.volume) { - return false - } - return true -} - -// GetContainersMatchingFilter returns a slice of all the containers that match the provided filter parameters -func getContainersMatchingFilter(containers []*oci.Container, filter *FilterParamsPS, server *libkpod.ContainerServer) []*libkpod.ContainerData { - var filteredCtrs []*libkpod.ContainerData - for _, ctr := range containers { - ctrData, err := server.GetContainerData(ctr.ID(), true) - if err != nil { - logrus.Warn("unable to get container data for matched container") - } - if filter == nil || matchesFilter(ctrData, filter) { - filteredCtrs = append(filteredCtrs, ctrData) - } - } - return filteredCtrs -} - -// matchesID returns true if the id's match -func matchesID(ctrData *libkpod.ContainerData, id string) bool { - return strings.HasPrefix(ctrData.ID, id) -} - -// matchesBeforeContainer returns true if the container was created before the filter image -func matchesBeforeContainer(ctrData *libkpod.ContainerData, beforeTime time.Time) bool { - return ctrData.State.Created.Before(beforeTime) -} - -// matchesSincecontainer returns true if the container was created since the filter image -func matchesSinceContainer(ctrData *libkpod.ContainerData, sinceTime time.Time) bool { - return ctrData.State.Created.After(sinceTime) -} - -// matchesLabel returns true if the container label matches that of the filter label -func matchesLabel(ctrData *libkpod.ContainerData, label string) bool { - pair := strings.SplitN(label, "=", 2) - if val, ok := ctrData.Labels[pair[0]]; ok { - if len(pair) == 2 && val == pair[1] { - return true - } - if len(pair) == 1 { - return true - } - return false - } - return false -} - -// matchesName returns true if the names are identical -func matchesName(ctrData *libkpod.ContainerData, name string) bool { - return ctrData.Name == name -} - -// matchesExited returns true if the exit codes are identical -func matchesExited(ctrData *libkpod.ContainerData, exited int32) bool { - return ctrData.State.ExitCode == exited -} - -// matchesStatus returns true if the container status matches that of filter status -func matchesStatus(ctrData *libkpod.ContainerData, status string) bool { - return ctrData.State.Status == status -} - -// matchesAncestor returns true if filter ancestor is in container image name -func matchesAncestor(ctrData *libkpod.ContainerData, ancestor string) bool { - return strings.Contains(ctrData.FromImage, ancestor) -} - -// matchesVolue returns true if the volume mounted or path to volue of the container matches that of filter volume -func matchesVolume(ctrData *libkpod.ContainerData, volume string) bool { - for _, vol := range ctrData.Mounts { - if strings.Contains(vol.Source, volume) { - return true - } - } - return false -} diff --git a/cmd/kpod/pull.go b/cmd/kpod/pull.go deleted file mode 100644 index 73822127..00000000 --- a/cmd/kpod/pull.go +++ /dev/null @@ -1,118 +0,0 @@ -package main - -import ( - "fmt" - "io" - "os" - - "golang.org/x/crypto/ssh/terminal" - - "github.com/containers/image/types" - "github.com/kubernetes-incubator/cri-o/libpod" - "github.com/kubernetes-incubator/cri-o/libpod/common" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" - "github.com/urfave/cli" -) - -var ( - pullFlags = []cli.Flag{ - cli.StringFlag{ - Name: "authfile", - Usage: "Path of the authentication file. Default is ${XDG_RUNTIME_DIR}/containers/auth.json", - }, - cli.StringFlag{ - Name: "cert-dir", - Usage: "`pathname` of a directory containing TLS certificates and keys", - }, - cli.StringFlag{ - Name: "creds", - Usage: "`credentials` (USERNAME:PASSWORD) to use for authenticating to a registry", - }, - cli.BoolFlag{ - Name: "quiet, q", - Usage: "Suppress output information when pulling images", - }, - cli.StringFlag{ - Name: "signature-policy", - Usage: "`pathname` of signature policy file (not usually used)", - }, - cli.BoolTFlag{ - Name: "tls-verify", - Usage: "require HTTPS and verify certificates when contacting registries (default: true)", - }, - } - - pullDescription = "Pulls an image from a registry and stores it locally.\n" + - "An image can be pulled using its tag or digest. If a tag is not\n" + - "specified, the image with the 'latest' tag (if it exists) is pulled." - pullCommand = cli.Command{ - Name: "pull", - Usage: "pull an image from a registry", - Description: pullDescription, - Flags: pullFlags, - Action: pullCmd, - ArgsUsage: "", - } -) - -// pullCmd gets the data from the command line and calls pullImage -// to copy an image from a registry to a local machine -func pullCmd(c *cli.Context) error { - runtime, err := getRuntime(c) - if err != nil { - return errors.Wrapf(err, "could not get runtime") - } - defer runtime.Shutdown(false) - - args := c.Args() - if len(args) == 0 { - logrus.Errorf("an image name must be specified") - return nil - } - if len(args) > 1 { - logrus.Errorf("too many arguments. Requires exactly 1") - return nil - } - if err := validateFlags(c, pullFlags); err != nil { - return err - } - image := args[0] - - var registryCreds *types.DockerAuthConfig - if c.String("creds") != "" { - creds, err := common.ParseRegistryCreds(c.String("creds")) - if err != nil { - if err == common.ErrNoPassword { - fmt.Print("Password: ") - password, err := terminal.ReadPassword(0) - if err != nil { - return errors.Wrapf(err, "could not read password from terminal") - } - creds.Password = string(password) - } else { - return err - } - } - registryCreds = creds - } - - var writer io.Writer - if !c.Bool("quiet") { - writer = os.Stdout - } - - options := libpod.CopyOptions{ - SignaturePolicyPath: c.String("signature-policy"), - AuthFile: c.String("authfile"), - DockerRegistryOptions: common.DockerRegistryOptions{ - DockerRegistryCreds: registryCreds, - DockerCertPath: c.String("cert-dir"), - DockerInsecureSkipTLSVerify: !c.BoolT("tls-verify"), - }, - Writer: writer, - } - - return runtime.PullImage(image, options) - -} diff --git a/cmd/kpod/push.go b/cmd/kpod/push.go deleted file mode 100644 index 506d97f4..00000000 --- a/cmd/kpod/push.go +++ /dev/null @@ -1,132 +0,0 @@ -package main - -import ( - "fmt" - "io" - "os" - - "github.com/containers/image/types" - "github.com/containers/storage/pkg/archive" - "github.com/kubernetes-incubator/cri-o/libpod" - "github.com/kubernetes-incubator/cri-o/libpod/common" - "github.com/pkg/errors" - "github.com/urfave/cli" - "golang.org/x/crypto/ssh/terminal" -) - -var ( - pushFlags = []cli.Flag{ - cli.StringFlag{ - Name: "signature-policy", - Usage: "`pathname` of signature policy file (not usually used)", - Hidden: true, - }, - cli.StringFlag{ - Name: "creds", - Usage: "`credentials` (USERNAME:PASSWORD) to use for authenticating to a registry", - }, - cli.StringFlag{ - Name: "cert-dir", - Usage: "`pathname` of a directory containing TLS certificates and keys", - }, - cli.BoolTFlag{ - Name: "tls-verify", - Usage: "require HTTPS and verify certificates when contacting registries (default: true)", - }, - cli.BoolFlag{ - Name: "remove-signatures", - Usage: "discard any pre-existing signatures in the image", - }, - cli.StringFlag{ - Name: "sign-by", - Usage: "add a signature at the destination using the specified key", - }, - cli.BoolFlag{ - Name: "quiet, q", - Usage: "don't output progress information when pushing images", - }, - cli.StringFlag{ - Name: "authfile", - Usage: "Path of the authentication file. Default is ${XDG_RUNTIME_DIR}/containers/auth.json", - }, - } - pushDescription = fmt.Sprintf(` - Pushes an image to a specified location. - The Image "DESTINATION" uses a "transport":"details" format. - See kpod-push(1) section "DESTINATION" for the expected format`) - - pushCommand = cli.Command{ - Name: "push", - Usage: "push an image to a specified destination", - Description: pushDescription, - Flags: pushFlags, - Action: pushCmd, - ArgsUsage: "IMAGE DESTINATION", - } -) - -func pushCmd(c *cli.Context) error { - var registryCreds *types.DockerAuthConfig - - args := c.Args() - if len(args) < 2 { - return errors.New("kpod push requires exactly 2 arguments") - } - if err := validateFlags(c, pushFlags); err != nil { - return err - } - srcName := c.Args().Get(0) - destName := c.Args().Get(1) - - registryCredsString := c.String("creds") - certPath := c.String("cert-dir") - skipVerify := !c.BoolT("tls-verify") - removeSignatures := c.Bool("remove-signatures") - signBy := c.String("sign-by") - - if registryCredsString != "" { - creds, err := common.ParseRegistryCreds(registryCredsString) - if err != nil { - if err == common.ErrNoPassword { - fmt.Print("Password: ") - password, err := terminal.ReadPassword(0) - if err != nil { - return errors.Wrapf(err, "could not read password from terminal") - } - creds.Password = string(password) - } else { - return err - } - } - registryCreds = creds - } - - runtime, err := getRuntime(c) - if err != nil { - return errors.Wrapf(err, "could not create runtime") - } - defer runtime.Shutdown(false) - - var writer io.Writer - if !c.Bool("quiet") { - writer = os.Stdout - } - - options := libpod.CopyOptions{ - Compression: archive.Uncompressed, - SignaturePolicyPath: c.String("signature-policy"), - DockerRegistryOptions: common.DockerRegistryOptions{ - DockerRegistryCreds: registryCreds, - DockerCertPath: certPath, - DockerInsecureSkipTLSVerify: skipVerify, - }, - SigningOptions: common.SigningOptions{ - RemoveSignatures: removeSignatures, - SignBy: signBy, - }, - AuthFile: c.String("authfile"), - Writer: writer, - } - - return runtime.PushImage(srcName, destName, options) -} diff --git a/cmd/kpod/rename.go b/cmd/kpod/rename.go deleted file mode 100644 index b638856e..00000000 --- a/cmd/kpod/rename.go +++ /dev/null @@ -1,49 +0,0 @@ -package main - -import ( - "github.com/kubernetes-incubator/cri-o/libkpod" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -var ( - renameDescription = "Rename a container. Container may be created, running, paused, or stopped" - renameFlags = []cli.Flag{} - renameCommand = cli.Command{ - Name: "rename", - Usage: "rename a container", - Description: renameDescription, - Action: renameCmd, - ArgsUsage: "CONTAINER NEW-NAME", - Flags: renameFlags, - } -) - -func renameCmd(c *cli.Context) error { - if len(c.Args()) != 2 { - return errors.Errorf("Rename requires a src container name/ID and a dest container name") - } - if err := validateFlags(c, renameFlags); err != nil { - return err - } - - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "Could not get config") - } - server, err := libkpod.New(config) - if err != nil { - return errors.Wrapf(err, "could not get container server") - } - defer server.Shutdown() - err = server.Update() - if err != nil { - return errors.Wrapf(err, "could not update list of containers") - } - - err = server.ContainerRename(c.Args().Get(0), c.Args().Get(1)) - if err != nil { - return errors.Wrapf(err, "could not rename container") - } - return nil -} diff --git a/cmd/kpod/rm.go b/cmd/kpod/rm.go deleted file mode 100644 index c40fa41c..00000000 --- a/cmd/kpod/rm.go +++ /dev/null @@ -1,69 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/kubernetes-incubator/cri-o/libkpod" - "github.com/pkg/errors" - "github.com/urfave/cli" - "golang.org/x/net/context" -) - -var ( - rmFlags = []cli.Flag{ - cli.BoolFlag{ - Name: "force, f", - Usage: "Force removal of a running container. The default is false", - }, - } - rmDescription = "Remove one or more containers" - rmCommand = cli.Command{ - Name: "rm", - Usage: fmt.Sprintf(`kpod rm will remove one or more containers from the host. The container name or ID can be used. - This does not remove images. Running containers will not be removed without the -f option.`), - Description: rmDescription, - Flags: rmFlags, - Action: rmCmd, - ArgsUsage: "", - } -) - -// saveCmd saves the image to either docker-archive or oci -func rmCmd(c *cli.Context) error { - args := c.Args() - if len(args) == 0 { - return errors.Errorf("specify one or more containers to remove") - } - if err := validateFlags(c, rmFlags); err != nil { - return err - } - - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "could not get config") - } - server, err := libkpod.New(config) - if err != nil { - return errors.Wrapf(err, "could not get container server") - } - defer server.Shutdown() - err = server.Update() - if err != nil { - return errors.Wrapf(err, "could not update list of containers") - } - force := c.Bool("force") - - for _, container := range c.Args() { - id, err2 := server.Remove(context.Background(), container, force) - if err2 != nil { - if err == nil { - err = err2 - } else { - err = errors.Wrapf(err, "%v. Stop the container before attempting removal or use -f\n", err2) - } - } else { - fmt.Println(id) - } - } - return err -} diff --git a/cmd/kpod/rmi.go b/cmd/kpod/rmi.go deleted file mode 100644 index 3713db45..00000000 --- a/cmd/kpod/rmi.go +++ /dev/null @@ -1,56 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -var ( - rmiDescription = "removes one or more locally stored images." - rmiFlags = []cli.Flag{ - cli.BoolFlag{ - Name: "force, f", - Usage: "force removal of the image", - }, - } - rmiCommand = cli.Command{ - Name: "rmi", - Usage: "removes one or more images from local storage", - Description: rmiDescription, - Action: rmiCmd, - ArgsUsage: "IMAGE-NAME-OR-ID [...]", - Flags: rmiFlags, - } -) - -func rmiCmd(c *cli.Context) error { - if err := validateFlags(c, rmiFlags); err != nil { - return err - } - - runtime, err := getRuntime(c) - if err != nil { - return errors.Wrapf(err, "could not get runtime") - } - defer runtime.Shutdown(false) - - args := c.Args() - if len(args) == 0 { - return errors.Errorf("image name or ID must be specified") - } - - for _, arg := range args { - image, err := runtime.GetImage(arg) - if err != nil { - return errors.Wrapf(err, "could not get image %q", arg) - } - id, err := runtime.RemoveImage(image, c.Bool("force")) - if err != nil { - return errors.Wrapf(err, "error removing image %q", id) - } - fmt.Printf("%s\n", id) - } - return nil -} diff --git a/cmd/kpod/run.go b/cmd/kpod/run.go deleted file mode 100644 index ef92dae0..00000000 --- a/cmd/kpod/run.go +++ /dev/null @@ -1,104 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/kubernetes-incubator/cri-o/libpod" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" - "github.com/urfave/cli" -) - -var runDescription = "Runs a command in a new container from the given image" - -var runCommand = cli.Command{ - Name: "run", - Usage: "run a command in a new container", - Description: runDescription, - Flags: createFlags, - Action: runCmd, - ArgsUsage: "IMAGE [COMMAND [ARG...]]", -} - -func runCmd(c *cli.Context) error { - if err := validateFlags(c, createFlags); err != nil { - return err - } - runtime, err := getRuntime(c) - - if err != nil { - return errors.Wrapf(err, "error creating libpod runtime") - } - - createConfig, err := parseCreateOpts(c, runtime) - if err != nil { - return err - } - - createImage := runtime.NewImage(createConfig.image) - - if !createImage.HasImageLocal() { - // The image wasnt found by the user input'd name or its fqname - // Pull the image - fmt.Printf("Trying to pull %s...", createImage.PullName) - createImage.Pull() - } - - runtimeSpec, err := createConfigToOCISpec(createConfig) - if err != nil { - return err - } - defer runtime.Shutdown(false) - logrus.Debug("spec is ", runtimeSpec) - - imageName, err := createImage.GetFQName() - if err != nil { - return err - } - logrus.Debug("imageName is ", imageName) - - imageID, err := createImage.GetImageID() - if err != nil { - return err - } - logrus.Debug("imageID is ", imageID) - - options, err := createConfig.GetContainerCreateOptions(c) - if err != nil { - return errors.Wrapf(err, "unable to parse new container options") - } - - // Gather up the options for NewContainer which consist of With... funcs - options = append(options, libpod.WithRootFSFromImage(imageID, imageName, false)) - ctr, err := runtime.NewContainer(runtimeSpec, options...) - if err != nil { - return err - } - - logrus.Debug("new container created ", ctr.ID()) - if err := ctr.Create(); err != nil { - return err - } - logrus.Debug("container storage created for %q", ctr.ID()) - - if c.String("cidfile") != "" { - libpod.WriteFile(ctr.ID(), c.String("cidfile")) - return nil - } - // Start the container - if err := ctr.Start(); err != nil { - return errors.Wrapf(err, "unable to start container %q", ctr.ID()) - } - logrus.Debug("started container ", ctr.ID()) - if createConfig.tty { - // Attach to the running container - logrus.Debug("trying to attach to the container %s", ctr.ID()) - if err := ctr.Attach(false, c.String("detach-keys")); err != nil { - return errors.Wrapf(err, "unable to attach to container %s", ctr.ID()) - } - } else { - fmt.Printf("%s\n", ctr.ID()) - } - - return nil -} diff --git a/cmd/kpod/save.go b/cmd/kpod/save.go deleted file mode 100644 index cfe90a95..00000000 --- a/cmd/kpod/save.go +++ /dev/null @@ -1,98 +0,0 @@ -package main - -import ( - "io" - "os" - - "github.com/kubernetes-incubator/cri-o/libpod" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" - "github.com/urfave/cli" -) - -var ( - saveFlags = []cli.Flag{ - cli.StringFlag{ - Name: "output, o", - Usage: "Write to a file, default is STDOUT", - Value: "/dev/stdout", - }, - cli.BoolFlag{ - Name: "quiet, q", - Usage: "Suppress the output", - }, - cli.StringFlag{ - Name: "format", - Usage: "Save image to oci-archive", - }, - } - saveDescription = ` - Save an image to docker-archive or oci-archive on the local machine. - Default is docker-archive` - - saveCommand = cli.Command{ - Name: "save", - Usage: "Save image to an archive", - Description: saveDescription, - Flags: saveFlags, - Action: saveCmd, - ArgsUsage: "", - } -) - -// saveCmd saves the image to either docker-archive or oci -func saveCmd(c *cli.Context) error { - args := c.Args() - if len(args) == 0 { - return errors.Errorf("need at least 1 argument") - } - if err := validateFlags(c, saveFlags); err != nil { - return err - } - - runtime, err := getRuntime(c) - if err != nil { - return errors.Wrapf(err, "could not create runtime") - } - defer runtime.Shutdown(false) - - var writer io.Writer - if !c.Bool("quiet") { - writer = os.Stdout - } - - output := c.String("output") - if output == "/dev/stdout" { - fi := os.Stdout - if logrus.IsTerminal(fi) { - return errors.Errorf("refusing to save to terminal. Use -o flag or redirect") - } - } - - var dst string - switch c.String("format") { - case libpod.OCIArchive: - dst = libpod.OCIArchive + ":" + output - case libpod.DockerArchive: - fallthrough - case "": - dst = libpod.DockerArchive + ":" + output - default: - return errors.Errorf("unknown format option %q", c.String("format")) - } - - saveOpts := libpod.CopyOptions{ - SignaturePolicyPath: "", - Writer: writer, - } - - // only one image is supported for now - // future pull requests will fix this - for _, image := range args { - dest := dst + ":" + image - if err := runtime.PushImage(image, dest, saveOpts); err != nil { - return errors.Wrapf(err, "unable to save %q", image) - } - } - return nil -} diff --git a/cmd/kpod/spec.go b/cmd/kpod/spec.go deleted file mode 100644 index 8cf96168..00000000 --- a/cmd/kpod/spec.go +++ /dev/null @@ -1,490 +0,0 @@ -package main - -import ( - "fmt" - "strings" - - "github.com/kubernetes-incubator/cri-o/libpod" - ann "github.com/kubernetes-incubator/cri-o/pkg/annotations" - spec "github.com/opencontainers/runtime-spec/specs-go" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" - "github.com/urfave/cli" - "golang.org/x/sys/unix" -) - -// Parses information needed to create a container into an OCI runtime spec -func createConfigToOCISpec(config *createConfig) (*spec.Spec, error) { - spec := config.GetDefaultLinuxSpec() - spec.Process.Cwd = config.workDir - spec.Process.Args = config.command - - spec.Process.Terminal = config.tty - - // User and Group must go together - spec.Process.User.UID = config.user - spec.Process.User.GID = config.group - spec.Process.User.AdditionalGids = config.groupAdd - - spec.Process.Env = config.env - - //TODO - // Need examples of capacity additions so I can load that properly - - spec.Root.Readonly = config.readOnlyRootfs - spec.Hostname = config.hostname - - // BIND MOUNTS - spec.Mounts = append(spec.Mounts, config.GetVolumeMounts()...) - - // TMPFS MOUNTS - spec.Mounts = append(spec.Mounts, config.GetTmpfsMounts()...) - - // RESOURCES - MEMORY - spec.Linux.Sysctl = config.sysctl - - if config.resources.memory != 0 { - spec.Linux.Resources.Memory.Limit = &config.resources.memory - } - if config.resources.memoryReservation != 0 { - spec.Linux.Resources.Memory.Reservation = &config.resources.memoryReservation - } - if config.resources.memorySwap != 0 { - spec.Linux.Resources.Memory.Swap = &config.resources.memorySwap - } - if config.resources.kernelMemory != 0 { - spec.Linux.Resources.Memory.Kernel = &config.resources.kernelMemory - } - if config.resources.memorySwapiness != 0 { - spec.Linux.Resources.Memory.Swappiness = &config.resources.memorySwapiness - } - if config.resources.disableOomKiller { - spec.Linux.Resources.Memory.DisableOOMKiller = &config.resources.disableOomKiller - } - - // RESOURCES - CPU - - if config.resources.cpuShares != 0 { - spec.Linux.Resources.CPU.Shares = &config.resources.cpuShares - } - if config.resources.cpuQuota != 0 { - spec.Linux.Resources.CPU.Quota = &config.resources.cpuQuota - } - if config.resources.cpuPeriod != 0 { - spec.Linux.Resources.CPU.Period = &config.resources.cpuPeriod - } - if config.resources.cpuRtRuntime != 0 { - spec.Linux.Resources.CPU.RealtimeRuntime = &config.resources.cpuRtRuntime - } - if config.resources.cpuRtPeriod != 0 { - spec.Linux.Resources.CPU.RealtimePeriod = &config.resources.cpuRtPeriod - } - if config.resources.cpus != "" { - spec.Linux.Resources.CPU.Cpus = config.resources.cpus - } - if config.resources.cpusetMems != "" { - spec.Linux.Resources.CPU.Mems = config.resources.cpusetMems - } - - // RESOURCES - PIDS - if config.resources.pidsLimit != 0 { - spec.Linux.Resources.Pids.Limit = config.resources.pidsLimit - } - - /* - Capabilities: &spec.LinuxCapabilities{ - // Rlimits []PosixRlimit // Where does this come from - // Type string - // Hard uint64 - // Limit uint64 - // NoNewPrivileges bool // No user input for this - // ApparmorProfile string // No user input for this - OOMScoreAdj: &config.resources.oomScoreAdj, - // Selinuxlabel - }, - Hooks: &spec.Hooks{}, - //Annotations - Resources: &spec.LinuxResources{ - Devices: config.GetDefaultDevices(), - BlockIO: &blkio, - //HugepageLimits: - Network: &spec.LinuxNetwork{ - // ClassID *uint32 - // Priorites []LinuxInterfacePriority - }, - }, - //CgroupsPath: - //Namespaces: []LinuxNamespace - //Devices - Seccomp: &spec.LinuxSeccomp{ - // DefaultAction: - // Architectures - // Syscalls: - }, - // RootfsPropagation - // MaskedPaths - // ReadonlyPaths: - // MountLabel - // IntelRdt - }, - } - */ - return &spec, nil -} - -func (c *createConfig) CreateBlockIO() (spec.LinuxBlockIO, error) { - bio := spec.LinuxBlockIO{} - bio.Weight = &c.resources.blkioWeight - if len(c.resources.blkioDevice) > 0 { - var lwds []spec.LinuxWeightDevice - for _, i := range c.resources.blkioDevice { - wd, err := validateweightDevice(i) - if err != nil { - return bio, errors.Wrapf(err, "invalid values for blkio-weight-device") - } - wdStat := getStatFromPath(wd.path) - lwd := spec.LinuxWeightDevice{ - Weight: &wd.weight, - } - lwd.Major = int64(unix.Major(wdStat.Rdev)) - lwd.Minor = int64(unix.Minor(wdStat.Rdev)) - lwds = append(lwds, lwd) - } - } - if len(c.resources.deviceReadBps) > 0 { - readBps, err := makeThrottleArray(c.resources.deviceReadBps) - if err != nil { - return bio, err - } - bio.ThrottleReadBpsDevice = readBps - } - if len(c.resources.deviceWriteBps) > 0 { - writeBpds, err := makeThrottleArray(c.resources.deviceWriteBps) - if err != nil { - return bio, err - } - bio.ThrottleWriteBpsDevice = writeBpds - } - if len(c.resources.deviceReadIops) > 0 { - readIops, err := makeThrottleArray(c.resources.deviceReadIops) - if err != nil { - return bio, err - } - bio.ThrottleReadIOPSDevice = readIops - } - if len(c.resources.deviceWriteIops) > 0 { - writeIops, err := makeThrottleArray(c.resources.deviceWriteIops) - if err != nil { - return bio, err - } - bio.ThrottleWriteIOPSDevice = writeIops - } - - return bio, nil -} - -func (c *createConfig) GetDefaultMounts() []spec.Mount { - // Default to 64K default per man page - shmSize := "65536k" - if c.resources.shmSize != "" { - shmSize = c.resources.shmSize - } - return []spec.Mount{ - { - Destination: "/proc", - Type: "proc", - Source: "proc", - Options: []string{"nosuid", "noexec", "nodev"}, - }, - { - Destination: "/dev", - Type: "tmpfs", - Source: "tmpfs", - Options: []string{"nosuid", "strictatime", "mode=755", "size=65536k"}, - }, - { - Destination: "/dev/pts", - Type: "devpts", - Source: "devpts", - Options: []string{"nosuid", "noexec", "newinstance", "ptmxmode=0666", "mode=0620", "gid=5"}, - }, - { - Destination: "/sys", - Type: "sysfs", - Source: "sysfs", - Options: []string{"nosuid", "noexec", "nodev", "ro"}, - }, - { - Destination: "/sys/fs/cgroup", - Type: "cgroup", - Source: "cgroup", - Options: []string{"ro", "nosuid", "noexec", "nodev"}, - }, - { - Destination: "/dev/mqueue", - Type: "mqueue", - Source: "mqueue", - Options: []string{"nosuid", "noexec", "nodev"}, - }, - { - Destination: "/dev/shm", - Type: "tmpfs", - Source: "shm", - Options: []string{"nosuid", "noexec", "nodev", "mode=1777", fmt.Sprintf("size=%s", shmSize)}, - }, - } -} - -func iPtr(i int64) *int64 { return &i } - -func (c *createConfig) GetDefaultDevices() []spec.LinuxDeviceCgroup { - return []spec.LinuxDeviceCgroup{ - { - Allow: false, - Access: "rwm", - }, - { - Allow: true, - Type: "c", - Major: iPtr(1), - Minor: iPtr(5), - Access: "rwm", - }, - { - Allow: true, - Type: "c", - Major: iPtr(1), - Minor: iPtr(3), - Access: "rwm", - }, - { - Allow: true, - Type: "c", - Major: iPtr(1), - Minor: iPtr(9), - Access: "rwm", - }, - { - Allow: true, - Type: "c", - Major: iPtr(1), - Minor: iPtr(8), - Access: "rwm", - }, - { - Allow: true, - Type: "c", - Major: iPtr(5), - Minor: iPtr(0), - Access: "rwm", - }, - { - Allow: true, - Type: "c", - Major: iPtr(5), - Minor: iPtr(1), - Access: "rwm", - }, - { - Allow: false, - Type: "c", - Major: iPtr(10), - Minor: iPtr(229), - Access: "rwm", - }, - } -} - -func defaultCapabilities() []string { - return []string{ - "CAP_CHOWN", - "CAP_DAC_OVERRIDE", - "CAP_FSETID", - "CAP_FOWNER", - "CAP_MKNOD", - "CAP_NET_RAW", - "CAP_SETGID", - "CAP_SETUID", - "CAP_SETFCAP", - "CAP_SETPCAP", - "CAP_NET_BIND_SERVICE", - "CAP_SYS_CHROOT", - "CAP_KILL", - "CAP_AUDIT_WRITE", - } -} - -func (c *createConfig) GetDefaultLinuxSpec() spec.Spec { - s := spec.Spec{ - Version: spec.Version, - Root: &spec.Root{}, - } - s.Annotations = c.GetAnnotations() - s.Mounts = c.GetDefaultMounts() - s.Process = &spec.Process{ - Capabilities: &spec.LinuxCapabilities{ - Bounding: defaultCapabilities(), - Permitted: defaultCapabilities(), - Inheritable: defaultCapabilities(), - Effective: defaultCapabilities(), - }, - } - s.Linux = &spec.Linux{ - MaskedPaths: []string{ - "/proc/kcore", - "/proc/latency_stats", - "/proc/timer_list", - "/proc/timer_stats", - "/proc/sched_debug", - }, - ReadonlyPaths: []string{ - "/proc/asound", - "/proc/bus", - "/proc/fs", - "/proc/irq", - "/proc/sys", - "/proc/sysrq-trigger", - }, - Namespaces: []spec.LinuxNamespace{ - {Type: "mount"}, - {Type: "network"}, - {Type: "uts"}, - {Type: "pid"}, - {Type: "ipc"}, - }, - Devices: []spec.LinuxDevice{}, - Resources: &spec.LinuxResources{ - Devices: c.GetDefaultDevices(), - }, - } - - return s -} - -// GetAnnotations returns the all the annotations for the container -func (c *createConfig) GetAnnotations() map[string]string { - a := getDefaultAnnotations() - // TODO - // Which annotations do we want added by default - if c.tty { - a["io.kubernetes.cri-o.TTY"] = "true" - } - return a -} - -func getDefaultAnnotations() map[string]string { - var annotations map[string]string - annotations = make(map[string]string) - annotations[ann.Annotations] = "" - annotations[ann.ContainerID] = "" - annotations[ann.ContainerName] = "" - annotations[ann.ContainerType] = "" - annotations[ann.Created] = "" - annotations[ann.HostName] = "" - annotations[ann.IP] = "" - annotations[ann.Image] = "" - annotations[ann.ImageName] = "" - annotations[ann.ImageRef] = "" - annotations[ann.KubeName] = "" - annotations[ann.Labels] = "" - annotations[ann.LogPath] = "" - annotations[ann.Metadata] = "" - annotations[ann.Name] = "" - annotations[ann.PrivilegedRuntime] = "" - annotations[ann.ResolvPath] = "" - annotations[ann.HostnamePath] = "" - annotations[ann.SandboxID] = "" - annotations[ann.SandboxName] = "" - annotations[ann.ShmPath] = "" - annotations[ann.MountPoint] = "" - annotations[ann.TrustedSandbox] = "" - annotations[ann.TTY] = "false" - annotations[ann.Stdin] = "" - annotations[ann.StdinOnce] = "" - annotations[ann.Volumes] = "" - - return annotations -} - -//GetVolumeMounts takes user provided input for bind mounts and creates Mount structs -func (c *createConfig) GetVolumeMounts() []spec.Mount { - var m []spec.Mount - var options []string - for _, i := range c.volumes { - // We need to handle SELinux options better here, specifically :Z - spliti := strings.Split(i, ":") - if len(spliti) > 2 { - options = strings.Split(spliti[2], ",") - } - // always add rbind bc mount ignores the bind filesystem when mounting - options = append(options, "rbind") - m = append(m, spec.Mount{ - Destination: spliti[1], - Type: string(TypeBind), - Source: spliti[0], - Options: options, - }) - } - return m -} - -//GetTmpfsMounts takes user provided input for tmpfs mounts and creates Mount structs -func (c *createConfig) GetTmpfsMounts() []spec.Mount { - var m []spec.Mount - for _, i := range c.tmpfs { - // Default options if nothing passed - options := []string{"rw", "noexec", "nosuid", "nodev", "size=65536k"} - spliti := strings.Split(i, ":") - destPath := spliti[0] - if len(spliti) > 1 { - options = strings.Split(spliti[1], ",") - } - m = append(m, spec.Mount{ - Destination: destPath, - Type: string(TypeTmpfs), - Options: options, - Source: string(TypeTmpfs), - }) - } - return m -} - -func (c *createConfig) GetContainerCreateOptions(cli *cli.Context) ([]libpod.CtrCreateOption, error) { - var options []libpod.CtrCreateOption - - // Uncomment after talking to mheon about unimplemented funcs - // options = append(options, libpod.WithLabels(c.labels)) - - if c.interactive { - options = append(options, libpod.WithStdin()) - } - if c.name != "" { - logrus.Debug("appending name %s", c.name) - options = append(options, libpod.WithName(c.name)) - } - - return options, nil -} - -func getStatFromPath(path string) unix.Stat_t { - s := unix.Stat_t{} - _ = unix.Stat(path, &s) - return s -} - -func makeThrottleArray(throttleInput []string) ([]spec.LinuxThrottleDevice, error) { - var ltds []spec.LinuxThrottleDevice - for _, i := range throttleInput { - t, err := validateBpsDevice(i) - if err != nil { - return []spec.LinuxThrottleDevice{}, err - } - ltd := spec.LinuxThrottleDevice{} - ltd.Rate = t.rate - ltdStat := getStatFromPath(t.path) - ltd.Major = int64(unix.Major(ltdStat.Rdev)) - ltd.Minor = int64(unix.Major(ltdStat.Rdev)) - ltds = append(ltds, ltd) - } - return ltds, nil -} diff --git a/cmd/kpod/stats.go b/cmd/kpod/stats.go deleted file mode 100644 index ac81212a..00000000 --- a/cmd/kpod/stats.go +++ /dev/null @@ -1,245 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - "os" - "strings" - "text/template" - "time" - - "github.com/docker/go-units" - - tm "github.com/buger/goterm" - "github.com/kubernetes-incubator/cri-o/libkpod" - "github.com/kubernetes-incubator/cri-o/oci" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -var printf func(format string, a ...interface{}) (n int, err error) -var println func(a ...interface{}) (n int, err error) - -type statsOutputParams struct { - Container string - ID string - CPUPerc string - MemUsage string - MemPerc string - NetIO string - BlockIO string - PIDs uint64 -} - -var ( - statsFlags = []cli.Flag{ - cli.BoolFlag{ - Name: "all, a", - Usage: "show all containers. Only running containers are shown by default. The default is false", - }, - cli.BoolFlag{ - Name: "no-stream", - Usage: "disable streaming stats and only pull the first result, default setting is false", - }, - cli.StringFlag{ - Name: "format", - Usage: "pretty-print container statistics using a Go template", - }, - cli.BoolFlag{ - Name: "json", - Usage: "output container statistics in json format", - }, - } - - statsDescription = "display a live stream of one or more containers' resource usage statistics" - statsCommand = cli.Command{ - Name: "stats", - Usage: "Display percentage of CPU, memory, network I/O, block I/O and PIDs for one or more containers", - Description: statsDescription, - Flags: statsFlags, - Action: statsCmd, - ArgsUsage: "", - } -) - -func statsCmd(c *cli.Context) error { - if err := validateFlags(c, statsFlags); err != nil { - return err - } - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "could not read config") - } - containerServer, err := libkpod.New(config) - if err != nil { - return errors.Wrapf(err, "could not create container server") - } - defer containerServer.Shutdown() - err = containerServer.Update() - if err != nil { - return errors.Wrapf(err, "could not update list of containers") - } - times := -1 - if c.Bool("no-stream") { - times = 1 - } - statsChan := make(chan []*libkpod.ContainerStats) - // iterate over the channel until it is closed - go func() { - // print using goterm - printf = tm.Printf - println = tm.Println - for stats := range statsChan { - // Continually refresh statistics - tm.Clear() - tm.MoveCursor(1, 1) - outputStats(stats, c.String("format"), c.Bool("json")) - tm.Flush() - time.Sleep(time.Second) - } - }() - return getStats(containerServer, c.Args(), c.Bool("all"), statsChan, times) -} - -func getStats(server *libkpod.ContainerServer, args []string, all bool, statsChan chan []*libkpod.ContainerStats, times int) error { - ctrs, err := server.ListContainers(isRunning, ctrInList(args)) - if err != nil { - return err - } - containerStats := map[string]*libkpod.ContainerStats{} - for _, ctr := range ctrs { - initialStats, err := server.GetContainerStats(ctr, &libkpod.ContainerStats{}) - if err != nil { - return err - } - containerStats[ctr.ID()] = initialStats - } - step := 1 - if times == -1 { - times = 1 - step = 0 - } - for i := 0; i < times; i += step { - reportStats := []*libkpod.ContainerStats{} - for _, ctr := range ctrs { - id := ctr.ID() - if _, ok := containerStats[ctr.ID()]; !ok { - initialStats, err := server.GetContainerStats(ctr, &libkpod.ContainerStats{}) - if err != nil { - return err - } - containerStats[id] = initialStats - } - stats, err := server.GetContainerStats(ctr, containerStats[id]) - if err != nil { - return err - } - // replace the previous measurement with the current one - containerStats[id] = stats - reportStats = append(reportStats, stats) - } - statsChan <- reportStats - - err := server.Update() - if err != nil { - return err - } - ctrs, err = server.ListContainers(isRunning, ctrInList(args)) - if err != nil { - return err - } - } - return nil -} - -func outputStats(stats []*libkpod.ContainerStats, format string, json bool) error { - if format == "" { - outputStatsHeader() - } - if json { - return outputStatsAsJSON(stats) - } - var err error - for _, s := range stats { - if format == "" { - outputStatsUsingFormatString(s) - } else { - params := getStatsOutputParams(s) - err2 := outputStatsUsingTemplate(format, params) - if err2 != nil { - err = errors.Wrapf(err, err2.Error()) - } - } - } - return err -} - -func outputStatsHeader() { - printf("%-64s %-16s %-32s %-16s %-24s %-24s %s\n", "CONTAINER", "CPU %", "MEM USAGE / MEM LIMIT", "MEM %", "NET I/O", "BLOCK I/O", "PIDS") -} - -func outputStatsUsingFormatString(stats *libkpod.ContainerStats) { - printf("%-64s %-16s %-32s %-16s %-24s %-24s %d\n", stats.Container, floatToPercentString(stats.CPU), combineHumanValues(stats.MemUsage, stats.MemLimit), floatToPercentString(stats.MemPerc), combineHumanValues(stats.NetInput, stats.NetOutput), combineHumanValues(stats.BlockInput, stats.BlockOutput), stats.PIDs) -} - -func combineHumanValues(a, b uint64) string { - return fmt.Sprintf("%s / %s", units.HumanSize(float64(a)), units.HumanSize(float64(b))) -} - -func floatToPercentString(f float64) string { - return fmt.Sprintf("%.2f %s", f, "%") -} - -func getStatsOutputParams(stats *libkpod.ContainerStats) statsOutputParams { - return statsOutputParams{ - Container: stats.Container, - ID: stats.Container, - CPUPerc: floatToPercentString(stats.CPU), - MemUsage: combineHumanValues(stats.MemUsage, stats.MemLimit), - MemPerc: floatToPercentString(stats.MemPerc), - NetIO: combineHumanValues(stats.NetInput, stats.NetOutput), - BlockIO: combineHumanValues(stats.BlockInput, stats.BlockOutput), - PIDs: stats.PIDs, - } -} - -func outputStatsUsingTemplate(format string, params statsOutputParams) error { - tmpl, err := template.New("stats").Parse(format) - if err != nil { - return errors.Wrapf(err, "template parsing error") - } - - err = tmpl.Execute(os.Stdout, params) - if err != nil { - return err - } - println() - return nil -} - -func outputStatsAsJSON(stats []*libkpod.ContainerStats) error { - s, err := json.Marshal(stats) - if err != nil { - return err - } - println(s) - return nil -} - -func isRunning(ctr *oci.Container) bool { - return ctr.State().Status == "running" -} - -func ctrInList(idsOrNames []string) func(ctr *oci.Container) bool { - if len(idsOrNames) == 0 { - return func(*oci.Container) bool { return true } - } - return func(ctr *oci.Container) bool { - for _, idOrName := range idsOrNames { - if strings.HasPrefix(ctr.ID(), idOrName) || strings.HasSuffix(ctr.Name(), idOrName) { - return true - } - } - return false - } -} diff --git a/cmd/kpod/stop.go b/cmd/kpod/stop.go deleted file mode 100644 index 279f7b76..00000000 --- a/cmd/kpod/stop.go +++ /dev/null @@ -1,77 +0,0 @@ -package main - -import ( - "fmt" - "os" - - "github.com/kubernetes-incubator/cri-o/libkpod" - "github.com/pkg/errors" - "github.com/urfave/cli" - "golang.org/x/net/context" -) - -var ( - defaultTimeout int64 = 10 - stopFlags = []cli.Flag{ - cli.Int64Flag{ - Name: "timeout, t", - Usage: "Seconds to wait for stop before killing the container", - Value: defaultTimeout, - }, - } - stopDescription = ` - kpod stop - - Stops one or more running containers. The container name or ID can be used. - A timeout to forcibly stop the container can also be set but defaults to 10 - seconds otherwise. -` - - stopCommand = cli.Command{ - Name: "stop", - Usage: "Stop one or more containers", - Description: stopDescription, - Flags: stopFlags, - Action: stopCmd, - ArgsUsage: "CONTAINER-NAME [CONTAINER-NAME ...]", - } -) - -func stopCmd(c *cli.Context) error { - args := c.Args() - stopTimeout := c.Int64("timeout") - if len(args) < 1 { - return errors.Errorf("you must provide at least one container name or id") - } - if err := validateFlags(c, stopFlags); err != nil { - return err - } - - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "could not get config") - } - server, err := libkpod.New(config) - if err != nil { - return errors.Wrapf(err, "could not get container server") - } - defer server.Shutdown() - err = server.Update() - if err != nil { - return errors.Wrapf(err, "could not update list of containers") - } - var lastError error - for _, container := range c.Args() { - cid, err := server.ContainerStop(context.Background(), container, stopTimeout) - if err != nil { - if lastError != nil { - fmt.Fprintln(os.Stderr, lastError) - } - lastError = errors.Wrapf(err, "failed to stop container %v", container) - } else { - fmt.Println(cid) - } - } - - return lastError -} diff --git a/cmd/kpod/tag.go b/cmd/kpod/tag.go deleted file mode 100644 index b9c38060..00000000 --- a/cmd/kpod/tag.go +++ /dev/null @@ -1,77 +0,0 @@ -package main - -import ( - "github.com/containers/image/docker/reference" - "github.com/containers/storage" - "github.com/kubernetes-incubator/cri-o/libpod" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -var ( - tagDescription = "Adds one or more additional names to locally-stored image" - tagCommand = cli.Command{ - Name: "tag", - Usage: "Add an additional name to a local image", - Description: tagDescription, - Action: tagCmd, - ArgsUsage: "IMAGE-NAME [IMAGE-NAME ...]", - } -) - -func tagCmd(c *cli.Context) error { - args := c.Args() - if len(args) < 2 { - return errors.Errorf("image name and at least one new name must be specified") - } - runtime, err := getRuntime(c) - if err != nil { - return errors.Wrapf(err, "could not create runtime") - } - defer runtime.Shutdown(false) - - img, err := runtime.GetImage(args[0]) - if err != nil { - return err - } - if img == nil { - return errors.New("null image") - } - err = addImageNames(runtime, img, args[1:]) - if err != nil { - return errors.Wrapf(err, "error adding names %v to image %q", args[1:], args[0]) - } - return nil -} - -func addImageNames(runtime *libpod.Runtime, image *storage.Image, addNames []string) error { - // Add tags to the names if applicable - names, err := expandedTags(addNames) - if err != nil { - return err - } - for _, name := range names { - if err := runtime.TagImage(image, name); err != nil { - return errors.Wrapf(err, "error adding name (%v) to image %q", name, image.ID) - } - } - return nil -} - -func expandedTags(tags []string) ([]string, error) { - expandedNames := []string{} - for _, tag := range tags { - var labelName string - name, err := reference.Parse(tag) - if err != nil { - return nil, errors.Wrapf(err, "error parsing tag %q", name) - } - if _, ok := name.(reference.NamedTagged); ok { - labelName = name.String() - } else { - labelName = name.String() + ":latest" - } - expandedNames = append(expandedNames, labelName) - } - return expandedNames, nil -} diff --git a/cmd/kpod/umount.go b/cmd/kpod/umount.go deleted file mode 100644 index bad6752a..00000000 --- a/cmd/kpod/umount.go +++ /dev/null @@ -1,41 +0,0 @@ -package main - -import ( - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -var ( - umountCommand = cli.Command{ - Name: "umount", - Aliases: []string{"unmount"}, - Usage: "Unmount a working container's root filesystem", - Description: "Unmounts a working container's root filesystem", - Action: umountCmd, - ArgsUsage: "CONTAINER-NAME-OR-ID", - } -) - -func umountCmd(c *cli.Context) error { - args := c.Args() - if len(args) == 0 { - return errors.Errorf("container ID must be specified") - } - if len(args) > 1 { - return errors.Errorf("too many arguments specified") - } - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "Could not get config") - } - store, err := getStore(config) - if err != nil { - return err - } - - err = store.Unmount(args[0]) - if err != nil { - return errors.Wrapf(err, "error unmounting container %q", args[0]) - } - return nil -} diff --git a/cmd/kpod/unpause.go b/cmd/kpod/unpause.go deleted file mode 100644 index a7b7db20..00000000 --- a/cmd/kpod/unpause.go +++ /dev/null @@ -1,58 +0,0 @@ -package main - -import ( - "fmt" - "github.com/kubernetes-incubator/cri-o/libkpod" - "github.com/pkg/errors" - "github.com/urfave/cli" - "os" -) - -var ( - unpauseDescription = ` - kpod unpause - - Unpauses one or more running containers. The container name or ID can be used. -` - unpauseCommand = cli.Command{ - Name: "unpause", - Usage: "Unpause the processes in one or more containers", - Description: unpauseDescription, - Action: unpauseCmd, - ArgsUsage: "CONTAINER-NAME [CONTAINER-NAME ...]", - } -) - -func unpauseCmd(c *cli.Context) error { - args := c.Args() - if len(args) < 1 { - return errors.Errorf("you must provide at least one container name or id") - } - - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "could not get config") - } - server, err := libkpod.New(config) - if err != nil { - return errors.Wrapf(err, "could not get container server") - } - defer server.Shutdown() - if err := server.Update(); err != nil { - return errors.Wrapf(err, "could not update list of containers") - } - var lastError error - for _, container := range c.Args() { - cid, err := server.ContainerUnpause(container) - if err != nil { - if lastError != nil { - fmt.Fprintln(os.Stderr, lastError) - } - lastError = errors.Wrapf(err, "failed to unpause container %v", container) - } else { - fmt.Println(cid) - } - } - - return lastError -} diff --git a/cmd/kpod/user.go b/cmd/kpod/user.go deleted file mode 100644 index 3e2e308c..00000000 --- a/cmd/kpod/user.go +++ /dev/null @@ -1,121 +0,0 @@ -package main - -// #include -// #include -// #include -// #include -// #include -// #include -// typedef FILE * pFILE; -import "C" - -import ( - "fmt" - "os/user" - "path/filepath" - "sync" - "syscall" - "unsafe" - - "github.com/pkg/errors" -) - -func fopenContainerFile(rootdir, filename string) (C.pFILE, error) { - var st, lst syscall.Stat_t - - ctrfile := filepath.Join(rootdir, filename) - cctrfile := C.CString(ctrfile) - defer C.free(unsafe.Pointer(cctrfile)) - mode := C.CString("r") - defer C.free(unsafe.Pointer(mode)) - f, err := C.fopen(cctrfile, mode) - if f == nil || err != nil { - return nil, errors.Wrapf(err, "error opening %q", ctrfile) - } - if err = syscall.Fstat(int(C.fileno(f)), &st); err != nil { - return nil, errors.Wrapf(err, "fstat(%q)", ctrfile) - } - if err = syscall.Lstat(ctrfile, &lst); err != nil { - return nil, errors.Wrapf(err, "lstat(%q)", ctrfile) - } - if st.Dev != lst.Dev || st.Ino != lst.Ino { - return nil, errors.Errorf("%q is not a regular file", ctrfile) - } - return f, nil -} - -var ( - lookupUser, lookupGroup sync.Mutex -) - -func lookupUserInContainer(rootdir, username string) (uint64, uint64, error) { - name := C.CString(username) - defer C.free(unsafe.Pointer(name)) - - f, err := fopenContainerFile(rootdir, "/etc/passwd") - if err != nil { - return 0, 0, err - } - defer C.fclose(f) - - lookupUser.Lock() - defer lookupUser.Unlock() - - pwd := C.fgetpwent(f) - for pwd != nil { - if C.strcmp(pwd.pw_name, name) != 0 { - pwd = C.fgetpwent(f) - continue - } - return uint64(pwd.pw_uid), uint64(pwd.pw_gid), nil - } - - return 0, 0, user.UnknownUserError(fmt.Sprintf("error looking up user %q", username)) -} - -func lookupGroupForUIDInContainer(rootdir string, userid uint64) (string, uint64, error) { - f, err := fopenContainerFile(rootdir, "/etc/passwd") - if err != nil { - return "", 0, err - } - defer C.fclose(f) - - lookupUser.Lock() - defer lookupUser.Unlock() - - pwd := C.fgetpwent(f) - for pwd != nil { - if uint64(pwd.pw_uid) != userid { - pwd = C.fgetpwent(f) - continue - } - return C.GoString(pwd.pw_name), uint64(pwd.pw_gid), nil - } - - return "", 0, user.UnknownUserError(fmt.Sprintf("error looking up user with UID %d", userid)) -} - -func lookupGroupInContainer(rootdir, groupname string) (uint64, error) { - name := C.CString(groupname) - defer C.free(unsafe.Pointer(name)) - - f, err := fopenContainerFile(rootdir, "/etc/group") - if err != nil { - return 0, err - } - defer C.fclose(f) - - lookupGroup.Lock() - defer lookupGroup.Unlock() - - grp := C.fgetgrent(f) - for grp != nil { - if C.strcmp(grp.gr_name, name) != 0 { - grp = C.fgetgrent(f) - continue - } - return uint64(grp.gr_gid), nil - } - - return 0, user.UnknownGroupError(fmt.Sprintf("error looking up group %q", groupname)) -} diff --git a/cmd/kpod/version.go b/cmd/kpod/version.go deleted file mode 100644 index 586c41da..00000000 --- a/cmd/kpod/version.go +++ /dev/null @@ -1,48 +0,0 @@ -package main - -import ( - "fmt" - "runtime" - "strconv" - "time" - - "github.com/urfave/cli" -) - -// Overwritten at build time -var ( - // gitCommit is the commit that the binary is being built from. - // It will be populated by the Makefile. - gitCommit string - // buildInfo is the time at which the binary was built - // It will be populated by the Makefile. - buildInfo string -) - -// versionCmd gets and prints version info for version command -func versionCmd(c *cli.Context) error { - fmt.Println("Version: ", c.App.Version) - fmt.Println("Go Version: ", runtime.Version()) - if gitCommit != "" { - fmt.Println("Git Commit: ", gitCommit) - } - if buildInfo != "" { - // Converts unix time from string to int64 - buildTime, err := strconv.ParseInt(buildInfo, 10, 64) - if err != nil { - return err - } - // Prints out the build time in readable format - fmt.Println("Built: ", time.Unix(buildTime, 0).Format(time.ANSIC)) - } - fmt.Println("OS/Arch: ", runtime.GOOS+"/"+runtime.GOARCH) - - return nil -} - -// Cli command to print out the full version of kpod -var versionCommand = cli.Command{ - Name: "version", - Usage: "Display the KPOD Version Information", - Action: versionCmd, -} diff --git a/cmd/kpod/wait.go b/cmd/kpod/wait.go deleted file mode 100644 index b166e330..00000000 --- a/cmd/kpod/wait.go +++ /dev/null @@ -1,62 +0,0 @@ -package main - -import ( - "fmt" - "os" - - "github.com/kubernetes-incubator/cri-o/libkpod" - "github.com/pkg/errors" - "github.com/urfave/cli" -) - -var ( - waitDescription = ` - kpod wait - - Block until one or more containers stop and then print their exit codes -` - - waitCommand = cli.Command{ - Name: "wait", - Usage: "Block on one or more containers", - Description: waitDescription, - Action: waitCmd, - ArgsUsage: "CONTAINER-NAME [CONTAINER-NAME ...]", - } -) - -func waitCmd(c *cli.Context) error { - args := c.Args() - if len(args) < 1 { - return errors.Errorf("you must provide at least one container name or id") - } - - config, err := getConfig(c) - if err != nil { - return errors.Wrapf(err, "could not get config") - } - server, err := libkpod.New(config) - if err != nil { - return errors.Wrapf(err, "could not get container server") - } - defer server.Shutdown() - err = server.Update() - if err != nil { - return errors.Wrapf(err, "could not update list of containers") - } - - var lastError error - for _, container := range c.Args() { - returnCode, err := server.ContainerWait(container) - if err != nil { - if lastError != nil { - fmt.Fprintln(os.Stderr, lastError) - } - lastError = errors.Wrapf(err, "failed to wait for the container %v", container) - } else { - fmt.Println(returnCode) - } - } - - return lastError -} diff --git a/completions/bash/kpod b/completions/bash/kpod deleted file mode 100644 index 88edbee6..00000000 --- a/completions/bash/kpod +++ /dev/null @@ -1,1480 +0,0 @@ -#! /bin/bash - -: ${PROG:=$(basename ${BASH_SOURCE})} - -__kpod_previous_extglob_setting=$(shopt -p extglob) -shopt -s extglob - -__kpod_q() { - kpod ${host:+-H "$host"} ${config:+--config "$config"} 2>/dev/null "$@" -} - -# __kpod_containers returns a list of containers. Additional options to -# `kpod ps` may be specified in order to filter the list, e.g. -# `__kpod_containers --filter status=running` -# By default, only names are returned. -# Set KPOD_COMPLETION_SHOW_CONTAINER_IDS=yes to also complete IDs. -# An optional first option `--id|--name` may be used to limit the -# output to the IDs or names of matching items. This setting takes -# precedence over the environment setting. -__kpod_containers() { - local format - if [ "$1" = "--id" ] ; then - format='{{.ID}}' - shift - elif [ "$1" = "--name" ] ; then - format='{{.Names}}' - shift - elif [ "${KPOD_COMPLETION_SHOW_CONTAINER_IDS}" = yes ] ; then - format='{{.ID}} {{.Names}}' - else - format='{{.Names}}' - fi - __kpod_q ps --format "$format" "$@" -} - -# __kpod_complete_containers applies completion of containers based on the current -# value of `$cur` or the value of the optional first option `--cur`, if given. -# Additional filters may be appended, see `__kpod_containers`. -__kpod_complete_containers() { - local current="$cur" - if [ "$1" = "--cur" ] ; then - current="$2" - shift 2 - fi - COMPREPLY=( $(compgen -W "$(__kpod_containers "$@")" -- "$current") ) -} - -__kpod_complete_containers_all() { - __kpod_complete_containers "$@" --all -} - -__kpod_complete_containers_running() { - __kpod_complete_containers "$@" --filter status=running -} - -__kpod_complete_containers_stopped() { - __kpod_complete_containers "$@" --filter status=exited -} - -__kpod_complete_containers_unpauseable() { - __kpod_complete_containers "$@" --filter status=paused -} - -__kpod_complete_container_names() { - local containers=( $(__kpod_q ps -aq --no-trunc) ) - local names=( $(__kpod_q inspect --format '{{.Name}}' "${containers[@]}") ) - names=( "${names[@]#/}" ) # trim off the leading "/" from the container names - COMPREPLY=( $(compgen -W "${names[*]}" -- "$cur") ) -} - -__kpod_complete_container_ids() { - local containers=( $(__kpod_q ps -aq) ) - COMPREPLY=( $(compgen -W "${containers[*]}" -- "$cur") ) -} - -__kpod_images() { - local images_args="" - - case "$KPOD_COMPLETION_SHOW_IMAGE_IDS" in - all) - images_args="--no-trunc -a" - ;; - non-intermediate) - images_args="--no-trunc" - ;; - esac - - local repo_print_command - if [ "${KPOD_COMPLETION_SHOW_TAGS:-yes}" = "yes" ]; then - repo_print_command='print $1; print $1":"$2' - else - repo_print_command='print $1' - fi - - local awk_script - case "$KPOD_COMPLETION_SHOW_IMAGE_IDS" in - all|non-intermediate) - awk_script='NR>1 { print $3; if ($1 != "") { '"$repo_print_command"' } }' - ;; - none|*) - awk_script='NR>1 && $1 != "" { '"$repo_print_command"' }' - ;; - esac - - __kpod_q images $images_args | awk "$awk_script" | grep -v '$' -} - -__kpod_complete_images() { - COMPREPLY=( $(compgen -W "$(__kpod_images)" -- "$cur") ) - __ltrim_colon_completions "$cur" -} - -__kpod_complete_image_repos() { - local repos="$(__kpod_q images | awk 'NR>1 && $1 != "" { print $1 }')" - COMPREPLY=( $(compgen -W "$repos" -- "$cur") ) -} - -__kpod_complete_image_repos_and_tags() { - local reposAndTags="$(__kpod_q images | awk 'NR>1 && $1 != "" { print $1; print $1":"$2 }')" - COMPREPLY=( $(compgen -W "$reposAndTags" -- "$cur") ) - __ltrim_colon_completions "$cur" -} - -# __kpod_networks returns a list of all networks. Additional options to -# `kpod network ls` may be specified in order to filter the list, e.g. -# `__kpod_networks --filter type=custom` -# By default, only names are returned. -# Set KPOD_COMPLETION_SHOW_NETWORK_IDS=yes to also complete IDs. -# An optional first option `--id|--name` may be used to limit the -# output to the IDs or names of matching items. This setting takes -# precedence over the environment setting. -__kpod_networks() { - local format - if [ "$1" = "--id" ] ; then - format='{{.ID}}' - shift - elif [ "$1" = "--name" ] ; then - format='{{.Name}}' - shift - elif [ "${KPOD_COMPLETION_SHOW_NETWORK_IDS}" = yes ] ; then - format='{{.ID}} {{.Name}}' - else - format='{{.Name}}' - fi - __kpod_q network ls --format "$format" "$@" -} - -# __kpod_complete_networks applies completion of networks based on the current -# value of `$cur` or the value of the optional first option `--cur`, if given. -# Additional filters may be appended, see `__kpod_networks`. -__kpod_complete_networks() { - local current="$cur" - if [ "$1" = "--cur" ] ; then - current="$2" - shift 2 - fi - COMPREPLY=( $(compgen -W "$(__kpod_networks "$@")" -- "$current") ) -} - -__kpod_complete_containers_in_network() { - local containers=$(__kpod_q network inspect -f '{{range $i, $c := .Containers}}{{$i}} {{$c.Name}} {{end}}' "$1") - COMPREPLY=( $(compgen -W "$containers" -- "$cur") ) -} - -__kpod_runtimes() { - __kpod_q info | sed -n 's/^Runtimes: \(.*\)/\1/p' -} - -__kpod_complete_runtimes() { - COMPREPLY=( $(compgen -W "$(__kpod_runtimes)" -- "$cur") ) -} - -# __kpod_services returns a list of all services. Additional options to -# `kpod service ls` may be specified in order to filter the list, e.g. -# `__kpod_services --filter name=xxx` -# By default, only node names are returned. -# Set KPOD_COMPLETION_SHOW_SERVICE_IDS=yes to also complete IDs. -# An optional first option `--id|--name` may be used to limit the -# output to the IDs or names of matching items. This setting takes -# precedence over the environment setting. -__kpod_services() { - local fields='$2' # default: service name only - [ "${KPOD_COMPLETION_SHOW_SERVICE_IDS}" = yes ] && fields='$1,$2' # ID & name - - if [ "$1" = "--id" ] ; then - fields='$1' # IDs only - shift - elif [ "$1" = "--name" ] ; then - fields='$2' # names only - shift - fi - __kpod_q service ls "$@" | awk "NR>1 {print $fields}" -} - -# __kpod_complete_services applies completion of services based on the current -# value of `$cur` or the value of the optional first option `--cur`, if given. -# Additional filters may be appended, see `__kpod_services`. -__kpod_complete_services() { - local current="$cur" - if [ "$1" = "--cur" ] ; then - current="$2" - shift 2 - fi - COMPREPLY=( $(compgen -W "$(__kpod_services "$@")" -- "$current") ) -} - -# __kpod_append_to_completions appends the word passed as an argument to every -# word in `$COMPREPLY`. -# Normally you do this with `compgen -S` while generating the completions. -# This function allows you to append a suffix later. It allows you to use -# the __kpod_complete_XXX functions in cases where you need a suffix. -__kpod_append_to_completions() { - COMPREPLY=( ${COMPREPLY[@]/%/"$1"} ) -} - -# __kpod_is_experimental tests whether the currently configured Kpod daemon -# runs in experimental mode. If so, the function exits with 0 (true). -# Otherwise, or if the result cannot be determined, the exit value is 1 (false). -__kpod_is_experimental() { - [ "$(__kpod_q version -f '{{.Server.Experimental}}')" = "true" ] -} - -# __kpod_pos_first_nonflag finds the position of the first word that is neither -# option nor an option's argument. If there are options that require arguments, -# you should pass a glob describing those options, e.g. "--option1|-o|--option2" -# Use this function to restrict completions to exact positions after the argument list. -__kpod_pos_first_nonflag() { - local argument_flags=$1 - - local counter=$((${subcommand_pos:-${command_pos}} + 1)) - while [ $counter -le $cword ]; do - if [ -n "$argument_flags" ] && eval "case '${words[$counter]}' in $argument_flags) true ;; *) false ;; esac"; then - (( counter++ )) - # eat "=" in case of --option=arg syntax - [ "${words[$counter]}" = "=" ] && (( counter++ )) - else - case "${words[$counter]}" in - -*) - ;; - *) - break - ;; - esac - fi - - # Bash splits words at "=", retaining "=" as a word, examples: - # "--debug=false" => 3 words, "--log-opt syslog-facility=daemon" => 4 words - while [ "${words[$counter + 1]}" = "=" ] ; do - counter=$(( counter + 2)) - done - - (( counter++ )) - done - - echo $counter -} - -# __kpod_map_key_of_current_option returns `key` if we are currently completing the -# value of a map option (`key=value`) which matches the extglob given as an argument. -# This function is needed for key-specific completions. -__kpod_map_key_of_current_option() { - local glob="$1" - - local key glob_pos - if [ "$cur" = "=" ] ; then # key= case - key="$prev" - glob_pos=$((cword - 2)) - elif [[ $cur == *=* ]] ; then # key=value case (OSX) - key=${cur%=*} - glob_pos=$((cword - 1)) - elif [ "$prev" = "=" ] ; then - key=${words[$cword - 2]} # key=value case - glob_pos=$((cword - 3)) - else - return - fi - - [ "${words[$glob_pos]}" = "=" ] && ((glob_pos--)) # --option=key=value syntax - - [[ ${words[$glob_pos]} == @($glob) ]] && echo "$key" -} - -# __kpod_value_of_option returns the value of the first option matching `option_glob`. -# Valid values for `option_glob` are option names like `--log-level` and globs like -# `--log-level|-l` -# Only positions between the command and the current word are considered. -__kpod_value_of_option() { - local option_extglob=$(__kpod_to_extglob "$1") - - local counter=$((command_pos + 1)) - while [ $counter -lt $cword ]; do - case ${words[$counter]} in - $option_extglob ) - echo ${words[$counter + 1]} - break - ;; - esac - (( counter++ )) - done -} - -# __kpod_to_alternatives transforms a multiline list of strings into a single line -# string with the words separated by `|`. -# This is used to prepare arguments to __kpod_pos_first_nonflag(). -__kpod_to_alternatives() { - local parts=( $1 ) - local IFS='|' - echo "${parts[*]}" -} - -# __kpod_to_extglob transforms a multiline list of options into an extglob pattern -# suitable for use in case statements. -__kpod_to_extglob() { - local extglob=$( __kpod_to_alternatives "$1" ) - echo "@($extglob)" -} - -# __kpod_subcommands processes subcommands -# Locates the first occurrence of any of the subcommands contained in the -# first argument. In case of a match, calls the corresponding completion -# function and returns 0. -# If no match is found, 1 is returned. The calling function can then -# continue processing its completion. -# -# TODO if the preceding command has options that accept arguments and an -# argument is equal ot one of the subcommands, this is falsely detected as -# a match. -__kpod_subcommands() { - local subcommands="$1" - - local counter=$(($command_pos + 1)) - while [ $counter -lt $cword ]; do - case "${words[$counter]}" in - $(__kpod_to_extglob "$subcommands") ) - subcommand_pos=$counter - local subcommand=${words[$counter]} - local completions_func=_kpod_${command}_${subcommand} - declare -F $completions_func >/dev/null && $completions_func - return 0 - ;; - esac - (( counter++ )) - done - return 1 -} - -# __kpod_nospace suppresses trailing whitespace -__kpod_nospace() { - # compopt is not available in ancient bash versions - type compopt &>/dev/null && compopt -o nospace -} - -__kpod_complete_resolved_hostname() { - command -v host >/dev/null 2>&1 || return - COMPREPLY=( $(host 2>/dev/null "${cur%:}" | awk '/has address/ {print $4}') ) -} - -__kpod_local_interfaces() { - command -v ip >/dev/null 2>&1 || return - ip addr show scope global 2>/dev/null | sed -n 's| \+inet \([0-9.]\+\).* \([^ ]\+\)|\1 \2|p' -} - -__kpod_complete_local_interfaces() { - local additional_interface - if [ "$1" = "--add" ] ; then - additional_interface="$2" - fi - - COMPREPLY=( $( compgen -W "$(__kpod_local_interfaces) $additional_interface" -- "$cur" ) ) -} - -__kpod_complete_capabilities() { - # The list of capabilities is defined in types.go, ALL was added manually. - COMPREPLY=( $( compgen -W " - ALL - AUDIT_CONTROL - AUDIT_WRITE - AUDIT_READ - BLOCK_SUSPEND - CHOWN - DAC_OVERRIDE - DAC_READ_SEARCH - FOWNER - FSETID - IPC_LOCK - IPC_OWNER - KILL - LEASE - LINUX_IMMUTABLE - MAC_ADMIN - MAC_OVERRIDE - MKNOD - NET_ADMIN - NET_BIND_SERVICE - NET_BROADCAST - NET_RAW - SETFCAP - SETGID - SETPCAP - SETUID - SYS_ADMIN - SYS_BOOT - SYS_CHROOT - SYSLOG - SYS_MODULE - SYS_NICE - SYS_PACCT - SYS_PTRACE - SYS_RAWIO - SYS_RESOURCE - SYS_TIME - SYS_TTY_CONFIG - WAKE_ALARM - " -- "$cur" ) ) -} - -__kpod_complete_detach-keys() { - case "$prev" in - --detach-keys) - case "$cur" in - *,) - COMPREPLY=( $( compgen -W "${cur}ctrl-" -- "$cur" ) ) - ;; - *) - COMPREPLY=( $( compgen -W "ctrl-" -- "$cur" ) ) - ;; - esac - - __kpod_nospace - return - ;; - esac - return 1 -} - -__kpod_complete_log_drivers() { - COMPREPLY=( $( compgen -W " - awslogs - etwlogs - fluentd - gcplogs - gelf - journald - json-file - logentries - none - splunk - syslog - " -- "$cur" ) ) -} - -__kpod_complete_log_options() { - # see docs/reference/logging/index.md - local awslogs_options="awslogs-region awslogs-group awslogs-stream" - local fluentd_options="env fluentd-address fluentd-async-connect fluentd-buffer-limit fluentd-retry-wait fluentd-max-retries labels tag" - local gcplogs_options="env gcp-log-cmd gcp-project labels" - local gelf_options="env gelf-address gelf-compression-level gelf-compression-type labels tag" - local journald_options="env labels tag" - local json_file_options="env labels max-file max-size" - local logentries_options="logentries-token" - local syslog_options="env labels syslog-address syslog-facility syslog-format syslog-tls-ca-cert syslog-tls-cert syslog-tls-key syslog-tls-skip-verify tag" - local splunk_options="env labels splunk-caname splunk-capath splunk-format splunk-gzip splunk-gzip-level splunk-index splunk-insecureskipverify splunk-source splunk-sourcetype splunk-token splunk-url splunk-verify-connection tag" - - local all_options="$fluentd_options $gcplogs_options $gelf_options $journald_options $logentries_options $json_file_options $syslog_options $splunk_options" - - case $(__kpod_value_of_option --log-driver) in - '') - COMPREPLY=( $( compgen -W "$all_options" -S = -- "$cur" ) ) - ;; - awslogs) - COMPREPLY=( $( compgen -W "$awslogs_options" -S = -- "$cur" ) ) - ;; - fluentd) - COMPREPLY=( $( compgen -W "$fluentd_options" -S = -- "$cur" ) ) - ;; - gcplogs) - COMPREPLY=( $( compgen -W "$gcplogs_options" -S = -- "$cur" ) ) - ;; - gelf) - COMPREPLY=( $( compgen -W "$gelf_options" -S = -- "$cur" ) ) - ;; - journald) - COMPREPLY=( $( compgen -W "$journald_options" -S = -- "$cur" ) ) - ;; - json-file) - COMPREPLY=( $( compgen -W "$json_file_options" -S = -- "$cur" ) ) - ;; - logentries) - COMPREPLY=( $( compgen -W "$logentries_options" -S = -- "$cur" ) ) - ;; - syslog) - COMPREPLY=( $( compgen -W "$syslog_options" -S = -- "$cur" ) ) - ;; - splunk) - COMPREPLY=( $( compgen -W "$splunk_options" -S = -- "$cur" ) ) - ;; - *) - return - ;; - esac - - __kpod_nospace -} - -__kpod_complete_log_driver_options() { - local key=$(__kpod_map_key_of_current_option '--log-opt') - case "$key" in - fluentd-async-connect) - COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) - return - ;; - gelf-address) - COMPREPLY=( $( compgen -W "udp" -S "://" -- "${cur##*=}" ) ) - __kpod_nospace - return - ;; - gelf-compression-level) - COMPREPLY=( $( compgen -W "1 2 3 4 5 6 7 8 9" -- "${cur##*=}" ) ) - return - ;; - gelf-compression-type) - COMPREPLY=( $( compgen -W "gzip none zlib" -- "${cur##*=}" ) ) - return - ;; - syslog-address) - COMPREPLY=( $( compgen -W "tcp:// tcp+tls:// udp:// unix://" -- "${cur##*=}" ) ) - __kpod_nospace - __ltrim_colon_completions "${cur}" - return - ;; - syslog-facility) - COMPREPLY=( $( compgen -W " - auth - authpriv - cron - daemon - ftp - kern - local0 - local1 - local2 - local3 - local4 - local5 - local6 - local7 - lpr - mail - news - syslog - user - uucp - " -- "${cur##*=}" ) ) - return - ;; - syslog-format) - COMPREPLY=( $( compgen -W "rfc3164 rfc5424 rfc5424micro" -- "${cur##*=}" ) ) - return - ;; - syslog-tls-ca-cert|syslog-tls-cert|syslog-tls-key) - _filedir - return - ;; - syslog-tls-skip-verify) - COMPREPLY=( $( compgen -W "true" -- "${cur##*=}" ) ) - return - ;; - splunk-url) - COMPREPLY=( $( compgen -W "http:// https://" -- "${cur##*=}" ) ) - __kpod_nospace - __ltrim_colon_completions "${cur}" - return - ;; - splunk-gzip|splunk-insecureskipverify|splunk-verify-connection) - COMPREPLY=( $( compgen -W "false true" -- "${cur##*=}" ) ) - return - ;; - splunk-format) - COMPREPLY=( $( compgen -W "inline json raw" -- "${cur##*=}" ) ) - return - ;; - esac - return 1 -} - -__kpod_complete_log_levels() { - COMPREPLY=( $( compgen -W "debug info warn error fatal" -- "$cur" ) ) -} - -# __kpod_complete_signals returns a subset of the available signals that is most likely -# relevant in the context of kpod containers -__kpod_complete_signals() { - local signals=( - SIGCONT - SIGHUP - SIGINT - SIGKILL - SIGQUIT - SIGSTOP - SIGTERM - SIGUSR1 - SIGUSR2 - ) - COMPREPLY=( $( compgen -W "${signals[*]} ${signals[*]#SIG}" -- "$( echo $cur | tr '[:lower:]' '[:upper:]')" ) ) -} - -__kpod_complete_user_group() { - if [[ $cur == *:* ]] ; then - COMPREPLY=( $(compgen -g -- "${cur#*:}") ) - else - COMPREPLY=( $(compgen -u -S : -- "$cur") ) - __kpod_nospace - fi -} - -__kpod_list_images() { - COMPREPLY=($(compgen -W "$(kpod images -q)" -- $cur)) -} - -__kpod_list_containers() { - COMPREPLY=($(compgen -W "$(kpod ps -aq)" -- $cur)) -} - -__kpod_images() { - local images_args="" - - case "$KPOD_COMPLETION_SHOW_IMAGE_IDS" in - all) - images_args="--no-trunc -a" - ;; - non-intermediate) - images_args="--no-trunc" - ;; - esac - - local repo_print_command - if [ "${KPOD_COMPLETION_SHOW_TAGS:-yes}" = "yes" ]; then - repo_print_command='print $1; print $1":"$2' - else - repo_print_command='print $1' - fi - - local awk_script - case "$KPOD_COMPLETION_SHOW_IMAGE_IDS" in - all|non-intermediate) - awk_script='NR>1 { print $3; if ($1 != "") { '"$repo_print_command"' } }' - ;; - none|*) - awk_script='NR>1 && $1 != "" { '"$repo_print_command"' }' - ;; - esac - - __kpod_q images $images_args | awk "$awk_script" | grep -v '$' -} - -_kpod_diff() { - local options_with_args=" - --format - " - local boolean_options=" - " - _complete_ "$options_with_args" "$boolean_options" - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - *) - __kpod_list_images - ;; - esac -} - -_kpod_export() { - local options_with_args=" - --output - -o - " - local boolean_options=" - " - _complete_ "$options_with_args" "$boolean_options" - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - *) - __kpod_list_images - ;; - esac -} - -_kpod_history() { - local options_with_args=" - --format - " - local boolean_options=" - --human -H - --no-trunc - --quiet -q - " - _complete_ "$options_with_args" "$boolean_options" - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - *) - __kpod_list_images - ;; - esac -} - -_kpod_info() { - local boolean_options=" - --help - -h - --debug - " - local options_with_args=" - --format - " - - local all_options="$options_with_args $boolean_options" - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - *) - __kpod_list_images - ;; - esac -} - -_kpod_images() { - local boolean_options=" - --help - -h - --quiet - -q - --noheading - -n - --no-trunc - --digests - --filter - -f - " - local options_with_args=" - --format - " - - local all_options="$options_with_args $boolean_options" - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - esac -} - -_kpod_inspect() { - local boolean_options=" - --help - -h - " - local options_with_args=" - --format - -f - --type - -t - --size - " - - local all_options="$options_with_args $boolean_options" - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - esac -} -_kpod_kill() { - local options_with_args=" - --signal -s - " - local boolean_options=" - --help - -h" - _complete_ "$options_with_args" "$boolean_options" -} - -_kpod_logs() { - local options_with_args=" - --since - --tail - " - local boolean_options=" - --follow - -f - " - _complete_ "$options_with_args" "$boolean_options" - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - *) - __kpod_list_containers - ;; - esac -} - -_kpod_pull() { - local options_with_args=" - --authfile - --creds - --cert-dir - --signature-policy - " - local boolean_options=" - --all-tags -a - --quiet - -q - --tls-verify - " - _complete_ "$options_with_args" "$boolean_options" -} - -_kpod_unmount() { - _kpod_umount $@ -} - -_kpod_umount() { - local boolean_options=" - --help - -h - " - local options_with_args=" - " - - local all_options="$options_with_args $boolean_options" - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - esac -} - -_kpod_mount() { - local boolean_options=" - --help - -h - --notruncate - " - - local options_with_args=" - --label - --format - " - - local all_options="$options_with_args $boolean_options" - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - esac -} - -_kpod_push() { - local boolean_options=" - --disable-compression - -D - --quiet - -q - --remove-signatures - --tls-verify - " - - local options_with_args=" - --authfile - --cert-dir - --creds - --sign-by - --signature-policy - " - - local all_options="$options_with_args $boolean_options" - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - esac -} - -_kpod_rename() { - local boolean_options=" - --help - -h - " - local options_with_args=" - " - - local all_options="$options_with_args $boolean_options" - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - *) - __kpod_list_containers - ;; - esac -} - -_kpod_container_run() { - local options_with_args=" - --add-host - --attach -a - --blkio-weight - --blkio-weight-device - --cap-add - --cap-drop - --cgroup-parent - --cidfile - --cpu-period - --cpu-quota - --cpu-rt-period - --cpu-rt-runtime - --cpuset-cpus - --cpus - --cpuset-mems - --cpu-shares -c - --device - --device-read-bps - --device-read-iops - --device-write-bps - --device-write-iops - --dns - --dns-option - --dns-search - --entrypoint - --env -e - --env-file - --expose - --group-add - --hostname -h - --init-path - --ip - --ip6 - --ipc - --kernel-memory - --label-file - --label -l - --link-local-ip - --log-driver - --log-opt - --mac-address - --memory -m - --memory-swap - --memory-swappiness - --memory-reservation - --name - --network - --network-alias - --oom-score-adj - --pid - --pids-limit - --publish -p - --runtime - --security-opt - --shm-size - --stop-signal - --stop-timeout - --storage-opt - --tmpfs - --sysctl - --ulimit - --user -u - --userns - --uts - --volumes-from - --volume -v - --workdir -w - " - - local boolean_options=" - --disable-content-trust=false - --help - --init - --interactive -i - --oom-kill-disable - --privileged - --publish-all -P - --read-only - --tty -t - " - - if [ "$command" = "run" -o "$subcommand" = "run" ] ; then - options_with_args="$options_with_args - --detach-keys - --health-cmd - --health-interval - --health-retries - --health-timeout - " - boolean_options="$boolean_options - --detach -d - --no-healthcheck - --rm - --sig-proxy=false - " - __kpod_complete_detach-keys && return - fi - - local all_options="$options_with_args $boolean_options" - - - __kpod_complete_log_driver_options && return - - local key=$(__kpod_map_key_of_current_option '--security-opt') - case "$key" in - label) - [[ $cur == *: ]] && return - COMPREPLY=( $( compgen -W "user: role: type: level: disable" -- "${cur##*=}") ) - if [ "${COMPREPLY[*]}" != "disable" ] ; then - __kpod_nospace - fi - return - ;; - seccomp) - local cur=${cur##*=} - _filedir - COMPREPLY+=( $( compgen -W "unconfined" -- "$cur" ) ) - return - ;; - esac - - case "$prev" in - --add-host) - case "$cur" in - *:) - __kpod_complete_resolved_hostname - return - ;; - esac - ;; - --attach|-a) - COMPREPLY=( $( compgen -W 'stdin stdout stderr' -- "$cur" ) ) - return - ;; - --cap-add|--cap-drop) - __kpod_complete_capabilities - return - ;; - --cidfile|--env-file|--init-path|--label-file) - _filedir - return - ;; - --device|--tmpfs|--volume|-v) - case "$cur" in - *:*) - # TODO somehow do _filedir for stuff inside the image, if it's already specified (which is also somewhat difficult to determine) - ;; - '') - COMPREPLY=( $( compgen -W '/' -- "$cur" ) ) - __kpod_nospace - ;; - /*) - _filedir - __kpod_nospace - ;; - esac - return - ;; - --env|-e) - # we do not append a "=" here because "-e VARNAME" is legal systax, too - COMPREPLY=( $( compgen -e -- "$cur" ) ) - __kpod_nospace - return - ;; - --ipc) - case "$cur" in - *:*) - cur="${cur#*:}" - __kpod_complete_containers_running - ;; - *) - COMPREPLY=( $( compgen -W 'host container:' -- "$cur" ) ) - if [ "$COMPREPLY" = "container:" ]; then - __kpod_nospace - fi - ;; - esac - return - ;; - --log-driver) - __kpod_complete_log_drivers - return - ;; - --log-opt) - __kpod_complete_log_options - return - ;; - --network) - case "$cur" in - container:*) - __kpod_complete_containers_all --cur "${cur#*:}" - ;; - *) - COMPREPLY=( $( compgen -W "$(__kpod_plugins_bundled --type Network) $(__kpod_networks) container:" -- "$cur") ) - if [ "${COMPREPLY[*]}" = "container:" ] ; then - __kpod_nospace - fi - ;; - esac - return - ;; - --pid) - case "$cur" in - *:*) - __kpod_complete_containers_running --cur "${cur#*:}" - ;; - *) - COMPREPLY=( $( compgen -W 'host container:' -- "$cur" ) ) - if [ "$COMPREPLY" = "container:" ]; then - __kpod_nospace - fi - ;; - esac - return - ;; - --runtime) - __kpod_complete_runtimes - return - ;; - --security-opt) - COMPREPLY=( $( compgen -W "apparmor= label= no-new-privileges seccomp=" -- "$cur") ) - if [ "${COMPREPLY[*]}" != "no-new-privileges" ] ; then - __kpod_nospace - fi - return - ;; - --storage-opt) - COMPREPLY=( $( compgen -W "size" -S = -- "$cur") ) - __kpod_nospace - return - ;; - --user|-u) - __kpod_complete_user_group - return - ;; - --userns) - COMPREPLY=( $( compgen -W "host" -- "$cur" ) ) - return - ;; - --volumes-from) - __kpod_complete_containers_all - return - ;; - $(__kpod_to_extglob "$options_with_args") ) - return - ;; - esac - - case "$cur" in - -*) - COMPREPLY=( $( compgen -W "$all_options" -- "$cur" ) ) - ;; - *) - local counter=$( __kpod_pos_first_nonflag $( __kpod_to_alternatives "$options_with_args" ) ) - if [ $cword -eq $counter ]; then - __kpod_complete_images - fi - ;; - esac -} - -_kpod_create() { - _kpod_container_run -} - -_kpod_run() { - _kpod_container_run -} - -_kpod_rm() { - local boolean_options=" - --force - -f - " - - local options_with_args=" - " - - local all_options="$options_with_args $boolean_options" - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - *) - __kpod_list_containers - ;; - esac -} - -_kpod_rmi() { - local boolean_options=" - --help - -h - --force - -f - " - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - *) - __kpod_list_images - ;; - esac -} - -_kpod_stats() { - local boolean_options=" - --help - --all - -a - --no-stream - --format - " - - case "$cur" in - -*) - COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur")) - ;; - *) - __kpod_list_containers - ;; - esac -} - -kpod_tag() { - local options_with_args=" - " - local boolean_options=" - " - _complete_ "$options_with_args" "$boolean_options" -} - -_kpod_version() { - local options_with_args=" - " - local boolean_options=" - " - _complete_ "$options_with_args" "$boolean_options" -} - -_kpod_save() { - local options_with_args=" - --output -o - --format - " - local boolean_options=" - --quiet -q - " - _complete_ "$options_with_args" "$boolean_options" -} - -_kpod_export() { - local options_with_args=" - --output -o - " - local boolean_options=" - " - _complete_ "$options_with_args" "$boolean_options" -} - -_kpod_pause() { - local options_with_args=" - --help -h - " - local boolean_options="" - _complete_ "$options_with_args" "$boolean_options" -} - -_kpod_ps() { - local options_with_args=" - --filter -f - --format - --last -n - " - local boolean_options=" - --all -a - --latest -l - --no-trunc - --quiet -q - --size -s - --namespace --ns - " - _complete_ "$options_with_args" "$boolean_options" -} - -_kpod_stop() { - local options_with_args=" - --timeout -t - " - local boolean_options="" - _complete_ "$options_with_args" "$boolean_options" -} - -_kpod_unpause() { - local options_with_args=" - --help -h - " - local boolean_options="" - _complete_ "$options_with_args" "$boolean_options" - -_kpod_wait() { - local options_with_args="" - local boolean_options="--help -h" - _complete_ "$options_with_args" "$boolean_options" -} - -_complete_() { - local options_with_args=$1 - local boolean_options="$2 -h --help" - - case "$prev" in - $options_with_args) - return - ;; - esac - - case "$cur" in - -*) - COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) ) - ;; - esac -} - -_kpod_load() { - local options_with_args=" - --input -i - --signature-policy - " - local boolean_options=" - --quiet -q - " - _complete_ "$options_with_args" "$boolean_options" -} - -_kpod_login() { - local options_with_args=" - --username - -u - --password - -p - --authfile - " - local boolean_options=" - --help - -h - " - _complete_ "$options_with_args" "$boolean_options" -} - -_kpod_logout() { - local options_with_args=" - --authfile - " - local boolean_options=" - --all - -a - --help - -h - " - _complete_ "$options_with_args" "$boolean_options" -} - -_kpod_kpod() { - local options_with_args=" - --config -c - --root - --runroot - --storage-driver - --storage-opt - --log-level - " - local boolean_options=" - --help -h - --version -v - " - commands=" - create - diff - export - history - images - info - inspect - kill - load - login - logout - logs - mount - pause - ps - pull - push - rename - rm - rmi - run - save - stats - stop - tag - umount - unmount - unpause - version - wait - " - - case "$prev" in - $main_options_with_args_glob ) - return - ;; - esac - - case "$cur" in - -*) - COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) ) - ;; - *) - COMPREPLY=( $( compgen -W "${commands[*]} help" -- "$cur" ) ) - ;; - esac -} - -_cli_bash_autocomplete() { - local cur opts base - - COMPREPLY=() - cur="${COMP_WORDS[COMP_CWORD]}" - COMPREPLY=() - local cur prev words cword - - _get_comp_words_by_ref -n : cur prev words cword - - local command=${PROG} cpos=0 - local counter=1 - counter=1 - while [ $counter -lt $cword ]; do - case "!${words[$counter]}" in - *) - command=$(echo "${words[$counter]}" | sed 's/-/_/g') - cpos=$counter - (( cpos++ )) - break - ;; - esac - (( counter++ )) - done - - local completions_func=_kpod_${command} - declare -F $completions_func >/dev/null && $completions_func - - eval "$previous_extglob_setting" - return 0 -} - -complete -F _cli_bash_autocomplete $PROG diff --git a/docs/kpod-attach.1.md b/docs/kpod-attach.1.md deleted file mode 100644 index 4c2a0218..00000000 --- a/docs/kpod-attach.1.md +++ /dev/null @@ -1,31 +0,0 @@ -% kpod(1) kpod-attach - See the output of pid 1 of a container or enter the container -% Dan Walsh -# kpod-attach "1" "September 2017" "kpod" - -## NAME -kpod-attach - Attach to a running container - -## Description - -We chose not to implement the `attach` feature in `kpod` even though the upstream Docker -project has it. The upstream project has had lots of issues with attaching to running -processes that we did not want to replicate. The `kpod exec` and `kpod log` commands -offer you the same functionality far more dependably. - -**Reasons to attach to the primary PID of a container:** - - -1) Executing commands inside of the container - - We recommend that you use `kpod exec` to execute a command within a container - - `kpod exec CONTAINERID /bin/sh` - -2) Viewing the output stream of the primary process in the container - - We recommend that you use `kpod logs` to see the output from the container - - `kpod logs CONTAINERID` - -## SEE ALSO -kpod(1), kpod-exec(1), kpod-logs(1) diff --git a/docs/kpod-cp.1.md b/docs/kpod-cp.1.md deleted file mode 100644 index eea48e6c..00000000 --- a/docs/kpod-cp.1.md +++ /dev/null @@ -1,46 +0,0 @@ -% kpod(1) kpod-cp - Copy content between container's file system and the host -% Dan Walsh -# kpod-cp "1" "August 2017" "kpod" - -## NAME -kpod-cp - Copy files/folders between a container and the local filesystem. - -## Description -We chose not to implement the `cp` feature in `kpod` even though the upstream Docker -project has it. We have a much stronger capability. Using standard kpod-mount -and kpod-umount, we can take advantage of the entire linux tool chain, rather -then just cp. - -If a user wants to copy contents out of a container or into a container, they -can execute a few simple commands. - -You can copy from the container's file system to the local machine or the -reverse, from the local filesystem to the container. - -If you want to copy the /etc/foobar directory out of a container and onto /tmp -on the host, you could execute the following commands: - - mnt=$(kpod mount CONTAINERID) - cp -R ${mnt}/etc/foobar /tmp - kpod umount CONTAINERID - -If you want to untar a tar ball into a container, you can execute these commands: - - mnt=$(kpod mount CONTAINERID) - tar xf content.tgz -C ${mnt} - kpod umount CONTAINERID - -One last example, if you want to install a package into a container that -does not have dnf installed, you could execute something like: - - mnt=$(kpod mount CONTAINERID) - dnf install --installroot=${mnt} httpd - chroot ${mnt} rm -rf /var/log/dnf /var/cache/dnf - kpod umount CONTAINERID - -This shows that using `kpod mount` and `kpod umount` you can use all of the -standard linux tools for moving files into and out of containers, not just -the cp command. - -## SEE ALSO -kpod(1), kpod-mount(1), kpod-umount(1) diff --git a/docs/kpod-create.1.md b/docs/kpod-create.1.md deleted file mode 100644 index 8b58fa61..00000000 --- a/docs/kpod-create.1.md +++ /dev/null @@ -1,594 +0,0 @@ -% kpod(1) kpod-create - Create a new container -% Dan Walsh -kpod-create - Create a new container - -# SYNOPSIS -**kpod create** [*options* [...]] IMAGE [COMMAND] [ARG...] - -# DESCRIPTION - -Creates a writeable container layer over the specified image and prepares it for -running the specified command. The container ID is then printed to STDOUT. This -is similar to **kpod run -d** except the container is never started. You can -then use the **kpod start ** command to start the container at -any point. - -The initial status of the container created with **kpod create** is 'created'. - -# OPTIONS -**--add-host**=[] - Add a custom host-to-IP mapping (host:ip) - - Add a line to /etc/hosts. The format is hostname:ip. The **--add-host** -option can be set multiple times. - -**-a**, **--attach**=[] - Attach to STDIN, STDOUT or STDERR. - - In foreground mode (the default when **-d** -is not specified), **kpod run** can start the process in the container -and attach the console to the process's standard input, output, and standard -error. It can even pretend to be a TTY (this is what most commandline -executables expect) and pass along signals. The **-a** option can be set for -each of stdin, stdout, and stderr. - -**--blkio-weight**=*0* - Block IO weight (relative weight) accepts a weight value between 10 and 1000. - -**--blkio-weight-device**=[] - Block IO weight (relative device weight, format: `DEVICE_NAME:WEIGHT`). - -**--cap-add**=[] - Add Linux capabilities - -**--cap-drop**=[] - Drop Linux capabilities - -**--cgroup-parent**="" - Path to cgroups under which the cgroup for the container will be created. If the path is not absolute, the path is considered to be relative to the cgroups path of the init process. Cgroups will be created if they do not already exist. - -**--cidfile**="" - Write the container ID to the file - -**--cpu-count**=*0* - Limit the number of CPUs available for execution by the container. - - On Windows Server containers, this is approximated as a percentage of total CPU usage. - - On Windows Server containers, the processor resource controls are mutually exclusive, the order of precedence is CPUCount first, then CPUShares, and CPUPercent last. - -**--cpu-period**=*0* - Limit the CPU CFS (Completely Fair Scheduler) period - - Limit the container's CPU usage. This flag tell the kernel to restrict the container's CPU usage to the period you specify. - -**--cpu-quota**=*0* - Limit the CPU CFS (Completely Fair Scheduler) quota - - Limit the container's CPU usage. By default, containers run with the full -CPU resource. This flag tell the kernel to restrict the container's CPU usage -to the quota you specify. - -**--cpu-rt-period**=0 - Limit the CPU real-time period in microseconds - - Limit the container's Real Time CPU usage. This flag tell the kernel to restrict the container's Real Time CPU usage to the period you specify. - -**--cpu-rt-runtime**=0 - Limit the CPU real-time runtime in microseconds - - Limit the containers Real Time CPU usage. This flag tells the kernel to limit the amount of time in a given CPU period Real Time tasks may consume. Ex: - Period of 1,000,000us and Runtime of 950,000us means that this container could consume 95% of available CPU and leave the remaining 5% to normal priority tasks. - - The sum of all runtimes across containers cannot exceed the amount allotted to the parent cgroup. - -**--cpu-shares**=*0* - CPU shares (relative weight) - - By default, all containers get the same proportion of CPU cycles. This proportion -can be modified by changing the container's CPU share weighting relative -to the weighting of all other running containers. - -To modify the proportion from the default of 1024, use the **--cpu-shares** -flag to set the weighting to 2 or higher. - -The proportion will only apply when CPU-intensive processes are running. -When tasks in one container are idle, other containers can use the -left-over CPU time. The actual amount of CPU time will vary depending on -the number of containers running on the system. - -For example, consider three containers, one has a cpu-share of 1024 and -two others have a cpu-share setting of 512. When processes in all three -containers attempt to use 100% of CPU, the first container would receive -50% of the total CPU time. If you add a fourth container with a cpu-share -of 1024, the first container only gets 33% of the CPU. The remaining containers -receive 16.5%, 16.5% and 33% of the CPU. - -On a multi-core system, the shares of CPU time are distributed over all CPU -cores. Even if a container is limited to less than 100% of CPU time, it can -use 100% of each individual CPU core. - -For example, consider a system with more than three cores. If you start one -container **{C0}** with **-c=512** running one process, and another container -**{C1}** with **-c=1024** running two processes, this can result in the following -division of CPU shares: - - PID container CPU CPU share - 100 {C0} 0 100% of CPU0 - 101 {C1} 1 100% of CPU1 - 102 {C1} 2 100% of CPU2 - -**--cpus**=0.0 - Number of CPUs. The default is *0.0* which means no limit. - -**--cpuset-cpus**="" - CPUs in which to allow execution (0-3, 0,1) - -**--cpuset-mems**="" - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. - - If you have four memory nodes on your system (0-3), use `--cpuset-mems=0,1` -then processes in your container will only use memory from the first -two memory nodes. - -**-d**, **--detach**=*true*|*false* - Detached mode: run the container in the background and print the new container ID. The default is *false*. - - At any time you can run **kpod ps** in -the other shell to view a list of the running containers. You can reattach to a -detached container with **kpod attach**. If you choose to run a container in -the detached mode, then you cannot use the **-rm** option. - - When attached in the tty mode, you can detach from the container (and leave it -running) using a configurable key sequence. The default sequence is `CTRL-p CTRL-q`. -You configure the key sequence using the **--detach-keys** option or a configuration file. -See **config-json(5)** for documentation on using a configuration file. - -**--detach-keys**="" - Override the key sequence for detaching a container. Format is a single character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. - -**--device**=[] - Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc:rwm) - -**--device-read-bps**=[] - Limit read rate (bytes per second) from a device (e.g. --device-read-bps=/dev/sda:1mb) - -**--device-read-iops**=[] - Limit read rate (IO per second) from a device (e.g. --device-read-iops=/dev/sda:1000) - -**--device-write-bps**=[] - Limit write rate (bytes per second) to a device (e.g. --device-write-bps=/dev/sda:1mb) - -**--device-write-iops**=[] - Limit write rate (IO per second) to a device (e.g. --device-write-iops=/dev/sda:1000) - -**--dns**=[] - Set custom DNS servers - - This option can be used to override the DNS -configuration passed to the container. Typically this is necessary when the -host DNS configuration is invalid for the container (e.g., 127.0.0.1). When this -is the case the **--dns** flags is necessary for every run. - -**--dns-option**=[] - Set custom DNS options - -**--dns-search**=[] - Set custom DNS search domains (Use --dns-search=. if you don't wish to set the search domain) - -**--entrypoint**="" - Overwrite the default ENTRYPOINT of the image - - This option allows you to overwrite the default entrypoint of the image. - The ENTRYPOINT of an image is similar to a COMMAND -because it specifies what executable to run when the container starts, but it is -(purposely) more difficult to override. The ENTRYPOINT gives a container its -default nature or behavior, so that when you set an ENTRYPOINT you can run the -container as if it were that binary, complete with default options, and you can -pass in more options via the COMMAND. But, sometimes an operator may want to run -something else inside the container, so you can override the default ENTRYPOINT -at runtime by using a **--entrypoint** and a string to specify the new -ENTRYPOINT. - -**-e**, **--env**=[] - Set environment variables - - This option allows you to specify arbitrary -environment variables that are available for the process that will be launched -inside of the container. - -**--env-file**=[] - Read in a line delimited file of environment variables - -**--expose**=[] - Expose a port, or a range of ports (e.g. --expose=3300-3310) to set up port redirection - on the host system. - -**--group-add**=[] - Add additional groups to run as - -**--hostname**="" - Container host name - - Sets the container host name that is available inside the container. - -**--help** - Print usage statement - -**-i**, **--interactive**=*true*|*false* - Keep STDIN open even if not attached. The default is *false*. - -**--ip**="" - Sets the container's interface IPv4 address (e.g. 172.23.0.9) - - It can only be used in conjunction with **--network** for user-defined networks - -**--ip6**="" - Sets the container's interface IPv6 address (e.g. 2001:db8::1b99) - - It can only be used in conjunction with **--network** for user-defined networks - -**--ipc**="" - Default is to create a private IPC namespace (POSIX SysV IPC) for the container - 'container:': reuses another container shared memory, semaphores and message queues - 'host': use the host shared memory,semaphores and message queues inside the container. Note: the host mode gives the container full access to local shared memory and is therefore considered insecure. - -**--kernel-memory**="" - Kernel memory limit (format: `[]`, where unit = b, k, m or g) - - Constrains the kernel memory available to a container. If a limit of 0 -is specified (not using `--kernel-memory`), the container's kernel memory -is not limited. If you specify a limit, it may be rounded up to a multiple -of the operating system's page size and the value can be very large, -millions of trillions. - -**-l**, **--label**=[] - Add metadata to a container (e.g., --label com.example.key=value) - -**--label-file**=[] - Read in a line delimited file of labels - -**--link-local-ip**=[] - Add one or more link-local IPv4/IPv6 addresses to the container's interface - -**--log-driver**="*json-file*|*syslog*|*journald*|*gelf*|*fluentd*|*awslogs*|*splunk*|*etwlogs*|*gcplogs*|*none*" - Logging driver for the container. Default is defined by daemon `--log-driver` flag. - **Warning**: the `kpod logs` command works only for the `json-file` and - `journald` logging drivers. - -**--log-opt**=[] - Logging driver specific options. - -**--mac-address**="" - Container MAC address (e.g. 92:d0:c6:0a:29:33) - - Remember that the MAC address in an Ethernet network must be unique. -The IPv6 link-local address will be based on the device's MAC address -according to RFC4862. - -**-m**, **--memory**="" - Memory limit (format: [], where unit = b, k, m or g) - - Allows you to constrain the memory available to a container. If the host -supports swap memory, then the **-m** memory setting can be larger than physical -RAM. If a limit of 0 is specified (not using **-m**), the container's memory is -not limited. The actual limit may be rounded up to a multiple of the operating -system's page size (the value would be very large, that's millions of trillions). - -**--memory-reservation**="" - Memory soft limit (format: [], where unit = b, k, m or g) - - After setting memory reservation, when the system detects memory contention -or low memory, containers are forced to restrict their consumption to their -reservation. So you should always set the value below **--memory**, otherwise the -hard limit will take precedence. By default, memory reservation will be the same -as memory limit. - -**--memory-swap**="LIMIT" - A limit value equal to memory plus swap. Must be used with the **-m** -(**--memory**) flag. The swap `LIMIT` should always be larger than **-m** -(**--memory**) value. By default, the swap `LIMIT` will be set to double -the value of --memory. - - The format of `LIMIT` is `[]`. Unit can be `b` (bytes), -`k` (kilobytes), `m` (megabytes), or `g` (gigabytes). If you don't specify a -unit, `b` is used. Set LIMIT to `-1` to enable unlimited swap. - -**--memory-swappiness**="" - Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. - -**--name**="" - Assign a name to the container - - The operator can identify a container in three ways: - UUID long identifier (“f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778”) - UUID short identifier (“f78375b1c487”) - Name (“jonah”) - - kpod generates a UUID for each container, and if a name is not assigned -to the container with **--name** then the daemon will also generate a random -string name. The name is useful when defining links (see **--link**) (or any -other place you need to identify a container). This works for both background -and foreground containers. - -**--network**="*bridge*" - Set the Network mode for the container - 'bridge': create a network stack on the default bridge - 'none': no networking - 'container:': reuse another container's network stack - 'host': use the kpod host network stack. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure. - '|': connect to a user-defined network - -**--network-alias**=[] - Add network-scoped alias for the container - -**--oom-kill-disable**=*true*|*false* - Whether to disable OOM Killer for the container or not. - -**--oom-score-adj**="" - Tune the host's OOM preferences for containers (accepts -1000 to 1000) - -**--pid**="" - Set the PID mode for the container - Default is to create a private PID namespace for the container - 'container:': join another container's PID namespace - 'host': use the host's PID namespace for the container. Note: the host mode gives the container full access to local PID and is therefore considered insecure. - -**--pids-limit**="" - Tune the container's pids limit. Set `-1` to have unlimited pids for the container. - -**--pod**="" - Run container in an existing pod - -**--privileged**=*true*|*false* - Give extended privileges to this container. The default is *false*. - - By default, kpod containers are -“unprivileged” (=false) and cannot, for example, modify parts of the kernel. -This is because by default a container is not allowed to access any devices. -A “privileged” container is given access to all devices. - - When the operator executes **kpod run --privileged**, kpod enables access -to all devices on the host as well as set turn off most of the security messurs -protecting the host from the container. - -**-p**, **--publish**=[] - Publish a container's port, or range of ports, to the host - - Format: `ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort` -Both hostPort and containerPort can be specified as a range of ports. -When specifying ranges for both, the number of container ports in the range must match the number of host ports in the range. -(e.g., `kpod run -p 1234-1236:1222-1224 --name thisWorks -t busybox` -but not `kpod run -p 1230-1236:1230-1240 --name RangeContainerPortsBiggerThanRangeHostPorts -t busybox`) -With ip: `kpod run -p 127.0.0.1:$HOSTPORT:$CONTAINERPORT --name CONTAINER -t someimage` -Use `kpod port` to see the actual mapping: `kpod port CONTAINER $CONTAINERPORT` - -**-P**, **--publish-all**=*true*|*false* - Publish all exposed ports to random ports on the host interfaces. The default is *false*. - - When set to true publish all exposed ports to the host interfaces. The -default is false. If the operator uses -P (or -p) then kpod will make the -exposed port accessible on the host and the ports will be available to any -client that can reach the host. When using -P, kpod will bind any exposed -port to a random port on the host within an *ephemeral port range* defined by -`/proc/sys/net/ipv4/ip_local_port_range`. To find the mapping between the host -ports and the exposed ports, use `kpod port`. - -**--read-only**=*true*|*false* - Mount the container's root filesystem as read only. - - By default a container will have its root filesystem writable allowing processes -to write files anywhere. By specifying the `--read-only` flag the container will have -its root filesystem mounted as read only prohibiting any writes. - -**--rm**=*true*|*false* - Automatically remove the container when it exits. The default is *false*. - `--rm` flag can work together with `-d`, and auto-removal will be done on daemon side. Note that it's -incompatible with any restart policy other than `none`. - -**--security-opt**=[] - Security Options - - - "label=user:USER" : Set the label user for the container - "label=role:ROLE" : Set the label role for the container - "label=type:TYPE" : Set the label type for the container - "label=level:LEVEL" : Set the label level for the container - "label=disable" : Turn off label confinement for the container - "no-new-privileges" : Disable container processes from gaining additional privileges - - "seccomp=unconfined" : Turn off seccomp confinement for the container - "seccomp=profile.json : White listed syscalls seccomp Json file to be used as a seccomp filter - - "apparmor=unconfined" : Turn off apparmor confinement for the container - "apparmor=your-profile" : Set the apparmor confinement profile for the container - -**--shm-size**="" - Size of `/dev/shm`. The format is ``. `number` must be greater than `0`. - Unit is optional and can be `b` (bytes), `k` (kilobytes), `m`(megabytes), or `g` (gigabytes). - If you omit the unit, the system uses bytes. If you omit the size entirely, the system uses `64m`. - -**--sig-proxy**=*true*|*false* - Proxy received signals to the process (non-TTY mode only). SIGCHLD, SIGSTOP, and SIGKILL are not proxied. The default is *true*. - -**--stop-signal**=*SIGTERM* - Signal to stop a container. Default is SIGTERM. - -**--stop-timeout**=*10* - Timeout (in seconds) to stop a container. Default is 10. - -**--storage-opt**=[] - Storage driver options per container - - $ kpod create -it --storage-opt size=120G fedora /bin/bash - - This (size) will allow to set the container rootfs size to 120G at creation time. - This option is only available for the `devicemapper`, `btrfs`, `overlay2` and `zfs` graph drivers. - For the `devicemapper`, `btrfs` and `zfs` storage drivers, user cannot pass a size less than the Default BaseFS Size. - For the `overlay2` storage driver, the size option is only available if the backing fs is `xfs` and mounted with the `pquota` mount option. - Under these conditions, user can pass any size less then the backing fs size. - -**--sysctl**=SYSCTL - Configure namespaced kernel parameters at runtime - - IPC Namespace - current sysctls allowed: - - kernel.msgmax, kernel.msgmnb, kernel.msgmni, kernel.sem, kernel.shmall, kernel.shmmax, kernel.shmmni, kernel.shm_rmid_forced - Sysctls beginning with fs.mqueue.* - - Note: if you use the --ipc=host option these sysctls will not be allowed. - - Network Namespace - current sysctls allowed: - Sysctls beginning with net.* - - Note: if you use the --network=host option these sysctls will not be allowed. - -**--tmpfs**=[] Create a tmpfs mount - - Mount a temporary filesystem (`tmpfs`) mount into a container, for example: - - $ kpod run -d --tmpfs /tmp:rw,size=787448k,mode=1777 my_image - - This command mounts a `tmpfs` at `/tmp` within the container. The supported mount -options are the same as the Linux default `mount` flags. If you do not specify -any options, the systems uses the following options: -`rw,noexec,nosuid,nodev,size=65536k`. - -**-t**, **--tty**=*true*|*false* - Allocate a pseudo-TTY. The default is *false*. - - When set to true kpod will allocate a pseudo-tty and attach to the standard -input of the container. This can be used, for example, to run a throwaway -interactive shell. The default is false. - -Note: The **-t** option is incompatible with a redirection of the kpod client -standard input. - -**--ulimit**=[] - Ulimit options - -**-u**, **--user**="" - Sets the username or UID used and optionally the groupname or GID for the specified command. - - The followings examples are all valid: - --user [user | user:group | uid | uid:gid | user:gid | uid:group ] - - Without this argument the command will be run as root in the container. - -**--userns**="" - Set the usernamespace mode for the container when `userns-remap` option is enabled. - **host**: use the host usernamespace and enable all privileged options (e.g., `pid=host` or `--privileged`). - -**--uts**=*host* - Set the UTS mode for the container - **host**: use the host's UTS namespace inside the container. - Note: the host mode gives the container access to changing the host's hostname and is therefore considered insecure. - -**-v**|**--volume**[=*[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]*] - Create a bind mount. If you specify, ` -v /HOST-DIR:/CONTAINER-DIR`, kpod - bind mounts `/HOST-DIR` in the host to `/CONTAINER-DIR` in the kpod - container. If 'HOST-DIR' is omitted, kpod automatically creates the new - volume on the host. The `OPTIONS` are a comma delimited list and can be: - - * [rw|ro] - * [z|Z] - * [`[r]shared`|`[r]slave`|`[r]private`] - -The `CONTAINER-DIR` must be an absolute path such as `/src/docs`. The `HOST-DIR` -can be an absolute path or a `name` value. A `name` value must start with an -alphanumeric character, followed by `a-z0-9`, `_` (underscore), `.` (period) or -`-` (hyphen). An absolute path starts with a `/` (forward slash). - -If you supply a `HOST-DIR` that is an absolute path, kpod bind-mounts to the -path you specify. If you supply a `name`, kpod creates a named volume by that -`name`. For example, you can specify either `/foo` or `foo` for a `HOST-DIR` -value. If you supply the `/foo` value, kpod creates a bind-mount. If you -supply the `foo` specification, kpod creates a named volume. - -You can specify multiple **-v** options to mount one or more mounts to a -container. To use these same mounts in other containers, specify the -**--volumes-from** option also. - -You can add `:ro` or `:rw` suffix to a volume to mount it read-only or -read-write mode, respectively. By default, the volumes are mounted read-write. -See examples. - -Labeling systems like SELinux require that proper labels are placed on volume -content mounted into a container. Without a label, the security system might -prevent the processes running inside the container from using the content. By -default, kpod does not change the labels set by the OS. - -To change a label in the container context, you can add either of two suffixes -`:z` or `:Z` to the volume mount. These suffixes tell kpod to relabel file -objects on the shared volumes. The `z` option tells kpod that two containers -share the volume content. As a result, kpod labels the content with a shared -content label. Shared volume labels allow all containers to read/write content. -The `Z` option tells kpod to label the content with a private unshared label. -Only the current container can use a private volume. - -By default bind mounted volumes are `private`. That means any mounts done -inside container will not be visible on host and vice-a-versa. One can change -this behavior by specifying a volume mount propagation property. Making a -volume `shared` mounts done under that volume inside container will be -visible on host and vice-a-versa. Making a volume `slave` enables only one -way mount propagation and that is mounts done on host under that volume -will be visible inside container but not the other way around. - -To control mount propagation property of volume one can use `:[r]shared`, -`:[r]slave` or `:[r]private` propagation flag. Propagation property can -be specified only for bind mounted volumes and not for internal volumes or -named volumes. For mount propagation to work source mount point (mount point -where source dir is mounted on) has to have right propagation properties. For -shared volumes, source mount point has to be shared. And for slave volumes, -source mount has to be either shared or slave. - -Use `df ` to figure out the source mount and then use -`findmnt -o TARGET,PROPAGATION ` to figure out propagation -properties of source mount. If `findmnt` utility is not available, then one -can look at mount entry for source mount point in `/proc/self/mountinfo`. Look -at `optional fields` and see if any propagaion properties are specified. -`shared:X` means mount is `shared`, `master:X` means mount is `slave` and if -nothing is there that means mount is `private`. - -To change propagation properties of a mount point use `mount` command. For -example, if one wants to bind mount source directory `/foo` one can do -`mount --bind /foo /foo` and `mount --make-private --make-shared /foo`. This -will convert /foo into a `shared` mount point. Alternatively one can directly -change propagation properties of source mount. Say `/` is source mount for -`/foo`, then use `mount --make-shared /` to convert `/` into a `shared` mount. - -To disable automatic copying of data from the container path to the volume, use -the `nocopy` flag. The `nocopy` flag can be set on bind mounts and named volumes. - -**--volumes-from**=[] - Mount volumes from the specified container(s) - - Mounts already mounted volumes from a source container onto another - container. You must supply the source's container-id. To share - a volume, use the **--volumes-from** option when running - the target container. You can share volumes even if the source container - is not running. - - By default, kpod mounts the volumes in the same mode (read-write or - read-only) as it is mounted in the source container. Optionally, you - can change this by suffixing the container-id with either the `:ro` or - `:rw ` keyword. - - If the location of the volume from the source container overlaps with - data residing on a target container, then the volume hides - that data on the target. - -**-w**, **--workdir**="" - Working directory inside the container - - The default working directory for running binaries within a container is the root directory (/). -The image developer can set a different default with the WORKDIR instruction. The operator -can override the working directory by using the **-w** option. - -# EXAMPLES - -# HISTORY -August 2014, updated by Sven Dowideit -September 2014, updated by Sven Dowideit -November 2014, updated by Sven Dowideit -October 2017, converted from Docker documentation to kpod by Dan Walsh for kpod diff --git a/docs/kpod-diff.1.md b/docs/kpod-diff.1.md deleted file mode 100644 index 1916780c..00000000 --- a/docs/kpod-diff.1.md +++ /dev/null @@ -1,45 +0,0 @@ -% kpod(1) kpod-diff - Inspect changes on a container or image's filesystem -% Dan Walsh -# kpod-diff "1" "August 2017" "kpod" - -## NAME -kpod diff - Inspect changes on a container or image's filesystem - -## SYNOPSIS -**kpod** **diff** [*options* [...]] NAME - -## DESCRIPTION -Displays changes on a container or image's filesystem. The container or image will be compared to its parent layer - -## OPTIONS - -**--format** - -Alter the output into a different format. The only valid format for diff is `json`. - - -## EXAMPLE - -kpod diff redis:alpine -C /usr -C /usr/local -C /usr/local/bin -A /usr/local/bin/docker-entrypoint.sh - -kpod diff --format json redis:alpine -{ - "changed": [ - "/usr", - "/usr/local", - "/usr/local/bin" - ], - "added": [ - "/usr/local/bin/docker-entrypoint.sh" - ] -} - -## SEE ALSO -kpod(1) - -## HISTORY -August 2017, Originally compiled by Ryan Cole diff --git a/docs/kpod-export.1.md b/docs/kpod-export.1.md deleted file mode 100644 index c344f136..00000000 --- a/docs/kpod-export.1.md +++ /dev/null @@ -1,44 +0,0 @@ -% kpod(1) kpod-export - Simple tool to export a container's filesystem as a tarball -% Urvashi Mohnani -# kpod-export "1" "July 2017" "kpod" - -## NAME -kpod-export - Export container's filesystem contents as a tar archive - -## SYNOPSIS -**kpod export** -**CONTAINER** -[**--output**|**-o**] -[**--help**|**-h**] - -## DESCRIPTION -**kpod export** exports the filesystem of a container and saves it as a tarball -on the local machine. **kpod export** writes to STDOUT by default and can be -redirected to a file using the **output flag**. - -**kpod [GLOBAL OPTIONS]** - -**kpod export [GLOBAL OPTIONS]** - -**kpod export [OPTIONS] CONTAINER** - -## OPTIONS - -**--output, -o** -Write to a file, default is STDOUT - -## EXAMPLES - -``` -# kpod export -o redis-container.tar 883504668ec465463bc0fe7e63d53154ac3b696ea8d7b233748918664ea90e57 -``` - -``` -# kpod export > redis-container.tar 883504668ec465463bc0fe7e63d53154ac3b696ea8d7b233748918664ea90e57 -``` - -## SEE ALSO -kpod(1), kpod-import(1), crio(8), crio.conf(5) - -## HISTORY -August 2017, Originally compiled by Urvashi Mohnani diff --git a/docs/kpod-history.1.md b/docs/kpod-history.1.md deleted file mode 100644 index ae75e376..00000000 --- a/docs/kpod-history.1.md +++ /dev/null @@ -1,106 +0,0 @@ -% kpod(1) kpod-history - Simple tool to view the history of an image -% Urvashi Mohnani -% kpod-history "1" "JULY 2017" "kpod" - -## NAME -kpod-history - Shows the history of an image - -## SYNOPSIS -**kpod history** -**IMAGE[:TAG|DIGEST]** -[**--human**|**-H**] -[**--no-trunc**] -[**--quiet**|**-q**] -[**--format**] -[**--help**|**-h**] - -## DESCRIPTION -**kpod history** displays the history of an image by printing out information -about each layer used in the image. The information printed out for each layer -include Created (time and date), Created By, Size, and Comment. The output can -be truncated or not using the **--no-trunc** flag. If the **--human** flag is -set, the time of creation and size are printed out in a human readable format. -The **--quiet** flag displays the ID of the image only when set and the **--format** -flag is used to print the information using the Go template provided by the user. - -Valid placeholders for the Go template are listed below: - -| **Placeholder** | **Description** | -| --------------- | ----------------------------------------------------------------------------- | -| .ID | Image ID | -| .Created | if **--human**, time elapsed since creation, otherwise time stamp of creation | -| .CreatedBy | Command used to create the layer | -| .Size | Size of layer on disk | -| .Comment | Comment for the layer | - -**kpod [GLOBAL OPTIONS]** - -**kpod history [GLOBAL OPTIONS]** - -**kpod history [OPTIONS] IMAGE[:TAG|DIGEST]** - -## OPTIONS - -**--human, -H** - Display sizes and dates in human readable format - -**--no-trunc** - Do not truncate the output - -**--quiet, -q** - Print the numeric IDs only - -**--format** - Alter the output for a format like 'json' or a Go template. - - -## EXAMPLES - -``` -# kpod history debian -ID CREATED CREATED BY SIZE COMMENT -b676ca55e4f2c 9 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0 B - 9 weeks ago /bin/sh -c #(nop) ADD file:ebba725fb97cea4... 45.14 MB -``` - -``` -# kpod history --no-trunc=true --human=false debian -ID CREATED CREATED BY SIZE COMMENT -b676ca55e4f2c 2017-07-24T16:52:55Z /bin/sh -c #(nop) CMD ["bash"] 0 - 2017-07-24T16:52:54Z /bin/sh -c #(nop) ADD file:ebba725fb97cea4... 45142935 -``` - -``` -# kpod history --format "{{.ID}} {{.Created}}" debian -b676ca55e4f2c 9 weeks ago - 9 weeks ago -``` - -``` -# kpod history --format json debian -[ - { - "id": "b676ca55e4f2c0ce53d0636438c5372d3efeb5ae99b676fa5a5d1581bad46060", - "created": "2017-07-24T16:52:55.195062314Z", - "createdBy": "/bin/sh -c #(nop) CMD [\"bash\"]", - "size": 0, - "comment": "" - }, - { - "id": "b676ca55e4f2c0ce53d0636438c5372d3efeb5ae99b676fa5a5d1581bad46060", - "created": "2017-07-24T16:52:54.898893387Z", - "createdBy": "/bin/sh -c #(nop) ADD file:ebba725fb97cea45d0b1b35ccc8144e766fcfc9a78530465c23b0c4674b14042 in / ", - "size": 45142935, - "comment": "" - } -] -``` - -## history -Show the history of an image - -## SEE ALSO -kpod(1), crio(8), crio.conf(5) - -## HISTORY -July 2017, Originally compiled by Urvashi Mohnani diff --git a/docs/kpod-images.1.md b/docs/kpod-images.1.md deleted file mode 100644 index 96408090..00000000 --- a/docs/kpod-images.1.md +++ /dev/null @@ -1,60 +0,0 @@ -% kpod(1) kpod-images - List images in local storage -% Dan Walsh -# kpod-images "1" "March 2017" "kpod" - -## NAME -kpod images - List images in local storage - -## SYNOPSIS -**kpod** **images** [*options* [...]] - -## DESCRIPTION -Displays locally stored images, their names, and their IDs. - -## OPTIONS - -**--digests** - -Show image digests - -**--filter, -f=[]** - -Filter output based on conditions provided (default []) - -**--format** - -Change the default output format. This can be of a supported type like 'json' -or a Go template. - -**--noheading, -n** - -Omit the table headings from the listing of images. - -**--no-trunc, --notruncate** - -Do not truncate output. - -**--quiet, -q** - -Lists only the image IDs. - - -## EXAMPLE - -kpod images - -kpod images --quiet - -kpod images -q --noheading --notruncate - -kpod images --format json - -kpod images --format "{{.ID}}" - -kpod images --filter dangling=true - -## SEE ALSO -kpod(1) - -## HISTORY -March 2017, Originally compiled by Dan Walsh diff --git a/docs/kpod-info.1.md b/docs/kpod-info.1.md deleted file mode 100644 index 99deae9b..00000000 --- a/docs/kpod-info.1.md +++ /dev/null @@ -1,36 +0,0 @@ -% kpod(1) kpod-version - Simple tool to view version information -% Vincent Batts -% kpod-version "1" "JULY 2017" "kpod" - -## NAME -kpod-info - Display system information - - -## SYNOPSIS -**kpod** **info** [*options* [...]] - - -## DESCRIPTION - -Information display here pertain to the host, current storage stats, and build of kpod. Useful for the user and when reporting issues. - - -## OPTIONS - -**--debug, -D** - -Show additional information - -**--format** - -Change output format to "json" or a Go template. - - -## EXAMPLE - -`kpod info` - -`kpod info --debug --format json| jq .host.kernel` - -## SEE ALSO -crio(8), crio.conf(5) diff --git a/docs/kpod-inspect.1.md b/docs/kpod-inspect.1.md deleted file mode 100644 index 633f1fa4..00000000 --- a/docs/kpod-inspect.1.md +++ /dev/null @@ -1,171 +0,0 @@ -% kpod(1) kpod-inspect - Display a container or image's configuration -% Dan Walsh -# kpod-inspect "1" "July 2017" "kpod" - -## NAME -kpod inspect - Display a container or image's configuration - -## SYNOPSIS -**kpod** **inspect** [*options* [...]] name - -## DESCRIPTION -This displays the low-level information on containers and images identified by name or ID. By default, this will render all results in a JSON array. If the container and image have the same name, this will return container JSON for unspecified type. If a format is specified, the given template will be executed for each result. - -## OPTIONS - -**--type, t="TYPE"** - -Return data on items of the specified type. Type can be 'container', 'image' or 'all' (default: all) - -**--format, -f="FORMAT"** - -Format the output using the given Go template - -**--size** - -Display the total file size if the type is a container - - -## EXAMPLE - -kpod inspect redis:alpine - -{ - "ArgsEscaped": true, - "AttachStderr": false, - "AttachStdin": false, - "AttachStdout": false, - "Cmd": [ - "/bin/sh", - "-c", - "#(nop) ", - "CMD [\"redis-server\"]" - ], - "Domainname": "", - "Entrypoint": [ - "entrypoint.sh" - ], - "Env": [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", - "REDIS_VERSION=3.2.9", - "REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-3.2.9.tar.gz", - "REDIS_DOWNLOAD_SHA=6eaacfa983b287e440d0839ead20c2231749d5d6b78bbe0e0ffa3a890c59ff26" - ], - "ExposedPorts": { - "6379/tcp": {} - }, - "Hostname": "e1ede117fb1e", - "Image": "sha256:75e877aa15b534396de82d385386cc4dda7819d5cbb018b9f97b77aeb8f4b55a", - "Labels": {}, - "OnBuild": [], - "OpenStdin": false, - "StdinOnce": false, - "Tty": false, - "User": "", - "Volumes": { - "/data": {} - }, - "WorkingDir": "/data" -} -{ - "ID": "b3f2436bdb978c1d33b1387afb5d7ba7e3243ed2ce908db431ac0069da86cb45", - "Names": [ - "docker.io/library/redis:alpine" - ], - "Digests": [ - "sha256:88286f41530e93dffd4b964e1db22ce4939fffa4a4c665dab8591fbab03d4926", - "sha256:07b1ac6c7a5068201d8b63a09bb15358ec1616b813ef3942eb8cc12ae191227f", - "sha256:91e2e140ea27b3e89f359cd9fab4ec45647dda2a8e5fb0c78633217d9dca87b5", - "sha256:08957ceaa2b3be874cde8d7fa15c274300f47185acd62bca812a2ffb6228482d", - "sha256:acd3d12a6a79f772961a771f678c1a39e1f370e7baeb9e606ad8f1b92572f4ab", - "sha256:4ad88df090801e8faa8cf0be1f403b77613d13e11dad73f561461d482f79256c", - "sha256:159ac12c79e1a8d85dfe61afff8c64b96881719139730012a9697f432d6b739a" - ], - "Parent": "", - "Comment": "", - "Created": "2017-06-28T22:14:36.35280993Z", - "Container": "ba8d6c6b0d7fdd201fce404236136b44f3bfdda883466531a3d1a1f87906770b", - "ContainerConfig": { - "Hostname": "e1ede117fb1e", - "Domainname": "", - "User": "", - "AttachStdin": false, - "AttachStdout": false, - "AttachStderr": false, - "Tty": false, - "OpenStdin": false, - "StdinOnce": false, - "Env": [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", - "REDIS_VERSION=3.2.9", - "REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-3.2.9.tar.gz", - "REDIS_DOWNLOAD_SHA=6eaacfa983b287e440d0839ead20c2231749d5d6b78bbe0e0ffa3a890c59ff26" - ], - "Cmd": [ - "/bin/sh", - "-c", - "#(nop) ", - "CMD [\"redis-server\"]" - ], - "ArgsEscaped": true, - "Image": "sha256:75e877aa15b534396de82d385386cc4dda7819d5cbb018b9f97b77aeb8f4b55a", - "Volumes": { - "/data": {} - }, - "WorkingDir": "/data", - "Entrypoint": [ - "entrypoint.sh" - ], - "Labels": {}, - "OnBuild": [] - }, - "Author": "", - "Config": { - "ExposedPorts": { - "6379/tcp": {} - }, - "Env": [ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", - "REDIS_VERSION=3.2.9", - "REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-3.2.9.tar.gz", - "REDIS_DOWNLOAD_SHA=6eaacfa983b287e440d0839ead20c2231749d5d6b78bbe0e0ffa3a890c59ff26" - ], - "Entrypoint": [ - "entrypoint.sh" - ], - "Cmd": [ - "redis-server" - ], - "Volumes": { - "/data": {} - }, - "WorkingDir": "/data" - }, - "Architecture": "amd64", - "OS": "linux", - "Size": 3965955, - "VirtualSize": 19808086, - "GraphDriver": { - "Name": "overlay", - "Data": { - "MergedDir": "/var/lib/containers/storage/overlay/2059d805c90e034cb773d9722232ef018a72143dd31113b470fb876baeccd700/merged", - "UpperDir": "/var/lib/containers/storage/overlay/2059d805c90e034cb773d9722232ef018a72143dd31113b470fb876baeccd700/diff", - "WorkDir": "/var/lib/containers/storage/overlay/2059d805c90e034cb773d9722232ef018a72143dd31113b470fb876baeccd700/work" - } - }, - "RootFS": { - "type": "layers", - "diff_ids": [ - "sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0", - "sha256:c92a8fc997217611d0bfc9ff14d7ec00350ca564aef0ecbf726624561d7872d7", - "sha256:d4c406dea37a107b0cccb845611266a146725598be3e82ba31c55c08d1583b5a", - "sha256:8b4fa064e2b6c03a6c37089b0203f167375a8b49259c0ad7cb47c8c1e58b3fa0", - "sha256:c393e3d0b00ddf6b4166f1e2ad68245e08e9e3be0a0567a36d0a43854f03bfd6", - "sha256:38047b4117cb8bb3bba82991daf9a4e14ba01f9f66c1434d4895a7e96f67d8ba" - ] - } -} - - -## SEE ALSO -kpod(1) diff --git a/docs/kpod-kill.1.md b/docs/kpod-kill.1.md deleted file mode 100644 index 91247d28..00000000 --- a/docs/kpod-kill.1.md +++ /dev/null @@ -1,33 +0,0 @@ -% kpod(1) kpod-kill- Kill one or more containers with a signal -% Brent Baude -# kpod-kill"1" "September 2017" "kpod" - -## NAME -kpod kill - Kills one or more containers with a signal - -## SYNOPSIS -**kpod kill [OPTIONS] CONTAINER [...]** - -## DESCRIPTION -The main process inside each container specified will be sent SIGKILL, or any signal specified with option --signal. - -## OPTIONS - -**--signal, s** - -Signal to send to the container. For more information on Linux signals, refer to *man signal(7)*. - - -## EXAMPLE - -kpod kill mywebserver - -kpod kill 860a4b23 - -kpod kill --signal TERM 860a4b23 - -## SEE ALSO -kpod(1), kpod-stop(1) - -## HISTORY -September 2017, Originally compiled by Brent Baude diff --git a/docs/kpod-load.1.md b/docs/kpod-load.1.md deleted file mode 100644 index d29614de..00000000 --- a/docs/kpod-load.1.md +++ /dev/null @@ -1,76 +0,0 @@ -% kpod(1) kpod-load - Simple tool to load an image from an archive to containers-storage -% Urvashi Mohnani -# kpod-load "1" "July 2017" "kpod" - -## NAME -kpod-load - Load an image from docker archive - -## SYNOPSIS -**kpod load** -**NAME[:TAG|@DIGEST]** -[**--input**|**-i**] -[**--quiet**|**-q**] -[**--help**|**-h**] - -## DESCRIPTION -**kpod load** copies an image from either **docker-archive** or **oci-archive** stored -on the local machine. **kpod load** reads from stdin by default or a file if the **input** flag is set. -The **quiet** flag suppresses the output when set. - -**kpod [GLOBAL OPTIONS]** - -**kpod load [GLOBAL OPTIONS]** - -**kpod load [OPTIONS] NAME[:TAG|@DIGEST]** - -## OPTIONS - -**--input, -i** -Read from archive file, default is STDIN - -**--quiet, -q** -Suppress the output - -**--signature-policy="PATHNAME"** - -Pathname of a signature policy file to use. It is not recommended that this -option be used, as the default behavior of using the system-wide default policy -(frequently */etc/containers/policy.json*) is most often preferred - -## EXAMPLES - -``` -# kpod load --quiet -i fedora.tar -``` - -``` -# kpod load -q --signature-policy /etc/containers/policy.json -i fedora.tar -``` - -``` -# kpod load < fedora.tar -Getting image source signatures -Copying blob sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0 - 0 B / 4.03 MB [---------------------------------------------------------------] -Copying config sha256:7328f6f8b41890597575cbaadc884e7386ae0acc53b747401ebce5cf0d624560 - 0 B / 1.48 KB [---------------------------------------------------------------] -Writing manifest to image destination -Storing signatures -``` - -``` -# cat fedora.tar | kpod load -Getting image source signatures -Copying blob sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0 - 0 B / 4.03 MB [---------------------------------------------------------------] -Copying config sha256:7328f6f8b41890597575cbaadc884e7386ae0acc53b747401ebce5cf0d624560 - 0 B / 1.48 KB [---------------------------------------------------------------] -Writing manifest to image destination -Storing signatures -``` - -## SEE ALSO -kpod(1), kpod-save(1), crio(8), crio.conf(5) - -## HISTORY -July 2017, Originally compiled by Urvashi Mohnani diff --git a/docs/kpod-login.1.md b/docs/kpod-login.1.md deleted file mode 100644 index 05b3097c..00000000 --- a/docs/kpod-login.1.md +++ /dev/null @@ -1,65 +0,0 @@ -% kpod(1) kpod-login - Simple tool to login to a registry server -% Urvashi Mohnani -# kpod-login "1" "August 2017" "kpod" - -## NAME -kpod-login - Login to a container registry - -## SYNOPSIS -**kpod login** -[**--help**|**-h**] -[**--authfile**] -[**--user**|**-u**] -[**--password**|**-p**] -**REGISTRY** - -## DESCRIPTION -**kpod login** logs into a specified registry server with the correct username -and password. **kpod login** reads in the username and password from STDIN. -The username and password can also be set using the **username** and **password** flags. -The path of the authentication file can be specified by the user by setting the **authfile** -flag. The default path used is **${XDG\_RUNTIME_DIR}/containers/auth.json**. - -**kpod [GLOBAL OPTIONS]** - -**kpod login [GLOBAL OPTIONS]** - -**kpod login [OPTIONS] REGISTRY [GLOBAL OPTIONS]** - -## OPTIONS - -**--password, -p** -Password for registry - -**--username, -u** -Username for registry - -**--authfile** -Path of the authentication file. Default is ${XDG_\RUNTIME\_DIR}/containers/auth.json - -## EXAMPLES - -``` -# kpod login docker.io -Username: umohnani -Password: -Login Succeeded! -``` - -``` -# kpod login -u testuser -p testpassword localhost:5000 -Login Succeeded! -``` - -``` -# kpod login --authfile authdir/myauths.json docker.io -Username: umohnani -Password: -Login Succeeded! -``` - -## SEE ALSO -kpod(1), kpod-logout(1), crio(8), crio.conf(5) - -## HISTORY -August 2017, Originally compiled by Urvashi Mohnani diff --git a/docs/kpod-logout.1.md b/docs/kpod-logout.1.md deleted file mode 100644 index 5f119a18..00000000 --- a/docs/kpod-logout.1.md +++ /dev/null @@ -1,56 +0,0 @@ -% kpod(1) kpod-logout - Simple tool to logout of a registry server -% Urvashi Mohnani -# kpod-logout "1" "August 2017" "kpod" - -## NAME -kpod-logout - Logout of a container registry - -## SYNOPSIS -**kpod logout** -[**--help**|**-h**] -[**--authfile**] -[**--all**|**-a**] -**REGISTRY** - -## DESCRIPTION -**kpod logout** logs out of a specified registry server by deleting the cached credentials -stored in the **auth.json** file. The path of the authentication file can be overrriden by the user by setting the **authfile** flag. -The default path used is **${XDG\_RUNTIME_DIR}/containers/auth.json**. -All the cached credentials can be removed by setting the **all** flag. - -**kpod [GLOBAL OPTIONS]** - -**kpod logout [GLOBAL OPTIONS]** - -**kpod logout [OPTIONS] REGISTRY [GLOBAL OPTIONS]** - -## OPTIONS - -**--authfile** -Path of the authentication file. Default is ${XDG_\RUNTIME\_DIR}/containers/auth.json - -**--all, -a** -Remove the cached credentials for all registries in the auth file - -## EXAMPLES - -``` -# kpod logout docker.io -Remove login credentials for https://registry-1.docker.io/v2/ -``` - -``` -# kpod logout --authfile authdir/myauths.json docker.io -Remove login credentials for https://registry-1.docker.io/v2/ -``` - -``` -# kpod logout --all -Remove login credentials for all registries -``` - -## SEE ALSO -kpod(1), kpod-login(1), crio(8), crio.conf(5) - -## HISTORY -August 2017, Originally compiled by Urvashi Mohnani diff --git a/docs/kpod-logs.1.md b/docs/kpod-logs.1.md deleted file mode 100644 index 25d108ed..00000000 --- a/docs/kpod-logs.1.md +++ /dev/null @@ -1,61 +0,0 @@ -% kpod(1) kpod-logs - Fetch the logs of a container -% Ryan Cole -# kpod-logs "1" "March 2017" "kpod" - -## NAME -kpod logs - Fetch the logs of a container - -## SYNOPSIS -**kpod** **logs** [*options* [...]] container - -## DESCRIPTION -The kpod logs command batch-retrieves whatever logs are present for a container at the time of execution. This does not guarantee execution order when combined with kpod run (i.e. your run may not have generated any logs at the time you execute kpod logs - -## OPTIONS - -**--follow, -f** - -Follow log output. Default is false - -**--since=TIMESTAMP** - -Show logs since TIMESTAMP - -**--tail=LINES** - -Ouput the specified number of LINES at the end of the logs. LINES must be a positive integer. Defaults to 0, which prints all lines - -## EXAMPLE - -kpod logs b3f2436bdb978c1d33b1387afb5d7ba7e3243ed2ce908db431ac0069da86cb45 - -2017/08/07 10:16:21 Seeked /var/log/crio/pods/eb296bd56fab164d4d3cc46e5776b54414af3bf543d138746b25832c816b933b/c49f49788da14f776b7aa93fb97a2a71f9912f4e5a3e30397fca7dfe0ee0367b.log - &{Offset:0 Whence:0} -1:C 07 Aug 14:10:09.055 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo -1:C 07 Aug 14:10:09.055 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=1, just started -1:C 07 Aug 14:10:09.055 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf -1:M 07 Aug 14:10:09.055 # You requested maxclients of 10000 requiring at least 10032 max file descriptors. -1:M 07 Aug 14:10:09.055 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted. -1:M 07 Aug 14:10:09.055 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'. -1:M 07 Aug 14:10:09.056 * Running mode=standalone, port=6379. -1:M 07 Aug 14:10:09.056 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. -1:M 07 Aug 14:10:09.056 # Server initialized - - -kpod logs --tail 2 b3f2436bdb97 - -1:M 07 Aug 14:10:09.056 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. -1:M 07 Aug 14:10:09.056 # Server initialized - -kpod logs 224c375f27cd --since 2017-08-07T10:10:09.055837383-04:00 myserver - -1:M 07 Aug 14:10:09.055 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted. -1:M 07 Aug 14:10:09.055 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'. -1:M 07 Aug 14:10:09.056 * Running mode=standalone, port=6379. -1:M 07 Aug 14:10:09.056 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. -1:M 07 Aug 14:10:09.056 # Server initialized - -## SEE ALSO -kpod(1) - -## HISTORY -August 2017, Originally compiled by Ryan Cole diff --git a/docs/kpod-mount.1.md b/docs/kpod-mount.1.md deleted file mode 100644 index 25ccd937..00000000 --- a/docs/kpod-mount.1.md +++ /dev/null @@ -1,50 +0,0 @@ -% kpod(1) kpod-mount - Mount a working container's root filesystem. -% Dan Walsh -# kpod-mount "1" "July 2017" "kpod" - -## NAME -kpod mount - Mount a working container's root filesystem - -## SYNOPSIS -**kpod** **mount** - -**kpod** **mount** **containerID** - -## DESCRIPTION -Mounts the specified container's root file system in a location which can be -accessed from the host, and returns its location. - -If you execute the command without any arguments, the tool will list all of the -currently mounted containers. - -## RETURN VALUE -The location of the mounted file system. On error an empty string and errno is -returned. - -## OPTIONS - -**--format** - Print the mounted containers in specified format (json) - -**--notruncate** - -Do not truncate IDs in output. - -**--label** - -SELinux label for the mount point - -## EXAMPLE - -kpod mount c831414b10a3 - -/var/lib/containers/storage/overlay/f3ac502d97b5681989dff84dfedc8354239bcecbdc2692f9a639f4e080a02364/merged - -kpod mount - -c831414b10a3 /var/lib/containers/storage/overlay/f3ac502d97b5681989dff84dfedc8354239bcecbdc2692f9a639f4e080a02364/merged - -a7060253093b /var/lib/containers/storage/overlay/0ff7d7ca68bed1ace424f9df154d2dd7b5a125c19d887f17653cbcd5b6e30ba1/merged - -## SEE ALSO -kpod(1), kpod-umount(1), mount(8) diff --git a/docs/kpod-pause.1.md b/docs/kpod-pause.1.md deleted file mode 100644 index 4a1eee92..00000000 --- a/docs/kpod-pause.1.md +++ /dev/null @@ -1,24 +0,0 @@ -% kpod(1) kpod-pause - Pause one or more containers -% Dan Walsh -# kpod-pause "1" "September 2017" "kpod" - -## NAME -kpod pause - Pause one or more containers - -## SYNOPSIS -**kpod pause [OPTIONS] CONTAINER [...]** - -## DESCRIPTION -Pauses all the processes in one or more containers. You may use container IDs or names as input. - -## EXAMPLE - -kpod pause mywebserver - -kpod pause 860a4b23 - -## SEE ALSO -kpod(1), kpod-unpause(1) - -## HISTORY -September 2017, Originally compiled by Dan Walsh diff --git a/docs/kpod-ps.1.md b/docs/kpod-ps.1.md deleted file mode 100644 index e4285531..00000000 --- a/docs/kpod-ps.1.md +++ /dev/null @@ -1,131 +0,0 @@ -% kpod(1) kpod-ps - Simple tool to list containers -% Urvashi Mohnani -% kpod-ps "1" "AUGUST 2017" "kpod" - -## NAME -kpod-ps - Prints out information about containers - -## SYNOPSIS -**kpod ps** -[**--all**|**-a**] -[**--no-trunc**] -[**--quiet**|**-q**] -[**--fromat**] -[**--help**|**-h**] - -## DESCRIPTION -**kpod ps** lists the running containers on the system. Use the **--all** flag to view -all the containers information. By default it lists: - - * container id - * the name of the image the container is using - * the COMMAND the container is executing - * the time the container was created - * the status of the container - * port mappings the container is using - * alternative names for the container - -**kpod [GLOBAL OPTIONS]** - -**kpod ps [GLOBAL OPTIONS]** - -**kpod ps [OPTIONS]** - -## OPTIONS - -**--all, -a** - Show all the containers, default is only running containers - -**--no-trunc** - Display the extended information - -**--quiet, -q** - Print the numeric IDs of the containers only - -**--format** - Pretty-print containers to JSON or using a Go template - -Valid placeholders for the Go template are listed below: - -| **Placeholder** | **Description** | -| --------------- | ------------------------------------------------ | -| .ID | Container ID | -| .Image | Image ID/Name | -| .Command | Quoted command used | -| .CreatedAt | Creation time for container | -| .RunningFor | Time elapsed since container was started | -| .Status | Status of container | -| .Ports | Exposed ports | -| .Size | Size of container | -| .Names | Name of container | -| .Labels | All the labels assigned to the container | -| .Mounts | Volumes mounted in the container | - - -**--size, -s** - Display the total file size - -**--last, -n** - Print the n last created containers (all states) - -**--latest, -l** - show the latest container created (all states) - -**--namespace, --ns** - Display namespace information - -**--filter, -f** - Filter output based on conditions given - -Valid filters are listed below: - -| **Filter** | **Description** | -| --------------- | ------------------------------------------------------------------- | -| id | [ID] Container's ID | -| name | [Name] Container's name | -| label | [Key] or [Key=Value] Label assigned to a container | -| exited | [Int] Container's exit code | -| status | [Status] Container's status, e.g *running*, *stopped* | -| ancestor | [ImageName] Image or descendant used to create container | -| before | [ID] or [Name] Containers created before this container | -| since | [ID] or [Name] Containers created since this container | -| volume | [VolumeName] or [MountpointDestination] Volume mounted in container | - -## EXAMPLES - -``` -sudo kpod ps -a -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -02f65160e14ca redis:alpine "redis-server" 19 hours ago Exited (-1) 19 hours ago 6379/tcp k8s_podsandbox1-redis_podsandbox1_redhat.test.crio_redhat-test-crio_0 -69ed779d8ef9f redis:alpine "redis-server" 25 hours ago Created 6379/tcp k8s_container1_podsandbox1_redhat.test.crio_redhat-test-crio_1 -``` - -``` -sudo kpod ps -a -s -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE -02f65160e14ca redis:alpine "redis-server" 20 hours ago Exited (-1) 20 hours ago 6379/tcp k8s_podsandbox1-redis_podsandbox1_redhat.test.crio_redhat-test-crio_0 27.49 MB -69ed779d8ef9f redis:alpine "redis-server" 25 hours ago Created 6379/tcp k8s_container1_podsandbox1_redhat.test.crio_redhat-test-crio_1 27.49 MB -``` - -``` -sudo kpod ps -a --format "{{.ID}} {{.Image}} {{.Labels}} {{.Mounts}}" -02f65160e14ca redis:alpine tier=backend proc,tmpfs,devpts,shm,mqueue,sysfs,cgroup,/var/run/,/var/run/ -69ed779d8ef9f redis:alpine batch=no,type=small proc,tmpfs,devpts,shm,mqueue,sysfs,cgroup,/var/run/,/var/run/ -``` - -``` -sudo kpod ps --ns -a -CONTAINER ID NAMES PID CGROUP IPC MNT NET PIDNS USER UTS -3557d882a82e3 k8s_container2_podsandbox1_redhat.test.crio_redhat-test-crio_1 29910 4026531835 4026532585 4026532593 4026532508 4026532595 4026531837 4026532594 -09564cdae0bec k8s_container1_podsandbox1_redhat.test.crio_redhat-test-crio_1 29851 4026531835 4026532585 4026532590 4026532508 4026532592 4026531837 4026532591 -a31ebbee9cee7 k8s_podsandbox1-redis_podsandbox1_redhat.test.crio_redhat-test-crio_0 29717 4026531835 4026532585 4026532587 4026532508 4026532589 4026531837 4026532588 -``` - -## ps -Print a list of containers - -## SEE ALSO -kpod(1), crio(8), crio.conf(5) - -## HISTORY -August 2017, Originally compiled by Urvashi Mohnani diff --git a/docs/kpod-pull.1.md b/docs/kpod-pull.1.md deleted file mode 100644 index 254fc584..00000000 --- a/docs/kpod-pull.1.md +++ /dev/null @@ -1,135 +0,0 @@ -% kpod(1) kpod-pull - Simple tool to pull an image from a registry -% Urvashi Mohnani -# kpod-pull "1" "July 2017" "kpod" - -## NAME -kpod-pull - Pull an image from a registry - -## SYNOPSIS -**kpod pull** -**NAME[:TAG|@DIGEST]** -[**--help**|**-h**] - -## DESCRIPTION -Copies an image from a registry onto the local machine. **kpod pull** pulls an -image from Docker Hub if a registry is not specified in the command line argument. -If an image tag is not specified, **kpod pull** defaults to the image with the -**latest** tag (if it exists) and pulls it. **kpod pull** can also pull an image -using its digest **kpod pull [image]@[digest]**. **kpod pull** can be used to pull -images from archives and local storage using different transports. - -## imageID -Image stored in local container/storage - -## SOURCE - - The SOURCE is a location to get container images - The Image "SOURCE" uses a "transport":"details" format. - - Multiple transports are supported: - - **dir:**_path_ - An existing local directory _path_ storing the manifest, layer tarballs and signatures as individual files. This is a non-standardized format, primarily useful for debugging or noninvasive container inspection. - - **docker://**_docker-reference_ - An image in a registry implementing the "Docker Registry HTTP API V2". By default, uses the authorization state in `$XDG_RUNTIME_DIR/containers/auth.json`, which is set e.g. using `(kpod login)`. - - **docker-archive:**_path_[**:**_docker-reference_] - An image is stored in the `docker save` formatted file. _docker-reference_ is only used when creating such a file, and it must not contain a digest. - - **docker-daemon:**_docker-reference_ - An image _docker-reference_ stored in the docker daemon internal storage. _docker-reference_ must contain either a tag or a digest. Alternatively, when reading images, the format can also be docker-daemon:algo:digest (an image ID). - - **oci-archive:**_path_**:**_tag_ - An image _tag_ in a directory compliant with "Open Container Image Layout Specification" at _path_. - - **ostree:**_image_[**@**_/absolute/repo/path_] - An image in local OSTree repository. _/absolute/repo/path_ defaults to _/ostree/repo_. - -**kpod [GLOBAL OPTIONS]** - -**kpod pull [GLOBAL OPTIONS]** - -**kpod pull NAME[:TAG|@DIGEST]** - -## OPTIONS - -**--authfile** - -Path of the authentication file. Default is ${XDG_RUNTIME_DIR}/containers/auth.json - -**--cert-dir** - -Pathname of a directory containing TLS certificates and keys - -**--creds** - -Credentials (USERNAME:PASSWORD) to use for authenticating to a registry - -**--quiet, -q** - -Suppress output information when pulling images - -**--signature-policy="PATHNAME"** - -Pathname of a signature policy file to use. It is not recommended that this -option be used, as the default behavior of using the system-wide default policy -(frequently */etc/containers/policy.json*) is most often preferred - -**--tls-verify** - -Require HTTPS and verify certificates when contacting registries (default: true) - -## EXAMPLES - -``` -# kpod pull --signature-policy /etc/containers/policy.json alpine:latest -Trying to pull registry.access.redhat.com/alpine:latest... Failed -Trying to pull registry.fedoraproject.org/alpine:latest... Failed -Trying to pull docker.io/library/alpine:latest...Getting image source signatures -Copying blob sha256:88286f41530e93dffd4b964e1db22ce4939fffa4a4c665dab8591fbab03d4926 - 1.90 MB / 1.90 MB [========================================================] 0s -Copying config sha256:76da55c8019d7a47c347c0dceb7a6591144d232a7dd616242a367b8bed18ecbc - 1.48 KB / 1.48 KB [========================================================] 0s -Writing manifest to image destination -Storing signatures -``` - -``` -# kpod pull --authfile temp-auths/myauths.json docker://docker.io/umohnani/finaltest -Trying to pull docker.io/umohnani/finaltest:latest...Getting image source signatures -Copying blob sha256:6d987f6f42797d81a318c40d442369ba3dc124883a0964d40b0c8f4f7561d913 - 1.90 MB / 1.90 MB [========================================================] 0s -Copying config sha256:ad4686094d8f0186ec8249fc4917b71faa2c1030d7b5a025c29f26e19d95c156 - 1.41 KB / 1.41 KB [========================================================] 0s -Writing manifest to image destination -Storing signatures -``` - -``` -# kpod pull --creds testuser:testpassword docker.io/umohnani/finaltest -Trying to pull docker.io/umohnani/finaltest:latest...Getting image source signatures -Copying blob sha256:6d987f6f42797d81a318c40d442369ba3dc124883a0964d40b0c8f4f7561d913 - 1.90 MB / 1.90 MB [========================================================] 0s -Copying config sha256:ad4686094d8f0186ec8249fc4917b71faa2c1030d7b5a025c29f26e19d95c156 - 1.41 KB / 1.41 KB [========================================================] 0s -Writing manifest to image destination -Storing signatures -``` - -``` -# kpod pull --tls-verify=false --cert-dir image/certs docker.io/umohnani/finaltest -Trying to pull docker.io/umohnani/finaltest:latest...Getting image source signatures -Copying blob sha256:6d987f6f42797d81a318c40d442369ba3dc124883a0964d40b0c8f4f7561d913 - 1.90 MB / 1.90 MB [========================================================] 0s -Copying config sha256:ad4686094d8f0186ec8249fc4917b71faa2c1030d7b5a025c29f26e19d95c156 - 1.41 KB / 1.41 KB [========================================================] 0s -Writing manifest to image destination -Storing signatures -``` - -## SEE ALSO -kpod(1), kpod-push(1), crio(8), crio.conf(5) - -## HISTORY -July 2017, Originally compiled by Urvashi Mohnani diff --git a/docs/kpod-push.1.md b/docs/kpod-push.1.md deleted file mode 100644 index 80161503..00000000 --- a/docs/kpod-push.1.md +++ /dev/null @@ -1,116 +0,0 @@ -% kpod(1) kpod-push - Push an image from local storage to elsewhere -% Dan Walsh -# kpod-push "1" "June 2017" "kpod" - -## NAME -kpod push - Push an image from local storage to elsewhere - -## SYNOPSIS -**kpod** **push** [*options* [...]] **imageID** [**destination**] - -## DESCRIPTION -Pushes an image from local storage to a specified destination, decompressing -and recompressing layers as needed. - -## imageID -Image stored in local container/storage - -## DESTINATION - - The DESTINATION is a location to store container images - The Image "DESTINATION" uses a "transport":"details" format. - - Multiple transports are supported: - - **dir:**_path_ - An existing local directory _path_ storing the manifest, layer tarballs and signatures as individual files. This is a non-standardized format, primarily useful for debugging or noninvasive container inspection. - - **docker://**_docker-reference_ - An image in a registry implementing the "Docker Registry HTTP API V2". By default, uses the authorization state in `$XDG_RUNTIME_DIR/containers/auth.json`, which is set e.g. using `(kpod login)`. - - **docker-archive:**_path_[**:**_docker-reference_] - An image is stored in the `docker save` formatted file. _docker-reference_ is only used when creating such a file, and it must not contain a digest. - - **docker-daemon:**_docker-reference_ - An image _docker-reference_ stored in the docker daemon internal storage. _docker-reference_ must contain either a tag or a digest. Alternatively, when reading images, the format can also be docker-daemon:algo:digest (an image ID). - - **oci-archive:**_path_**:**_tag_ - An image _tag_ in a directory compliant with "Open Container Image Layout Specification" at _path_. - - **ostree:**_image_[**@**_/absolute/repo/path_] - An image in local OSTree repository. _/absolute/repo/path_ defaults to _/ostree/repo_. - -## OPTIONS - -**--authfile** - -Path of the authentication file. Default is ${XDG_RUNTIME_DIR}/containers/auth.json - -**--creds="CREDENTIALS"** - -Credentials (USERNAME:PASSWORD) to use for authenticating to a registry - -**cert-dir="PATHNAME"** - -Pathname of a directory containing TLS certificates and keys - -**--disable-compression, -D** - -Don't compress copies of filesystem layers which will be pushed - -**--quiet, -q** - -When writing the output image, suppress progress output - -**--remove-signatures** - -Discard any pre-existing signatures in the image - -**--signature-policy="PATHNAME"** - -Pathname of a signature policy file to use. It is not recommended that this -option be used, as the default behavior of using the system-wide default policy -(frequently */etc/containers/policy.json*) is most often preferred - -**--sign-by="KEY"** - -Add a signature at the destination using the specified key - -**--tls-verify** - -Require HTTPS and verify certificates when contacting registries (default: true) - -## EXAMPLE - -This example extracts the imageID image to a local directory in docker format. - - `# kpod push imageID dir:/path/to/image` - -This example extracts the imageID image to a local directory in oci format. - - `# kpod push imageID oci-archive:/path/to/layout:image:tag` - -This example extracts the imageID image to a container registry named registry.example.com - - `# kpod push imageID docker://registry.example.com/repository:tag` - -This example extracts the imageID image and puts into the local docker container store - - `# kpod push imageID docker-daemon:image:tag` - -This example pushes the alpine image to umohnani/alpine on dockerhub and reads the creds from -the path given to --authfile - -``` -# kpod push --authfile temp-auths/myauths.json alpine docker://docker.io/umohnani/alpine -Getting image source signatures -Copying blob sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0 - 4.03 MB / 4.03 MB [========================================================] 1s -Copying config sha256:ad4686094d8f0186ec8249fc4917b71faa2c1030d7b5a025c29f26e19d95c156 - 1.41 KB / 1.41 KB [========================================================] 1s -Writing manifest to image destination -Storing signatures -``` - -## SEE ALSO -kpod(1), kpod-pull(1), crio(8), crio.conf(5) diff --git a/docs/kpod-rename.1.md b/docs/kpod-rename.1.md deleted file mode 100644 index e59dbd99..00000000 --- a/docs/kpod-rename.1.md +++ /dev/null @@ -1,24 +0,0 @@ -% kpod(1) kpod-rename - Rename a container -% Ryan Cole -# kpod-images "1" "March 2017" "kpod" - -## NAME -kpod rename - Rename a container - -## SYNOPSIS -**kpod** **rename** CONTAINER NEW-NAME - -## DESCRIPTION -Rename a container. Container may be created, running, paused, or stopped - -## EXAMPLE - -kpod rename redis-container webserver - -kpod rename a236b9a4 mycontainer - -## SEE ALSO -kpod(1) - -## HISTORY -March 2017, Originally compiled by Ryan Cole diff --git a/docs/kpod-rm.1.md b/docs/kpod-rm.1.md deleted file mode 100644 index 4e2c490a..00000000 --- a/docs/kpod-rm.1.md +++ /dev/null @@ -1,31 +0,0 @@ -% kpod(1) kpod-rm - Remove one or more containers -% Ryan Cole -# kpod-rm "1" "August 2017" "kpod" - -## NAME -kpod rm - Remove one or more containers - -## SYNOPSIS -**kpod** **rm** [*options* [...]] container - -## DESCRIPTION -Kpod rm will remove one or more containers from the host. The container name or ID can be used. This does not remove images. Running containers will not be removed without the -f option - -## OPTIONS - -**--force, f** - -Force the removal of a running container - - -## EXAMPLE - -kpod rm mywebserver - -kpod rm -f 860a4b23 - -## SEE ALSO -kpod(1), kpod-rmi(1) - -## HISTORY -August 2017, Originally compiled by Ryan Cole diff --git a/docs/kpod-rmi.1.md b/docs/kpod-rmi.1.md deleted file mode 100644 index 1566f961..00000000 --- a/docs/kpod-rmi.1.md +++ /dev/null @@ -1,32 +0,0 @@ -% kpod(1) kpod-rmi - Removes one or more images -% Dan Walsh -# kpod-rmi "1" "March 2017" "kpod" - -## NAME -kpod rmi - Removes one or more images - -## SYNOPSIS -**kpod** **rmi** **imageID [...]** - -## DESCRIPTION -Removes one or more locally stored images. - -## OPTIONS - -**--force, -f** - -Executing this command will stop all containers that are using the image and remove them from the system - -## EXAMPLE - -kpod rmi imageID - -kpod rmi --force imageID - -kpod rmi imageID1 imageID2 imageID3 - -## SEE ALSO -kpod(1) - -## HISTORY -March 2017, Originally compiled by Dan Walsh diff --git a/docs/kpod-run.1.md b/docs/kpod-run.1.md deleted file mode 100644 index b5214c7d..00000000 --- a/docs/kpod-run.1.md +++ /dev/null @@ -1,847 +0,0 @@ -% kpod(1) kpod-run - Run a command in a container -% Dan Walsh -kpod-run - Run a command in a new container - -# SYNOPSIS -**kpod run** [*options* [...]] IMAGE [COMMAND] [ARG...] - -# DESCRIPTION - -Run a process in a new container. **kpod run** starts a process with its own -file system, its own networking, and its own isolated process tree. The IMAGE -which starts the process may define defaults related to the process that will be -run in the container, the networking to expose, and more, but **kpod run** -gives final control to the operator or administrator who starts the container -from the image. For that reason **kpod run** has more options than any other -kpod command. - -If the IMAGE is not already loaded then **kpod run** will pull the IMAGE, and -all image dependencies, from the repository in the same way running **kpod -pull** IMAGE, before it starts the container from that image. - -# OPTIONS -**--add-host**=[] - Add a custom host-to-IP mapping (host:ip) - - Add a line to /etc/hosts. The format is hostname:ip. The **--add-host** -option can be set multiple times. - -**-a**, **--attach**=[] - Attach to STDIN, STDOUT or STDERR. - - In foreground mode (the default when **-d** -is not specified), **kpod run** can start the process in the container -and attach the console to the process's standard input, output, and standard -error. It can even pretend to be a TTY (this is what most commandline -executables expect) and pass along signals. The **-a** option can be set for -each of stdin, stdout, and stderr. - -**--blkio-weight**=*0* - Block IO weight (relative weight) accepts a weight value between 10 and 1000. - -**--blkio-weight-device**=[] - Block IO weight (relative device weight, format: `DEVICE_NAME:WEIGHT`). - -**--cap-add**=[] - Add Linux capabilities - -**--cap-drop**=[] - Drop Linux capabilities - -**--cgroup-parent**="" - Path to cgroups under which the cgroup for the container will be created. If the path is not absolute, the path is considered to be relative to the cgroups path of the init process. Cgroups will be created if they do not already exist. - -**--cidfile**="" - Write the container ID to the file - -**--cpu-count**=*0* - Limit the number of CPUs available for execution by the container. - - On Windows Server containers, this is approximated as a percentage of total CPU usage. - - On Windows Server containers, the processor resource controls are mutually exclusive, the order of precedence is CPUCount first, then CPUShares, and CPUPercent last. - -**--cpu-period**=*0* - Limit the CPU CFS (Completely Fair Scheduler) period - - Limit the container's CPU usage. This flag tell the kernel to restrict the container's CPU usage to the period you specify. - -**--cpu-quota**=*0* - Limit the CPU CFS (Completely Fair Scheduler) quota - - Limit the container's CPU usage. By default, containers run with the full -CPU resource. This flag tell the kernel to restrict the container's CPU usage -to the quota you specify. - -**--cpu-rt-period**=0 - Limit the CPU real-time period in microseconds - - Limit the container's Real Time CPU usage. This flag tell the kernel to restrict the container's Real Time CPU usage to the period you specify. - -**--cpu-rt-runtime**=0 - Limit the CPU real-time runtime in microseconds - - Limit the containers Real Time CPU usage. This flag tells the kernel to limit the amount of time in a given CPU period Real Time tasks may consume. Ex: - Period of 1,000,000us and Runtime of 950,000us means that this container could consume 95% of available CPU and leave the remaining 5% to normal priority tasks. - - The sum of all runtimes across containers cannot exceed the amount allotted to the parent cgroup. - -**--cpu-shares**=*0* - CPU shares (relative weight) - - By default, all containers get the same proportion of CPU cycles. This proportion -can be modified by changing the container's CPU share weighting relative -to the weighting of all other running containers. - -To modify the proportion from the default of 1024, use the **--cpu-shares** -flag to set the weighting to 2 or higher. - -The proportion will only apply when CPU-intensive processes are running. -When tasks in one container are idle, other containers can use the -left-over CPU time. The actual amount of CPU time will vary depending on -the number of containers running on the system. - -For example, consider three containers, one has a cpu-share of 1024 and -two others have a cpu-share setting of 512. When processes in all three -containers attempt to use 100% of CPU, the first container would receive -50% of the total CPU time. If you add a fourth container with a cpu-share -of 1024, the first container only gets 33% of the CPU. The remaining containers -receive 16.5%, 16.5% and 33% of the CPU. - -On a multi-core system, the shares of CPU time are distributed over all CPU -cores. Even if a container is limited to less than 100% of CPU time, it can -use 100% of each individual CPU core. - -For example, consider a system with more than three cores. If you start one -container **{C0}** with **-c=512** running one process, and another container -**{C1}** with **-c=1024** running two processes, this can result in the following -division of CPU shares: - - PID container CPU CPU share - 100 {C0} 0 100% of CPU0 - 101 {C1} 1 100% of CPU1 - 102 {C1} 2 100% of CPU2 - -**--cpus**=0.0 - Number of CPUs. The default is *0.0* which means no limit. - -**--cpuset-cpus**="" - CPUs in which to allow execution (0-3, 0,1) - -**--cpuset-mems**="" - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. - - If you have four memory nodes on your system (0-3), use `--cpuset-mems=0,1` -then processes in your container will only use memory from the first -two memory nodes. - -**-d**, **--detach**=*true*|*false* - Detached mode: run the container in the background and print the new container ID. The default is *false*. - - At any time you can run **kpod ps** in -the other shell to view a list of the running containers. You can reattach to a -detached container with **kpod attach**. If you choose to run a container in -the detached mode, then you cannot use the **-rm** option. - - When attached in the tty mode, you can detach from the container (and leave it -running) using a configurable key sequence. The default sequence is `CTRL-p CTRL-q`. -You configure the key sequence using the **--detach-keys** option or a configuration file. -See **config-json(5)** for documentation on using a configuration file. - -**--detach-keys**="" - Override the key sequence for detaching a container. Format is a single character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. - -**--device**=[] - Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc:rwm) - -**--device-read-bps**=[] - Limit read rate (bytes per second) from a device (e.g. --device-read-bps=/dev/sda:1mb) - -**--device-read-iops**=[] - Limit read rate (IO per second) from a device (e.g. --device-read-iops=/dev/sda:1000) - -**--device-write-bps**=[] - Limit write rate (bytes per second) to a device (e.g. --device-write-bps=/dev/sda:1mb) - -**--device-write-iops**=[] - Limit write rate (IO per second) to a device (e.g. --device-write-iops=/dev/sda:1000) - -**--dns**=[] - Set custom DNS servers - - This option can be used to override the DNS -configuration passed to the container. Typically this is necessary when the -host DNS configuration is invalid for the container (e.g., 127.0.0.1). When this -is the case the **--dns** flags is necessary for every run. - -**--dns-option**=[] - Set custom DNS options - -**--dns-search**=[] - Set custom DNS search domains (Use --dns-search=. if you don't wish to set the search domain) - -**--entrypoint**="" - Overwrite the default ENTRYPOINT of the image - - This option allows you to overwrite the default entrypoint of the image. - The ENTRYPOINT of an image is similar to a COMMAND -because it specifies what executable to run when the container starts, but it is -(purposely) more difficult to override. The ENTRYPOINT gives a container its -default nature or behavior, so that when you set an ENTRYPOINT you can run the -container as if it were that binary, complete with default options, and you can -pass in more options via the COMMAND. But, sometimes an operator may want to run -something else inside the container, so you can override the default ENTRYPOINT -at runtime by using a **--entrypoint** and a string to specify the new -ENTRYPOINT. - -**-e**, **--env**=[] - Set environment variables - - This option allows you to specify arbitrary -environment variables that are available for the process that will be launched -inside of the container. - -**--env-file**=[] - Read in a line delimited file of environment variables - -**--expose**=[] - Expose a port, or a range of ports (e.g. --expose=3300-3310) to set up port redirection - on the host system. - -**--group-add**=[] - Add additional groups to run as - -**--hostname**="" - Container host name - - Sets the container host name that is available inside the container. - -**--help** - Print usage statement - -**-i**, **--interactive**=*true*|*false* - Keep STDIN open even if not attached. The default is *false*. - - When set to true, keep stdin open even if not attached. The default is false. - -**--ip**="" - Sets the container's interface IPv4 address (e.g. 172.23.0.9) - - It can only be used in conjunction with **--network** for user-defined networks - -**--ip6**="" - Sets the container's interface IPv6 address (e.g. 2001:db8::1b99) - - It can only be used in conjunction with **--network** for user-defined networks - -**--ipc**="" - Default is to create a private IPC namespace (POSIX SysV IPC) for the container - 'container:': reuses another container shared memory, semaphores and message queues - 'host': use the host shared memory,semaphores and message queues inside the container. Note: the host mode gives the container full access to local shared memory and is therefore considered insecure. - -**--kernel-memory**="" - Kernel memory limit (format: `[]`, where unit = b, k, m or g) - - Constrains the kernel memory available to a container. If a limit of 0 -is specified (not using `--kernel-memory`), the container's kernel memory -is not limited. If you specify a limit, it may be rounded up to a multiple -of the operating system's page size and the value can be very large, -millions of trillions. - -**-l**, **--label**=[] - Add metadata to a container (e.g., --label com.example.key=value) - -**--label-file**=[] - Read in a line delimited file of labels - -**--link-local-ip**=[] - Add one or more link-local IPv4/IPv6 addresses to the container's interface - -**--log-driver**="*json-file*|*syslog*|*journald*|*gelf*|*fluentd*|*awslogs*|*splunk*|*etwlogs*|*gcplogs*|*none*" - Logging driver for the container. Default is defined by daemon `--log-driver` flag. - **Warning**: the `kpod logs` command works only for the `json-file` and - `journald` logging drivers. - -**--log-opt**=[] - Logging driver specific options. - -**--mac-address**="" - Container MAC address (e.g. 92:d0:c6:0a:29:33) - - Remember that the MAC address in an Ethernet network must be unique. -The IPv6 link-local address will be based on the device's MAC address -according to RFC4862. - -**-m**, **--memory**="" - Memory limit (format: [], where unit = b, k, m or g) - - Allows you to constrain the memory available to a container. If the host -supports swap memory, then the **-m** memory setting can be larger than physical -RAM. If a limit of 0 is specified (not using **-m**), the container's memory is -not limited. The actual limit may be rounded up to a multiple of the operating -system's page size (the value would be very large, that's millions of trillions). - -**--memory-reservation**="" - Memory soft limit (format: [], where unit = b, k, m or g) - - After setting memory reservation, when the system detects memory contention -or low memory, containers are forced to restrict their consumption to their -reservation. So you should always set the value below **--memory**, otherwise the -hard limit will take precedence. By default, memory reservation will be the same -as memory limit. - -**--memory-swap**="LIMIT" - A limit value equal to memory plus swap. Must be used with the **-m** -(**--memory**) flag. The swap `LIMIT` should always be larger than **-m** -(**--memory**) value. By default, the swap `LIMIT` will be set to double -the value of --memory. - - The format of `LIMIT` is `[]`. Unit can be `b` (bytes), -`k` (kilobytes), `m` (megabytes), or `g` (gigabytes). If you don't specify a -unit, `b` is used. Set LIMIT to `-1` to enable unlimited swap. - -**--memory-swappiness**="" - Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. - -**--name**="" - Assign a name to the container - - The operator can identify a container in three ways: - UUID long identifier (“f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778”) - UUID short identifier (“f78375b1c487”) - Name (“jonah”) - - kpod generates a UUID for each container, and if a name is not assigned -to the container with **--name** then the daemon will also generate a random -string name. The name is useful when defining links (see **--link**) (or any -other place you need to identify a container). This works for both background -and foreground containers. - -**--network**="*bridge*" - Set the Network mode for the container - 'bridge': create a network stack on the default bridge - 'none': no networking - 'container:': reuse another container's network stack - 'host': use the kpod host network stack. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure. - '|': connect to a user-defined network - -**--network-alias**=[] - Add network-scoped alias for the container - -**--oom-kill-disable**=*true*|*false* - Whether to disable OOM Killer for the container or not. - -**--oom-score-adj**="" - Tune the host's OOM preferences for containers (accepts -1000 to 1000) - -**--pid**="" - Set the PID mode for the container - Default is to create a private PID namespace for the container - 'container:': join another container's PID namespace - 'host': use the host's PID namespace for the container. Note: the host mode gives the container full access to local PID and is therefore considered insecure. - -**--pids-limit**="" - Tune the container's pids limit. Set `-1` to have unlimited pids for the container. - -**--pod**="" - Run container in an existing pod - -**--privileged**=*true*|*false* - Give extended privileges to this container. The default is *false*. - - By default, kpod containers are -“unprivileged” (=false) and cannot, for example, modify parts of the kernel. -This is because by default a container is not allowed to access any devices. -A “privileged” container is given access to all devices. - - When the operator executes **kpod run --privileged**, kpod enables access -to all devices on the host as well as set turn off most of the security messurs -protecting the host from the container. - -**-p**, **--publish**=[] - Publish a container's port, or range of ports, to the host - - Format: `ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort` -Both hostPort and containerPort can be specified as a range of ports. -When specifying ranges for both, the number of container ports in the range must match the number of host ports in the range. -(e.g., `kpod run -p 1234-1236:1222-1224 --name thisWorks -t busybox` -but not `kpod run -p 1230-1236:1230-1240 --name RangeContainerPortsBiggerThanRangeHostPorts -t busybox`) -With ip: `kpod run -p 127.0.0.1:$HOSTPORT:$CONTAINERPORT --name CONTAINER -t someimage` -Use `kpod port` to see the actual mapping: `kpod port CONTAINER $CONTAINERPORT` - -**-P**, **--publish-all**=*true*|*false* - Publish all exposed ports to random ports on the host interfaces. The default is *false*. - - When set to true publish all exposed ports to the host interfaces. The -default is false. If the operator uses -P (or -p) then kpod will make the -exposed port accessible on the host and the ports will be available to any -client that can reach the host. When using -P, kpod will bind any exposed -port to a random port on the host within an *ephemeral port range* defined by -`/proc/sys/net/ipv4/ip_local_port_range`. To find the mapping between the host -ports and the exposed ports, use `kpod port`. - -**--read-only**=*true*|*false* - Mount the container's root filesystem as read only. - - By default a container will have its root filesystem writable allowing processes -to write files anywhere. By specifying the `--read-only` flag the container will have -its root filesystem mounted as read only prohibiting any writes. - -**--rm**=*true*|*false* - Automatically remove the container when it exits. The default is *false*. - `--rm` flag can work together with `-d`, and auto-removal will be done on daemon side. Note that it's -incompatible with any restart policy other than `none`. - -**--security-opt**=[] - Security Options - - "label=user:USER" : Set the label user for the container - "label=role:ROLE" : Set the label role for the container - "label=type:TYPE" : Set the label type for the container - "label=level:LEVEL" : Set the label level for the container - "label=disable" : Turn off label confinement for the container - "no-new-privileges" : Disable container processes from gaining additional privileges - - "seccomp=unconfined" : Turn off seccomp confinement for the container - "seccomp=profile.json : White listed syscalls seccomp Json file to be used as a seccomp filter - - "apparmor=unconfined" : Turn off apparmor confinement for the container - "apparmor=your-profile" : Set the apparmor confinement profile for the container - -**--shm-size**="" - Size of `/dev/shm`. The format is ``. `number` must be greater than `0`. - Unit is optional and can be `b` (bytes), `k` (kilobytes), `m`(megabytes), or `g` (gigabytes). - If you omit the unit, the system uses bytes. If you omit the size entirely, the system uses `64m`. - -**--sig-proxy**=*true*|*false* - Proxy received signals to the process (non-TTY mode only). SIGCHLD, SIGSTOP, and SIGKILL are not proxied. The default is *true*. - -**--stop-signal**=*SIGTERM* - Signal to stop a container. Default is SIGTERM. - -**--stop-timeout**=*10* - Timeout (in seconds) to stop a container. Default is 10. - -**--storage-opt**=[] - Storage driver options per container - - $ kpod run -it --storage-opt size=120G fedora /bin/bash - - This (size) will allow to set the container rootfs size to 120G at creation time. - This option is only available for the `devicemapper`, `btrfs`, `overlay2` and `zfs` graph drivers. - For the `devicemapper`, `btrfs` and `zfs` storage drivers, user cannot pass a size less than the Default BaseFS Size. - For the `overlay2` storage driver, the size option is only available if the backing fs is `xfs` and mounted with the `pquota` mount option. - Under these conditions, user can pass any size less then the backing fs size. - -**--sysctl**=SYSCTL - Configure namespaced kernel parameters at runtime - - IPC Namespace - current sysctls allowed: - - kernel.msgmax, kernel.msgmnb, kernel.msgmni, kernel.sem, kernel.shmall, kernel.shmmax, kernel.shmmni, kernel.shm_rmid_forced - Sysctls beginning with fs.mqueue.* - - Note: if you use the `--ipc=host` option these sysctls will not be allowed. - - Network Namespace - current sysctls allowed: - Sysctls beginning with net.* - - Note: if you use the `--network=host` option these sysctls will not be allowed. - -**--tmpfs**=[] Create a tmpfs mount - - Mount a temporary filesystem (`tmpfs`) mount into a container, for example: - - $ kpod run -d --tmpfs /tmp:rw,size=787448k,mode=1777 my_image - - This command mounts a `tmpfs` at `/tmp` within the container. The supported mount -options are the same as the Linux default `mount` flags. If you do not specify -any options, the systems uses the following options: -`rw,noexec,nosuid,nodev,size=65536k`. - -**-t**, **--tty**=*true*|*false* - Allocate a pseudo-TTY. The default is *false*. - - When set to true kpod will allocate a pseudo-tty and attach to the standard -input of the container. This can be used, for example, to run a throwaway -interactive shell. The default is false. - -Note: The **-t** option is incompatible with a redirection of the kpod client -standard input. - -**--ulimit**=[] - Ulimit options - -**-u**, **--user**="" - Sets the username or UID used and optionally the groupname or GID for the specified command. - - The followings examples are all valid: - --user [user | user:group | uid | uid:gid | user:gid | uid:group ] - - Without this argument the command will be run as root in the container. - -**--userns**="" - Set the usernamespace mode for the container when `userns-remap` option is enabled. - **host**: use the host usernamespace and enable all privileged options (e.g., `pid=host` or `--privileged`). - -**--uts**=*host* - Set the UTS mode for the container - **host**: use the host's UTS namespace inside the container. - Note: the host mode gives the container access to changing the host's hostname and is therefore considered insecure. - -**-v**|**--volume**[=*[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]*] - Create a bind mount. If you specify, ` -v /HOST-DIR:/CONTAINER-DIR`, kpod - bind mounts `/HOST-DIR` in the host to `/CONTAINER-DIR` in the kpod - container. If 'HOST-DIR' is omitted, kpod automatically creates the new - volume on the host. The `OPTIONS` are a comma delimited list and can be: - - * [rw|ro] - * [z|Z] - * [`[r]shared`|`[r]slave`|`[r]private`] - * [nocopy] - -The `CONTAINER-DIR` must be an absolute path such as `/src/docs`. The `HOST-DIR` -can be an absolute path or a `name` value. A `name` value must start with an -alphanumeric character, followed by `a-z0-9`, `_` (underscore), `.` (period) or -`-` (hyphen). An absolute path starts with a `/` (forward slash). - -If you supply a `HOST-DIR` that is an absolute path, kpod bind-mounts to the -path you specify. If you supply a `name`, kpod creates a named volume by that -`name`. For example, you can specify either `/foo` or `foo` for a `HOST-DIR` -value. If you supply the `/foo` value, kpod creates a bind-mount. If you -supply the `foo` specification, kpod creates a named volume. - -You can specify multiple **-v** options to mount one or more mounts to a -container. To use these same mounts in other containers, specify the -**--volumes-from** option also. - -You can add `:ro` or `:rw` suffix to a volume to mount it read-only or -read-write mode, respectively. By default, the volumes are mounted read-write. -See examples. - -Labeling systems like SELinux require that proper labels are placed on volume -content mounted into a container. Without a label, the security system might -prevent the processes running inside the container from using the content. By -default, kpod does not change the labels set by the OS. - -To change a label in the container context, you can add either of two suffixes -`:z` or `:Z` to the volume mount. These suffixes tell kpod to relabel file -objects on the shared volumes. The `z` option tells kpod that two containers -share the volume content. As a result, kpod labels the content with a shared -content label. Shared volume labels allow all containers to read/write content. -The `Z` option tells kpod to label the content with a private unshared label. -Only the current container can use a private volume. - -By default bind mounted volumes are `private`. That means any mounts done -inside container will not be visible on host and vice-a-versa. One can change -this behavior by specifying a volume mount propagation property. Making a -volume `shared` mounts done under that volume inside container will be -visible on host and vice-a-versa. Making a volume `slave` enables only one -way mount propagation and that is mounts done on host under that volume -will be visible inside container but not the other way around. - -To control mount propagation property of volume one can use `:[r]shared`, -`:[r]slave` or `:[r]private` propagation flag. Propagation property can -be specified only for bind mounted volumes and not for internal volumes or -named volumes. For mount propagation to work source mount point (mount point -where source dir is mounted on) has to have right propagation properties. For -shared volumes, source mount point has to be shared. And for slave volumes, -source mount has to be either shared or slave. - -Use `df ` to figure out the source mount and then use -`findmnt -o TARGET,PROPAGATION ` to figure out propagation -properties of source mount. If `findmnt` utility is not available, then one -can look at mount entry for source mount point in `/proc/self/mountinfo`. Look -at `optional fields` and see if any propagaion properties are specified. -`shared:X` means mount is `shared`, `master:X` means mount is `slave` and if -nothing is there that means mount is `private`. - -To change propagation properties of a mount point use `mount` command. For -example, if one wants to bind mount source directory `/foo` one can do -`mount --bind /foo /foo` and `mount --make-private --make-shared /foo`. This -will convert /foo into a `shared` mount point. Alternatively one can directly -change propagation properties of source mount. Say `/` is source mount for -`/foo`, then use `mount --make-shared /` to convert `/` into a `shared` mount. - -To disable automatic copying of data from the container path to the volume, use -the `nocopy` flag. The `nocopy` flag can be set on bind mounts and named volumes. - -**--volumes-from**=[] - Mount volumes from the specified container(s) - - Mounts already mounted volumes from a source container onto another - container. You must supply the source's container-id. To share - a volume, use the **--volumes-from** option when running - the target container. You can share volumes even if the source container - is not running. - - By default, kpod mounts the volumes in the same mode (read-write or - read-only) as it is mounted in the source container. Optionally, you - can change this by suffixing the container-id with either the `:ro` or - `:rw ` keyword. - - If the location of the volume from the source container overlaps with - data residing on a target container, then the volume hides - that data on the target. - -**-w**, **--workdir**="" - Working directory inside the container - - The default working directory for running binaries within a container is the root directory (/). -The image developer can set a different default with the WORKDIR instruction. The operator -can override the working directory by using the **-w** option. - -# Exit Status - -The exit code from `kpod run` gives information about why the container -failed to run or why it exited. When `kpod run` exits with a non-zero code, -the exit codes follow the `chroot` standard, see below: - -**_125_** if the error is with kpod **_itself_** - - $ kpod run --foo busybox; echo $? - # flag provided but not defined: --foo - See 'kpod run --help'. - 125 - -**_126_** if the **_contained command_** cannot be invoked - - $ kpod run busybox /etc; echo $? - # exec: "/etc": permission denied - kpod: Error response from daemon: Contained command could not be invoked - 126 - -**_127_** if the **_contained command_** cannot be found - - $ kpod run busybox foo; echo $? - # exec: "foo": executable file not found in $PATH - kpod: Error response from daemon: Contained command not found or does not exist - 127 - -**_Exit code_** of **_contained command_** otherwise - - $ kpod run busybox /bin/sh -c 'exit 3' - # 3 - -# EXAMPLES - -## Running container in read-only mode - -During container image development, containers often need to write to the image -content. Installing packages into /usr, for example. In production, -applications seldom need to write to the image. Container applications write -to volumes if they need to write to file systems at all. Applications can be -made more secure by running them in read-only mode using the - -read-only switch. -This protects the containers image from modification. Read only containers may -still need to write temporary data. The best way to handle this is to mount -tmpfs directories on /run and /tmp. - - # kpod run --read-only --tmpfs /run --tmpfs /tmp -i -t fedora /bin/bash - -## Exposing log messages from the container to the host's log - -If you want messages that are logged in your container to show up in the host's -syslog/journal then you should bind mount the /dev/log directory as follows. - - # kpod run -v /dev/log:/dev/log -i -t fedora /bin/bash - -From inside the container you can test this by sending a message to the log. - - (bash)# logger "Hello from my container" - -Then exit and check the journal. - - # exit - - # journalctl -b | grep Hello - -This should list the message sent to logger. - -## Attaching to one or more from STDIN, STDOUT, STDERR - -If you do not specify -a then kpod will attach everything (stdin,stdout,stderr) -. You can specify to which of the three standard streams (stdin, stdout, stderr) -you'd like to connect instead, as in: - - # kpod run -a stdin -a stdout -i -t fedora /bin/bash - -## Sharing IPC between containers - -Using shm_server.c available here: https://www.cs.cf.ac.uk/Dave/C/node27.html - -Testing `--ipc=host` mode: - -Host shows a shared memory segment with 7 pids attached, happens to be from httpd: - -``` - $ sudo ipcs -m - - ------ Shared Memory Segments -------- - key shmid owner perms bytes nattch status - 0x01128e25 0 root 600 1000 7 -``` - -Now run a regular container, and it correctly does NOT see the shared memory segment from the host: - -``` - $ kpod run -it shm ipcs -m - - ------ Shared Memory Segments -------- - key shmid owner perms bytes nattch status -``` - -Run a container with the new `--ipc=host` option, and it now sees the shared memory segment from the host httpd: - - ``` - $ kpod run -it --ipc=host shm ipcs -m - - ------ Shared Memory Segments -------- - key shmid owner perms bytes nattch status - 0x01128e25 0 root 600 1000 7 -``` -Testing `--ipc=container:CONTAINERID` mode: - -Start a container with a program to create a shared memory segment: -``` - $ kpod run -it shm bash - $ sudo shm/shm_server & - $ sudo ipcs -m - - ------ Shared Memory Segments -------- - key shmid owner perms bytes nattch status - 0x0000162e 0 root 666 27 1 -``` -Create a 2nd container correctly shows no shared memory segment from 1st container: -``` - $ kpod run shm ipcs -m - - ------ Shared Memory Segments -------- - key shmid owner perms bytes nattch status -``` - -Create a 3rd container using the new --ipc=container:CONTAINERID option, now it shows the shared memory segment from the first: - -``` - $ kpod run -it --ipc=container:ed735b2264ac shm ipcs -m - $ sudo ipcs -m - - ------ Shared Memory Segments -------- - key shmid owner perms bytes nattch status - 0x0000162e 0 root 666 27 1 -``` - -## Mapping Ports for External Usage - -The exposed port of an application can be mapped to a host port using the **-p** -flag. For example, an httpd port 80 can be mapped to the host port 8080 using the -following: - - # kpod run -p 8080:80 -d -i -t fedora/httpd - -## Creating and Mounting a Data Volume Container - -Many applications require the sharing of persistent data across several -containers. kpod allows you to create a Data Volume Container that other -containers can mount from. For example, create a named container that contains -directories /var/volume1 and /tmp/volume2. The image will need to contain these -directories so a couple of RUN mkdir instructions might be required for you -fedora-data image: - - # kpod run --name=data -v /var/volume1 -v /tmp/volume2 -i -t fedora-data true - # kpod run --volumes-from=data --name=fedora-container1 -i -t fedora bash - -Multiple --volumes-from parameters will bring together multiple data volumes from -multiple containers. And it's possible to mount the volumes that came from the -DATA container in yet another container via the fedora-container1 intermediary -container, allowing to abstract the actual data source from users of that data: - - # kpod run --volumes-from=fedora-container1 --name=fedora-container2 -i -t fedora bash - -## Mounting External Volumes - -To mount a host directory as a container volume, specify the absolute path to -the directory and the absolute path for the container directory separated by a -colon: - - # kpod run -v /var/db:/data1 -i -t fedora bash - -When using SELinux, be aware that the host has no knowledge of container SELinux -policy. Therefore, in the above example, if SELinux policy is enforced, the -`/var/db` directory is not writable to the container. A "Permission Denied" -message will occur and an avc: message in the host's syslog. - - -To work around this, at time of writing this man page, the following command -needs to be run in order for the proper SELinux policy type label to be attached -to the host directory: - - # chcon -Rt svirt_sandbox_file_t /var/db - - -Now, writing to the /data1 volume in the container will be allowed and the -changes will also be reflected on the host in /var/db. - -## Using alternative security labeling - -You can override the default labeling scheme for each container by specifying -the `--security-opt` flag. For example, you can specify the MCS/MLS level, a -requirement for MLS systems. Specifying the level in the following command -allows you to share the same content between containers. - - # kpod run --security-opt label=level:s0:c100,c200 -i -t fedora bash - -An MLS example might be: - - # kpod run --security-opt label=level:TopSecret -i -t rhel7 bash - -To disable the security labeling for this container versus running with the -`--permissive` flag, use the following command: - - # kpod run --security-opt label=disable -i -t fedora bash - -If you want a tighter security policy on the processes within a container, -you can specify an alternate type for the container. You could run a container -that is only allowed to listen on Apache ports by executing the following -command: - - # kpod run --security-opt label=type:svirt_apache_t -i -t centos bash - -Note: - -You would have to write policy defining a `svirt_apache_t` type. - -## Setting device weight - -If you want to set `/dev/sda` device weight to `200`, you can specify the device -weight by `--blkio-weight-device` flag. Use the following command: - - # kpod run -it --blkio-weight-device "/dev/sda:200" ubuntu - -``` -$ kpod run -d busybox top -``` - -## Setting Namespaced Kernel Parameters (Sysctls) - -The `--sysctl` sets namespaced kernel parameters (sysctls) in the -container. For example, to turn on IP forwarding in the containers -network namespace, run this command: - - $ kpod run --sysctl net.ipv4.ip_forward=1 someimage - -Note: - -Not all sysctls are namespaced. kpod does not support changing sysctls -inside of a container that also modify the host system. As the kernel -evolves we expect to see more sysctls become namespaced. - -See the definition of the `--sysctl` option above for the current list of -supported sysctls. - -# HISTORY -April 2014, Originally compiled by William Henry (whenry at redhat dot com) -based on docker.com source material and internal work. -June 2014, updated by Sven Dowideit -July 2014, updated by Sven Dowideit -November 2015, updated by Sally O'Malley -October 2017, converted from Docker documentation to kpod by Dan Walsh for kpod diff --git a/docs/kpod-save.1.md b/docs/kpod-save.1.md deleted file mode 100644 index dbcf96d0..00000000 --- a/docs/kpod-save.1.md +++ /dev/null @@ -1,60 +0,0 @@ -% kpod(1) kpod-save - Simple tool to save an image to an archive -% Urvashi Mohnani -# kpod-save "1" "July 2017" "kpod" - -## NAME -kpod-save - Save an image to docker-archive or oci-archive - -## SYNOPSIS -**kpod save** -**NAME[:TAG]** -[**--quiet**|**-q**] -[**--format**] -[**--output**|**-o**] -[**--help**|**-h**] - -## DESCRIPTION -**kpod save** saves an image to either **docker-archive** or **oci-archive** -on the local machine, default is **docker-archive**. -**kpod save** writes to STDOUT by default and can be redirected to a file using the **output** flag. -The **quiet** flag suppresses the output when set. - -**kpod [GLOBAL OPTIONS]** - -**kpod save [GLOBAL OPTIONS]** - -**kpod save [OPTIONS] NAME[:TAG]** - -## OPTIONS - -**--output, -o** -Write to a file, default is STDOUT - -**--format** -Save image to **oci-archive** -``` ---format oci-archive -``` - -**--quiet, -q** -Suppress the output - -## EXAMPLES - -``` -# kpod save --quiet -o alpine.tar alpine:2.6 -``` - -``` -# kpod save > alpine-all.tar alpine -``` - -``` -# kpod save -o oci-alpine.tar --format oci-archive alpine -``` - -## SEE ALSO -kpod(1), kpod-load(1), crio(8), crio.conf(5) - -## HISTORY -July 2017, Originally compiled by Urvashi Mohnani diff --git a/docs/kpod-stats.1.md b/docs/kpod-stats.1.md deleted file mode 100644 index 1c1c0b35..00000000 --- a/docs/kpod-stats.1.md +++ /dev/null @@ -1,37 +0,0 @@ -% kpod(1) kpod-stats - Display a live stream of 1 or more containers' resource usage statistics -% Ryan Cole -# kpod-stats "1" "July 2017" "kpod" - -## NAME -kpod-stats - Display a live stream of 1 or more containers' resource usage statistics - -## SYNOPSIS -**kpod** **stats** [*options* [...]] [container] - -## DESCRIPTION -Display a live stream of one or more containers' resource usage statistics - -## OPTIONS - -**--all, -a** - -Show all containers. Only running containers are shown by default - -**--no-stream** - -Disable streaming stats and only pull the first result, default setting is false - -**--format="TEMPLATE"** - -Pretty-print images using a Go template - - -## EXAMPLE - -TODO - -## SEE ALSO -kpod(1) - -## HISTORY -July 2017, Originally compiled by Ryan Cole diff --git a/docs/kpod-stop.1.md b/docs/kpod-stop.1.md deleted file mode 100644 index 52a35815..00000000 --- a/docs/kpod-stop.1.md +++ /dev/null @@ -1,35 +0,0 @@ -% kpod(1) kpod-stop - Stop one or more containers -% Brent Baude -# kpod-stop "1" "September 2017" "kpod" - -## NAME -kpod stop - Stop one or more containers - -## SYNOPSIS -**kpod stop [OPTIONS] CONTAINER [...]** - -## DESCRIPTION -Stops one or more containers. You may use container IDs or names as input. The **--timeout** switch -allows you to specify the number of seconds to wait before forcibly stopping the container after the stop command -is issued to the container. The default is 10 seconds. - -## OPTIONS - -**--timeout, t** - -Timeout to wait before forcibly stopping the container - - -## EXAMPLE - -kpod stop mywebserver - -kpod stop 860a4b23 - -kpod stop --timeout 2 860a4b23 - -## SEE ALSO -kpod(1), kpod-rm(1) - -## HISTORY -September 2018, Originally compiled by Brent Baude diff --git a/docs/kpod-tag.1.md b/docs/kpod-tag.1.md deleted file mode 100644 index b92b2eb1..00000000 --- a/docs/kpod-tag.1.md +++ /dev/null @@ -1,34 +0,0 @@ -% kpod(1) kpod-tag - Add tags to an image -% Ryan Cole -# kpod-tag "1" "July 2017" "kpod" - -## NAME -kpod tag - Add an additional name to a local image - -## SYNOPSIS -**kpod tag** -[**--help**|**-h**] - -## DESCRIPTION -Assigns a new alias to an image in a registry. An alias refers to the entire image name, including the optional **TAG** after the ':' - -**kpod [GLOBAL OPTIONS]** - -**kpod [GLOBAL OPTIONS] tag [OPTIONS]** - -## GLOBAL OPTIONS - -**--help, -h** - Print usage statement - -## EXAMPLES - - kpod tag 0e3bbc2 fedora:latest - - kpod tag httpd myregistryhost:5000/fedora/httpd:v2 - -## SEE ALSO -kpod(1), crio(8), crio.conf(5) - -## HISTORY -July 2017, Originally compiled by Ryan Cole diff --git a/docs/kpod-umount.1.md b/docs/kpod-umount.1.md deleted file mode 100644 index 2ee03356..00000000 --- a/docs/kpod-umount.1.md +++ /dev/null @@ -1,19 +0,0 @@ -% kpod(1) kpod-umount - Unmount a working container's root filesystem. -% Dan Walsh -# kpod-umount "1" "July 2017" "kpod" - -## NAME -kpod umount - Unmount a working container's root file system - -## SYNOPSIS -**kpod** **umount** **containerID** - -## DESCRIPTION -Unmounts the specified container's root file system. - -## EXAMPLE - -kpod umount containerID - -## SEE ALSO -kpod(1), kpod-mount(1) diff --git a/docs/kpod-unpause.1.md b/docs/kpod-unpause.1.md deleted file mode 100644 index 52a81002..00000000 --- a/docs/kpod-unpause.1.md +++ /dev/null @@ -1,24 +0,0 @@ -% kpod(1) kpod-unpause - Unpause one or more containers -% Dan Walsh -# kpod-unpause "1" "September 2017" "kpod" - -## NAME -kpod unpause - Unpause one or more containers - -## SYNOPSIS -**kpod unpause [OPTIONS] CONTAINER [...]** - -## DESCRIPTION -Unpauses the processes in one or more containers. You may use container IDs or names as input. - -## EXAMPLE - -kpod unpause mywebserver - -kpod unpause 860a4b23 - -## SEE ALSO -kpod(1), kpod-pause(1) - -## HISTORY -September 2017, Originally compiled by Dan Walsh diff --git a/docs/kpod-version.1.md b/docs/kpod-version.1.md deleted file mode 100644 index cdc2c925..00000000 --- a/docs/kpod-version.1.md +++ /dev/null @@ -1,24 +0,0 @@ -% kpod(1) kpod-version - Simple tool to view version information -% Urvashi Mohnani -# kpod-version "1" "July 2017" "kpod" - -## NAME -kpod-version - Display the KPOD Version Information - -## SYNOPSIS -**kpod version** -[**--help**|**-h**] - -## DESCRIPTION -Shows the the following information: Version, Go Version, Git Commit, Build Time, -OS, and Architecture. - -**kpod [GLOBAL OPTIONS]** - -**kpod version** - -## SEE ALSO -kpod(1), crio(8), crio.conf(5) - -## HISTORY -July 2017, Originally compiled by Urvashi Mohnani diff --git a/docs/kpod-wait.1.md b/docs/kpod-wait.1.md deleted file mode 100644 index 290cdedf..00000000 --- a/docs/kpod-wait.1.md +++ /dev/null @@ -1,36 +0,0 @@ -% kpod(1) kpod-wait - Waits on a container -% Brent Baude -# kpod-wait "1" "September 2017" "kpod" - -## NAME -kpod wait - Waits on one or more containers to stop and prints exit code - -## SYNOPSIS -**kpod wait** -[**--help**|**-h**] - -## DESCRIPTION -Waits on one or more containers to stop. The container can be referred to by its -name or ID. In the case of multiple containers, kpod will wait on each consecutively. -After the container stops, the container's return code is printed. - -**kpod [GLOBAL OPTIONS] wait ** - -## GLOBAL OPTIONS - -**--help, -h** - Print usage statement - -## EXAMPLES - - kpod wait mywebserver - - kpod wait 860a4b23 - - kpod wait mywebserver myftpserver - -## SEE ALSO -kpod(1), crio(8), crio.conf(5) - -## HISTORY -September 2017, Originally compiled by Brent Baude diff --git a/docs/kpod.1.md b/docs/kpod.1.md deleted file mode 100644 index 408ad387..00000000 --- a/docs/kpod.1.md +++ /dev/null @@ -1,143 +0,0 @@ -% kpod(1) kpod - Simple management tool for pods and images -% Dan Walsh -# kpod "1" "September 2016" "kpod" -## NAME -kpod - Simple management tool for containers and images - -## SYNOPSIS -**kpod** [*options*] COMMAND - -# DESCRIPTION -kpod is a simple client only tool to help with debugging issues when daemons -such as CRI runtime and the kubelet are not responding or failing. A shared API -layer could be created to share code between the daemon and kpod. kpod does not -require any daemon running. kpod utilizes the same underlying components that -crio uses i.e. containers/image, container/storage, oci-runtime-tool/generate, -runc or any other OCI compatible runtime. kpod shares state with crio and so -has the capability to debug pods/images created by crio. - -**kpod [GLOBAL OPTIONS]** - -## GLOBAL OPTIONS - -**--help, -h** - Print usage statement - -**--config value, -c**=**"config.file"** - Path of a config file detailing container server configuration options - -**--log-level** - log messages above specified level: debug, info, warn, error (default), fatal or panic - -**--root**=**value** - Path to the root directory in which data, including images, is stored - -**--runroot**=**value** - Path to the 'run directory' where all state information is stored - -**--runtime**=**value** - Path to the OCI compatible binary used to run containers - -**--storage-driver, -s**=**value** - Select which storage driver is used to manage storage of images and containers (default is overlay) - -**--storage-opt**=**value** - Used to pass an option to the storage driver - -**--version, -v** - Print the version - -## COMMANDS - -### create -create a new container - -### diff -Inspect changes on a container or image's filesystem - -### export -Export container's filesystem contents as a tar archive - -### history -Shows the history of an image - -### images -List images in local storage - -### info -Displays system information - -### inspect -Display a container or image's configuration - -### kill -Kill the main process in one or more containers - -### load -Load an image from docker archive - -### login -Login to a container registry - -### logout -Logout of a container registry - -### logs -Display the logs of a container - -### mount -Mount a working container's root filesystem - -### pause -Pause one or more containers - -### ps -Prints out information about containers - -### pull -Pull an image from a registry - -### push -Push an image from local storage to elsewhere - -### rename -Rename a container - -### rm -Remove one or more containers - -### rmi -Removes one or more locally stored images - -### run -Run a command in a new container - -### save -Save an image to docker-archive or oci - -### stats -Display a live stream of one or more containers' resource usage statistics - -### stop -Stops one or more running containers. - -### tag -Add an additional name to a local image - -### umount -Unmount a working container's root file system - -### unpause -Unpause one or more containers - -### version -Display the version information - -### wait -Wait on one or more containers to stop and print their exit codes - -## SEE ALSO -crio(8), crio.conf(5) - -## HISTORY -Dec 2016, Originally compiled by Dan Walsh diff --git a/kpod-images.json b/kpod-images.json deleted file mode 100644 index a87f1d5b..00000000 --- a/kpod-images.json +++ /dev/null @@ -1,18446 +0,0 @@ -{ - "version": 1, - "width": 211, - "height": 52, - "duration": 66890.973605, - "command": null, - "title": null, - "env": { - "TERM": "xterm-256color", - "SHELL": "/usr/bin/zsh" - }, - "stdout": [ - [ - 0.127359, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.026267, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001269, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 8.9e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.3e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000195, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m " - ], - [ - 2.3e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 3.5e-05, - "\u001b[?1h\u001b=" - ], - [ - 3.6e-05, - "\u001b[?2004h" - ], - [ - 0.431984, - "s" - ], - [ - 0.085317, - "\bsu" - ], - [ - 0.129126, - "d" - ], - [ - 0.088005, - "o" - ], - [ - 0.135671, - " " - ], - [ - 0.08011, - "k" - ], - [ - 0.080023, - "p" - ], - [ - 0.120208, - "o" - ], - [ - 0.063327, - "d" - ], - [ - 0.136258, - " " - ], - [ - 0.120298, - "i" - ], - [ - 0.07945, - "m" - ], - [ - 0.048586, - "a" - ], - [ - 0.111702, - "g" - ], - [ - 0.120452, - "e" - ], - [ - 0.055606, - "s" - ], - [ - 0.55923, - " " - ], - [ - 0.144712, - "-" - ], - [ - 0.152054, - "-" - ], - [ - 0.176129, - "n" - ], - [ - 0.100308, - "o" - ], - [ - 0.207951, - "-" - ], - [ - 0.140053, - "t" - ], - [ - 0.143338, - "r" - ], - [ - 0.076824, - "u" - ], - [ - 0.187154, - "n" - ], - [ - 0.107836, - "c" - ], - [ - 0.11269, - "\u001b[?1l\u001b>" - ], - [ - 0.000169, - "\u001b[?2004l\r\r\n" - ], - [ - 0.0058, - "\u001b]2;sudo kpod images --no-trunc\u0007\u001b]1;kpod\u0007" - ], - [ - 0.930864, - "[sudo] password for ryan: " - ], - [ - 2.238114, - "\r\n" - ], - [ - 1.996034, - "Sorry, try again.\r\n" - ], - [ - 0.916497, - "[sudo] password for ryan: " - ], - [ - 2.392113, - "\r\n" - ], - [ - 0.093899, - "\u001b[34mINFO\u001b[0m[0000] [graphdriver] using prior storage driver \"overlay\" \r\n" - ], - [ - 0.00085, - "IMAGE ID IMAGE NAME CREATED AT SIZE\r\n" - ], - [ - 0.000894, - "3edb693215a22336c352ba66d101fafda7e2ecbad1ecf2137e1c495e461d8f23 docker.io/kubernetes/pause:latest Jul 19, 2014 07:02 241 KB\r\n" - ], - [ - 0.000324, - "1adfcf922a991e2d59a98dd2b5adc813b590261737d77c3ec7ae23e4f927d6bb docker.io/library/fedora:latest Jul 20, 2017 17:07 219.9 MB\r\n" - ], - [ - 0.000358, - "524b9482e987a953b81321580372c07c3c765ce7c336445797428658384c6812 docker.io/library/redis:latest Jul 24, 2017 18:37 101 MB\r\n" - ], - [ - 0.000352, - "9518288ded9bd43a055a4022d84c440b3ac16981f943bb099b60e0984e9e23d2 docker.io/library/redis:alpine Jul 24, 2017 18:39 26.22 MB\r\n" - ], - [ - 0.003194, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.024028, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m9s\u001b[39m\r\n" - ], - [ - 0.001135, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000102, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 1.8e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000176, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m " - ], - [ - 4.3e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D\u001b[?1h\u001b=" - ], - [ - 4.8e-05, - "\u001b[?2004h" - ], - [ - 1.658662, - "s" - ], - [ - 0.071652, - "\bsu" - ], - [ - 0.15257, - "d" - ], - [ - 0.143602, - "o" - ], - [ - 0.160358, - " " - ], - [ - 0.119704, - "k" - ], - [ - 0.104527, - "p" - ], - [ - 0.087276, - "o" - ], - [ - 0.096382, - "d" - ], - [ - 0.088303, - " " - ], - [ - 0.08811, - "i" - ], - [ - 0.0717, - "m" - ], - [ - 0.079483, - "a" - ], - [ - 0.103857, - "g" - ], - [ - 0.080719, - "e" - ], - [ - 0.056202, - "s" - ], - [ - 0.111434, - " " - ], - [ - 0.152746, - "-" - ], - [ - 0.111237, - "q" - ], - [ - 0.144032, - "\u001b[?1l\u001b>" - ], - [ - 0.000167, - "\u001b[?2004l\r\r\n" - ], - [ - 0.004109, - "\u001b]2;sudo kpod images -q\u0007\u001b]1;kpod\u0007" - ], - [ - 0.094407, - "\u001b[34mINFO\u001b[0m[0000] [graphdriver] using prior storage driver \"overlay\" \r\n" - ], - [ - 0.001695, - "3edb693215a22336c352ba66d101fafda7e2ecbad1ecf2137e1c495e461d8f23\r\n" - ], - [ - 0.000296, - "1adfcf922a991e2d59a98dd2b5adc813b590261737d77c3ec7ae23e4f927d6bb\r\n" - ], - [ - 0.000377, - "524b9482e987a953b81321580372c07c3c765ce7c336445797428658384c6812\r\n" - ], - [ - 0.000392, - "9518288ded9bd43a055a4022d84c440b3ac16981f943bb099b60e0984e9e23d2\r\n" - ], - [ - 0.002686, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.024178, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001405, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000211, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 5.2e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000251, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 4.9e-05, - "\u001b[?1h\u001b=" - ], - [ - 7.2e-05, - "\u001b[?2004h" - ], - [ - 0.566345, - "s" - ], - [ - 0.119935, - "\bsu" - ], - [ - 0.142907, - "d" - ], - [ - 0.104809, - "o" - ], - [ - 0.223809, - " " - ], - [ - 0.144031, - "k" - ], - [ - 0.127885, - "p" - ], - [ - 0.104093, - "o" - ], - [ - 0.136222, - "d" - ], - [ - 0.111758, - " " - ], - [ - 0.088148, - "i" - ], - [ - 0.079691, - "m" - ], - [ - 0.09608, - "a" - ], - [ - 0.111767, - "g" - ], - [ - 0.096631, - "e" - ], - [ - 0.063607, - "s" - ], - [ - 0.120256, - " " - ], - [ - 0.223186, - "-" - ], - [ - 0.16889, - "-" - ], - [ - 0.151472, - "d" - ], - [ - 0.120605, - "i" - ], - [ - 0.11131, - "g" - ], - [ - 0.096141, - "e" - ], - [ - 0.120451, - "s" - ], - [ - 0.095792, - "t" - ], - [ - 0.120047, - "s" - ], - [ - 0.272206, - " " - ], - [ - 0.1516, - "r" - ], - [ - 0.056258, - "e" - ], - [ - 0.175241, - "d" - ], - [ - 0.144489, - "i" - ], - [ - 0.136449, - "s" - ], - [ - 0.159879, - "\u001b[?1l\u001b>" - ], - [ - 0.000108, - "\u001b[?2004l\r\r\n" - ], - [ - 0.004344, - "\u001b]2;sudo kpod images --digests redis\u0007\u001b]1;kpod\u0007" - ], - [ - 0.090151, - "\u001b[34mINFO\u001b[0m[0000] [graphdriver] using prior storage driver \"overlay\" \r\n" - ], - [ - 0.000807, - "IMAGE ID IMAGE NAME DIGEST CREATED AT SIZE\r\n" - ], - [ - 0.000758, - "524b9482e987 docker.io/library/redis:latest sha256:b839545984cee95685e514aeb441a8b0624818559d89910aa31ad645c904210f Jul 24, 2017 18:37 101 MB\r\n" - ], - [ - 0.000371, - "9518288ded9b docker.io/library/redis:alpine sha256:e633cded055a94202e4ccccb8125b7f383cd6ee56527ab890db643383a2647dd Jul 24, 2017 18:39 26.22 MB\r\n" - ], - [ - 0.00292, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.023228, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001399, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000108, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 5.3e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000122, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 2.7e-05, - "\u001b[?1h\u001b=" - ], - [ - 4.6e-05, - "\u001b[?2004h" - ], - [ - 0.987423, - "s" - ], - [ - 0.11214, - "\bsu" - ], - [ - 0.12844, - "d" - ], - [ - 0.079782, - "o" - ], - [ - 0.183347, - " " - ], - [ - 0.096053, - "k" - ], - [ - 0.103724, - "p" - ], - [ - 0.095897, - "o" - ], - [ - 0.128513, - "d" - ], - [ - 0.119949, - " " - ], - [ - 0.096107, - "i" - ], - [ - 0.087565, - "m" - ], - [ - 0.080849, - "a" - ], - [ - 0.095739, - "g" - ], - [ - 0.096047, - "e" - ], - [ - 0.055373, - "s" - ], - [ - 0.160498, - " " - ], - [ - 0.168065, - "-" - ], - [ - 0.135891, - "-" - ], - [ - 0.160099, - "f" - ], - [ - 0.144124, - "i" - ], - [ - 0.312147, - "l" - ], - [ - 0.183726, - "t" - ], - [ - 0.183798, - "e" - ], - [ - 0.104556, - "r" - ], - [ - 1.071509, - " " - ], - [ - 0.208609, - "\"" - ], - [ - 0.25584, - "s" - ], - [ - 0.191556, - "i" - ], - [ - 0.119659, - "n" - ], - [ - 0.536775, - "c" - ], - [ - 0.09534, - "e" - ], - [ - 0.54414, - "=" - ], - [ - 0.144045, - "f" - ], - [ - 0.06374, - "e" - ], - [ - 0.184989, - "d" - ], - [ - 0.135526, - "o" - ], - [ - 0.136149, - "r" - ], - [ - 0.080286, - "a" - ], - [ - 0.454973, - ":" - ], - [ - 0.624879, - "l" - ], - [ - 0.096184, - "a" - ], - [ - 0.111656, - "t" - ], - [ - 0.120147, - "e" - ], - [ - 0.08794, - "s" - ], - [ - 0.06356, - "t" - ], - [ - 0.288506, - "\"" - ], - [ - 0.543802, - " " - ], - [ - 0.200564, - "-" - ], - [ - 0.142861, - "-" - ], - [ - 0.128436, - "f" - ], - [ - 0.112036, - "o" - ], - [ - 0.151167, - "r" - ], - [ - 0.128503, - "m" - ], - [ - 0.120291, - "a" - ], - [ - 0.088635, - "t" - ], - [ - 0.143602, - " " - ], - [ - 0.256717, - "\"" - ], - [ - 1.46299, - "t" - ], - [ - 0.107784, - "a" - ], - [ - 0.156707, - "b" - ], - [ - 0.123646, - "l" - ], - [ - 0.223815, - "e" - ], - [ - 0.22418, - " " - ], - [ - 0.304259, - "{" - ], - [ - 0.20813, - "{" - ], - [ - 0.599583, - "." - ], - [ - 0.335909, - "I" - ], - [ - 0.268363, - "D" - ], - [ - 0.591353, - "\b \b" - ], - [ - 0.119781, - "\b \b" - ], - [ - 0.156399, - "\b \b" - ], - [ - 0.376287, - " " - ], - [ - 0.095973, - "t" - ], - [ - 0.151826, - "r" - ], - [ - 0.039602, - "u" - ], - [ - 0.192491, - "n" - ], - [ - 0.088154, - "c" - ], - [ - 0.147825, - "a" - ], - [ - 0.123835, - "t" - ], - [ - 0.104099, - "e" - ], - [ - 0.135647, - " " - ], - [ - 0.216888, - "." - ], - [ - 0.303994, - "I" - ], - [ - 0.191778, - "D" - ], - [ - 0.574958, - " " - ], - [ - 0.19329, - "8" - ], - [ - 0.439791, - "}" - ], - [ - 0.143884, - "}" - ], - [ - 0.143784, - " " - ], - [ - 0.256871, - "{" - ], - [ - 0.151265, - "{" - ], - [ - 0.671939, - "." - ], - [ - 0.880114, - "\b \b" - ], - [ - 0.759869, - " " - ], - [ - 0.167976, - "." - ], - [ - 0.344489, - "N" - ], - [ - 0.191508, - "a" - ], - [ - 0.095324, - "m" - ], - [ - 0.223992, - "e" - ], - [ - 0.128763, - " " - ], - [ - 0.15222, - "|" - ], - [ - 0.255382, - " " - ], - [ - 0.144061, - "p" - ], - [ - 0.128167, - "r" - ], - [ - 0.096088, - "i" - ], - [ - 0.071635, - "n" - ], - [ - 0.120055, - "t" - ], - [ - 0.264652, - "f" - ], - [ - 0.151244, - " " - ], - [ - 0.192646, - "\\" - ], - [ - 0.26379, - "\"" - ], - [ - 1.311952, - "%" - ], - [ - 4.68053, - "-" - ], - [ - 1.015928, - "t" - ], - [ - 0.551856, - "\b \b" - ], - [ - 1.032351, - "6" - ], - [ - 0.111812, - "4" - ], - [ - 0.295612, - "s" - ], - [ - 0.719816, - "\\" - ], - [ - 0.248899, - "\"" - ], - [ - 0.599051, - " " - ], - [ - 0.311681, - "}" - ], - [ - 0.137392, - "}" - ], - [ - 0.894842, - " " - ], - [ - 0.224545, - "{" - ], - [ - 0.127645, - "{" - ], - [ - 0.224058, - "." - ], - [ - 0.184217, - "C" - ], - [ - 0.248132, - "r" - ], - [ - 0.079278, - "e" - ], - [ - 0.104455, - "a" - ], - [ - 0.087831, - "t" - ], - [ - 0.064342, - "e" - ], - [ - 0.19221, - "d" - ], - [ - 0.199615, - "A" - ], - [ - 0.464438, - "t" - ], - [ - 0.367064, - "}" - ], - [ - 0.15281, - "}" - ], - [ - 0.559881, - "\"" - ], - [ - 0.448076, - "\u001b[?1l\u001b>" - ], - [ - 0.000334, - "\u001b[?2004l\r\r\n" - ], - [ - 0.005051, - "\u001b]2;sudo kpod images --filter \"since=fedora:latest\" --format \u0007" - ], - [ - 9.2e-05, - "\u001b]1;kpod\u0007" - ], - [ - 0.092964, - "\u001b[34mINFO\u001b[0m[0000] [graphdriver] using prior storage driver \"overlay\" \r\n" - ], - [ - 0.003089, - "template: image:1: function \"truncate\" not defined\r\nTemplate parsing error\r\nmain.outputUsingTemplate\r\n\t/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/cmd/kpod/images.go:178\r\nmain.outputImages\r\n\t/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/cmd/kpod/images.go:165\r\nmain.imagesCmd\r\n\t/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/cmd/kpod/images.go:120\r\ngithub.com/kubernetes-incubator/cri-o/vendor/github.com/urfave/cli.HandleAction\r\n\t/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/vendor/github.com/urfave/cli/app.go:485\r\ngithub.com/kubernetes-incubator/cri-o/vendor/github.com/urfave/cli.Command.Run\r\n\t/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/vendor/github.com/urfave/cli/command.go:193\r\ngithub.com/kubernetes-incubator/cri-o/vendor/github.com/urfave/cli.(*App).Run\r\n\t/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/vendor/github.com/urfave/cli/app.go:250\r\nmain.main\r\n\t" - ], - [ - 2.8e-05, - "/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/cmd/kpod/main.go:61\r\nruntime.main\r\n\t/usr/lib/golang/src/runtime/proc.go:185\r\nruntime.goexit\r\n\t/usr/lib/golang/src/runtime/asm_amd64.s:2197\r\n" - ], - [ - 0.002932, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.026506, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.000971, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000117, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.00031, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[31m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 4.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.9e-05, - "\u001b[?2004h" - ], - [ - 5.719975, - "sudo kpod images --filter \"since=fedora:latest\" --format \"table {{ truncate .ID 8}} {{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\"" - ], - [ - 0.111141, - "\b" - ], - [ - 0.500452, - "\b" - ], - [ - 0.030822, - "\b" - ], - [ - 0.031199, - "\b" - ], - [ - 0.030859, - "\b" - ], - [ - 0.030714, - "\b" - ], - [ - 0.029362, - "\b" - ], - [ - 0.031473, - "\b" - ], - [ - 0.030015, - "\b" - ], - [ - 0.030409, - "\b" - ], - [ - 0.030238, - "\b" - ], - [ - 0.031711, - "\b" - ], - [ - 0.029911, - "\b" - ], - [ - 0.031066, - "\b" - ], - [ - 0.029076, - "\b" - ], - [ - 0.03054, - "\b" - ], - [ - 0.031011, - "\b" - ], - [ - 0.031156, - "\b" - ], - [ - 0.030493, - "\b" - ], - [ - 0.029937, - "\b" - ], - [ - 0.030608, - "\b" - ], - [ - 0.030465, - "\b" - ], - [ - 0.030741, - "\b" - ], - [ - 0.030923, - "\b" - ], - [ - 0.029979, - "\b" - ], - [ - 0.0302, - "\b" - ], - [ - 0.031404, - "\b" - ], - [ - 0.030985, - "\b" - ], - [ - 0.030991, - "\b" - ], - [ - 0.030493, - "\b" - ], - [ - 0.031775, - "\b" - ], - [ - 0.030463, - "\b" - ], - [ - 0.03012, - "\b" - ], - [ - 0.030377, - "\b" - ], - [ - 0.030266, - "\b" - ], - [ - 0.031003, - "\b" - ], - [ - 0.029286, - "\b" - ], - [ - 0.031623, - "\b" - ], - [ - 0.029799, - "\b" - ], - [ - 0.029213, - "\b" - ], - [ - 0.03082, - "\b" - ], - [ - 0.030044, - "\b" - ], - [ - 0.030151, - "\b" - ], - [ - 0.030665, - "\b" - ], - [ - 0.030377, - "\b" - ], - [ - 0.030146, - "\b" - ], - [ - 0.093081, - "\b" - ], - [ - 0.191739, - "\b" - ], - [ - 0.144119, - "\b" - ], - [ - 0.327779, - "\b}} {{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[50D" - ], - [ - 0.176138, - "\b}} {{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[50D" - ], - [ - 0.39199, - "\b" - ], - [ - 0.223786, - "\b" - ], - [ - 0.144097, - "\b" - ], - [ - 0.279236, - "\u001b[1C" - ], - [ - 0.501129, - "\u001b[1C" - ], - [ - 0.029576, - "\u001b[1C" - ], - [ - 0.029751, - "\u001b[1C" - ], - [ - 0.032205, - "\u001b[1C" - ], - [ - 0.02899, - "\u001b[1C" - ], - [ - 0.515239, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.499546, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.030618, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.031062, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.030453, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.03064, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.029812, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.030975, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.030209, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.03139, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.030639, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.031502, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.030081, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.029882, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.030344, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.031029, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.030391, - "\u001b[1C .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.121577, - "\u001b[1C .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.167127, - "\b{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\" \u001b[47D" - ], - [ - 0.248096, - "\u001b[?1l\u001b>" - ], - [ - 0.000222, - "\u001b[?2004l\r\r\n" - ], - [ - 0.003167, - "\u001b]2;sudo kpod images --filter \"since=fedora:latest\" --format \u0007\u001b]1;kpod\u0007" - ], - [ - 0.095477, - "\u001b[34mINFO\u001b[0m[0000] [graphdriver] using prior storage driver \"overlay\" \r\n" - ], - [ - 0.003009, - "tabledocker.io/library/redis:latest Jul 24, 2017 18:37\r\n" - ], - [ - 0.000421, - "tabledocker.io/library/redis:alpine Jul 24, 2017 18:39\r\n" - ], - [ - 0.003381, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.023509, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001093, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 5.4e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.3e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000102, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 5.2e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.1e-05, - "\u001b[?2004h" - ], - [ - 0.493915, - "sudo kpod images --filter \"since=fedora:latest\" --format \"table{{ .Name | printf \\\"%-64s\\\" }} {{.CreatedAt}}\"" - ], - [ - 4.023647, - "\u001b[?2004l\r\r\n" - ], - [ - 0.000724, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.033033, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001493, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.00011, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 5.3e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 7.4e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[31m❯\u001b[39m " - ], - [ - 6.4e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D\u001b[?1h\u001b=" - ], - [ - 4.6e-05, - "\u001b[?2004h" - ], - [ - 2.477293, - "r" - ], - [ - 0.095704, - "\brm" - ], - [ - 0.159753, - " " - ], - [ - 0.216552, - "k" - ], - [ - 0.168314, - "\u0007" - ], - [ - 0.000157, - "\r\r\n" - ], - [ - 7.6e-05, - "\u001b[J\u001b[38;5;40mkpod\u001b[0m* \u001b[Jkpod-images.json \u001b[Jkubernetes.md \u001b[J\u001b[A\u001b[0m\u001b[27m\u001b[24m\u001b[39m\r\u001b[2Crm k\u001b[K\u001b[204C\u001b[90m\u001b[39m\u001b[39m\u001b[204D" - ], - [ - 0.679935, - "p" - ], - [ - 0.233955, - "\r\r\n\u001b[J\u001b[A\u001b[7Cod" - ], - [ - 0.493364, - "i" - ], - [ - 0.2874, - "\b \b" - ], - [ - 0.208224, - "-" - ], - [ - 0.208753, - "i" - ], - [ - 0.079436, - "m" - ], - [ - 0.137168, - "ages.json\u001b[1m \u001b[0m" - ], - [ - 0.598602, - "\b\u001b[0m \b" - ], - [ - 0.000266, - "\u001b[?1l\u001b>\u001b[?2004l\r\r\n\u001b[J" - ], - [ - 0.004718, - "\u001b]2;rm kpod-images.json\u0007\u001b]1;rm\u0007" - ], - [ - 0.002042, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.028039, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.000994, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000103, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 1.4e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 6.4e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 5.8e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.6e-05, - "\u001b[?2004h" - ], - [ - 0.779169, - "g" - ], - [ - 0.136128, - "\bgi" - ], - [ - 0.048534, - "t" - ], - [ - 0.104105, - " " - ], - [ - 0.079724, - "s" - ], - [ - 0.104241, - "t" - ], - [ - 0.079697, - "a" - ], - [ - 0.11214, - "t" - ], - [ - 0.119676, - "u" - ], - [ - 0.208639, - "s" - ], - [ - 0.191009, - "\u001b[?1l\u001b>" - ], - [ - 3.6e-05, - "\u001b[?2004l" - ], - [ - 2.7e-05, - "\r\r\n" - ], - [ - 0.00253, - "\u001b]2;git status\u0007\u001b]1;git\u0007" - ], - [ - 0.017282, - "On branch kpod-format-table\r\nnothing to commit, working tree clean\r\n" - ], - [ - 0.000574, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.036636, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001716, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 9.3e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 3.6e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 8.1e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m " - ], - [ - 4.9e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 4.6e-05, - "\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.75012, - "s" - ], - [ - 0.599165, - "\b \b" - ], - [ - 0.19198, - "m" - ], - [ - 0.064457, - "\bma" - ], - [ - 0.127947, - "k" - ], - [ - 0.136116, - "e" - ], - [ - 0.07172, - " " - ], - [ - 0.096215, - "k" - ], - [ - 0.071462, - "p" - ], - [ - 0.080589, - "o" - ], - [ - 0.10344, - "d" - ], - [ - 0.152208, - "\u001b[?1l\u001b>" - ], - [ - 5.1e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.003042, - "\u001b]2;make kpod\u0007\u001b]1;make\u0007" - ], - [ - 6.729784, - "make: 'kpod' is up to date.\r\n" - ], - [ - 0.000291, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.026264, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m7s\u001b[39m\r\n" - ], - [ - 0.001087, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 7.6e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 1.9e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 7.5e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 0.000122, - "\u001b[?1h\u001b=" - ], - [ - 2.8e-05, - "\u001b[?2004h" - ], - [ - 13.163278, - "s" - ], - [ - 0.168391, - "\bsu" - ], - [ - 0.127831, - "d" - ], - [ - 0.10395, - "o" - ], - [ - 0.223816, - " " - ], - [ - 0.12801, - "k" - ], - [ - 0.615488, - "\b \b" - ], - [ - 0.176737, - "m" - ], - [ - 0.040224, - "a" - ], - [ - 0.216001, - "k" - ], - [ - 0.120125, - "e" - ], - [ - 0.095559, - " " - ], - [ - 0.176055, - "i" - ], - [ - 0.087364, - "n" - ], - [ - 0.064466, - "s" - ], - [ - 0.096026, - "t" - ], - [ - 0.128305, - "a" - ], - [ - 0.159057, - "l" - ], - [ - 0.152629, - "l" - ], - [ - 1.088301, - "\u001b[?1l\u001b>" - ], - [ - 0.000115, - "\u001b[?2004l\r\r\n" - ], - [ - 0.008092, - "\u001b]2;sudo make install\u0007\u001b]1;make\u0007" - ], - [ - 0.035813, - "mkdir -p \"/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/_output/src/github.com/kubernetes-incubator\"\r\n" - ], - [ - 0.003636, - "ln -s \"/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\" \"/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/_output/src/github.com/kubernetes-incubator\"\r\n" - ], - [ - 0.001734, - "touch \"/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/_output/.gopathok\"\r\n" - ], - [ - 0.001583, - "install -D -m 755 crio /usr/local/bin/crio\r\n" - ], - [ - 0.053752, - "install -D -m 755 crioctl /usr/local/bin/crioctl\r\n" - ], - [ - 0.032266, - "install -D -m 755 kpod /usr/local/bin/kpod\r\n" - ], - [ - 0.046161, - "install -D -m 755 conmon/conmon /usr/local/libexec/crio/conmon\r\n" - ], - [ - 0.003465, - "install -D -m 755 pause/pause /usr/local/libexec/crio/pause\r\n" - ], - [ - 0.004506, - "install -d -m 755 /usr/local/share/man/man1\r\n" - ], - [ - 0.000924, - "install -d -m 755 /usr/local/share/man/man5\r\n" - ], - [ - 0.000709, - "install -d -m 755 /usr/local/share/man/man8\r\n" - ], - [ - 0.000731, - "install -m 644 docs/kpod-diff.1 docs/kpod-push.1 docs/kpod-cp.1 docs/kpod.1 docs/kpod-export.1 docs/kpod-load.1 docs/kpod-logs.1 docs/kpod-images.1 docs/kpod-umount.1 docs/kpod-save.1 docs/kpod-mount.1 docs/kpod-info.1 docs/kpod-inspect.1 docs/kpod-history.1 docs/kpod-pull.1 docs/kpod-rmi.1 docs/kpod-version.1 docs/kpod-tag.1 -t /usr/local/share/man/man1\r\n" - ], - [ - 0.014923, - "install -m 644 docs/crio.conf.5 -t /usr/local/share/man/man5\r\n" - ], - [ - 0.006695, - "install -m 644 docs/crio.8 -t /usr/local/share/man/man8\r\n" - ], - [ - 0.005468, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.030073, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.00096, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 8.4e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.4e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 8.2e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m " - ], - [ - 2.2e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 3.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.5e-05, - "\u001b[?2004h" - ], - [ - 1.588728, - "s" - ], - [ - 0.158798, - "\bsu" - ], - [ - 0.12764, - "d" - ], - [ - 0.088209, - "o" - ], - [ - 0.160458, - " " - ], - [ - 0.152138, - "." - ], - [ - 0.200633, - "/" - ], - [ - 0.343621, - "\b \b" - ], - [ - 0.142987, - "\b \b" - ], - [ - 0.336517, - "k" - ], - [ - 0.192818, - "p" - ], - [ - 0.079464, - "o" - ], - [ - 0.167625, - "d" - ], - [ - 0.160306, - " " - ], - [ - 0.49613, - "i" - ], - [ - 0.120488, - "m" - ], - [ - 0.247645, - "a" - ], - [ - 0.160515, - "g" - ], - [ - 0.087028, - "e" - ], - [ - 0.072479, - "s" - ], - [ - 0.08742, - " " - ], - [ - 0.120873, - "-" - ], - [ - 0.127862, - "-" - ], - [ - 0.119898, - "f" - ], - [ - 0.12007, - "o" - ], - [ - 0.127375, - "r" - ], - [ - 0.111896, - "m" - ], - [ - 0.088551, - "a" - ], - [ - 0.119081, - "t" - ], - [ - 0.144899, - " " - ], - [ - 0.40945, - "{" - ], - [ - 0.598946, - "\b \b" - ], - [ - 0.497455, - "\"" - ], - [ - 0.498444, - "t" - ], - [ - 0.107574, - "a" - ], - [ - 0.143907, - "b" - ], - [ - 0.136371, - "l" - ], - [ - 0.119485, - "e" - ], - [ - 0.080146, - " " - ], - [ - 0.336807, - "{" - ], - [ - 0.231791, - "{" - ], - [ - 0.271322, - "." - ], - [ - 0.319863, - "I" - ], - [ - 0.160571, - "D" - ], - [ - 0.415578, - "}" - ], - [ - 0.424342, - "}" - ], - [ - 0.264361, - "\"" - ], - [ - 0.431581, - "\u001b[?1l\u001b>" - ], - [ - 6.9e-05, - "\u001b[?2004l" - ], - [ - 5.4e-05, - "\r\r\n" - ], - [ - 0.004691, - "\u001b]2;sudo kpod images --format \"table {{.ID}}\"\u0007\u001b]1;kpod\u0007" - ], - [ - 0.096877, - "IMAGE ID \r\n3edb693215a22336c352ba66d101fafda7e2ecbad1ecf2137e1c495e461d8f23\r\n1adfcf922a991e2d59a98dd2b5adc813b590261737d77c3ec7ae23e4f927d6bb\r\n524b9482e987a953b81321580372c07c3c765ce7c336445797428658384c6812\r\n9518288ded9bd43a055a4022d84c440b3ac16981f943bb099b60e0984e9e23d2\r\n" - ], - [ - 0.003109, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.024093, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001338, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.00015, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.2e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000103, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 5.9e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.6e-05, - "\u001b[?2004h" - ], - [ - 5.653254, - "w" - ], - [ - 0.123493, - "\bwh" - ], - [ - 0.080798, - "i" - ], - [ - 0.127546, - "c" - ], - [ - 0.112514, - "h" - ], - [ - 0.079037, - " " - ], - [ - 0.129196, - "k" - ], - [ - 0.135422, - "p" - ], - [ - 0.076117, - "o" - ], - [ - 0.116658, - "d" - ], - [ - 0.144849, - "\u001b[?1l\u001b>\u001b[?2004l\r\r\n" - ], - [ - 0.002681, - "\u001b]2;( alias; declare -f; ) | /usr/bin/which --tty-only --read-alias --show-tilde\u0007\u001b]1;which\u0007" - ], - [ - 0.004242, - "/usr/local/bin/kpod\r\n" - ], - [ - 0.000126, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.026103, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.002394, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000493, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000187, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 7.9e-05, - "\u001b[?1h\u001b=" - ], - [ - 6.2e-05, - "\u001b[?2004h" - ], - [ - 86.650128, - "m" - ], - [ - 0.161011, - "\bma" - ], - [ - 0.655411, - "k" - ], - [ - 0.103692, - "e" - ], - [ - 0.063223, - " " - ], - [ - 0.09703, - "k" - ], - [ - 0.119343, - "p" - ], - [ - 0.049093, - "o" - ], - [ - 0.303802, - "d" - ], - [ - 0.144347, - "\u001b[?1l\u001b>" - ], - [ - 4.4e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.004019, - "\u001b]2;make kpod\u0007\u001b]1;make\u0007" - ], - [ - 6.725858, - "go build -ldflags '-X main.gitCommit=99495909 -X main.buildInfo=1502916060' -tags \"selinux seccomp \" -o kpod github.com/kubernetes-incubator/cri-o/cmd/kpod\r\n" - ], - [ - 4.213403, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.018496, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table* \u001b[39m \u001b[33m11s\u001b[39m\r\n" - ], - [ - 0.001197, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000111, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000112, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 5.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 8e-05, - "\u001b[?2004h" - ], - [ - 0.768399, - "s" - ], - [ - 0.111451, - "\bsu" - ], - [ - 0.096019, - "d" - ], - [ - 0.103589, - "o" - ], - [ - 0.104726, - " " - ], - [ - 0.079095, - "k" - ], - [ - 0.177292, - "p" - ], - [ - 0.358902, - "\b \b" - ], - [ - 0.12001, - "\b \b" - ], - [ - 0.167745, - "m" - ], - [ - 0.096101, - "a" - ], - [ - 0.096699, - "k" - ], - [ - 0.088325, - "e" - ], - [ - 0.087158, - " " - ], - [ - 0.064768, - "i" - ], - [ - 0.071949, - "n" - ], - [ - 0.048283, - "s" - ], - [ - 0.095575, - "t" - ], - [ - 0.080741, - "a" - ], - [ - 0.135503, - "l" - ], - [ - 0.111733, - "l" - ], - [ - 0.135263, - "\u001b[?1l\u001b>" - ], - [ - 0.000111, - "\u001b[?2004l\r\r\n" - ], - [ - 0.001633, - "\u001b]2;sudo make install\u0007\u001b]1;make\u0007" - ], - [ - 3.04395, - "install -D -m 755 crio /usr/local/bin/crio\r\n" - ], - [ - 0.05693, - "install -D -m 755 crioctl /usr/local/bin/crioctl\r\n" - ], - [ - 0.033176, - "install -D -m 755 kpod /usr/local/bin/kpod\r\n" - ], - [ - 0.04205, - "install -D -m 755 conmon/conmon /usr/local/libexec/crio/conmon\r\n" - ], - [ - 0.002903, - "install -D -m 755 pause/pause /usr/local/libexec/crio/pause\r\n" - ], - [ - 0.004348, - "install -d -m 755 /usr/local/share/man/man1\r\n" - ], - [ - 0.000355, - "install -d -m 755 /usr/local/share/man/man5\r\n" - ], - [ - 0.000615, - "install -d -m 755 /usr/local/share/man/man8\r\n" - ], - [ - 0.000636, - "install -m 644 docs/kpod-diff.1 docs/kpod-push.1 docs/kpod-cp.1 docs/kpod.1 docs/kpod-export.1 docs/kpod-load.1 docs/kpod-logs.1 docs/kpod-images.1 docs/kpod-umount.1 docs/kpod-save.1 docs/kpod-mount.1 docs/kpod-info.1 docs/kpod-inspect.1 docs/kpod-history.1 docs/kpod-pull.1 docs/kpod-rmi.1 docs/kpod-version.1 docs/kpod-tag.1 -t /usr/local/share/man/man1\r\n" - ], - [ - 0.011201, - "install -m 644 docs/crio.conf.5 -t /usr/local/share/man/man5\r\n" - ], - [ - 0.004078, - "install -m 644 docs/crio.8 -t /usr/local/share/man/man8\r\n" - ], - [ - 0.00848, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.020721, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table* \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001114, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 9.5e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.1e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000165, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 388.817771, - "v" - ], - [ - 0.052535, - "\bvi" - ], - [ - 0.099467, - " " - ], - [ - 0.312442, - "m" - ], - [ - 0.159718, - "c" - ], - [ - 0.207542, - "\b \b" - ], - [ - 0.111893, - "\b \b" - ], - [ - 0.088207, - "c" - ], - [ - 0.120601, - "m" - ], - [ - 0.122793, - "d\u001b[1m/\u001b[0m" - ], - [ - 0.06091, - "\b\u001b[0m/k" - ], - [ - 0.12778, - "pod\u001b[1m/\u001b[0m" - ], - [ - 0.339925, - "\b\u001b[0m/r" - ], - [ - 0.124315, - "m" - ], - [ - 0.119998, - "i.go\u001b[1m \u001b[0m" - ], - [ - 0.071475, - "\b\u001b[0m i" - ], - [ - 0.511445, - "\b \b" - ], - [ - 0.145079, - "\b" - ], - [ - 0.195924, - "\u001b[?1l\u001b>" - ], - [ - 0.000365, - "\u001b[?2004l\r\r\n" - ], - [ - 0.008801, - "\u001b]2;vim cmd/kpod/rmi.go\u0007\u001b]1;vi\u0007" - ], - [ - 0.134848, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000609, - "\u001b[1;52r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[52;1H\"cmd/kpod/rmi.go\"" - ], - [ - 0.000144, - " 123L, 3096C" - ], - [ - 0.008903, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H\u001b[>c" - ], - [ - 0.001667, - "\u001b[1;1H\u001b[96m\u001b[47m 1 \u001b[m\u001b[93m\u001b[107m\u001b[32mpackage\u001b[m\u001b[93m\u001b[107m main\r\n\u001b[96m\u001b[47m 2 \r\n 3 \u001b[m\u001b[93m\u001b[107m\u001b[32mimport\u001b[m\u001b[93m\u001b[107m (\r\n\u001b[96m\u001b[47m 4 \u001b[m\u001b[93m\u001b[107m \u001b[36m\"fmt\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 5 \r\n 6 \u001b[m\u001b[93m\u001b[107m \u001b[36m\"github.com/containers/storage\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 7 \u001b[m\u001b[93m\u001b[107m libkpodimage \u001b[36m\"github.com/kubernetes-incubator/cri-o/libkpod/image\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 8 \u001b[m\u001b[93m\u001b[107m \u001b[36m\"github.com/pkg/errors\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 9 \u001b[m\u001b[93m\u001b[107m \u001b[36m\"github.com/urfave/cli\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 10 \u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 11 \r\n 12 \u001b[m\u001b[93m\u001b[107m\u001b[32mvar\u001b[m\u001b[93m\u001b[107m (\r\n\u001b[96m\u001b[47m 13 \u001b[m\u001b[93m\u001b[107m rmiDescription = \u001b[36m\"removes one or more locally stored images.\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 14 \u001b[m\u001b[93m\u001b[107m rmiFlags\u001b[7C= []cli.Flag{\r\n\u001b[96m\u001b[47m 15 \u001b[m\u001b[93m\u001b[107m\u001b[8Ccli.BoolFlag{\r\n\u001b[96m\u001b[47m 16 \u001b[m\u001b[93m\u001b[107m\u001b[12CName: \u001b[36m\"force, f\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 17 \u001b[m\u001b[93m\u001b[107m\u001b[12CUsage: \u001b[36m\"force removal of the image\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[" - ], - [ - 2e-05, - "96m\u001b[47m 18 \u001b[m\u001b[93m\u001b[107m\u001b[8C},\r\n\u001b[96m\u001b[47m 19 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 20 \u001b[m\u001b[93m\u001b[107m rmiCommand = cli.Command{\r\n\u001b[96m\u001b[47m 21 \u001b[m\u001b[93m\u001b[107m\u001b[8CName:\u001b[8C\u001b[36m\"rmi\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 22 \u001b[m\u001b[93m\u001b[107m\u001b[8CUsage:\u001b[7C\u001b[36m\"removes one or more images from local storage\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 23 \u001b[m\u001b[93m\u001b[107m\u001b[8CDescription: rmiDescription,\r\n\u001b[96m\u001b[47m 24 \u001b[m\u001b[93m\u001b[107m\u001b[8CAction: rmiCmd,\r\n\u001b[96m\u001b[47m 25 \u001b[m\u001b[93m\u001b[107m\u001b[8CArgsUsage: \u001b[36m\"IMAGE-NAME-OR-ID [...]\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 26 \u001b[m\u001b[93m\u001b[107m\u001b[8CFlags:\u001b[7CrmiFlags,\r\n\u001b[96m\u001b[47m 27 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 28 \u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 29 \r\n 30 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m rmiCmd(c *cli.Context) \u001b[33merror\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 31 \r\n 32 \u001b[m\u001b[93m\u001b[107m force := \u001b[36mfalse\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 33 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m c.IsSet(\u001b[36m\"force\"\u001b[m\u001b[93m\u001b[107m) {\r\n\u001b[96m\u001b[47m 34 \u001b[m\u001b[93m\u001b[107m\u001b[8Cforce = c.Bool(\u001b[36m\"force\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 35 \u001b[m\u001b[93m" - ], - [ - 0.028983, - "\u001b[107m }\r\n\u001b[96m\u001b[47m 36 \r\n 37 \u001b[m\u001b[93m\u001b[107m args := c.Args()\r\n\u001b[96m\u001b[47m 38 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(args) == \u001b[36m0\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 39 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Errorf(\u001b[36m\"image name or ID must be specified\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 40 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 41 \r\n 42 \u001b[m\u001b[93m\u001b[107m config, err := getConfig(c)\r\n\u001b[96m\u001b[47m 43 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 44 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"Could not get config\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 45 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 46 \u001b[m\u001b[93m\u001b[107m store, err := getStore(config)\r\n\u001b[96m\u001b[47m 47 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 48 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\r\n\u001b[96m\u001b[47m 49 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 50 \u001b[m\u001b[93m\u001b[107m\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m" - ], - [ - 2.8e-05, - "\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H kpod-format-table \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;32H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mrmi.go \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[51;50H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                             \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m   1%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m  1\u001b[m\u001b[93m" - ], - [ - 0.009152, - "\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1  \u001b[1;5H\u001b[?12l\u001b[?25h\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 0.418144, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K\u001b[52;1H/\u001b[?2004h" - ], - [ - 6.9e-05, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.594911, - "m\u001b[?25l" - ], - [ - 0.011367, - "\u001b[1;13H\u001b[7m\u001b[91mm\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[51;2H\u001b[1m\u001b[38;5;22m\u001b[48;5;148mCOMMND \u001b[m\u001b[93m\u001b[107m\u001b[200C\u001b[38;5;22m\u001b[48;5;252m9\r\n\u001b[m\u001b[93m\u001b[107m/m\u001b[?12l\u001b[?25h" - ], - [ - 0.22557, - "u\u001b[?25l" - ], - [ - 0.014952, - "\u001b[1;13Hm\u001b[39;52H\u001b[7m\u001b[91mmu\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  32%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m39\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:48\r\n\u001b[m\u001b[93m\u001b[107m/mu\u001b[?12l\u001b[?25h" - ], - [ - 0.081033, - "s\u001b[?25l" - ], - [ - 0.011335, - "\u001b[39;54H\u001b[7m\u001b[91ms\u001b[52;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.076678, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mt\u001b[?25l" - ], - [ - 0.012142, - "\u001b[39;55H\u001b[7m\u001b[91mt\u001b[52;6H\u001b[?12l\u001b[?25h" - ], - [ - 0.180332, - "\u001b[?25l" - ], - [ - 0.008175, - "\u001b[39;56H \u001b[52;7H\u001b[?12l\u001b[?25h" - ], - [ - 0.087385, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mf\u001b[?25l" - ], - [ - 0.011478, - "\u001b[1;50r\u001b[1;1H\u001b[19M\u001b[1;52r\u001b[20;52H\u001b[36mmust \u001b[m\u001b[93m\u001b[107m\u001b[32;1H\u001b[96m\u001b[47m 51 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, id := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m args {\r\n\u001b[96m\u001b[47m 52 \u001b[m\u001b[93m\u001b[107m\u001b[8Cimage, err := libkpodimage.FindImage(store, id)\r\n\u001b[96m\u001b[47m 53 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 54 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"could not get image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 55 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 56 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m image != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 57 \u001b[m\u001b[93m\u001b[107m\u001b[12CctrIDs, err := runningContainers(image, store)\r\n\u001b[96m\u001b[47m 58 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 59 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"error getting running containers for image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 60 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[96m\u001b[47m 61" - ], - [ - 2.8e-05, - " \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(ctrIDs) > \u001b[36m0\u001b[m\u001b[93m\u001b[107m && \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(image.Names) <= \u001b[36m1\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 62 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mif\u001b[m\u001b[93m\u001b[107m force {\r\n\u001b[96m\u001b[47m 63 \u001b[m\u001b[93m\u001b[107m\u001b[20CremoveContainers(ctrIDs, store)\r\n\u001b[96m\u001b[47m 64 \u001b[m\u001b[93m\u001b[107m\u001b[16C} \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 65 \u001b[m\u001b[93m\u001b[107m\u001b[20C\u001b[32mfor\u001b[m\u001b[93m\u001b[107m ctrID := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m ctrIDs {\r\n\u001b[96m\u001b[47m 66 \u001b[m\u001b[93m\u001b[107m\u001b[24C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m fmt.Errorf(\u001b[36m\"Could not remove image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m (\u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[91mmust f\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[36morce) - container \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\r\n\u001b[96m\u001b[47m 67 \u001b[m\u001b[93m\u001b[107m\u001b[20C}\r\n\u001b[96m\u001b[47m 68 \u001b[m\u001b[93m\u001b[107m\u001b[16C}\r\n\u001b[96m\u001b[47m 69 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  54%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:71\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K\u001b[52;1H/" - ], - [ - 2.2e-05, - "must f\u001b[?12l\u001b[?25h" - ], - [ - 0.084161, - "o\u001b[?25l" - ], - [ - 0.012305, - "\u001b[47;81H\u001b[7m\u001b[91mo\u001b[52;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.116387, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mr\u001b[?25l" - ], - [ - 0.011734, - "\u001b[47;82H\u001b[7m\u001b[91mr\u001b[52;10H\u001b[?12l\u001b[?25h" - ], - [ - 0.255362, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mc\u001b[?25l" - ], - [ - 0.011191, - "\u001b[47;83H\u001b[7m\u001b[91mc\u001b[52;11H\u001b[?12l\u001b[?25h" - ], - [ - 0.0573, - "\u001b[27m\u001b[m\u001b[93m\u001b[107me\u001b[?25l" - ], - [ - 0.013394, - "\u001b[47;84H\u001b[7m\u001b[91me\u001b[52;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.202815, - "\r\u001b[?25l" - ], - [ - 0.008924, - "\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[47;75H\u001b[7m\u001b[33mmust force\u001b[m\u001b[93m\u001b[107m\u001b[51;2H\u001b[1m\u001b[38;5;22m\u001b[48;5;148mNORMAL \u001b[47;75H\u001b[?12l\u001b[?25h" - ], - [ - 1.635195, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[45;51H\u001b[1m\u001b[31m\u001b[106m{\u001b[47;25H}\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 70 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[96m// If the user supplied an ID, we cannot delete the image if it is referred to by multiple tags\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:2\u001b[47;25H\u001b[?12l\u001b[?25h" - ], - [ - 0.536079, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[45;51H{\u001b[47;25H}\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:7\u001b[46;75H\u001b[?12l\u001b[?25h" - ], - [ - 0.422312, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[45;51H\u001b[1m\u001b[31m\u001b[106m{\u001b[47;25H}\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  53%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:47\u001b[45;51H\u001b[?12l\u001b[?25h" - ], - [ - 7.590339, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m{\u001b[47;25H}\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  54%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:71\u001b[46;75H\u001b[?12l\u001b[?25h" - ], - [ - 0.524344, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[45;51H\u001b[1m\u001b[31m\u001b[106m{\u001b[47;25H}\u001b[m\u001b[93m\u001b[107m\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:2\u001b[47;25H\u001b[?12l\u001b[?25h" - ], - [ - 0.384796, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[43;28H\u001b[1m\u001b[31m\u001b[106m{\u001b[m\u001b[93m\u001b[107m\u001b[44;51H{\u001b[46;25H}\u001b[47;21H\u001b[1m\u001b[31m\u001b[106m}\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 71 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m libkpodimage.MatchesID(image.ID, id) {\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  55%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:17\u001b[47;21H\u001b[?12l\u001b[?25h" - ], - [ - 1.34616, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[43;28H{\u001b[44;51H\u001b[1m\u001b[31m\u001b[106m{\u001b[46;25H}\u001b[m\u001b[93m\u001b[107m\u001b[47;21H}\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  54%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:21\u001b[46;25H\u001b[?12l\u001b[?25h" - ], - [ - 6.08698, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[44;51H{\u001b[46;25H}\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:7\u001b[45;75H\u001b[?12l\u001b[?25h" - ], - [ - 0.759914, - "\u001b[51;210H2\u001b[45;76H" - ], - [ - 0.494462, - "\u001b[51;210H3\u001b[45;77H" - ], - [ - 0.033092, - "\u001b[51;210H4\u001b[45;78H" - ], - [ - 0.027331, - "\u001b[51;210H5\u001b[45;79H" - ], - [ - 0.032653, - "\u001b[51;210H6\u001b[45;80H" - ], - [ - 0.028729, - "\u001b[51;210H7\u001b[45;81H" - ], - [ - 0.034268, - "\u001b[51;210H8\u001b[45;82H" - ], - [ - 0.022711, - "\u001b[51;210H9\u001b[45;83H" - ], - [ - 0.033818, - "\u001b[51;209H80\u001b[45;84H" - ], - [ - 0.033041, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[45;74H\u001b[1m\u001b[31m\u001b[106m(\u001b[10C)\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;252m1\u001b[45;85H\u001b[?12l\u001b[?25h" - ], - [ - 0.029548, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[45;74H\u001b[36m(\u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[33mm\u001b[m\u001b[93m\u001b[107m\u001b[9C\u001b[36m) \u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;252m2\u001b[45;86H\u001b[?12l\u001b[?25h" - ], - [ - 0.02919, - "\u001b[51;210H3\u001b[45;87H" - ], - [ - 0.030088, - "\u001b[51;210H4\u001b[45;88H" - ], - [ - 0.032142, - "\u001b[51;210H5\u001b[45;89H" - ], - [ - 0.03027, - "\u001b[51;210H6\u001b[45;90H" - ], - [ - 0.030009, - "\u001b[51;210H7\u001b[45;91H" - ], - [ - 0.031925, - "\u001b[51;210H8\u001b[45;92H" - ], - [ - 0.027725, - "\u001b[51;210H9\u001b[45;93H" - ], - [ - 0.031953, - "\u001b[51;209H90\u001b[45;94H" - ], - [ - 0.029383, - "\u001b[51;210H1\u001b[45;95H" - ], - [ - 0.030754, - "\u001b[51;210H2\u001b[45;96H" - ], - [ - 0.03042, - "\u001b[51;210H3\u001b[45;97H" - ], - [ - 0.030576, - "\u001b[51;210H4\u001b[45;98H" - ], - [ - 0.031217, - "\u001b[51;210H5\u001b[45;99H" - ], - [ - 0.031561, - "\u001b[51;210H6\u001b[45;100H" - ], - [ - 0.136981, - "\u001b[51;210H7\u001b[45;101H" - ], - [ - 8.584841, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[44;51H\u001b[1m\u001b[31m\u001b[106m{\u001b[46;25H}\u001b[m\u001b[93m\u001b[107m\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:21\u001b[46;25H\u001b[?12l\u001b[?25h" - ], - [ - 0.501453, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[43;28H\u001b[1m\u001b[31m\u001b[106m{\u001b[m\u001b[93m\u001b[107m\u001b[44;51H{\u001b[46;25H}\u001b[47;21H\u001b[1m\u001b[31m\u001b[106m}\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  55%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:17\u001b[47;21H\u001b[?12l\u001b[?25h" - ], - [ - 0.032681, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[39;61H\u001b[1m\u001b[31m\u001b[106m{\u001b[m\u001b[93m\u001b[107m\u001b[42;28H{\u001b[46;21H}\u001b[47;17H\u001b[1m\u001b[31m\u001b[106m}\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 72 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(image.Names) > \u001b[36m1\u001b[m\u001b[93m\u001b[107m && !force {\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  56%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:13\u001b[47;17H\u001b[?12l\u001b[?25h" - ], - [ - 0.026312, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[38;61H{\u001b[46;17H}\u001b[50;1H\u001b[96m\u001b[47m 73 \u001b[m\u001b[93m\u001b[107m\u001b[20C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m fmt.Errorf(\u001b[36m\"unable to delete \u001b[m\u001b[93m\u001b[107m\u001b[31m%s\u001b[m\u001b[93m\u001b[107m\u001b[36m (\u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[33mmust force\u001b[m\u001b[93m\u001b[107m\u001b[36m) - image is referred to in multiple tags\"\u001b[m\u001b[93m\u001b[107m, image.ID)\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  57%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m70\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:97\u001b[47;101H\u001b[?12l\u001b[?25h" - ], - [ - 0.027588, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[50;1H\u001b[96m\u001b[47m 74 \u001b[m\u001b[93m\u001b[107m\u001b[16C}\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  58%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:53\u001b[47;57H\u001b[?12l\u001b[?25h" - ], - [ - 0.034204, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[47;55H\u001b[1m\u001b[31m\u001b[106m{\u001b[49;21H}\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 75 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[96m// If it is forced, we have to untag the image so that it can be deleted\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  59%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:51\u001b[47;55H\u001b[?12l\u001b[?25h" - ], - [ - 0.025136, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[46;55H{\u001b[48;21H}\r\n\r\n\u001b[96m\u001b[47m 76 \u001b[m\u001b[93m\u001b[107m\u001b[16Cimage.Names = image.Names[:\u001b[36m0\u001b[m\u001b[93m\u001b[107m]\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:97\u001b[47;101H\u001b[?12l\u001b[?25h" - ], - [ - 0.037748, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[45;55H\u001b[1m\u001b[31m\u001b[106m{\u001b[47;21H}\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 77 \u001b[m\u001b[93m\u001b[107m\u001b[12C} \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  60%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[47;21H\u001b[?12l\u001b[?25h" - ], - [ - 0.029845, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[44;55H{\u001b[46;21H}\u001b[50;1H\u001b[96m\u001b[47m 78 \u001b[m\u001b[93m\u001b[107m\u001b[16Cname, err2 := libkpodimage.UntagImage(store, image, id)\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  61%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:88\u001b[47;92H\u001b[?12l\u001b[?25h" - ], - [ - 0.029474, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[47;46H\u001b[1m\u001b[31m\u001b[106m[\u001b[2C]\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 79 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err2 != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  62%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:45\u001b[47;49H\u001b[?12l\u001b[?25h" - ], - [ - 0.027846, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[46;46H[:\u001b[1C]\u001b[50;1H\u001b[96m\u001b[47m 80 \u001b[m\u001b[93m\u001b[107m\u001b[20C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  63%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:20\u001b[47;24H\u001b[?12l\u001b[?25h" - ], - [ - 0.028156, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[47;58H\u001b[1m\u001b[31m\u001b[106m(\u001b[16C)\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 81 \u001b[m\u001b[93m\u001b[107m\u001b[16C}\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:71\u001b[47;75H\u001b[?12l\u001b[?25h" - ], - [ - 0.036773, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[46;58H(s\u001b[15C)\u001b[47;36H\u001b[1m\u001b[31m\u001b[106m{\u001b[49;21H}\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 82 \u001b[m\u001b[93m\u001b[107m\u001b[16Cfmt.Printf(\u001b[36m\"untagged: \u001b[m\u001b[93m\u001b[107m\u001b[31m%s\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, name)\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  64%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:32\u001b[47;36H\u001b[?12l\u001b[?25h" - ], - [ - 0.029719, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[46;36H{\u001b[48;21H}\r\n\r\n\u001b[96m\u001b[47m 83 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  65%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m80\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:30\u001b[47;34H\u001b[?12l\u001b[?25h" - ], - [ - 0.032707, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[45;36H\u001b[1m\u001b[31m\u001b[106m{\u001b[47;21H}\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 84 \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  66%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:17\u001b[47;21H\u001b[?12l\u001b[?25h" - ], - [ - 0.026852, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[44;36H{\u001b[46;21H}\u001b[47;31H\u001b[1m\u001b[31m\u001b[106m(\u001b[20C)\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 85 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(image.Names) > \u001b[36m0\u001b[m\u001b[93m\u001b[107m {\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  67%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:48\u001b[47;52H\u001b[?12l\u001b[?25h" - ], - [ - 0.026473, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[41;24H\u001b[1m\u001b[31m\u001b[106m{\u001b[m\u001b[93m\u001b[107m\u001b[46;31H(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[19C)\u001b[47;17H\u001b[1m\u001b[31m\u001b[106m}\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 86 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mcontinue\u001b[m\u001b[93m\u001b[107m\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:13\u001b[47;17H\u001b[?12l\u001b[?25h" - ], - [ - 0.032368, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[40;24H{\u001b[46;17H}\u001b[50;1H\u001b[96m\u001b[47m 87 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  68%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1 \u001b[47;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.03189, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[47;41H\u001b[1m\u001b[31m\u001b[106m{\u001b[49;17H}\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 88 \u001b[m\u001b[93m\u001b[107m\u001b[12Cid, err := libkpodimage.RemoveImage(image, store)\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  69%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:37\u001b[47;41H\u001b[?12l\u001b[?25h" - ], - [ - 0.036978, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[46;41H{\u001b[48;17H}\r\n\r\n\u001b[96m\u001b[47m 89 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  70%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:24\u001b[47;28H\u001b[?12l\u001b[?25h" - ], - [ - 0.031976, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[45;41H\u001b[1m\u001b[31m\u001b[106m{\u001b[47;17H}\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 90 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  71%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:13\u001b[47;17H\u001b[?12l\u001b[?25h" - ], - [ - 0.034896, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[44;41H{\u001b[46;17H}\u001b[47;52H\u001b[1m\u001b[31m\u001b[106m(\u001b[12C)\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 91 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  72%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:61\u001b[47;65H\u001b[?12l\u001b[?25h" - ], - [ - 0.017603, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[46;52H(i\u001b[11C)\u001b[47;31H\u001b[1m\u001b[31m\u001b[106m{\u001b[49;17H}\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 92 \u001b[m\u001b[93m\u001b[107m\u001b[12Cfmt.Printf(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[31m%s\\n\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, id)\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:27\u001b[47;31H\u001b[?12l\u001b[?25h" - ], - [ - 0.040503, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[46;31H{\u001b[48;17H}\r\n\r\n\u001b[96m\u001b[47m 93 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  73%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m90\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:26\u001b[47;30H\u001b[?12l\u001b[?25h" - ], - [ - 0.028582, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[45;31H\u001b[1m\u001b[31m\u001b[106m{\u001b[47;17H}\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 94 \u001b[m\u001b[93m\u001b[107m }\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  74%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:13\u001b[47;17H\u001b[?12l\u001b[?25h" - ], - [ - 0.031483, - "\u001b[?25l\u001b[1;50r\u001b[m\u001b[93m\u001b[107m\u001b[50;1H\r\n\u001b[1;52r\u001b[44;31H{\u001b[46;17H}\u001b[47;27H\u001b[1m\u001b[31m\u001b[106m(\u001b[10C)\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 95 \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  75%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:34\u001b[47;38H\u001b[?12l\u001b[?25h" - ], - [ - 0.161023, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[44;31H\u001b[1m\u001b[31m\u001b[106m{\u001b[46;17H}\u001b[m\u001b[93m\u001b[107m\u001b[47;27H(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[9C)\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  74%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:13\u001b[46;17H\u001b[?12l\u001b[?25h" - ], - [ - 0.499146, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[44;31H{\u001b[46;17H}\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  73%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m0\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:26\u001b[45;30H\u001b[?12l\u001b[?25h" - ], - [ - 0.027118, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[44;31H\u001b[1m\u001b[31m\u001b[106m{\u001b[46;17H}\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  72%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m89\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:27\u001b[44;31H\u001b[?12l\u001b[?25h" - ], - [ - 0.033789, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[43;52H\u001b[1m\u001b[31m\u001b[106m(\u001b[12C)\u001b[m\u001b[93m\u001b[107m\u001b[44;31H{\u001b[46;17H}\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:61\u001b[43;65H\u001b[?12l\u001b[?25h" - ], - [ - 0.026661, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[40;41H\u001b[1m\u001b[31m\u001b[106m{\u001b[42;17H}\u001b[m\u001b[93m\u001b[107m\u001b[43;52H(i\u001b[11C)\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  71%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:13\u001b[42;17H\u001b[?12l\u001b[?25h" - ], - [ - 0.032548, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[40;41H{\u001b[42;17H}\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  70%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:24\u001b[41;28H\u001b[?12l\u001b[?25h" - ], - [ - 0.029278, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[40;41H\u001b[1m\u001b[31m\u001b[106m{\u001b[42;17H}\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  69%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:37\u001b[40;41H\u001b[?12l\u001b[?25h" - ], - [ - 0.026258, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m{\u001b[42;17H}\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  68%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1 \u001b[39;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.034793, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[32;24H\u001b[1m\u001b[31m\u001b[106m{\u001b[38;17H}\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  67%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:13\u001b[38;17H\u001b[?12l\u001b[?25h" - ], - [ - 0.032971, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[32;24H{\u001b[37;31H\u001b[1m\u001b[31m\u001b[106m(\u001b[20C)\u001b[m\u001b[93m\u001b[107m\u001b[38;17H}\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:48\u001b[37;52H\u001b[?12l\u001b[?25h" - ], - [ - 0.029998, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[34;36H\u001b[1m\u001b[31m\u001b[106m{\u001b[36;21H}\u001b[m\u001b[93m\u001b[107m\u001b[37;31H(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[19C)\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  66%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:17\u001b[36;21H\u001b[?12l\u001b[?25h" - ], - [ - 0.030022, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[34;36H{\u001b[36;21H}\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  65%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m0\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:30\u001b[35;34H\u001b[?12l\u001b[?25h" - ], - [ - 0.031828, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[34;36H\u001b[1m\u001b[31m\u001b[106m{\u001b[36;21H}\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  64%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m79\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:32\u001b[34;36H\u001b[?12l\u001b[?25h" - ], - [ - 0.027492, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[33;58H\u001b[1m\u001b[31m\u001b[106m(\u001b[16C)\u001b[m\u001b[93m\u001b[107m\u001b[34;36H{\u001b[36;21H}\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  63%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:71\u001b[33;75H\u001b[?12l\u001b[?25h" - ], - [ - 0.032435, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[32;24H\u001b[1m\u001b[31m\u001b[106m{\u001b[m\u001b[93m\u001b[107m\u001b[33;58H(s\u001b[15C)\u001b[38;17H\u001b[1m\u001b[31m\u001b[106m}\u001b[m\u001b[93m\u001b[107m\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:20\u001b[32;24H\u001b[?12l\u001b[?25h" - ], - [ - 0.031073, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[31;46H\u001b[1m\u001b[31m\u001b[106m[\u001b[2C]\u001b[m\u001b[93m\u001b[107m\u001b[32;24H{\u001b[38;17H}\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  62%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:45\u001b[31;49H\u001b[?12l\u001b[?25h" - ], - [ - 0.025565, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\b\b[:\u001b[1C]\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  61%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:88\u001b[30;92H\u001b[?12l\u001b[?25h" - ], - [ - 0.034775, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[27;55H\u001b[1m\u001b[31m\u001b[106m{\u001b[29;21H}\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  60%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:17\u001b[29;21H\u001b[?12l\u001b[?25h" - ], - [ - 0.031444, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[27;55H{\u001b[29;21H}\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  59%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[28;101H\u001b[?12l\u001b[?25h" - ], - [ - 0.027046, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[27;55H\u001b[1m\u001b[31m\u001b[106m{\u001b[29;21H}\u001b[m\u001b[93m\u001b[107m\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:51\u001b[27;55H\u001b[?12l\u001b[?25h" - ], - [ - 0.034344, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[26;57H\u001b[1m\u001b[31m\u001b[106m{\u001b[m\u001b[93m\u001b[107m\u001b[27;55H{\u001b[29;21H}\u001b[32;17H\u001b[1m\u001b[31m\u001b[106m}\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  58%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:53\u001b[26;57H\u001b[?12l\u001b[?25h" - ], - [ - 0.032004, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m{\u001b[32;17H} \u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  57%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m0\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:97\u001b[25;101H\u001b[?12l\u001b[?25h" - ], - [ - 0.031757, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[16;61H\u001b[1m\u001b[31m\u001b[106m{\u001b[24;17H}\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  56%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m69\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:13\u001b[24;17H\u001b[?12l\u001b[?25h" - ], - [ - 0.027946, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[16;61H{\u001b[19;28H\u001b[1m\u001b[31m\u001b[106m{\u001b[23;21H}\u001b[m\u001b[93m\u001b[107m\u001b[24;17H}\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  55%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:17\u001b[23;21H\u001b[?12l\u001b[?25h" - ], - [ - 0.032109, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[19;28H{\u001b[20;51H\u001b[1m\u001b[31m\u001b[106m{\u001b[22;25H}\u001b[m\u001b[93m\u001b[107m\u001b[23;21H}\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  54%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:21\u001b[22;25H\u001b[?12l\u001b[?25h" - ], - [ - 0.185364, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[20;51H{\u001b[22;25H}\u001b[51;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:97\u001b[21;101H\u001b[?12l\u001b[?25h" - ], - [ - 12.251553, - "\u001b[51;210H8\u001b[21;102H" - ], - [ - 0.640334, - "\u001b[51;210H9\u001b[21;103H" - ], - [ - 0.179298, - "\u001b[m\u001b[93m\u001b[107m\u001b[51;175H\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;181H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;189H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;194H\u001b[38;5;107m\u001b[48;5;240m \u001b[1C54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;201H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;203H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:100\u001b[21;104H" - ], - [ - 0.807758, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[34m-- INSERT --" - ], - [ - 0.042962, - "\u001b[m\u001b[93m\u001b[107m\u001b[51;1H\u001b[1m\u001b[38;5;23m\u001b[48;5;231m INSERT \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;231m\u001b[48;5;31m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m\u001b[51;12H kpod-format-table \u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;31m\u001b[51;32H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;31mrmi.go \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[m\u001b[93m\u001b[107m\u001b[51;49H\u001b[38;5;31m\u001b[48;5;24m\u001b[51;50H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;24m                                                                                                                            \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;181H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;189H\u001b[38;5;117m\u001b[48;5;24m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;194H\u001b[38;5;186m\u001b[4" - ], - [ - 2.9e-05, - "8;5;31m  54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[51;201H\u001b[38;5;24m\u001b[48;5;117m \u001b[51;203H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;117m:100 \u001b[21;104H\u001b[?12l\u001b[?25h" - ], - [ - 0.145919, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;142H\u001b[K\u001b[51;48H\u001b[1m\u001b[38;5;220m\u001b[48;5;31m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[51;52H \u001b[m\u001b[93m\u001b[107m\u001b[122C\u001b[38;5;231m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;182H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;190H\u001b[38;5;117m\u001b[48;5;24m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;196H\u001b[38;5;186m\u001b[48;5;31m 54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;24m\u001b[48;5;117m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m6\b 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:99\u001b[21;103H\u001b[?12l\u001b[?25h" - ], - [ - 0.48937, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;141H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[21;102H\u001b[?12l\u001b[?25h" - ], - [ - 0.027128, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36musing its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;140H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[21;101H\u001b[?12l\u001b[?25h" - ], - [ - 0.02875, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\b\u001b[36m% using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;139H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[21;100H\u001b[?12l\u001b[?25h" - ], - [ - 0.031194, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;138H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[21;99H\u001b[?12l\u001b[?25h" - ], - [ - 0.02624, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36musing its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;137H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[21;98H\u001b[?12l\u001b[?25h" - ], - [ - 0.032683, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;136H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[21;97H\u001b[?12l\u001b[?25h" - ], - [ - 0.029086, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;135H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[21;96H\u001b[?12l\u001b[?25h" - ], - [ - 0.030766, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;134H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[21;95H\u001b[?12l\u001b[?25h" - ], - [ - 0.036114, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;133H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m0\u001b[21;94H\u001b[?12l\u001b[?25h" - ], - [ - 0.119662, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;132H\u001b[K\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m89\u001b[21;93H\u001b[?12l\u001b[?25h" - ], - [ - 0.150503, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;131H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[21;92H\u001b[?12l\u001b[?25h" - ], - [ - 0.162647, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;130H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[21;91H\u001b[?12l\u001b[?25h" - ], - [ - 0.143355, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;129H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[21;90H\u001b[?12l\u001b[?25h" - ], - [ - 0.152961, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[21;128H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[21;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.214499, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mo using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[21;90H\u001b[?12l\u001b[?25h" - ], - [ - 0.118991, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mn using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[21;91H\u001b[?12l\u001b[?25h" - ], - [ - 0.211947, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36me using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[21;92H\u001b[?12l\u001b[?25h" - ], - [ - 0.109298, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m9\u001b[21;93H\u001b[?12l\u001b[?25h" - ], - [ - 0.165278, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mo using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m90\u001b[21;94H\u001b[?12l\u001b[?25h" - ], - [ - 0.123492, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mr using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[21;95H\u001b[?12l\u001b[?25h" - ], - [ - 0.096682, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[21;96H\u001b[?12l\u001b[?25h" - ], - [ - 0.08435, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mm using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[21;97H\u001b[?12l\u001b[?25h" - ], - [ - 0.130601, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mo using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[21;98H\u001b[?12l\u001b[?25h" - ], - [ - 0.052001, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mr using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[21;99H\u001b[?12l\u001b[?25h" - ], - [ - 0.075667, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36me using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[21;100H\u001b[?12l\u001b[?25h" - ], - [ - 0.06988, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[21;101H\u001b[?12l\u001b[?25h" - ], - [ - 0.107312, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mc using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[21;102H\u001b[?12l\u001b[?25h" - ], - [ - 0.052857, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mo using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m9\u001b[21;103H\u001b[?12l\u001b[?25h" - ], - [ - 0.080952, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mn using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;175H\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;181H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;189H\u001b[38;5;117m\u001b[48;5;24m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;194H\u001b[38;5;186m\u001b[48;5;31m \u001b[1C54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[51;201H\u001b[38;5;24m\u001b[48;5;117m \u001b[51;203H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:100\u001b[21;104H\u001b[?12l\u001b[?25h" - ], - [ - 0.106035, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mt using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[21;105H\u001b[?12l\u001b[?25h" - ], - [ - 0.069849, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36ma using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[21;106H\u001b[?12l\u001b[?25h" - ], - [ - 0.080188, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mi using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[21;107H\u001b[?12l\u001b[?25h" - ], - [ - 0.053983, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mn using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[21;108H\u001b[?12l\u001b[?25h" - ], - [ - 0.083169, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36me using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[21;109H\u001b[?12l\u001b[?25h" - ], - [ - 0.064025, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mr using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[21;110H\u001b[?12l\u001b[?25h" - ], - [ - 0.114373, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36ms using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[21;111H\u001b[?12l\u001b[?25h" - ], - [ - 0.140141, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[21;112H\u001b[?12l\u001b[?25h" - ], - [ - 0.178511, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36ma using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m9\u001b[21;113H\u001b[?12l\u001b[?25h" - ], - [ - 0.078589, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mr using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m10\u001b[21;114H\u001b[?12l\u001b[?25h" - ], - [ - 0.088307, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36me using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[21;115H\u001b[?12l\u001b[?25h" - ], - [ - 0.270773, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K" - ], - [ - 0.007389, - "\u001b[51;1H\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;31m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H kpod-format-table \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;32H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mrmi.go\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[m\u001b[93m\u001b[107m\u001b[51;51H\u001b[38;5;240m\u001b[48;5;236m\u001b[51;52H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                          \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;181H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;189H\u001b[38;5;247m\u001b[48;5;236m" - ], - [ - 3.4e-05, - " go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;194H\u001b[38;5;107m\u001b[48;5;240m  54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;201H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;203H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;252m:110 \u001b[21;114H\u001b[?12l\u001b[?25h" - ], - [ - 0.232519, - "\u001b[?25l\u001b[52;1H\u001b[m\u001b[93m\u001b[107m:\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.143782, - "w\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.064041, - "q\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.737175, - "\r\u001b[?25l\u001b[?2004l" - ], - [ - 0.022609, - "\"cmd/kpod/rmi.go\"" - ], - [ - 0.010737, - " 123L, 3107C written" - ], - [ - 0.01326, - "\r\r\r\n\u001b[39;49m\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.002223, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.022486, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table* \u001b[39m \u001b[33m54s\u001b[39m\r\n" - ], - [ - 0.001213, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 8.7e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.3e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000306, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.1e-05, - "\u001b[?1h\u001b=" - ], - [ - 2e-05, - "\u001b[?2004h" - ], - [ - 4.650947, - "s" - ], - [ - 0.114659, - "\bsu" - ], - [ - 0.136564, - "d" - ], - [ - 0.088137, - "o" - ], - [ - 0.111636, - " " - ], - [ - 0.12095, - "m" - ], - [ - 0.271219, - "\b \b" - ], - [ - 0.500424, - "\b" - ], - [ - 0.030636, - "\b \b" - ], - [ - 0.03127, - "\b \b" - ], - [ - 0.031598, - "\b\bs \b" - ], - [ - 0.029362, - "\b \b" - ], - [ - 0.153403, - "m" - ], - [ - 0.127382, - "\bma" - ], - [ - 0.14863, - "k" - ], - [ - 0.131117, - "e" - ], - [ - 0.088373, - " " - ], - [ - 0.064223, - "k" - ], - [ - 0.087523, - "p" - ], - [ - 0.096297, - "o" - ], - [ - 0.119679, - "d" - ], - [ - 0.112054, - "\u001b[?1l\u001b>" - ], - [ - 0.000159, - "\u001b[?2004l\r\r\n" - ], - [ - 0.00324, - "\u001b]2;make kpod\u0007\u001b]1;make\u0007" - ], - [ - 6.788264, - "go build -ldflags '-X main.gitCommit=99495909 -X main.buildInfo=1502916531' -tags \"selinux seccomp \" -o kpod github.com/kubernetes-incubator/cri-o/cmd/kpod\r\n" - ], - [ - 4.283762, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.017721, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table* \u001b[39m \u001b[33m11s\u001b[39m\r\n" - ], - [ - 0.001236, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000128, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.00018, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 3.3e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 8e-05, - "\u001b[?1h\u001b=" - ], - [ - 3.1e-05, - "\u001b[?2004h" - ], - [ - 168.290484, - "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 2.584789, - "g" - ], - [ - 0.198102, - "\bgi" - ], - [ - 0.19998, - "t" - ], - [ - 0.600599, - "\b \b" - ], - [ - 0.127993, - "\b\bg \b" - ], - [ - 0.175966, - "\b \b" - ], - [ - 0.216044, - "s" - ], - [ - 0.112522, - "\bsu" - ], - [ - 0.135935, - "d" - ], - [ - 0.079322, - "o" - ], - [ - 0.14454, - " " - ], - [ - 0.079601, - "m" - ], - [ - 0.128569, - "a" - ], - [ - 0.08771, - "k" - ], - [ - 0.09614, - "e" - ], - [ - 0.095448, - " " - ], - [ - 0.056775, - "i" - ], - [ - 0.063421, - "n" - ], - [ - 0.072685, - "s" - ], - [ - 0.111636, - "t" - ], - [ - 0.080215, - "a" - ], - [ - 0.119661, - "l" - ], - [ - 0.135786, - "l" - ], - [ - 0.296278, - "\u001b[?1l\u001b>" - ], - [ - 8.3e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.00983, - "\u001b]2;sudo make install\u0007\u001b]1;make\u0007" - ], - [ - 0.947581, - "[sudo] password for ryan: " - ], - [ - 2.602557, - "\r\n" - ], - [ - 2.991429, - "install -D -m 755 crio /usr/local/bin/crio\r\n" - ], - [ - 0.053259, - "install -D -m 755 crioctl /usr/local/bin/crioctl\r\n" - ], - [ - 0.030024, - "install -D -m 755 kpod /usr/local/bin/kpod\r\n" - ], - [ - 0.041823, - "install -D -m 755 conmon/conmon /usr/local/libexec/crio/conmon\r\n" - ], - [ - 0.002995, - "install -D -m 755 pause/pause /usr/local/libexec/crio/pause\r\n" - ], - [ - 0.005043, - "install -d -m 755 /usr/local/share/man/man1\r\n" - ], - [ - 0.001982, - "install -d -m 755 /usr/local/share/man/man5\r\n" - ], - [ - 0.000749, - "install -d -m 755 /usr/local/share/man/man8\r\n" - ], - [ - 0.000879, - "install -m 644 docs/kpod-diff.1 docs/kpod-push.1 docs/kpod-cp.1 docs/kpod.1 docs/kpod-export.1 docs/kpod-load.1 docs/kpod-logs.1 docs/kpod-images.1 docs/kpod-umount.1 docs/kpod-save.1 docs/kpod-mount.1 docs/kpod-info.1 docs/kpod-inspect.1 docs/kpod-history.1 docs/kpod-pull.1 docs/kpod-rmi.1 docs/kpod-version.1 docs/kpod-tag.1 -t /usr/local/share/man/man1\r\n" - ], - [ - 0.011056, - "install -m 644 docs/crio.conf.5 -t /usr/local/share/man/man5\r\n" - ], - [ - 0.002986, - "install -m 644 docs/crio.8 -t /usr/local/share/man/man8\r\n" - ], - [ - 0.004783, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.019387, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table* \u001b[39m \u001b[33m7s\u001b[39m\r\n" - ], - [ - 0.002291, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 9.3e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.1e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 8.8e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 4.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.6e-05, - "\u001b[?2004h" - ], - [ - 15.331424, - "g" - ], - [ - 0.398976, - "\b \b" - ], - [ - 0.536701, - "v" - ], - [ - 0.160554, - "\bvi" - ], - [ - 0.127435, - " " - ], - [ - 1.040078, - "\b" - ], - [ - 0.144093, - "\b\bv \b" - ], - [ - 0.167843, - "\b \b" - ], - [ - 0.448464, - "g" - ], - [ - 0.087315, - "\bgi" - ], - [ - 0.104665, - "t" - ], - [ - 0.119248, - " " - ], - [ - 0.176373, - "r" - ], - [ - 0.151944, - "e" - ], - [ - 0.080321, - "s" - ], - [ - 0.175774, - "e" - ], - [ - 0.120008, - "t" - ], - [ - 0.168118, - " " - ], - [ - 0.647723, - "c" - ], - [ - 0.11246, - "m" - ], - [ - 0.353225, - "\u0007" - ], - [ - 0.0001, - "k" - ], - [ - 0.225653, - "\u0007" - ], - [ - 0.388813, - "\b \b" - ], - [ - 0.152155, - "d" - ], - [ - 0.225421, - "\u0007" - ], - [ - 0.142048, - "m" - ], - [ - 0.448625, - "\b \b" - ], - [ - 0.248141, - "/" - ], - [ - 0.303478, - "m" - ], - [ - 0.415244, - "\b \b" - ], - [ - 0.501387, - "\b \b" - ], - [ - 0.030592, - "\b \b" - ], - [ - 0.031729, - "\b \b" - ], - [ - 0.276247, - "\b \b" - ], - [ - 0.296245, - "H" - ], - [ - 0.111636, - "E" - ], - [ - 0.128194, - "A" - ], - [ - 0.160328, - "D" - ], - [ - 0.216523, - " " - ], - [ - 0.160304, - "m" - ], - [ - 0.159999, - "e" - ], - [ - 0.22375, - "\b \b" - ], - [ - 0.159675, - "\b \b" - ], - [ - 0.088274, - "c" - ], - [ - 0.111635, - "m" - ], - [ - 0.178731, - "\u0007" - ], - [ - 0.05329, - "k" - ], - [ - 0.196815, - "\u0007" - ], - [ - 0.282938, - "\b \b" - ], - [ - 0.136923, - "d" - ], - [ - 0.239219, - "/" - ], - [ - 0.368537, - "c" - ], - [ - 0.319505, - "\b \b" - ], - [ - 0.232433, - "k" - ], - [ - 0.504033, - "p" - ], - [ - 0.176414, - "o" - ], - [ - 0.126785, - "d" - ], - [ - 0.864534, - "/" - ], - [ - 0.155176, - "r" - ], - [ - 0.109177, - "m" - ], - [ - 0.119347, - "i" - ], - [ - 0.24468, - "." - ], - [ - 0.195895, - "g" - ], - [ - 0.087415, - "o" - ], - [ - 1.588076, - "\u001b[?1l\u001b>" - ], - [ - 0.000131, - "\u001b[?2004l\r\r\n" - ], - [ - 0.003239, - "\u001b]2;git reset HEAD cmd/kpod/rmi.go\u0007\u001b]1;git\u0007" - ], - [ - 0.005443, - "Unstaged changes after reset:\r\nM\tcmd/kpod/images.go\r\n" - ], - [ - 0.000165, - "M\tcmd/kpod/rmi.go\r\n" - ], - [ - 0.010191, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.023696, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table* \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001223, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000118, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.3e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000101, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 3.3e-05, - "\u001b[?2004h" - ], - [ - 117.912011, - "v" - ], - [ - 0.072168, - "\bvi" - ], - [ - 0.13525, - " " - ], - [ - 0.224662, - "m" - ], - [ - 0.447667, - "\b \b" - ], - [ - 0.119783, - "c" - ], - [ - 0.096089, - "m" - ], - [ - 0.146517, - "d\u001b[1m/\u001b[0m" - ], - [ - 0.10283, - "\b\u001b[0m/k" - ], - [ - 0.110527, - "pod\u001b[1m/\u001b[0m" - ], - [ - 0.48823, - "\b\u001b[0m/r" - ], - [ - 0.176379, - "m" - ], - [ - 0.10899, - "i.go\u001b[1m \u001b[0m" - ], - [ - 0.387068, - "\b\u001b[0m \b" - ], - [ - 0.000493, - "\u001b[?1l\u001b>\u001b[?2004l\r\r\n" - ], - [ - 0.004413, - "\u001b]2;vim cmd/kpod/rmi.go\u0007\u001b]1;vi\u0007" - ], - [ - 0.139925, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000574, - "\u001b[1;54r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[54;1H\"cmd/kpod/rmi.go\"" - ], - [ - 0.000165, - " 123L, 3107C" - ], - [ - 0.009214, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H\u001b[>c" - ], - [ - 0.003104, - "\u001b[1;1H\u001b[96m\u001b[47m 18 \u001b[m\u001b[93m\u001b[107m\u001b[8C},\r\n\u001b[96m\u001b[47m 19 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 20 \u001b[m\u001b[93m\u001b[107m rmiCommand = cli.Command{\r\n\u001b[96m\u001b[47m 21 \u001b[m\u001b[93m\u001b[107m\u001b[8CName:\u001b[8C\u001b[36m\"rmi\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 22 \u001b[m\u001b[93m\u001b[107m\u001b[8CUsage:\u001b[7C\u001b[36m\"removes one or more images from local storage\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 23 \u001b[m\u001b[93m\u001b[107m\u001b[8CDescription: rmiDescription,\r\n\u001b[96m\u001b[47m 24 \u001b[m\u001b[93m\u001b[107m\u001b[8CAction: rmiCmd,\r\n\u001b[96m\u001b[47m 25 \u001b[m\u001b[93m\u001b[107m\u001b[8CArgsUsage: \u001b[36m\"IMAGE-NAME-OR-ID [...]\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 26 \u001b[m\u001b[93m\u001b[107m\u001b[8CFlags:\u001b[7CrmiFlags,\r\n\u001b[96m\u001b[47m 27 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 28 \u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 29 \r\n 30 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m rmiCmd(c *cli.Context) \u001b[33merror\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 31 \r\n 32 \u001b[m\u001b[93m\u001b[107m force := \u001b[36mfalse\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 33 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m c.IsSet(\u001b[36m\"force\"\u001b[m\u001b[93m\u001b[107m) {\r\n\u001b[96m\u001b[47m 34 \u001b[m\u001b[93m\u001b[107m\u001b[8Cforce = c.Bool(\u001b[36m\"force\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 35 \u001b[m\u001b[93m\u001b[107m " - ], - [ - 1.9e-05, - "}\r\n\u001b[96m\u001b[47m 36 \r\n 37 \u001b[m\u001b[93m\u001b[107m args := c.Args()\r\n\u001b[96m\u001b[47m 38 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(args) == \u001b[36m0\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 39 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Errorf(\u001b[36m\"image name or ID must be specified\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 40 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 41 \r\n 42 \u001b[m\u001b[93m\u001b[107m config, err := getConfig(c)\r\n\u001b[96m\u001b[47m 43 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 44 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"Could not get config\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 45 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 46 \u001b[m\u001b[93m\u001b[107m store, err := getStore(config)\r\n\u001b[96m\u001b[47m 47 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 48 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\r\n\u001b[96m\u001b[47m 49 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 50 \r\n 51 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, id := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m args {\r\n\u001b[96m\u001b[47m 52 " - ], - [ - 0.032096, - "\u001b[m\u001b[93m\u001b[107m\u001b[8Cimage, err := libkpodimage.FindImage(store, id)\r\n\u001b[96m\u001b[47m 53 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 54 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"could not get image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 55 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 56 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m image != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 57 \u001b[m\u001b[93m\u001b[107m\u001b[12CctrIDs, err := runningContainers(image, store)\r\n\u001b[96m\u001b[47m 58 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 59 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"error getting running containers for image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 60 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[96m\u001b[47m 61 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(ctrIDs) > \u001b[36m0\u001b[m\u001b[93m\u001b[107m && \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(image.Names) <= \u001b[36m1\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 62" - ], - [ - 9.1e-05, - " \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mif\u001b[m\u001b[93m\u001b[107m force {\r\n\u001b[96m\u001b[47m 63 \u001b[m\u001b[93m\u001b[107m\u001b[20CremoveContainers(ctrIDs, store)\r\n\u001b[96m\u001b[47m 64 \u001b[m\u001b[93m\u001b[107m\u001b[16C} \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 65 \u001b[m\u001b[93m\u001b[107m\u001b[20C\u001b[32mfor\u001b[m\u001b[93m\u001b[107m ctrID := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m ctrIDs {\r\n\u001b[96m\u001b[47m 66 \u001b[m\u001b[93m\u001b[107m\u001b[24C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m fmt.Errorf(\u001b[36m\"Could not remove image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m (\u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[33mmust force\u001b[m\u001b[93m\u001b[107m\u001b[36m) - one or more containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\r\n\u001b[96m\u001b[47m 67 \u001b[m\u001b[93m\u001b[107m\u001b[20C}\r\n\u001b[96m\u001b[47m 68 \u001b[m\u001b[93m\u001b[107m\u001b[16C}\r\n\u001b[96m\u001b[47m 69 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[53;12H kpod-format-table \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[53;32H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mrmi.go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;220m\u001b[48;5;240m M \u001b[m\u001b[93m" - ], - [ - 0.00914, - "\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[53;52H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                           \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:25 \u001b[49;29H\u001b[?12l\u001b[?25h\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 1.315626, - "\u001b[?25l\u001b[53;210H6\u001b[49;30H\u001b[?12l\u001b[?25h" - ], - [ - 0.490663, - "\u001b[53;210H7\u001b[49;31H" - ], - [ - 0.024219, - "\u001b[53;210H8\u001b[49;32H" - ], - [ - 0.030955, - "\u001b[53;210H9\u001b[49;33H" - ], - [ - 0.03195, - "\u001b[53;209H30\u001b[49;34H" - ], - [ - 0.028457, - "\u001b[53;210H1\u001b[49;35H" - ], - [ - 0.030479, - "\u001b[53;210H2\u001b[49;36H" - ], - [ - 0.031626, - "\u001b[53;210H3\u001b[49;37H" - ], - [ - 0.032067, - "\u001b[53;210H4\u001b[49;38H" - ], - [ - 0.026593, - "\u001b[53;210H5\u001b[49;39H" - ], - [ - 0.033566, - "\u001b[53;210H6\u001b[49;40H" - ], - [ - 0.027309, - "\u001b[53;210H7\u001b[49;41H" - ], - [ - 0.03294, - "\u001b[53;210H8\u001b[49;42H" - ], - [ - 0.030662, - "\u001b[53;210H9\u001b[49;43H" - ], - [ - 0.031394, - "\u001b[53;209H40\u001b[49;44H" - ], - [ - 0.032204, - "\u001b[53;210H1\u001b[49;45H" - ], - [ - 0.033628, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mf\u001b[1m\u001b[31m\u001b[106m(\u001b[106C)\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;252m2\u001b[49;46H\u001b[?12l\u001b[?25h" - ], - [ - 0.026953, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[105C)\u001b[53;210H\u001b[38;5;22m\u001b[48;5;252m3\u001b[49;47H\u001b[?12l\u001b[?25h" - ], - [ - 0.031767, - "\u001b[53;210H4\u001b[49;48H" - ], - [ - 0.026243, - "\u001b[53;210H5\u001b[49;49H" - ], - [ - 0.032594, - "\u001b[53;210H6\u001b[49;50H" - ], - [ - 0.02764, - "\u001b[53;210H7\u001b[49;51H" - ], - [ - 0.034964, - "\u001b[53;210H8\u001b[49;52H" - ], - [ - 0.026422, - "\u001b[53;210H9\u001b[49;53H" - ], - [ - 0.032607, - "\u001b[53;209H50\u001b[49;54H" - ], - [ - 0.028623, - "\u001b[53;210H1\u001b[49;55H" - ], - [ - 0.028244, - "\u001b[53;210H2\u001b[49;56H" - ], - [ - 0.033991, - "\u001b[53;210H3\u001b[49;57H" - ], - [ - 0.032985, - "\u001b[53;210H4\u001b[49;58H" - ], - [ - 0.027615, - "\u001b[53;210H5\u001b[49;59H" - ], - [ - 0.028609, - "\u001b[53;210H6\u001b[49;60H" - ], - [ - 0.02978, - "\u001b[53;210H7\u001b[49;61H" - ], - [ - 0.030592, - "\u001b[53;210H8\u001b[49;62H" - ], - [ - 0.030011, - "\u001b[53;210H9\u001b[49;63H" - ], - [ - 0.031518, - "\u001b[53;209H60\u001b[49;64H" - ], - [ - 0.030297, - "\u001b[53;210H1\u001b[49;65H" - ], - [ - 0.029334, - "\u001b[53;210H2\u001b[49;66H" - ], - [ - 0.031119, - "\u001b[53;210H3\u001b[49;67H" - ], - [ - 0.027634, - "\u001b[53;210H4\u001b[49;68H" - ], - [ - 0.031088, - "\u001b[53;210H5\u001b[49;69H" - ], - [ - 0.03047, - "\u001b[53;210H6\u001b[49;70H" - ], - [ - 0.03291, - "\u001b[53;210H7\u001b[49;71H" - ], - [ - 0.029259, - "\u001b[53;210H8\u001b[49;72H" - ], - [ - 0.034775, - "\u001b[53;210H9\u001b[49;73H" - ], - [ - 0.026392, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[1m\u001b[31m\u001b[106m(\u001b[10C)\u001b[m\u001b[93m\u001b[107m\u001b[53;209H\u001b[38;5;22m\u001b[48;5;252m70\u001b[49;74H\u001b[?12l\u001b[?25h" - ], - [ - 0.031136, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36m(\u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[33mm\u001b[m\u001b[93m\u001b[107m\u001b[9C\u001b[36m) \u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;252m1\u001b[49;75H\u001b[?12l\u001b[?25h" - ], - [ - 0.02956, - "\u001b[53;210H2\u001b[49;76H" - ], - [ - 0.029258, - "\u001b[53;210H3\u001b[49;77H" - ], - [ - 0.032617, - "\u001b[53;210H4\u001b[49;78H" - ], - [ - 0.02963, - "\u001b[53;210H5\u001b[49;79H" - ], - [ - 0.027516, - "\u001b[53;210H6\u001b[49;80H" - ], - [ - 0.031034, - "\u001b[53;210H7\u001b[49;81H" - ], - [ - 0.0348, - "\u001b[53;210H8\u001b[49;82H" - ], - [ - 0.026686, - "\u001b[53;210H9\u001b[49;83H" - ], - [ - 0.031977, - "\u001b[53;209H80\u001b[49;84H" - ], - [ - 0.032521, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[49;74H\u001b[1m\u001b[31m\u001b[106m(\u001b[10C)\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;252m1\u001b[49;85H\u001b[?12l\u001b[?25h" - ], - [ - 0.027602, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[49;74H\u001b[36m(\u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[33mm\u001b[m\u001b[93m\u001b[107m\u001b[9C\u001b[36m) \u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;252m2\u001b[49;86H\u001b[?12l\u001b[?25h" - ], - [ - 0.144764, - "\u001b[53;210H3\u001b[49;87H" - ], - [ - 0.167503, - "\u001b[53;210H4\u001b[49;88H" - ], - [ - 0.165071, - "\u001b[53;210H5\u001b[49;89H" - ], - [ - 0.254279, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mne or more containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[49;153H\u001b[K\u001b[53;50H\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[53;54H \u001b[49;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.501147, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36me or more containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[49;152H\u001b[K\u001b[49;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.019148, - "\u001b[?25l\u001b[36m or more containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[49;151H\u001b[K\u001b[49;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.032617, - "\u001b[?25l\u001b[36mor more containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[49;150H\u001b[K\u001b[49;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.031692, - "\u001b[?25l\u001b[36mr more containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[49;149H\u001b[K\u001b[49;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.030868, - "\u001b[?25l\u001b[36m more containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[49;148H\u001b[K\u001b[49;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.03056, - "\u001b[?25l\u001b[36mmore containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[49;147H\u001b[K\u001b[49;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.03168, - "\u001b[?25l\u001b[36more containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[49;146H\u001b[K\u001b[49;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.027805, - "\u001b[?25l\u001b[36mre containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[49;145H\u001b[K\u001b[49;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.031902, - "\u001b[?25l\u001b[36me containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[49;144H\u001b[K\u001b[49;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.283191, - "\u001b[?25l\u001b[36m containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[49;143H\u001b[K\u001b[49;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.178515, - "\u001b[?25l\u001b[36mcontainers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[49;142H\u001b[K\u001b[49;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.38466, - "\u001b[53;210H\u001b[38;5;22m\u001b[48;5;252m6\u001b[49;90H" - ], - [ - 0.501961, - "\u001b[53;210H7\u001b[49;91H" - ], - [ - 0.025949, - "\u001b[53;210H8\u001b[49;92H" - ], - [ - 0.029349, - "\u001b[53;210H9\u001b[49;93H" - ], - [ - 0.031181, - "\u001b[53;209H90\u001b[49;94H" - ], - [ - 0.030544, - "\u001b[53;210H1\u001b[49;95H" - ], - [ - 0.030634, - "\u001b[53;210H2\u001b[49;96H" - ], - [ - 0.030484, - "\u001b[53;210H3\u001b[49;97H" - ], - [ - 0.033104, - "\u001b[53;210H4\u001b[49;98H" - ], - [ - 0.024166, - "\u001b[53;210H5\u001b[49;99H" - ], - [ - 0.032752, - "\u001b[53;210H6\u001b[49;100H" - ], - [ - 0.030921, - "\u001b[53;210H7\u001b[49;101H" - ], - [ - 0.517314, - "\u001b[53;210H6\u001b[49;100H" - ], - [ - 3.312677, - "\u001b[53;210H7\u001b[49;101H" - ], - [ - 0.50269, - "\u001b[53;210H8\u001b[49;102H" - ], - [ - 0.030313, - "\u001b[53;210H9\u001b[49;103H" - ], - [ - 0.024339, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;175H\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;181H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;189H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;194H\u001b[38;5;107m\u001b[48;5;240m \u001b[1C54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;201H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;203H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:100\u001b[49;104H" - ], - [ - 0.033592, - "\u001b[53;210H1\u001b[49;105H" - ], - [ - 0.031721, - "\u001b[53;210H2\u001b[49;106H" - ], - [ - 0.02682, - "\u001b[53;210H3\u001b[49;107H" - ], - [ - 0.03135, - "\u001b[53;210H4\u001b[49;108H" - ], - [ - 0.029141, - "\u001b[53;210H5\u001b[49;109H" - ], - [ - 0.03261, - "\u001b[53;210H6\u001b[49;110H" - ], - [ - 0.028367, - "\u001b[53;210H7\u001b[49;111H" - ], - [ - 0.028863, - "\u001b[53;210H8\u001b[49;112H" - ], - [ - 0.032551, - "\u001b[53;210H9\u001b[49;113H" - ], - [ - 0.02896, - "\u001b[53;209H10\u001b[49;114H" - ], - [ - 0.029171, - "\u001b[53;210H1\u001b[49;115H" - ], - [ - 0.032167, - "\u001b[53;210H2\u001b[49;116H" - ], - [ - 0.029809, - "\u001b[53;210H3\u001b[49;117H" - ], - [ - 0.025445, - "\u001b[53;210H4\u001b[49;118H" - ], - [ - 0.020289, - "\u001b[53;210H3\u001b[49;117H" - ], - [ - 0.501457, - "\u001b[53;210H2\u001b[49;116H" - ], - [ - 0.033753, - "\u001b[53;210H1\u001b[49;115H" - ], - [ - 0.030371, - "\u001b[53;210H0\u001b[49;114H" - ], - [ - 0.026993, - "\u001b[53;209H09\u001b[49;113H" - ], - [ - 0.030967, - "\u001b[53;210H8\u001b[49;112H" - ], - [ - 0.026829, - "\u001b[53;210H7\u001b[49;111H" - ], - [ - 0.032439, - "\u001b[53;210H6\u001b[49;110H" - ], - [ - 0.03057, - "\u001b[53;210H5\u001b[49;109H" - ], - [ - 0.031109, - "\u001b[53;210H4\u001b[49;108H" - ], - [ - 0.032679, - "\u001b[53;210H3\u001b[49;107H" - ], - [ - 0.033994, - "\u001b[53;210H2\u001b[49;106H" - ], - [ - 0.025439, - "\u001b[53;210H1\u001b[49;105H" - ], - [ - 0.032603, - "\u001b[53;210H0\u001b[49;104H" - ], - [ - 0.028393, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;175H\u001b[38;5;231m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;196H\u001b[38;5;107m\u001b[48;5;240m 54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\b 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:99\u001b[49;103H" - ], - [ - 0.136603, - "\u001b[53;210H8\u001b[49;102H" - ], - [ - 0.1836, - "\u001b[53;210H7\u001b[49;101H" - ], - [ - 0.185079, - "\u001b[53;210H6\u001b[49;100H" - ], - [ - 0.383613, - "\u001b[53;210H5\u001b[49;99H" - ], - [ - 0.161001, - "\u001b[53;210H4\u001b[49;98H" - ], - [ - 0.669446, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36m are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[49;141H\u001b[K\u001b[49;98H\u001b[?12l\u001b[?25h" - ], - [ - 0.586565, - "\u001b[?25l\u001b[54;1H\u001b[34m-- INSERT --\u001b[m\u001b[93m\u001b[107m\u001b[54;13H\u001b[K" - ], - [ - 0.043535, - "\u001b[53;1H\u001b[1m\u001b[38;5;23m\u001b[48;5;231m INSERT \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[m\u001b[93m\u001b[107m\u001b[53;9H\u001b[38;5;231m\u001b[48;5;31m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m\u001b[53;12H kpod-format-table \u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;31m\u001b[53;32H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;31mrmi.go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;220m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;220m\u001b[48;5;31m M\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;31m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[m\u001b[93m\u001b[107m\u001b[53;53H\u001b[38;5;31m\u001b[48;5;24m\u001b[53;54H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;24m                                                                                                                         \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[" - ], - [ - 2.9e-05, - "38;5;117m\u001b[48;5;24m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;186m\u001b[48;5;31m  54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;24m\u001b[48;5;117m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;117m:94 \u001b[49;98H\u001b[?12l\u001b[?25h" - ], - [ - 0.189046, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[49;99H\u001b[?12l\u001b[?25h" - ], - [ - 1.150929, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m are using its reference image\u001b[36m\", id, ctrID)\u001b[50;5H }\u001b[51;5H }\u001b[52;5H }\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[49;100H\u001b[?12l\u001b[?25h" - ], - [ - 0.222856, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m% are using its reference image\u001b[36m\", id, ctrID)\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[49;101H\u001b[?12l\u001b[?25h" - ], - [ - 0.508774, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mq are using its reference image\u001b[36m\", id, ctrID)\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[49;102H\u001b[?12l\u001b[?25h" - ], - [ - 0.429575, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36m\" are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[50;5H }\u001b[51;5H }\u001b[52;5H }\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m9\u001b[49;103H\u001b[?12l\u001b[?25h" - ], - [ - 0.293573, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[53;175H\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;181H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;189H\u001b[38;5;117m\u001b[48;5;24m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;194H\u001b[38;5;186m\u001b[48;5;31m \u001b[1C54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[53;201H\u001b[38;5;24m\u001b[48;5;117m \u001b[53;203H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:100\u001b[49;104H\u001b[?12l\u001b[?25h" - ], - [ - 1.664414, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[54;1H\u001b[K" - ], - [ - 0.007242, - "\u001b[53;1H\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;31m\u001b[m\u001b[93m\u001b[107m\u001b[53;9H\u001b[38;5;148m\u001b[48;5;240m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[53;12H kpod-format-table \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[53;32H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mrmi.go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;220m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;220m\u001b[48;5;240m M\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[m\u001b[93m\u001b[107m\u001b[53;53H\u001b[38;5;240m\u001b[48;5;236m\u001b[53;54H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                         \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[10" - ], - [ - 3.7e-05, - "7m\u001b[53;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m6\u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:99 \u001b[49;103H\u001b[?12l\u001b[?25h" - ], - [ - 0.497524, - "\u001b[?25l\u001b[54;1H\u001b[m\u001b[93m\u001b[107m:\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.127272, - "q\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.320956, - "!\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 1.072551, - "\r" - ], - [ - 0.015046, - "\u001b[?25l\u001b[?2004l\u001b[54;1H\u001b[K\u001b[54;1H\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.002419, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.020555, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table* \u001b[39m \u001b[33m22s\u001b[39m\r\n" - ], - [ - 0.001416, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 7.6e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 3.1e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000124, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 4.1e-05, - "\u001b[?1h\u001b=" - ], - [ - 3.2e-05, - "\u001b[?2004h" - ], - [ - 1.279799, - "g" - ], - [ - 0.167996, - "\bgi" - ], - [ - 0.128101, - "t" - ], - [ - 0.21601, - " " - ], - [ - 0.416115, - "s" - ], - [ - 0.11937, - "t" - ], - [ - 0.160387, - "a" - ], - [ - 0.128023, - "t" - ], - [ - 0.168159, - "u" - ], - [ - 0.127468, - "s" - ], - [ - 0.136345, - "\u001b[?1l\u001b>" - ], - [ - 0.000192, - "\u001b[?2004l\r\r\n" - ], - [ - 0.004674, - "\u001b]2;git status\u0007\u001b]1;git\u0007" - ], - [ - 0.017951, - "On branch kpod-format-table\r\nChanges not staged for commit:\r\n (use \"git add ...\" to update what will be committed)\r\n (use \"git checkout -- ...\" to discard changes in working directory)\r\n\r\n" - ], - [ - 3.6e-05, - "\t\u001b[31mmodified: cmd/kpod/images.go\u001b[m\r\n\t\u001b[31mmodified: cmd/kpod/rmi.go\u001b[m\r\n\r\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\r\n" - ], - [ - 0.000309, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.024514, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table* \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001388, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000102, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 1.7e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 7.7e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 7.1e-05, - "\u001b[?1h\u001b=" - ], - [ - 3.3e-05, - "\u001b[?2004h" - ], - [ - 10.906, - "e" - ], - [ - 0.233197, - "\bex" - ], - [ - 0.342482, - "\b\be \b" - ], - [ - 0.189249, - "\b \b" - ], - [ - 56220.893544, - "\u001b[?1l\u001b>" - ], - [ - 4.1e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.001035, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.020391, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table* \u001b[39m \u001b[33m56232s\u001b[39m\r\n" - ], - [ - 0.000897, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000111, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.9e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000461, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m " - ], - [ - 1.5e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 5.1e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.9e-05, - "\u001b[?2004h" - ], - [ - 5.901847, - "g" - ], - [ - 0.160227, - "\bgi" - ], - [ - 0.104667, - "t" - ], - [ - 0.055222, - " " - ], - [ - 0.127953, - "d" - ], - [ - 0.11279, - "i" - ], - [ - 0.078928, - "f" - ], - [ - 0.153039, - "f" - ], - [ - 0.1441, - "\u001b[?1l\u001b>" - ], - [ - 0.000244, - "\u001b[?2004l\r\r\n" - ], - [ - 0.005357, - "\u001b]2;git diff\u0007\u001b]1;git\u0007" - ], - [ - 0.005163, - "\u001b[?1049h\u001b[?1h\u001b=\r" - ], - [ - 0.003303, - "\u001b[1mdiff --git a/cmd/kpod/images.go b/cmd/kpod/images.go\u001b[m\u001b[m\r\n\u001b[1mindex 593c2b27..d6f2bda1 100644\u001b[m\u001b[m\r\n\u001b[1m--- a/cmd/kpod/images.go\u001b[m\u001b[m\r\n\u001b[1m+++ b/cmd/kpod/images.go\u001b[m\u001b[m\r\n\u001b[36m@@ -120,7 +120,7 @@\u001b[m \u001b[mfunc genImagesFormat(quiet, truncate, digests bool) (format string) {\u001b[m\u001b[m\r\n format += \"{{ .Name | printf \\\"%-56s\\\" }} \"\u001b[m\u001b[m\r\n \u001b[m\u001b[m\r\n if digests {\u001b[m\u001b[m\r\n\u001b[31m- format += \"{{ .DIGEST | printf \\\"%-71s \\\"}} \"\u001b[m\u001b[m\r\n\u001b[32m+\u001b[m \u001b[32mformat += \"{{ .Digest | printf \\\"%-71s \\\"}} \"\u001b[m\u001b[m\r\n }\u001b[m\u001b[m\r\n \u001b[m\u001b[m\r\n format += \"{{ .CreatedAt | printf \\\"%-22s\\\" }} {{.Size}}\"\u001b[m\u001b[m\r\n\u001b[1mdiff --git a/cmd/kpod/rmi.go b/cmd/kpod/rmi.go\u001b[m\u001b[m\r\n\u001b[1mindex c7752fc1..a8da7da6 100644\u001b[m\u001b[m\r\n\u001b[1m--- a/cmd/kpod/rmi.go\u001b[m\u001b[m\r\n\u001b[1m+++ b/cmd/kpod/rmi.go\u001b[m\u001b[m\r\n\u001b[36m@@ -63,7 +63,7 @@\u001b[m \u001b[mfunc rmiCmd(c *cli.Context) error {\u001b[m\u001b[m\r\n removeContainers(ctrIDs, store)\u001b[m\u001b[m\r\n } else {\u001b[m\u001b[m\r\n " - ], - [ - 2.9e-05, - " " - ], - [ - 0.000128, - " for ctrID := range ctrIDs {\u001b[m\u001b[m\r\n\u001b[31m- return fmt.Errorf(\"Could not remove image %q (must force) - container %q is using its reference image\", id, ctrID)\u001b[m\u001b[m\r\n\u001b[32m+\u001b[m \u001b[32mreturn fmt.Errorf(\"Could not remove image %q (must force) - one or more containers are using its reference image\", id, ctrID)\u001b[m\u001b[m\r\n }\u001b[m\u001b[m\r\n }\u001b[m\u001b[m\r\n }\u001b[m\u001b[m\r\n" - ], - [ - 2.2e-05, - "\u001b[7m(END)\u001b[27m\u001b[K" - ], - [ - 3.085748, - "\r\u001b[K\u001b[?1l\u001b>\u001b[?1049l" - ], - [ - 0.001753, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.026198, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table* \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.00165, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000111, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 1.8e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 9e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.8e-05, - "\u001b[?1h\u001b=" - ], - [ - 4.6e-05, - "\u001b[?2004h" - ], - [ - 0.198452, - "g" - ], - [ - 0.095541, - "\bgi" - ], - [ - 0.120141, - "t" - ], - [ - 0.087239, - " " - ], - [ - 0.295807, - "r" - ], - [ - 0.124741, - "e" - ], - [ - 0.107908, - "s" - ], - [ - 0.136109, - "e" - ], - [ - 0.099662, - "t" - ], - [ - 0.123811, - " " - ], - [ - 0.112331, - "-" - ], - [ - 0.143709, - "-" - ], - [ - 0.220177, - "h" - ], - [ - 0.084927, - "a" - ], - [ - 0.050956, - "r" - ], - [ - 0.116765, - "d" - ], - [ - 0.042884, - " " - ], - [ - 0.239721, - "H" - ], - [ - 0.068192, - "E" - ], - [ - 0.148337, - "A" - ], - [ - 0.280701, - "D\u001b[1m \u001b[0m" - ], - [ - 0.689919, - "\b\u001b[0m \b\u001b[?1l\u001b>\u001b[?2004l\r\r\n" - ], - [ - 0.004057, - "\u001b]2;git reset --hard HEAD\u0007\u001b]1;git\u0007" - ], - [ - 0.023549, - "HEAD is now at 99495909 Make kpod images use text/template by default\r\n" - ], - [ - 0.000466, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.027615, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001079, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 9.4e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 1.6e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 8.1e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.7e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.3e-05, - "\u001b[?2004h" - ], - [ - 0.377121, - "v" - ], - [ - 0.083308, - "\bvi" - ], - [ - 0.079468, - " " - ], - [ - 0.080413, - "c" - ], - [ - 0.088276, - "m" - ], - [ - 0.144748, - "d\u001b[1m/\u001b[0m" - ], - [ - 0.074972, - "\b\u001b[0m/k" - ], - [ - 0.152342, - "pod\u001b[1m/\u001b[0m" - ], - [ - 0.396108, - "\b\u001b[0m/i" - ], - [ - 0.079857, - "m" - ], - [ - 0.074579, - "ages.go\u001b[1m \u001b[0m" - ], - [ - 0.548619, - "\b\u001b[0m \b" - ], - [ - 0.000101, - "\u001b[?1l\u001b>" - ], - [ - 0.000148, - "\u001b[?2004l\r\r\n" - ], - [ - 0.001987, - "\u001b]2;vim cmd/kpod/images.go\u0007\u001b]1;vi\u0007" - ], - [ - 0.161796, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000788, - "\u001b[1;54r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[54;1H\"cmd/kpod/images.go\"" - ], - [ - 7.9e-05, - " 203L, 4796C" - ], - [ - 0.011442, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H\u001b[>c" - ], - [ - 0.008169, - "\u001b[1;1H\u001b[96m\u001b[47m152 \u001b[m\u001b[93m\u001b[107m\u001b[12CName: name,\r\n\u001b[96m\u001b[47m153 \u001b[m\u001b[93m\u001b[107m\u001b[12CDigest: imageDigest,\r\n\u001b[96m\u001b[47m154 \u001b[m\u001b[93m\u001b[107m\u001b[12CCreatedAt: createdTime.Format(\u001b[36m\"Jan 2, 2006 15:04\"\u001b[m\u001b[93m\u001b[107m),\r\n\u001b[96m\u001b[47m155 \u001b[m\u001b[93m\u001b[107m\u001b[12CSize: libkpodimage.FormattedSize(size),\r\n\u001b[96m\u001b[47m156 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m157 \u001b[m\u001b[93m\u001b[107m\u001b[8CimageOutput = \u001b[32mappend\u001b[m\u001b[93m\u001b[107m(imageOutput, params)\r\n\u001b[96m\u001b[47m158 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m159 \r\n160 \u001b[m\u001b[93m\u001b[107m \u001b[32mvar\u001b[m\u001b[93m\u001b[107m out formats.Writer\r\n\u001b[96m\u001b[47m161 \r\n162 \u001b[m\u001b[93m\u001b[107m \u001b[32mswitch\u001b[m\u001b[93m\u001b[107m outputFormat {\r\n\u001b[96m\u001b[47m163 \u001b[m\u001b[93m\u001b[107m \u001b[32mcase\u001b[m\u001b[93m\u001b[107m \u001b[36m\"json\"\u001b[m\u001b[93m\u001b[107m:\r\n\u001b[96m\u001b[47m164 \u001b[m\u001b[93m\u001b[107m\u001b[8Cout = formats.JSONstruct{Output: toGeneric(imageOutput)}\r\n\u001b[96m\u001b[47m165 \u001b[m\u001b[93m\u001b[107m \u001b[32mdefault\u001b[m\u001b[93m\u001b[107m:\r\n\u001b[96m\u001b[47m166 \u001b[m\u001b[93m\u001b[107m\u001b[8Cout = formats.StdoutTemplate{Output: toGeneric(imageOutput), Template: outputFormat, Fields: imageOutput[\u001b[36m0\u001b[m\u001b[93m\u001b[107m].header" - ], - [ - 3.1e-05, - "Map()}\r\n\u001b[96m\u001b[47m167 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m168 \r\n169 \u001b[m\u001b[93m\u001b[107m formats.Writer(out).Out()\r\n\u001b[96m\u001b[47m170 \r\n171 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m172 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m173 \r\n174 \u001b[m\u001b[93m\u001b[107m\u001b[32mtype\u001b[m\u001b[93m\u001b[107m imageOutputParams \u001b[32mstruct\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m175 \u001b[m\u001b[93m\u001b[107m ID\u001b[8C\u001b[33mstring\u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[36m`json:\"id\"`\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m176 \u001b[m\u001b[93m\u001b[107m Name \u001b[33mstring\u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[36m`json:\"names\"`\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m177 \u001b[m\u001b[93m\u001b[107m Digest digest.Digest \u001b[36m`json:\"digest\"`\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m178 \u001b[m\u001b[93m\u001b[107m CreatedAt \u001b[33mstring\u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[36m`json:\"created\"`\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m179 \u001b[m\u001b[93m\u001b[107m Size \u001b[33mstring\u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[36m`json:\"size\"`\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m180 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m181 \r\n182 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m toGeneric(params []imageOutputParams) []\u001b[32minterface\u001b[m\u001b[93m\u001b[107m{} {\r\n" - ], - [ - 0.034447, - "\u001b[96m\u001b[47m183 \u001b[m\u001b[93m\u001b[107m genericParams := \u001b[32mmake\u001b[m\u001b[93m\u001b[107m([]\u001b[32minterface\u001b[m\u001b[93m\u001b[107m{}, \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(params))\r\n\u001b[96m\u001b[47m184 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m i, v := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m params {\r\n\u001b[96m\u001b[47m185 \u001b[m\u001b[93m\u001b[107m\u001b[8CgenericParams[i] = \u001b[32minterface\u001b[m\u001b[93m\u001b[107m{}(v)\r\n\u001b[96m\u001b[47m186 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m187 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m genericParams\r\n\u001b[96m\u001b[47m188 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m189 \r\n190 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (i *imageOutputParams) headerMap() \u001b[33mmap\u001b[m\u001b[93m\u001b[107m[\u001b[33mstring\u001b[m\u001b[93m\u001b[107m]\u001b[33mstring\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m191 \u001b[m\u001b[93m\u001b[107m v := reflect.Indirect(reflect.ValueOf(i))\r\n\u001b[96m\u001b[47m192 \u001b[m\u001b[93m\u001b[107m values := \u001b[32mmake\u001b[m\u001b[93m\u001b[107m(\u001b[33mmap\u001b[m\u001b[93m\u001b[107m[\u001b[33mstring\u001b[m\u001b[93m\u001b[107m]\u001b[33mstring\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m193 \r\n194 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m i := \u001b[36m0\u001b[m\u001b[93m\u001b[107m; i < v.NumField(); i++ {\r\n\u001b[96m\u001b[47m195 \u001b[m\u001b[93m\u001b[107m\u001b[8Ckey := v.Type().Field(i).Na" - ], - [ - 5.7e-05, - "me\r\n\u001b[96m\u001b[47m196 \u001b[m\u001b[93m\u001b[107m\u001b[8Cvalue := key\r\n\u001b[96m\u001b[47m197 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m value == \u001b[36m\"ID\"\u001b[m\u001b[93m\u001b[107m || value == \u001b[36m\"Name\"\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m198 \u001b[m\u001b[93m\u001b[107m\u001b[12Cvalue = \u001b[36m\"Image\"\u001b[m\u001b[93m\u001b[107m + value\r\n\u001b[96m\u001b[47m199 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m200 \u001b[m\u001b[93m\u001b[107m\u001b[8Cvalues[key] = fmt.Sprintf(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[31m%s\u001b[m\u001b[93m\u001b[107m\u001b[36m \"\u001b[m\u001b[93m\u001b[107m, strings.ToUpper(splitCamelCase(value)))\r\n\u001b[96m\u001b[47m201 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m202 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m values\r\n\u001b[96m\u001b[47m203 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[53;12H kpod-format-table \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[53;32H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mimages.go \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[53;53H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m               " - ], - [ - 0.01263, - "                                                                                                           \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  87%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m177\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5  \u001b[26;9H\u001b[?12l\u001b[?25h" - ], - [ - 2.3e-05, - "\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 0.07219, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[54;1H\u001b[K\u001b[54;1H/" - ], - [ - 6.3e-05, - "\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.376099, - "D" - ], - [ - 8.8e-05, - "\u001b[?25l" - ], - [ - 0.008132, - "\u001b[26;26H\u001b[7m\u001b[91mD\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[53;2H\u001b[1m\u001b[38;5;22m\u001b[48;5;148mCOMMND \u001b[m\u001b[93m\u001b[107m\u001b[200C\u001b[38;5;22m\u001b[48;5;252m22\r\n\u001b[m\u001b[93m\u001b[107m/D" - ], - [ - 6.3e-05, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.127597, - "I" - ], - [ - 6e-05, - "\u001b[?25l" - ], - [ - 0.001462, - "\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[1;1H\u001b[96m\u001b[47m 98 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 99 \u001b[m\u001b[93m\u001b[107m } \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m100 \u001b[m\u001b[93m\u001b[107m\u001b[8Cparams = \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m101 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m102 \r\n103 \u001b[m\u001b[93m\u001b[107m imageList, err := libkpodimage.GetImagesMatchingFilter(store, params, name)\r\n\u001b[96m\u001b[47m104 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m105 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"could not get list of images matching filter\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m106 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m107 \r\n108 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m outputImages(store, imageList, truncate, digests, quiet, outputFormat, noheading)\r\n\u001b[96m\u001b[47m109 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m110 \r\n111 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m genImagesFormat(quiet, truncate, digests \u001b[33mbool\u001b[m\u001b[93m\u001b[107m) (format \u001b[33mstring\u001b[m\u001b[93m\u001b[107m) {\r\n\u001b[96m\u001b[47m112 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m quiet {\r\n\u001b[96m\u001b[" - ], - [ - 1.7e-05, - "47m113 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36m\"{{.ID}}\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m114 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m115 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m truncate {\r\n\u001b[96m\u001b[47m116 \u001b[m\u001b[93m\u001b[107m\u001b[8Cformat = \u001b[36m\"table {{ .ID | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-20.12s\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m }} \"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m117 \u001b[m\u001b[93m\u001b[107m } \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m118 \u001b[m\u001b[93m\u001b[107m\u001b[8Cformat = \u001b[36m\"table {{ .ID | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-64s\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m }} \"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m119 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m120 \u001b[m\u001b[93m\u001b[107m format += \u001b[36m\"{{ .Name | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-56s\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m }} \"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m121 \r\n122 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m digests {\r\n\u001b[96m\u001b[47m123 \u001b[m\u001b[93m\u001b[107m\u001b[8Cformat += \u001b[36m\"{{ .\u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[91mDI\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[36mGEST | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m}} \"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m124 \u001b[m\u001b[93m\u001b[107m }\r\n" - ], - [ - 0.006692, - "\u001b[96m\u001b[47m125 \r\n126 \u001b[m\u001b[93m\u001b[107m format += \u001b[36m\"{{ .CreatedAt | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-22s\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m }} {{.Size}}\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m127 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m128 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m129 \r\n130 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m outputImages(store storage.Store, images []storage.Image, truncate, digests, quiet \u001b[33mbool\u001b[m\u001b[93m\u001b[107m, outputFormat \u001b[33mstring\u001b[m\u001b[93m\u001b[107m, noheading \u001b[33mbool\u001b[m\u001b[93m\u001b[107m) \u001b[33merror\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m131 \u001b[m\u001b[93m\u001b[107m imageOutput := []imageOutputParams{}\r\n\u001b[96m\u001b[47m132 \r\n133 \u001b[m\u001b[93m\u001b[107m lastID := \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m134 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, img := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m images {\r\n\u001b[96m\u001b[47m135 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m quiet && lastID == img.ID {\r\n\u001b[96m\u001b[47m136 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mcontinue\u001b[m\u001b[93m\u001b[107m \u001b[96m// quiet should not show the same ID multiple times\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m137 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m138 \u001b[m\u001b[" - ], - [ - 3e-05, - "93m\u001b[107m\u001b[8CcreatedTime := img.Created\r\n\u001b[96m\u001b[47m139 \r\n140 \u001b[m\u001b[93m\u001b[107m\u001b[8Cname := \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m141 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(img.Names) > \u001b[36m0\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m142 \u001b[m\u001b[93m\u001b[107m\u001b[12Cname = img.Names[\u001b[36m0\u001b[m\u001b[93m\u001b[107m]\r\n\u001b[96m\u001b[47m143 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m144 \r\n145 \u001b[m\u001b[93m\u001b[107m\u001b[8Cinfo, imageDigest, size, _ := libkpodimage.InfoAndDigestAndSize(store, img)\r\n\u001b[96m\u001b[47m146 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m info != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m147 \u001b[m\u001b[93m\u001b[107m\u001b[12CcreatedTime = info.Created\r\n\u001b[96m\u001b[47m148 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m149 \u001b[m\u001b[93m\u001b[107m\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m COMMND \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[53;12H kpod-format-table \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[53;32H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mimages.go \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[53;53H" - ], - [ - 6.1e-05, - " \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                          \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  61%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m123\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:24 \u001b[m\u001b[93m\u001b[107m\u001b[54;1H/DI\u001b[?12l\u001b[?25h" - ], - [ - 0.104778, - "G\u001b[?25l" - ], - [ - 0.004039, - "\u001b[26;30H\u001b[7m\u001b[91mG\u001b[54;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.202824, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mE\u001b[?25l" - ], - [ - 0.005173, - "\u001b[26;31H\u001b[7m\u001b[91mE\u001b[54;6H\u001b[?12l\u001b[?25h" - ], - [ - 0.122869, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mS\u001b[?25l" - ], - [ - 0.005278, - "\u001b[26;32H\u001b[7m\u001b[91mS\u001b[54;7H\u001b[?12l\u001b[?25h" - ], - [ - 0.090915, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mT\u001b[?25l" - ], - [ - 0.005887, - "\u001b[26;33H\u001b[7m\u001b[91mT\u001b[54;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.154865, - "\r\u001b[?25l\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[31msearch hit BOTTOM, continuing at TOP" - ], - [ - 0.001958, - "\u001b[m\u001b[93m\u001b[107m\u001b[26;28H\u001b[7m\u001b[33mDIGEST" - ], - [ - 0.0027, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;2H\u001b[1m\u001b[38;5;22m\u001b[48;5;148mNORMAL \u001b[26;28H\u001b[?12l\u001b[?25h" - ], - [ - 0.713596, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;252m5\u001b[26;29H" - ], - [ - 0.44085, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36mDGEST | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m}} \"\u001b[m\u001b[93m\u001b[107m\u001b[26;57H\u001b[K\u001b[53;51H\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[53;55H \u001b[26;29H\u001b[?12l\u001b[?25h" - ], - [ - 0.166708, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mEST | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m}} \"\u001b[m\u001b[93m\u001b[107m\u001b[26;56H\u001b[K\u001b[26;29H\u001b[?12l\u001b[?25h" - ], - [ - 0.169515, - "\u001b[?25l\u001b[36mST | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m}} \"\u001b[m\u001b[93m\u001b[107m\u001b[26;55H\u001b[K\u001b[26;29H\u001b[?12l\u001b[?25h" - ], - [ - 0.174197, - "\u001b[?25l\u001b[36mT | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m}} \"\u001b[m\u001b[93m\u001b[107m\u001b[26;54H\u001b[K\u001b[26;29H\u001b[?12l\u001b[?25h" - ], - [ - 0.401145, - "\u001b[?25l\u001b[36m | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m}} \"\u001b[m\u001b[93m\u001b[107m\u001b[26;53H\u001b[K\u001b[26;29H\u001b[?12l\u001b[?25h" - ], - [ - 0.176906, - "\u001b[?25l\u001b[54;1H\u001b[34m--\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[31ma\u001b[m\u001b[93m\u001b[107m\b\u001b[34m INSERT\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[31mt\u001b[m\u001b[93m\u001b[107m\b\u001b[34m --\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[31mO\u001b[m\u001b[93m\u001b[107m\u001b[54;13H\u001b[K" - ], - [ - 0.042519, - "\u001b[53;1H\u001b[1m\u001b[38;5;23m\u001b[48;5;231m INSERT \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[m\u001b[93m\u001b[107m\u001b[53;9H\u001b[38;5;231m\u001b[48;5;31m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m\u001b[53;12H kpod-format-table \u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;31m\u001b[53;32H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;31mimages.go\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;220m\u001b[48;5;31m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[m\u001b[93m\u001b[107m\u001b[53;54H\u001b[38;5;31m\u001b[48;5;24m\u001b[53;55H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;24m                                                                                                                        \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;117m\u001b[48;5;24m go\u001b[m\u001b[93m\u001b[" - ], - [ - 3.8e-05, - "107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;186m\u001b[48;5;31m  61%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;24m\u001b[48;5;117m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m123\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;117m:25 \u001b[26;29H\u001b[?12l\u001b[?25h" - ], - [ - 0.163842, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mg | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m} \"\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[26;30H\u001b[?12l\u001b[?25h" - ], - [ - 0.172451, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36me | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m} \"\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[26;31H\u001b[?12l\u001b[?25h" - ], - [ - 0.331326, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m}} \"\u001b[m\u001b[93m\u001b[107m\u001b[26;54H\u001b[K\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[26;30H\u001b[?12l\u001b[?25h" - ], - [ - 0.13664, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m}} \"\u001b[m\u001b[93m\u001b[107m\u001b[26;53H\u001b[K\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[26;29H\u001b[?12l\u001b[?25h" - ], - [ - 0.177579, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mi | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m} \"\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[26;30H\u001b[?12l\u001b[?25h" - ], - [ - 0.174307, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mg | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m} \"\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[26;31H\u001b[?12l\u001b[?25h" - ], - [ - 0.131684, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36me | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m} \"\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[26;32H\u001b[?12l\u001b[?25h" - ], - [ - 0.086181, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36ms | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m} \"\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m9\u001b[26;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.037497, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mt | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m} \"\u001b[m\u001b[93m\u001b[107m\u001b[53;209H\u001b[38;5;22m\u001b[48;5;117m30\u001b[26;34H\u001b[?12l\u001b[?25h" - ], - [ - 0.329898, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[54;1H\u001b[K" - ], - [ - 0.005721, - "\u001b[53;1H\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;31m\u001b[m\u001b[93m\u001b[107m\u001b[53;9H\u001b[38;5;148m\u001b[48;5;240m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[53;12H kpod-format-table \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[53;32H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mimages.go\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[m\u001b[93m\u001b[107m\u001b[53;54H\u001b[38;5;240m\u001b[48;5;236m\u001b[53;55H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                        \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;247m\u001b[48;5;236m" - ], - [ - 2.8e-05, - " go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  61%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m123\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;252m:29 \u001b[26;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.282806, - "\u001b[?25l\u001b[54;1H\u001b[m\u001b[93m\u001b[107m:\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.320108, - "w" - ], - [ - 0.00016, - "\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.09557, - "q\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.080523, - "\r\u001b[?25l\u001b[?2004l" - ], - [ - 0.015569, - "\"cmd/kpod/images.go\"" - ], - [ - 0.005889, - " 203L, 4796C written" - ], - [ - 0.015946, - "\r\r\r\n\u001b[39;49m\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.003478, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.034812, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table* \u001b[39m \u001b[33m7s\u001b[39m\r\n" - ], - [ - 0.00239, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 9.2e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.3e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000169, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D\u001b[?1h\u001b=" - ], - [ - 3.6e-05, - "\u001b[?2004h" - ], - [ - 0.906176, - "g" - ], - [ - 0.11065, - "\bgi" - ], - [ - 0.064415, - "t" - ], - [ - 0.143259, - " " - ], - [ - 0.080894, - "c" - ], - [ - 0.048032, - "o" - ], - [ - 0.103375, - "m" - ], - [ - 0.337522, - "i" - ], - [ - 0.287202, - "\b \b" - ], - [ - 0.191689, - "m" - ], - [ - 0.127496, - "i" - ], - [ - 0.096447, - "t" - ], - [ - 0.055022, - " " - ], - [ - 0.128991, - "-" - ], - [ - 0.136055, - "a" - ], - [ - 0.119988, - " " - ], - [ - 0.135881, - "-" - ], - [ - 0.159957, - "-" - ], - [ - 0.120583, - "a" - ], - [ - 0.087513, - "m" - ], - [ - 0.111928, - "e" - ], - [ - 0.104033, - "n" - ], - [ - 0.088352, - "d" - ], - [ - 0.127489, - "\u001b[?1l\u001b>" - ], - [ - 0.0001, - "\u001b[?2004l\r\r\n" - ], - [ - 0.002622, - "\u001b]2;git commit -a --amend\u0007\u001b]1;git\u0007" - ], - [ - 0.026245, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000861, - "\u001b[1;54r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[H\u001b[2J\u001b[?25l\u001b[54;1H\"~/Development/Go/src/github.com/kubernetes-incubator/cri-o/.git/COMMIT_EDITMSG\"" - ], - [ - 0.000158, - " 15L, 455C" - ], - [ - 0.00016, - "\u001b[1;1HMake kpod images use text/template by default\r\n\r\nSigned-off-by: Ryan Cole \r\n\r\n# Please enter the commit message for your changes. Lines starting\r\n# with '#' will be ignored, and an empty message aborts the commit.\r\n#\r\n# Date: Tue Aug 15 22:23:40 2017 -0400\r\n#\r\n# On branch kpod-format-table\r\n# Changes to be committed:\r\n#\u001b[7Cmodified: cmd/kpod/formats/formats.go\r\n#\u001b[7Cmodified: cmd/kpod/formats/templates.go\r\n#\u001b[7Cmodified: cmd/kpod/images.go\r\n#\r\n\u001b[94m~ \u001b[17;1H~ \u001b[18;1H~ " - ], - [ - 2e-05, - " \u001b[19;1H~ \u001b[20;1H~ \u001b[21;1H~ \u001b[22;1H~ \u001b[23;1H~ " - ], - [ - 5.1e-05, - " \u001b[24;1H~ \u001b[25;1H~ \u001b[26;1H~ \u001b[27;1H~ " - ], - [ - 1.5e-05, - " \u001b[28;1H~ \u001b[29;1H~ \u001b[30;1H~ \u001b[31;1H~ \u001b[32;1H~ " - ], - [ - 5e-05, - " \u001b[33;1H~ \u001b[34;1H~ \u001b[35;1H~ \u001b[36;1H~ \u001b[37;1H~ " - ], - [ - 1.5e-05, - " \u001b[38;1H~ \u001b[39;1H~ \u001b[40;1H~ \u001b[41;1H~ " - ], - [ - 7.1e-05, - " \u001b[42;1H~ \u001b[43;1H~ \u001b[44;1H~ \u001b[45;1H~ \u001b[46;1H~ " - ], - [ - 1.6e-05, - " \u001b[47;1H~ \u001b[48;1H~ \u001b[49;1H~ \u001b[50;1H~ \u001b[51;1H~ " - ], - [ - 1.6e-05, - " \u001b[52;1H~ \u001b[53;1H~ \u001b[1;1H\u001b[?12l\u001b[?25h" - ], - [ - 0.297423, - "\u001b[?25l\u001b[m\u001b[54;1H\u001b[K\u001b[54;1H:\u001b[?2004h" - ], - [ - 0.000258, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.143378, - "w" - ], - [ - 0.072145, - "q" - ], - [ - 0.095864, - "\r\u001b[?25l\u001b[?2004l" - ], - [ - 6e-05, - "\".git/COMMIT_EDITMSG\"" - ], - [ - 0.0116, - " 15L, 455C written\r\r\r\n\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.002475, - "[kpod-format-table ba07bfb9] Make kpod images use text/template by default\r\n Date: Tue Aug 15 22:23:40 2017 -0400\r\n" - ], - [ - 0.000465, - " 3 files changed, 36 insertions(+), 61 deletions(-)\r\n" - ], - [ - 0.000403, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.026137, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001205, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000102, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000115, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 2.9e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 7.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 2e-05, - "\u001b[?2004h" - ], - [ - 14.9661, - "g" - ], - [ - 0.136155, - "\bgi" - ], - [ - 0.079381, - "t" - ], - [ - 0.080921, - " " - ], - [ - 0.047606, - "p" - ], - [ - 0.09957, - "u" - ], - [ - 0.13683, - "s" - ], - [ - 0.083539, - "h" - ], - [ - 0.111539, - " " - ], - [ - 0.11253, - "-" - ], - [ - 0.159311, - "f" - ], - [ - 0.132344, - " " - ], - [ - 0.132514, - "o" - ], - [ - 0.144066, - "r" - ], - [ - 0.143563, - "i" - ], - [ - 0.155326, - "g" - ], - [ - 0.128262, - "i" - ], - [ - 0.112524, - "n" - ], - [ - 0.035327, - " " - ], - [ - 0.184803, - "k" - ], - [ - 0.120956, - "pod-" - ], - [ - 0.139448, - "f" - ], - [ - 0.127973, - "o" - ], - [ - 0.134993, - "rmat-table\u001b[1m \u001b[0m" - ], - [ - 0.600821, - "\b\u001b[0m \b\u001b[?1l\u001b>\u001b[?2004l\r\r\n" - ], - [ - 0.002119, - "\u001b]2;git push -f origin kpod-format-table\u0007\u001b]1;git\u0007" - ], - [ - 1.180562, - "Counting objects: 8, done.\r\n" - ], - [ - 0.000119, - "Delta compression using up to 4 threads.\r\n" - ], - [ - 4.1e-05, - "Compressing objects: 12% (1/8) \r" - ], - [ - 9.2e-05, - "Compressing objects: 25% (2/8) \r" - ], - [ - 7.4e-05, - "Compressing objects: 37% (3/8) \r" - ], - [ - 0.000131, - "Compressing objects: 50% (4/8) \r" - ], - [ - 1.4e-05, - "Compressing objects: 62% (5/8) \r" - ], - [ - 3.3e-05, - "Compressing objects: 75% (6/8) \r" - ], - [ - 2.2e-05, - "Compressing objects: 87% (7/8) \r" - ], - [ - 3.6e-05, - "Compressing objects: 100% (8/8) \r" - ], - [ - 4e-05, - "Compressing objects: 100% (8/8), done.\r\n" - ], - [ - 0.000193, - "Writing objects: 12% (1/8) \r" - ], - [ - 4.3e-05, - "Writing objects: 25% (2/8) \r" - ], - [ - 4.2e-05, - "Writing objects: 37% (3/8) \r" - ], - [ - 4.4e-05, - "Writing objects: 50% (4/8) \r" - ], - [ - 6.2e-05, - "Writing objects: 62% (5/8) \r" - ], - [ - 4e-05, - "Writing objects: 75% (6/8) \r" - ], - [ - 3.9e-05, - "Writing objects: 87% (7/8) \r" - ], - [ - 7.2e-05, - "Writing objects: 100% (8/8) \r" - ], - [ - 2.3e-05, - "Writing objects: 100% (8/8), 1.02 KiB | 1.02 MiB/s, done.\r\nTotal 8 (delta 6), reused 0 (delta 0)\r\n" - ], - [ - 0.089402, - "remote: Resolving deltas: 0% (0/6) \u001b[K\r" - ], - [ - 0.036283, - "remote: Resolving deltas: 16% (1/6) \u001b[K\rremote: Resolving deltas: 33% (2/6) \u001b[K\rremote: Resolving deltas: 50% (3/6) \u001b[K\rremote: Resolving deltas: 66% (4/6) \u001b[K\rremote: Resolving deltas: 83% (5/6) \u001b[K\rremote: Resolving deltas: 100% (6/6) \u001b[K\rremote: Resolving deltas: 100% (6/6), completed with 6 local objects.\u001b[K\r\n" - ], - [ - 1.955619, - "To github.com:14rcole/cri-o\r\n + 99495909...ba07bfb9 kpod-format-table -> kpod-format-table (forced update" - ], - [ - 7.3e-05, - ")\r\n" - ], - [ - 0.001606, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.029351, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-format-table \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001026, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 8.9e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.1e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000163, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 2e-05, - "\u001b[?2004h" - ], - [ - 330.270968, - "v" - ], - [ - 0.119343, - "\bvi" - ], - [ - 0.103605, - " " - ], - [ - 0.088799, - "t" - ], - [ - 0.080179, - "e" - ], - [ - 0.198952, - "st\u001b[1m/\u001b[0m" - ], - [ - 0.353296, - "\b\u001b[0m \b" - ], - [ - 0.499203, - "\b \b" - ], - [ - 0.02974, - "\b \b" - ], - [ - 0.031437, - "\b \b" - ], - [ - 0.029177, - "\b \b" - ], - [ - 0.030945, - "\b" - ], - [ - 0.029122, - "\b\bv \b" - ], - [ - 0.029942, - "\b \b" - ], - [ - 0.136039, - "g" - ], - [ - 0.071775, - "\bgi" - ], - [ - 0.112776, - "t" - ], - [ - 0.063244, - " " - ], - [ - 0.144384, - "c" - ], - [ - 0.055871, - "h" - ], - [ - 0.144103, - "e" - ], - [ - 0.080216, - "c" - ], - [ - 0.07079, - "k" - ], - [ - 0.112014, - "o" - ], - [ - 0.064547, - "u" - ], - [ - 0.080139, - "t" - ], - [ - 0.095908, - " " - ], - [ - 0.104077, - "k" - ], - [ - 0.138478, - "pod-" - ], - [ - 0.117535, - "s" - ], - [ - 0.128338, - "t" - ], - [ - 0.259432, - "a" - ], - [ - 0.522987, - "\u0007" - ], - [ - 0.000167, - "\r\r\n" - ], - [ - 8.2e-05, - "\u001b[J\u001b[0mkpod-start \u001b[Jkpod-stats\u001b[J\u001b[A\u001b[0m\u001b[27m\u001b[24m\u001b[39m\r\u001b[2Cgit checkout kpod-sta\u001b[K\u001b[187C\u001b[90m\u001b[39m\u001b[39m\u001b[187D" - ], - [ - 0.225726, - "t" - ], - [ - 0.239644, - "s\u001b[1m \u001b[0m" - ], - [ - 0.327637, - "\b\u001b[0m \b" - ], - [ - 0.000136, - "\u001b[?1l\u001b>" - ], - [ - 0.000445, - "\u001b[?2004l\r\r\n\u001b[J" - ], - [ - 0.004978, - "\u001b]2;git checkout kpod-stats\u0007\u001b]1;git\u0007" - ], - [ - 0.041451, - "Switched to branch 'kpod-stats'\r\n" - ], - [ - 6.6e-05, - "Your branch is up-to-date with 'origin/kpod-stats'.\r\n" - ], - [ - 0.000587, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.035434, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001297, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 7.4e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.1e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000329, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.2e-05, - "\u001b[?2004h" - ], - [ - 2.822658, - "v" - ], - [ - 0.107877, - "\bvi" - ], - [ - 0.28439, - " " - ], - [ - 0.083967, - "l" - ], - [ - 0.064538, - "i" - ], - [ - 0.100026, - "b" - ], - [ - 0.167219, - "kpod\u001b[1m/\u001b[0m" - ], - [ - 0.572222, - "\b\u001b[0m/c" - ], - [ - 0.09244, - "o" - ], - [ - 0.118682, - "\u0007" - ], - [ - 0.000448, - "\r\r\n" - ], - [ - 0.000186, - "\u001b[J\u001b[38;5;33mcommon\u001b[0m/ \u001b[Jconfig.go \u001b[Jcontainer_data.go \u001b[Jcontainer.go \u001b[Jcontainer_server.go\u001b[J\u001b[A\u001b[0m\u001b[27m\u001b[24m\u001b[39m\r\u001b[2Cvi libkpod/co\u001b[K\u001b[195C\u001b[90m\u001b[39m\u001b[39m\u001b[195D" - ], - [ - 0.632962, - "t" - ], - [ - 0.209392, - "\u0007\r\r\n\u001b[J\u001b[A\u001b[16C" - ], - [ - 0.694432, - "\b \b" - ], - [ - 0.159374, - "n" - ], - [ - 0.086549, - "\u0007" - ], - [ - 0.000211, - "\r\r\n\u001b[J" - ], - [ - 9.9e-05, - "\u001b[J\u001b[0mconfig.go \u001b[Jcontainer_data.go \u001b[Jcontainer.go \u001b[Jcontainer_server.go\u001b[J\u001b[A\u001b[0m\u001b[27m\u001b[24m\u001b[39m\r\u001b[2Cvi libkpod/con\u001b[K\u001b[194C\u001b[90m\u001b[39m\u001b[39m\u001b[194D" - ], - [ - 0.481713, - "t" - ], - [ - 0.111125, - "a" - ], - [ - 0.180888, - "\r\r\n\u001b[J\u001b[A\u001b[18Ciner" - ], - [ - 0.492502, - "_" - ], - [ - 0.206735, - "s" - ], - [ - 0.024184, - "e" - ], - [ - 0.325519, - "rver.go\u001b[1m \u001b[0m" - ], - [ - 0.3706, - "\b\u001b[0m \b" - ], - [ - 0.0002, - "\u001b[?1l\u001b>\u001b[?2004l\r\r\n\u001b[J" - ], - [ - 0.00447, - "\u001b]2;vim libkpod/container_server.go\u0007\u001b]1;vi\u0007" - ], - [ - 0.135276, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000662, - "\u001b[1;54r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[54;1H\"libkpod/container_server.go\"" - ], - [ - 0.00017, - " 684L, 20532C" - ], - [ - 0.008173, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H\u001b[>c" - ], - [ - 0.025784, - "\u001b[1;1H\u001b[96m\u001b[47m586 \u001b[m\u001b[93m\u001b[107m \u001b[32mdefer\u001b[m\u001b[93m\u001b[107m c.stateLock.Unlock()\r\n\u001b[96m\u001b[47m587 \u001b[m\u001b[93m\u001b[107m sbID := ctr.Sandbox()\r\n\u001b[96m\u001b[47m588 \u001b[m\u001b[93m\u001b[107m sb := c.state.sandboxes[sbID]\r\n\u001b[96m\u001b[47m589 \u001b[m\u001b[93m\u001b[107m sb.RemoveContainer(ctr)\r\n\u001b[96m\u001b[47m590 \u001b[m\u001b[93m\u001b[107m c.state.containers.Delete(ctr.ID())\r\n\u001b[96m\u001b[47m591 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m592 \r\n593 \u001b[m\u001b[93m\u001b[107m\u001b[96m// listContainers returns a list of all containers stored by the server state\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m594 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) listContainers() []*oci.Container {\r\n\u001b[96m\u001b[47m595 \u001b[m\u001b[93m\u001b[107m c.stateLock.Lock()\r\n\u001b[96m\u001b[47m596 \u001b[m\u001b[93m\u001b[107m \u001b[32mdefer\u001b[m\u001b[93m\u001b[107m c.stateLock.Unlock()\r\n\u001b[96m\u001b[47m597 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m c.state.containers.List()\r\n\u001b[96m\u001b[47m598 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m599 \r\n600 \u001b[m\u001b[93m\u001b[107m\u001b[96m// ListContainers returns a list of all containers stored by the server state that match the given filter function\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b" - ], - [ - 2.9e-05, - "[47m601 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) ListContainers(filters ...\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m(*oci.Container) \u001b[33mbool\u001b[m\u001b[93m\u001b[107m) ([]*oci.Container, \u001b[33merror\u001b[m\u001b[93m\u001b[107m) {\r\n\u001b[96m\u001b[47m602 \u001b[m\u001b[93m\u001b[107m containers := c.listContainers()\r\n\u001b[96m\u001b[47m603 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(filters) == \u001b[36m0\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m604 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m containers, \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m605 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m606 \u001b[m\u001b[93m\u001b[107m filteredContainers := \u001b[32mmake\u001b[m\u001b[93m\u001b[107m([]*oci.Container, \u001b[36m0\u001b[m\u001b[93m\u001b[107m, \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(containers))\r\n\u001b[96m\u001b[47m607 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, container := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m containers {\r\n\u001b[96m\u001b[47m608 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, filter := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m filters {\r\n\u001b[96m\u001b[47m609 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m filter(container) \u001b[1m\u001b[31m\u001b[106m{\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m610 \u001b[m" - ], - [ - 0.027894, - "\u001b[93m\u001b[107m\u001b[16CfilteredContainers = \u001b[32mappend\u001b[m\u001b[93m\u001b[107m(filteredContainers, container)\r\n\u001b[96m\u001b[47m611 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[1m\u001b[31m\u001b[106m}\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m612 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m613 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m614 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m filteredContainers, \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m615 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m616 \r\n617 \u001b[m\u001b[93m\u001b[107m\u001b[96m// AddSandbox adds a sandbox to the sandbox state store\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m618 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) AddSandbox(sb *sandbox.Sandbox) {\r\n\u001b[96m\u001b[47m619 \u001b[m\u001b[93m\u001b[107m c.stateLock.Lock()\r\n\u001b[96m\u001b[47m620 \u001b[m\u001b[93m\u001b[107m \u001b[32mdefer\u001b[m\u001b[93m\u001b[107m c.stateLock.Unlock()\r\n\u001b[96m\u001b[47m621 \u001b[m\u001b[93m\u001b[107m c.state.sandboxes[sb.ID()] = sb\r\n\u001b[96m\u001b[47m622 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m623 \r\n624 \u001b[m\u001b[93m\u001b[107m\u001b[96m// GetSandbox returns a sandbox by its ID\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m625 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) GetSandbox(id \u001b[33mstring\u001b[m\u001b[93m\u001b[107m) *sandb" - ], - [ - 2.9e-05, - "ox.Sandbox {\r\n\u001b[96m\u001b[47m626 \u001b[m\u001b[93m\u001b[107m c.stateLock.Lock()\r\n\u001b[96m\u001b[47m627 \u001b[m\u001b[93m\u001b[107m \u001b[32mdefer\u001b[m\u001b[93m\u001b[107m c.stateLock.Unlock()\r\n\u001b[96m\u001b[47m628 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m c.state.sandboxes[id]\r\n\u001b[96m\u001b[47m629 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m630 \r\n631 \u001b[m\u001b[93m\u001b[107m\u001b[96m// GetSandboxContainer returns a sandbox's infra container\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m632 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) GetSandboxContainer(id \u001b[33mstring\u001b[m\u001b[93m\u001b[107m) *oci.Container {\r\n\u001b[96m\u001b[47m633 \u001b[m\u001b[93m\u001b[107m c.stateLock.Lock()\r\n\u001b[96m\u001b[47m634 \u001b[m\u001b[93m\u001b[107m \u001b[32mdefer\u001b[m\u001b[93m\u001b[107m c.stateLock.Unlock()\r\n\u001b[96m\u001b[47m635 \u001b[m\u001b[93m\u001b[107m sb, ok := c.state.sandboxes[id]\r\n\u001b[96m\u001b[47m636 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m !ok {\r\n\u001b[96m\u001b[47m637 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[53;12H kpod-stats \u001b[m\u001b[93m\u001b[107m" - ], - [ - 0.00922, - "\u001b[38;5;245m\u001b[48;5;240m\u001b[53;25H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mlibkpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mcontainer_server.go \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[53;55H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                        \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  89%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m611\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:13 \u001b[26;17H\u001b[?12l\u001b[?25h" - ], - [ - 2e-05, - "\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 3.500046, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[54;1H\u001b[K\u001b[54;1H/\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.32149, - "L\u001b[?25l" - ], - [ - 0.014673, - "\u001b[34;16H\u001b[7m\u001b[91mL\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[53;2H\u001b[1m\u001b[38;5;22m\u001b[48;5;148mCOMMND \u001b[m\u001b[93m\u001b[107m\u001b[186C\u001b[38;5;247m\u001b[48;5;240m  90%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:12\r\n\u001b[m\u001b[93m\u001b[107m/L\u001b[?12l\u001b[?25h" - ], - [ - 0.16782, - "i\u001b[?25l" - ], - [ - 0.004265, - "\u001b[1;1H\u001b[96m\u001b[47m609\u001b[m\u001b[93m\u001b[107m\u001b[5C \u001b[32mif\u001b[m\u001b[93m\u001b[107m filter(container) \u001b[1m\u001b[31m\u001b[106m{\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m610\u001b[m\u001b[93m\u001b[107m\u001b[5C filteredContainers = \u001b[32mappend\u001b[m\u001b[93m\u001b[107m(filteredContainers, container)\r\n\u001b[96m\u001b[47m611\u001b[m\u001b[93m\u001b[107m\u001b[5C \u001b[1m\u001b[31m\u001b[106m}\u001b[m\u001b[93m\u001b[107m\u001b[3;18H\u001b[K\u001b[4;1H\u001b[96m\u001b[47m612\u001b[m\u001b[93m\u001b[107m\u001b[5C }\u001b[4;14H\u001b[K\u001b[5;1H\u001b[96m\u001b[47m613\u001b[m\u001b[93m\u001b[107m\u001b[5C}\u001b[5;10H\u001b[K\u001b[6;1H\u001b[96m\u001b[47m614\u001b[m\u001b[93m\u001b[107m\u001b[1C \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m filteredContainers, \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m615\u001b[m\u001b[93m\u001b[107m\u001b[1C}\r\n\u001b[96m\u001b[47m616\u001b[m\u001b[93m\u001b[107m\u001b[8;5H\u001b[K\u001b[9;1H\u001b[96m\u001b[47m617\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[96m// AddSandbox adds a sandbox to the sandbox state store\u001b[m\u001b[93m\u001b[107m\u001b[9;60H\u001b[K\u001b[10;1H\u001b[96m\u001b[47m618\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) AddSandbox(sb *sandbox.Sandbox) {\r\n\u001b[96m\u001b[47m619\u001b[m\u001b[93m\u001b[107m\u001b[5Cc.stateLock.Lock()\u001b[11;27H\u001b[K\u001b[12;1H\u001b[96m\u001b[47m620\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[32mdefe\u001b[m\u001b[93m\u001b[107m\u001b[1C c.stateLock.Unlock()\u001b[12;35H\u001b[K\u001b[13;1H\u001b[96m\u001b[47m621\u001b[m\u001b[93m\u001b" - ], - [ - 5.4e-05, - "[107m\u001b[1C c.state.sandboxes[sb.ID()] = sb\r\n\u001b[96m\u001b[47m622\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[15;2H\u001b[96m\u001b[47m23\u001b[m\u001b[93m\u001b[107m\u001b[15;5H\u001b[K\u001b[16;2H\u001b[96m\u001b[47m24\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[96m// GetSandbox returns a sandbox by its ID\u001b[m\u001b[93m\u001b[107m\u001b[16;46H\u001b[K\u001b[17;2H\u001b[96m\u001b[47m25\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) GetSandbox(id \u001b[33mstring\u001b[m\u001b[93m\u001b[107m) *sandbox.Sandbox {\u001b[18;2H\u001b[96m\u001b[47m26\u001b[m\u001b[93m\u001b[107m\u001b[5Cc.stateLock.Lock()\u001b[18;28H\u001b[K\u001b[19;2H\u001b[96m\u001b[47m27\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[32mdefe\u001b[m\u001b[93m\u001b[107m\u001b[1C c.stateLock.Unlock()\u001b[20;2H\u001b[96m\u001b[47m28\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m c.state.sandboxes[id]\u001b[21;2H\u001b[96m\u001b[47m29\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[21;9H\u001b[K\u001b[22;2H\u001b[96m\u001b[47m30\u001b[m\u001b[93m\u001b[107m\u001b[22;9H\u001b[K\u001b[23;2H\u001b[96m\u001b[47m31\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[96m// GetSandboxContainer returns a sandbox's infra container\u001b[m\u001b[93m\u001b[107m\u001b[24;2H\u001b[96m\u001b[47m32\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) GetSandboxContainer(id \u001b[33mstring\u001b[m\u001b[93m\u001b[107m) *oci.Container {\u001b[25;2H\u001b[96m\u001b[47m33\u001b[m\u001b[93m\u001b[107m\u001b[5Cc.stateLock.Lock()" - ], - [ - 0.003162, - "\u001b[25;27H\u001b[K\u001b[26;2H\u001b[96m\u001b[47m34\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[32mdefer\u001b[m\u001b[93m\u001b[107m c.stateLock.Unlock()\u001b[27;2H\u001b[96m\u001b[47m35\u001b[m\u001b[93m\u001b[107m\u001b[5Csb, ok := c.state.sandboxes[id]\u001b[28;2H\u001b[96m\u001b[47m36\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[32mif\u001b[m\u001b[93m\u001b[107m !ok {\u001b[29;2H\u001b[96m\u001b[47m37\u001b[m\u001b[93m\u001b[107m\u001b[5C \u001b[1C\u001b[32meturn\u001b[m\u001b[93m\u001b[107m \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\u001b[29;23H\u001b[K\u001b[30;2H\u001b[96m\u001b[47m38\u001b[m\u001b[93m\u001b[107m\u001b[1C }\u001b[31;2H\u001b[96m\u001b[47m39\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m sb.InfraContainer()\u001b[32;2H\u001b[96m\u001b[47m40\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[32;6H\u001b[K\u001b[33;2H\u001b[96m\u001b[47m41\u001b[m\u001b[93m\u001b[107m\u001b[33;5H\u001b[K\u001b[34;2H\u001b[96m\u001b[47m42\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[96m// HasSandbox checks if a sandbox exists in the state\u001b[m\u001b[93m\u001b[107m\u001b[35;2H\u001b[96m\u001b[47m43\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) HasSandbox(id \u001b[33mstring\u001b[m\u001b[93m\u001b[107m) \u001b[33mbool\u001b[m\u001b[93m\u001b[107m {\u001b[36;2H\u001b[96m\u001b[47m44\u001b[m\u001b[93m\u001b[107m\u001b[12CLock.Lock()\u001b[36;27H\u001b[K\u001b[37;2H\u001b[96m\u001b[47m45\u001b[m\u001b[93m\u001b[107m\u001b[1C \u001b[32mdefer\u001b[m\u001b[93m\u001b[107m c.stateLock.Unlock()\u001b[38;2H\u001b[96m\u001b[47m46\u001b[m\u001b[93m\u001b[107m\u001b[5C_, ok := c.state.sandboxes[id]\u001b[39;2H\u001b[96" - ], - [ - 6.1e-05, - "m\u001b[47m47\u001b[m\u001b[93m\u001b[107m\u001b[1C \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m ok\u001b[39;18H\u001b[K\u001b[40;2H\u001b[96m\u001b[47m48\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[40;6H\u001b[K\u001b[41;2H\u001b[96m\u001b[47m49\u001b[m\u001b[93m\u001b[107m\u001b[41;9H\u001b[K\u001b[42;2H\u001b[96m\u001b[47m50\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[96m// RemoveSandbox removes a sandbox from the state store\u001b[m\u001b[93m\u001b[107m\u001b[43;2H\u001b[96m\u001b[47m51\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) RemoveSandbox(id \u001b[33mstring\u001b[m\u001b[93m\u001b[107m) {\u001b[44;2H\u001b[96m\u001b[47m52\u001b[m\u001b[93m\u001b[107m\u001b[1C c.stateLock.Lock()\u001b[45;2H\u001b[96m\u001b[47m53\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[32mdefer\u001b[m\u001b[93m\u001b[107m c.stateLock.Unlock()\u001b[46;2H\u001b[96m\u001b[47m54\u001b[m\u001b[93m\u001b[107m\u001b[1C \u001b[32mdelete\u001b[m\u001b[93m\u001b[107m(c.state.sandboxes, id)\u001b[46;38H\u001b[K\u001b[47;2H\u001b[96m\u001b[47m55\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[47;6H\u001b[K\u001b[48;2H\u001b[96m\u001b[47m56\u001b[m\u001b[93m\u001b[107m\u001b[48;9H\u001b[K\u001b[49;2H\u001b[96m\u001b[47m57\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[96m// \u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[91mLi\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[96mstSandboxes lists all sandboxes in the state store\u001b[m\u001b[93m\u001b[107m\u001b[50;2H\u001b[96m\u001b[47m58\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) ListSandboxes() []*sandbox.Sandbox {" - ], - [ - 0.008005, - "\u001b[51;2H\u001b[96m\u001b[47m59\u001b[m\u001b[93m\u001b[107m\u001b[5Cc.stateLock.Lock()\u001b[52;2H\u001b[96m\u001b[47m60\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[32mdefe\u001b[m\u001b[93m\u001b[107m\u001b[1C c.stateLock.Unlock()\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  96%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m57\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:4 \r\n\u001b[m\u001b[93m\u001b[107m/Li\u001b[?12l\u001b[?25h" - ], - [ - 0.064191, - "s\u001b[?25l" - ], - [ - 0.009148, - "\u001b[49;10H\u001b[7m\u001b[91ms\u001b[54;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.063177, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mt\u001b[?25l" - ], - [ - 0.011092, - "\u001b[49;11H\u001b[7m\u001b[91mt\u001b[54;6H\u001b[?12l\u001b[?25h" - ], - [ - 0.22857, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mC\u001b[?25l" - ], - [ - 0.012394, - "\u001b[1;52r\u001b[1;1H\u001b[23L\u001b[1;54r\u001b[1;1H\u001b[96m\u001b[47m586 \u001b[m\u001b[93m\u001b[107m \u001b[32mdefer\u001b[m\u001b[93m\u001b[107m c.stateLock.Unlock()\r\n\u001b[96m\u001b[47m587 \u001b[m\u001b[93m\u001b[107m sbID := ctr.Sandbox()\r\n\u001b[96m\u001b[47m588 \u001b[m\u001b[93m\u001b[107m sb := c.state.sandboxes[sbID]\r\n\u001b[96m\u001b[47m589 \u001b[m\u001b[93m\u001b[107m sb.RemoveContainer(ctr)\r\n\u001b[96m\u001b[47m590 \u001b[m\u001b[93m\u001b[107m c.state.containers.Delete(ctr.ID())\r\n\u001b[96m\u001b[47m591 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m592 \r\n593 \u001b[m\u001b[93m\u001b[107m\u001b[96m// listContainers returns a list of all containers stored by the server state\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m594 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) listContainers() []*oci.Container {\r\n\u001b[96m\u001b[47m595 \u001b[m\u001b[93m\u001b[107m c.stateLock.Lock()\r\n\u001b[96m\u001b[47m596 \u001b[m\u001b[93m\u001b[107m \u001b[32mdefer\u001b[m\u001b[93m\u001b[107m c.stateLock.Unlock()\r\n\u001b[96m\u001b[47m597 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m c.state.containers.List()\r\n\u001b[96m\u001b[47m598 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m599 \r\n600 \u001b[m\u001b[93m\u001b[107m\u001b[96m// \u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[91mListC\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[96montainers returns a list of all containers stored by the" - ], - [ - 3.7e-05, - " server state that match the given filter function\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m601 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) ListContainers(filters ...\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m(*oci.Container) \u001b[33mbool\u001b[m\u001b[93m\u001b[107m) ([]*oci.Container, \u001b[33merror\u001b[m\u001b[93m\u001b[107m) {\r\n\u001b[96m\u001b[47m602 \u001b[m\u001b[93m\u001b[107m containers := c.listContainers()\r\n\u001b[96m\u001b[47m603 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(filters) == \u001b[36m0\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m604 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m containers, \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m605 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m606 \u001b[m\u001b[93m\u001b[107m filteredContainers := \u001b[32mmake\u001b[m\u001b[93m\u001b[107m([]*oci.Container, \u001b[36m0\u001b[m\u001b[93m\u001b[107m, \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(containers))\r\n\u001b[96m\u001b[47m607 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, container := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m containers {\r\n\u001b[96m\u001b[47m608 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, filter := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m filters {\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  88%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m" - ], - [ - 1.8e-05, - "\u001b[48;5;252m00\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[m\u001b[93m\u001b[107m\u001b[54;1H\u001b[K\u001b[54;1H/ListC\u001b[?12l\u001b[?25h" - ], - [ - 0.108051, - "o\u001b[?25l" - ], - [ - 0.010669, - "\u001b[15;13H\u001b[7m\u001b[91mo\u001b[54;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.076559, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mn\u001b[?25l" - ], - [ - 0.010612, - "\u001b[15;14H\u001b[7m\u001b[91mn\u001b[54;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.109997, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mt\u001b[?25l" - ], - [ - 0.011985, - "\u001b[15;15H\u001b[7m\u001b[91mt\u001b[54;10H\u001b[?12l\u001b[?25h" - ], - [ - 0.059787, - "\u001b[27m\u001b[m\u001b[93m\u001b[107ma\u001b[?25l" - ], - [ - 0.01275, - "\u001b[15;16H\u001b[7m\u001b[91ma\u001b[54;11H\u001b[?12l\u001b[?25h" - ], - [ - 0.075246, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mi\u001b[?25l" - ], - [ - 0.008912, - "\u001b[15;17H\u001b[7m\u001b[91mi\u001b[54;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.063432, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mn\u001b[?25l" - ], - [ - 0.01195, - "\u001b[15;18H\u001b[7m\u001b[91mn\u001b[54;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.075708, - "\u001b[27m\u001b[m\u001b[93m\u001b[107me\u001b[?25l" - ], - [ - 0.012727, - "\u001b[15;19H\u001b[7m\u001b[91me\u001b[54;14H\u001b[?12l\u001b[?25h" - ], - [ - 0.035347, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mr\u001b[?25l" - ], - [ - 0.012424, - "\u001b[15;20H\u001b[7m\u001b[91mr\u001b[54;15H\u001b[?12l\u001b[?25h" - ], - [ - 0.124381, - "\u001b[27m\u001b[m\u001b[93m\u001b[107ms\u001b[?25l" - ], - [ - 0.010815, - "\u001b[15;21H\u001b[7m\u001b[91ms\u001b[54;16H\u001b[?12l\u001b[?25h" - ], - [ - 0.180264, - "\r" - ], - [ - 5.1e-05, - "\u001b[?25l" - ], - [ - 0.00018, - "\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[31msearch hit BOTTOM, continuing at TOP" - ], - [ - 0.005654, - "\u001b[m\u001b[93m\u001b[107m\u001b[15;8H\u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107m\u001b[16;31H\u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107m\u001b[24;38H{\u001b[26;17H}" - ], - [ - 0.00472, - "\u001b[53;2H\u001b[1m\u001b[38;5;22m\u001b[48;5;148mNORMAL \u001b[15;8H\u001b[?12l\u001b[?25h" - ], - [ - 1.144572, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;209H\u001b[38;5;22m\u001b[48;5;252m5\u001b[15;9H" - ], - [ - 0.50187, - "\u001b[53;209H6\u001b[15;10H" - ], - [ - 0.032501, - "\u001b[53;209H7\u001b[15;11H" - ], - [ - 0.027726, - "\u001b[53;209H8\u001b[15;12H" - ], - [ - 0.031165, - "\u001b[53;209H9\u001b[15;13H" - ], - [ - 0.027591, - "\u001b[53;209H10\u001b[15;14H" - ], - [ - 0.033383, - "\u001b[53;210H1\u001b[15;15H" - ], - [ - 0.031794, - "\u001b[53;210H2\u001b[15;16H" - ], - [ - 0.029702, - "\u001b[53;210H3\u001b[15;17H" - ], - [ - 0.031021, - "\u001b[53;210H4\u001b[15;18H" - ], - [ - 0.028265, - "\u001b[53;210H5\u001b[15;19H" - ], - [ - 0.030334, - "\u001b[53;210H6\u001b[15;20H" - ], - [ - 0.033667, - "\u001b[53;210H7\u001b[15;21H" - ], - [ - 0.029757, - "\u001b[53;210H8\u001b[15;22H" - ], - [ - 0.028472, - "\u001b[53;210H9\u001b[15;23H" - ], - [ - 0.029385, - "\u001b[53;209H20\u001b[15;24H" - ], - [ - 0.030816, - "\u001b[53;210H1\u001b[15;25H" - ], - [ - 0.030044, - "\u001b[53;210H2\u001b[15;26H" - ], - [ - 0.028015, - "\u001b[53;210H3\u001b[15;27H" - ], - [ - 0.031825, - "\u001b[53;210H4\u001b[15;28H" - ], - [ - 0.029947, - "\u001b[53;210H5\u001b[15;29H" - ], - [ - 0.027564, - "\u001b[53;210H6\u001b[15;30H" - ], - [ - 0.03206, - "\u001b[53;210H7\u001b[15;31H" - ], - [ - 0.032422, - "\u001b[53;210H8\u001b[15;32H" - ], - [ - 0.030352, - "\u001b[53;210H9\u001b[15;33H" - ], - [ - 0.030131, - "\u001b[53;209H30\u001b[15;34H" - ], - [ - 0.031966, - "\u001b[53;210H1\u001b[15;35H" - ], - [ - 0.028785, - "\u001b[53;210H2\u001b[15;36H" - ], - [ - 0.030353, - "\u001b[53;210H3\u001b[15;37H" - ], - [ - 0.0284, - "\u001b[53;210H4\u001b[15;38H" - ], - [ - 0.032354, - "\u001b[53;210H5\u001b[15;39H" - ], - [ - 0.031925, - "\u001b[53;210H6\u001b[15;40H" - ], - [ - 0.027402, - "\u001b[53;210H7\u001b[15;41H" - ], - [ - 0.028353, - "\u001b[53;210H8\u001b[15;42H" - ], - [ - 0.033363, - "\u001b[53;210H9\u001b[15;43H" - ], - [ - 0.030492, - "\u001b[53;209H40\u001b[15;44H" - ], - [ - 0.029102, - "\u001b[53;210H1\u001b[15;45H" - ], - [ - 0.028712, - "\u001b[53;210H2\u001b[15;46H" - ], - [ - 0.031899, - "\u001b[53;210H3\u001b[15;47H" - ], - [ - 0.028425, - "\u001b[53;210H4\u001b[15;48H" - ], - [ - 0.031288, - "\u001b[53;210H5\u001b[15;49H" - ], - [ - 0.030582, - "\u001b[53;210H6\u001b[15;50H" - ], - [ - 0.030863, - "\u001b[53;210H7\u001b[15;51H" - ], - [ - 0.029856, - "\u001b[53;210H8\u001b[15;52H" - ], - [ - 0.03183, - "\u001b[53;210H9\u001b[15;53H" - ], - [ - 0.027287, - "\u001b[53;209H50\u001b[15;54H" - ], - [ - 0.030571, - "\u001b[53;210H1\u001b[15;55H" - ], - [ - 0.027721, - "\u001b[53;210H2\u001b[15;56H" - ], - [ - 0.034507, - "\u001b[53;210H3\u001b[15;57H" - ], - [ - 0.026321, - "\u001b[53;210H4\u001b[15;58H" - ], - [ - 0.033001, - "\u001b[53;210H5\u001b[15;59H" - ], - [ - 0.03007, - "\u001b[53;210H6\u001b[15;60H" - ], - [ - 0.031121, - "\u001b[53;210H7\u001b[15;61H" - ], - [ - 0.028288, - "\u001b[53;210H8\u001b[15;62H" - ], - [ - 0.032991, - "\u001b[53;210H9\u001b[15;63H" - ], - [ - 0.030687, - "\u001b[53;209H60\u001b[15;64H" - ], - [ - 0.031504, - "\u001b[53;210H1\u001b[15;65H" - ], - [ - 0.03011, - "\u001b[53;210H2\u001b[15;66H" - ], - [ - 0.029317, - "\u001b[53;210H3\u001b[15;67H" - ], - [ - 0.034275, - "\u001b[53;210H4\u001b[15;68H" - ], - [ - 0.59524, - "\u001b[53;210H5\u001b[15;69H" - ], - [ - 0.497159, - "\u001b[53;210H6\u001b[15;70H" - ], - [ - 0.033269, - "\u001b[53;210H7\u001b[15;71H" - ], - [ - 0.030617, - "\u001b[53;210H8\u001b[15;72H" - ], - [ - 0.028412, - "\u001b[53;210H9\u001b[15;73H" - ], - [ - 0.030755, - "\u001b[53;209H70\u001b[15;74H" - ], - [ - 0.031182, - "\u001b[53;210H1\u001b[15;75H" - ], - [ - 0.030179, - "\u001b[53;210H2\u001b[15;76H" - ], - [ - 0.469875, - "\u001b[53;210H3\u001b[15;77H" - ], - [ - 0.197619, - "\u001b[53;210H4\u001b[15;78H" - ], - [ - 0.324244, - "\u001b[53;210H3\u001b[15;77H" - ], - [ - 0.746299, - "\u001b[53;210H4\u001b[15;78H" - ], - [ - 0.177222, - "\u001b[53;210H5\u001b[15;79H" - ], - [ - 0.16103, - "\u001b[53;210H6\u001b[15;80H" - ], - [ - 0.178906, - "\u001b[53;210H7\u001b[15;81H" - ], - [ - 0.176875, - "\u001b[53;210H8\u001b[15;82H" - ], - [ - 0.168167, - "\u001b[53;210H9\u001b[15;83H" - ], - [ - 0.945125, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[54;1H\u001b[34m--\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[31ma\u001b[m\u001b[93m\u001b[107m\b\u001b[34m INSERT\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[31mt\u001b[m\u001b[93m\u001b[107m\b\u001b[34m --\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[31mO\u001b[m\u001b[93m\u001b[107m\u001b[54;13H\u001b[K" - ], - [ - 0.044251, - "\u001b[53;1H\u001b[1m\u001b[38;5;23m\u001b[48;5;231m INSERT \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[m\u001b[93m\u001b[107m\u001b[53;9H\u001b[38;5;231m\u001b[48;5;31m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m\u001b[53;12H kpod-stats \u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;31m\u001b[53;25H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31mlibkpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;31mcontainer_server.go \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[m\u001b[93m\u001b[107m\u001b[53;54H\u001b[38;5;31m\u001b[48;5;24m\u001b[53;55H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;24m                                                                                                                        \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;117m\u001b[48;5;24m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;144m\u001b[48;5;31m  88%\u001b[m" - ], - [ - 5.4e-05, - "\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;24m\u001b[48;5;117m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m600\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;117m:79 \u001b[15;83H\u001b[?12l\u001b[?25h" - ], - [ - 0.275463, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[96mthat match the given filter function\u001b[m\u001b[93m\u001b[107m\u001b[15;118H\u001b[K\u001b[53;53H\u001b[1m\u001b[38;5;220m\u001b[48;5;31m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[53;57H \u001b[m\u001b[93m\u001b[107m\u001b[152C\u001b[38;5;22m\u001b[48;5;117m8\u001b[15;82H\u001b[?12l\u001b[?25h" - ], - [ - 0.268424, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[15;82H\u001b[K\u001b[16;5Hthat match the given filter function\u001b[16;41H\u001b[K\u001b[17;5H\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) \u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107m(filters ...\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m(*oci.Container) \u001b[33mbool\u001b[m\u001b[93m\u001b[107m) ([]*oci.Container, \u001b[33merror\u001b[m\u001b[93m\u001b[107m) {\u001b[18;9Hcontainers := c.listContainers()\u001b[19;9H\u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(filters) == \u001b[36m0\u001b[m\u001b[93m\u001b[107m {\u001b[19;32H\u001b[K\u001b[20;9H \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m containers, \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\u001b[21;9H}\u001b[21;10H\u001b[K\u001b[22;9HfilteredContainers := \u001b[32mmake\u001b[m\u001b[93m\u001b[107m([]*oci.Container, \u001b[36m0\u001b[m\u001b[93m\u001b[107m, \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(containers))\u001b[23;9H\u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, container := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m containers {\u001b[24;13H\u001b[32mfor\u001b[m\u001b[93m\u001b[107m _,\u001b[7C := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m filters {\u001b[25;17H\u001b[32mif\u001b[m\u001b[93m\u001b[107m filter(container) {\u001b[25;40H\u001b[K\u001b[26;17H filteredContainers = \u001b[32mappend\u001b[m\u001b[93m\u001b[107m(filteredContainers, container)\u001b[27;13H }\u001b[28;9H }\u001b[29;9H}\u001b[29;10H\u001b[K\u001b[30;5H \u001b[32mreturn" - ], - [ - 5.2e-05, - "\u001b[m\u001b[93m\u001b[107m filteredContainers, \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\u001b[31;5H}\u001b[32;5H\u001b[K\u001b[33;5H\u001b[96m// AddSandbox adds a sandbox to the sandbox state store\u001b[m\u001b[93m\u001b[107m\u001b[33;60H\u001b[K\u001b[34;5H\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) AddSandbox(sb *sandbox.Sandbox) {\u001b[35;9Hc.stateLock.Lock()\u001b[35;27H\u001b[K\u001b[36;9H\u001b[32mdefer\u001b[m\u001b[93m\u001b[107m c.stateLock.Unlock()\u001b[36;36H\u001b[K\u001b[37;5H c.state.sandboxes[sb.ID()] = sb\u001b[38;5H}\u001b[39;5H\u001b[K\u001b[40;5H\u001b[96m// GetSandbox returns a sandbox by its ID\u001b[m\u001b[93m\u001b[107m\u001b[40;46H\u001b[K\u001b[41;5H\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) GetSandbox(id \u001b[33mstring\u001b[m\u001b[93m\u001b[107m) *sandbox.Sandbox {\u001b[42;9Hc.stateLock.Lock()\u001b[42;27H\u001b[K\u001b[43;9H\u001b[32mdefe\u001b[m\u001b[93m\u001b[107m\u001b[1C c.stateLock.Unlock()\u001b[43;35H\u001b[K\u001b[44;5H \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m c.state.sandboxes[id]\u001b[45;5H}\u001b[46;5H\u001b[K\u001b[47;5H\u001b[96m// GetSandboxContainer returns a sandbox's infra container\u001b[m\u001b[93m\u001b[107m\u001b[47;63H\u001b[K\u001b[48;5H\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (c *ContainerServer) GetSandboxContainer(id \u001b[33mstring\u001b[m\u001b[93m\u001b[107m) *oci.Container {\u001b[49;9Hc.stateLock.Lock()" - ], - [ - 0.005517, - "\u001b[49;27H\u001b[K\u001b[50;9H\u001b[32mdefer\u001b[m\u001b[93m\u001b[107m c.stateLock.Unlock()\u001b[50;35H\u001b[K\u001b[51;9Hsb, ok := c.state.sandboxes[id]\u001b[52;9H\u001b[32mif\u001b[m\u001b[93m\u001b[107m !ok {\u001b[52;17H\u001b[K\u001b[53;207H\u001b[1m\u001b[38;5;24m\u001b[48;5;117m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:1 \u001b[16;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.829866, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m/that match the given filter function\u001b[53;209H\u001b[38;5;22m\u001b[48;5;117m2\u001b[16;6H\u001b[?12l\u001b[?25h" - ], - [ - 0.150054, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[96m//that match the given filter function\u001b[m\u001b[93m\u001b[107m\u001b[53;209H\u001b[38;5;22m\u001b[48;5;117m3\u001b[16;7H\u001b[?12l\u001b[?25h" - ], - [ - 0.080887, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[96m that match the given filter function\u001b[m\u001b[93m\u001b[107m\u001b[53;209H\u001b[38;5;22m\u001b[48;5;117m4\u001b[16;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.385382, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[54;1H\u001b[K" - ], - [ - 0.014625, - "\u001b[53;1H\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;31m\u001b[m\u001b[93m\u001b[107m\u001b[53;9H\u001b[38;5;148m\u001b[48;5;240m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[53;12H kpod-stats \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[53;25H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mlibkpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mcontainer_server.go\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[m\u001b[93m\u001b[107m\u001b[53;56H\u001b[38;5;240m\u001b[48;5;236m\u001b[53;57H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                      \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;247m\u001b[48;5;236m g" - ], - [ - 2.4e-05, - "o\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  88%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m601\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;252m:3  \u001b[16;7H\u001b[?12l\u001b[?25h" - ], - [ - 0.26471, - "\u001b[?25l\u001b[54;1H\u001b[m\u001b[93m\u001b[107m:\u001b[?2004h" - ], - [ - 7e-05, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.184441, - "w" - ], - [ - 9.6e-05, - "\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.039251, - "q\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.104195, - "\r" - ], - [ - 5.6e-05, - "\u001b[?25l" - ], - [ - 0.00018, - "\u001b[?2004l" - ], - [ - 0.022882, - "\"libkpod/container_server.go\"" - ], - [ - 0.006415, - " 685L, 20535C written" - ], - [ - 0.012113, - "\r\r\r\n\u001b[39;49m\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.002425, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.019671, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats* \u001b[39m \u001b[33m17s\u001b[39m\r\n" - ], - [ - 0.002255, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000189, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 8.5e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000208, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 0.000116, - "\u001b[?1h\u001b=" - ], - [ - 0.000101, - "\u001b[?2004h" - ], - [ - 11.704887, - "\u001b[?2004l\r\r\n" - ], - [ - 0.000651, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.025893, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats* \u001b[39m \u001b[33m29s\u001b[39m\r\n" - ], - [ - 0.001689, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 7.2e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.3e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 7.5e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[31m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 0.000263, - "\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.604019, - ":" - ], - [ - 0.41525, - "\b \b" - ], - [ - 24.413263, - "v" - ], - [ - 0.123238, - "\bvi" - ], - [ - 0.096701, - " " - ], - [ - 0.103904, - "s" - ], - [ - 0.040009, - "e" - ], - [ - 0.056539, - "r" - ], - [ - 0.196367, - "ver\u001b[1m/\u001b[0m" - ], - [ - 0.158628, - "\b\u001b[0m/c" - ], - [ - 0.107515, - "o" - ], - [ - 0.072945, - "n" - ], - [ - 0.122494, - "\u0007" - ], - [ - 0.000289, - "\r\r\n" - ], - [ - 0.000116, - "\u001b[0mconfig.go container_create.go container_execsync.go container_portforward.go container_start.go container_stop.go \r\n\u001b[Jcontainer_attach.go \u001b[Jcontainer_exec.go \u001b[Jcontainer_list.go \u001b[Jcontainer_remove.go \u001b[Jcontainer_status.go \u001b[Jcontainer_updateruntimeconfig.go\u001b[J\u001b[A\u001b[A\u001b[0m\u001b[27m\u001b[24m\u001b[39m\r\u001b[2Cvi server/con\u001b[K\u001b[195C\u001b[90m\u001b[39m\u001b[39m\u001b[195D" - ], - [ - 0.477329, - "t" - ], - [ - 0.11174, - "a" - ], - [ - 0.211254, - "\r\r\n\u001b[J\u001b[A\u001b[17Ciner_" - ], - [ - 0.68805, - "l" - ], - [ - 0.124985, - "i" - ], - [ - 0.138637, - "st.go\u001b[1m \u001b[0m" - ], - [ - 0.548537, - "\b\u001b[0m \b" - ], - [ - 0.000176, - "\u001b[?1l\u001b>\u001b[?2004l\r\r\n\u001b[J" - ], - [ - 0.003295, - "\u001b]2;vim server/container_list.go\u0007\u001b]1;vi\u0007" - ], - [ - 0.135184, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000569, - "\u001b[1;54r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[54;1H\"server/container_list.go\"" - ], - [ - 0.000171, - " 108L, 2729C" - ], - [ - 0.008118, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H\u001b[>c" - ], - [ - 0.001699, - "\u001b[1;1H\u001b[96m\u001b[47m 1 \u001b[m\u001b[93m\u001b[107m\u001b[32mpackage\u001b[m\u001b[93m\u001b[107m server\r\n\u001b[96m\u001b[47m 2 \r\n 3 \u001b[m\u001b[93m\u001b[107m\u001b[32mimport\u001b[m\u001b[93m\u001b[107m (\r\n\u001b[96m\u001b[47m 4 \u001b[m\u001b[93m\u001b[107m \u001b[36m\"github.com/kubernetes-incubator/cri-o/oci\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 5 \u001b[m\u001b[93m\u001b[107m \u001b[36m\"github.com/sirupsen/logrus\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 6 \u001b[m\u001b[93m\u001b[107m \u001b[36m\"golang.org/x/net/context\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 7 \u001b[m\u001b[93m\u001b[107m \u001b[36m\"k8s.io/apimachinery/pkg/fields\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 8 \u001b[m\u001b[93m\u001b[107m pb \u001b[36m\"k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 9 \u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 10 \r\n 11 \u001b[m\u001b[93m\u001b[107m\u001b[96m// filterContainer returns whether passed container matches filtering criteria\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 12 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m filterContainer(c *pb.Container, filter *pb.ContainerFilter) \u001b[33mbool\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 13 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m filter != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 14 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[" - ], - [ - 1.6e-05, - "107m filter.State != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 15 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m c.State != filter.State.State {\r\n\u001b[96m\u001b[47m 16 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mfalse\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 17 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[96m\u001b[47m 18 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 19 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m filter.LabelSelector != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 20 \u001b[m\u001b[93m\u001b[107m\u001b[12Csel := fields.SelectorFromSet(filter.LabelSelector)\r\n\u001b[96m\u001b[47m 21 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m !sel.Matches(fields.Set(c.Labels)) {\r\n\u001b[96m\u001b[47m 22 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mfalse\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 23 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[96m\u001b[47m 24 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 25 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 26 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mtrue\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 27 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 28 \r\n 29 \u001b[m\u001b[93m\u001b[107m\u001b[96m// \u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107m\u001b[96m lists all containers by filters." - ], - [ - 0.033458, - "\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 30 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (s *Server) \u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107m(ctx context.Context, req *pb.\u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107mRequest) (*pb.\u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107mResponse, \u001b[33merror\u001b[m\u001b[93m\u001b[107m) {\r\n\u001b[96m\u001b[47m 31 \u001b[m\u001b[93m\u001b[107m logrus.Debugf(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107m\u001b[36mRequest \u001b[m\u001b[93m\u001b[107m\u001b[31m%+v\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, req)\r\n\u001b[96m\u001b[47m 32 \u001b[m\u001b[93m\u001b[107m \u001b[32mvar\u001b[m\u001b[93m\u001b[107m ctrs []*pb.Container\r\n\u001b[96m\u001b[47m 33 \u001b[m\u001b[93m\u001b[107m filter := req.Filter\r\n\u001b[96m\u001b[47m 34 \u001b[m\u001b[93m\u001b[107m ctrList := s.ContainerServer.\u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107m()\r\n\u001b[96m\u001b[47m 35 \r\n 36 \u001b[m\u001b[93m\u001b[107m \u001b[96m// Filter using container id and pod id first.\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 37 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m filter != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 38 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m filter.Id != \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 39 \u001b[m\u001b[93m\u001b[107m\u001b[12Cid, err := s.CtrI" - ], - [ - 3.2e-05, - "DIndex().Get(filter.Id)\r\n\u001b[96m\u001b[47m 40 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 41 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mnil\u001b[m\u001b[93m\u001b[107m, err\r\n\u001b[96m\u001b[47m 42 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[96m\u001b[47m 43 \u001b[m\u001b[93m\u001b[107m\u001b[12Cc := s.ContainerServer.GetContainer(id)\r\n\u001b[96m\u001b[47m 44 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m c != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 45 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mif\u001b[m\u001b[93m\u001b[107m filter.PodSandboxId != \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 46 \u001b[m\u001b[93m\u001b[107m\u001b[20C\u001b[32mif\u001b[m\u001b[93m\u001b[107m c.Sandbox() == filter.PodSandboxId {\r\n\u001b[96m\u001b[47m 47 \u001b[m\u001b[93m\u001b[107m\u001b[24CctrList = []*oci.Container{c}\r\n\u001b[96m\u001b[47m 48 \u001b[m\u001b[93m\u001b[107m\u001b[20C} \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 49 \u001b[m\u001b[93m\u001b[107m\u001b[24CctrList = []*oci.Container{}\r\n\u001b[96m\u001b[47m 50 \u001b[m\u001b[93m\u001b[107m\u001b[20C}\r\n\u001b[96m\u001b[47m 51 \r\n 52 \u001b[m\u001b[93m\u001b[107m\u001b[16C} \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m" - ], - [ - 0.009216, - "\u001b[53;12H kpod-stats \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[53;25H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mserver/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mcontainer_list.go \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[53;52H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                           \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m   1%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m  1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1  \u001b[1;5H\u001b[?12l\u001b" - ], - [ - 2e-05, - "[?25h\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 0.527381, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m   2%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[2;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.495163, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m   3%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[3;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.025763, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m   4%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:4\u001b[4;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.025962, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m   5%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[5;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.035885, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m   6%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[6;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.03159, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[7;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.027692, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m   7%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[8;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.030541, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[3;12H\u001b[1m\u001b[31m\u001b[106m(\u001b[9;5H)\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m   8%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[9;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.031712, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[3;12H(\u001b[9;5H)\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m   9%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m10\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[10;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.031153, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  10%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[11;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.026845, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  11%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[12;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.030542, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  12%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:4\u001b[13;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.032914, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  13%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[14;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.032993, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  14%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[15;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.026882, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  15%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[16;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.032257, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  16%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[17;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.031522, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  17%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[18;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.288102, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  18%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[19;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.496038, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  19%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m20\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[20;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.024987, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[21;8H" - ], - [ - 0.034118, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  20%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[22;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.029418, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  21%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[23;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.031726, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  22%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[24;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.026646, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  23%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[25;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.038387, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  24%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[26;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.02789, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;76H\u001b[1m\u001b[31m\u001b[106m{\u001b[27;5H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;70m\u001b[48;5;240m  25%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[27;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.027891, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;76H{\u001b[27;5H}\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  26%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[28;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.025499, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  27%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[29;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.032868, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  28%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m30\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[30;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.034132, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  29%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:4\u001b[31;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.734937, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  28%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m0\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[30;5H" - ], - [ - 0.244963, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  29%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:4\u001b[31;8H" - ], - [ - 1.147152, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  30%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[32;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.507676, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  31%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[33;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.021376, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[34;8H" - ], - [ - 0.52311, - "\u001b[53;209H5\u001b[34;9H" - ], - [ - 0.501301, - "\u001b[53;209H6\u001b[34;10H" - ], - [ - 0.026664, - "\u001b[53;209H7\u001b[34;11H" - ], - [ - 0.029294, - "\u001b[53;209H8\u001b[34;12H" - ], - [ - 0.029763, - "\u001b[53;209H9\u001b[34;13H" - ], - [ - 0.029935, - "\u001b[53;209H10\u001b[34;14H" - ], - [ - 0.030764, - "\u001b[53;210H1\u001b[34;15H" - ], - [ - 0.028666, - "\u001b[53;210H2\u001b[34;16H" - ], - [ - 0.031328, - "\u001b[53;210H3\u001b[34;17H" - ], - [ - 0.031664, - "\u001b[53;210H4\u001b[34;18H" - ], - [ - 0.027038, - "\u001b[53;210H5\u001b[34;19H" - ], - [ - 0.033849, - "\u001b[53;210H6\u001b[34;20H" - ], - [ - 0.028053, - "\u001b[53;210H7\u001b[34;21H" - ], - [ - 0.031407, - "\u001b[53;210H8\u001b[34;22H" - ], - [ - 0.029045, - "\u001b[53;210H9\u001b[34;23H" - ], - [ - 0.031094, - "\u001b[53;209H20\u001b[34;24H" - ], - [ - 0.030714, - "\u001b[53;210H1\u001b[34;25H" - ], - [ - 0.030843, - "\u001b[53;210H2\u001b[34;26H" - ], - [ - 0.029335, - "\u001b[53;210H3\u001b[34;27H" - ], - [ - 0.03625, - "\u001b[53;210H4\u001b[34;28H" - ], - [ - 0.02287, - "\u001b[53;210H5\u001b[34;29H" - ], - [ - 0.031991, - "\u001b[53;210H6\u001b[34;30H" - ], - [ - 0.026648, - "\u001b[53;210H7\u001b[34;31H" - ], - [ - 0.032914, - "\u001b[53;210H8\u001b[34;32H" - ], - [ - 0.030082, - "\u001b[53;210H9\u001b[34;33H" - ], - [ - 0.03302, - "\u001b[53;209H30\u001b[34;34H" - ], - [ - 0.029673, - "\u001b[53;210H1\u001b[34;35H" - ], - [ - 0.029969, - "\u001b[53;210H2\u001b[34;36H" - ], - [ - 0.030958, - "\u001b[53;210H3\u001b[34;37H" - ], - [ - 0.032073, - "\u001b[53;210H4\u001b[34;38H" - ], - [ - 0.029162, - "\u001b[53;210H5\u001b[34;39H" - ], - [ - 0.030591, - "\u001b[53;210H6\u001b[34;40H" - ], - [ - 0.02993, - "\u001b[53;210H7\u001b[34;41H" - ], - [ - 0.032535, - "\u001b[53;210H8\u001b[34;42H" - ], - [ - 0.029006, - "\u001b[53;210H9\u001b[34;43H" - ], - [ - 0.031122, - "\u001b[53;209H40\u001b[34;44H" - ], - [ - 0.027152, - "\u001b[53;210H1\u001b[34;45H" - ], - [ - 0.030614, - "\u001b[53;210H2\u001b[34;46H" - ], - [ - 0.030056, - "\u001b[53;210H3\u001b[34;47H" - ], - [ - 0.031423, - "\u001b[53;210H4\u001b[34;48H" - ], - [ - 0.03265, - "\u001b[53;210H5\u001b[34;49H" - ], - [ - 0.026915, - "\u001b[53;210H6\u001b[34;50H" - ], - [ - 0.032032, - "\u001b[53;210H7\u001b[34;51H" - ], - [ - 0.22945, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[1m\u001b[31m\u001b[106m()\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;252m8\u001b[34;52H\u001b[?12l\u001b[?25h" - ], - [ - 0.516968, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[54;1H\u001b[34m-- INSERT --\u001b[m\u001b[93m\u001b[107m\u001b[54;13H\u001b[K" - ], - [ - 0.039223, - "\u001b[53;1H\u001b[1m\u001b[38;5;23m\u001b[48;5;231m INSERT \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[m\u001b[93m\u001b[107m\u001b[53;9H\u001b[38;5;231m\u001b[48;5;31m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m\u001b[53;12H kpod-stats \u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;31m\u001b[53;25H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31mserver/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;31mcontainer_list.go \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[m\u001b[93m\u001b[107m\u001b[53;51H\u001b[38;5;31m\u001b[48;5;24m\u001b[53;52H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;24m                                                                                                                           \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;117m\u001b[48;5;24m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;149m\u001b[48;5;31m  31%" - ], - [ - 2.7e-05, - "\u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;24m\u001b[48;5;117m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m 34\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;117m:48 \u001b[34;52H\u001b[?12l\u001b[?25h" - ], - [ - 1.114697, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[31m\u001b[106mj(\u001b[m\u001b[93m\u001b[107m)\u001b[53;50H\u001b[1m\u001b[38;5;220m\u001b[48;5;31m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[53;54H \u001b[m\u001b[93m\u001b[107m\u001b[155C\u001b[38;5;22m\u001b[48;5;117m9\u001b[m\u001b[93m\u001b[107m\u001b[34;52Hj\u001b[1m\u001b[31m\u001b[106m()\b\b\u001b[?12l\u001b[?25h" - ], - [ - 0.616695, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b(\u001b[1m\u001b[31m\u001b[106m)\u001b[m\u001b[93m\u001b[107m\u001b[34;54H\u001b[K\u001b[34;52H\u001b[1m\u001b[31m\u001b[106m(\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[34;52H\u001b[?12l\u001b[?25h" - ], - [ - 0.440354, - "\u001b[?25l\u001b[53;210H9\u001b[34;53H\u001b[?12l\u001b[?25h" - ], - [ - 8.949745, - "\u001b[?25l\u001b[53;210H8\u001b[34;52H\u001b[?12l\u001b[?25h" - ], - [ - 0.496969, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m()\u001b[53;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[34;51H\u001b[?12l\u001b[?25h" - ], - [ - 0.032523, - "\u001b[53;210H6\u001b[34;50H" - ], - [ - 0.025768, - "\u001b[53;210H5\u001b[34;49H" - ], - [ - 0.032765, - "\u001b[53;210H4\u001b[34;48H" - ], - [ - 0.031191, - "\u001b[53;210H3\u001b[34;47H" - ], - [ - 0.030756, - "\u001b[53;210H2\u001b[34;46H" - ], - [ - 0.029399, - "\u001b[53;210H1\u001b[34;45H" - ], - [ - 0.338294, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;149m\u001b[48;5;31m  32%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;24m\u001b[48;5;117m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:1 \u001b[35;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.473917, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;149m\u001b[48;5;31m  31%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;24m\u001b[48;5;117m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:41\u001b[34;45H" - ], - [ - 113.574346, - "\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[1;1H\u001b[96m\u001b[47m 2 \r\n 3 \u001b[m\u001b[93m\u001b[107m\u001b[32mimport\u001b[m\u001b[93m\u001b[107m (\r\n\u001b[96m\u001b[47m 4 \u001b[m\u001b[93m\u001b[107m \u001b[36m\"github.com/kubernetes-incubator/cri-o/oci\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 5 \u001b[m\u001b[93m\u001b[107m \u001b[36m\"github.com/sirupsen/logrus\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 6 \u001b[m\u001b[93m\u001b[107m \u001b[36m\"golang.org/x/net/context\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 7 \u001b[m\u001b[93m\u001b[107m \u001b[36m\"k8s.io/apimachinery/pkg/fields\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 8 \u001b[m\u001b[93m\u001b[107m pb \u001b[36m\"k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 9 \u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 10 \r\n 11 \u001b[m\u001b[93m\u001b[107m\u001b[96m// filterContainer returns whether passed container matches filtering criteria\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 12 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m filterContainer(c *pb.Container, filter *pb.ContainerFilter) \u001b[33mbool\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 13 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m filter != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 14 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m filter.State != \u001b[36m" - ], - [ - 2.7e-05, - "nil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 15 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m c.State != filter.State.State {\r\n\u001b[96m\u001b[47m 16 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mfalse\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 17 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[96m\u001b[47m 18 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 19 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m filter.LabelSelector != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 20 \u001b[m\u001b[93m\u001b[107m\u001b[12Csel := fields.SelectorFromSet(filter.LabelSelector)\r\n\u001b[96m\u001b[47m 21 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m !sel.Matches(fields.Set(c.Labels)) {\r\n\u001b[96m\u001b[47m 22 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mfalse\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 23 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[96m\u001b[47m 24 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 25 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 26 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mtrue\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 27 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 28 \r\n 29 \u001b[m\u001b[93m\u001b[107m\u001b[96m// \u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107m\u001b[96m lists all containers by filters.\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m" - ], - [ - 0.005724, - "\u001b[47m 30 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (s *Server) \u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107m(ctx context.Context, req *pb.\u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107mRequest) (*pb.\u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107mResponse, \u001b[33merror\u001b[m\u001b[93m\u001b[107m) {\r\n\u001b[96m\u001b[47m 31 \u001b[m\u001b[93m\u001b[107m logrus.Debugf(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107m\u001b[36mRequest \u001b[m\u001b[93m\u001b[107m\u001b[31m%+v\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, req)\r\n\u001b[96m\u001b[47m 32 \u001b[m\u001b[93m\u001b[107m \u001b[32mvar\u001b[m\u001b[93m\u001b[107m ctrs []*pb.Container\r\n\u001b[96m\u001b[47m 33 \u001b[m\u001b[93m\u001b[107m filter := req.Filter\r\n\u001b[96m\u001b[47m 34 \u001b[m\u001b[93m\u001b[107m ctrList := s.ContainerServer.\u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107m()\r\n\u001b[96m\u001b[47m 35 \r\n 36 \u001b[m\u001b[93m\u001b[107m \u001b[96m// Filter using container id and pod id first.\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 37 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m filter != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 38 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m filter.Id != \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 39 \u001b[m\u001b[93m\u001b[107m\u001b[12Cid, err := s.CtrIDIndex().Get(filter.I" - ], - [ - 3.6e-05, - "d)\r\n\u001b[96m\u001b[47m 40 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 41 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mnil\u001b[m\u001b[93m\u001b[107m, err\r\n\u001b[96m\u001b[47m 42 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[96m\u001b[47m 43 \u001b[m\u001b[93m\u001b[107m\u001b[12Cc := s.ContainerServer.GetContainer(id)\r\n\u001b[96m\u001b[47m 44 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m c != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 45 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mif\u001b[m\u001b[93m\u001b[107m filter.PodSandboxId != \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 46 \u001b[m\u001b[93m\u001b[107m\u001b[20C\u001b[32mif\u001b[m\u001b[93m\u001b[107m c.Sandbox() == filter.PodSandboxId {\r\n\u001b[96m\u001b[47m 47 \u001b[m\u001b[93m\u001b[107m\u001b[24CctrList = []*oci.Container{c}\r\n\u001b[96m\u001b[47m 48 \u001b[m\u001b[93m\u001b[107m\u001b[20C} \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 49 \u001b[m\u001b[93m\u001b[107m\u001b[24CctrList = []*oci.Container{}\r\n\u001b[96m\u001b[47m 50 \u001b[m\u001b[93m\u001b[107m\u001b[20C}\r\n\u001b[96m\u001b[47m 51 \u001b[m\u001b[93m\u001b[107m\r\n\u001b[1m\u001b[38;5;23m\u001b[48;5;231m INSERT \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;31m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m\u001b[51;12H kpod-stats \u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;31m" - ], - [ - 1.9e-05, - "\u001b[51;25H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31mserver/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;31mcontainer_list.go\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;31m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[51;54H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;24m                                                                                                                         \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;182H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;190H\u001b[38;5;117m\u001b[48;5;24m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;149m\u001b[48;5;31m  31%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;24m\u001b[48;5;117m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m 34\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:41 \u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[34m-- INSERT --\u001b[33;45H\u001b[?12l\u001b[?2" - ], - [ - 1.4e-05, - "5h" - ], - [ - 0.903658, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[33;38HListCon:tainers()\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[33;46H\u001b[?12l\u001b[?25h" - ], - [ - 0.265128, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mqtainers()\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[33;47H\u001b[?12l\u001b[?25h" - ], - [ - 0.194087, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[33;47H\u001b[K\u001b[34;9Htainers()\u001b[35;9H\u001b[K\u001b[36;9H\u001b[96m// Filter using container id and pod id first.\u001b[m\u001b[93m\u001b[107m\u001b[37;9H\u001b[32mif\u001b[m\u001b[93m\u001b[107m filter != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[37;27H\u001b[K\u001b[38;13H\u001b[32mif\u001b[m\u001b[93m\u001b[107m filter.Id != \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m {\u001b[38;33H\u001b[K\u001b[39;17Hid, err := s.CtrIDIndex().Get(filter.Id)\u001b[40;17H\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[40;33H\u001b[K\u001b[41;17H \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mnil\u001b[m\u001b[93m\u001b[107m, err\u001b[42;17H}\u001b[42;19H\u001b[K\u001b[43;17Hc := s.ContainerServer.GetContainer(id)\u001b[44;17H\u001b[32mif\u001b[m\u001b[93m\u001b[107m c != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[44;30H\u001b[K\u001b[45;21H\u001b[32mif\u001b[m\u001b[93m\u001b[107m filter.PodSandboxId != \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m {\u001b[45;51H\u001b[K\u001b[46;25H\u001b[32mif\u001b[m\u001b[93m\u001b[107m c.Sandbox() == filter.PodSandboxId {\u001b[47;25H ctrList = []*oci.Container{c}\u001b[48;25H} \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\u001b[48;33H\u001b[K\u001b[49;25H ctrList = []*oci.Container{}\u001b[50;25H}\u001b[51;195H\u001b[38;5;149m\u001b[48;5;31m  32%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;24m\u001b[48;5;117m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:5 \u001b[34;9H\u001b[?12l" - ], - [ - 2.1e-05, - "\u001b[?25h" - ], - [ - 0.588871, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K" - ], - [ - 0.015698, - "\u001b[51;1H\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;31m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H kpod-stats \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;25H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mserver/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mcontainer_list.go\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[m\u001b[93m\u001b[107m\u001b[51;53H\u001b[38;5;240m\u001b[48;5;236m\u001b[51;54H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                         \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;190H\u001b[38;5;247m\u001b[48;5;236m" - ], - [ - 4.7e-05, - " go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  32%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 35\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;252m:4  \u001b[34;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.392274, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H1 line less; before #2 2 seconds ago" - ], - [ - 0.004898, - "\u001b[33;38H\u001b[7m\u001b[33mListContainers\u001b[m\u001b[93m\u001b[107m()\u001b[34;9H\u001b[K\u001b[35;9H\u001b[96m// Filter using container id and pod id first.\u001b[m\u001b[93m\u001b[107m\u001b[36;9H\u001b[32mif\u001b[m\u001b[93m\u001b[107m filter != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[36;27H\u001b[K\u001b[37;9H \u001b[32mif\u001b[m\u001b[93m\u001b[107m filter.Id != \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m {\u001b[38;13H id, err := s.CtrIDIndex().Get(filter.Id)\u001b[39;17H\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[39;32H\u001b[K\u001b[40;17H \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mnil\u001b[m\u001b[93m\u001b[107m, err\u001b[41;17H}\u001b[41;21H\u001b[K\u001b[42;17Hc := s.ContainerServer.GetContainer(id)\u001b[43;17H\u001b[32mif\u001b[m\u001b[93m\u001b[107m c != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[43;30H\u001b[K\u001b[44;17H \u001b[32mif\u001b[m\u001b[93m\u001b[107m filter.PodSandboxId != \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m {\u001b[45;21H \u001b[32mif\u001b[m\u001b[93m\u001b[107m c.Sandbox() == filter.PodSandboxId {\u001b[46;25H ctrList = []*oci.Container{c}\u001b[46;58H\u001b[K\u001b[47;25H} \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\u001b[47;33H\u001b[K\u001b[48;25H ctrList = []*oci.Container{}\u001b[49;25H}\u001b[49;29H\u001b[K\u001b[50;25H\u001b[K\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  31%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m" - ], - [ - 3e-05, - "\u001b[48;5;252m:41\u001b[33;45H\u001b[?12l\u001b[?25h" - ], - [ - 0.603268, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1HType :qa! and press to abandon all changes and exit Vim\u001b[?5h\u001b[?12l\u001b[?25h" - ], - [ - 0.008041, - "\u001b[?5l\u001b[33;45H" - ], - [ - 0.319799, - "\u001b[?25l\u001b[52;1H\u001b[K\u001b[52;1H:\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.127623, - "q\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.201264, - "\r\u001b[?25l\u001b[7m\u001b[31mE37: No write since last change (add ! to override)\u001b[?2004h" - ], - [ - 0.008793, - "\u001b[33;45H\u001b[?12l\u001b[?25h" - ], - [ - 0.638602, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K\u001b[52;1H:\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.175644, - "q" - ], - [ - 7.5e-05, - "\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.256365, - "!\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.232366, - "\r" - ], - [ - 0.014901, - "\u001b[?25l\u001b[?2004l\u001b[52;1H\u001b[K\u001b[52;1H\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.00252, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.024247, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats* \u001b[39m \u001b[33m139s\u001b[39m\r\n" - ], - [ - 0.00148, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.00016, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 6.8e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000192, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 0.000106, - "\u001b[?1h\u001b=" - ], - [ - 5e-05, - "\u001b[?2004h" - ], - [ - 0.340214, - "m" - ], - [ - 0.09551, - "\bma" - ], - [ - 0.120447, - "k" - ], - [ - 0.087296, - "e" - ], - [ - 0.071368, - " " - ], - [ - 0.089098, - "k" - ], - [ - 0.1039, - "p" - ], - [ - 0.071636, - "o" - ], - [ - 0.087901, - "d" - ], - [ - 0.136844, - "\u001b[?1l\u001b>" - ], - [ - 0.000113, - "\u001b[?2004l\r\r\n" - ], - [ - 0.012133, - "\u001b]2;make kpod\u0007\u001b]1;make\u0007" - ], - [ - 8.491971, - "go build -ldflags '-X main.gitCommit=1fd05c35 -X main.buildInfo=1502973722' -tags \"selinux seccomp \" -o kpod github.com/kubernetes-incubator/cri-o/cmd/kpod\r\n" - ], - [ - 6.307507, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.020575, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats* \u001b[39m \u001b[33m15s\u001b[39m\r\n" - ], - [ - 0.001077, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000118, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.6e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 9.3e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.5e-05, - "\u001b[?1h\u001b=" - ], - [ - 3e-05, - "\u001b[?2004h" - ], - [ - 146.677024, - "c" - ], - [ - 0.396395, - "\b \b" - ], - [ - 0.096947, - "g" - ], - [ - 0.119491, - "\bgi" - ], - [ - 0.065073, - "t" - ], - [ - 0.119305, - " " - ], - [ - 0.064229, - "s" - ], - [ - 0.367919, - "t" - ], - [ - 0.167391, - "a" - ], - [ - 0.088279, - "t" - ], - [ - 0.136684, - "u" - ], - [ - 0.111874, - "s" - ], - [ - 0.167915, - "\u001b[?1l\u001b>" - ], - [ - 0.000214, - "\u001b[?2004l\r\r\n" - ], - [ - 0.003677, - "\u001b]2;git status\u0007\u001b]1;git\u0007" - ], - [ - 0.018619, - "On branch kpod-stats\r\n" - ], - [ - 3.2e-05, - "Your branch is up-to-date with 'origin/kpod-stats'.\r\nChanges not staged for commit:\r\n (use \"git add ...\" to update what will be committed)\r\n (use \"git checkout -- ...\" to discard changes in working directory)\r\n\r\n\t\u001b[31mmodified: libkpod/container_server.go\u001b[m\r\n" - ], - [ - 1.3e-05, - "\t\u001b[31mmodified: server/container_list.go\u001b[m\r\n\r\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\r\n" - ], - [ - 0.000564, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.024004, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats* \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.003289, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000146, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000144, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000112, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 0.000113, - "\u001b[?1h\u001b=" - ], - [ - 4.6e-05, - "\u001b[?2004h" - ], - [ - 0.157568, - "g" - ], - [ - 0.150725, - "\bgi" - ], - [ - 0.088758, - "t" - ], - [ - 0.191523, - " " - ], - [ - 0.703489, - "\b" - ], - [ - 0.499958, - "\b \b" - ], - [ - 0.031738, - "\b\bg \b" - ], - [ - 0.030624, - "\b \b" - ], - [ - 0.302685, - "m" - ], - [ - 0.143773, - "\bma" - ], - [ - 0.132383, - "k" - ], - [ - 0.13996, - "e" - ], - [ - 0.031734, - " " - ], - [ - 0.100103, - "k" - ], - [ - 0.13186, - "p" - ], - [ - 0.09625, - "o" - ], - [ - 0.135131, - "d" - ], - [ - 1.224544, - "\u001b[?1l\u001b>" - ], - [ - 0.0002, - "\u001b[?2004l" - ], - [ - 0.000282, - "\r\r\n" - ], - [ - 0.003861, - "\u001b]2;make kpod\u0007\u001b]1;make\u0007" - ], - [ - 7.767101, - "make: 'kpod' is up to date.\r\n" - ], - [ - 0.000406, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.024134, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats* \u001b[39m \u001b[33m8s\u001b[39m\r\n" - ], - [ - 0.001383, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000122, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.6e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.00011, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 7.5e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.4e-05, - "\u001b[?2004h" - ], - [ - 11.517218, - " " - ], - [ - 4.345309, - "\b\b\b\b\b\b" - ], - [ - 0.359649, - "s" - ], - [ - 0.087548, - "\bsu" - ], - [ - 0.097684, - "d" - ], - [ - 0.086354, - "o" - ], - [ - 0.096813, - " " - ], - [ - 0.09598, - "m" - ], - [ - 0.095724, - "a" - ], - [ - 0.112142, - "k" - ], - [ - 0.095568, - "e" - ], - [ - 0.079489, - " " - ], - [ - 0.121036, - "c" - ], - [ - 0.06424, - "l" - ], - [ - 0.160013, - "e" - ], - [ - 0.078814, - "a" - ], - [ - 0.088993, - "n" - ], - [ - 0.198984, - "\u001b[?1l\u001b>" - ], - [ - 4.7e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.002964, - "\u001b]2;sudo make clean\u0007\u001b]1;make\u0007" - ], - [ - 0.970251, - "[sudo] password for ryan: " - ], - [ - 1.949557, - "\r\n" - ], - [ - 3.091473, - "rm -f \"/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/_output/.gopathok\"\r\n" - ], - [ - 0.001076, - "rm -rf _output\r\n" - ], - [ - 0.000525, - "rm -f docs/*.1 docs/*.5 docs/*.8\r\n" - ], - [ - 0.001472, - "rm -fr test/testdata/redis-image\r\n" - ], - [ - 0.000452, - "find . -name \\*~ -delete\r\n" - ], - [ - 0.015501, - "find . -name \\#\\* -delete\r\n" - ], - [ - 0.01696, - "rm -f crioctl crio kpod\r\n" - ], - [ - 0.025533, - "make -C conmon clean\r\n" - ], - [ - 0.002621, - "make[1]: Entering directory '/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/conmon'\r\nrm -f conmon.o cmsg.o conmon\r\n" - ], - [ - 0.001734, - "make[1]: Leaving directory '/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/conmon'\r\nmake -C pause clean\r\n" - ], - [ - 0.003556, - "make[1]: Entering directory '/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/pause'\r\nrm -f pause.o pause\r\n" - ], - [ - 0.000983, - "make[1]: Leaving directory '/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/pause'\r\n" - ], - [ - 0.000224, - "rm -f test/bin2img/bin2img\r\n" - ], - [ - 0.002959, - "rm -f test/copyimg/copyimg\r\n" - ], - [ - 0.004744, - "rm -f test/checkseccomp/checkseccomp\r\n" - ], - [ - 0.002614, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.024046, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats* \u001b[39m \u001b[33m6s\u001b[39m\r\n" - ], - [ - 0.00245, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000119, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.6e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 8e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m " - ], - [ - 2.4e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 4.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.6e-05, - "\u001b[?2004h" - ], - [ - 2.73537, - "g" - ], - [ - 0.063396, - "\bgi" - ], - [ - 0.128086, - "t" - ], - [ - 0.095837, - " " - ], - [ - 0.144554, - "c" - ], - [ - 0.083684, - "o" - ], - [ - 0.083361, - "m" - ], - [ - 0.165205, - "m" - ], - [ - 0.159495, - "i" - ], - [ - 0.108285, - "t" - ], - [ - 0.098609, - " " - ], - [ - 0.145308, - "-" - ], - [ - 0.099243, - "a" - ], - [ - 0.10427, - " " - ], - [ - 0.117066, - "-" - ], - [ - 0.131033, - "-" - ], - [ - 0.095675, - "a" - ], - [ - 0.112554, - "m" - ], - [ - 0.075379, - "e" - ], - [ - 0.108006, - "n" - ], - [ - 0.111673, - "d" - ], - [ - 0.121036, - "\u001b[?1l\u001b>" - ], - [ - 0.000282, - "\u001b[?2004l\r\r\n" - ], - [ - 0.006629, - "\u001b]2;git commit -a --amend\u0007\u001b]1;git\u0007" - ], - [ - 0.033575, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000393, - "\u001b[1;52r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[H\u001b[2J\u001b[?25l\u001b[52;1H\"~/Development/Go/src/github.com/kubernetes-incubator/cri-o/.git/COMMIT_EDITMSG\"" - ], - [ - 8.2e-05, - " 107L, 6228C" - ], - [ - 0.000173, - "\u001b[1;1Hadd kpod stats function\r\n\r\nSigned-off-by: Ryan Cole \r\n\r\n# Please enter the commit message for your changes. Lines starting\r\n# with '#' will be ignored, and an empty message aborts the commit.\r\n#\r\n# Date: Tue Jul 25 09:56:23 2017 -0400\r\n#\r\n# On branch kpod-stats\r\n# Your branch is up-to-date with 'origin/kpod-stats'.\r\n#\r\n# Changes to be committed:\r\n#\u001b[7Cmodified: README.md\r\n#\u001b[7Cmodified: cmd/kpod/images.go\r\n#\u001b[7Cmodified: cmd/kpod/main.go\r\n#\u001b[7Cnew file: cmd/kpod/stats.go\r\n#\u001b[7Cmodified: completions/bash/kpod\r\n#\u001b[7Cnew file: docs/kpod-stats.1.md\r\n#\u001b[7Cmodified: libkpod/container_server.go\r\n#\u001b[7Cmodified: libkpod/image/image.go\r\n#\u001b[7Cnew file: libkpod/stats.go\r\n#\u001b[7Cmodified: server/container_list.go\r\n#\u001b[7Cnew file: test/kpod_stats.bats\r\n#\u001b[7Cmodified: vendor.conf\r\n#\u001b[7Cdeleted: vendor/github.com/Microsoft/hcsshim/mksyscall_windows.go\r\n#\u001b[7Cnew file: vendor/github.com/buger/goterm/README.md\r\n#\u001b[7Cnew file: vendor/github.com/buger/goterm/box.go\r\n#\u001b[7C" - ], - [ - 1.9e-05, - "new file: vendor/github.com/buger/goterm/plot.go\r\n#\u001b[7Cnew file: vendor/github.com/buger/goterm/table.go\r\n#\u001b[7Cnew file: vendor/github.com/buger/goterm/terminal.go\r\n#\u001b[7Cnew file: vendor/github.com/buger/goterm/terminal_nosysioctl.go\r\n#\u001b[7Cnew file: vendor/github.com/buger/goterm/terminal_sysioctl.go\r\n#\u001b[7Cdeleted: vendor/github.com/containers/storage/pkg/archive/example_changes.go\r\n#\u001b[7Cnew file: vendor/github.com/mrunalp/fileutils/LICENSE\r\n#\u001b[7Cnew file: vendor/github.com/mrunalp/fileutils/README.md\r\n#\u001b[7Cnew file: vendor/github.com/mrunalp/fileutils/fileutils.go\r\n#\u001b[7Cnew file: vendor/github.com/mrunalp/fileutils/idtools.go\r\n#\u001b[7Cmodified: vendor/github.com/opencontainers/runc/libcontainer/container_linux.go\r\n#\u001b[7Cmodified: vendor/github.com/opencontainers/runc/libcontainer/criurpc/criurpc.pb.go\r\n#\u001b[7Cmodified: vendor/github.com/opencontainers/runc/libcontainer/criurpc/criurpc.proto\r\n#\u001b[7Cmodified: vendor/github.com/opencontainers/runc/libcontainer/init_linux.go\r\n#" - ], - [ - 1.7e-05, - "\u001b[7Cmodified: vendor/github.com/opencontainers/runc/libcontainer/state_linux.go\r\n#\u001b[7Cnew file: vendor/github.com/vishvananda/netlink/LICENSE\r\n#\u001b[7Cnew file: vendor/github.com/vishvananda/netlink/README.md\r\n#\u001b[7Cnew file: vendor/github.com/vishvananda/netlink/addr.go\r\n#\u001b[7Cnew file: vendor/github.com/vishvananda/netlink/addr_linux.go\r\n#\u001b[7Cnew file: vendor/github.com/vishvananda/netlink/bpf_linux.go\r\n#\u001b[7Cnew file: vendor/github.com/vishvananda/netlink/bridge_linux.go\r\n#\u001b[7Cnew file: vendor/github.com/vishvananda/netlink/class.go\r\n#\u001b[7Cnew file: vendor/github.com/vishvananda/netlink/class_linux.go\u001b[1;1H\u001b[?12l\u001b[?25h" - ], - [ - 0.318498, - "\u001b[?25l\u001b[52;1H\u001b[K\u001b[52;1H:\u001b[?2004h" - ], - [ - 0.000184, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.194901, - "w" - ], - [ - 0.048866, - "q" - ], - [ - 0.079626, - "\r" - ], - [ - 6.7e-05, - "\u001b[?25l\u001b[?2004l" - ], - [ - 0.000842, - "\".git/COMMIT_EDITMSG\"" - ], - [ - 0.018643, - " 107L, 6228C written" - ], - [ - 0.000239, - "\r\r\r\n\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.012196, - "[kpod-stats 51fe5a83] add kpod stats function\r\n Date: Tue Jul 25 09:56:23 2017 -0400\r\n" - ], - [ - 0.005388, - " 93 files changed, 15781 insertions(+), 1249 deletions(-)\r\n create mode 100644 cmd/kpod/stats.go\r\n create mode 100644 docs/kpod-stats.1.md\r\n create mode 100644 libkpod/stats.go\r\n create mode 100644 test/kpod_stats.bats\r\n delete mode 100644 vendor/github.com/Microsoft/hcsshim/mksyscall_windows.go\r\n create mode 100644 vendor/github.com/buger/goterm/README.md\r\n create mode 100644 vendor/github.com/buger/goterm/box.go\r\n create mode 100644 vendor/github.com/buger/goterm/plot.go\r\n create mode 100644 vendor/github.com/buger/goterm/table.go\r\n create mode 100644 vendor/github.com/buger/goterm/terminal.go\r\n create mode 100644 vendor/github.com/buger/goterm/terminal_nosysioctl.go\r\n create mode 100644 vendor/github.com/buger/goterm/terminal_sysioctl.go\r\n delete mode 100644 vendor/github.com/containers/storage/pkg/archive/example_changes.go\r\n create mode 100644 vendor/github.com/mrunalp/fileutils/LICENSE\r\n create mode 100644 vendor/github.com/mrunalp/fileutils/README.md\r\n create mode 100644 vendor/github.com/mrunalp/fileu" - ], - [ - 3.1e-05, - "tils/fileutils.go\r\n create mode 100644 vendor/github.com/mrunalp/fileutils/idtools.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/LICENSE\r\n create mode 100644 vendor/github.com/vishvananda/netlink/README.md\r\n create mode 100644 vendor/github.com/vishvananda/netlink/addr.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/addr_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/bpf_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/bridge_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/class.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/class_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/conntrack_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/conntrack_unspecified.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/filter.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/filter_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/genetlin" - ], - [ - 1.9e-05, - "k_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/genetlink_unspecified.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/gtp_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/handle_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/handle_unspecified.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/link.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/link_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/link_tuntap_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/neigh.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/neigh_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/netlink.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/netlink_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/netlink_unspecified.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/nl/addr_linux.go\r\n create mode 100644 vendor/github." - ], - [ - 1.7e-05, - "com/vishvananda/netlink/nl/bridge_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/nl/conntrack_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/nl/genetlink_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/nl/link_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/nl/mpls_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/nl/nl_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/nl/nl_unspecified.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/nl/route_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/nl/syscall.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/nl/tc_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/nl/xfrm_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/nl/xfrm_monitor_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/nl/xfrm_policy_linux.go\r\n" - ], - [ - 1.6e-05, - " create mode 100644 vendor/github.com/vishvananda/netlink/nl/xfrm_state_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/order.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/protinfo.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/protinfo_linux.go\r\n" - ], - [ - 1.9e-05, - " create mode 100644 vendor/github.com/vishvananda/netlink/qdisc.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/qdisc_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/route.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/route_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/route_unspecified.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/rule.go\r\n" - ], - [ - 1.5e-05, - " create mode 100644 vendor/github.com/vishvananda/netlink/rule_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/socket.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/socket_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/xfrm.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/xfrm_monitor_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/xfrm_policy.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/xfrm_policy_linux.go\r\n" - ], - [ - 1.3e-05, - " create mode 100644 vendor/github.com/vishvananda/netlink/xfrm_state.go\r\n create mode 100644 vendor/github.com/vishvananda/netlink/xfrm_state_linux.go\r\n create mode 100644 vendor/github.com/vishvananda/netns/LICENSE\r\n create mode 100644 vendor/github.com/vishvananda/netns/README.md\r\n create mode 100644 vendor/github.com/vishvananda/netns/netns.go\r\n create mode 100644 vendor/github.com/vishvananda/netns/netns_linux.go" - ], - [ - 1.3e-05, - "\r\n create mode 100644 vendor/github.com/vishvananda/netns/netns_unspecified.go\r\n" - ], - [ - 0.00046, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.023729, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001064, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 7.6e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 1.9e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 7.5e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.4e-05, - "\u001b[?1h\u001b=" - ], - [ - 1.7e-05, - "\u001b[?2004h" - ], - [ - 0.093363, - "g" - ], - [ - 0.116444, - "\bgi" - ], - [ - 0.09112, - "t" - ], - [ - 0.140489, - " " - ], - [ - 0.295456, - "\b" - ], - [ - 0.148558, - "\b \b" - ], - [ - 0.151794, - "\b\bg \b" - ], - [ - 0.143687, - "\b \b" - ], - [ - 0.1717, - "m" - ], - [ - 0.113167, - "\bma" - ], - [ - 0.071539, - "k" - ], - [ - 0.151864, - "e" - ], - [ - 0.068538, - " " - ], - [ - 0.051546, - "k" - ], - [ - 0.136138, - "p" - ], - [ - 0.087532, - "o" - ], - [ - 0.136608, - "d" - ], - [ - 0.107472, - "\u001b[?1l\u001b>" - ], - [ - 0.000279, - "\u001b[?2004l\r\r\n" - ], - [ - 0.003576, - "\u001b]2;make kpod\u0007\u001b]1;make\u0007" - ], - [ - 7.566279, - "go build -ldflags '-X main.gitCommit=51fe5a83 -X main.buildInfo=1502973930' -tags \"selinux seccomp \" -o kpod github.com/kubernetes-incubator/cri-o/cmd/kpod\r\n" - ], - [ - 5.528396, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.025808, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats \u001b[39m \u001b[33m13s\u001b[39m\r\n" - ], - [ - 0.002211, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 64.301943, - "g" - ], - [ - 0.072172, - "\bgi" - ], - [ - 0.104359, - "t" - ], - [ - 0.079837, - " " - ], - [ - 0.080135, - "p" - ], - [ - 0.055427, - "u" - ], - [ - 0.119911, - "s" - ], - [ - 0.104008, - "h" - ], - [ - 0.111595, - " " - ], - [ - 0.112396, - "-" - ], - [ - 0.112504, - "f" - ], - [ - 0.143522, - " " - ], - [ - 0.191507, - "o" - ], - [ - 0.120131, - "r" - ], - [ - 0.096379, - "i" - ], - [ - 0.127918, - "g" - ], - [ - 0.063437, - "i" - ], - [ - 0.056858, - "n" - ], - [ - 0.104321, - " " - ], - [ - 0.095939, - "k" - ], - [ - 0.192254, - "pod-" - ], - [ - 0.303579, - "s" - ], - [ - 0.088135, - "t" - ], - [ - 0.179185, - "a" - ], - [ - 0.580721, - "t" - ], - [ - 0.182035, - "s\u001b[1m \u001b[0m" - ], - [ - 0.393146, - "\b\u001b[0m \b" - ], - [ - 0.000296, - "\u001b[?1l\u001b>\u001b[?2004l\r\r\n" - ], - [ - 0.003558, - "\u001b]2;git push -f origin kpod-stats\u0007\u001b]1;git\u0007" - ], - [ - 0.735535, - "Counting objects: 120, done.\r\n" - ], - [ - 0.001739, - "Delta compression using up to 4 threads.\r\n" - ], - [ - 0.000228, - "Compressing objects: 0% (1/105) \r" - ], - [ - 0.000124, - "Compressing objects: 1% (2/105) \rCompressing objects: 2% (3/105) \r" - ], - [ - 4.3e-05, - "Compressing objects: 3% (4/105) \rCompressing objects: 4% (5/105) \rCompressing objects: 5% (6/105) \rCompressing objects: 6% (7/105) \r" - ], - [ - 2e-05, - "Compressing objects: 7% (8/105) \rCompressing objects: 8% (9/105) \rCompressing objects: 9% (10/105) \r" - ], - [ - 4.8e-05, - "Compressing objects: 10% (11/105) \rCompressing objects: 11% (12/105) \rCompressing objects: 12% (13/105) \r" - ], - [ - 0.000331, - "Compressing objects: 13% (14/105) \r" - ], - [ - 4.3e-05, - "Compressing objects: 14% (15/105) \r" - ], - [ - 4e-05, - "Compressing objects: 15% (16/105) \rCompressing objects: 16% (17/105) \r" - ], - [ - 1.5e-05, - "Compressing objects: 17% (18/105) \r" - ], - [ - 5.3e-05, - "Compressing objects: 18% (19/105) \rCompressing objects: 19% (20/105) \r" - ], - [ - 2e-05, - "Compressing objects: 20% (21/105) \r" - ], - [ - 0.000375, - "Compressing objects: 21% (23/105) \r" - ], - [ - 2e-05, - "Compressing objects: 22% (24/105) \r" - ], - [ - 4.8e-05, - "Compressing objects: 23% (25/105) \r" - ], - [ - 3.7e-05, - "Compressing objects: 24% (26/105) \r" - ], - [ - 3.7e-05, - "Compressing objects: 25% (27/105) \r" - ], - [ - 7.7e-05, - "Compressing objects: 26% (28/105) \r" - ], - [ - 1.7e-05, - "Compressing objects: 27% (29/105) \rCompressing objects: 28% (30/105) \r" - ], - [ - 3.7e-05, - "Compressing objects: 29% (31/105) \r" - ], - [ - 7.1e-05, - "Compressing objects: 30% (32/105) \rCompressing objects: 31% (33/105) \rCompressing objects: 32% (34/105) \r" - ], - [ - 4.1e-05, - "Compressing objects: 33% (35/105) \rCompressing objects: 34% (36/105) \r" - ], - [ - 6.3e-05, - "Compressing objects: 35% (37/105) \r" - ], - [ - 0.00012, - "Compressing objects: 36% (38/105) \r" - ], - [ - 0.000158, - "Compressing objects: 37% (39/105) \r" - ], - [ - 1.2e-05, - "Compressing objects: 38% (40/105) \r" - ], - [ - 0.000264, - "Compressing objects: 39% (41/105) \r" - ], - [ - 3.5e-05, - "Compressing objects: 40% (42/105) \r" - ], - [ - 0.000137, - "Compressing objects: 41% (44/105) \r" - ], - [ - 8.9e-05, - "Compressing objects: 42% (45/105) \r" - ], - [ - 8.5e-05, - "Compressing objects: 43% (46/105) \r" - ], - [ - 1e-05, - "Compressing objects: 44% (47/105) \r" - ], - [ - 6.8e-05, - "Compressing objects: 45% (48/105) \r" - ], - [ - 1.4e-05, - "Compressing objects: 46% (49/105) \r" - ], - [ - 0.000117, - "Compressing objects: 47% (50/105) \r" - ], - [ - 3.1e-05, - "Compressing objects: 48% (51/105) \r" - ], - [ - 3.1e-05, - "Compressing objects: 49% (52/105) \rCompressing objects: 50% (53/105) \r" - ], - [ - 4e-05, - "Compressing objects: 51% (54/105) \r" - ], - [ - 6.3e-05, - "Compressing objects: 52% (55/105) \r" - ], - [ - 9.2e-05, - "Compressing objects: 53% (56/105) \r" - ], - [ - 4.3e-05, - "Compressing objects: 54% (57/105) \r" - ], - [ - 7.9e-05, - "Compressing objects: 55% (58/105) \r" - ], - [ - 4.1e-05, - "Compressing objects: 56% (59/105) \r" - ], - [ - 6.3e-05, - "Compressing objects: 57% (60/105) \r" - ], - [ - 5e-05, - "Compressing objects: 58% (61/105) \r" - ], - [ - 0.000414, - "Compressing objects: 59% (62/105) \r" - ], - [ - 7.8e-05, - "Compressing objects: 60% (63/105) \r" - ], - [ - 5.6e-05, - "Compressing objects: 61% (65/105) \r" - ], - [ - 0.000113, - "Compressing objects: 62% (66/105) \r" - ], - [ - 9.4e-05, - "Compressing objects: 63% (67/105) \r" - ], - [ - 0.000101, - "Compressing objects: 64% (68/105) \r" - ], - [ - 8.3e-05, - "Compressing objects: 65% (69/105) \r" - ], - [ - 3.4e-05, - "Compressing objects: 66% (70/105) \r" - ], - [ - 9.2e-05, - "Compressing objects: 67% (71/105) \r" - ], - [ - 0.000266, - "Compressing objects: 68% (72/105) \r" - ], - [ - 2.2e-05, - "Compressing objects: 69% (73/105) \rCompressing objects: 70% (74/105) \rCompressing objects: 71% (75/105) \r" - ], - [ - 4.2e-05, - "Compressing objects: 72% (76/105) \r" - ], - [ - 3e-05, - "Compressing objects: 73% (77/105) \rCompressing objects: 74% (78/105) \r" - ], - [ - 0.000171, - "Compressing objects: 75% (79/105) \r" - ], - [ - 6.2e-05, - "Compressing objects: 76% (80/105) \r" - ], - [ - 2.4e-05, - "Compressing objects: 77% (81/105) \r" - ], - [ - 6.7e-05, - "Compressing objects: 78% (82/105) \rCompressing objects: 79% (83/105) \r" - ], - [ - 0.000233, - "Compressing objects: 80% (84/105) \r" - ], - [ - 0.00016, - "Compressing objects: 81% (86/105) \r" - ], - [ - 0.000135, - "Compressing objects: 82% (87/105) \r" - ], - [ - 0.000101, - "Compressing objects: 83% (88/105) \rCompressing objects: 84% (89/105) \r" - ], - [ - 2.1e-05, - "Compressing objects: 85% (90/105) \r" - ], - [ - 1.3e-05, - "Compressing objects: 86% (91/105) \r" - ], - [ - 0.000128, - "Compressing objects: 87% (92/105) \r" - ], - [ - 3.5e-05, - "Compressing objects: 88% (93/105) \r" - ], - [ - 0.000118, - "Compressing objects: 89% (94/105) \r" - ], - [ - 5.7e-05, - "Compressing objects: 90% (95/105) \rCompressing objects: 91% (96/105) \r" - ], - [ - 0.000429, - "Compressing objects: 92% (97/105) \rCompressing objects: 93% (98/105) \rCompressing objects: 94% (99/105) \r" - ], - [ - 1.5e-05, - "Compressing objects: 95% (100/105) \rCompressing objects: 96% (101/105) \rCompressing objects: 97% (102/105) \r" - ], - [ - 0.000944, - "Compressing objects: 98% (103/105) \r" - ], - [ - 0.000609, - "Compressing objects: 99% (104/105) \r" - ], - [ - 0.000117, - "Compressing objects: 100% (105/105) \r" - ], - [ - 7.5e-05, - "Compressing objects: 100% (105/105), done.\r\n" - ], - [ - 0.000147, - "Writing objects: 0% (1/120) \r" - ], - [ - 4.5e-05, - "Writing objects: 1% (2/120) \r" - ], - [ - 2.2e-05, - "Writing objects: 2% (3/120) \r" - ], - [ - 1.6e-05, - "Writing objects: 3% (4/120) \r" - ], - [ - 2.2e-05, - "Writing objects: 4% (5/120) \r" - ], - [ - 1.2e-05, - "Writing objects: 5% (6/120) \r" - ], - [ - 0.000344, - "Writing objects: 6% (8/120) \r" - ], - [ - 0.000106, - "Writing objects: 7% (9/120) \r" - ], - [ - 3.4e-05, - "Writing objects: 8% (10/120) \r" - ], - [ - 3.1e-05, - "Writing objects: 9% (11/120) \r" - ], - [ - 2.3e-05, - "Writing objects: 10% (12/120) \r" - ], - [ - 3.4e-05, - "Writing objects: 11% (14/120) \r" - ], - [ - 0.000662, - "Writing objects: 12% (15/120) \r" - ], - [ - 3.1e-05, - "Writing objects: 13% (16/120) \rWriting objects: 14% (17/120) \r" - ], - [ - 0.000202, - "Writing objects: 15% (18/120) \r" - ], - [ - 4.8e-05, - "Writing objects: 16% (20/120) \r" - ], - [ - 1.7e-05, - "Writing objects: 17% (21/120) \rWriting objects: 18% (22/120) \r" - ], - [ - 2.2e-05, - "Writing objects: 19% (23/120) \r" - ], - [ - 1.1e-05, - "Writing objects: 20% (24/120) \r" - ], - [ - 4.3e-05, - "Writing objects: 21% (26/120) \rWriting objects: 22% (27/120) \r" - ], - [ - 1.1e-05, - "Writing objects: 23% (28/120) \rWriting objects: 24% (29/120) \r" - ], - [ - 7.8e-05, - "Writing objects: 25% (30/120) \r" - ], - [ - 2.3e-05, - "Writing objects: 26% (32/120) \rWriting objects: 27% (33/120) \rWriting objects: 28% (34/120) \rWriting objects: 29% (35/120) \rWriting objects: 30% (36/120) \rWriting objects: 31% (38/120) \rWriting objects: 32% (39/120) \rWriting objects: 33% (40/120) \rWriting objects: 34% (41/120) \r" - ], - [ - 3.9e-05, - "Writing objects: 35% (42/120) \r" - ], - [ - 7.2e-05, - "Writing objects: 36% (44/120) \rWriting objects: 37% (45/120) \r" - ], - [ - 1.9e-05, - "Writing objects: 38% (46/120) \r" - ], - [ - 1.8e-05, - "Writing objects: 39% (47/120) \r" - ], - [ - 2.5e-05, - "Writing objects: 40% (48/120) \rWriting objects: 41% (50/120) \rWriting objects: 42% (51/120) \rWriting objects: 43% (52/120) \r" - ], - [ - 1e-05, - "Writing objects: 44% (53/120) \rWriting objects: 45% (54/120) \r" - ], - [ - 7.1e-05, - "Writing objects: 46% (56/120) \r" - ], - [ - 0.000534, - "Writing objects: 47% (57/120) \r" - ], - [ - 9.6e-05, - "Writing objects: 48% (58/120) \r" - ], - [ - 0.000193, - "Writing objects: 49% (59/120) \rWriting objects: 50% (60/120) \rWriting objects: 51% (62/120) \r" - ], - [ - 1.3e-05, - "Writing objects: 52% (63/120) \rWriting objects: 53% (64/120) \r" - ], - [ - 6e-05, - "Writing objects: 54% (65/120) \rWriting objects: 55% (66/120) \rWriting objects: 56% (68/120) \r" - ], - [ - 7e-05, - "Writing objects: 57% (69/120) \rWriting objects: 58% (70/120) \rWriting objects: 59% (71/120) \rWriting objects: 60% (72/120) \r" - ], - [ - 0.000191, - "Writing objects: 61% (74/120) \r" - ], - [ - 6.2e-05, - "Writing objects: 62% (75/120) \rWriting objects: 63% (76/120) \rWriting objects: 64% (77/120) \r" - ], - [ - 0.00023, - "Writing objects: 65% (78/120) \r" - ], - [ - 8.5e-05, - "Writing objects: 66% (80/120) \rWriting objects: 67% (81/120) \rWriting objects: 68% (82/120) \r" - ], - [ - 0.000103, - "Writing objects: 69% (83/120) \rWriting objects: 70% (84/120) \r" - ], - [ - 0.000194, - "Writing objects: 71% (86/120) \rWriting objects: 72% (87/120) \rWriting objects: 73% (88/120) \r" - ], - [ - 0.000514, - "Writing objects: 74% (89/120) \rWriting objects: 75% (90/120) \r" - ], - [ - 2.9e-05, - "Writing objects: 76% (92/120) \r" - ], - [ - 0.000844, - "Writing objects: 77% (93/120) \r" - ], - [ - 3.5e-05, - "Writing objects: 78% (94/120) \rWriting objects: 79% (95/120) \rWriting objects: 80% (96/120) \r" - ], - [ - 9.9e-05, - "Writing objects: 81% (98/120) \r" - ], - [ - 0.000116, - "Writing objects: 82% (99/120) \r" - ], - [ - 4.6e-05, - "Writing objects: 83% (100/120) \r" - ], - [ - 0.000493, - "Writing objects: 84% (101/120) \rWriting objects: 85% (102/120) \rWriting objects: 86% (104/120) \rWriting objects: 87% (105/120) \rWriting objects: 88% (106/120) \rWriting objects: 89% (107/120) \rWriting objects: 90% (108/120) \r" - ], - [ - 0.020626, - "Writing objects: 91% (110/120) \rWriting objects: 92% (111/120) \rWriting objects: 93% (112/120) \rWriting objects: 94% (113/120) \rWriting objects: 95% (114/120) \rWriting objects: 96% (116/120) \rWriting objects: 97% (117/120) \rWriting objects: 98% (118/120) \rWriting objects: 99% (119/120) \rWriting objects: 100% (120/120) \r" - ], - [ - 0.000125, - "Writing objects: 100% (120/120), 116.02 KiB | 4.30 MiB/s, done.\r\nTotal 120 (delta 31), reused 78 (delta 11)\r\n" - ], - [ - 0.145058, - "remote: Resolving deltas: 0% (0/31) \u001b[K\r" - ], - [ - 0.038865, - "remote: Resolving deltas: 3% (1/31) \u001b[K\rremote: Resolving deltas: 6% (2/31) \u001b[K\rremote: Resolving deltas: 9% (3/31) \u001b[K\r" - ], - [ - 0.000148, - "remote: Resolving deltas: 12% (4/31) \u001b[K\rremote: Resolving deltas: 16% (5/31) \u001b[K\r" - ], - [ - 4.8e-05, - "remote: Resolving deltas: 19% (6/31) \u001b[K\rremote: Resolving deltas: 22% (7/31) \u001b[K\rremote: Resolving deltas: 25% (8/31) \u001b[K\r" - ], - [ - 9.1e-05, - "remote: Resolving deltas: 29% (9/31) \u001b[K\rremote: Resolving deltas: 32% (10/31) \u001b[K\rremote: Resolving deltas: 35% (11/31) \u001b[K\rremote: Resolving deltas: 38% (12/31) \u001b[K\rremote: Resolving deltas: 41% (13/31) \u001b[K\rremote: Resolving deltas: 45% (14/31) \u001b[K\r" - ], - [ - 3.7e-05, - "remote: Resolving deltas: 48% (15/31) \u001b[K\rremote: Resolving deltas: 51% (16/31) \u001b[K\rremote: Resolving deltas: 54% (17/31) \u001b[K\rremote: Resolving deltas: 58% (18/31) \u001b[K\rremote: Resolving deltas: 61% (19/31) \u001b[K\rremote: Resolving deltas: 64% (20/31) \u001b[K\rremote: Resolving deltas: 67% (21/31) \u001b[K\r" - ], - [ - 0.000346, - "remote: Resolving deltas: 70% (22/31) \u001b[K\rremote: Resolving deltas: 74% (23/31) \u001b[K\rremote: Resolving deltas: 77% (24/31) \u001b[K\rremote: Resolving deltas: 80% (25/31) \u001b[K\rremote: Resolving deltas: 83% (26/31) \u001b[K\rremote: Resolving deltas: 87% (27/31) \u001b[K\rremote: Resolving deltas: 90% (28/31) \u001b[K\rremote: Resolving deltas: 93% (29/31) \u001b[K\rremote: Resolving deltas: 96% (30/31) \u001b[K\rremote: Resolving deltas: 100% (31/31) \u001b[K\rremote: Resolving deltas: 100% (31/31), completed with 30 local objects.\u001b[K\r\n" - ], - [ - 1.631427, - "To github.com:14rcole/cri-o\r\n + 1fd05c35...51fe5a83 kpod-stats -> kpod-stats (forced update)\r\n" - ], - [ - 0.001344, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.027627, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001274, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 9.1e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 1.9e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000387, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D\u001b[?1h\u001b=" - ], - [ - 2.1e-05, - "\u001b[?2004h" - ], - [ - 291.306849, - "s" - ], - [ - 0.143831, - "\bsu" - ], - [ - 0.09576, - "d" - ], - [ - 0.079837, - "o" - ], - [ - 0.056313, - " " - ], - [ - 0.09608, - "d" - ], - [ - 0.071913, - "o" - ], - [ - 0.175697, - "k" - ], - [ - 0.11164, - "c" - ], - [ - 0.344681, - "\b \b" - ], - [ - 0.143002, - "\b \b" - ], - [ - 0.353439, - "c" - ], - [ - 0.087928, - "k" - ], - [ - 0.127562, - "e" - ], - [ - 0.064111, - "r" - ], - [ - 0.095364, - " " - ], - [ - 0.103965, - "p" - ], - [ - 0.153227, - "s" - ], - [ - 0.119176, - "\u001b[?1l\u001b>" - ], - [ - 0.000192, - "\u001b[?2004l\r\r\n" - ], - [ - 0.004251, - "\u001b]2;sudo docker ps\u0007\u001b]1;docker\u0007" - ], - [ - 0.951818, - "[sudo] password for ryan: " - ], - [ - 2.123737, - "\r\n" - ], - [ - 0.050254, - "CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\r\n" - ], - [ - 0.00261, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.027572, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.000953, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000219, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.6e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 6.4e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 7.4e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.9e-05, - "\u001b[?2004h" - ], - [ - 1.758608, - "s" - ], - [ - 0.079496, - "\bsu" - ], - [ - 0.160361, - "d" - ], - [ - 0.111675, - "o" - ], - [ - 0.576293, - "\b \b" - ], - [ - 0.159908, - "\b \b" - ], - [ - 0.168126, - "\b\bs \b" - ], - [ - 0.159654, - "\b \b" - ], - [ - 0.11212, - "s" - ], - [ - 0.127338, - "\bsu" - ], - [ - 0.080917, - "d" - ], - [ - 0.215883, - " " - ], - [ - 0.103841, - "o" - ], - [ - 0.256261, - "\b \b" - ], - [ - 0.136045, - "\b" - ], - [ - 0.191849, - "o" - ], - [ - 0.143304, - " " - ], - [ - 0.0082, - "d" - ], - [ - 0.096655, - "o" - ], - [ - 0.127223, - "c" - ], - [ - 0.08778, - "k" - ], - [ - 0.072448, - "e" - ], - [ - 0.064418, - "r" - ], - [ - 0.08791, - " " - ], - [ - 0.10463, - "r" - ], - [ - 0.111928, - "u" - ], - [ - 0.175632, - "n" - ], - [ - 0.127848, - " " - ], - [ - 0.401299, - "=" - ], - [ - 0.358516, - "\b \b" - ], - [ - 0.119353, - "-" - ], - [ - 0.128809, - "d" - ], - [ - 0.208134, - " " - ], - [ - 0.57505, - "r" - ], - [ - 0.13708, - "y" - ], - [ - 0.295931, - "\b \b" - ], - [ - 0.151706, - "\b \b" - ], - [ - 0.128648, - "r" - ], - [ - 0.087732, - "y" - ], - [ - 0.128014, - "a" - ], - [ - 0.223742, - "\b \b" - ], - [ - 0.143667, - "\b \b" - ], - [ - 0.151936, - "\b \b" - ], - [ - 0.688079, - "r" - ], - [ - 0.080579, - "e" - ], - [ - 0.151405, - "d" - ], - [ - 0.08859, - "i" - ], - [ - 0.127706, - "s" - ], - [ - 0.223311, - ":" - ], - [ - 0.225389, - "a" - ], - [ - 0.119256, - "l" - ], - [ - 0.167568, - "p" - ], - [ - 0.136311, - "i" - ], - [ - 0.064759, - "n" - ], - [ - 0.519447, - "e" - ], - [ - 2.207743, - "\u001b[?1l\u001b>" - ], - [ - 7.9e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.004381, - "\u001b]2;sudo docker run -d redis:alpine\u0007\u001b]1;docker\u0007" - ], - [ - 0.156868, - "7e7a6dcecb2a803420db5e51e50289160869d387d5fe002c1f968c9c5e0aff47\r\n" - ], - [ - 0.331473, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.02536, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001087, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000141, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.9e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 8.7e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 8.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 0.00014, - "\u001b[?2004h" - ], - [ - 1.408725, - "s" - ], - [ - 0.072298, - "\bsu" - ], - [ - 0.120191, - "d" - ], - [ - 0.070475, - "o" - ], - [ - 0.104883, - " " - ], - [ - 0.224668, - "d" - ], - [ - 0.140195, - "o" - ], - [ - 0.083514, - "c" - ], - [ - 0.087764, - "k" - ], - [ - 0.159229, - "e" - ], - [ - 0.032016, - "r" - ], - [ - 0.145043, - " " - ], - [ - 0.079616, - "p" - ], - [ - 0.17546, - "s" - ], - [ - 0.095711, - "\u001b[?1l\u001b>" - ], - [ - 3.8e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.002462, - "\u001b]2;sudo docker ps\u0007\u001b]1;docker\u0007" - ], - [ - 0.040773, - "CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\r\n7e7a6dcecb2a " - ], - [ - 2.8e-05, - "redis:alpine \"docker-entrypoint...\" 4 seconds ago Up 3 seconds 6379/tcp angry_sammet\r\n" - ], - [ - 0.002288, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.023578, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.00174, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.00025, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 5.7e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000111, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m " - ], - [ - 2.5e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 5.5e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.7e-05, - "\u001b[?2004h" - ], - [ - 2.400936, - "s" - ], - [ - 0.152528, - "\bsu" - ], - [ - 0.11187, - "d" - ], - [ - 0.104125, - "o" - ], - [ - 0.095533, - " " - ], - [ - 0.048573, - "d" - ], - [ - 0.103791, - "o" - ], - [ - 0.280474, - "c" - ], - [ - 0.375565, - "k" - ], - [ - 0.096108, - "e" - ], - [ - 0.07174, - "r" - ], - [ - 0.143903, - " " - ], - [ - 0.088133, - "p" - ], - [ - 0.136279, - "s" - ], - [ - 0.087682, - " " - ], - [ - 0.128367, - "-" - ], - [ - 0.095693, - "-" - ], - [ - 0.199987, - "n" - ], - [ - 0.095887, - "o" - ], - [ - 0.231909, - "-" - ], - [ - 0.192349, - "t" - ], - [ - 0.144555, - "r" - ], - [ - 0.079249, - "u" - ], - [ - 0.167991, - "n" - ], - [ - 0.104447, - "c" - ], - [ - 0.103816, - "\u001b[?1l\u001b>" - ], - [ - 0.000465, - "\u001b[?2004l\r\r\n" - ], - [ - 0.004264, - "\u001b]2;sudo docker ps --no-trunc\u0007\u001b]1;docker\u0007" - ], - [ - 0.037936, - "CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\r\n7e7a6dcecb2a803420db5e51e50289160869d387d5fe002c1f968c9c5e0aff47 redis:alpine \"docker-entrypoint.sh redis-server\" 10 seconds ago Up 8 seconds 6379/tcp angry_sammet\r\n" - ], - [ - 0.003831, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.025231, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-stats \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001942, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000107, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000109, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 8.2e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.2e-05, - "\u001b[?2004h" - ], - [ - 266.219062, - "g" - ], - [ - 0.16768, - "\bgi" - ], - [ - 0.095185, - "t" - ], - [ - 0.088157, - " " - ], - [ - 0.14361, - "c" - ], - [ - 0.072124, - "h" - ], - [ - 0.080042, - "e" - ], - [ - 0.08789, - "c" - ], - [ - 0.161802, - "k" - ], - [ - 0.438173, - "o" - ], - [ - 0.122346, - "ut" - ], - [ - 0.445633, - " " - ], - [ - 0.145215, - "k" - ], - [ - 0.171124, - "pod-" - ], - [ - 0.332988, - "t" - ], - [ - 0.282934, - "est-refactor\u001b[1m \u001b[0m" - ], - [ - 5.748889, - "\b\u001b[0m \b" - ], - [ - 0.000105, - "\u001b[?1l\u001b>" - ], - [ - 0.000463, - "\u001b[?2004l\r\r\n" - ], - [ - 0.005657, - "\u001b]2;git checkout kpod-test-refactor\u0007\u001b]1;git\u0007" - ], - [ - 0.037888, - "Switched to branch 'kpod-test-refactor'\r\n" - ], - [ - 0.001679, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.035158, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-test-refactor \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.002249, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 7.2e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 7e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000272, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.4e-05, - "\u001b[?1h\u001b=" - ], - [ - 1.9e-05, - "\u001b[?2004h" - ], - [ - 49.127527, - "g" - ], - [ - 0.324522, - "\b \b" - ], - [ - 0.279967, - "v" - ], - [ - 0.192132, - "\bv " - ], - [ - 0.07975, - "t" - ], - [ - 0.07264, - "e" - ], - [ - 0.164523, - "st\u001b[1m/\u001b[0m" - ], - [ - 0.330897, - "\b\u001b[0m \b" - ], - [ - 0.136168, - "\b \b" - ], - [ - 0.152143, - "\b \b" - ], - [ - 0.500013, - "\b \b" - ], - [ - 0.030003, - "\b \b" - ], - [ - 0.029676, - "\b" - ], - [ - 0.028834, - "\b \b" - ], - [ - 0.171506, - "v" - ], - [ - 0.119953, - "\bvi" - ], - [ - 0.111174, - " " - ], - [ - 0.080497, - "t" - ], - [ - 0.064222, - "e" - ], - [ - 0.174426, - "st\u001b[1m/\u001b[0m" - ], - [ - 0.314489, - "\b\u001b[0m/k" - ], - [ - 0.079352, - "pod_" - ], - [ - 0.695495, - "p" - ], - [ - 0.0322, - "u" - ], - [ - 0.141247, - "\u0007" - ], - [ - 0.000165, - "\r\r\n" - ], - [ - 5.7e-05, - "\u001b[J\u001b[0mkpod_pull.bats \u001b[Jkpod_push.bats\u001b[J\u001b[A\u001b[0m\u001b[27m\u001b[24m\u001b[39m\r\u001b[2Cvi test/kpod_pu\u001b[K\u001b[193C\u001b[90m\u001b[39m\u001b[39m\u001b[193D" - ], - [ - 0.577866, - "s" - ], - [ - 0.192123, - "h.bats\u001b[1m \u001b[0m" - ], - [ - 2.609562, - "\b\u001b[0m \b\u001b[?1l\u001b>\u001b[?2004l\r\r\n\u001b[J" - ], - [ - 0.005239, - "\u001b]2;vim test/kpod_push.bats\u0007\u001b]1;vi\u0007" - ], - [ - 0.142495, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000713, - "\u001b[1;52r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[52;1H\"test/kpod_push.bats\"" - ], - [ - 9.6e-05, - " 87L, 2371C" - ], - [ - 0.003372, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H\u001b[>c" - ], - [ - 0.000718, - "\u001b[1;1H\u001b[96m\u001b[47m 38 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 39 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 40 \u001b[m\u001b[93m\u001b[107m rm -rf /tmp/busybox\r\n\u001b[96m\u001b[47m 41 \u001b[m\u001b[93m\u001b[107m stop_crio\r\n\u001b[96m\u001b[47m 42 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 43 \r\n 44 \u001b[m\u001b[93m\u001b[107m@test \u001b[36m\"kpod push to docker archive\"\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 45 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 46 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 47 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 48 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m docker-archive:/tmp/busybox-archive:1.26\r\n\u001b[96m\u001b[47m 49 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 50 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 51 \u001b[m\u001b[93m\u001b[107m rm /tmp/busybox-archive\r\n\u001b[96m\u001b[47m 52 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPO" - ], - [ - 2.1e-05, - "D_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 53 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 54 \u001b[m\u001b[93m\u001b[107m stop_crio\r\n\u001b[96m\u001b[47m 55 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 56 \r\n 57 \u001b[m\u001b[93m\u001b[107m@test \u001b[36m\"kpod push to oci without compression\"\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 58 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 59 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 60 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 61 \u001b[m\u001b[93m\u001b[107m run mkdir /tmp/oci-busybox\r\n\u001b[96m\u001b[47m 62 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 63 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 64 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS push --disable-compression \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m oci:/tmp/oci-busybox\r\n\u001b[96m\u001b[47m 65 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 66 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n" - ], - [ - 0.033108, - "\u001b[96m\u001b[47m 67 \u001b[m\u001b[93m\u001b[107m rm -rf /tmp/oci-busybox\r\n\u001b[96m\u001b[47m 68 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 69 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 70 \u001b[m\u001b[93m\u001b[107m stop_crio\r\n\u001b[96m\u001b[47m 71 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 72 \r\n 73 \u001b[m\u001b[93m\u001b[107m@test \u001b[36m\"kpod push without signatures\"\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 74 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 75 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 76 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 77 \u001b[m\u001b[93m\u001b[107m run mkdir /tmp/busybox\r\n\u001b[96m\u001b[47m 78 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 79 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 80 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS push --remove-signatures \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m dir:/tmp/busybox\r\n\u001b[96m\u001b[47m 81 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[" - ], - [ - 3.3e-05, - "107m\r\n\u001b[96m\u001b[47m 82 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 83 \u001b[m\u001b[93m\u001b[107m rm -rf /tmp/busybox\r\n\u001b[96m\u001b[47m 84 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 85 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 86 \u001b[m\u001b[93m\u001b[107m stop_crio\r\n\u001b[96m\u001b[47m 87 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H kpod-test-refactor \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;33H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mtest/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mkpod_push.bats \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[51;55H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                      \u001b[m\u001b[93m\u001b[107m" - ], - [ - 0.010668, - "\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;180H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;188H\u001b[38;5;247m\u001b[48;5;236m conf\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;247m\u001b[48;5;240m  97%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 84\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5  \u001b[47;9H\u001b[?12l\u001b[?25h\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 3.900157, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1;2H\u001b[96m\u001b[47m21\r\n 22\r\n 23\u001b[m\u001b[93m\u001b[107m\u001b[6Cun ${OCIC_BINARY} image remove busybox:test\u001b[4;2H\u001b[96m\u001b[47m24\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[1m\u001b[31m\u001b[106m[\u001b[m\u001b[93m\u001b[107m \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 \u001b[1m\u001b[31m\u001b[106m]\u001b[m\u001b[93m\u001b[107m\u001b[5;2H\u001b[96m\u001b[47m25\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[6;2H\u001b[96m\u001b[47m26\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[7;2H\u001b[96m\u001b[47m27\u001b[m\u001b[93m\u001b[107m\u001b[7;5H\u001b[K\u001b[8;2H\u001b[96m\u001b[47m28\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to directory\"\u001b[m\u001b[93m\u001b[107m {\u001b[8;37H\u001b[K\u001b[9;2H\u001b[96m\u001b[47m29\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[10;2H\u001b[96m\u001b[47m30\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[10;23H\u001b[K\u001b[11;2H\u001b[96m\u001b[47m31\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[11;28H\u001b[K\u001b[12;2H\u001b[96m\u001b[47m32\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/busybox\u001b[13;2H\u001b[96m\u001b[47m33\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[13;23H\u001b[K\u001b[14;2H\u001b[96m\u001b[47m34\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[14;28H\u001b[K\u001b[15;2H\u001b[96m\u001b[47m35\u001b[m\u001b[93m\u001b[107m\u001b[38Cpush \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b" - ], - [ - 6e-05, - "[107m dir:/tmp/busybox\u001b[16;2H\u001b[96m\u001b[47m36\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[16;23H\u001b[K\u001b[17;2H\u001b[96m\u001b[47m37\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[18;2H\u001b[96m\u001b[47m38\u001b[m\u001b[93m\u001b[107m\u001b[1C run ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[19;2H\u001b[96m\u001b[47m39\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[20;2H\u001b[96m\u001b[47m40\u001b[m\u001b[93m\u001b[107m\u001b[1C rm -rf /tmp/busybox\u001b[20;28H\u001b[K\u001b[21;2H\u001b[96m\u001b[47m41\u001b[m\u001b[93m\u001b[107m\u001b[5Cstop_crio\u001b[21;18H\u001b[K\u001b[22;2H\u001b[96m\u001b[47m42\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[22;9H\u001b[K\u001b[23;2H\u001b[96m\u001b[47m43\u001b[m\u001b[93m\u001b[107m\u001b[23;9H\u001b[K\u001b[24;2H\u001b[96m\u001b[47m44\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to docker archive\"\u001b[m\u001b[93m\u001b[107m {\u001b[25;2H\u001b[96m\u001b[47m45\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[26;2H\u001b[96m\u001b[47m46\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[26;23H\u001b[K\u001b[27;2H\u001b[96m\u001b[47m47\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[27;28H\u001b[K\u001b[28;2H\u001b[96m\u001b[47m48\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push " - ], - [ - 0.016615, - "\u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m docker-archive:/tmp/busybox-archive:1.26\u001b[29;2H\u001b[96m\u001b[47m49\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[29;23H\u001b[K\u001b[30;2H\u001b[96m\u001b[47m50\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[30;28H\u001b[K\u001b[31;2H\u001b[96m\u001b[47m51\u001b[m\u001b[93m\u001b[107m\u001b[6Cm /tmp/busybox-archive\u001b[31;32H\u001b[K\u001b[32;2H\u001b[96m\u001b[47m52\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[33;2H\u001b[96m\u001b[47m53\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[34;2H\u001b[96m\u001b[47m54\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[35;2H\u001b[96m\u001b[47m55\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[36;2H\u001b[96m\u001b[47m56\u001b[m\u001b[93m\u001b[107m\u001b[36;5H\u001b[K\u001b[37;2H\u001b[96m\u001b[47m57\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to oci without compression\"\u001b[m\u001b[93m\u001b[107m {\u001b[37;51H\u001b[K\u001b[38;2H\u001b[96m\u001b[47m58\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[39;2H\u001b[96m\u001b[47m59\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[39;23H\u001b[K\u001b[40;2H\u001b[96m\u001b[47m60\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[40;28H\u001b[K\u001b[41;2H\u001b[96m\u001b[47m61\u001b[m\u001b[93m\u001b[1" - ], - [ - 5.1e-05, - "07m\u001b[5Crun mkdir /tmp/oci-busybox\u001b[42;2H\u001b[96m\u001b[47m62\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[42;23H\u001b[K\u001b[43;2H\u001b[96m\u001b[47m63\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[43;28H\u001b[K\u001b[44;2H\u001b[96m\u001b[47m64\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push --disable-compression \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m oci:/tmp/oci-busybox\u001b[45;2H\u001b[96m\u001b[47m65\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[45;23H\u001b[K\u001b[46;2H\u001b[96m\u001b[47m66\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[47;2H\u001b[96m\u001b[47m67\u001b[m\u001b[93m\u001b[107m\u001b[6Cm -rf /tmp/oci-busybox\u001b[47;32H\u001b[K\u001b[48;2H\u001b[96m\u001b[47m68\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[49;2H\u001b[96m\u001b[47m69\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[50;2H\u001b[96m\u001b[47m70\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  28%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m24\u001b[4;9H\u001b[?12l\u001b[?25h" - ], - [ - 1.049793, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[1;28H\u001b[K\u001b[2;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[3;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[3;28H\u001b[K\u001b[4;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${OCIC_BINARY} image remove busybox:test\u001b[5;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[6;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[7;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[8;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[8;5H\u001b[K\u001b[9;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to directory\"\u001b[m\u001b[93m\u001b[107m {\u001b[9;37H\u001b[K\u001b[10;2H\u001b[96m\u001b[47m29\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[11;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[11;23H\u001b[K\u001b[12;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[12;28H\u001b[K\u001b[13;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/busybox\u001b[14;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b" - ], - [ - 0.000196, - "[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[14;23H\u001b[K\u001b[15;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[15;28H\u001b[K\u001b[16;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m dir:/tmp/busybox\u001b[17;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[17;23H\u001b[K\u001b[18;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[18;28H\u001b[K\u001b[19;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[20;2H\u001b[96m\u001b[47m39\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[21;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Crm -rf /tmp/busybox\u001b[22;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[23;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[24;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[24;5H\u001b[K\u001b[25;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to docker archive\"\u001b[m\u001b[93m\u001b[107m {\u001b[25;42H\u001b[K\u001b[26;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[27;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho " - ], - [ - 0.004649, - "\u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[27;23H\u001b[K\u001b[28;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[28;28H\u001b[K\u001b[29;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m docker-archive:/tmp/busybox-archive:1.26\u001b[30;2H\u001b[96m\u001b[47m49\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[30;23H\u001b[K\u001b[31;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[31;28H\u001b[K\u001b[32;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[6Cm /tmp/busybox-archive\u001b[32;32H\u001b[K\u001b[33;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[34;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[35;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[36;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[37;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[37;5H\u001b[K\u001b[38;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to oci without compression\"\u001b[m\u001b[93m\u001b[107m {\u001b[38;51H\u001b[K\u001b[39;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[40;2H\u001b" - ], - [ - 3e-05, - "[96m\u001b[47m59\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[40;23H\u001b[K\u001b[41;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[41;28H\u001b[K\u001b[42;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/oci-busybox\u001b[43;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[43;23H\u001b[K\u001b[44;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[44;28H\u001b[K\u001b[45;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push --disable-compression \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m oci:/tmp/oci-busybox\u001b[46;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[46;23H\u001b[K\u001b[47;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[47;28H\u001b[K\u001b[48;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[6Cm -rf /tmp/oci-busybox\u001b[48;32H\u001b[K\u001b[49;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[50;2H\u001b[96m\u001b[47m69\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  26%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m" - ], - [ - 0.002097, - "\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.206758, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1;2H\u001b[96m\u001b[47m19\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[1;23H\u001b[K\u001b[2;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[2;28H\u001b[K\u001b[3;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[4;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[1m\u001b[31m\u001b[106m[\u001b[m\u001b[93m\u001b[107m \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 \u001b[1m\u001b[31m\u001b[106m]\u001b[m\u001b[93m\u001b[107m\u001b[4;28H\u001b[K\u001b[5;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${OCIC_BINARY} image remove busybox:test\u001b[6;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[7;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[8;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[9;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[9;5H\u001b[K\u001b[10;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to directory\"\u001b[m\u001b[93m\u001b[107m {\u001b[10;37H\u001b[K\u001b[11;2H\u001b[96m\u001b[47m29\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[12;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[12;23H\u001b[K\u001b[13;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$s" - ], - [ - 5.7e-05, - "tatus\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[13;28H\u001b[K\u001b[14;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/busybox\u001b[15;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[15;23H\u001b[K\u001b[16;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[16;28H\u001b[K\u001b[17;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m dir:/tmp/busybox\u001b[18;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[18;23H\u001b[K\u001b[19;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[19;28H\u001b[K\u001b[20;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[21;2H\u001b[96m\u001b[47m39\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[22;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Crm -rf /tmp/busybox\u001b[23;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[24;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[25;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[25;5H\u001b[K\u001b[26;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to docker archive\"\u001b[m\u001b[93m\u001b[107m {\u001b[26;42H\u001b[K" - ], - [ - 0.006686, - "\u001b[27;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[28;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[28;23H\u001b[K\u001b[29;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[29;28H\u001b[K\u001b[30;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m docker-archive:/tmp/busybox-archive:1.26\u001b[31;2H\u001b[96m\u001b[47m49\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[31;23H\u001b[K\u001b[32;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[32;28H\u001b[K\u001b[33;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[6Cm /tmp/busybox-archive\u001b[33;32H\u001b[K\u001b[34;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[35;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[36;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[37;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[38;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5H\u001b[K\u001b[39;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to oci without compre" - ], - [ - 0.000129, - "ssion\"\u001b[m\u001b[93m\u001b[107m {\u001b[39;51H\u001b[K\u001b[40;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[41;2H\u001b[96m\u001b[47m59\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[41;23H\u001b[K\u001b[42;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[42;28H\u001b[K\u001b[43;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/oci-busybox\u001b[44;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[44;23H\u001b[K\u001b[45;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[45;28H\u001b[K\u001b[46;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push --disable-compression \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m oci:/tmp/oci-busybox\u001b[47;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[47;23H\u001b[K\u001b[48;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[48;28H\u001b[K\u001b[49;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[6Cm -rf /tmp/oci-busybox\u001b[49;32H\u001b[K\u001b[50;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m" - ], - [ - 0.006076, - "\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m  25%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.163845, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m containers-storage:[$ROOT]busybox:test\u001b[2;2H\u001b[96m\u001b[47m19\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[2;23H\u001b[K\u001b[3;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[3;28H\u001b[K\u001b[4;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[5;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[5;28H\u001b[K\u001b[6;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${OCIC_BINARY} image remove busybox:test\u001b[7;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[8;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[9;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[10;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[10;5H\u001b[K\u001b[11;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to directory\"\u001b[m\u001b[93m\u001b[107m {\u001b[11;37H\u001b[K\u001b[12;2H\u001b[96m\u001b[47m29\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[13;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[" - ], - [ - 8.3e-05, - "36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[13;23H\u001b[K\u001b[14;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[14;28H\u001b[K\u001b[15;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/busybox\u001b[16;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[16;23H\u001b[K\u001b[17;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[17;28H\u001b[K\u001b[18;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m dir:/tmp/busybox\u001b[19;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[19;23H\u001b[K\u001b[20;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[20;28H\u001b[K\u001b[21;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[22;2H\u001b[96m\u001b[47m39\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[23;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Crm -rf /tmp/busybox\u001b[24;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[25;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[26;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[26;5H\u001b[K\u001b[27;3H\u001b[96m\u001b[47m4" - ], - [ - 0.007793, - "\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to docker archive\"\u001b[m\u001b[93m\u001b[107m {\u001b[27;42H\u001b[K\u001b[28;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[29;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[29;23H\u001b[K\u001b[30;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[30;28H\u001b[K\u001b[31;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m docker-archive:/tmp/busybox-archive:1.26\u001b[32;2H\u001b[96m\u001b[47m49\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[32;23H\u001b[K\u001b[33;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[33;28H\u001b[K\u001b[34;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[6Cm /tmp/busybox-archive\u001b[34;32H\u001b[K\u001b[35;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[36;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[37;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[38;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[39;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[39" - ], - [ - 3.1e-05, - ";5H\u001b[K\u001b[40;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to oci without compression\"\u001b[m\u001b[93m\u001b[107m {\u001b[40;51H\u001b[K\u001b[41;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[42;2H\u001b[96m\u001b[47m59\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[42;23H\u001b[K\u001b[43;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[43;28H\u001b[K\u001b[44;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/oci-busybox\u001b[45;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[45;23H\u001b[K\u001b[46;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[46;28H\u001b[K\u001b[47;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push --disable-compression \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m oci:/tmp/oci-busybox\u001b[48;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[48;23H\u001b[K\u001b[49;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[49;28H\u001b[K\u001b[50;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[6Cm -rf /tmp/oci-busybox\u001b[50;32H\u001b[K\u001b[51;195H\u001b[38;5;70m" - ], - [ - 0.002123, - "\u001b[48;5;240m  24%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.19883, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[1;28H\u001b[K\u001b[2;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m containers-storage:[$ROOT]busybox:test\u001b[3;2H\u001b[96m\u001b[47m19\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[3;23H\u001b[K\u001b[4;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[1m\u001b[31m\u001b[106m[\u001b[m\u001b[93m\u001b[107m \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 \u001b[1m\u001b[31m\u001b[106m]\u001b[m\u001b[93m\u001b[107m\u001b[4;28H\u001b[K\u001b[5;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[6;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[6;28H\u001b[K\u001b[7;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${OCIC_BINARY} image remove busybox:test\u001b[8;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[9;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[10;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[11;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[11;5H\u001b[K\u001b[12;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to directory\"\u001b[m\u001b[93m\u001b[107m {\u001b[12;37H\u001b[K\u001b[1" - ], - [ - 0.000124, - "3;2H\u001b[96m\u001b[47m29\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[14;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[14;23H\u001b[K\u001b[15;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[15;28H\u001b[K\u001b[16;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/busybox\u001b[17;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[17;23H\u001b[K\u001b[18;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[18;28H\u001b[K\u001b[19;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m dir:/tmp/busybox\u001b[20;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[20;23H\u001b[K\u001b[21;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[21;28H\u001b[K\u001b[22;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[23;2H\u001b[96m\u001b[47m39\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[24;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Crm -rf /tmp/busybox\u001b[25;3H" - ], - [ - 0.001207, - "\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[26;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[27;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[27;5H\u001b[K\u001b[28;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to docker archive\"\u001b[m\u001b[93m\u001b[107m {\u001b[28;42H\u001b[K\u001b[29;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[30;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[30;23H\u001b[K\u001b[31;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[31;28H\u001b[K\u001b[32;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m docker-archive:/tmp/busybox-archive:1.26\u001b[33;2H\u001b[96m\u001b[47m49\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[33;23H\u001b[K\u001b[34;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[34;28H\u001b[K\u001b[35;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[6Cm /tmp/busybox-archive\u001b[35;32H\u001b[K\u001b[36;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[37;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[" - ], - [ - 0.000194, - "93m\u001b[107m -eq 0 ]\u001b[38;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[39;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[40;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[40;5H\u001b[K\u001b[41;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to oci without compression\"\u001b[m\u001b[93m\u001b[107m {\u001b[41;51H\u001b[K\u001b[42;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[43;2H\u001b[96m\u001b[47m59\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[43;23H\u001b[K\u001b[44;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[44;28H\u001b[K\u001b[45;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/oci-busybox\u001b[46;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[46;23H\u001b[K\u001b[47;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[47;28H\u001b[K\u001b[48;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push --disable-compression \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m oci:/tmp/oci-busybox\u001b[49;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[49;23H\u001b[K\u001b[50;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m" - ], - [ - 0.007907, - "\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[50;28H\u001b[K\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m  23%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m0\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.157382, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[1;23H\u001b[K\u001b[2;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[2;28H\u001b[K\u001b[3;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m containers-storage:[$ROOT]busybox:test\u001b[4;2H\u001b[96m\u001b[47m19\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[4;23H\u001b[K\u001b[5;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[5;28H\u001b[K\u001b[6;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[7;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[7;28H\u001b[K\u001b[8;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${OCIC_BINARY} image remove busybox:test\u001b[9;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[10;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[11;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[12;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[12;5H\u001b[K\u001b[13;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to directory\"\u001b[m\u001b[93m\u001b" - ], - [ - 7.7e-05, - "[107m {\u001b[13;37H\u001b[K\u001b[14;2H\u001b[96m\u001b[47m29\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[15;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[15;23H\u001b[K\u001b[16;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[16;28H\u001b[K\u001b[17;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/busybox\u001b[18;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[18;23H\u001b[K\u001b[19;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[19;28H\u001b[K\u001b[20;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m dir:/tmp/busybox\u001b[21;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[21;23H\u001b[K\u001b[22;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[22;28H\u001b[K\u001b[23;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[24;2H\u001b[96m\u001b[47m39\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[25;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Crm -rf /tmp/busybox" - ], - [ - 0.004633, - "\u001b[26;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[27;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[28;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[28;5H\u001b[K\u001b[29;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to docker archive\"\u001b[m\u001b[93m\u001b[107m {\u001b[29;42H\u001b[K\u001b[30;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[31;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[31;23H\u001b[K\u001b[32;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[32;28H\u001b[K\u001b[33;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m docker-archive:/tmp/busybox-archive:1.26\u001b[34;2H\u001b[96m\u001b[47m49\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[34;23H\u001b[K\u001b[35;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[35;28H\u001b[K\u001b[36;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[6Cm /tmp/busybox-archive\u001b[36;32H\u001b[K\u001b[37;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[38;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$statu" - ], - [ - 2.3e-05, - "s\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[39;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[40;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[41;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[41;5H\u001b[K\u001b[42;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to oci without compression\"\u001b[m\u001b[93m\u001b[107m {\u001b[42;51H\u001b[K\u001b[43;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[44;2H\u001b[96m\u001b[47m59\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[44;23H\u001b[K\u001b[45;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[45;28H\u001b[K\u001b[46;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/oci-busybox\u001b[47;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[47;23H\u001b[K\u001b[48;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[48;28H\u001b[K\u001b[49;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push --disable-compression \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m oci:/tmp/oci-busybox\u001b[50;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[50;23H\u001b[K\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m" - ], - [ - 0.002017, - "  22%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m19\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.216601, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[2;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[2;23H\u001b[K\u001b[3;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[3;28H\u001b[K\u001b[4;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m containers-storage:[$ROOT]busybox:test\u001b[5;2H\u001b[96m\u001b[47m19\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[5;23H\u001b[K\u001b[6;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[6;28H\u001b[K\u001b[7;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[8;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[8;28H\u001b[K\u001b[9;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${OCIC_BINARY} image remove busybox:test\u001b[10;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[11;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[12;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[13;3H\u001b[96m\u001b[47m7\u001b[m" - ], - [ - 0.000101, - "\u001b[93m\u001b[107m\u001b[13;5H\u001b[K\u001b[14;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to directory\"\u001b[m\u001b[93m\u001b[107m {\u001b[14;37H\u001b[K\u001b[15;2H\u001b[96m\u001b[47m29\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[16;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[16;23H\u001b[K\u001b[17;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[17;28H\u001b[K\u001b[18;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/busybox\u001b[19;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[19;23H\u001b[K\u001b[20;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[20;28H\u001b[K\u001b[21;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m dir:/tmp/busybox\u001b[22;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[22;23H\u001b[K\u001b[23;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[23;28H\u001b[K\u001b[24;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[25;2H\u001b[96m" - ], - [ - 0.00763, - "\u001b[47m39\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[26;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Crm -rf /tmp/busybox\u001b[27;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[28;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[29;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[29;5H\u001b[K\u001b[30;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to docker archive\"\u001b[m\u001b[93m\u001b[107m {\u001b[30;42H\u001b[K\u001b[31;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[32;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[32;23H\u001b[K\u001b[33;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[33;28H\u001b[K\u001b[34;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m docker-archive:/tmp/busybox-archive:1.26\u001b[35;2H\u001b[96m\u001b[47m49\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[35;23H\u001b[K\u001b[36;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[36;28H\u001b[K\u001b[37;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[6Cm /tmp/busybox-archive\u001b[37;32H\u001b[K\u001b[38;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m" - ], - [ - 0.000247, - "\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[39;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[40;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[41;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[42;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[42;5H\u001b[K\u001b[43;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to oci without compression\"\u001b[m\u001b[93m\u001b[107m {\u001b[43;51H\u001b[K\u001b[44;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[45;2H\u001b[96m\u001b[47m59\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[45;23H\u001b[K\u001b[46;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[46;28H\u001b[K\u001b[47;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/oci-busybox\u001b[48;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[48;23H\u001b[K\u001b[49;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[49;28H\u001b[K\u001b[50;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push --disable-compression \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m oci:/tmp/oci-busybox" - ], - [ - 0.003544, - "\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m  21%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.174049, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to containers/storage\"\u001b[m\u001b[93m\u001b[107m {\u001b[1;47H\u001b[K\u001b[2;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[3;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[3;23H\u001b[K\u001b[4;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[1m\u001b[31m\u001b[106m[\u001b[m\u001b[93m\u001b[107m \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 \u001b[1m\u001b[31m\u001b[106m]\u001b[m\u001b[93m\u001b[107m\u001b[4;28H\u001b[K\u001b[5;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m containers-storage:[$ROOT]busybox:test\u001b[6;2H\u001b[96m\u001b[47m19\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[6;23H\u001b[K\u001b[7;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[7;28H\u001b[K\u001b[8;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[9;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[9;28H\u001b[K\u001b[10;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${OCIC_BINARY} image remove busybox:test\u001b[11;3H\u001b[96m\u001b[47m" - ], - [ - 5.9e-05, - "4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[12;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[13;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[14;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[14;5H\u001b[K\u001b[15;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to directory\"\u001b[m\u001b[93m\u001b[107m {\u001b[15;37H\u001b[K\u001b[16;2H\u001b[96m\u001b[47m29\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[17;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[17;23H\u001b[K\u001b[18;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[18;28H\u001b[K\u001b[19;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/busybox\u001b[20;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[20;23H\u001b[K\u001b[21;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[21;28H\u001b[K\u001b[22;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m dir:/tmp/busybox\u001b[23;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[23;23H\u001b[K\u001b[24;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ " - ], - [ - 0.001075, - "\u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[24;28H\u001b[K\u001b[25;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[26;2H\u001b[96m\u001b[47m39\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[27;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Crm -rf /tmp/busybox\u001b[28;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[29;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[30;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[30;5H\u001b[K\u001b[31;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to docker archive\"\u001b[m\u001b[93m\u001b[107m {\u001b[31;42H\u001b[K\u001b[32;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[33;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[33;23H\u001b[K\u001b[34;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[34;28H\u001b[K\u001b[35;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m docker-archive:/tmp/busybox-archive:1.26\u001b[36;2H\u001b[96m\u001b[47m49\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[36;23H\u001b[K\u001b[37;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b" - ], - [ - 5.3e-05, - "[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[37;28H\u001b[K\u001b[38;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[6Cm /tmp/busybox-archive\u001b[38;32H\u001b[K\u001b[39;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[40;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[41;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[42;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[43;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[43;5H\u001b[K\u001b[44;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to oci without compression\"\u001b[m\u001b[93m\u001b[107m {\u001b[44;51H\u001b[K\u001b[45;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[46;2H\u001b[96m\u001b[47m59\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[46;23H\u001b[K\u001b[47;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[47;28H\u001b[K\u001b[48;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/oci-busybox\u001b[49;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[49;23H\u001b[K\u001b[50;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m" - ], - [ - 0.008247, - "\u001b[93m\u001b[107m -eq 0 ]\u001b[50;28H\u001b[K\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m  20%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;9H\u001b[?12l\u001b[?25h" - ], - [ - 2.125968, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[1;5H\u001b[K\u001b[2;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to containers/storage\"\u001b[m\u001b[93m\u001b[107m {\u001b[2;47H\u001b[K\u001b[3;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[4;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[4;23H\u001b[K\u001b[5;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[5;28H\u001b[K\u001b[6;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m containers-storage:[$ROOT]busybox:test\u001b[7;2H\u001b[96m\u001b[47m19\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[7;23H\u001b[K\u001b[8;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[8;28H\u001b[K\u001b[9;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[10;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[10;28H\u001b[K\u001b[11;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${OCIC_BINARY} image remove busybox:test\u001b[12;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b" - ], - [ - 7.1e-05, - "[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[13;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[14;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[15;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[15;5H\u001b[K\u001b[16;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to directory\"\u001b[m\u001b[93m\u001b[107m {\u001b[16;37H\u001b[K\u001b[17;2H\u001b[96m\u001b[47m29\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[18;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[18;23H\u001b[K\u001b[19;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[19;28H\u001b[K\u001b[20;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/busybox\u001b[21;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[21;23H\u001b[K\u001b[22;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[22;28H\u001b[K\u001b[23;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m dir:/tmp/busybox\u001b[24;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[24;23H\u001b[K\u001b[25;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"" - ], - [ - 0.007072, - "\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[25;28H\u001b[K\u001b[26;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[27;2H\u001b[96m\u001b[47m39\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[28;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Crm -rf /tmp/busybox\u001b[29;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[30;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[31;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[31;5H\u001b[K\u001b[32;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to docker archive\"\u001b[m\u001b[93m\u001b[107m {\u001b[32;42H\u001b[K\u001b[33;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[34;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[34;23H\u001b[K\u001b[35;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[35;28H\u001b[K\u001b[36;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m docker-archive:/tmp/busybox-archive:1.26\u001b[37;2H\u001b[96m\u001b[47m49\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[37;23H\u001b[K\u001b[38;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[3" - ], - [ - 4.4e-05, - "6m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[38;28H\u001b[K\u001b[39;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[6Cm /tmp/busybox-archive\u001b[39;32H\u001b[K\u001b[40;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[41;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[42;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[43;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[44;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[44;5H\u001b[K\u001b[45;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to oci without compression\"\u001b[m\u001b[93m\u001b[107m {\u001b[45;51H\u001b[K\u001b[46;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[47;2H\u001b[96m\u001b[47m59\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[47;23H\u001b[K\u001b[48;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[48;28H\u001b[K\u001b[49;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/oci-busybox\u001b[50;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[50;23H\u001b[K\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m  18%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m" - ], - [ - 0.002085, - "\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.16733, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[2;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[2;5H\u001b[K\u001b[3;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to containers/storage\"\u001b[m\u001b[93m\u001b[107m {\u001b[3;47H\u001b[K\u001b[4;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[5;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[5;23H\u001b[K\u001b[6;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[6;28H\u001b[K\u001b[7;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m containers-storage:[$ROOT]busybox:test\u001b[8;2H\u001b[96m\u001b[47m19\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[8;23H\u001b[K\u001b[9;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[9;28H\u001b[K\u001b[10;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[11;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[11;28H\u001b[K\u001b[12;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${OCIC_BINARY} image remove busybox:" - ], - [ - 8.8e-05, - "test\u001b[13;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[14;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[15;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[16;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[16;5H\u001b[K\u001b[17;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to directory\"\u001b[m\u001b[93m\u001b[107m {\u001b[17;37H\u001b[K\u001b[18;2H\u001b[96m\u001b[47m29\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[19;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[19;23H\u001b[K\u001b[20;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[20;28H\u001b[K\u001b[21;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/busybox\u001b[22;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[22;23H\u001b[K\u001b[23;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[23;28H\u001b[K\u001b[24;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m dir:/tmp/busybox\u001b[25;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[25;23H\u001b[K\u001b[26;3H\u001b[96m" - ], - [ - 0.007373, - "\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[26;28H\u001b[K\u001b[27;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[28;2H\u001b[96m\u001b[47m39\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[29;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5Crm -rf /tmp/busybox\u001b[30;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[31;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[32;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[32;5H\u001b[K\u001b[33;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to docker archive\"\u001b[m\u001b[93m\u001b[107m {\u001b[33;42H\u001b[K\u001b[34;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[35;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[35;23H\u001b[K\u001b[36;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[36;28H\u001b[K\u001b[37;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m docker-archive:/tmp/busybox-archive:1.26\u001b[38;2H\u001b[96m\u001b[47m49\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[38;23H\u001b[K\u001b" - ], - [ - 2.1e-05, - "[39;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[39;28H\u001b[K\u001b[40;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[6Cm /tmp/busybox-archive\u001b[40;32H\u001b[K\u001b[41;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[42;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[43;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C stop_crio\u001b[44;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[45;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[45;5H\u001b[K\u001b[46;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[1C@test \u001b[36m\"kpod push to oci without compression\"\u001b[m\u001b[93m\u001b[107m {\u001b[46;51H\u001b[K\u001b[47;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[5Crun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[48;2H\u001b[96m\u001b[47m59\u001b[m\u001b[93m\u001b[107m\u001b[5Cecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[48;23H\u001b[K\u001b[49;3H\u001b[96m\u001b[47m0\u001b[m\u001b[93m\u001b[107m\u001b[5C[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[49;28H\u001b[K\u001b[50;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[5Crun mkdir /tmp/oci-busybox\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m  17%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;9H\u001b[?1" - ], - [ - 1e-05, - "2l\u001b[?25h" - ], - [ - 0.244303, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m  18%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[5;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.495597, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[6;9H\u001b[1m\u001b[31m\u001b[106m[\u001b[17C]\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m  20%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[6;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.0243, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m[ \u001b[16C]\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m  21%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[7;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.030791, - "\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m  22%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[8;9H" - ], - [ - 0.034862, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[9;9H\u001b[1m\u001b[31m\u001b[106m[\u001b[17C]\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m  23%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m20\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[9;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.025609, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m[ \u001b[16C]\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m  24%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[10;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.03403, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[11;9H\u001b[1m\u001b[31m\u001b[106m[\u001b[17C]\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;70m\u001b[48;5;240m  25%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[11;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.346484, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m[ \u001b[16C]\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  26%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[12;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.422162, - "\u001b[51;209H48\u001b[12;52H" - ], - [ - 0.227309, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[34m-- INSERT --\u001b[m\u001b[93m\u001b[107m\u001b[52;13H\u001b[K" - ], - [ - 0.018402, - "\u001b[51;1H\u001b[1m\u001b[38;5;23m\u001b[48;5;231m INSERT \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;231m\u001b[48;5;31m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m\u001b[51;12H kpod-test-refactor \u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;31m\u001b[51;33H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31mtest/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;31mkpod_push.bats \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[m\u001b[93m\u001b[107m\u001b[51;54H\u001b[38;5;31m\u001b[48;5;24m\u001b[51;55H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;24m                                                                                                                      \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;180H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;188H\u001b[38;5;117m\u001b[48;5;24m conf\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;149m\u001b[48;5;31m  26%\u001b[m\u001b[" - ], - [ - 2.9e-05, - "93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;24m\u001b[48;5;117m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m 23\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;117m:49 \u001b[12;53H\u001b[?12l\u001b[?25h" - ], - [ - 0.11896, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;52H\u001b[K\u001b[51;53H\u001b[1m\u001b[38;5;220m\u001b[48;5;31m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[51;57H \u001b[m\u001b[93m\u001b[107m\u001b[152C\u001b[38;5;22m\u001b[48;5;117m8\u001b[12;52H\u001b[?12l\u001b[?25h" - ], - [ - 0.496088, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;51H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[12;51H\u001b[?12l\u001b[?25h" - ], - [ - 0.031493, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;50H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[12;50H\u001b[?12l\u001b[?25h" - ], - [ - 0.027468, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;49H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[12;49H\u001b[?12l\u001b[?25h" - ], - [ - 0.033381, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;48H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[12;48H\u001b[?12l\u001b[?25h" - ], - [ - 0.034028, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;47H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[12;47H\u001b[?12l\u001b[?25h" - ], - [ - 0.027933, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;46H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[12;46H\u001b[?12l\u001b[?25h" - ], - [ - 0.032743, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;45H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[12;45H\u001b[?12l\u001b[?25h" - ], - [ - 0.030113, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;44H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m0\u001b[12;44H\u001b[?12l\u001b[?25h" - ], - [ - 0.034589, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;43H\u001b[K\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m39\u001b[12;43H\u001b[?12l\u001b[?25h" - ], - [ - 0.023953, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;42H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[12;42H\u001b[?12l\u001b[?25h" - ], - [ - 0.192014, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;41H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[12;41H\u001b[?12l\u001b[?25h" - ], - [ - 0.74866, - "\u001b[?25l\u001b[51;210H6\u001b[12;40H\u001b[?12l\u001b[?25h" - ], - [ - 0.498543, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;39H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[12;39H\u001b[?12l\u001b[?25h" - ], - [ - 0.025782, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;38H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[12;38H\u001b[?12l\u001b[?25h" - ], - [ - 0.031784, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;37H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[12;37H\u001b[?12l\u001b[?25h" - ], - [ - 0.03173, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;36H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[12;36H\u001b[?12l\u001b[?25h" - ], - [ - 0.029779, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;35H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[12;35H\u001b[?12l\u001b[?25h" - ], - [ - 0.034013, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;34H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m0\u001b[12;34H\u001b[?12l\u001b[?25h" - ], - [ - 0.028916, - "\u001b[?25l\u001b[51;209H29\u001b[12;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.028505, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;32H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[12;32H\u001b[?12l\u001b[?25h" - ], - [ - 0.029212, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;31H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[12;31H\u001b[?12l\u001b[?25h" - ], - [ - 0.035421, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;30H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[12;30H\u001b[?12l\u001b[?25h" - ], - [ - 0.030293, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;29H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[12;29H\u001b[?12l\u001b[?25h" - ], - [ - 0.030509, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;28H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[12;28H\u001b[?12l\u001b[?25h" - ], - [ - 0.029979, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;14H\u001b[1m\u001b[31m\u001b[106m{\u001b[11C}\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[12;27H\u001b[?12l\u001b[?25h" - ], - [ - 0.03119, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;26H\u001b[K\u001b[12;14H{O\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[12;26H\u001b[?12l\u001b[?25h" - ], - [ - 0.032258, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;25H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[12;25H\u001b[?12l\u001b[?25h" - ], - [ - 0.02545, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;24H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m0\u001b[12;24H\u001b[?12l\u001b[?25h" - ], - [ - 0.035798, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;23H\u001b[K\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m19\u001b[12;23H\u001b[?12l\u001b[?25h" - ], - [ - 0.02867, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;22H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[12;22H\u001b[?12l\u001b[?25h" - ], - [ - 0.031704, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;21H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[12;21H\u001b[?12l\u001b[?25h" - ], - [ - 0.0333, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;20H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[12;20H\u001b[?12l\u001b[?25h" - ], - [ - 0.024988, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;19H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[12;19H\u001b[?12l\u001b[?25h" - ], - [ - 0.02881, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;18H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[12;18H\u001b[?12l\u001b[?25h" - ], - [ - 0.033247, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;17H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[12;17H\u001b[?12l\u001b[?25h" - ], - [ - 0.032484, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;16H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[12;16H\u001b[?12l\u001b[?25h" - ], - [ - 0.031784, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;15H\u001b[K\u001b[12;14H\u001b[1m\u001b[31m\u001b[106m{\u001b[15;5H}\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[12;15H\u001b[?12l\u001b[?25h" - ], - [ - 0.453651, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;14H\u001b[K\u001b[15;5H}\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m0\u001b[12;14H\u001b[?12l\u001b[?25h" - ], - [ - 0.192402, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;13H\u001b[K\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m9 \u001b[12;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.437798, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mk\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m10\u001b[12;14H\u001b[?12l\u001b[?25h" - ], - [ - 0.254702, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mp\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[12;15H\u001b[?12l\u001b[?25h" - ], - [ - 0.30839, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;14H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m0\u001b[12;14H\u001b[?12l\u001b[?25h" - ], - [ - 0.132923, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;13H\u001b[K\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m9 \u001b[12;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.318686, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m$\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m10\u001b[12;14H\u001b[?12l\u001b[?25h" - ], - [ - 0.283056, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m(\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[12;15H\u001b[?12l\u001b[?25h" - ], - [ - 0.330165, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;14H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m0\u001b[12;14H\u001b[?12l\u001b[?25h" - ], - [ - 0.516215, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m{\b\u001b[1m\u001b[31m\u001b[106m{\u001b[15;5H}\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[12;15H\u001b[?12l\u001b[?25h" - ], - [ - 0.658201, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mK\b\b{K\u001b[15;5H}\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[12;16H\u001b[?12l\u001b[?25h" - ], - [ - 0.143261, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mP\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[12;17H\u001b[?12l\u001b[?25h" - ], - [ - 0.123887, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mO\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[12;18H\u001b[?12l\u001b[?25h" - ], - [ - 0.169592, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mD\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[12;19H\u001b[?12l\u001b[?25h" - ], - [ - 0.345485, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m_\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[12;20H\u001b[?12l\u001b[?25h" - ], - [ - 0.181625, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mB\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[12;21H\u001b[?12l\u001b[?25h" - ], - [ - 0.084398, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mI\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[12;22H\u001b[?12l\u001b[?25h" - ], - [ - 0.111056, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mN\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m9\u001b[12;23H\u001b[?12l\u001b[?25h" - ], - [ - 0.128088, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mA\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m20\u001b[12;24H\u001b[?12l\u001b[?25h" - ], - [ - 0.131002, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mR\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[12;25H\u001b[?12l\u001b[?25h" - ], - [ - 0.165526, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mY\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[12;26H\u001b[?12l\u001b[?25h" - ], - [ - 0.657525, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m}\u001b[12;14H\u001b[1m\u001b[31m\u001b[106m{\u001b[11C}\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[12;27H\u001b[?12l\u001b[?25h" - ], - [ - 0.183629, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;14H{K\u001b[10C} \u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[12;28H\u001b[?12l\u001b[?25h" - ], - [ - 0.447484, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m$\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[12;29H\u001b[?12l\u001b[?25h" - ], - [ - 0.17344, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mK\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[12;30H\u001b[?12l\u001b[?25h" - ], - [ - 0.115871, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mP\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[12;31H\u001b[?12l\u001b[?25h" - ], - [ - 0.090564, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mO\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[12;32H\u001b[?12l\u001b[?25h" - ], - [ - 0.114158, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mD\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m9\u001b[12;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.141443, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m_\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m30\u001b[12;34H\u001b[?12l\u001b[?25h" - ], - [ - 0.23065, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mO\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[12;35H\u001b[?12l\u001b[?25h" - ], - [ - 0.144279, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mP\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[12;36H\u001b[?12l\u001b[?25h" - ], - [ - 0.096025, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mT\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[12;37H\u001b[?12l\u001b[?25h" - ], - [ - 0.093663, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mI\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[12;38H\u001b[?12l\u001b[?25h" - ], - [ - 0.079633, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mO\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[12;39H\u001b[?12l\u001b[?25h" - ], - [ - 0.081562, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mN\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[12;40H\u001b[?12l\u001b[?25h" - ], - [ - 0.084293, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mS\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[12;41H\u001b[?12l\u001b[?25h" - ], - [ - 0.137772, - "\u001b[?25l\u001b[51;210H8\u001b[12;42H\u001b[?12l\u001b[?25h" - ], - [ - 0.094796, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mr\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m9\u001b[12;43H\u001b[?12l\u001b[?25h" - ], - [ - 0.14112, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mm\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m40\u001b[12;44H\u001b[?12l\u001b[?25h" - ], - [ - 0.100405, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mi\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[12;45H\u001b[?12l\u001b[?25h" - ], - [ - 0.104584, - "\u001b[?25l\u001b[51;210H2\u001b[12;46H\u001b[?12l\u001b[?25h" - ], - [ - 0.138653, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m$\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[12;47H\u001b[?12l\u001b[?25h" - ], - [ - 0.344074, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;46H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[12;46H\u001b[?12l\u001b[?25h" - ], - [ - 0.199704, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\"\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[12;47H\u001b[?12l\u001b[?25h" - ], - [ - 0.127088, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m$\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[12;48H\u001b[?12l\u001b[?25h" - ], - [ - 0.143183, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mK\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[12;49H\u001b[?12l\u001b[?25h" - ], - [ - 0.328141, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;48H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[12;48H\u001b[?12l\u001b[?25h" - ], - [ - 0.170702, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mI\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[12;49H\u001b[?12l\u001b[?25h" - ], - [ - 0.084435, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mM\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[12;50H\u001b[?12l\u001b[?25h" - ], - [ - 0.098537, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mA\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[12;51H\u001b[?12l\u001b[?25h" - ], - [ - 0.163497, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mG\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[12;52H\u001b[?12l\u001b[?25h" - ], - [ - 0.105928, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mE\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m9\u001b[12;53H\u001b[?12l\u001b[?25h" - ], - [ - 0.145464, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[12;46H\u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m50\u001b[12;54H\u001b[?12l\u001b[?25h" - ], - [ - 0.391443, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K" - ], - [ - 0.007246, - "\u001b[51;1H\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;31m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H kpod-test-refactor \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;33H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mtest/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mkpod_push.bats\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[m\u001b[93m\u001b[107m\u001b[51;56H\u001b[38;5;240m\u001b[48;5;236m\u001b[51;57H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                    \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;180H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;188H\u001b[38;5;247m\u001b[48;5;236m conf\u001b" - ], - [ - 2.4e-05, - "[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  26%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 23\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;252m:49 \u001b[12;53H\u001b[?12l\u001b[?25h" - ], - [ - 0.297107, - "\u001b[?25l\u001b[52;1H\u001b[m\u001b[93m\u001b[107m:\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.311391, - "w\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.071982, - "q" - ], - [ - 7.5e-05, - "\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.127973, - "\r" - ], - [ - 0.000142, - "\u001b[?25l\u001b[?2004l" - ], - [ - 0.000165, - "\"test/kpod_push.bats\"" - ], - [ - 0.006449, - " 87L, 2372C written" - ], - [ - 0.013487, - "\r\r\r\n\u001b[39;49m\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.002115, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.022207, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-test-refactor* \u001b[39m \u001b[33m25s\u001b[39m\r\n" - ], - [ - 0.000932, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000102, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000173, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.1e-05, - "\u001b[?1h\u001b=" - ], - [ - 1.9e-05, - "\u001b[?2004h" - ], - [ - 0.394575, - "g" - ], - [ - 0.216017, - "\bgi" - ], - [ - 0.088382, - "t" - ], - [ - 0.103545, - " " - ], - [ - 0.128191, - "c" - ], - [ - 0.000178, - "o" - ], - [ - 0.079694, - "m" - ], - [ - 0.279792, - "m" - ], - [ - 0.248528, - "i" - ], - [ - 0.111816, - "t" - ], - [ - 0.087626, - " " - ], - [ - 0.128727, - "-" - ], - [ - 0.095251, - "a" - ], - [ - 0.096123, - " " - ], - [ - 0.104484, - "-" - ], - [ - 0.143571, - "-" - ], - [ - 0.087942, - "a" - ], - [ - 0.104175, - "m" - ], - [ - 0.112113, - "e" - ], - [ - 0.103848, - "n" - ], - [ - 0.112584, - "d" - ], - [ - 0.247762, - "\u001b[?1l\u001b>" - ], - [ - 0.000208, - "\u001b[?2004l\r\r\n" - ], - [ - 0.005064, - "\u001b]2;git commit -a --amend\u0007\u001b]1;git\u0007" - ], - [ - 0.032749, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000317, - "\u001b[1;52r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[H\u001b[2J\u001b[?25l\u001b[52;1H\"~/Development/Go/src/github.com/kubernetes-incubator/cri-o/.git/COMMIT_EDITMSG\"" - ], - [ - 5.3e-05, - " 24L, 716C" - ], - [ - 0.000154, - "\u001b[1;1HRefactor kpod tests\r\n\r\nMove kpod tests from kpod.bats to kpod_[commandname].bats\r\n\r\nSigned-off-by: Ryan Cole \r\n\r\n# Please enter the commit message for your changes. Lines starting\r\n# with '#' will be ignored, and an empty message aborts the commit.\r\n#\r\n# Date: Mon Aug 14 09:15:22 2017 -0400\r\n#\r\n# On branch kpod-test-refactor\r\n# Changes to be committed:\r\n#\u001b[7Cdeleted: test/kpod.bats\r\n#\u001b[7Cmodified: test/kpod_diff.bats\r\n#\u001b[7Cnew file: test/kpod_history.bats\r\n#\u001b[7Cnew file: test/kpod_images.bats\r\n#\u001b[7Cnew file: test/kpod_inspect.bats\r\n#\u001b[7Cmodified: test/kpod_load.bats\r\n#\u001b[7Cnew file: test/kpod_pull.bats\r\n#\u001b[7Cnew file: test/kpod_push.bats\r\n#\u001b[7Cmodified: test/kpod_save.bats\r\n#\u001b[7Cnew file: test/kpod_version.bats\r\n#\r\n\u001b[94m~ \u001b[26;1H~ " - ], - [ - 2.5e-05, - " \u001b[27;1H~ \u001b[28;1H~ \u001b[29;1H~ \u001b[30;1H~ " - ], - [ - 5.1e-05, - " \u001b[31;1H~ \u001b[32;1H~ \u001b[33;1H~ \u001b[34;1H~ \u001b[35;1H~ " - ], - [ - 1.9e-05, - " \u001b[36;1H~ \u001b[37;1H~ \u001b[38;1H~ \u001b[39;1H~ \u001b[40;1H~ " - ], - [ - 1.7e-05, - " \u001b[41;1H~ \u001b[42;1H~ \u001b[43;1H~ \u001b[44;1H~ " - ], - [ - 1.6e-05, - " \u001b[45;1H~ \u001b[46;1H~ \u001b[47;1H~ \u001b[48;1H~ \u001b[49;1H~ " - ], - [ - 1.8e-05, - " \u001b[50;1H~ \u001b[51;1H~ \u001b[1;1H\u001b[?12l\u001b[?25h" - ], - [ - 0.25699, - "\u001b[?25l\u001b[m\u001b[52;1H\u001b[K\u001b[52;1H:\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.159615, - "w" - ], - [ - 0.06399, - "q" - ], - [ - 0.072292, - "\r\u001b[?25l\u001b[?2004l\".git/COMMIT_EDITMSG\"" - ], - [ - 0.006984, - " 24L, 716C written" - ], - [ - 0.000191, - "\r\r\r\n\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.004761, - "[kpod-test-refactor 72c6c49b] Refactor kpod tests\r\n Date: Mon Aug 14 09:15:22 2017 -0400\r\n 10 files changed, 335 insertions(+), 253 deletions(-)\r\n delete mode 100644 test/kpod.bats\r\n create mode 100644 test/kpod_history.bats\r\n create mode 100644 test/kpod_images.bats\r\n create mode 100644 test/kpod_inspect.bats\r\n create mode 100644 test/kpod_pull.bats\r\n create mode 100644 test/kpod_push.bats\r\n create mode 100644 test/kpod_version.bats\r\n\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.02706, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-test-refactor \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.003213, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000199, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 1.9e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000122, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 5.3e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.6e-05, - "\u001b[?2004h" - ], - [ - 0.141189, - "g" - ], - [ - 0.128024, - "\bgi" - ], - [ - 0.071759, - "t" - ], - [ - 0.10427, - " " - ], - [ - 0.096092, - "p" - ], - [ - 0.09589, - "u" - ], - [ - 0.112424, - "s" - ], - [ - 0.1201, - "h" - ], - [ - 0.111109, - " " - ], - [ - 0.088607, - "-" - ], - [ - 0.119704, - "f" - ], - [ - 0.128014, - " " - ], - [ - 0.11191, - "o" - ], - [ - 0.112657, - "r" - ], - [ - 0.103811, - "i" - ], - [ - 0.119689, - "g" - ], - [ - 0.096661, - "i" - ], - [ - 0.039472, - "n" - ], - [ - 0.095541, - " " - ], - [ - 0.12086, - "k" - ], - [ - 0.085614, - "pod-" - ], - [ - 0.185148, - "t" - ], - [ - 0.048017, - "e" - ], - [ - 0.205899, - "st-refactor\u001b[1m \u001b[0m" - ], - [ - 0.179325, - "\b\u001b[0m r" - ], - [ - 0.112012, - "e" - ], - [ - 0.271558, - "\b \b" - ], - [ - 0.127775, - "\b \b" - ], - [ - 0.160077, - "\b" - ], - [ - 0.144317, - "\b \b" - ], - [ - 0.455941, - "r" - ], - [ - 0.336133, - "\u001b[?1l\u001b>" - ], - [ - 0.001355, - "\u001b[?2004l\r\r\n" - ], - [ - 0.003918, - "\u001b]2;git push -f origin kpod-test-refactor\u0007\u001b]1;git\u0007" - ], - [ - 1.183521, - "Counting objects: 12, done.\r\n" - ], - [ - 0.000161, - "Delta compression using up to 4 threads.\r\n" - ], - [ - 8.9e-05, - "Compressing objects: 8% (1/12) \rCompressing objects: 16% (2/12) \r" - ], - [ - 0.00016, - "Compressing objects: 25% (3/12) \r" - ], - [ - 2.3e-05, - "Compressing objects: 33% (4/12) \r" - ], - [ - 3.7e-05, - "Compressing objects: 41% (5/12) \r" - ], - [ - 6.9e-05, - "Compressing objects: 50% (6/12) \r" - ], - [ - 0.000102, - "Compressing objects: 58% (7/12) \r" - ], - [ - 5.4e-05, - "Compressing objects: 66% (8/12) \r" - ], - [ - 8.2e-05, - "Compressing objects: 75% (9/12) \r" - ], - [ - 5.7e-05, - "Compressing objects: 83% (10/12) \r" - ], - [ - 5.8e-05, - "Compressing objects: 91% (11/12) \r" - ], - [ - 5.4e-05, - "Compressing objects: 100% (12/12) \r" - ], - [ - 4.4e-05, - "Compressing objects: 100% (12/12), done.\r\n" - ], - [ - 0.000167, - "Writing objects: 8% (1/12) \r" - ], - [ - 5.7e-05, - "Writing objects: 16% (2/12) \r" - ], - [ - 0.000171, - "Writing objects: 25% (3/12) \r" - ], - [ - 5e-05, - "Writing objects: 33% (4/12) \r" - ], - [ - 0.000129, - "Writing objects: 41% (5/12) \r" - ], - [ - 0.000182, - "Writing objects: 58% (7/12) \r" - ], - [ - 5.9e-05, - "Writing objects: 66% (8/12) \r" - ], - [ - 7e-05, - "Writing objects: 75% (9/12) \r" - ], - [ - 7.9e-05, - "Writing objects: 83% (10/12) \r" - ], - [ - 3.8e-05, - "Writing objects: 91% (11/12) \r" - ], - [ - 4.3e-05, - "Writing objects: 100% (12/12) \r" - ], - [ - 4.1e-05, - "Writing objects: 100% (12/12), 2.57 KiB | 2.57 MiB/s, done.\r\nTotal 12 (delta 9), reused 0 (delta 0)\r\n" - ], - [ - 0.086353, - "remote: Resolving deltas: 0% (0/9) \u001b[K\r" - ], - [ - 0.040457, - "remote: Resolving deltas: 22% (2/9) \u001b[K\rremote: Resolving deltas: 44% (4/9) \u001b[K\rremote: Resolving deltas: 55% (5/9) \u001b[K\rremote: Resolving deltas: 66% (6/9) \u001b[K\rremote: Resolving deltas: 77% (7/9) \u001b[K\rremote: Resolving deltas: 88% (8/9) \u001b[K\rremote: Resolving deltas: 100% (9/9) \u001b[K\rremote: Resolving deltas: 100% (9/9), completed with 5 local objects.\u001b[K\r\n" - ], - [ - 1.343638, - "To github.com:14rcole/cri-o\r\n + 9327604d...72c6c49b kpod-test-refactor -> kpod-test-refactor (forced update)\r\n" - ], - [ - 0.003519, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.027554, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-test-refactor \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.002119, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000223, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007" - ], - [ - 2.1e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 8.9e-05, - "\u001b[?1h\u001b=" - ], - [ - 3.1e-05, - "\u001b[?2004h" - ], - [ - 73.029405, - "g" - ], - [ - 0.116068, - "\bgi" - ], - [ - 0.083652, - "t" - ], - [ - 0.111933, - " " - ], - [ - 0.116198, - "c" - ], - [ - 0.095668, - "h" - ], - [ - 0.100371, - "e" - ], - [ - 0.075276, - "c" - ], - [ - 0.069067, - "k" - ], - [ - 0.155349, - "o" - ], - [ - 0.080863, - "u" - ], - [ - 0.107261, - "t" - ], - [ - 0.143931, - " " - ], - [ - 6.94391, - "k" - ], - [ - 0.367099, - "pod-" - ], - [ - 0.46577, - "r" - ], - [ - 0.096061, - "e" - ], - [ - 0.095387, - "n" - ], - [ - 0.18511, - "ame\u001b[1m \u001b[0m" - ], - [ - 0.335066, - "\b\u001b[0m \b" - ], - [ - 0.00018, - "\u001b[?1l\u001b>" - ], - [ - 8.1e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.004082, - "\u001b]2;git checkout kpod-rename\u0007\u001b]1;git\u0007" - ], - [ - 0.040772, - "Switched to branch 'kpod-rename'\r\n" - ], - [ - 0.000659, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.028625, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-rename \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.002148, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 8.7e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000293, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 5.1e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.6e-05, - "\u001b[?2004h" - ], - [ - 2.266962, - "2" - ], - [ - 0.199874, - "\b27" - ], - [ - 0.248374, - "G" - ], - [ - 0.479833, - "\b \b" - ], - [ - 0.151084, - "\b\b2 \b" - ], - [ - 0.168998, - "\b \b" - ], - [ - 0.976089, - "v" - ], - [ - 0.102867, - "\bvi" - ], - [ - 0.05621, - " " - ], - [ - 0.096671, - "t" - ], - [ - 0.072195, - "e" - ], - [ - 0.167866, - "t" - ], - [ - 0.199366, - "k" - ], - [ - 0.351527, - "\b \b" - ], - [ - 0.113612, - "\u0007" - ], - [ - 0.454797, - "\b \b" - ], - [ - 0.11181, - "s" - ], - [ - 0.178442, - "t\u001b[1m/\u001b[0m" - ], - [ - 0.39881, - "\b\u001b[0m/k" - ], - [ - 0.096645, - "pod" - ], - [ - 0.622458, - "\b \b" - ], - [ - 0.616269, - "f" - ], - [ - 0.424159, - "\b \b" - ], - [ - 0.136035, - "d" - ], - [ - 0.191761, - "_" - ], - [ - 0.255541, - "r" - ], - [ - 0.096112, - "e" - ], - [ - 0.224777, - "n" - ], - [ - 0.139367, - "ame.bats\u001b[1m \u001b[0m" - ], - [ - 0.909463, - "\b\u001b[0m \b\u001b[?1l\u001b>\u001b[?2004l\r\r\n" - ], - [ - 0.001881, - "\u001b]2;vim test/kpod_rename.bats\u0007\u001b]1;vi\u0007" - ], - [ - 0.132692, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000558, - "\u001b[1;52r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[52;1H\"test/kpod_rename.bats\"" - ], - [ - 0.000156, - " 35L, 907C" - ], - [ - 0.003097, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H\u001b[>c" - ], - [ - 0.000674, - "\u001b[1;1H\u001b[96m\u001b[47m 1 \u001b[m\u001b[93m\u001b[107m\u001b[96m#!/usr/bin/env bats\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 2 \r\n 3 \u001b[m\u001b[93m\u001b[107mload helpers\r\n\u001b[96m\u001b[47m 4 \r\n 5 \u001b[m\u001b[93m\u001b[107mIMAGE=\u001b[36m\"redis:alpine\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 6 \u001b[m\u001b[93m\u001b[107mROOT=\u001b[36m\"$TESTDIR/crio\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 7 \u001b[m\u001b[93m\u001b[107mRUNROOT=\u001b[36m\"$TESTDIR/crio-run\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 8 \u001b[m\u001b[93m\u001b[107mKPOD_OPTIONS=\u001b[36m\"--root $ROOT --runroot $RUNROOT $STORAGE_OPTS\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 9 \u001b[m\u001b[93m\u001b[107mNEW_NAME=\u001b[36m\"rename-test\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 10 \r\n 11 \u001b[m\u001b[93m\u001b[107mfunction teardown() {\r\n\u001b[96m\u001b[47m 12 \u001b[m\u001b[93m\u001b[107m cleanup_test\r\n\u001b[96m\u001b[47m 13 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 14 \r\n 15 \u001b[m\u001b[93m\u001b[107m@test \u001b[36m\"kpod rename successful\"\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 16 \u001b[m\u001b[93m\u001b[107m start_crio\r\n\u001b[96m\u001b[47m 17 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE\r\n\u001b[96m\u001b[47m 18 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 19 \u001b[m\u001b[93m\u001b[107m run crioctl pod run --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m" - ], - [ - 1.2e-05, - "\u001b[107m/sandbox_config.json\r\n\u001b[96m\u001b[47m 20 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 21 \u001b[m\u001b[93m\u001b[107m pod_id=\u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 22 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 23 \u001b[m\u001b[93m\u001b[107m run ${OCIC_BINARY} ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 24 \u001b[m\u001b[93m\u001b[107m ctr_id=\u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 25 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS rename \u001b[36m\"$ctr_id\"\u001b[m\u001b[93m\u001b[107m \u001b[36m\"$NEW_NAME\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 26 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 27 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 28 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS inspect \u001b[36m\"$ctr_id\"\u001b[m\u001b[93m\u001b[107m --format {{.Name}}\r\n\u001b[96m\u001b[47m 29 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 30 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 31 " - ], - [ - 7.9e-05, - "\u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m == \u001b[36m\"$NEW_NAME\"\u001b[m\u001b[93m\u001b[107m ]\r\n\u001b[96m\u001b[47m 32 \u001b[m\u001b[93m\u001b[107m cleanup_ctrs\r\n\u001b[96m\u001b[47m 33 \u001b[m\u001b[93m\u001b[107m cleanup_pods\r\n\u001b[96m\u001b[47m 34 \u001b[m\u001b[93m\u001b[107m stop_crio\r\n\u001b[96m\u001b[47m 35 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[1m\u001b[94m~ \u001b[37;1H~ \u001b[38;1H~ \u001b[39;1H~ " - ], - [ - 1.1e-05, - " \u001b[40;1H~ \u001b[41;1H~ \u001b[42;1H~ \u001b[43;1H~ \u001b[44;1H~ " - ], - [ - 0.029235, - " \u001b[45;1H~ \u001b[46;1H~ \u001b[47;1H~ \u001b[48;1H~ " - ], - [ - 9.4e-05, - " \u001b[49;1H~ \u001b[50;1H~ \u001b[m\u001b[93m\u001b[107m\u001b[51;1H\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H kpod-rename \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;26H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mtest/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mkpod_rename.bats \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[51;50H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                            " - ], - [ - 0.011325, - "                                               \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;180H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;188H\u001b[38;5;247m\u001b[48;5;236m conf\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 19\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5  \u001b[19;9H\u001b[?12l\u001b[?25h\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 2.388427, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[27;9H\u001b[1m\u001b[31m\u001b[106m[\u001b[17C]\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  77%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m27\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[27;9H\u001b[?12l\u001b[?25h" - ], - [ - 2.299389, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m[ \u001b[16C]\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  74%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[26;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.528255, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[27;9H\u001b[1m\u001b[31m\u001b[106m[\u001b[17C]\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  77%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[27;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.321714, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m[ \u001b[16C]\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  74%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[26;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.403252, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  71%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[25;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.215177, - "\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  74%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[26;9H" - ], - [ - 27.227284, - "\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  71%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[25;9H" - ], - [ - 0.172124, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  69%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[24;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.422664, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  66%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[23;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.245489, - "\u001b[51;209H4\u001b[23;8H" - ], - [ - 0.280877, - "\u001b[51;209H5\u001b[23;9H" - ], - [ - 0.495366, - "\u001b[51;209H6\u001b[23;10H" - ], - [ - 0.032687, - "\u001b[51;209H7\u001b[23;11H" - ], - [ - 0.030514, - "\u001b[51;209H8\u001b[23;12H" - ], - [ - 0.031651, - "\u001b[51;209H9\u001b[23;13H" - ], - [ - 0.033388, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m$\u001b[1m\u001b[31m\u001b[106m{\u001b[11C}\u001b[m\u001b[93m\u001b[107m\u001b[51;209H\u001b[38;5;22m\u001b[48;5;252m10\u001b[23;14H\u001b[?12l\u001b[?25h" - ], - [ - 0.027913, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m{O\u001b[10C} \u001b[51;210H\u001b[38;5;22m\u001b[48;5;252m1\u001b[23;15H\u001b[?12l\u001b[?25h" - ], - [ - 0.155223, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[31m\u001b[106m{\u001b[11C}\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;252m0\u001b[23;14H\u001b[?12l\u001b[?25h" - ], - [ - 0.174127, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m{O\u001b[10C} \u001b[51;209H\u001b[38;5;22m\u001b[48;5;252m9 \u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.191338, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[31m\u001b[106m{\u001b[m\u001b[93m\u001b[107mOCIC_BINARY\u001b[1m\u001b[31m\u001b[106m}\u001b[m\u001b[93m\u001b[107m ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;96H\u001b[K\u001b[51;48H\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[51;52H \u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.500617, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mOCIC_BINARY} ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;95H\u001b[K\u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.021176, - "\u001b[?25lCIC_BINARY} ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;94H\u001b[K\u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.035102, - "\u001b[?25lIC_BINARY} ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;93H\u001b[K\u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.028745, - "\u001b[?25lC_BINARY} ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;92H\u001b[K\u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.026326, - "\u001b[?25l_BINARY} ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;91H\u001b[K\u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.034424, - "\u001b[?25lBINARY} ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;90H\u001b[K\u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.029844, - "\u001b[?25lINARY} ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;89H\u001b[K\u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.031125, - "\u001b[?25lNARY} ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;88H\u001b[K\u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.03287, - "\u001b[?25lARY} ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;87H\u001b[K\u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.196796, - "\u001b[?25lRY} ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;86H\u001b[K\u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.182819, - "\u001b[?25lY} ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;85H\u001b[K\u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.433786, - "\u001b[?25l\u001b[15;36H\u001b[1m\u001b[31m\u001b[106m{\u001b[23;13H}\u001b[m\u001b[93m\u001b[107m ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;84H\u001b[K\u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.196117, - "\u001b[?25l\u001b[52;1H\u001b[34m-- INSERT --\u001b[m\u001b[93m\u001b[107m\u001b[52;13H\u001b[K" - ], - [ - 0.015372, - "\u001b[23;13H\u001b[1m\u001b[31m\u001b[106m \u001b[m\u001b[93m\u001b[107mctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[23;83H\u001b[K\u001b[15;36H{\u001b[23;13H c\u001b[51;1H\u001b[1m\u001b[38;5;23m\u001b[48;5;231m INSERT \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;231m\u001b[48;5;31m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m\u001b[51;12H kpod-rename \u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;31m\u001b[51;26H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31mtest/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;31mkpod_rename.bats\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;220m\u001b[48;5;31m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[m\u001b[93m\u001b[107m\u001b[51;51H\u001b[38;5;31m\u001b[48;5;24m\u001b[51;52H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;24m                                                                                                                         \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107" - ], - [ - 4.8e-05, - "m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;180H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;188H\u001b[38;5;117m\u001b[48;5;24m conf\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;186m\u001b[48;5;31m  66%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;24m\u001b[48;5;117m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m 23\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;117m:9  \u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.860848, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mc ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m10\u001b[23;14H\u001b[?12l\u001b[?25h" - ], - [ - 0.195551, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mr ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[23;15H\u001b[?12l\u001b[?25h" - ], - [ - 0.048944, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mi ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[23;16H\u001b[?12l\u001b[?25h" - ], - [ - 0.106817, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mo ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[23;17H\u001b[?12l\u001b[?25h" - ], - [ - 0.070042, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mc ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[23;18H\u001b[?12l\u001b[?25h" - ], - [ - 0.207299, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mt ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[23;19H\u001b[?12l\u001b[?25h" - ], - [ - 0.084867, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107ml ctr create --config \u001b[36m\"$TESTDATA\"\u001b[m\u001b[93m\u001b[107m/container_config.json --pod \u001b[36m\"$pod_id\"\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[23;20H\u001b[?12l\u001b[?25h" - ], - [ - 0.230817, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K" - ], - [ - 0.005085, - "\u001b[51;1H\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;31m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H kpod-rename \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;26H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mtest/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mkpod_rename.bats\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[m\u001b[93m\u001b[107m\u001b[51;51H\u001b[38;5;240m\u001b[48;5;236m\u001b[51;52H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                         \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;180H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;188H\u001b[38;5;247m\u001b[48;5;236m " - ], - [ - 4.1e-05, - "conf\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  66%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 23\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;252m:15 \u001b[23;19H\u001b[?12l\u001b[?25h" - ], - [ - 0.30678, - "\u001b[?25l\u001b[52;1H\u001b[m\u001b[93m\u001b[107m:\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.127132, - "w" - ], - [ - 3.3e-05, - "\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.056701, - "q\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.079826, - "\r" - ], - [ - 0.000364, - "\u001b[?25l\u001b[?2004l\"test/kpod_rename.bats\"" - ], - [ - 0.012084, - " 35L, 900C written" - ], - [ - 0.014515, - "\r\r\r\n\u001b[39;49m\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.002629, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.024698, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-rename* \u001b[39m \u001b[33m40s\u001b[39m\r\n" - ], - [ - 0.000938, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000106, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007" - ], - [ - 9.8e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 4.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 1.6e-05, - "\u001b[?2004h" - ], - [ - 1.169246, - "g" - ], - [ - 0.271442, - "\bgi" - ], - [ - 0.079187, - "t" - ], - [ - 0.145049, - " " - ], - [ - 0.112281, - "c" - ], - [ - 0.048316, - "o" - ], - [ - 0.091902, - "m" - ], - [ - 0.743999, - "m" - ], - [ - 0.143304, - "i" - ], - [ - 0.107889, - "t" - ], - [ - 0.096264, - " " - ], - [ - 0.132679, - "-" - ], - [ - 0.103518, - "a" - ], - [ - 0.107512, - " " - ], - [ - 0.131904, - "-" - ], - [ - 0.116215, - "-" - ], - [ - 0.115981, - "a" - ], - [ - 0.204267, - "e" - ], - [ - 0.163917, - "n" - ], - [ - 0.392189, - "\b \b" - ], - [ - 0.151483, - "\b \b" - ], - [ - 0.176794, - "m" - ], - [ - 0.103142, - "e" - ], - [ - 0.111978, - "n" - ], - [ - 0.119562, - "d" - ], - [ - 0.112961, - "\u001b[?1l\u001b>" - ], - [ - 0.001554, - "\u001b[?2004l\r\r\n" - ], - [ - 0.00586, - "\u001b]2;git commit -a --amend\u0007\u001b]1;git\u0007" - ], - [ - 0.024458, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.003473, - "\u001b[1;52r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[H\u001b[2J\u001b[?25l\u001b[52;1H\"~/Development/Go/src/github.com/kubernetes-incubator/cri-o/.git/COMMIT_EDITMSG\"" - ], - [ - 0.000192, - " 23L, 623C" - ], - [ - 0.000113, - "\u001b[1;1Himplement kpod rename\r\n\r\nrename a container\r\n\r\nSigned-off-by: Ryan Cole \r\n\r\n# Please enter the commit message for your changes. Lines starting\r\n# with '#' will be ignored, and an empty message aborts the commit.\r\n#\r\n# Date: Mon Aug 14 13:30:24 2017 -0400\r\n#\r\n# On branch kpod-rename\r\n# Changes to be committed:\r\n#\u001b[7Cmodified: cmd/kpod/common.go\r\n#\u001b[7Cmodified: cmd/kpod/main.go\r\n#\u001b[7Cnew file: cmd/kpod/rename.go\r\n#\u001b[7Cmodified: completions/bash/kpod\r\n#\u001b[7Cnew file: docs/kpod-rename.1.md\r\n#\u001b[7Cmodified: docs/kpod.1.md\r\n#\u001b[7Cnew file: libkpod/rename.go\r\n#\u001b[7Cmodified: oci/container.go\r\n#\u001b[7Cnew file: test/kpod_rename.bats\r\n#\r\n\u001b[94m~ \u001b[25;1H~ " - ], - [ - 5.1e-05, - " \u001b[26;1H~ \u001b[27;1H~ \u001b[28;1H~ \u001b[29;1H~ \u001b[30;1H~ " - ], - [ - 3.6e-05, - " \u001b[31;1H~ \u001b[32;1H~ \u001b[33;1H~ \u001b[34;1H~ " - ], - [ - 3.3e-05, - " \u001b[35;1H~ \u001b[36;1H~ \u001b[37;1H~ \u001b[38;1H~ \u001b[39;1H~ " - ], - [ - 9.6e-05, - " \u001b[40;1H~ \u001b[41;1H~ \u001b[42;1H~ \u001b[43;1H~ \u001b[44;1H~ " - ], - [ - 2.8e-05, - " \u001b[45;1H~ \u001b[46;1H~ \u001b[47;1H~ \u001b[48;1H~ \u001b[49;1H~ " - ], - [ - 1.7e-05, - " \u001b[50;1H~ \u001b[51;1H~ \u001b[1;1H\u001b[?12l\u001b[?25h" - ], - [ - 0.324118, - "\u001b[?25l\u001b[m\u001b[52;1H\u001b[K\u001b[52;1H:\u001b[?2004h" - ], - [ - 0.000183, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.183, - "w" - ], - [ - 0.056247, - "q" - ], - [ - 0.073571, - "\r\u001b[?25l\u001b[?2004l\".git/COMMIT_EDITMSG\"" - ], - [ - 0.012337, - " 23L, 623C written" - ], - [ - 9.6e-05, - "\r\r\r\n\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.003601, - "[kpod-rename 1eb21f8e] implement kpod rename\r\n Date: Mon Aug 14 13:30:24 2017 -0400\r\n" - ], - [ - 0.000896, - " 9 files changed, 261 insertions(+), 1 deletion(-)\r\n create mode 100644 cmd/kpod/rename.go\r\n create mode 100644 docs/kpod-rename.1.md\r\n create mode 100644 libkpod/rename.go\r\n create mode 100644 test/kpod_rename.bats\r\n" - ], - [ - 0.000559, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.027462, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-rename \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001241, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000117, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.4e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 9.9e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.3e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.7e-05, - "\u001b[?2004h" - ], - [ - 0.12051, - "g" - ], - [ - 0.119913, - "\bgi" - ], - [ - 0.112417, - "t" - ], - [ - 0.143512, - " " - ], - [ - 0.095889, - "p" - ], - [ - 0.079922, - "u" - ], - [ - 0.088511, - "s" - ], - [ - 0.127486, - "h" - ], - [ - 0.087736, - " " - ], - [ - 0.151933, - "-" - ], - [ - 0.128526, - "f" - ], - [ - 0.112515, - " " - ], - [ - 0.06351, - "o" - ], - [ - 0.136509, - "r" - ], - [ - 0.103539, - "i" - ], - [ - 0.128398, - "g" - ], - [ - 0.063485, - "i" - ], - [ - 0.080165, - "n" - ], - [ - 0.064001, - " " - ], - [ - 0.1677, - "k" - ], - [ - 0.091269, - "pod-" - ], - [ - 0.293058, - "r" - ], - [ - 0.11185, - "e" - ], - [ - 0.135834, - "n" - ], - [ - 0.171262, - "ame\u001b[1m \u001b[0m" - ], - [ - 0.164965, - "\b\u001b[0m \b" - ], - [ - 0.000197, - "\u001b[?1l\u001b>" - ], - [ - 0.000188, - "\u001b[?2004l\r\r\n" - ], - [ - 0.004459, - "\u001b]2;git push -f origin kpod-rename\u0007\u001b]1;git\u0007" - ], - [ - 0.74388, - "Counting objects: 19, done.\r\n" - ], - [ - 0.000183, - "Delta compression using up to 4 threads.\r\n" - ], - [ - 3.8e-05, - "Compressing objects: 5% (1/17) \rCompressing objects: 11% (2/17) \r" - ], - [ - 0.000177, - "Compressing objects: 17% (3/17) \r" - ], - [ - 8.9e-05, - "Compressing objects: 23% (4/17) \r" - ], - [ - 4.7e-05, - "Compressing objects: 29% (5/17) \r" - ], - [ - 0.000114, - "Compressing objects: 35% (6/17) \r" - ], - [ - 0.000132, - "Compressing objects: 41% (7/17) \r" - ], - [ - 9.1e-05, - "Compressing objects: 47% (8/17) \r" - ], - [ - 9.3e-05, - "Compressing objects: 52% (9/17) \r" - ], - [ - 6.5e-05, - "Compressing objects: 58% (10/17) \r" - ], - [ - 3.6e-05, - "Compressing objects: 64% (11/17) \r" - ], - [ - 3.2e-05, - "Compressing objects: 70% (12/17) \r" - ], - [ - 3e-05, - "Compressing objects: 76% (13/17) \r" - ], - [ - 3.8e-05, - "Compressing objects: 82% (14/17) \r" - ], - [ - 3e-05, - "Compressing objects: 88% (15/17) \r" - ], - [ - 2.4e-05, - "Compressing objects: 94% (16/17) \r" - ], - [ - 4.1e-05, - "Compressing objects: 100% (17/17) \r" - ], - [ - 3.5e-05, - "Compressing objects: 100% (17/17), done.\r\n" - ], - [ - 0.000128, - "Writing objects: 5% (1/19) \r" - ], - [ - 6.2e-05, - "Writing objects: 10% (2/19) \r" - ], - [ - 4.2e-05, - "Writing objects: 15% (3/19) \r" - ], - [ - 4.8e-05, - "Writing objects: 21% (4/19) \r" - ], - [ - 4.5e-05, - "Writing objects: 26% (5/19) \r" - ], - [ - 4.6e-05, - "Writing objects: 31% (6/19) \r" - ], - [ - 0.000103, - "Writing objects: 36% (7/19) \r" - ], - [ - 5.3e-05, - "Writing objects: 42% (8/19) \r" - ], - [ - 5.2e-05, - "Writing objects: 47% (9/19) \r" - ], - [ - 8.6e-05, - "Writing objects: 52% (10/19) \r" - ], - [ - 1.7e-05, - "Writing objects: 57% (11/19) \r" - ], - [ - 8.1e-05, - "Writing objects: 63% (12/19) \r" - ], - [ - 4.6e-05, - "Writing objects: 68% (13/19) \r" - ], - [ - 4.2e-05, - "Writing objects: 73% (14/19) \r" - ], - [ - 0.000145, - "Writing objects: 78% (15/19) \r" - ], - [ - 4.1e-05, - "Writing objects: 84% (16/19) \r" - ], - [ - 4.9e-05, - "Writing objects: 89% (17/19) \r" - ], - [ - 3.8e-05, - "Writing objects: 94% (18/19) \r" - ], - [ - 9.1e-05, - "Writing objects: 100% (19/19) \r" - ], - [ - 4.5e-05, - "Writing objects: 100% (19/19), 3.69 KiB | 3.69 MiB/s, done.\r\nTotal 19 (delta 12), reused 0 (delta 0)\r\n" - ], - [ - 0.04705, - "remote: Resolving deltas: 0% (0/12) \u001b[K\r" - ], - [ - 0.038152, - "remote: Resolving deltas: 8% (1/12) \u001b[K\rremote: Resolving deltas: 16% (2/12) \u001b[K\rremote: Resolving deltas: 25% (3/12) \u001b[K\rremote: Resolving deltas: 33% (4/12) \u001b[K\rremote: Resolving deltas: 41% (5/12) \u001b[K\rremote: Resolving deltas: 50% (6/12) \u001b[K\rremote: Resolving deltas: 58% (7/12) \u001b[K\rremote: Resolving deltas: 66% (8/12) \u001b[K\rremote: Resolving deltas: 75% (9/12) \u001b[K\rremote: Resolving deltas: 83% (10/12) \u001b[K\rremote: Resolving deltas: 91% (11/12) \u001b[K\rremote: Resolving deltas: 100% (12/12) \u001b[K\rremote: Resolving deltas: 100% (12/12), completed with 12 local objects.\u001b[K\r\n" - ], - [ - 1.420422, - "To github.com:14rcole/cri-o\r\n + 2a874565...1eb21f8e kpod-rename -> kpod-rename (forced update)\r\n" - ], - [ - 0.002366, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.029573, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-rename \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.002048, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.00012, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 3.3e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000179, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 0.000127, - "\u001b[?1h\u001b=" - ], - [ - 3.6e-05, - "\u001b[?2004h" - ], - [ - 1969.422781, - "k" - ], - [ - 0.16807, - "\bkp" - ], - [ - 0.09268, - "o" - ], - [ - 0.156049, - "d" - ], - [ - 0.087661, - " " - ], - [ - 3.123898, - "r" - ], - [ - 0.360843, - "m" - ], - [ - 0.942902, - "\b \b" - ], - [ - 0.16075, - "\b \b" - ], - [ - 0.151174, - "\b" - ], - [ - 0.176905, - "\b \b" - ], - [ - 0.159513, - "\b \b" - ], - [ - 0.168379, - "\b\bk \b" - ], - [ - 0.15094, - "\b \b" - ], - [ - 0.128879, - "s" - ], - [ - 0.223768, - "\bsd" - ], - [ - 0.280126, - "\b\bs \b" - ], - [ - 0.247922, - "\bsu" - ], - [ - 0.144548, - "d" - ], - [ - 0.095353, - "o" - ], - [ - 0.063452, - " " - ], - [ - 0.073201, - "c" - ], - [ - 0.176123, - "r" - ], - [ - 0.10351, - "i" - ], - [ - 0.071248, - "o" - ], - [ - 0.056543, - "c" - ], - [ - 0.208591, - "t" - ], - [ - 0.071256, - "l" - ], - [ - 0.120819, - " " - ], - [ - 0.224225, - "c" - ], - [ - 0.215122, - "t" - ], - [ - 0.184575, - "r" - ], - [ - 0.199863, - " " - ], - [ - 0.223807, - "l" - ], - [ - 0.104351, - "i" - ], - [ - 0.031403, - "s" - ], - [ - 0.095857, - "t" - ], - [ - 0.176783, - "\u001b[?1l\u001b>" - ], - [ - 0.000303, - "\u001b[?2004l\r\r\n" - ], - [ - 0.006555, - "\u001b]2;sudo crioctl ctr list\u0007\u001b]1;crioctl\u0007" - ], - [ - 0.954158, - "[sudo] password for ryan: " - ], - [ - 1.966785, - "\r\n" - ], - [ - 0.091087, - "ID: d0ddf13569c69f6fed1934eb0e5e9d41b0cf37477c3d42c63931e9b9d2e8ab41\r\nPod: 75d9cdb9e450cd7b67e71136c35e6fa850edfd783b1893f61a69659e2eb8cb77\r\nName: podsandbox1-redis\r\nAttempt: 0\r\nStatus: CONTAINER_RUNNING\r\nImage: redis:alpine\r\nCreated: 2017-08-14 14:45:11.278672966 -0400 EDT\r\nLabels:\r\n\ttier -> backend\r\nAnnotations:\r\n" - ], - [ - 3.3e-05, - "\tpod -> podsandbox1\r\n\r\n" - ], - [ - 0.003294, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.022039, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-rename \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.002127, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000384, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 6.2e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000872, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m " - ], - [ - 5.3e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 3.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 7.8e-05, - "\u001b[?2004h" - ], - [ - 0.48893, - "s" - ], - [ - 0.110979, - "\bsu" - ], - [ - 0.0795, - "d" - ], - [ - 0.080647, - "o" - ], - [ - 0.10398, - " " - ], - [ - 0.087979, - "k" - ], - [ - 0.103896, - "p" - ], - [ - 0.072293, - "o" - ], - [ - 0.063704, - "d" - ], - [ - 0.095893, - " " - ], - [ - 0.07231, - "r" - ], - [ - 0.08694, - "m" - ], - [ - 0.127982, - "i" - ], - [ - 0.072625, - " " - ], - [ - 0.087713, - "r" - ], - [ - 0.080339, - "e" - ], - [ - 0.151296, - "d" - ], - [ - 0.096924, - "i" - ], - [ - 0.119446, - "s" - ], - [ - 0.144858, - ":" - ], - [ - 0.232002, - "a" - ], - [ - 0.087086, - "l" - ], - [ - 0.152797, - "p" - ], - [ - 0.071877, - "i" - ], - [ - 0.080055, - "n" - ], - [ - 0.072073, - "e" - ], - [ - 0.104314, - "\u001b[?1l\u001b>" - ], - [ - 0.0004, - "\u001b[?2004l\r\r\n" - ], - [ - 0.002847, - "\u001b]2;sudo kpod rmi redis:alpine\u0007\u001b]1;kpod\u0007" - ], - [ - 0.089244, - "Could not remove image \"redis:alpine\" (must force) - one or more containers are using its reference image%!(EXTRA int=0)\r\n" - ], - [ - 0.003327, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.023875, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-rename \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.002907, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000104, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 6.8e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[31m❯\u001b[39m " - ], - [ - 2.4e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 4.9e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.6e-05, - "\u001b[?2004h" - ], - [ - 4.955818, - "g" - ], - [ - 0.128566, - "\bgi" - ], - [ - 0.064574, - "t" - ], - [ - 0.095493, - " " - ], - [ - 0.167938, - "c" - ], - [ - 0.112316, - "h" - ], - [ - 0.103897, - "e" - ], - [ - 0.072405, - "c" - ], - [ - 0.054921, - "k" - ], - [ - 0.120936, - "o" - ], - [ - 0.103471, - "u" - ], - [ - 0.063554, - "t" - ], - [ - 0.088583, - " " - ], - [ - 0.176206, - "m" - ], - [ - 0.104132, - "a" - ], - [ - 0.063023, - "s" - ], - [ - 0.251503, - "ter\u001b[1m \u001b[0m" - ], - [ - 0.341276, - "\b\u001b[0m \b" - ], - [ - 0.0001, - "\u001b[?1l\u001b>" - ], - [ - 0.000196, - "\u001b[?2004l" - ], - [ - 0.000167, - "\r\r\n" - ], - [ - 0.004807, - "\u001b]2;git checkout master\u0007\u001b]1;git\u0007" - ], - [ - 0.031022, - "Switched to branch 'master'\r\n" - ], - [ - 5.4e-05, - "Your branch is up-to-date with 'origin/master'.\r\n" - ], - [ - 0.000548, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.02297, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001023, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000111, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.6e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 9.6e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.7e-05, - "\u001b[?1h\u001b=" - ], - [ - 3.6e-05, - "\u001b[?2004h" - ], - [ - 0.154245, - "g" - ], - [ - 0.176512, - "\bgi" - ], - [ - 0.016088, - "t" - ], - [ - 0.104093, - " " - ], - [ - 0.032212, - "p" - ], - [ - 0.103747, - "u" - ], - [ - 0.903255, - "l" - ], - [ - 0.160769, - "l" - ], - [ - 0.118954, - " " - ], - [ - 0.104575, - "-" - ], - [ - 0.151817, - "-" - ], - [ - 0.088524, - "r" - ], - [ - 0.32749, - "\b \b" - ], - [ - 0.14449, - "\b \b" - ], - [ - 0.151997, - "\b \b" - ], - [ - 0.679562, - "u" - ], - [ - 0.05667, - "p" - ], - [ - 0.147276, - "stream\u001b[1m \u001b[0m" - ], - [ - 0.324463, - "\b\u001b[0m m" - ], - [ - 0.088344, - "a" - ], - [ - 0.096029, - "s" - ], - [ - 0.187689, - "ter\u001b[1m:\u001b[0m" - ], - [ - 0.091664, - "\b\u001b[0m \b" - ], - [ - 0.000172, - "\u001b[?1l\u001b>" - ], - [ - 0.000159, - "\u001b[?2004l\r\r\n" - ], - [ - 0.004194, - "\u001b]2;git pull upstream master\u0007\u001b]1;git\u0007" - ], - [ - 1.697902, - "From github.com:kubernetes-incubator/cri-o\r\n * branch master -> FETCH_HEAD\r\n" - ], - [ - 0.057748, - "Updating a69631c1..6ca462a3\r\n" - ], - [ - 0.026098, - "Fast-forward" - ], - [ - 4.3e-05, - "\r\n" - ], - [ - 0.005314, - " README.md | 3 \u001b[32m+\u001b[m\u001b[31m-\u001b[m\r\n cmd/kpod/logs.go | 88 \u001b[32m+++++++++++++++++++++++\u001b[m\r\n cmd/kpod/main.go | 1 \u001b[32m+\u001b[m\r\n code-of-conduct.md | 20 \u001b[32m+++\u001b[m\u001b[31m---\u001b[m\r\n" - ], - [ - 0.000167, - " completions/bash/kpod | 25 \u001b[32m+++++++\u001b[m\r\n docs/kpod-logs.1.md | 61 \u001b[32m++++++++++++++++\u001b[m\r\n libkpod/image/copy.go | 18 \u001b[32m++++\u001b[m\u001b[31m-\u001b[m\r\n libkpod/logs.go | 80 \u001b[32m+++++++++++++++++++++\u001b[m\r\n test/kpod_logs.bats | 77 \u001b[32m++++++++++++++++++++\u001b[m\r\n vendor.conf | 3 \u001b[32m+\u001b[m\r\n vendor/github.com/hpcloud/tail/LICENSE.txt | 21 \u001b[32m++++++\u001b[m\r\n vendor/github.com/hpcloud/tail/README.md | 28 \u001b[32m++++++++\u001b[m\r\n vendor/github.com/hpcloud/tail/ratelimiter/leakybucket.go | 97 \u001b[32m+++++++++++++++++++++++++\u001b[m\r\n vendor/github.com/hpcloud/tail/ratelimiter/memory.go | 58 \u001b[32m+++++++++++++++\u001b[m\r\n vendor/github.com/hpcloud/tail/ratelimiter/storage.go | 6 \u001b[32m++\u001b[m\r\n vendor/github.com/hpcloud/tail/tail.go | 438 " - ], - [ - 2.2e-05, - "\u001b[32m+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\u001b[m\r\n vendor/github.com/hpcloud/tail/tail_posix.go | 11 \u001b[32m+++\u001b[m\r\n vendor/github.com/hpcloud/tail/tail_windows.go | 12 \u001b[32m++++\u001b[m\r\n vendor/github.com/hpcloud/tail/util/util.go | 48 \u001b[32m+++++++++++++\u001b[m\r\n vendor/github.com/hpcloud/tail/watch/filechanges.go | 36 \u001b[32m++++++++++\u001b[m\r\n vendor/github.com/hpcloud/tail/watch/inotify.go | 128 \u001b[32m+++++++++++++++++++++++++++++++++\u001b[m\r\n vendor/github.com/hpcloud/tail/watch/inotify_tracker.go | 260 \u001b[32m+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\u001b[m\r\n vendor/github.com/hpcloud/tail/watch/polling.go | 118 \u001b[32m+++++++++++++++++++++++++++++++\u001b[m\r\n vendor/github.com/hpcloud/tail/watch/watch.go | 20 \u001b[32m++++++\u001b[m\r\n vendor/github.com/hpcloud/tail/winfile/winfile.go | 92 \u001b[32m++++++++++++++++++++++++\u001b[m\r\n vendor/gopkg.in/fsnotify.v1/LICENS" - ], - [ - 1.7e-05, - "E | 28 \u001b[32m++++++++\u001b[m\r\n vendor/gopkg.in/fsnotify.v1/README.md | 50 \u001b[32m+++++++++++++\u001b[m\r\n vendor/gopkg.in/fsnotify.v1/fen.go | 37 \u001b[32m++++++++++\u001b[m\r\n vendor/gopkg.in/fsnotify.v1/fsnotify.go | 62 \u001b[32m++++++++++++++++\u001b[m\r\n vendor/gopkg.in/fsnotify.v1/inotify.go | 325 \u001b[32m++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\u001b[m\r\n vendor/gopkg.in/fsnotify.v1/inotify_poller.go | 187 \u001b[32m+++++++++++++++++++++++++++++++++++++++++++++++++\u001b[m\r\n vendor/gopkg.in/fsnotify.v1/kqueue.go | 503 \u001b[32m++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\u001b[m\r\n vendor/gopkg.in/fsnotify.v1/open_mode_bsd.go | 11 \u001b[32m+++\u001b[m\r\n vendor/gopkg.in/fsnotify.v1/open_mode_darwin.go | 12 \u001b[32m++++\u001b[m\r\n vendor/gopkg.in/fsnotify.v1/windows.go | 561 \u001b[" - ], - [ - 1.6e-05, - "32m+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\u001b[m\r\n vendor/gopkg.in/tomb.v1/LICENSE | 29 \u001b[32m++++++++\u001b[m\r\n vendor/gopkg.in/tomb.v1/README.md | 4 \u001b[32m++\u001b[m\r\n vendor/gopkg.in/tomb.v1/tomb.go | 176 \u001b[32m++++++++++++++++++++++++++++++++++++++++++++++\u001b[m\r\n 38 files changed, 3722 insertions(+), 12 deletions(-)\r\n create mode 100644 cmd/kpod/logs.go\r\n create mode 100644 docs/kpod-logs.1.md\r\n create mode 100644 libkpod/logs.go\r\n create mode 100644 test/kpod_logs.bats\r\n create mode 100644 vendor/github.com/hpcloud/tail/LICENSE.txt\r\n create mode 100644 vendor/github.com/hpcloud/tail/README.md\r\n create mode 100644 vendor/github.com/hpcloud/tail/ratelimiter/leakybucket.go\r\n create mode 100644 vendor/github.com/hpcloud/tail/ratelimiter/memory.go\r\n create mode 100644 vendor/github.com/hpcloud/tail/ratelimiter/storage.go\r\n create mode 100644 ve" - ], - [ - 0.000117, - "ndor/github.com/hpcloud/tail/tail.go\r\n create mode 100644 vendor/github.com/hpcloud/tail/tail_posix.go\r\n create mode 100644 vendor/github.com/hpcloud/tail/tail_windows.go\r\n create mode 100644 vendor/github.com/hpcloud/tail/util/util.go\r\n create mode 100644 vendor/github.com/hpcloud/tail/watch/filechanges.go\r\n create mode 100644 vendor/github.com/hpcloud/tail/watch/inotify.go\r\n create mode 100644 vendor/github.com/hpcloud/tail/watch/inotify_tracker.go\r\n create mode 100644 vendor/github.com/hpcloud/tail/watch/polling.go\r\n create mode 100644 vendor/github.com/hpcloud/tail/watch/watch.go\r\n create mode 100644 vendor/github.com/hpcloud/tail/winfile/winfile.go\r\n create mode 100644 vendor/gopkg.in/fsnotify.v1/LICENSE\r\n create mode 100644 vendor/gopkg.in/fsnotify.v1/README.md\r\n create mode 100644 vendor/gopkg.in/fsnotify.v1/fen.go\r\n create mode 100644 vendor/gopkg.in/fsnotify.v1/fsnotify.go\r\n create mode 100644 vendor/gopkg.in/fsnotify.v1/inotify.go\r\n create mode 100644 vendor/gopkg.in/fsnotify.v1/inotify_poller.go\r\n " - ], - [ - 3.1e-05, - "create mode 100644 vendor/gopkg.in/fsnotify.v1/kqueue.go\r\n create mode 100644 vendor/gopkg.in/fsnotify.v1/open_mode_bsd.go\r\n create mode 100644 vendor/gopkg.in/fsnotify.v1/open_mode_darwin.go\r\n create mode 100644 vendor/gopkg.in/fsnotify.v1/windows.go\r\n create mode 100644 vendor/gopkg.in/tomb.v1/LICENSE\r\n create mode 100644 vendor/gopkg.in/tomb.v1/README.md\r\n create mode 100644 vendor/gopkg.in/tomb.v1/tomb.go\r\n" - ], - [ - 0.001059, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.038598, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001722, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 1.798324, - "v" - ], - [ - 0.088099, - "\bvi" - ], - [ - 0.095471, - " " - ], - [ - 0.313127, - "m" - ], - [ - 0.239446, - "\b \b" - ], - [ - 0.103855, - "c" - ], - [ - 0.104993, - "m" - ], - [ - 0.117338, - "d\u001b[1m/\u001b[0m" - ], - [ - 0.07865, - "\b\u001b[0m/k" - ], - [ - 0.11481, - "pod\u001b[1m/\u001b[0m" - ], - [ - 0.137367, - "\b\u001b[0m/m" - ], - [ - 0.287656, - "\b \b" - ], - [ - 0.135144, - "r" - ], - [ - 0.068676, - "e" - ], - [ - 0.148163, - "n" - ], - [ - 0.157283, - "\u0007" - ], - [ - 0.706737, - "a" - ], - [ - 0.225253, - "\u0007" - ], - [ - 1.09834, - "\b \b" - ], - [ - 0.584105, - "\b \b" - ], - [ - 0.248355, - "m" - ], - [ - 0.259974, - "\b \b" - ], - [ - 0.123623, - "\b \b" - ], - [ - 0.144232, - "m" - ], - [ - 0.159494, - "i" - ], - [ - 0.154991, - ".go\u001b[1m \u001b[0m" - ], - [ - 0.373147, - "\b\u001b[0m \b" - ], - [ - 5.9e-05, - "\u001b[?1l\u001b>" - ], - [ - 0.000152, - "\u001b[?2004l\r\r\n" - ], - [ - 0.003812, - "\u001b]2;vim cmd/kpod/rmi.go\u0007\u001b]1;vi\u0007" - ], - [ - 0.140952, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000561, - "\u001b[1;52r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[52;1H\"cmd/kpod/rmi.go\"" - ], - [ - 0.000112, - " 123L, 3096C" - ], - [ - 0.007972, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H\u001b[>c" - ], - [ - 0.002019, - "\u001b[1;1H\u001b[96m\u001b[47m 20 \u001b[m\u001b[93m\u001b[107m rmiCommand = cli.Command{\r\n\u001b[96m\u001b[47m 21 \u001b[m\u001b[93m\u001b[107m\u001b[8CName:\u001b[8C\u001b[36m\"rmi\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 22 \u001b[m\u001b[93m\u001b[107m\u001b[8CUsage:\u001b[7C\u001b[36m\"removes one or more images from local storage\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 23 \u001b[m\u001b[93m\u001b[107m\u001b[8CDescription: rmiDescription,\r\n\u001b[96m\u001b[47m 24 \u001b[m\u001b[93m\u001b[107m\u001b[8CAction: rmiCmd,\r\n\u001b[96m\u001b[47m 25 \u001b[m\u001b[93m\u001b[107m\u001b[8CArgsUsage: \u001b[36m\"IMAGE-NAME-OR-ID [...]\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 26 \u001b[m\u001b[93m\u001b[107m\u001b[8CFlags:\u001b[7CrmiFlags,\r\n\u001b[96m\u001b[47m 27 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 28 \u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 29 \r\n 30 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m rmiCmd(c *cli.Context) \u001b[33merror\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 31 \r\n 32 \u001b[m\u001b[93m\u001b[107m force := \u001b[36mfalse\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 33 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m c.IsSet(\u001b[36m\"force\"\u001b[m\u001b[93m\u001b[107m) {\r\n\u001b[96m\u001b[47m 34 \u001b[m\u001b[93m\u001b[107m\u001b[8Cforce = c.Bool(\u001b[36m\"force\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 35 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 36 \r\n 37 \u001b[m\u001b[93m\u001b[107m args := c.Args()\r\n\u001b[96m\u001b[47m 3" - ], - [ - 2.1e-05, - "8 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(args) == \u001b[36m0\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 39 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Errorf(\u001b[36m\"image name or ID must be specified\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 40 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 41 \r\n 42 \u001b[m\u001b[93m\u001b[107m config, err := getConfig(c)\r\n\u001b[96m\u001b[47m 43 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 44 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"Could not get config\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 45 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 46 \u001b[m\u001b[93m\u001b[107m store, err := getStore(config)\r\n\u001b[96m\u001b[47m 47 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 48 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\r\n\u001b[96m\u001b[47m 49 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 50 \r\n 51 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, id := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m args {\r\n\u001b[96m\u001b[47m 52 \u001b[m\u001b[93m\u001b[107m\u001b[8Cimage, err := libkpodimage.FindImage(store, id)\r\n" - ], - [ - 0.032607, - "\u001b[96m\u001b[47m 53 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 54 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"could not get image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 55 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 56 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m image != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 57 \u001b[m\u001b[93m\u001b[107m\u001b[12CctrIDs, err := runningContainers(image, store)\r\n\u001b[96m\u001b[47m 58 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 59 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"error getting running containers for image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 60 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[96m\u001b[47m 61 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(ctrIDs) > \u001b[36m0\u001b[m\u001b[93m\u001b[107m && \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(image.Names) <= \u001b[36m1\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 62 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mif\u001b[m\u001b[93m\u001b[107m force {\r\n\u001b[96m\u001b[47m 63 \u001b[" - ], - [ - 0.000108, - "m\u001b[93m\u001b[107m\u001b[20CremoveContainers(ctrIDs, store)\r\n\u001b[96m\u001b[47m 64 \u001b[m\u001b[93m\u001b[107m\u001b[16C} \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 65 \u001b[m\u001b[93m\u001b[107m\u001b[20C\u001b[32mfor\u001b[m\u001b[93m\u001b[107m ctrID := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m ctrIDs {\r\n\u001b[96m\u001b[47m 66 \u001b[m\u001b[93m\u001b[107m\u001b[24C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m fmt.Errorf(\u001b[36m\"Could not remove image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m (must force) - container \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\r\n\u001b[96m\u001b[47m 67 \u001b[m\u001b[93m\u001b[107m\u001b[20C}\r\n\u001b[96m\u001b[47m 68 \u001b[m\u001b[93m\u001b[107m\u001b[16C}\r\n\u001b[96m\u001b[47m 69 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mrmi.go \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[51;39H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                           " - ], - [ - 0.009234, - "                                                                                                             \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:25 \u001b[47;29H\u001b[?12l\u001b[?25h\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 1.74193, - "\u001b[?25l\u001b[51;210H4\u001b[47;28H\u001b[?12l\u001b[?25h" - ], - [ - 0.184955, - "\u001b[51;210H5\u001b[47;29H" - ], - [ - 0.501563, - "\u001b[51;210H6\u001b[47;30H" - ], - [ - 0.027652, - "\u001b[51;210H7\u001b[47;31H" - ], - [ - 0.031729, - "\u001b[51;210H8\u001b[47;32H" - ], - [ - 0.032977, - "\u001b[51;210H9\u001b[47;33H" - ], - [ - 0.028374, - "\u001b[51;209H30\u001b[47;34H" - ], - [ - 0.029832, - "\u001b[51;210H1\u001b[47;35H" - ], - [ - 0.032526, - "\u001b[51;210H2\u001b[47;36H" - ], - [ - 0.029166, - "\u001b[51;210H3\u001b[47;37H" - ], - [ - 0.031288, - "\u001b[51;210H4\u001b[47;38H" - ], - [ - 0.031594, - "\u001b[51;210H5\u001b[47;39H" - ], - [ - 0.030975, - "\u001b[51;210H6\u001b[47;40H" - ], - [ - 0.029298, - "\u001b[51;210H7\u001b[47;41H" - ], - [ - 0.029023, - "\u001b[51;210H8\u001b[47;42H" - ], - [ - 0.03314, - "\u001b[51;210H9\u001b[47;43H" - ], - [ - 0.031948, - "\u001b[51;209H40\u001b[47;44H" - ], - [ - 0.028742, - "\u001b[51;210H1\u001b[47;45H" - ], - [ - 0.034439, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107mf\u001b[1m\u001b[31m\u001b[106m(\u001b[95C)\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;252m2\u001b[47;46H\u001b[?12l\u001b[?25h" - ], - [ - 0.028925, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[94C)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;252m3\u001b[47;47H\u001b[?12l\u001b[?25h" - ], - [ - 0.030179, - "\u001b[51;210H4\u001b[47;48H" - ], - [ - 0.030092, - "\u001b[51;210H5\u001b[47;49H" - ], - [ - 0.03015, - "\u001b[51;210H6\u001b[47;50H" - ], - [ - 0.029603, - "\u001b[51;210H7\u001b[47;51H" - ], - [ - 0.032153, - "\u001b[51;210H8\u001b[47;52H" - ], - [ - 0.030144, - "\u001b[51;210H9\u001b[47;53H" - ], - [ - 0.03006, - "\u001b[51;209H50\u001b[47;54H" - ], - [ - 0.030687, - "\u001b[51;210H1\u001b[47;55H" - ], - [ - 0.02981, - "\u001b[51;210H2\u001b[47;56H" - ], - [ - 0.037596, - "\u001b[51;210H3\u001b[47;57H" - ], - [ - 0.027628, - "\u001b[51;210H4\u001b[47;58H" - ], - [ - 0.026376, - "\u001b[51;210H5\u001b[47;59H" - ], - [ - 0.031146, - "\u001b[51;210H6\u001b[47;60H" - ], - [ - 0.032485, - "\u001b[51;210H7\u001b[47;61H" - ], - [ - 0.026451, - "\u001b[51;210H8\u001b[47;62H" - ], - [ - 0.030128, - "\u001b[51;210H9\u001b[47;63H" - ], - [ - 0.031166, - "\u001b[51;209H60\u001b[47;64H" - ], - [ - 0.036072, - "\u001b[51;210H1\u001b[47;65H" - ], - [ - 0.024924, - "\u001b[51;210H2\u001b[47;66H" - ], - [ - 0.032987, - "\u001b[51;210H3\u001b[47;67H" - ], - [ - 0.029506, - "\u001b[51;210H4\u001b[47;68H" - ], - [ - 0.031373, - "\u001b[51;210H5\u001b[47;69H" - ], - [ - 0.033657, - "\u001b[51;210H6\u001b[47;70H" - ], - [ - 0.02801, - "\u001b[51;210H7\u001b[47;71H" - ], - [ - 0.031093, - "\u001b[51;210H8\u001b[47;72H" - ], - [ - 0.0306, - "\u001b[51;210H9\u001b[47;73H" - ], - [ - 0.034356, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[1m\u001b[31m\u001b[106m(\u001b[10C)\u001b[m\u001b[93m\u001b[107m\u001b[51;209H\u001b[38;5;22m\u001b[48;5;252m70\u001b[47;74H\u001b[?12l\u001b[?25h" - ], - [ - 0.026368, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36m(m\u001b[9C) \u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;252m1\u001b[47;75H\u001b[?12l\u001b[?25h" - ], - [ - 0.031718, - "\u001b[51;210H2\u001b[47;76H" - ], - [ - 0.032486, - "\u001b[51;210H3\u001b[47;77H" - ], - [ - 0.025168, - "\u001b[51;210H4\u001b[47;78H" - ], - [ - 0.036429, - "\u001b[51;210H5\u001b[47;79H" - ], - [ - 0.028144, - "\u001b[51;210H6\u001b[47;80H" - ], - [ - 0.031687, - "\u001b[51;210H7\u001b[47;81H" - ], - [ - 0.031436, - "\u001b[51;210H8\u001b[47;82H" - ], - [ - 0.028164, - "\u001b[51;210H9\u001b[47;83H" - ], - [ - 0.033254, - "\u001b[51;209H80\u001b[47;84H" - ], - [ - 0.033571, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[47;74H\u001b[1m\u001b[31m\u001b[106m(\u001b[10C)\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;252m1\u001b[47;85H\u001b[?12l\u001b[?25h" - ], - [ - 0.028404, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[47;74H\u001b[36m(m\u001b[9C) \u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;252m2\u001b[47;86H\u001b[?12l\u001b[?25h" - ], - [ - 0.029114, - "\u001b[51;210H3\u001b[47;87H" - ], - [ - 0.030981, - "\u001b[51;210H4\u001b[47;88H" - ], - [ - 0.034571, - "\u001b[51;210H5\u001b[47;89H" - ], - [ - 0.02456, - "\u001b[51;210H6\u001b[47;90H" - ], - [ - 0.424165, - "\u001b[51;210H5\u001b[47;89H" - ], - [ - 0.191612, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36montainer \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;142H\u001b[K\u001b[51;37H\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[51;41H \u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.501563, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mntainer \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;141H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.019326, - "\u001b[?25l\u001b[36mtainer \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;140H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.032305, - "\u001b[?25l\u001b[36mainer \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;139H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.027042, - "\u001b[?25l\u001b[36miner \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;138H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.033786, - "\u001b[?25l\u001b[36mner \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;137H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.032065, - "\u001b[?25l\u001b[36mer \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;136H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.02938, - "\u001b[?25l\u001b[36mr \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;135H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.031174, - "\u001b[?25l\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;134H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.032572, - "\u001b[?25l\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;133H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.025383, - "\u001b[?25l\u001b[36mq is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;132H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.209138, - "\u001b[?25l\u001b[36m is using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;131H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.199764, - "\u001b[?25l\u001b[36mis using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;130H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.172621, - "\u001b[?25l\u001b[36ms using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;129H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.186391, - "\u001b[?25l\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;128H\u001b[K\u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.397295, - "\u001b[?25l\u001b[52;1H\u001b[34m-- INSERT --\u001b[m\u001b[93m\u001b[107m\u001b[52;13H\u001b[K" - ], - [ - 0.04224, - "\u001b[51;1H\u001b[1m\u001b[38;5;23m\u001b[48;5;231m INSERT \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;231m\u001b[48;5;31m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m\u001b[51;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;31m\u001b[51;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;31mrmi.go\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;220m\u001b[48;5;31m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[m\u001b[93m\u001b[107m\u001b[51;40H\u001b[38;5;31m\u001b[48;5;24m\u001b[51;41H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;24m                                                                                                                                      \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;182H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;190H\u001b[38;5;117m\u001b[48;5;24m" - ], - [ - 3.5e-05, - " go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;186m\u001b[48;5;31m  54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;24m\u001b[48;5;117m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;117m:85 \u001b[47;89H\u001b[?12l\u001b[?25h" - ], - [ - 0.318684, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mo using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[47;90H\u001b[?12l\u001b[?25h" - ], - [ - 0.085993, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mn using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[47;91H\u001b[?12l\u001b[?25h" - ], - [ - 0.102417, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36me using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[47;92H\u001b[?12l\u001b[?25h" - ], - [ - 0.096152, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m9\u001b[47;93H\u001b[?12l\u001b[?25h" - ], - [ - 0.172551, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mm using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m90\u001b[47;94H\u001b[?12l\u001b[?25h" - ], - [ - 0.084589, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mo using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[47;95H\u001b[?12l\u001b[?25h" - ], - [ - 0.266563, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;133H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m0\u001b[47;94H\u001b[?12l\u001b[?25h" - ], - [ - 0.134027, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[47;132H\u001b[K\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m89\u001b[47;93H\u001b[?12l\u001b[?25h" - ], - [ - 0.160501, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mo using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m90\u001b[47;94H\u001b[?12l\u001b[?25h" - ], - [ - 0.158121, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mr using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[47;95H\u001b[?12l\u001b[?25h" - ], - [ - 0.064495, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[47;96H\u001b[?12l\u001b[?25h" - ], - [ - 0.178203, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mm using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[47;97H\u001b[?12l\u001b[?25h" - ], - [ - 0.070967, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mo using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[47;98H\u001b[?12l\u001b[?25h" - ], - [ - 0.049728, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mr using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[47;99H\u001b[?12l\u001b[?25h" - ], - [ - 0.085073, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36me using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[47;100H\u001b[?12l\u001b[?25h" - ], - [ - 0.064728, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[47;101H\u001b[?12l\u001b[?25h" - ], - [ - 0.115396, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mc using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[47;102H\u001b[?12l\u001b[?25h" - ], - [ - 0.109608, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mo using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m9\u001b[47;103H\u001b[?12l\u001b[?25h" - ], - [ - 0.07234, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mn using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;175H\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;181H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;189H\u001b[38;5;117m\u001b[48;5;24m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;194H\u001b[38;5;186m\u001b[48;5;31m \u001b[1C54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[51;201H\u001b[38;5;24m\u001b[48;5;117m \u001b[51;203H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:100\u001b[47;104H\u001b[?12l\u001b[?25h" - ], - [ - 0.106017, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mt using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[47;105H\u001b[?12l\u001b[?25h" - ], - [ - 0.037147, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36ma using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[47;106H\u001b[?12l\u001b[?25h" - ], - [ - 0.120393, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mi using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[47;107H\u001b[?12l\u001b[?25h" - ], - [ - 0.054877, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mn using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[47;108H\u001b[?12l\u001b[?25h" - ], - [ - 0.055511, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36me using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[47;109H\u001b[?12l\u001b[?25h" - ], - [ - 0.044523, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mr using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[47;110H\u001b[?12l\u001b[?25h" - ], - [ - 0.164345, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36ms using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[47;111H\u001b[?12l\u001b[?25h" - ], - [ - 0.113242, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[36m using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[47;112H\u001b[?12l\u001b[?25h" - ], - [ - 0.065749, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36ma using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m9\u001b[47;113H\u001b[?12l\u001b[?25h" - ], - [ - 0.067013, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36mr using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;209H\u001b[38;5;22m\u001b[48;5;117m10\u001b[47;114H\u001b[?12l\u001b[?25h" - ], - [ - 0.082416, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[36me using its reference image\"\u001b[m\u001b[93m\u001b[107m, id, ctrID)\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m1\u001b[47;115H\u001b[?12l\u001b[?25h" - ], - [ - 0.391867, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K" - ], - [ - 0.002802, - "\u001b[51;1H\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;31m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mrmi.go\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[m\u001b[93m\u001b[107m\u001b[51;40H\u001b[38;5;240m\u001b[48;5;236m\u001b[51;41H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                                     \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;181H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;189H\u001b[38;5;247m" - ], - [ - 4.4e-05, - "\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;194H\u001b[38;5;107m\u001b[48;5;240m  54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;201H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;203H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;252m:110 \u001b[47;114H\u001b[?12l\u001b[?25h" - ], - [ - 0.330025, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[47;46H\u001b[1m\u001b[31m\u001b[106m(\u001b[106C)\u001b[m\u001b[93m\u001b[107m\u001b[51;209H\u001b[38;5;22m\u001b[48;5;252m49\u001b[47;153H\u001b[?12l\u001b[?25h" - ], - [ - 0.483853, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[34m-- INSERT --" - ], - [ - 0.009014, - "\u001b[m\u001b[93m\u001b[107m\u001b[51;1H\u001b[1m\u001b[38;5;23m\u001b[48;5;231m INSERT \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;231m\u001b[48;5;31m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m\u001b[51;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;31m\u001b[51;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;31mrmi.go\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;220m\u001b[48;5;31m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[m\u001b[93m\u001b[107m\u001b[51;40H\u001b[38;5;31m\u001b[48;5;24m\u001b[51;41H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;24m                                                                                                                                     \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;181H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;189H\u001b[38;5;11" - ], - [ - 8.4e-05, - "7m\u001b[48;5;24m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;194H\u001b[38;5;186m\u001b[48;5;31m  54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[51;201H\u001b[38;5;24m\u001b[48;5;117m \u001b[51;203H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;117m:149 \u001b[47;153H\u001b[?12l\u001b[?25h" - ], - [ - 0.255014, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b)\u001b[47;153H\u001b[K\u001b[47;152H\u001b[1m\u001b[31m\u001b[106m)\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[47;152H\u001b[?12l\u001b[?25h" - ], - [ - 0.143393, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b)\u001b[47;152H\u001b[K\u001b[47;151H\u001b[1m\u001b[31m\u001b[106m)\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[47;151H\u001b[?12l\u001b[?25h" - ], - [ - 0.173726, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b)\u001b[47;151H\u001b[K\u001b[47;150H\u001b[1m\u001b[31m\u001b[106m)\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[47;150H\u001b[?12l\u001b[?25h" - ], - [ - 0.151736, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b)\u001b[47;150H\u001b[K\u001b[47;149H\u001b[1m\u001b[31m\u001b[106m)\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[47;149H\u001b[?12l\u001b[?25h" - ], - [ - 0.17734, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b)\u001b[47;149H\u001b[K\u001b[47;148H\u001b[1m\u001b[31m\u001b[106m)\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m4\u001b[47;148H\u001b[?12l\u001b[?25h" - ], - [ - 0.158422, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b)\u001b[47;148H\u001b[K\u001b[47;147H\u001b[1m\u001b[31m\u001b[106m)\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m3\u001b[47;147H\u001b[?12l\u001b[?25h" - ], - [ - 0.144092, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b)\u001b[47;147H\u001b[K\u001b[47;146H\u001b[1m\u001b[31m\u001b[106m)\u001b[m\u001b[93m\u001b[107m\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m2\u001b[47;146H\u001b[?12l\u001b[?25h" - ], - [ - 0.211601, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K" - ], - [ - 0.009089, - "\u001b[47;46H(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[98C)\u001b[51;1H\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;31m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mrmi.go\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[m\u001b[93m\u001b[107m\u001b[51;40H\u001b[38;5;240m\u001b[48;5;236m\u001b[51;41H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                                     \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;181H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m " - ], - [ - 3.1e-05, - "\u001b[m\u001b[93m\u001b[107m\u001b[51;189H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;194H\u001b[38;5;107m\u001b[48;5;240m  54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;201H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;203H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;252m:141 \u001b[47;145H\u001b[?12l\u001b[?25h" - ], - [ - 0.214474, - "\u001b[?25l\u001b[52;1H\u001b[m\u001b[93m\u001b[107m:\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.143718, - "w\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.056661, - "q" - ], - [ - 7.6e-05, - "\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.071657, - "\r" - ], - [ - 7.3e-05, - "\u001b[?25l\u001b[?2004l" - ], - [ - 0.023973, - "\"cmd/kpod/rmi.go\"" - ], - [ - 0.003962, - " 123L, 3100C written" - ], - [ - 0.012358, - "\r\r\r\n\u001b[39;49m\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.001868, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.016767, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m13s\u001b[39m\r\n" - ], - [ - 0.001258, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 5.2e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 1.6e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 7e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 5.8e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.4e-05, - "\u001b[?2004h" - ], - [ - 2.403767, - "s" - ], - [ - 0.072404, - "\bsu" - ], - [ - 0.087776, - "d" - ], - [ - 0.10411, - "o" - ], - [ - 0.103535, - " " - ], - [ - 0.112565, - "m" - ], - [ - 0.103814, - "a" - ], - [ - 0.127747, - "k" - ], - [ - 0.104285, - "e" - ], - [ - 0.055181, - " " - ], - [ - 0.096552, - "k" - ], - [ - 0.695888, - "\b \b" - ], - [ - 0.499894, - "\b" - ], - [ - 0.031116, - "\b \b" - ], - [ - 0.031334, - "\b \b" - ], - [ - 0.03129, - "\b \b" - ], - [ - 0.030503, - "\b \b" - ], - [ - 0.029752, - "\b" - ], - [ - 0.03046, - "\b \b" - ], - [ - 0.029619, - "\b \b" - ], - [ - 0.031117, - "\b\bs \b" - ], - [ - 0.030333, - "\b \b" - ], - [ - 0.143801, - "m" - ], - [ - 0.137018, - "\bma" - ], - [ - 0.127748, - "k" - ], - [ - 0.071257, - "e" - ], - [ - 0.112655, - " " - ], - [ - 0.103705, - "k" - ], - [ - 0.120423, - "p" - ], - [ - 0.088219, - "o" - ], - [ - 0.151337, - "d" - ], - [ - 0.144145, - "\u001b[?1l\u001b>" - ], - [ - 0.000245, - "\u001b[?2004l\r\r\n" - ], - [ - 0.003789, - "\u001b]2;make kpod\u0007\u001b]1;make\u0007" - ], - [ - 6.807666, - "go build -ldflags '-X main.gitCommit=6ca462a3 -X main.buildInfo=1502976873' -tags \"selinux seccomp \" -o kpod github.com/kubernetes-incubator/cri-o/cmd/kpod\r\n" - ], - [ - 2.098933, - "# github.com/kubernetes-incubator/cri-o/cmd/kpod\r\ncmd/kpod/rmi.go:65: ctrID declared and not used\r\n" - ], - [ - 0.002582, - "make: *** [Makefile:83: kpod] Error 2\r\n" - ], - [ - 0.000308, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.020816, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m9s\u001b[39m\r\n" - ], - [ - 0.001294, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000209, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007" - ], - [ - 3e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[31m❯\u001b[39m " - ], - [ - 2.1e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 0.000157, - "\u001b[?1h\u001b=" - ], - [ - 3.1e-05, - "\u001b[?2004h" - ], - [ - 2.964102, - "v" - ], - [ - 0.136044, - "\bvu" - ], - [ - 0.095982, - " " - ], - [ - 0.088003, - "c" - ], - [ - 0.08868, - "n" - ], - [ - 0.154713, - "\u0007" - ], - [ - 0.10947, - "j" - ], - [ - 0.161602, - "\u0007" - ], - [ - 0.173494, - "\b \b" - ], - [ - 0.151719, - "\b \b" - ], - [ - 0.609085, - "m" - ], - [ - 0.167394, - "d\u001b[1m/\u001b[0m" - ], - [ - 0.840479, - "\b\u001b[0m/k" - ], - [ - 0.206026, - "pod\u001b[1m/\u001b[0m" - ], - [ - 0.257517, - "\b\u001b[0m/r" - ], - [ - 0.127635, - "m" - ], - [ - 0.103364, - "i.go\u001b[1m \u001b[0m" - ], - [ - 0.616305, - "\b\u001b[0m \b" - ], - [ - 0.000215, - "\u001b[?1l\u001b>" - ], - [ - 0.000236, - "\u001b[?2004l\r\r\n" - ], - [ - 0.004049, - "\u001b]2;vu cmd/kpod/rmi.go\u0007\u001b]1;vu\u0007" - ], - [ - 0.00938, - "zsh: vu: command not found..." - ], - [ - 6.4e-05, - "\r\n" - ], - [ - 0.171147, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.017238, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001466, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.00011, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 1.7e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 8e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[31m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 7.3e-05, - "\u001b[?1h\u001b=" - ], - [ - 3.2e-05, - "\u001b[?2004h" - ], - [ - 0.476196, - "6" - ], - [ - 0.080551, - "\b65" - ], - [ - 0.255454, - "G" - ], - [ - 0.432225, - "\b \b" - ], - [ - 0.159879, - "\b\b6 \b" - ], - [ - 0.1445, - "\b \b" - ], - [ - 0.384217, - "vu cmd/kpod/rmi.go" - ], - [ - 0.895489, - "\u001b[18D" - ], - [ - 0.176977, - "\u001b[1C" - ], - [ - 0.166725, - "\u001b[1C" - ], - [ - 0.256332, - "\b\bv cmd/kpod/rmi.go \u001b[17D" - ], - [ - 0.520213, - "\bvi cmd/kpod/rmi.go\u001b[16D" - ], - [ - 0.223669, - "\u001b[?1l\u001b>" - ], - [ - 0.000151, - "\u001b[?2004l\r\r\n" - ], - [ - 0.00446, - "\u001b]2;vim cmd/kpod/rmi.go\u0007\u001b]1;vi\u0007" - ], - [ - 0.138232, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000485, - "\u001b[1;52r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[52;1H\"cmd/kpod/rmi.go\"" - ], - [ - 0.000106, - " 123L, 3100C" - ], - [ - 0.008045, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H\u001b[>c" - ], - [ - 0.002005, - "\u001b[1;1H\u001b[96m\u001b[47m 20 \u001b[m\u001b[93m\u001b[107m rmiCommand = cli.Command{\r\n\u001b[96m\u001b[47m 21 \u001b[m\u001b[93m\u001b[107m\u001b[8CName:\u001b[8C\u001b[36m\"rmi\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 22 \u001b[m\u001b[93m\u001b[107m\u001b[8CUsage:\u001b[7C\u001b[36m\"removes one or more images from local storage\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 23 \u001b[m\u001b[93m\u001b[107m\u001b[8CDescription: rmiDescription,\r\n\u001b[96m\u001b[47m 24 \u001b[m\u001b[93m\u001b[107m\u001b[8CAction: rmiCmd,\r\n\u001b[96m\u001b[47m 25 \u001b[m\u001b[93m\u001b[107m\u001b[8CArgsUsage: \u001b[36m\"IMAGE-NAME-OR-ID [...]\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 26 \u001b[m\u001b[93m\u001b[107m\u001b[8CFlags:\u001b[7CrmiFlags,\r\n\u001b[96m\u001b[47m 27 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 28 \u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 29 \r\n 30 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m rmiCmd(c *cli.Context) \u001b[33merror\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 31 \r\n 32 \u001b[m\u001b[93m\u001b[107m force := \u001b[36mfalse\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 33 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m c.IsSet(\u001b[36m\"force\"\u001b[m\u001b[93m\u001b[107m) {\r\n\u001b[96m\u001b[47m 34 \u001b[m\u001b[93m\u001b[107m\u001b[8Cforce = c.Bool(\u001b[36m\"force\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 35 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 36 \r\n 37 \u001b[m\u001b[93m\u001b[107m args := c.Args()\r\n\u001b[96m\u001b[47m 3" - ], - [ - 1.9e-05, - "8 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(args) == \u001b[36m0\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 39 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Errorf(\u001b[36m\"image name or ID must be specified\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 40 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 41 \r\n 42 \u001b[m\u001b[93m\u001b[107m config, err := getConfig(c)\r\n\u001b[96m\u001b[47m 43 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 44 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"Could not get config\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 45 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 46 \u001b[m\u001b[93m\u001b[107m store, err := getStore(config)\r\n\u001b[96m\u001b[47m 47 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 48 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\r\n\u001b[96m\u001b[47m 49 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 50 \r\n 51 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, id := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m args {\r\n\u001b[96m\u001b[47m 52 \u001b[m\u001b[93m\u001b[107m\u001b[8Cimage, err := libkpodimage.FindImage(store, id)\r\n" - ], - [ - 0.031049, - "\u001b[96m\u001b[47m 53 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 54 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"could not get image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 55 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 56 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m image != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 57 \u001b[m\u001b[93m\u001b[107m\u001b[12CctrIDs, err := runningContainers(image, store)\r\n\u001b[96m\u001b[47m 58 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 59 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"error getting running containers for image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 60 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[96m\u001b[47m 61 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(ctrIDs) > \u001b[36m0\u001b[m\u001b[93m\u001b[107m && \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(image.Names) <= \u001b[36m1\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 62 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mif\u001b[m\u001b[93m\u001b[107m force {\r\n\u001b[96m\u001b[47m 63 \u001b[" - ], - [ - 0.000197, - "m\u001b[93m\u001b[107m\u001b[20CremoveContainers(ctrIDs, store)\r\n\u001b[96m\u001b[47m 64 \u001b[m\u001b[93m\u001b[107m\u001b[16C} \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 65 \u001b[m\u001b[93m\u001b[107m\u001b[20C\u001b[32mfor\u001b[m\u001b[93m\u001b[107m ctrID := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m ctrIDs {\r\n\u001b[96m\u001b[47m 66 \u001b[m\u001b[93m\u001b[107m\u001b[24C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m fmt.Errorf(\u001b[36m\"Could not remove image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m (must force) - one or more containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 67 \u001b[m\u001b[93m\u001b[107m\u001b[20C}\r\n\u001b[96m\u001b[47m 68 \u001b[m\u001b[93m\u001b[107m\u001b[16C}\r\n\u001b[96m\u001b[47m 69 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mrmi.go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;220m\u001b[48;5;240m M \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[51;41H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                        " - ], - [ - 0.009393, - "                                                                                                              \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  54%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 66\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:25 \u001b[47;29H\u001b[?12l\u001b[?25h" - ], - [ - 0.000186, - "\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 0.894574, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[43;30H\u001b[1m\u001b[31m\u001b[106m{\u001b[45;21H}\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  52%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:17\u001b[45;21H\u001b[?12l\u001b[?25h" - ], - [ - 0.755059, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[43;30H{\u001b[45;21H} \u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  53%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:20\u001b[46;24H\u001b[?12l\u001b[?25h" - ], - [ - 0.297693, - "\u001b[?25l\u001b[51;210H1\u001b[46;25H\u001b[?12l\u001b[?25h" - ], - [ - 0.494594, - "\u001b[51;210H2\u001b[46;26H" - ], - [ - 0.029144, - "\u001b[51;210H3\u001b[46;27H" - ], - [ - 0.189856, - "\u001b[51;210H4\u001b[46;28H" - ], - [ - 0.503162, - "\u001b[51;210H5\u001b[46;29H" - ], - [ - 0.02688, - "\u001b[51;210H6\u001b[46;30H" - ], - [ - 0.031882, - "\u001b[51;210H7\u001b[46;31H" - ], - [ - 0.031015, - "\u001b[51;210H8\u001b[46;32H" - ], - [ - 0.028268, - "\u001b[51;210H9\u001b[46;33H" - ], - [ - 0.725696, - "\u001b[51;209H30\u001b[46;34H" - ], - [ - 5.869681, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[34m-- INSERT --\u001b[m\u001b[93m\u001b[107m\u001b[52;13H\u001b[K" - ], - [ - 0.040358, - "\u001b[51;1H\u001b[1m\u001b[38;5;23m\u001b[48;5;231m INSERT \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;231m\u001b[48;5;31m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m\u001b[51;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;31m\u001b[51;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;31mrmi.go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;220m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;220m\u001b[48;5;31m M \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[51;41H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;24m                                                                                                                                      \u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;24munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;182H\u001b[38;5;117m\u001b[48;5;24m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;74m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[107m\u001b[51;190H\u001b[38;5;117m\u001b[48;5;24m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m \u001b[m\u001b[93m\u001b[10" - ], - [ - 2.4e-05, - "7m\u001b[51;195H\u001b[38;5;186m\u001b[48;5;31m  53%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;117m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;24m\u001b[48;5;117m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;24m\u001b[48;5;117m 65\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;117m:30 \u001b[46;34H\u001b[?12l\u001b[?25h" - ], - [ - 0.274464, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m ctrIDs {\u001b[46;51H\u001b[K\u001b[51;39H\u001b[1m\u001b[38;5;220m\u001b[48;5;31m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[51;43H \u001b[m\u001b[93m\u001b[107m\u001b[165C\u001b[38;5;22m\u001b[48;5;117m29\u001b[46;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.151925, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m ctrIDs {\u001b[46;50H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m8\u001b[46;32H\u001b[?12l\u001b[?25h" - ], - [ - 0.167731, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m ctrIDs {\u001b[46;49H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m7\u001b[46;31H\u001b[?12l\u001b[?25h" - ], - [ - 0.184041, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m ctrIDs {\u001b[46;48H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[46;30H\u001b[?12l\u001b[?25h" - ], - [ - 0.156407, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m ctrIDs {\u001b[46;47H\u001b[K\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m5\u001b[46;29H\u001b[?12l\u001b[?25h" - ], - [ - 1.347077, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m_ := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m ctrIDs {\u001b[51;210H\u001b[38;5;22m\u001b[48;5;117m6\u001b[46;30H\u001b[?12l\u001b[?25h" - ], - [ - 0.334595, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K" - ], - [ - 0.014443, - "\u001b[51;1H\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;31m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mrmi.go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;220m\u001b[48;5;31m \u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;220m\u001b[48;5;240m M\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;31m\u001b[48;5;24m\u001b[m\u001b[93m\u001b[107m\u001b[51;42H\u001b[38;5;240m\u001b[48;5;236m\u001b[51;43H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                                    \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b" - ], - [ - 2.9e-05, - "[m\u001b[93m\u001b[107m\u001b[51;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  53%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 65\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;117m:\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;252m:25 \u001b[46;29H\u001b[?12l\u001b[?25h" - ], - [ - 0.257293, - "\u001b[?25l\u001b[52;1H\u001b[m\u001b[93m\u001b[107m:\u001b[?2004h" - ], - [ - 8.6e-05, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.135176, - "w\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.03633, - "q" - ], - [ - 0.000156, - "\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.124203, - "\r" - ], - [ - 0.0003, - "\u001b[?25l\u001b[?2004l" - ], - [ - 0.023972, - "\"cmd/kpod/rmi.go\"" - ], - [ - 0.012083, - " 123L, 3096C written" - ], - [ - 0.013278, - "\r\r\r\n\u001b[39;49m\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.002006, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.025275, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m13s\u001b[39m\r\n" - ], - [ - 0.001052, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 8.3e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 6.3e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 7e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.4e-05, - "\u001b[?1h\u001b=" - ], - [ - 2e-05, - "\u001b[?2004h" - ], - [ - 0.122123, - "vi cmd/kpod/rmi.go" - ], - [ - 0.183865, - "\u001b[18Dvu\u001b[16C" - ], - [ - 0.8524, - "\u001b[18Dvi\u001b[16C" - ], - [ - 0.251769, - "\u001b[18D \u001b[18D" - ], - [ - 0.427799, - "vi cmd/kpod/rmi.go" - ], - [ - 0.996091, - "\u001b[?1l\u001b>" - ], - [ - 0.000117, - "\u001b[?2004l\r\r\n" - ], - [ - 0.004829, - "\u001b]2;vim cmd/kpod/rmi.go\u0007\u001b]1;vi\u0007" - ], - [ - 0.136844, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000622, - "\u001b[1;52r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[52;1H\"cmd/kpod/rmi.go\"" - ], - [ - 7.1e-05, - " 123L, 3096C" - ], - [ - 0.008554, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H\u001b[>c" - ], - [ - 0.002929, - "\u001b[1;1H\u001b[96m\u001b[47m 19 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 20 \u001b[m\u001b[93m\u001b[107m rmiCommand = cli.Command{\r\n\u001b[96m\u001b[47m 21 \u001b[m\u001b[93m\u001b[107m\u001b[8CName:\u001b[8C\u001b[36m\"rmi\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 22 \u001b[m\u001b[93m\u001b[107m\u001b[8CUsage:\u001b[7C\u001b[36m\"removes one or more images from local storage\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 23 \u001b[m\u001b[93m\u001b[107m\u001b[8CDescription: rmiDescription,\r\n\u001b[96m\u001b[47m 24 \u001b[m\u001b[93m\u001b[107m\u001b[8CAction: rmiCmd,\r\n\u001b[96m\u001b[47m 25 \u001b[m\u001b[93m\u001b[107m\u001b[8CArgsUsage: \u001b[36m\"IMAGE-NAME-OR-ID [...]\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 26 \u001b[m\u001b[93m\u001b[107m\u001b[8CFlags:\u001b[7CrmiFlags,\r\n\u001b[96m\u001b[47m 27 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 28 \u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 29 \r\n 30 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m rmiCmd(c *cli.Context) \u001b[33merror\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 31 \r\n 32 \u001b[m\u001b[93m\u001b[107m force := \u001b[36mfalse\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 33 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m c.IsSet(\u001b[36m\"force\"\u001b[m\u001b[93m\u001b[107m) {\r\n\u001b[96m\u001b[47m 34 \u001b[m\u001b[93m\u001b[107m\u001b[8Cforce = c.Bool(\u001b[36m\"force\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 35 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 36 \r\n 37 \u001b[m\u001b[93m\u001b[107" - ], - [ - 1.9e-05, - "m args := c.Args()\r\n\u001b[96m\u001b[47m 38 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(args) == \u001b[36m0\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 39 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Errorf(\u001b[36m\"image name or ID must be specified\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 40 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 41 \r\n 42 \u001b[m\u001b[93m\u001b[107m config, err := getConfig(c)\r\n\u001b[96m\u001b[47m 43 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 44 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"Could not get config\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 45 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 46 \u001b[m\u001b[93m\u001b[107m store, err := getStore(config)\r\n\u001b[96m\u001b[47m 47 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 48 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\r\n\u001b[96m\u001b[47m 49 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 50 \r\n 51 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, id := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m args {\r\n\u001b[96m\u001b[47m 52 \u001b[m\u001b[93m\u001b[107m\u001b[8Cimage, err := libkpodimage.FindI" - ], - [ - 0.030095, - "mage(store, id)\r\n\u001b[96m\u001b[47m 53 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 54 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"could not get image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 55 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 56 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m image != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 57 \u001b[m\u001b[93m\u001b[107m\u001b[12CctrIDs, err := runningContainers(image, store)\r\n\u001b[96m\u001b[47m 58 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 59 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"error getting running containers for image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 60 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[96m\u001b[47m 61 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(ctrIDs) > \u001b[36m0\u001b[m\u001b[93m\u001b[107m && \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(image.Names) <= \u001b[36m1\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 62 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mif\u001b[m\u001b[93m\u001b[107m force {\r" - ], - [ - 3.7e-05, - "\n\u001b[96m\u001b[47m 63 \u001b[m\u001b[93m\u001b[107m\u001b[20CremoveContainers(ctrIDs, store)\r\n\u001b[96m\u001b[47m 64 \u001b[m\u001b[93m\u001b[107m\u001b[16C} \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 65 \u001b[m\u001b[93m\u001b[107m\u001b[20C\u001b[32mfor\u001b[m\u001b[93m\u001b[107m _ := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m ctrIDs {\r\n\u001b[96m\u001b[47m 66 \u001b[m\u001b[93m\u001b[107m\u001b[24C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m fmt.Errorf(\u001b[36m\"Could not remove image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m (must force) - one or more containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 67 \u001b[m\u001b[93m\u001b[107m\u001b[20C}\r\n\u001b[96m\u001b[47m 68 \u001b[m\u001b[93m\u001b[107m\u001b[16C}\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mrmi.go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;220m\u001b[48;5;240m M \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[51;41H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                    " - ], - [ - 0.011253, - "                                                                                                  \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  53%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 65\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:21 \u001b[47;25H\u001b[?12l\u001b[?25h\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 0.884291, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K\u001b[52;1H:\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.175395, - "q\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.047934, - "\r" - ], - [ - 0.019314, - "\u001b[?25l\u001b[?2004l\u001b[52;1H\u001b[K\u001b[52;1H\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.001837, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.019156, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001205, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000106, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.3e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 9.5e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.1e-05, - "\u001b[?2004h" - ], - [ - 0.22274, - "m" - ], - [ - 0.120257, - "\bma" - ], - [ - 0.087838, - "k" - ], - [ - 0.119717, - "e" - ], - [ - 0.055994, - " " - ], - [ - 0.103706, - "k" - ], - [ - 0.080698, - "p" - ], - [ - 0.051603, - "o" - ], - [ - 0.124175, - "d" - ], - [ - 0.076543, - "\u001b[?1l\u001b>\u001b[?2004l\r\r\n" - ], - [ - 0.004916, - "\u001b]2;make kpod\u0007\u001b]1;make\u0007" - ], - [ - 6.744424, - "go build -ldflags '-X main.gitCommit=6ca462a3 -X main.buildInfo=1502976912' -tags \"selinux seccomp \" -o kpod github.com/kubernetes-incubator/cri-o/cmd/kpod\r\n" - ], - [ - 1.99486, - "# github.com/kubernetes-incubator/cri-o/cmd/kpod\r\ncmd/kpod/rmi.go:65: no new variables on left side of :=\r\n" - ], - [ - 0.002634, - "make: *** [Makefile:83: kpod] Error 2\r\n" - ], - [ - 0.000711, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.019707, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m9s\u001b[39m\r\n" - ], - [ - 0.001352, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000124, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000112, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[31m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 4.6e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.8e-05, - "\u001b[?2004h" - ], - [ - 12.559376, - "make kpod" - ], - [ - 0.160079, - "\u001b[9Dvi cmd/kpod/rmi.go" - ], - [ - 0.376119, - "\\" - ], - [ - 0.719352, - "\u001b[?1l\u001b>" - ], - [ - 0.000252, - "\u001b[?2004l\r\r\n" - ], - [ - 0.000889, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J> \u001b[K" - ], - [ - 0.000257, - "\u001b[?1h\u001b=" - ], - [ - 9e-05, - "\u001b[?2004h" - ], - [ - 0.814396, - "\u001b[?2004l\r\r\n" - ], - [ - 0.002088, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.020752, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m24s\u001b[39m\r\n" - ], - [ - 0.001027, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000116, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.6e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000109, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[31m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 7.1e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.9e-05, - "\u001b[?2004h" - ], - [ - 0.191891, - "vi cmd/kpod/rmi.go\\" - ], - [ - 0.255869, - "\b \b" - ], - [ - 0.164227, - "\u001b[?1l\u001b>" - ], - [ - 0.000395, - "\u001b[?2004l\r\r\n" - ], - [ - 0.005085, - "\u001b]2;vim cmd/kpod/rmi.go\u0007\u001b]1;vi\u0007" - ], - [ - 0.139286, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000664, - "\u001b[1;52r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[52;1H\"cmd/kpod/rmi.go\" 123L, 3096C" - ], - [ - 0.007849, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H\u001b[>c" - ], - [ - 0.001971, - "\u001b[1;1H\u001b[96m\u001b[47m 19 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 20 \u001b[m\u001b[93m\u001b[107m rmiCommand = cli.Command{\r\n\u001b[96m\u001b[47m 21 \u001b[m\u001b[93m\u001b[107m\u001b[8CName:\u001b[8C\u001b[36m\"rmi\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 22 \u001b[m\u001b[93m\u001b[107m\u001b[8CUsage:\u001b[7C\u001b[36m\"removes one or more images from local storage\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 23 \u001b[m\u001b[93m\u001b[107m\u001b[8CDescription: rmiDescription,\r\n\u001b[96m\u001b[47m 24 \u001b[m\u001b[93m\u001b[107m\u001b[8CAction: rmiCmd,\r\n\u001b[96m\u001b[47m 25 \u001b[m\u001b[93m\u001b[107m\u001b[8CArgsUsage: \u001b[36m\"IMAGE-NAME-OR-ID [...]\"\u001b[m\u001b[93m\u001b[107m,\r\n\u001b[96m\u001b[47m 26 \u001b[m\u001b[93m\u001b[107m\u001b[8CFlags:\u001b[7CrmiFlags,\r\n\u001b[96m\u001b[47m 27 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 28 \u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 29 \r\n 30 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m rmiCmd(c *cli.Context) \u001b[33merror\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 31 \r\n 32 \u001b[m\u001b[93m\u001b[107m force := \u001b[36mfalse\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 33 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m c.IsSet(\u001b[36m\"force\"\u001b[m\u001b[93m\u001b[107m) {\r\n\u001b[96m\u001b[47m 34 \u001b[m\u001b[93m\u001b[107m\u001b[8Cforce = c.Bool(\u001b[36m\"force\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 35 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 36 \r\n 37 \u001b[m\u001b[93m\u001b[107" - ], - [ - 2e-05, - "m args := c.Args()\r\n\u001b[96m\u001b[47m 38 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(args) == \u001b[36m0\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 39 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Errorf(\u001b[36m\"image name or ID must be specified\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 40 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 41 \r\n 42 \u001b[m\u001b[93m\u001b[107m config, err := getConfig(c)\r\n\u001b[96m\u001b[47m 43 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 44 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"Could not get config\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 45 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 46 \u001b[m\u001b[93m\u001b[107m store, err := getStore(config)\r\n\u001b[96m\u001b[47m 47 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 48 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\r\n\u001b[96m\u001b[47m 49 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 50 \r\n 51 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, id := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m args {\r\n\u001b[96m\u001b[47m 52 \u001b[m\u001b[93m\u001b[107m\u001b[8Cimage, err := libkpodimage.FindI" - ], - [ - 0.030785, - "mage(store, id)\r\n\u001b[96m\u001b[47m 53 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 54 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"could not get image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 55 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 56 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m image != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 57 \u001b[m\u001b[93m\u001b[107m\u001b[12CctrIDs, err := runningContainers(image, store)\r\n\u001b[96m\u001b[47m 58 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 59 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"error getting running containers for image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 60 \u001b[m\u001b[93m\u001b[107m\u001b[12C}\r\n\u001b[96m\u001b[47m 61 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(ctrIDs) > \u001b[36m0\u001b[m\u001b[93m\u001b[107m && \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(image.Names) <= \u001b[36m1\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 62 \u001b[m\u001b[93m\u001b[107m\u001b[16C\u001b[32mif\u001b[m\u001b[93m\u001b[107m force {\r" - ], - [ - 3e-05, - "\n\u001b[96m\u001b[47m 63 \u001b[m\u001b[93m\u001b[107m\u001b[20CremoveContainers(ctrIDs, store)\r\n\u001b[96m\u001b[47m 64 \u001b[m\u001b[93m\u001b[107m\u001b[16C} \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 65 \u001b[m\u001b[93m\u001b[107m\u001b[20C\u001b[32mfor\u001b[m\u001b[93m\u001b[107m _ := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m ctrIDs {\r\n\u001b[96m\u001b[47m 66 \u001b[m\u001b[93m\u001b[107m\u001b[24C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m fmt.Errorf(\u001b[36m\"Could not remove image \u001b[m\u001b[93m\u001b[107m\u001b[31m%q\u001b[m\u001b[93m\u001b[107m\u001b[36m (must force) - one or more containers are using its reference image\"\u001b[m\u001b[93m\u001b[107m, id)\r\n\u001b[96m\u001b[47m 67 \u001b[m\u001b[93m\u001b[107m\u001b[20C}\r\n\u001b[96m\u001b[47m 68 \u001b[m\u001b[93m\u001b[107m\u001b[16C}\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mrmi.go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;220m\u001b[48;5;240m M \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[51;41H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                    " - ], - [ - 0.009791, - "                                                                                                  \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  53%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 65\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:21 \u001b[47;25H\u001b[?12l\u001b[?25h" - ], - [ - 3.2e-05, - "\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 0.549454, - "\u001b[?25l\u001b[51;210H2\u001b[47;26H\u001b[?12l\u001b[?25h" - ], - [ - 0.282227, - "\u001b[51;210H3\u001b[47;27H" - ], - [ - 0.500981, - "\u001b[51;210H4\u001b[47;28H" - ], - [ - 0.028181, - "\u001b[51;210H5\u001b[47;29H" - ], - [ - 0.120266, - "\u001b[51;210H6\u001b[47;30H" - ], - [ - 0.176334, - "\u001b[51;210H7\u001b[47;31H" - ], - [ - 0.332685, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m= \u001b[32mrange\u001b[m\u001b[93m\u001b[107m ctrIDs {\u001b[47;47H\u001b[K\u001b[51;39H\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[51;43H \u001b[47;31H\u001b[?12l\u001b[?25h" - ], - [ - 0.457865, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K\u001b[52;1H:\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.16749, - "w\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.072064, - "q\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.096121, - "\r" - ], - [ - 0.000123, - "\u001b[?25l\u001b[?2004l" - ], - [ - 0.01842, - "\"cmd/kpod/rmi.go\"" - ], - [ - 0.012505, - " 123L, 3095C written" - ], - [ - 0.016238, - "\r\r\r\n\u001b[39;49m\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.002512, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.022671, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001565, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000124, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 3e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000106, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 7.2e-05, - "\u001b[?1h\u001b=" - ], - [ - 3.7e-05, - "\u001b[?2004h" - ], - [ - 0.334146, - "vi cmd/kpod/rmi.go" - ], - [ - 0.182947, - "\\" - ], - [ - 0.599976, - "\u001b[?1l\u001b>" - ], - [ - 5.2e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.000542, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J> \u001b[K" - ], - [ - 0.000169, - "\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 1.143722, - "\u001b[?2004l\r\r\n" - ], - [ - 0.001295, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.028119, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m6s\u001b[39m\r\n" - ], - [ - 0.00136, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000114, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 1.7e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000126, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[31m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.9e-05, - "\u001b[?1h\u001b=" - ], - [ - 3.2e-05, - "\u001b[?2004h" - ], - [ - 0.193141, - "vi cmd/kpod/rmi.go\\" - ], - [ - 0.159626, - "\b \b" - ], - [ - 0.18457, - "\\" - ], - [ - 0.29669, - "\u001b[19Dmake kpod \u001b[10D" - ], - [ - 0.863034, - "\u001b[?1l\u001b>" - ], - [ - 0.000232, - "\u001b[?2004l\r\r\n" - ], - [ - 0.004368, - "\u001b]2;make kpod\u0007\u001b]1;make\u0007" - ], - [ - 6.733531, - "go build -ldflags '-X main.gitCommit=6ca462a3 -X main.buildInfo=1502976943' -tags \"selinux seccomp \" -o kpod github.com/kubernetes-incubator/cri-o/cmd/kpod\r\n" - ], - [ - 4.55149, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.018009, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m12s\u001b[39m\r\n" - ], - [ - 0.001122, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000105, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007" - ], - [ - 8.3e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.1e-05, - "\u001b[?1h\u001b=" - ], - [ - 2e-05, - "\u001b[?2004h" - ], - [ - 20.811668, - "m" - ], - [ - 0.119573, - "\bma" - ], - [ - 0.111827, - "k" - ], - [ - 0.080357, - "e" - ], - [ - 0.103149, - " " - ], - [ - 0.084516, - "k" - ], - [ - 0.143968, - "p" - ], - [ - 0.079279, - "o" - ], - [ - 0.088902, - "d" - ], - [ - 0.135804, - "\u001b[?1l\u001b>" - ], - [ - 0.000119, - "\u001b[?2004l" - ], - [ - 0.000522, - "\r\r\n" - ], - [ - 0.003588, - "\u001b]2;make kpod\u0007\u001b]1;make\u0007" - ], - [ - 6.696294, - "make: 'kpod' is up to date.\r\n" - ], - [ - 0.000283, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.020139, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m7s\u001b[39m\r\n" - ], - [ - 0.001161, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 9e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.8e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000108, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.5e-05, - "\u001b[?1h\u001b=" - ], - [ - 7.7e-05, - "\u001b[?2004h" - ], - [ - 243.314771, - "s" - ], - [ - 0.111394, - "\bsu" - ], - [ - 0.096183, - "d" - ], - [ - 0.080041, - "o" - ], - [ - 0.128398, - " " - ], - [ - 0.119735, - "m" - ], - [ - 0.095922, - "a" - ], - [ - 0.088141, - "k" - ], - [ - 0.072233, - "e" - ], - [ - 0.095742, - " " - ], - [ - 0.087941, - "i" - ], - [ - 0.104278, - "n" - ], - [ - 0.032039, - "s" - ], - [ - 0.118983, - "t" - ], - [ - 0.072644, - "a" - ], - [ - 0.143994, - "l" - ], - [ - 0.168065, - "l" - ], - [ - 0.752715, - "\u001b[?1l\u001b>\u001b[?2004l\r\r\n" - ], - [ - 0.009834, - "\u001b]2;sudo make install\u0007\u001b]1;make\u0007" - ], - [ - 0.955201, - "[sudo] password for ryan: " - ], - [ - 20.245864, - "\r\n" - ], - [ - 0.045577, - "mkdir -p \"/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/_output/src/github.com/kubernetes-incubator\"\r\n" - ], - [ - 0.001888, - "ln -s \"/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\" \"/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/_output/src/github.com/kubernetes-incubator\"\r\n" - ], - [ - 0.001297, - "touch \"/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/_output/.gopathok\"\r\n" - ], - [ - 0.001197, - "install -D -m 755 crio /usr/local/bin/crio\r\n" - ], - [ - 0.000745, - "install: cannot stat 'crio': No such file or directory\r\n" - ], - [ - 0.000258, - "make: *** [Makefile:133: install] Error 1\r\n" - ], - [ - 0.002376, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.025148, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m21s\u001b[39m\r\n" - ], - [ - 0.001447, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000116, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 3.1e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000295, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[31m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 8.2e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.9e-05, - "\u001b[?2004h" - ], - [ - 16.688284, - "s" - ], - [ - 0.136222, - "\bsu" - ], - [ - 0.119402, - "d" - ], - [ - 0.080011, - "o" - ], - [ - 0.135772, - " " - ], - [ - 0.088659, - "m" - ], - [ - 0.112281, - "a" - ], - [ - 0.118598, - "k" - ], - [ - 0.120387, - "e" - ], - [ - 0.104104, - " " - ], - [ - 0.248577, - "u" - ], - [ - 0.215792, - "n" - ], - [ - 0.140158, - "i" - ], - [ - 0.067519, - "n" - ], - [ - 0.071505, - "s" - ], - [ - 0.104231, - "t" - ], - [ - 0.08841, - "a" - ], - [ - 0.120753, - "l" - ], - [ - 0.111041, - "l" - ], - [ - 0.188244, - "\u001b[?1l\u001b>" - ], - [ - 0.000191, - "\u001b[?2004l\r\r\n" - ], - [ - 0.008904, - "\u001b]2;sudo make uninstall\u0007\u001b]1;make\u0007" - ], - [ - 2.992644, - "rm -f /usr/local/bin/crio\r\n" - ], - [ - 0.008835, - "rm -f /usr/local/bin/crioctl\r\n" - ], - [ - 0.006105, - "rm -f /usr/local/libexec/crio/conmon\r\n" - ], - [ - 0.001162, - "rm -f /usr/local/libexec/crio/pause" - ], - [ - 0.000104, - "\r\n" - ], - [ - 0.000807, - "for i in docs/kpod-diff.1 docs/kpod-push.1 docs/kpod.1 docs/kpod-export.1 docs/kpod-load.1 docs/kpod-images.1 docs/kpod-umount.1 docs/kpod-save.1 docs/kpod-cp.1 docs/kpod-info.1 docs/kpod-mount.1 docs/kpod-inspect.1 docs/kpod-logs.1 docs/kpod-history.1 docs/kpod-pull.1 docs/kpod-rmi.1 docs/kpod-version.1 docs/kpod-tag.1; do \\\r\n\trm -f /usr/local/share/man/man8/$(basename ${i}); \\\r\ndone\r\n" - ], - [ - 0.038238, - "for i in docs/crio.conf.5; do \\\r\n\trm -f /usr/local/share/man/man5/$(basename ${i}); \\\r\ndone\r\n" - ], - [ - 0.003095, - "for i in docs/crio.8; do \\\r\n\trm -f /usr/local/share/man/man8/$(basename ${i}); \\\r\ndone\r\n" - ], - [ - 0.006486, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.024997, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001214, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 8.9e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.5e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 8e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 8e-05, - "\u001b[?1h\u001b=" - ], - [ - 3.1e-05, - "\u001b[?2004h" - ], - [ - 0.734872, - "m" - ], - [ - 0.09234, - "\bma" - ], - [ - 0.115606, - "k" - ], - [ - 0.060071, - "e" - ], - [ - 0.080073, - " " - ], - [ - 0.10406, - "a" - ], - [ - 0.055694, - "l" - ], - [ - 0.108501, - "l" - ], - [ - 0.199594, - "\u001b[?1l\u001b>" - ], - [ - 6.5e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.00357, - "\u001b]2;make all\u0007" - ], - [ - 7.2e-05, - "\u001b]1;make\u0007" - ], - [ - 7.412593, - "go build -ldflags '-X main.gitCommit=6ca462a3 -X main.buildInfo=1502977274' -tags \"selinux seccomp \" -o crio github.com/kubernetes-incubator/cri-o/cmd/crio\r\n" - ], - [ - 6.928493, - "go build -ldflags '-X main.gitCommit=6ca462a3 -X main.buildInfo=1502977274' -tags \"selinux seccomp \" -o crioctl github.com/kubernetes-incubator/cri-o/cmd/crioctl\r\n" - ], - [ - 1.93333, - "make -C conmon\r\n" - ], - [ - 0.004362, - "make[1]: Entering directory '/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/conmon'\r\n" - ], - [ - 0.000772, - "cc -std=c99 -Os -Wall -Wextra -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -c -o conmon.o conmon.c\r\n" - ], - [ - 0.314835, - "cc -std=c99 -Os -Wall -Wextra -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -c -o cmsg.o cmsg.c\r\n" - ], - [ - 0.040765, - "cc -o conmon conmon.o cmsg.o -std=c99 -Os -Wall -Wextra -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lglib-2.0 \r\n" - ], - [ - 0.01855, - "make[1]: Leaving directory '/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/conmon'\r\n" - ], - [ - 0.000285, - "make -C pause\r\n" - ], - [ - 0.00317, - "make[1]: Entering directory '/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/pause'\r\ncc -std=c99 -Os -Wall -Wextra -static -c -o pause.o pause.c\r\n" - ], - [ - 0.030319, - "cc -o pause pause.o -std=c99 -Os -Wall -Wextra -static \r\n" - ], - [ - 0.090802, - "strip pause\r\n" - ], - [ - 0.004286, - "make[1]: Leaving directory '/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o/pause'\r\n" - ], - [ - 0.068555, - "go build -ldflags '-X main.gitCommit=6ca462a3 -X main.buildInfo=1502977274' -tags \"selinux seccomp \" -o test/bin2img/bin2img github.com/kubernetes-incubator/cri-o/test/bin2img\r\n" - ], - [ - 2.210776, - "go build -ldflags '-X main.gitCommit=6ca462a3 -X main.buildInfo=1502977274' -tags \"selinux seccomp \" -o test/copyimg/copyimg github.com/kubernetes-incubator/cri-o/test/copyimg\r\n" - ], - [ - 2.412996, - "go build -ldflags '-X main.gitCommit=6ca462a3 -X main.buildInfo=1502977274' -tags \"selinux seccomp \" -o test/checkseccomp/checkseccomp github.com/kubernetes-incubator/cri-o/test/checkseccomp" - ], - [ - 6.7e-05, - "\r\n" - ], - [ - 0.162664, - "./crio --config=\"\" config --default > crio.conf\r\n" - ], - [ - 0.091642, - "(go-md2man -in docs/kpod-diff.1.md -out docs/kpod-diff.1.tmp && touch docs/kpod-diff.1.tmp && mv docs/kpod-diff.1.tmp docs/kpod-diff.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-diff.1.md -out docs/kpod-diff.1.tmp && touch docs/kpod-diff.1.tmp && mv docs/kpod-diff.1.tmp docs/kpod-diff.1)\r\n" - ], - [ - 0.006608, - "(go-md2man -in docs/kpod-push.1.md -out docs/kpod-push.1.tmp && touch docs/kpod-push.1.tmp && mv docs/kpod-push.1.tmp docs/kpod-push.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-push.1.md -out docs/kpod-push.1.tmp && touch docs/kpod-push.1.tmp && mv docs/kpod-push.1.tmp docs/kpod-push.1)\r\n" - ], - [ - 0.008204, - "(go-md2man -in docs/crio.conf.5.md -out docs/crio.conf.5.tmp && touch docs/crio.conf.5.tmp && mv docs/crio.conf.5.tmp docs/crio.conf.5) || (/home/ryan/Development/Go/bin/go-md2man -in docs/crio.conf.5.md -out docs/crio.conf.5.tmp && touch docs/crio.conf.5.tmp && mv docs/crio.conf.5.tmp docs/crio.conf.5)\r\n" - ], - [ - 0.00881, - "(go-md2man -in docs/kpod.1.md -out docs/kpod.1.tmp && touch docs/kpod.1.tmp && mv docs/kpod.1.tmp docs/kpod.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod.1.md -out docs/kpod.1.tmp && touch docs/kpod.1.tmp && mv docs/kpod.1.tmp docs/kpod.1)\r\n" - ], - [ - 0.008192, - "(go-md2man -in docs/kpod-export.1.md -out docs/kpod-export.1.tmp && touch docs/kpod-export.1.tmp && mv docs/kpod-export.1.tmp docs/kpod-export.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-export.1.md -out docs/kpod-export.1.tmp && touch docs/kpod-export.1.tmp && mv docs/kpod-export.1.tmp docs/kpod-export.1)\r\n" - ], - [ - 0.0109, - "(go-md2man -in docs/kpod-load.1.md -out docs/kpod-load.1.tmp && touch docs/kpod-load.1.tmp && mv docs/kpod-load.1.tmp docs/kpod-load.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-load.1.md -out docs/kpod-load.1.tmp && touch docs/kpod-load.1.tmp && mv docs/kpod-load.1.tmp docs/kpod-load.1)\r\n" - ], - [ - 0.009389, - "(go-md2man -in docs/kpod-images.1.md -out docs/kpod-images.1.tmp && touch docs/kpod-images.1.tmp && mv docs/kpod-images.1.tmp docs/kpod-images.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-images.1.md -out docs/kpod-images.1.tmp && touch docs/kpod-images.1.tmp && mv docs/kpod-images.1.tmp docs/kpod-images.1)\r\n" - ], - [ - 0.005353, - "(go-md2man -in docs/kpod-umount.1.md -out docs/kpod-umount.1.tmp && touch docs/kpod-umount.1.tmp && mv docs/kpod-umount.1.tmp docs/kpod-umount.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-umount.1.md -out docs/kpod-umount.1.tmp && touch docs/kpod-umount.1.tmp && mv docs/kpod-umount.1.tmp docs/kpod-umount.1)\r\n" - ], - [ - 0.008716, - "(go-md2man -in docs/crio.8.md -out docs/crio.8.tmp && touch docs/crio.8.tmp && mv docs/crio.8.tmp docs/crio.8) || (/home/ryan/Development/Go/bin/go-md2man -in docs/crio.8.md -out docs/crio.8.tmp && touch docs/crio.8.tmp && mv docs/crio.8.tmp docs/crio.8)\r\n" - ], - [ - 0.010697, - "(go-md2man -in docs/kpod-save.1.md -out docs/kpod-save.1.tmp && touch docs/kpod-save.1.tmp && mv docs/kpod-save.1.tmp docs/kpod-save.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-save.1.md -out docs/kpod-save.1.tmp && touch docs/kpod-save.1.tmp && mv docs/kpod-save.1.tmp docs/kpod-save.1)\r\n" - ], - [ - 0.007561, - "(go-md2man -in docs/kpod-cp.1.md -out docs/kpod-cp.1.tmp && touch docs/kpod-cp.1.tmp && mv docs/kpod-cp.1.tmp docs/kpod-cp.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-cp.1.md -out docs/kpod-cp.1.tmp && touch docs/kpod-cp.1.tmp && mv docs/kpod-cp.1.tmp docs/kpod-cp.1)\r\n" - ], - [ - 0.005973, - "(go-md2man -in docs/kpod-info.1.md -out docs/kpod-info.1.tmp && touch docs/kpod-info.1.tmp && mv docs/kpod-info.1.tmp docs/kpod-info.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-info.1.md -out docs/kpod-info.1.tmp && touch docs/kpod-info.1.tmp && mv docs/kpod-info.1.tmp docs/kpod-info.1)\r\n" - ], - [ - 0.005551, - "(go-md2man -in docs/kpod-mount.1.md -out docs/kpod-mount.1.tmp && touch docs/kpod-mount.1.tmp && mv docs/kpod-mount.1.tmp docs/kpod-mount.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-mount.1.md -out docs/kpod-mount.1.tmp && touch docs/kpod-mount.1.tmp && mv docs/kpod-mount.1.tmp docs/kpod-mount.1)\r\n" - ], - [ - 0.009121, - "(go-md2man -in docs/kpod-inspect.1.md -out docs/kpod-inspect.1.tmp && touch docs/kpod-inspect.1.tmp && mv docs/kpod-inspect.1.tmp docs/kpod-inspect.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-inspect.1.md -out docs/kpod-inspect.1.tmp && touch docs/kpod-inspect.1.tmp && mv docs/kpod-inspect.1.tmp docs/kpod-inspect.1)\r\n" - ], - [ - 0.006826, - "(go-md2man -in docs/kpod-logs.1.md -out docs/kpod-logs.1.tmp && touch docs/kpod-logs.1.tmp && mv docs/kpod-logs.1.tmp docs/kpod-logs.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-logs.1.md -out docs/kpod-logs.1.tmp && touch docs/kpod-logs.1.tmp && mv docs/kpod-logs.1.tmp docs/kpod-logs.1)\r\n" - ], - [ - 0.007772, - "(go-md2man -in docs/kpod-history.1.md -out docs/kpod-history.1.tmp && touch docs/kpod-history.1.tmp && mv docs/kpod-history.1.tmp docs/kpod-history.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-history.1.md -out docs/kpod-history.1.tmp && touch docs/kpod-history.1.tmp && mv docs/kpod-history.1.tmp docs/kpod-history.1)\r\n" - ], - [ - 0.005003, - "(go-md2man -in docs/kpod-pull.1.md -out docs/kpod-pull.1.tmp && touch docs/kpod-pull.1.tmp && mv docs/kpod-pull.1.tmp docs/kpod-pull.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-pull.1.md -out docs/kpod-pull.1.tmp && touch docs/kpod-pull.1.tmp && mv docs/kpod-pull.1.tmp docs/kpod-pull.1)\r\n" - ], - [ - 0.010404, - "(go-md2man -in docs/kpod-rmi.1.md -out docs/kpod-rmi.1.tmp && touch docs/kpod-rmi.1.tmp && mv docs/kpod-rmi.1.tmp docs/kpod-rmi.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-rmi.1.md -out docs/kpod-rmi.1.tmp && touch docs/kpod-rmi.1.tmp && mv docs/kpod-rmi.1.tmp docs/kpod-rmi.1)\r\n" - ], - [ - 0.007878, - "(go-md2man -in docs/kpod-version.1.md -out docs/kpod-version.1.tmp && touch docs/kpod-version.1.tmp && mv docs/kpod-version.1.tmp docs/kpod-version.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-version.1.md -out docs/kpod-version.1.tmp && touch docs/kpod-version.1.tmp && mv docs/kpod-version.1.tmp docs/kpod-version.1)\r\n" - ], - [ - 0.006074, - "(go-md2man -in docs/kpod-tag.1.md -out docs/kpod-tag.1.tmp && touch docs/kpod-tag.1.tmp && mv docs/kpod-tag.1.tmp docs/kpod-tag.1) || (/home/ryan/Development/Go/bin/go-md2man -in docs/kpod-tag.1.md -out docs/kpod-tag.1.tmp && touch docs/kpod-tag.1.tmp && mv docs/kpod-tag.1.tmp docs/kpod-tag.1)\r\n" - ], - [ - 0.007358, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.021811, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m22s\u001b[39m\r\n" - ], - [ - 0.001102, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000118, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 1.5e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 6.9e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 0.000142, - "\u001b[?1h\u001b=" - ], - [ - 2.9e-05, - "\u001b[?2004h" - ], - [ - 22.687022, - "s" - ], - [ - 0.176986, - "\bsu" - ], - [ - 0.231668, - "d" - ], - [ - 0.167315, - "o" - ], - [ - 0.224159, - " " - ], - [ - 0.184546, - "m" - ], - [ - 0.111947, - "a" - ], - [ - 0.127867, - "k" - ], - [ - 0.07167, - "e" - ], - [ - 0.095736, - " " - ], - [ - 0.072818, - "i" - ], - [ - 0.071884, - "n" - ], - [ - 0.07219, - "s" - ], - [ - 0.088277, - "t" - ], - [ - 0.071516, - "a" - ], - [ - 0.14414, - "l" - ], - [ - 0.119615, - "l" - ], - [ - 0.239306, - "\u001b[?1l\u001b>" - ], - [ - 7.7e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.001719, - "\u001b]2;sudo make install\u0007\u001b]1;make\u0007" - ], - [ - 3.018747, - "install -D -m 755 crio /usr/local/bin/crio\r\n" - ], - [ - 0.042567, - "install -D -m 755 crioctl /usr/local/bin/crioctl\r\n" - ], - [ - 0.026457, - "install -D -m 755 kpod /usr/local/bin/kpod" - ], - [ - 6.3e-05, - "\r\n" - ], - [ - 0.040019, - "install -D -m 755 conmon/conmon /usr/local/libexec/crio/conmon\r\n" - ], - [ - 0.003162, - "install -D -m 755 pause/pause /usr/local/libexec/crio/pause\r\n" - ], - [ - 0.003708, - "install -d -m 755 /usr/local/share/man/man1\r\n" - ], - [ - 0.00089, - "install -d -m 755 /usr/local/share/man/man5\r\n" - ], - [ - 0.000625, - "install -d -m 755 /usr/local/share/man/man8\r\n" - ], - [ - 0.000846, - "install -m 644 docs/kpod-diff.1 docs/kpod-push.1 docs/kpod-cp.1 docs/kpod.1 docs/kpod-export.1 docs/kpod-load.1 docs/kpod-logs.1 docs/kpod-images.1 docs/kpod-umount.1 docs/kpod-save.1 docs/kpod-mount.1 docs/kpod-info.1 docs/kpod-inspect.1 docs/kpod-history.1 docs/kpod-pull.1 docs/kpod-rmi.1 docs/kpod-version.1 docs/kpod-tag.1 -t /usr/local/share/man/man1\r\n" - ], - [ - 0.009723, - "install -m 644 docs/crio.conf.5 -t /usr/local/share/man/man5\r\n" - ], - [ - 0.002898, - "install -m 644 docs/crio.8 -t /usr/local/share/man/man8\r\n" - ], - [ - 0.006399, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.021303, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master* \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001274, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.0001, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 7.9e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 7e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 7.4e-05, - "\u001b[?1h\u001b=" - ], - [ - 3.4e-05, - "\u001b[?2004h" - ], - [ - 255.497514, - "v" - ], - [ - 0.111133, - "\bvi" - ], - [ - 0.096261, - " " - ], - [ - 0.055637, - "c" - ], - [ - 0.128288, - "m" - ], - [ - 0.295825, - "\b \b" - ], - [ - 0.499642, - "\b \b" - ], - [ - 0.03181, - "\b" - ], - [ - 0.030112, - "\b\bv \b" - ], - [ - 0.029886, - "\b \b" - ], - [ - 2470.181351, - "g" - ], - [ - 0.134982, - "\bgi" - ], - [ - 0.116687, - "t" - ], - [ - 0.248596, - " " - ], - [ - 0.091959, - "c" - ], - [ - 0.221434, - "h" - ], - [ - 0.511729, - "\b \b" - ], - [ - 0.149467, - "\b \b" - ], - [ - 0.180553, - "r" - ], - [ - 0.09336, - "e" - ], - [ - 0.118113, - "s" - ], - [ - 0.166341, - "e" - ], - [ - 0.101897, - "t" - ], - [ - 0.135639, - " " - ], - [ - 0.101112, - "-" - ], - [ - 0.133755, - "-" - ], - [ - 0.204129, - "h" - ], - [ - 0.087003, - "a" - ], - [ - 0.070922, - "r" - ], - [ - 0.107809, - "d" - ], - [ - 0.081233, - " " - ], - [ - 0.210727, - "H" - ], - [ - 0.08464, - "E" - ], - [ - 0.340797, - "AD\u001b[1m \u001b[0m" - ], - [ - 0.359977, - "\b\u001b[0m \b" - ], - [ - 0.000209, - "\u001b[?1l\u001b>" - ], - [ - 3.7e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.00869, - "\u001b]2;git reset --hard HEAD\u0007\u001b]1;git\u0007" - ], - [ - 0.033935, - "HEAD is now at 6ca462a3 Merge pull request #718 from 14rcole/kpod-logs\r\n" - ], - [ - 0.000491, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.039313, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.00621, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000838, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.401122, - "g" - ], - [ - 0.143266, - "\bgi" - ], - [ - 0.141142, - "t" - ], - [ - 0.13335, - " " - ], - [ - 0.080629, - "p" - ], - [ - 0.068567, - "u" - ], - [ - 0.139439, - "s" - ], - [ - 0.111629, - "h" - ], - [ - 0.103453, - " " - ], - [ - 0.140922, - "o" - ], - [ - 0.09323, - "r" - ], - [ - 0.126723, - "i" - ], - [ - 0.116153, - "g" - ], - [ - 0.103085, - "i" - ], - [ - 0.110423, - "n" - ], - [ - 0.047839, - " " - ], - [ - 0.211066, - "m" - ], - [ - 0.140391, - "a" - ], - [ - 0.493452, - "s" - ], - [ - 0.228966, - "ter\u001b[1m \u001b[0m" - ], - [ - 0.433861, - "\b\u001b[0m \b" - ], - [ - 0.000112, - "\u001b[?1l\u001b>" - ], - [ - 3.1e-05, - "\u001b[?2004l" - ], - [ - 0.001239, - "\r\r\n" - ], - [ - 0.004134, - "\u001b]2;git push origin master\u0007\u001b]1;git\u0007" - ], - [ - 0.74689, - "Total 0 (delta 0), reused 0 (delta 0)\r\n" - ], - [ - 1.494101, - "To github.com:14rcole/cri-o\r\n a69631c1..6ca462a3 master -> master\r\n" - ], - [ - 0.000159, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.046807, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001056, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000155, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 4e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 9.5e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 7.1e-05, - "\u001b[?1h\u001b=" - ], - [ - 4.1e-05, - "\u001b[?2004h" - ], - [ - 7.372135, - "g" - ], - [ - 0.126302, - "\bgi" - ], - [ - 0.101424, - "t" - ], - [ - 0.42971, - "n" - ], - [ - 1.654559, - "\b \b" - ], - [ - 0.292926, - " " - ], - [ - 0.227087, - "c" - ], - [ - 0.127935, - "h" - ], - [ - 0.100042, - "e" - ], - [ - 0.081115, - "c" - ], - [ - 0.195682, - "k" - ], - [ - 0.505623, - "o" - ], - [ - 0.138216, - "ut" - ], - [ - 0.45806, - " " - ], - [ - 0.100148, - "m" - ], - [ - 0.335248, - "\b \b" - ], - [ - 0.188284, - "k" - ], - [ - 0.140606, - "pod-" - ], - [ - 0.287649, - "t" - ], - [ - 0.053698, - "e" - ], - [ - 0.304664, - "st-refactor\u001b[1m \u001b[0m" - ], - [ - 0.651671, - "\b\u001b[0m \b" - ], - [ - 9.4e-05, - "\u001b[?1l\u001b>" - ], - [ - 6.3e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.002007, - "\u001b]2;git checkout kpod-test-refactor\u0007\u001b]1;git\u0007" - ], - [ - 0.048356, - "Switched to branch 'kpod-test-refactor'\r\n" - ], - [ - 0.001669, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.055687, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-test-refactor \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.000911, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 6.7e-05, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.2e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000112, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 4.9e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.1e-05, - "\u001b[?2004h" - ], - [ - 101.519318, - "v" - ], - [ - 0.095071, - "\bvi" - ], - [ - 0.079201, - " " - ], - [ - 1.258215, - "c" - ], - [ - 0.126693, - "m" - ], - [ - 0.116773, - "d\u001b[1m/\u001b[0m" - ], - [ - 0.846315, - "\b\u001b[0m/t" - ], - [ - 0.047782, - "e" - ], - [ - 0.357957, - "\b \b" - ], - [ - 0.134026, - "\b \b" - ], - [ - 0.180238, - "k" - ], - [ - 0.084009, - "pod\u001b[1m/\u001b[0m" - ], - [ - 1.056429, - "\b\u001b[0m \b" - ], - [ - 0.500154, - "\b \b" - ], - [ - 0.0301, - "\b \b" - ], - [ - 0.031128, - "\b \b" - ], - [ - 0.030599, - "\b \b" - ], - [ - 0.029396, - "\b \b" - ], - [ - 0.031795, - "\b \b" - ], - [ - 0.120498, - "\b \b" - ], - [ - 0.173821, - "\b \b" - ], - [ - 0.155303, - "t" - ], - [ - 0.046457, - "e" - ], - [ - 0.208794, - "st\u001b[1m/\u001b[0m" - ], - [ - 0.115379, - "\b\u001b[0m/k" - ], - [ - 0.204258, - "pod_" - ], - [ - 0.686373, - "p" - ], - [ - 0.067817, - "s" - ], - [ - 0.535881, - "\b \b" - ], - [ - 0.187935, - "u" - ], - [ - 0.08672, - "\u0007" - ], - [ - 0.000211, - "\r\r\n" - ], - [ - 6.1e-05, - "\u001b[J\u001b[0mkpod_pull.bats \u001b[Jkpod_push.bats\u001b[J\u001b[A\u001b[0m\u001b[27m\u001b[24m\u001b[39m\r\u001b[2Cvi test/kpod_pu\u001b[K\u001b[193C\u001b[90m\u001b[39m\u001b[39m\u001b[193D" - ], - [ - 0.347316, - "s" - ], - [ - 0.191815, - "h.bats\u001b[1m \u001b[0m" - ], - [ - 0.247116, - "\b\u001b[0m \b\u001b[?1l\u001b>" - ], - [ - 0.001036, - "\u001b[?2004l\r\r\n\u001b[J" - ], - [ - 0.001089, - "\u001b]2;vim test/kpod_push.bats\u0007" - ], - [ - 4.6e-05, - "\u001b]1;vi\u0007" - ], - [ - 0.251946, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.001597, - "\u001b[1;52r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[52;1H\"test/kpod_push.bats\"" - ], - [ - 0.000102, - " 87L, 2372C" - ], - [ - 0.003896, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H\u001b[>c" - ], - [ - 0.000853, - "\u001b[1;1H\u001b[96m\u001b[47m 1 \u001b[m\u001b[93m\u001b[107m\u001b[96m#!/usr/bin/env bats\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 2 \r\n 3 \u001b[m\u001b[93m\u001b[107mload helpers\r\n\u001b[96m\u001b[47m 4 \r\n 5 \u001b[m\u001b[93m\u001b[107mIMAGE=\u001b[36m\"alpine:latest\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 6 \u001b[m\u001b[93m\u001b[107mROOT=\u001b[36m\"$TESTDIR/crio\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 7 \u001b[m\u001b[93m\u001b[107mRUNROOT=\u001b[36m\"$TESTDIR/crio-run\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 8 \u001b[m\u001b[93m\u001b[107mKPOD_OPTIONS=\u001b[36m\"--root $ROOT --runroot $RUNROOT $STORAGE_OPTS\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 9 \r\n 10 \u001b[m\u001b[93m\u001b[107mfunction teardown() {\r\n\u001b[96m\u001b[47m 11 \u001b[m\u001b[93m\u001b[107m cleanup_test\r\n\u001b[96m\u001b[47m 12 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 13 \r\n 14 \u001b[m\u001b[93m\u001b[107m@test \u001b[36m\"kpod push to containers/storage\"\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 15 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 16 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 17 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 18 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m contai" - ], - [ - 3e-05, - "ners-storage:[$ROOT]busybox:test\r\n\u001b[96m\u001b[47m 19 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 20 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 21 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 22 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 23 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 24 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 25 \u001b[m\u001b[93m\u001b[107m stop_crio\r\n\u001b[96m\u001b[47m 26 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 27 \r\n 28 \u001b[m\u001b[93m\u001b[107m@test \u001b[36m\"kpod push to directory\"\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 29 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 30 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 31 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 32 \u001b[m\u001b[93m\u001b[107m run mkdir /tmp/busybox\r\n\u001b[96m\u001b[47m 33 \u001b[m\u001b[93m\u001b[107m echo " - ], - [ - 0.059183, - "\u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 34 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 35 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m dir:/tmp/busybox\r\n\u001b[96m\u001b[47m 36 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 37 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 38 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 39 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 40 \u001b[m\u001b[93m\u001b[107m rm -rf /tmp/busybox\r\n\u001b[96m\u001b[47m 41 \u001b[m\u001b[93m\u001b[107m stop_crio\r\n\u001b[96m\u001b[47m 42 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 43 \r\n 44 \u001b[m\u001b[93m\u001b[107m@test \u001b[36m\"kpod push to docker archive\"\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 45 \u001b[m\u001b[93m\u001b[107m run ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 46 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 47 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[96m\u001b[47m 48 \u001b[m\u001b[93m\u001b[107m run ${KP" - ], - [ - 4.1e-05, - "OD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m docker-archive:/tmp/busybox-archive:1.26\r\n\u001b[96m\u001b[47m 49 \u001b[m\u001b[93m\u001b[107m echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 50 \u001b[m\u001b[93m\u001b[107m [ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H kpod-test-refactor \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;33H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mtest/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mkpod_push.bats \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[51;55H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                                                                                                      \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;180H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m" - ], - [ - 0.013876, - "\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;188H\u001b[38;5;247m\u001b[48;5;236m conf\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  26%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 23\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5  \u001b[23;9H\u001b[?12l\u001b[?25h\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 4.816904, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[24;9H\u001b[1m\u001b[31m\u001b[106m[\u001b[17C]\u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  28%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[24;9H\u001b[?12l\u001b[?25h" - ], - [ - 4.011791, - "\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.843663, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m[ \u001b[16C]\u001b[51;195H\u001b[38;5;107m\u001b[48;5;240m  26%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[23;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.530257, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\b\b\b\u001b[7m\u001b[96m\u001b[107m \u001b[m\u001b[93m\u001b[107mr\u001b[7m\u001b[96m\u001b[107mun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[96m\u001b[107m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[96m\u001b[107m " - ], - [ - 0.005375, - "\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[34m-- VISUAL LINE --\u001b[m\u001b[93m\u001b[107m\u001b[52;18H\u001b[K\u001b[51;1H\u001b[1m\u001b[38;5;94m\u001b[48;5;214m V·\u001b[51;4HLINE \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;214m\u001b[48;5;94m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;214m\u001b[48;5;94m⇕1 \u001b[m\u001b[93m\u001b[107m\u001b[38;5;94m\u001b[48;5;240m\u001b[51;15H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;17H kpod-test-refactor \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;38H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mtest/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mp\bkpod_push.bats \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[51;60H \u001b[23;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.187201, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[96m\u001b[107mr\u001b[24;5H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[31m\u001b[106m[\u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[96m\u001b[107m \u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[96m\u001b[107m\"$status\"\u001b[m\u001b[93m\u001b[107m\u001b[7m\u001b[96m\u001b[107m -eq 0 ] \u001b[m\u001b[93m\u001b[107m\u001b[51;12H\u001b[1m\u001b[38;5;214m\u001b[48;5;94m2 \u001b[m\u001b[93m\u001b[107m\u001b[181C\u001b[38;5;107m\u001b[48;5;240m  28%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[24;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.311219, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[23;5H stop_crio\u001b[23;18H\u001b[K\u001b[24;5H}\u001b[24;6H\u001b[K\u001b[25;9H\u001b[K\u001b[26;5H@test \u001b[36m\"kpod push to directory\"\u001b[m\u001b[93m\u001b[107m {\u001b[27;9Hrun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[28;5H echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[28;23H\u001b[K\u001b[29;9H[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[29;28H\u001b[K\u001b[30;9Hrun mkdir /tmp/busybox\u001b[31;9Hecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[31;23H\u001b[K\u001b[32;9H[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[32;28H\u001b[K\u001b[33;9Hrun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m dir:/tmp/busybox\u001b[34;9Hecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[34;23H\u001b[K\u001b[35;9H[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[35;28H\u001b[K\u001b[36;9Hrun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[38;10Hm -rf /tmp/busybox\u001b[38;28H\u001b[K\u001b[39;9Hstop_crio\u001b[39;18H\u001b[K\u001b[40;5H}\u001b[40;9H\u001b[K\u001b[41;9H\u001b[K\u001b[42;5H@test \u001b[36m\"kpod push to docker archive\"\u001b[m\u001b[93m\u001b[107m {\u001b[43;9Hrun ${KPOD_BINARY} $KPOD_OPTIONS pull \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\u001b[44;5H echo \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[44;23H\u001b[K\u001b[45;9H[ \u001b[36m\"$sta" - ], - [ - 6.1e-05, - "tus\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[45;28H\u001b[K\u001b[46;9Hrun ${KPOD_BINARY} $KPOD_OPTIONS push \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m docker-archive:/tmp/busybox-archive:1.26\u001b[47;9Hecho \u001b[36m\"$output\"\u001b[m\u001b[93m\u001b[107m\u001b[47;23H\u001b[K\u001b[48;9H[ \u001b[36m\"$status\"\u001b[m\u001b[93m\u001b[107m -eq 0 ]\u001b[48;28H\u001b[K\u001b[49;9Hrm /tmp/busybox-archive\u001b[50;9Hrun ${KPOD_BINARY} $KPOD_OPTIONS rmi \u001b[36m\"$IMAGE\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;214m\u001b[48;5;94m\u001b[m\u001b[93m\u001b[107m\u001b[51;9H\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H kpod-test-refactor \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;33H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mtest/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mkpod_push.bats.\u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[38;5;220m\u001b[48;5;240m + \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mt\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;240m\u001b[48;5;236m\u001b[51;57H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;231m\u001b[48;5;236m   \u001b[m\u001b[93m\u001b[107m\u001b[134C\u001b[38;5;107m\u001b[48;5;240m  27%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m" - ], - [ - 0.003283, - "\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\u001b[K\u001b[23;9H\u001b[?12l\u001b[?25h" - ], - [ - 4.012199, - "\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 2.525173, - "\u001b[?25l\u001b[52;1H:" - ], - [ - 3.9e-05, - "\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.585401, - "w\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.118422, - "q\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 8.69039, - "\r\u001b[?25l\u001b[?2004l\"test/kpod_push.bats\"" - ], - [ - 0.005802, - " 85L, 2298C written" - ], - [ - 0.01652, - "\r\r\r\n\u001b[39;49m" - ], - [ - 0.000114, - "\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.00281, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.044965, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-test-refactor* \u001b[39m \u001b[33m27s\u001b[39m\r\n" - ], - [ - 0.004489, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000232, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 9.4e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000151, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m " - ], - [ - 5.2e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 4.3e-05, - "\u001b[?1h\u001b=" - ], - [ - 3e-05, - "\u001b[?2004h" - ], - [ - 1.0948, - "g" - ], - [ - 0.142791, - "\bgi" - ], - [ - 0.093165, - "t" - ], - [ - 0.104881, - " " - ], - [ - 0.146445, - "c" - ], - [ - 0.080499, - "o" - ], - [ - 0.116396, - "m" - ], - [ - 0.149451, - "m" - ], - [ - 0.126645, - "i" - ], - [ - 0.124885, - "t" - ], - [ - 0.057566, - " " - ], - [ - 0.196291, - "-" - ], - [ - 0.162575, - "a" - ], - [ - 0.097583, - " " - ], - [ - 0.118011, - "-" - ], - [ - 0.149342, - "-" - ], - [ - 0.046139, - "a" - ], - [ - 0.16449, - "m" - ], - [ - 0.100832, - "e" - ], - [ - 0.454585, - "n" - ], - [ - 0.157844, - "d" - ], - [ - 0.128767, - "\u001b[?1l\u001b>" - ], - [ - 6.4e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.002817, - "\u001b]2;git commit -a --amend\u0007\u001b]1;git\u0007" - ], - [ - 0.030281, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.003594, - "\u001b[1;52r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[H\u001b[2J\u001b[?25l\u001b[52;1H\"~/Development/Go/src/github.com/kubernetes-incubator/cri-o/.git/COMMIT_EDITMSG\"" - ], - [ - 0.000205, - " 24L, 716C" - ], - [ - 0.000426, - "\u001b[1;1HRefactor kpod tests\r\n\r\nMove kpod tests from kpod.bats to kpod_[commandname].bats\r\n\r\nSigned-off-by: Ryan Cole \r\n\r\n# Please enter the commit message for your changes. Lines starting\r\n# with '#' will be ignored, and an empty message aborts the commit.\r\n#\r\n# Date: Mon Aug 14 09:15:22 2017 -0400\r\n#\r\n# On branch kpod-test-refactor\r\n# Changes to be committed:\r\n#\u001b[7Cdeleted: test/kpod.bats\r\n#\u001b[7Cmodified: test/kpod_diff.bats\r\n#\u001b[7Cnew file: test/kpod_history.bats\r\n#\u001b[7Cnew file: test/kpod_images.bats\r\n#\u001b[7Cnew file: test/kpod_inspect.bats\r\n#\u001b[7Cmodified: test/kpod_load.bats\r\n#\u001b[7Cnew file: test/kpod_pull.bats\r\n#\u001b[7Cnew file: test/kpod_push.bats\r\n#\u001b[7Cmodified: test/kpod_save.bats\r\n#\u001b[7Cnew file: test/kpod_version.bats\r\n#\r\n\u001b[94m~ \u001b[26;1H~ " - ], - [ - 3e-05, - " \u001b[27;1H~ \u001b[28;1H~ \u001b[29;1H~ \u001b[30;1H~ " - ], - [ - 0.000148, - " \u001b[31;1H~ \u001b[32;1H~ \u001b[33;1H~ \u001b[34;1H~ \u001b[35;1H~ " - ], - [ - 2.2e-05, - " \u001b[36;1H~ \u001b[37;1H~ \u001b[38;1H~ \u001b[39;1H~ \u001b[40;1H~ " - ], - [ - 0.000582, - " \u001b[41;1H~ \u001b[42;1H~ \u001b[43;1H~ \u001b[44;1H~ " - ], - [ - 3e-05, - " \u001b[45;1H~ \u001b[46;1H~ \u001b[47;1H~ \u001b[48;1H~ \u001b[49;1H~ " - ], - [ - 0.000162, - " \u001b[50;1H~ \u001b[51;1H~ \u001b[1;1H\u001b[?12l\u001b[?25h" - ], - [ - 0.276849, - "\u001b[?25l\u001b[m\u001b[52;1H\u001b[K\u001b[52;1H:" - ], - [ - 5e-05, - "\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.161861, - "w" - ], - [ - 0.062363, - "q" - ], - [ - 0.113128, - "\r" - ], - [ - 7e-05, - "\u001b[?25l\u001b[?2004l\".git/COMMIT_EDITMSG\"" - ], - [ - 0.016122, - " 24L, 716C written\r\r\r\n\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.001866, - "[kpod-test-refactor 9f5954a6] Refactor kpod tests\r\n Date: Mon Aug 14 09:15:22 2017 -0400\r\n 10 files changed, 333 insertions(+), 253 deletions(-)\r\n delete mode 100644 test/kpod.bats\r\n create mode 100644 test/kpod_history.bats\r\n create mode 100644 test/kpod_images.bats\r\n create mode 100644 test/kpod_inspect.bats\r\n create mode 100644 test/kpod_pull.bats\r\n create mode 100644 test/kpod_push.bats\r\n create mode 100644 test/kpod_version.bats\r\n\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.046977, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-test-refactor \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001287, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000166, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000157, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m " - ], - [ - 2.7e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 0.000266, - "\u001b[?1h\u001b=" - ], - [ - 2.4e-05, - "\u001b[?2004h" - ], - [ - 0.08068, - "g" - ], - [ - 0.127014, - "\bgi" - ], - [ - 0.077769, - "t" - ], - [ - 0.07119, - " " - ], - [ - 0.125899, - "p" - ], - [ - 0.0933, - "u" - ], - [ - 0.107051, - "s" - ], - [ - 0.103696, - "h" - ], - [ - 0.079917, - " " - ], - [ - 0.173889, - "-" - ], - [ - 0.115307, - "f" - ], - [ - 0.080793, - " " - ], - [ - 0.077616, - "o" - ], - [ - 0.131483, - "r" - ], - [ - 0.1108, - "i" - ], - [ - 0.164739, - "g" - ], - [ - 0.119456, - "i" - ], - [ - 0.102232, - "n" - ], - [ - 0.064044, - " " - ], - [ - 0.163385, - "k" - ], - [ - 0.063896, - "pod-" - ], - [ - 0.226923, - "t" - ], - [ - 0.070106, - "e" - ], - [ - 0.236851, - "st-refactor\u001b[1m \u001b[0m" - ], - [ - 0.608419, - "\b\u001b[0m \b" - ], - [ - 5.6e-05, - "\u001b[?1l\u001b>" - ], - [ - 4.9e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.002783, - "\u001b]2;git push -f origin kpod-test-refactor\u0007\u001b]1;git\u0007" - ], - [ - 0.779856, - "Counting objects: 12, done.\r\n" - ], - [ - 0.000105, - "Delta compression using up to 4 threads.\r\n" - ], - [ - 9.5e-05, - "Compressing objects: 8% (1/12) \rCompressing objects: 16% (2/12) \r" - ], - [ - 0.000129, - "Compressing objects: 25% (3/12) \r" - ], - [ - 0.00012, - "Compressing objects: 33% (4/12) \r" - ], - [ - 1.9e-05, - "Compressing objects: 41% (5/12) \r" - ], - [ - 4.6e-05, - "Compressing objects: 50% (6/12) \r" - ], - [ - 0.000177, - "Compressing objects: 58% (7/12) \rCompressing objects: 66% (8/12) \r" - ], - [ - 0.000199, - "Compressing objects: 75% (9/12) \r" - ], - [ - 3.8e-05, - "Compressing objects: 83% (10/12) \r" - ], - [ - 5.6e-05, - "Compressing objects: 91% (11/12) \r" - ], - [ - 5e-05, - "Compressing objects: 100% (12/12) \r" - ], - [ - 3.7e-05, - "Compressing objects: 100% (12/12), done.\r\n" - ], - [ - 0.000272, - "Writing objects: 8% (1/12) \rWriting objects: 16% (2/12) \rWriting objects: 25% (3/12) \r" - ], - [ - 2.8e-05, - "Writing objects: 33% (4/12) \r" - ], - [ - 0.0001, - "Writing objects: 41% (5/12) \r" - ], - [ - 0.00016, - "Writing objects: 58% (7/12) \r" - ], - [ - 4e-05, - "Writing objects: 66% (8/12) \r" - ], - [ - 6.7e-05, - "Writing objects: 75% (9/12) \r" - ], - [ - 0.000162, - "Writing objects: 83% (10/12) \r" - ], - [ - 3.9e-05, - "Writing objects: 91% (11/12) \r" - ], - [ - 4.4e-05, - "Writing objects: 100% (12/12) \r" - ], - [ - 5.8e-05, - "Writing objects: 100% (12/12), 2.56 KiB | 2.56 MiB/s, done.\r\n" - ], - [ - 3e-05, - "Total 12 (delta 9), reused 0 (delta 0)\r\n" - ], - [ - 0.054483, - "remote: Resolving deltas: 0% (0/9) \u001b[K\r" - ], - [ - 0.038253, - "remote: Resolving deltas: 22% (2/9) \u001b[K\rremote: Resolving deltas: 44% (4/9) \u001b[K\rremote: Resolving deltas: 55% (5/9) \u001b[K\rremote: Resolving deltas: 66% (6/9) \u001b[K\rremote: Resolving deltas: 77% (7/9) \u001b[K\rremote: Resolving deltas: 88% (8/9) \u001b[K\rremote: Resolving deltas: 100% (9/9) \u001b[K\rremote: Resolving deltas: 100% (9/9), completed with 5 local objects.\u001b[K\r\n" - ], - [ - 1.340424, - "To github.com:14rcole/cri-o\r\n + 72c6c49b...9f5954a6 kpod-test-refactor -> kpod-test-refactor" - ], - [ - 6.1e-05, - " (forced update)\r\n" - ], - [ - 0.00145, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.03447, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/kpod-test-refactor \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.001176, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000105, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 6.4e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 6.2e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m " - ], - [ - 4e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 0.000267, - "\u001b[?1h\u001b=" - ], - [ - 1.9e-05, - "\u001b[?2004h" - ], - [ - 0.606748, - "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 1186.178261, - "g" - ], - [ - 0.102859, - "\bgi" - ], - [ - 0.126056, - "t" - ], - [ - 0.086902, - " " - ], - [ - 0.763198, - "c" - ], - [ - 0.110654, - "h" - ], - [ - 0.062485, - "e" - ], - [ - 0.087974, - "c" - ], - [ - 0.045368, - "k" - ], - [ - 0.149436, - "o" - ], - [ - 0.070017, - "u" - ], - [ - 0.062669, - "t" - ], - [ - 0.109796, - " " - ], - [ - 0.164267, - "m" - ], - [ - 0.26327, - "aster\u001b[1m \u001b[0m" - ], - [ - 0.456115, - "\b\u001b[0m \b" - ], - [ - 2.9e-05, - "\u001b[?1l\u001b>" - ], - [ - 0.000106, - "\u001b[?2004l\r\r\n" - ], - [ - 0.005237, - "\u001b]2;git checkout master\u0007\u001b]1;git\u0007" - ], - [ - 0.070788, - "Switched to branch 'master'\r\n" - ], - [ - 0.000203, - "Your branch is up-to-date with 'origin/master'.\r\n" - ], - [ - 0.000797, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.074676, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.002717, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.32787, - "g" - ], - [ - 0.126467, - "\bgi" - ], - [ - 0.072925, - "t" - ], - [ - 0.076466, - " " - ], - [ - 0.102271, - "p" - ], - [ - 0.068608, - "u" - ], - [ - 0.213672, - "l" - ], - [ - 0.142438, - "l" - ], - [ - 0.102593, - " " - ], - [ - 0.126466, - "u" - ], - [ - 0.110638, - "p" - ], - [ - 0.175053, - "stream\u001b[1m \u001b[0m" - ], - [ - 0.338118, - "\b\u001b[0m m" - ], - [ - 0.11582, - "a" - ], - [ - 0.071538, - "s" - ], - [ - 0.203225, - "ter\u001b[1m:\u001b[0m" - ], - [ - 0.396247, - "\b\u001b[0m \b\u001b[?1l\u001b>\u001b[?2004l\r\r\n" - ], - [ - 0.003149, - "\u001b]2;git pull upstream master\u0007" - ], - [ - 0.000119, - "\u001b]1;git\u0007" - ], - [ - 1.611391, - "remote: Counting objects: 1, done.\u001b[K\r\n" - ], - [ - 0.000939, - "remote: Total 1 (delta 0), reused 1 (delta 0), pack-reused 0\u001b[K\r\n" - ], - [ - 0.00237, - "Unpacking objects: 100% (1/1) \r" - ], - [ - 9.3e-05, - "Unpacking objects: 100% (1/1), done.\r\n" - ], - [ - 0.096361, - "From github.com:kubernetes-incubator/cri-o" - ], - [ - 0.000156, - "\r\n" - ], - [ - 8.9e-05, - " * branch master -> FETCH_HEAD" - ], - [ - 7.3e-05, - "\r\n" - ], - [ - 0.000902, - " 6ca462a3..8c496a10 master -> upstream/master" - ], - [ - 0.000108, - "\r\n" - ], - [ - 0.013153, - "Updating 6ca462a3..8c496a10" - ], - [ - 0.000529, - "\r\n" - ], - [ - 0.035506, - "Fast-forward" - ], - [ - 5.4e-05, - "\r\n" - ], - [ - 0.006117, - " cmd/kpod/common.go | 8 \u001b[32m++\u001b[m" - ], - [ - 5.2e-05, - "\r\n" - ], - [ - 4.4e-05, - " cmd/kpod/formats/formats.go | 23 \u001b[32m+++\u001b[m\u001b[31m-\u001b[m" - ], - [ - 3.6e-05, - "\r\n" - ], - [ - 3.8e-05, - " cmd/kpod/formats/templates.go | 78 \u001b[32m++++++++++++\u001b[m" - ], - [ - 3.3e-05, - "\r\n" - ], - [ - 3.9e-05, - " cmd/kpod/images.go | 126 \u001b[32m+++++++++\u001b[m\u001b[31m----------\u001b[m" - ], - [ - 3.5e-05, - "\r\n" - ], - [ - 3.9e-05, - " vendor.conf | 1 \u001b[32m+\u001b[m" - ], - [ - 3.3e-05, - "\r\n" - ], - [ - 4.4e-05, - " vendor/github.com/Microsoft/hcsshim/mksyscall_windows.go | 934 \u001b[31m---------------------------------------------------------------------------------------------------------------------------------------\u001b[m" - ], - [ - 3.5e-05, - "\r\n" - ], - [ - 3.7e-05, - " vendor/github.com/containers/storage/pkg/archive/example_changes.go | 97 \u001b[31m--------------\u001b[m" - ], - [ - 3e-05, - "\r\n" - ], - [ - 3.5e-05, - " vendor/github.com/fatih/camelcase/LICENSE.md | 20 \u001b[32m+++\u001b[m" - ], - [ - 3e-05, - "\r\n" - ], - [ - 3.6e-05, - " vendor/github.com/fatih/camelcase/README.md | 58 \u001b[32m+++++++++\u001b[m" - ], - [ - 3e-05, - "\r\n" - ], - [ - 4.2e-05, - " vendor/github.com/fatih/camelcase/camelcase.go | 90 \u001b[32m+++++++++++++\u001b[m" - ], - [ - 3.3e-05, - "\r\n" - ], - [ - 3.8e-05, - " 10 files changed, 331 insertions(+), 1104 deletions(-)" - ], - [ - 3e-05, - "\r\n" - ], - [ - 3.8e-05, - " create mode 100644 cmd/kpod/formats/templates.go" - ], - [ - 2.8e-05, - "\r\n" - ], - [ - 3.5e-05, - " delete mode 100644 vendor/github.com/Microsoft/hcsshim/mksyscall_windows.go" - ], - [ - 3.1e-05, - "\r\n" - ], - [ - 3.2e-05, - " delete mode 100644 vendor/github.com/containers/storage/pkg/archive/example_changes.go" - ], - [ - 2.6e-05, - "\r\n" - ], - [ - 3.1e-05, - " create mode 100644 vendor/github.com/fatih/camelcase/LICENSE.md" - ], - [ - 2.7e-05, - "\r\n" - ], - [ - 3.1e-05, - " create mode 100644 vendor/github.com/fatih/camelcase/README.md" - ], - [ - 2.7e-05, - "\r\n" - ], - [ - 3.3e-05, - " create mode 100644 vendor/github.com/fatih/camelcase/camelcase.go" - ], - [ - 2.7e-05, - "\r\n" - ], - [ - 0.000942, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.058415, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master \u001b[39m \u001b[33m\u001b[39m\r\n" - ], - [ - 0.00259, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.00032, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000152, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 0.000223, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m " - ], - [ - 8.5e-05, - "\u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 0.000154, - "\u001b[?1h\u001b=" - ], - [ - 0.000119, - "\u001b[?2004h" - ], - [ - 29.505715, - "v" - ], - [ - 0.127766, - "\bvi" - ], - [ - 0.118693, - " " - ], - [ - 0.402967, - "c" - ], - [ - 0.134732, - "m" - ], - [ - 0.171696, - "d\u001b[1m/\u001b[0m" - ], - [ - 0.082566, - "\b\u001b[0m/k" - ], - [ - 0.141218, - "pod\u001b[1m/\u001b[0m" - ], - [ - 0.41599, - "\b\u001b[0m/i" - ], - [ - 0.051368, - "m" - ], - [ - 0.088439, - "a" - ], - [ - 0.170485, - "ges.go\u001b[1m \u001b[0m" - ], - [ - 0.319745, - "\b\u001b[0m \b" - ], - [ - 7.2e-05, - "\u001b[?1l\u001b>" - ], - [ - 4.7e-05, - "\u001b[?2004l\r" - ], - [ - 0.000136, - "\r\n" - ], - [ - 0.003148, - "\u001b]2;vim cmd/kpod/images.go\u0007\u001b]1;vi\u0007" - ], - [ - 0.330583, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000904, - "\u001b[1;54r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[54;1H\"cmd/kpod/images.go\"" - ], - [ - 8.4e-05, - " 203L, 4796C" - ], - [ - 0.019404, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H\u001b[>c" - ], - [ - 0.012968, - "\u001b[1;1H\u001b[96m\u001b[47m 98 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 99 \u001b[m\u001b[93m\u001b[107m } \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m100 \u001b[m\u001b[93m\u001b[107m\u001b[8Cparams = \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m101 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m102 \r\n103 \u001b[m\u001b[93m\u001b[107m imageList, err := libkpodimage.GetImagesMatchingFilter(store, params, name)\r\n\u001b[96m\u001b[47m104 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m105 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"could not get list of images matching filter\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m106 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m107 \r\n108 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m outputImages(store, imageList, truncate, digests, quiet, outputFormat, noheading)\r\n\u001b[96m\u001b[47m109 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m110 \r\n111 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m genImagesFormat(quiet, truncate, digests \u001b[33mbool\u001b[m\u001b[93m\u001b[107m) (format \u001b[33mstring\u001b[m\u001b[93m\u001b[107m) {\r\n\u001b[96m\u001b[47m112 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m quiet {\r\n\u001b[96m\u001b[47m113 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mr" - ], - [ - 4e-05, - "eturn\u001b[m\u001b[93m\u001b[107m \u001b[36m\"{{.ID}}\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m114 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m115 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m truncate {\r\n\u001b[96m\u001b[47m116 \u001b[m\u001b[93m\u001b[107m\u001b[8Cformat = \u001b[36m\"table {{ .ID | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-20.12s\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m }} \"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m117 \u001b[m\u001b[93m\u001b[107m } \u001b[32melse\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m118 \u001b[m\u001b[93m\u001b[107m\u001b[8Cformat = \u001b[36m\"table {{ .ID | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-64s\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m }} \"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m119 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m120 \u001b[m\u001b[93m\u001b[107m format += \u001b[36m\"{{ .Name | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-56s\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m }} \"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m121 \r\n122 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m digests {\r\n\u001b[96m\u001b[47m123 \u001b[m\u001b[93m\u001b[107m\u001b[8Cformat += \u001b[36m\"{{ .Digest | printf \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-71s\u001b[m\u001b[93m\u001b[107m\u001b[36m \u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m}} \"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m124 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m125 \r\n126 \u001b[m\u001b[93m\u001b[107m format += \u001b[36m\"{{ .CreatedAt | printf " - ], - [ - 0.073924, - "\u001b[m\u001b[93m\u001b[107m\u001b[31m\\\"%-22s\\\"\u001b[m\u001b[93m\u001b[107m\u001b[36m }} {{.Size}}\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m127 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m128 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m129 \r\n130 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m outputImages(store storage.Store, images []storage.Image, truncate, digests, quiet \u001b[33mbool\u001b[m\u001b[93m\u001b[107m, outputFormat \u001b[33mstring\u001b[m\u001b[93m\u001b[107m, noheading \u001b[33mbool\u001b[m\u001b[93m\u001b[107m) \u001b[33merror\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m131 \u001b[m\u001b[93m\u001b[107m imageOutput := []imageOutputParams{}\r\n\u001b[96m\u001b[47m132 \r\n133 \u001b[m\u001b[93m\u001b[107m lastID := \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m134 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, img := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m images {\r\n\u001b[96m\u001b[47m135 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m quiet && lastID == img.ID {\r\n\u001b[96m\u001b[47m136 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mcontinue\u001b[m\u001b[93m\u001b[107m \u001b[96m// quiet should not show the same ID multiple times\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m137 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m138 \u001b[m\u001b[93m\u001b[107m\u001b[8CcreatedTime := img.Created\r\n\u001b[96m\u001b[47m139 \r\n140 \u001b[m\u001b[93m\u001b[107m\u001b[" - ], - [ - 4e-05, - "8Cname := \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m141 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(img.Names) > \u001b[36m0\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m142 \u001b[m\u001b[93m\u001b[107m\u001b[12Cname = img.Names[\u001b[36m0\u001b[m\u001b[93m\u001b[107m]\r\n\u001b[96m\u001b[47m143 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m144 \r\n145 \u001b[m\u001b[93m\u001b[107m\u001b[8Cinfo, imageDigest, size, _ := libkpodimage.InfoAndDigestAndSize(store, img)\r\n\u001b[96m\u001b[47m146 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m info != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m147 \u001b[m\u001b[93m\u001b[107m\u001b[12CcreatedTime = info.Created\r\n\u001b[96m\u001b[47m148 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m149 \u001b[m\u001b[93m\u001b[107m\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[53;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[53;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mimages.go \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[53;42H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                         " - ], - [ - 0.028403, - "                                                                                                            \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  61%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m123\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9  \u001b[26;13H\u001b[?12l\u001b[?25h" - ], - [ - 3.8e-05, - "\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 2.1862, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  60%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[25;13H\u001b[?12l\u001b[?25h" - ], - [ - 4.025378, - "\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 34.053856, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  61%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[26;13H\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[25;20H\u001b[1m\u001b[31m\u001b[106m{\u001b[27;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[27;9H\u001b[?12l\u001b[?25h\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[25;20H{\u001b[27;9H}\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  62%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[28;5H\u001b[?12l\u001b[?25h\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[29;13H\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  63%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[30;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.081812, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[14;73H\u001b[1m\u001b[31m\u001b[106m{\u001b[31;5H}\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[31;5H\u001b[?12l\u001b[?25h\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[14;73H{\u001b[31;5H}\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  64%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[32;5H\u001b[?12l\u001b[?25h\u001b[m\u001b[93m\u001b[107m\u001b[53;206H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m30\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[33;13H\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  65%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[34;13H\u001b[?12l\u001b[?25h\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[35;5H\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  66%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[36;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.035045, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[37;13H\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  67%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[38;13H\u001b[?12l\u001b[?25h\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:12\u001b[39;16H\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[38;42H\u001b[1m\u001b[31m\u001b[106m{\u001b[40;13H}\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9 \u001b[40;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.014251, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[38;42H{\u001b[40;13H}\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  68%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[41;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.035294, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[42;5H" - ], - [ - 3.803564, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[41;13H" - ], - [ - 0.502126, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[38;42H\u001b[1m\u001b[31m\u001b[106m{\u001b[40;13H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  67%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[40;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.039219, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[38;42H{\u001b[40;13H}\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:12\u001b[39;16H\u001b[?12l\u001b[?25h" - ], - [ - 0.022715, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9 \u001b[38;13H" - ], - [ - 0.030883, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  66%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[37;13H" - ], - [ - 0.032199, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[36;13H" - ], - [ - 0.028523, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  65%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[35;5H" - ], - [ - 0.031179, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[34;13H" - ], - [ - 0.032779, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  64%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m0\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[33;13H" - ], - [ - 0.028555, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;206H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m29\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[32;5H" - ], - [ - 0.048269, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[14;73H\u001b[1m\u001b[31m\u001b[106m{\u001b[31;5H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  63%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[31;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.019915, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[14;73H{\u001b[31;5H}\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[30;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.028641, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  62%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[29;13H" - ], - [ - 0.027012, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[28;5H" - ], - [ - 0.033581, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[25;20H\u001b[1m\u001b[31m\u001b[106m{\u001b[27;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  61%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[27;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.02925, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[25;20H{\u001b[27;9H}\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[26;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.030751, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  60%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[25;13H" - ], - [ - 0.031339, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[24;5H" - ], - [ - 0.041524, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  59%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m0\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[23;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.022427, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[20;16H\u001b[1m\u001b[31m\u001b[106m{\u001b[22;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;206H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m19\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[22;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.033264, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[20;16H{\u001b[22;9H}\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  58%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[21;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.023387, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[20;13H" - ], - [ - 0.037125, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  57%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[19;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.026419, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[18;13H" - ], - [ - 0.040842, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[15;18H\u001b[1m\u001b[31m\u001b[106m{\u001b[17;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  56%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[17;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.023205, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[15;18H{\u001b[17;9H}\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[16;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.033995, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  55%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[15;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.023807, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[14;13H" - ], - [ - 0.037724, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  54%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m0\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[13;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.028157, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;206H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m09\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[12;5H" - ], - [ - 0.035934, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  53%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[11;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.027185, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[10;5H" - ], - [ - 0.036538, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[7;23H\u001b[1m\u001b[31m\u001b[106m{\u001b[9;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  52%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[9;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.029736, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[7;23H{\u001b[9;9H}\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[8;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.036535, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  51%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[7;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.023374, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[6;13H" - ], - [ - 0.033091, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  50%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[5;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.025945, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[2;16H\u001b[1m\u001b[31m\u001b[106m{\u001b[4;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[4;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.041382, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[1;1H\u001b[L\u001b[1;54r\u001b[1;1H\u001b[96m\u001b[47m 97 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"error parsing filter\"\u001b[m\u001b[93m\u001b[107m)\u001b[3;16H{\u001b[5;9H}\u001b[54;1H\u001b[K\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  49%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m0\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9\u001b[4;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.030519, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[1;1H\u001b[L\u001b[1;54r\u001b[1;1H\u001b[96m\u001b[47m 96 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[53;205H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 99\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.048667, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[1;1H\u001b[L\u001b[1;54r\u001b[1;1H\u001b[96m\u001b[47m 95 \u001b[m\u001b[93m\u001b[107m\u001b[8Cparams, err = libkpodimage.ParseFilter(store, c.String(\u001b[36m\"filter\"\u001b[m\u001b[93m\u001b[107m))\u001b[2;27H\u001b[1m\u001b[31m\u001b[106m{\u001b[4;13H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  48%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.028735, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[1;1H\u001b[L\u001b[1;54r\u001b[1;1H\u001b[96m\u001b[47m 94 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m c.IsSet(\u001b[36m\"filter\"\u001b[m\u001b[93m\u001b[107m) {\u001b[3;27H{\u001b[5;13H}\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:12\u001b[4;16H\u001b[?12l\u001b[?25h" - ], - [ - 0.048253, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[1;1H\u001b[L\u001b[1;54r\u001b[1;1H\u001b[96m\u001b[47m 93 \u001b[m\u001b[93m\u001b[107m \u001b[32mvar\u001b[m\u001b[93m\u001b[107m params *libkpodimage.FilterParams\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  47%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9 \u001b[4;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.011542, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[1;1H\u001b[L\u001b[1;54r\u001b[1;1H\u001b[96m\u001b[47m 92 \u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.035746, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[1;1H\u001b[L\u001b[1;54r\u001b[1;1H\u001b[96m\u001b[47m 91 \u001b[m\u001b[93m\u001b[107m }\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  46%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.039133, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[1;1H\u001b[L\u001b[1;54r\u001b[1;1H\u001b[96m\u001b[47m 90 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.New(\u001b[36m\"'kpod images' requires at most 1 argument\"\u001b[m\u001b[93m\u001b[107m)\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[4;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.033562, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[1;1H\u001b[L\u001b[1;54r\u001b[1;1H\u001b[96m\u001b[47m 89 \u001b[m\u001b[93m\u001b[107m } \u001b[32melse\u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(c.Args()) > \u001b[36m1\u001b[m\u001b[93m\u001b[107m {\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  45%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[4;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.423507, - "\u001b[?25l\u001b[54;1H\u001b[m\u001b[93m\u001b[107m/" - ], - [ - 8.6e-05, - "\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.351895, - "h\u001b[?25l" - ], - [ - 0.0106, - "\u001b[15;53H\u001b[7m\u001b[91mh\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[53;2H\u001b[1m\u001b[38;5;22m\u001b[48;5;148mCOMMND \u001b[m\u001b[93m\u001b[107m\u001b[186C\u001b[38;5;107m\u001b[48;5;240m  51%\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m103\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:49\r\n\u001b[m\u001b[93m\u001b[107m/h" - ], - [ - 6e-05, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.063442, - "e" - ], - [ - 0.000104, - "\u001b[?25l" - ], - [ - 0.012164, - "\u001b[15;53Hh\u001b[20;89H\u001b[7m\u001b[91mhe\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  53%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:85\r\n\u001b[m\u001b[93m\u001b[107m/he" - ], - [ - 0.000532, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.072256, - "a" - ], - [ - 7.1e-05, - "\u001b[?25l" - ], - [ - 0.00992, - "\u001b[20;91H\u001b[7m\u001b[91ma\u001b[54;5H" - ], - [ - 0.001459, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.162629, - "\u001b[27m\u001b[m\u001b[93m\u001b[107md" - ], - [ - 8.2e-05, - "\u001b[?25l" - ], - [ - 0.009968, - "\u001b[20;92H\u001b[7m\u001b[91md\u001b[54;6H" - ], - [ - 0.00011, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.147673, - "\u001b[27m\u001b[m\u001b[93m\u001b[107me\u001b[?25l" - ], - [ - 0.013264, - "\u001b[1;52r\u001b[1;1H\u001b[29M\u001b[1;54r\u001b[24;1H\u001b[96m\u001b[47m141 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(img.Names) > \u001b[36m0\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m142 \u001b[m\u001b[93m\u001b[107m\u001b[12Cname = img.Names[\u001b[36m0\u001b[m\u001b[93m\u001b[107m]\r\n\u001b[96m\u001b[47m143 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m144 \r\n145 \u001b[m\u001b[93m\u001b[107m\u001b[8Cinfo, imageDigest, size, _ := libkpodimage.InfoAndDigestAndSize(store, img)\r\n\u001b[96m\u001b[47m146 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m info != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m147 \u001b[m\u001b[93m\u001b[107m\u001b[12CcreatedTime = info.Created\r\n\u001b[96m\u001b[47m148 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m149 \r\n150 \u001b[m\u001b[93m\u001b[107m\u001b[8Cparams := imageOutputParams{\r\n\u001b[96m\u001b[47m151 \u001b[m\u001b[93m\u001b[107m\u001b[12CID:\u001b[8Cimg.ID,\r\n\u001b[96m\u001b[47m152 \u001b[m\u001b[93m\u001b[107m\u001b[12CName: name,\r\n\u001b[96m\u001b[47m153 \u001b[m\u001b[93m\u001b[107m\u001b[12CDigest: imageDigest,\r\n\u001b[96m\u001b[47m154 \u001b[m\u001b[93m\u001b[107m\u001b[12CCreatedAt: createdTime.Format(\u001b[36m\"Jan 2, 2006 15:04\"\u001b[m\u001b[93m\u001b[107m),\r\n\u001b[96m\u001b[47m155 \u001b[m\u001b[93m\u001b[107m\u001b[12CSize: libkpodimage.FormattedSize(size),\r\n\u001b[96m\u001b[47m156 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m157 \u001b[m\u001b[93m\u001b[10" - ], - [ - 6.2e-05, - "7m\u001b[8CimageOutput = \u001b[32mappend\u001b[m\u001b[93m\u001b[107m(imageOutput, params)\r\n\u001b[96m\u001b[47m158 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m159 \r\n160 \u001b[m\u001b[93m\u001b[107m \u001b[32mvar\u001b[m\u001b[93m\u001b[107m out formats.Writer\r\n\u001b[96m\u001b[47m161 \r\n162 \u001b[m\u001b[93m\u001b[107m \u001b[32mswitch\u001b[m\u001b[93m\u001b[107m outputFormat {\r\n\u001b[96m\u001b[47m163 \u001b[m\u001b[93m\u001b[107m \u001b[32mcase\u001b[m\u001b[93m\u001b[107m \u001b[36m\"json\"\u001b[m\u001b[93m\u001b[107m:\r\n\u001b[96m\u001b[47m164 \u001b[m\u001b[93m\u001b[107m\u001b[8Cout = formats.JSONstruct{Output: toGeneric(imageOutput)}\r\n\u001b[96m\u001b[47m165 \u001b[m\u001b[93m\u001b[107m \u001b[32mdefault\u001b[m\u001b[93m\u001b[107m:\r\n\u001b[96m\u001b[47m166 \u001b[m\u001b[93m\u001b[107m\u001b[8Cout = formats.StdoutTemplate{Output: toGeneric(imageOutput), Template: outputFormat, Fields: imageOutput[\u001b[36m0\u001b[m\u001b[93m\u001b[107m].\u001b[7m\u001b[91mheade\u001b[27m\u001b[m\u001b[93m\u001b[107mrMap()}\r\n\u001b[96m\u001b[47m167 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m168 \r\n169 \u001b[m\u001b[93m\u001b[107m formats.Writer(out).Out()\u001b[53;175H\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;181H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;189H\u001b[38;5;247m\u001b[48;5;236m" - ], - [ - 0.000184, - " go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;194H\u001b[38;5;144m\u001b[48;5;240m  82%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;201H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;203H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1668\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;22m\u001b[48;5;252m:117\u001b[m\u001b[93m\u001b[107m\u001b[54;1H\u001b[K\u001b[54;1H/heade" - ], - [ - 6.2e-05, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.090014, - "r\u001b[?25l" - ], - [ - 0.010578, - "\u001b[49;126H\u001b[7m\u001b[91mr\u001b[54;8H\u001b[?12l\u001b[?25h" - ], - [ - 0.242781, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mM" - ], - [ - 6.5e-05, - "\u001b[?25l" - ], - [ - 0.018322, - "\u001b[49;127H\u001b[7m\u001b[91mM\u001b[54;9H" - ], - [ - 0.000103, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.216526, - "\u001b[27m\u001b[m\u001b[93m\u001b[107ma\u001b[?25l" - ], - [ - 0.008316, - "\u001b[49;128H\u001b[7m\u001b[91ma\u001b[54;10H" - ], - [ - 0.000108, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.164608, - "\u001b[27m\u001b[m\u001b[93m\u001b[107mp\u001b[?25l" - ], - [ - 0.010964, - "\u001b[49;129H\u001b[7m\u001b[91mp\u001b[54;11H" - ], - [ - 5.8e-05, - "\u001b[?12l\u001b[?25h" - ], - [ - 0.303811, - "\r" - ], - [ - 5.4e-05, - "\u001b[?25l" - ], - [ - 0.01537, - "\u001b[27m\u001b[m\u001b[93m\u001b[107m\u001b[49;121H\u001b[7m\u001b[33mheaderMap\u001b[m\u001b[93m\u001b[107m\u001b[53;2H\u001b[1m\u001b[38;5;22m\u001b[48;5;148mNORMAL \u001b[49;121H\u001b[?12l\u001b[?25h" - ], - [ - 0.613627, - "\u001b[?25l\u001b[54;1H" - ], - [ - 0.009249, - "\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[1;1H\u001b[24M\u001b[1;54r\u001b[29;1H\u001b[96m\u001b[47m170 \r\n171 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m172 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m173 \r\n174 \u001b[m\u001b[93m\u001b[107m\u001b[32mtype\u001b[m\u001b[93m\u001b[107m imageOutputParams \u001b[32mstruct\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m175 \u001b[m\u001b[93m\u001b[107m ID\u001b[8C\u001b[33mstring\u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[36m`json:\"id\"`\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m176 \u001b[m\u001b[93m\u001b[107m Name \u001b[33mstring\u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[36m`json:\"names\"`\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m177 \u001b[m\u001b[93m\u001b[107m Digest digest.Digest \u001b[36m`json:\"digest\"`\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m178 \u001b[m\u001b[93m\u001b[107m CreatedAt \u001b[33mstring\u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[36m`json:\"created\"`\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m179 \u001b[m\u001b[93m\u001b[107m Size \u001b[33mstring\u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[36m`json:\"size\"`\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m180 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m181 \r\n182 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m toGeneric(params []imageOutputParams) []\u001b[32minterface\u001b[m\u001b[93m\u001b[107m{} {\r\n\u001b[96m\u001b[47m183 \u001b[m\u001b[93m\u001b[107m genericParams := \u001b[32mmake\u001b[m\u001b[93m\u001b[107m([]\u001b[32mi" - ], - [ - 4.4e-05, - "nterface\u001b[m\u001b[93m\u001b[107m{}, \u001b[32mlen\u001b[m\u001b[93m\u001b[107m(params))\r\n\u001b[96m\u001b[47m184 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m i, v := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m params {\r\n\u001b[96m\u001b[47m185 \u001b[m\u001b[93m\u001b[107m\u001b[8CgenericParams[i] = \u001b[32minterface\u001b[m\u001b[93m\u001b[107m{}(v)\r\n\u001b[96m\u001b[47m186 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m187 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m genericParams\r\n\u001b[96m\u001b[47m188 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m189 \r\n190 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (i *imageOutputParams) \u001b[7m\u001b[33mheaderMap\u001b[m\u001b[93m\u001b[107m() \u001b[33mmap\u001b[m\u001b[93m\u001b[107m[\u001b[33mstring\u001b[m\u001b[93m\u001b[107m]\u001b[33mstring\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m191 \u001b[m\u001b[93m\u001b[107m v := reflect.Indirect(reflect.ValueOf(i))\r\n\u001b[96m\u001b[47m192 \u001b[m\u001b[93m\u001b[107m values := \u001b[32mmake\u001b[m\u001b[93m\u001b[107m(\u001b[33mmap\u001b[m\u001b[93m\u001b[107m[\u001b[33mstring\u001b[m\u001b[93m\u001b[107m]\u001b[33mstring\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m193 \u001b[m\u001b[93m\u001b[107m\u001b[54;1H\u001b[K\u001b[53;175H\u001b[38;5;231m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b" - ], - [ - 2.6e-05, - "[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  94%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\b190\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:29\u001b[49;33H\u001b[?12l\u001b[?25h" - ], - [ - 2.596474, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m194 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m i := \u001b[36m0\u001b[m\u001b[93m\u001b[107m; i < v.NumField(); i++ {\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[49;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.204651, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m195 \u001b[m\u001b[93m\u001b[107m\u001b[8Ckey := v.Type().Field(i).Name\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  95%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[49;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.176184, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m196 \u001b[m\u001b[93m\u001b[107m\u001b[8Cvalue := key\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1 \u001b[49;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.187364, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m197 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m value == \u001b[36m\"ID\"\u001b[m\u001b[93m\u001b[107m || value == \u001b[36m\"Name\"\u001b[m\u001b[93m\u001b[107m {\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  96%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:29\u001b[49;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.159818, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m198 \u001b[m\u001b[93m\u001b[107m\u001b[12Cvalue = \u001b[36m\"Image\"\u001b[m\u001b[93m\u001b[107m + value\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[49;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.510264, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m199 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  97%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:20\u001b[49;24H\u001b[?12l\u001b[?25h" - ], - [ - 0.025799, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m200 \u001b[m\u001b[93m\u001b[107m\u001b[8Cvalues[key] = fmt.Sprintf(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[31m%s\u001b[m\u001b[93m\u001b[107m\u001b[36m \"\u001b[m\u001b[93m\u001b[107m, strings.ToUpper(splitCamelCase(value)))\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:29\u001b[49;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.03976, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m201 \u001b[m\u001b[93m\u001b[107m }\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  98%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[49;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.024833, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[47;49H\u001b[1m\u001b[31m\u001b[106m{\u001b[49;13H}\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m202 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m values\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9 \u001b[49;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.052706, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[46;49H{\u001b[48;13H}\u001b[52;1H\u001b[96m\u001b[47m203 \u001b[m\u001b[93m\u001b[107m}\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  99%\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m200\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:29\u001b[49;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.031789, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[43;43H\u001b[1m\u001b[31m\u001b[106m{\u001b[50;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5 \u001b[50;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.028149, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[43;43H{\u001b[50;9H}\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m 100%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:17\u001b[51;21H\u001b[?12l\u001b[?25h" - ], - [ - 0.030014, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[39;63H\u001b[1m\u001b[31m\u001b[106m{\u001b[52;5H}\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1 \u001b[52;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.018881, - "\u001b[?5h" - ], - [ - 0.000174, - "\u001b[?2004l" - ], - [ - 0.100098, - "\u001b[?2004h" - ], - [ - 0.031161, - "\u001b[?5l" - ], - [ - 0.340032, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[39;63H{\u001b[52;5H}\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:17\u001b[51;21H\u001b[?12l\u001b[?25h" - ], - [ - 47.126026, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[43;43H\u001b[1m\u001b[31m\u001b[106m{\u001b[50;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  99%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5 \u001b[50;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.49885, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[43;43H{\u001b[50;9H}\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m0\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:29\u001b[49;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.03165, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[46;49H\u001b[1m\u001b[31m\u001b[106m{\u001b[48;13H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  98%\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m199\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9 \u001b[48;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.030139, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[46;49H{\u001b[48;13H}\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:29\u001b[47;33H\u001b[?12l\u001b[?25h" - ], - [ - 0.029042, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  97%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[46;33H" - ], - [ - 0.029773, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:20\u001b[45;24H" - ], - [ - 0.031993, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  96%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:29\u001b[44;33H" - ], - [ - 0.03237, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[43;33H" - ], - [ - 0.195643, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  95%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1 \u001b[42;5H" - ], - [ - 0.210797, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;207H\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:29\u001b[41;33H" - ], - [ - 0.517507, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  94%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[40;33H" - ], - [ - 0.244061, - "\u001b[53;210H8\u001b[40;32H" - ], - [ - 0.216928, - "\u001b[53;210H7\u001b[40;31H" - ], - [ - 0.181163, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\b\u001b[1m\u001b[31m\u001b[106m(\u001b[18C)\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;252m6\u001b[40;30H\u001b[?12l\u001b[?25h" - ], - [ - 315.572339, - "\u001b[?25l\u001b[54;1H\u001b[m\u001b[93m\u001b[107m:" - ], - [ - 4.9e-05, - "\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.220904, - "\b" - ], - [ - 0.002635, - "\u001b[?25l\u001b[40;30H\u001b[?12l\u001b[?25h" - ], - [ - 0.335899, - "\u001b[?25l" - ], - [ - 0.0299, - "\u001b[54;1H\u001b[34m-- VISUAL --\u001b[m\u001b[93m\u001b[107m\u001b[53;1H\u001b[1m\u001b[38;5;94m\u001b[48;5;214m VISUAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[m\u001b[93m\u001b[107m\u001b[53;9H\u001b[38;5;214m\u001b[48;5;94m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;214m\u001b[48;5;94m↔\u001b[53;12H1 \u001b[m\u001b[93m\u001b[107m\u001b[38;5;94m\u001b[48;5;240m\u001b[53;15H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[53;17H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[53;26H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240ms\bimages.go \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[53;47H \u001b[40;30H\u001b[?12l\u001b[?25h" - ], - [ - 0.729109, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[54;1H\u001b[K\u001b[54;1H:\u001b[?2004h'<,'>\u001b[?12l\u001b[?25h" - ], - [ - 0.225295, - "q\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.582167, - "\u001b[?25l\u001b[54;1H\u001b[K" - ], - [ - 0.007677, - "\u001b[53;1H\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;214m\u001b[48;5;94m\u001b[m\u001b[93m\u001b[107m\u001b[53;9H\u001b[38;5;148m\u001b[48;5;240m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[53;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[53;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpo\u001b[m\u001b[93m\u001b[107m\u001b[2C\u001b[1m\u001b[38;5;231m\u001b[48;5;240mimages.go s\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;240m\u001b[48;5;236m\u001b[53;42H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mg\u001b[m\u001b[93m\u001b[107m\b\u001b[38;5;231m\u001b[48;5;236m     \u001b[40;30H\u001b[?12l\u001b[?25h" - ], - [ - 0.719145, - "\u001b[?25l\u001b[54;1H\u001b[m\u001b[93m\u001b[107m:\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.136951, - "q\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.082665, - "\r" - ], - [ - 0.02936, - "\u001b[?25l" - ], - [ - 0.000147, - "\u001b[?2004l" - ], - [ - 9.5e-05, - "\u001b[54;1H\u001b[K\u001b[54;1H" - ], - [ - 5.5e-05, - "\u001b[?2004l\u001b[?1l\u001b>" - ], - [ - 6.2e-05, - "\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.003739, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.062587, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master \u001b[39m \u001b[33m422s\u001b[39m\r\n" - ], - [ - 0.003799, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007\u001b]1;..cubator/cri-o\u0007\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.263929, - "v" - ], - [ - 0.112167, - "\bvi" - ], - [ - 0.109735, - " " - ], - [ - 0.650955, - "c" - ], - [ - 0.088996, - "m" - ], - [ - 0.11713, - "d\u001b[1m/\u001b[0m" - ], - [ - 0.07719, - "\b\u001b[0m/k" - ], - [ - 0.528816, - "\b \b" - ], - [ - 0.145274, - "\b \b" - ], - [ - 0.153621, - "\b \b" - ], - [ - 0.165982, - "\b \b" - ], - [ - 0.149926, - "\b \b" - ], - [ - 0.099378, - "c" - ], - [ - 0.113919, - "m" - ], - [ - 0.124791, - "d\u001b[1m/\u001b[0m" - ], - [ - 0.076941, - "\b\u001b[0m/k" - ], - [ - 0.118135, - "pod\u001b[1m/\u001b[0m" - ], - [ - 0.453118, - "\b\u001b[0m/f" - ], - [ - 0.087524, - "o" - ], - [ - 0.110424, - "rmats\u001b[1m/\u001b[0m" - ], - [ - 0.196023, - "\b\u001b[0m/f" - ], - [ - 0.110967, - "o" - ], - [ - 0.110584, - "rmats.go\u001b[1m \u001b[0m" - ], - [ - 0.502681, - "\b\u001b[0m \b\u001b[?1l\u001b>" - ], - [ - 3e-05, - "\u001b[?2004l\r\r\n" - ], - [ - 0.007009, - "\u001b]2;vim cmd/kpod/formats/formats.go\u0007\u001b]1;vi\u0007" - ], - [ - 0.333483, - "\u001b[?2004h\u001b[?1049h\u001b[?1h\u001b=\u001b[?2004h" - ], - [ - 0.000971, - "\u001b[1;54r\u001b[?12;25h\u001b[?12l\u001b[?25h\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[54;1H\"cmd/kpod/formats/formats.go\"" - ], - [ - 8.5e-05, - " 69L, 1356C" - ], - [ - 0.020264, - "\u001b[2;1H▽\u001b[6n\u001b[2;1H \u001b[1;1H" - ], - [ - 9.3e-05, - "\u001b[>c" - ], - [ - 0.007943, - "\u001b[1;1H\u001b[96m\u001b[47m 9 \r\n 10 \u001b[m\u001b[93m\u001b[107m \u001b[36m\"github.com/pkg/errors\"\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 11 \u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 12 \r\n 13 \u001b[m\u001b[93m\u001b[107m\u001b[96m// Writer interface for outputs\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 14 \u001b[m\u001b[93m\u001b[107m\u001b[32mtype\u001b[m\u001b[93m\u001b[107m Writer \u001b[32minterface\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 15 \u001b[m\u001b[93m\u001b[107m Out() \u001b[33merror\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 16 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 17 \r\n 18 \u001b[m\u001b[93m\u001b[107m\u001b[96m// JSONstruct for JSON output\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 19 \u001b[m\u001b[93m\u001b[107m\u001b[32mtype\u001b[m\u001b[93m\u001b[107m JSONstruct \u001b[32mstruct\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 20 \u001b[m\u001b[93m\u001b[107m Output []\u001b[32minterface\u001b[m\u001b[93m\u001b[107m{}\r\n\u001b[96m\u001b[47m 21 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 22 \r\n 23 \u001b[m\u001b[93m\u001b[107m\u001b[96m// StdoutTemplate for Go template output\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 24 \u001b[m\u001b[93m\u001b[107m\u001b[32mtype\u001b[m\u001b[93m\u001b[107m StdoutTemplate \u001b[32mstruct\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 25 \u001b[m\u001b[93m\u001b[107m Output []\u001b[32minterface\u001b[m\u001b[93m\u001b[107m{}\r\n\u001b[96m\u001b[47m 26 \u001b[m\u001b[93m\u001b[107m Template \u001b[33mstring\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 27 \u001b[m\u001b[" - ], - [ - 4.3e-05, - "93m\u001b[107m Fields \u001b[33mmap\u001b[m\u001b[93m\u001b[107m[\u001b[33mstring\u001b[m\u001b[93m\u001b[107m]\u001b[33mstring\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 28 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 29 \r\n 30 \u001b[m\u001b[93m\u001b[107m\u001b[96m// Out method for JSON\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 31 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (j JSONstruct) Out() \u001b[33merror\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 32 \u001b[m\u001b[93m\u001b[107m data, err := json.MarshalIndent(j.Output, \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m, \u001b[36m\" \"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 33 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 34 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\r\n\u001b[96m\u001b[47m 35 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 36 \u001b[m\u001b[93m\u001b[107m fmt.Printf(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[31m%s\\n\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, data)\r\n\u001b[96m\u001b[47m 37 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 38 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 39 \r\n 40 \u001b[m\u001b[93m\u001b[107m\u001b[96m// Out method for Go templates\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 41 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (t StdoutTemplate) Out() " - ], - [ - 0.071435, - "\u001b[33merror\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 42 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m strings.HasPrefix(t.Template, \u001b[36m\"table\"\u001b[m\u001b[93m\u001b[107m) {\r\n\u001b[96m\u001b[47m 43 \u001b[m\u001b[93m\u001b[107m\u001b[8Ct.Template = strings.TrimSpace(t.Template[\u001b[36m5\u001b[m\u001b[93m\u001b[107m:])\r\n\u001b[96m\u001b[47m 44 \u001b[m\u001b[93m\u001b[107m\u001b[8CheaderTmpl, err := template.New(\u001b[36m\"header\"\u001b[m\u001b[93m\u001b[107m).Funcs(headerFunctions).Parse(t.Template)\r\n\u001b[96m\u001b[47m 45 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 46 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"Template parsing error\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 47 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 48 \u001b[m\u001b[93m\u001b[107m\u001b[8Cerr = headerTmpl.Execute(os.Stdout, t.Fields)\r\n\u001b[96m\u001b[47m 49 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 50 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\r\n\u001b[96m\u001b[47m 51 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 52 \u001b[m\u001b[93m\u001b[107m\u001b[8Cfmt.Println()\r\n\u001b[96m\u001b[47m 53 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 54 \u001b[m\u001b[93m\u001b[107m tmpl, err := template.N" - ], - [ - 4.8e-05, - "ew(\u001b[36m\"image\"\u001b[m\u001b[93m\u001b[107m).Funcs(basicFunctions).Parse(t.Template)\r\n\u001b[96m\u001b[47m 55 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m \u001b[1m\u001b[31m\u001b[106m{\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 56 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"Template parsing error\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 57 \u001b[m\u001b[93m\u001b[107m \u001b[1m\u001b[31m\u001b[106m}\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 58 \r\n 59 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, img := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m t.Output {\r\n\u001b[96m\u001b[47m 60 \u001b[m\u001b[93m\u001b[107m\u001b[8CbasicTmpl := tmpl.Funcs(basicFunctions)\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[53;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[53;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[53;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/formats/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mformats.go \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[53;51H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                   " - ], - [ - 0.027914, - "                                                                                         \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  83%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[53;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[53;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 57\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5  \u001b[49;9H\u001b[?12l\u001b[?25h" - ], - [ - 6.6e-05, - "\u001bP+q436f\u001b\\\u001bP+q6b75\u001b\\\u001bP+q6b64\u001b\\\u001bP+q6b72\u001b\\\u001bP+q6b6c\u001b\\\u001bP+q2332\u001b\\\u001bP+q2334\u001b\\\u001bP+q2569\u001b\\\u001bP+q2a37\u001b\\\u001bP+q6b31\u001b\\" - ], - [ - 0.752985, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[1;2H\u001b[96m\u001b[47m10\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[36m\"github.com/pkg/errors\"\u001b[m\u001b[93m\u001b[107m\u001b[2;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[1C)\u001b[2;9H\u001b[K\u001b[3;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[3;5H\u001b[K\u001b[4;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[96m// Writer interface for outputs\u001b[m\u001b[93m\u001b[107m\u001b[5;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[32mtype\u001b[m\u001b[93m\u001b[107m Writer \u001b[32minterface\u001b[m\u001b[93m\u001b[107m {\u001b[5;28H\u001b[K\u001b[6;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C Out() \u001b[33merror\u001b[m\u001b[93m\u001b[107m\u001b[6;20H\u001b[K\u001b[7;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[7;9H\u001b[K\u001b[8;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[8;5H\u001b[K\u001b[9;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[96m// JSONstruct for JSON output\u001b[m\u001b[93m\u001b[107m\u001b[10;3H\u001b[96m\u001b[47m9\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[32mtype\u001b[m\u001b[93m\u001b[107m JSONstruct \u001b[32mstruct\u001b[m\u001b[93m\u001b[107m {\u001b[10;29H\u001b[K\u001b[11;2H\u001b[96m\u001b[47m20\u001b[m\u001b[93m\u001b[107m\u001b[1C Output []\u001b[32minterface\u001b[m\u001b[93m\u001b[107m{}\u001b[12;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[12;9H\u001b[K\u001b[13;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[13;5H\u001b[K\u001b[14;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[96m// StdoutTemplate for Go template output\u001b[m\u001b[93m\u001b[107m\u001b[15;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[10" - ], - [ - 2.7e-05, - "7m\u001b[1C\u001b[32mtype\u001b[m\u001b[93m\u001b[107m StdoutTemplate \u001b[32mstruct\u001b[m\u001b[93m\u001b[107m {\u001b[15;33H\u001b[K\u001b[16;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[1C Output []\u001b[32minterface\u001b[m\u001b[93m\u001b[107m{}\u001b[16;32H\u001b[K\u001b[17;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5CTemplate \u001b[33mstring\u001b[m\u001b[93m\u001b[107m\u001b[17;24H\u001b[K\u001b[18;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5CFields \u001b[33mmap\u001b[m\u001b[93m\u001b[107m[\u001b[33mstring\u001b[m\u001b[93m\u001b[107m]\u001b[33mstring\u001b[m\u001b[93m\u001b[107m\u001b[19;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[19;9H\u001b[K\u001b[20;3H\u001b[96m\u001b[47m9\u001b[m\u001b[93m\u001b[107m\u001b[20;5H\u001b[K\u001b[21;2H\u001b[96m\u001b[47m30\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[96m// Out method for JSON\u001b[m\u001b[93m\u001b[107m\u001b[22;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (j JSONstruct) Out() \u001b[33merror\u001b[m\u001b[93m\u001b[107m {\u001b[23;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[1C data, err := json.MarshalIndent(j.Output, \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m, \u001b[36m\" \"\u001b[m\u001b[93m\u001b[107m)\u001b[24;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[24;24H\u001b[K\u001b[25;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5C \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\u001b[25;23H\u001b[K\u001b[26;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5C}\u001b[26;13H" - ], - [ - 0.002588, - "\u001b[K\u001b[27;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5Cfmt.Printf(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[31m%s\\n\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, data)\u001b[28;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\u001b[28;19H\u001b[K\u001b[29;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[1C}\u001b[29;9H\u001b[K\u001b[30;3H\u001b[96m\u001b[47m9\u001b[m\u001b[93m\u001b[107m\u001b[30;5H\u001b[K\u001b[31;2H\u001b[96m\u001b[47m40\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[96m// Out method for Go templates\u001b[m\u001b[93m\u001b[107m\u001b[32;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[1C\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (t StdoutTemplate) Out() \u001b[33merror\u001b[m\u001b[93m\u001b[107m {\u001b[33;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[1C \u001b[32mif\u001b[m\u001b[93m\u001b[107m strings.HasPrefix(t.Template, \u001b[36m\"table\"\u001b[m\u001b[93m\u001b[107m) {\u001b[34;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C t.Template = strings.TrimSpace(t.Template[\u001b[36m5\u001b[m\u001b[93m\u001b[107m:])\u001b[35;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[9CheaderTmpl, err := template.New(\u001b[36m\"header\"\u001b[m\u001b[93m\u001b[107m).Funcs(headerFunctions).Parse(t.Template)\u001b[36;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[9C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[36;29H\u001b[K\u001b[37;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[9C \u001b[32mreturn\u001b[m\u001b[93m\u001b" - ], - [ - 3.4e-05, - "[107m errors.Wrapf(err, \u001b[36m\"Template parsing error\"\u001b[m\u001b[93m\u001b[107m)\u001b[38;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[9C}\u001b[38;17H\u001b[K\u001b[39;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[9Cerr = headerTmpl.Execute(os.Stdout, t.Fields)\u001b[40;3H\u001b[96m\u001b[47m9\u001b[m\u001b[93m\u001b[107m\u001b[9C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[40;28H\u001b[K\u001b[41;2H\u001b[96m\u001b[47m50\u001b[m\u001b[93m\u001b[107m\u001b[9C \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\u001b[41;27H\u001b[K\u001b[42;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[9C}\u001b[42;17H\u001b[K\u001b[43;3H\u001b[96m\u001b[47m2\u001b[m\u001b[93m\u001b[107m\u001b[9Cfmt.Println()\u001b[44;3H\u001b[96m\u001b[47m3\u001b[m\u001b[93m\u001b[107m\u001b[5C}\u001b[44;13H\u001b[K\u001b[45;3H\u001b[96m\u001b[47m4\u001b[m\u001b[93m\u001b[107m\u001b[5Ctmpl, err := template.New(\u001b[36m\"image\"\u001b[m\u001b[93m\u001b[107m).Funcs(basicFunctions).Parse(t.Template)\u001b[46;3H\u001b[96m\u001b[47m5\u001b[m\u001b[93m\u001b[107m\u001b[5C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[46;24H\u001b[K\u001b[47;3H\u001b[96m\u001b[47m6\u001b[m\u001b[93m\u001b[107m\u001b[5C \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"Template parsing error\"\u001b[m\u001b[93m\u001b[107m)\u001b[48;3H\u001b[96m\u001b[47m7\u001b[m\u001b[93m\u001b[107m\u001b[5C}\u001b[48;13H\u001b[K\u001b[49;3H\u001b[96m\u001b[47m8\u001b[m\u001b[93m\u001b[107m\u001b[49;9H\u001b[K\u001b[50;3H\u001b[96m\u001b[47m9\u001b[m\u001b[93m\u001b[107m\u001b[5C" - ], - [ - 0.033553, - "\u001b[32mfor\u001b[m\u001b[93m\u001b[107m _, img := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m t.Output {\u001b[51;2H\u001b[96m\u001b[47m60\u001b[m\u001b[93m\u001b[107m\u001b[5C basicTmpl := tmpl.Funcs(basicFunctions)\u001b[52;3H\u001b[96m\u001b[47m1\u001b[m\u001b[93m\u001b[107m\u001b[9Cerr = basicTmpl.Execute(os.Stdout, img\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  84%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[49;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.379256, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[46;23H\u001b[1m\u001b[31m\u001b[106m{\u001b[48;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  83%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[48;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.137128, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[46;23H{\u001b[48;9H}\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  84%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[49;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.501192, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m 62 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\u001b[54;1H\u001b[K\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  86%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[49;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.045304, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m 63 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  87%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m60\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:8\u001b[49;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.024223, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m 64 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  88%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[49;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.040877, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m 65 \u001b[m\u001b[93m\u001b[107m\u001b[8Cfmt.Println()\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  90%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[49;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.038981, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m 66 \u001b[m\u001b[93m\u001b[107m }\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  91%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[49;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.022814, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m 67 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  93%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[49;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.03284, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[52;1H\u001b[96m\u001b[47m 68 \u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  94%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[49;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.045318, - "\u001b[?25l\u001b[1;52r\u001b[m\u001b[93m\u001b[107m\u001b[52;1H\r\n\u001b[1;54r\u001b[42;38H\u001b[1m\u001b[31m\u001b[106m{\u001b[49;9H}\u001b[m\u001b[93m\u001b[107m\r\n\r\n\r\n\u001b[96m\u001b[47m 69 \u001b[m\u001b[93m\u001b[107m}\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  96%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[49;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.028648, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[42;38H{\u001b[49;9H}\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  97%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[50;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.022824, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  99%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[51;5H\u001b[?12l\u001b[?25h" - ], - [ - 0.137956, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  97%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[50;9H" - ], - [ - 0.507979, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[42;38H\u001b[1m\u001b[31m\u001b[106m{\u001b[49;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  96%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[49;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.024442, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[42;38H{\u001b[49;9H}\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  94%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:8\u001b[48;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.037304, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  93%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[47;12H" - ], - [ - 0.030234, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  91%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[46;12H" - ], - [ - 0.035803, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;247m\u001b[48;5;240m  90%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[45;12H" - ], - [ - 0.027875, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  88%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[44;12H" - ], - [ - 0.031294, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  87%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m0\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[43;12H" - ], - [ - 0.028909, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  86%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m59\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[42;9H" - ], - [ - 0.028601, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  84%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:1\u001b[41;5H" - ], - [ - 0.0318, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[38;23H\u001b[1m\u001b[31m\u001b[106m{\u001b[40;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  83%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[40;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.04273, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[38;23H{\u001b[40;9H}\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  81%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:8\u001b[39;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.028264, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;144m\u001b[48;5;240m  80%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[38;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.031967, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  78%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[37;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.037706, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[25;51H\u001b[1m\u001b[31m\u001b[106m{\u001b[36;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  77%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[36;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.030776, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[25;51H{\u001b[36;9H}\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  75%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:8\u001b[35;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.028632, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  74%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[34;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.032475, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  72%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m0\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[33;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.026166, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  71%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m49\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[32;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.168545, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  70%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[31;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.49982, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  68%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[30;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.030812, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  67%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[29;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.030802, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  65%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[28;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.032574, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  64%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[27;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.029137, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  62%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[26;12H\u001b[?12l\u001b[?25h" - ], - [ - 0.037678, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  61%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[25;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.28215, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  62%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:8\u001b[26;12H" - ], - [ - 0.499953, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  64%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[27;12H" - ], - [ - 0.029953, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  65%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[28;12H" - ], - [ - 0.033793, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  67%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[29;12H" - ], - [ - 0.032469, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  68%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[30;12H" - ], - [ - 0.030452, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  70%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[31;12H" - ], - [ - 0.03474, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  71%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[32;12H" - ], - [ - 0.031553, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  72%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m50\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[33;12H" - ], - [ - 0.027886, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  74%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[34;12H" - ], - [ - 0.032183, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  75%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[35;12H" - ], - [ - 0.361308, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  74%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[34;12H" - ], - [ - 0.180436, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  72%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m0\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[33;12H" - ], - [ - 0.163593, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  71%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m49\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[32;12H" - ], - [ - 0.167433, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  70%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[31;12H" - ], - [ - 0.499694, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  68%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[30;12H" - ], - [ - 0.035176, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  67%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[29;12H" - ], - [ - 0.176855, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  65%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[28;12H" - ], - [ - 0.167552, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  64%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[27;12H" - ], - [ - 0.162525, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  62%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[26;12H" - ], - [ - 0.344534, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  61%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5\u001b[25;9H" - ], - [ - 0.475291, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[42C\u001b[1m\u001b[31m\u001b[106m{\u001b[36;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;209H\u001b[38;5;22m\u001b[48;5;252m47\u001b[25;51H\u001b[?12l\u001b[?25h" - ], - [ - 0.862743, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m{\u001b[36;9H}\u001b[53;210H\u001b[38;5;22m\u001b[48;5;252m6\u001b[25;50H\u001b[?12l\u001b[?25h" - ], - [ - 0.211622, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[25;29H\u001b[1m\u001b[31m\u001b[106m(\u001b[19C)\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;252m5\u001b[25;49H\u001b[?12l\u001b[?25h" - ], - [ - 0.334139, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[25;29H(t\u001b[18C) \u001b[53;210H\u001b[38;5;22m\u001b[48;5;252m6\u001b[25;50H\u001b[?12l\u001b[?25h" - ], - [ - 0.690098, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m \u001b[1m\u001b[31m\u001b[106m{\u001b[36;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;210H\u001b[38;5;22m\u001b[48;5;252m7\u001b[25;51H\u001b[?12l\u001b[?25h" - ], - [ - 0.829404, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m{\u001b[36;9H}\u001b[53;195H\u001b[38;5;107m\u001b[48;5;240m  62%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[26;51H\u001b[?12l\u001b[?25h" - ], - [ - 0.187135, - "\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  64%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:\u001b[27;51H" - ], - [ - 0.223449, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[28;27H\u001b[1m\u001b[31m\u001b[106m{\u001b[30;13H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  65%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m5\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:23\u001b[28;27H\u001b[?12l\u001b[?25h" - ], - [ - 0.381099, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m{\u001b[30;13H}\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  67%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m6\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:47\u001b[29;51H\u001b[?12l\u001b[?25h" - ], - [ - 0.445137, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[28;27H\u001b[1m\u001b[31m\u001b[106m{\u001b[30;13H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  68%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m7\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9 \u001b[30;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.207385, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[28;27H{\u001b[30;13H}\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  70%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:47\u001b[31;51H\u001b[?12l\u001b[?25h" - ], - [ - 0.222319, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[32;27H\u001b[1m\u001b[31m\u001b[106m{\u001b[34;13H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  71%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m9\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:23\u001b[32;27H\u001b[?12l\u001b[?25h" - ], - [ - 0.499981, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m{\u001b[34;13H}\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  72%\u001b[m\u001b[93m\u001b[107m\u001b[6C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m50\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:22\u001b[33;26H\u001b[?12l\u001b[?25h" - ], - [ - 0.029604, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[32;27H\u001b[1m\u001b[31m\u001b[106m{\u001b[34;13H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  74%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m1\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:9 \u001b[34;13H\u001b[?12l\u001b[?25h" - ], - [ - 0.162284, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[32;27H{\u001b[34;13H}\u001b[35;24H\u001b[1m\u001b[31m\u001b[106m()\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  75%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m2\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:21\u001b[35;25H\u001b[?12l\u001b[?25h" - ], - [ - 0.200133, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[25;51H\u001b[1m\u001b[31m\u001b[106m{\u001b[m\u001b[93m\u001b[107m\u001b[35;24H()\u001b[36;9H\u001b[1m\u001b[31m\u001b[106m}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  77%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5 \u001b[36;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.196823, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[25;51H{\u001b[36;9H}\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  78%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m4\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:47\u001b[37;51H\u001b[?12l\u001b[?25h" - ], - [ - 0.356692, - "\u001b[?25l\u001b[m\u001b[93m\u001b[107m\u001b[25;51H\u001b[1m\u001b[31m\u001b[106m{\u001b[36;9H}\u001b[m\u001b[93m\u001b[107m\u001b[53;195H\u001b[38;5;108m\u001b[48;5;240m  77%\u001b[m\u001b[93m\u001b[107m\u001b[7C\u001b[1m\u001b[38;5;235m\u001b[48;5;252m3\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5 \u001b[36;9H\u001b[?12l\u001b[?25h" - ], - [ - 837.577075, - "\u001b[27m\u001b[23m\u001b[m\u001b[93m\u001b[107m\u001b[H\u001b[2J\u001b[?25l\u001b[1;1H\u001b[96m\u001b[47m 19 \u001b[m\u001b[93m\u001b[107m\u001b[32mtype\u001b[m\u001b[93m\u001b[107m JSONstruct \u001b[32mstruct\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 20 \u001b[m\u001b[93m\u001b[107m Output []\u001b[32minterface\u001b[m\u001b[93m\u001b[107m{}\r\n\u001b[96m\u001b[47m 21 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 22 \r\n 23 \u001b[m\u001b[93m\u001b[107m\u001b[96m// StdoutTemplate for Go template output\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 24 \u001b[m\u001b[93m\u001b[107m\u001b[32mtype\u001b[m\u001b[93m\u001b[107m StdoutTemplate \u001b[32mstruct\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 25 \u001b[m\u001b[93m\u001b[107m Output []\u001b[32minterface\u001b[m\u001b[93m\u001b[107m{}\r\n\u001b[96m\u001b[47m 26 \u001b[m\u001b[93m\u001b[107m Template \u001b[33mstring\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 27 \u001b[m\u001b[93m\u001b[107m Fields \u001b[33mmap\u001b[m\u001b[93m\u001b[107m[\u001b[33mstring\u001b[m\u001b[93m\u001b[107m]\u001b[33mstring\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 28 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 29 \r\n 30 \u001b[m\u001b[93m\u001b[107m\u001b[96m// Out method for JSON\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 31 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (j JSONstruct) Out() \u001b[33merror\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 32 \u001b[m\u001b[93m\u001b[107m data, err := json.MarshalIndent(j.Output, \u001b[36m\"\"\u001b[m\u001b[93m\u001b[107m, \u001b[36m\" \"\u001b[m\u001b[93m\u001b[107m)\r\n" - ], - [ - 7.7e-05, - "\u001b[96m\u001b[47m 33 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 34 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\r\n\u001b[96m\u001b[47m 35 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 36 \u001b[m\u001b[93m\u001b[107m fmt.Printf(\u001b[36m\"\u001b[m\u001b[93m\u001b[107m\u001b[31m%s\\n\u001b[m\u001b[93m\u001b[107m\u001b[36m\"\u001b[m\u001b[93m\u001b[107m, data)\r\n\u001b[96m\u001b[47m 37 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 38 \u001b[m\u001b[93m\u001b[107m}\r\n\u001b[96m\u001b[47m 39 \r\n 40 \u001b[m\u001b[93m\u001b[107m\u001b[96m// Out method for Go templates\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 41 \u001b[m\u001b[93m\u001b[107m\u001b[32mfunc\u001b[m\u001b[93m\u001b[107m (t StdoutTemplate) Out() \u001b[33merror\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 42 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m strings.HasPrefix(t.Template, \u001b[36m\"table\"\u001b[m\u001b[93m\u001b[107m) \u001b[1m\u001b[31m\u001b[106m{\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 43 \u001b[m\u001b[93m\u001b[107m\u001b[8Ct.Template = strings.TrimSpace(t.Template[\u001b[36m5\u001b[m\u001b[93m\u001b[107m:])\r\n\u001b[96m\u001b[47m 44 \u001b[m\u001b[93m\u001b[107m\u001b[8CheaderTmpl, err := template.New(\u001b[36m\"header\"\u001b[m\u001b[93m\u001b[107m).Funcs(headerFunctions).Parse(t.Template)\r\n\u001b[96m\u001b[47m 45 \u001b[m\u001b[93m\u001b[107m" - ], - [ - 0.006486, - "\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 46 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"Template parsing error\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 47 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 48 \u001b[m\u001b[93m\u001b[107m\u001b[8Cerr = headerTmpl.Execute(os.Stdout, t.Fields)\r\n\u001b[96m\u001b[47m 49 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 50 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\r\n\u001b[96m\u001b[47m 51 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 52 \u001b[m\u001b[93m\u001b[107m\u001b[8Cfmt.Println()\r\n\u001b[96m\u001b[47m 53 \u001b[m\u001b[93m\u001b[107m \u001b[1m\u001b[31m\u001b[106m}\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 54 \u001b[m\u001b[93m\u001b[107m tmpl, err := template.New(\u001b[36m\"image\"\u001b[m\u001b[93m\u001b[107m).Funcs(basicFunctions).Parse(t.Template)\r\n\u001b[96m\u001b[47m 55 \u001b[m\u001b[93m\u001b[107m \u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 56 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m errors.Wrapf(err, \u001b[36m\"Template parsing error\"\u001b[m\u001b[93m\u001b[107m)\r\n\u001b[96m\u001b[47m 57 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 58 \r\n 59 \u001b[m\u001b[93m\u001b[107m \u001b[32mfor\u001b[m\u001b[93m\u001b[107m" - ], - [ - 6.6e-05, - " _, img := \u001b[32mrange\u001b[m\u001b[93m\u001b[107m t.Output {\r\n\u001b[96m\u001b[47m 60 \u001b[m\u001b[93m\u001b[107m\u001b[8CbasicTmpl := tmpl.Funcs(basicFunctions)\r\n\u001b[96m\u001b[47m 61 \u001b[m\u001b[93m\u001b[107m\u001b[8Cerr = basicTmpl.Execute(os.Stdout, img)\r\n\u001b[96m\u001b[47m 62 \u001b[m\u001b[93m\u001b[107m\u001b[8C\u001b[32mif\u001b[m\u001b[93m\u001b[107m err != \u001b[36mnil\u001b[m\u001b[93m\u001b[107m {\r\n\u001b[96m\u001b[47m 63 \u001b[m\u001b[93m\u001b[107m\u001b[12C\u001b[32mreturn\u001b[m\u001b[93m\u001b[107m err\r\n\u001b[96m\u001b[47m 64 \u001b[m\u001b[93m\u001b[107m\u001b[8C}\r\n\u001b[96m\u001b[47m 65 \u001b[m\u001b[93m\u001b[107m\u001b[8Cfmt.Println()\r\n\u001b[96m\u001b[47m 66 \u001b[m\u001b[93m\u001b[107m }\r\n\u001b[96m\u001b[47m 67 \u001b[m\u001b[93m\u001b[107m \u001b[32mreturn\u001b[m\u001b[93m\u001b[107m \u001b[36mnil\u001b[m\u001b[93m\u001b[107m\r\n\u001b[96m\u001b[47m 68 \u001b[m\u001b[93m\u001b[107m\r\n\u001b[1m\u001b[38;5;22m\u001b[48;5;148m NORMAL \u001b[m\u001b[93m\u001b[107m\u001b[38;5;148m\u001b[48;5;240m\u001b[51;10H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240m\u001b[51;12H master \u001b[m\u001b[93m\u001b[107m\u001b[38;5;245m\u001b[48;5;240m\u001b[51;21H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;250m\u001b[48;5;240mcmd/kpod/formats/\u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;231m\u001b[48;5;240mformats.go \u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m\u001b[51;51H \u001b[m\u001b[93m\u001b[107m\u001b[38;5;231m\u001b[48;5;236m                                   " - ], - [ - 2.6e-05, - "                                                                                         \u001b[m\u001b[93m\u001b[107m\u001b[38;5;247m\u001b[48;5;236munix\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;182H\u001b[38;5;247m\u001b[48;5;236m utf-8\u001b[m\u001b[93m\u001b[107m\u001b[38;5;244m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;190H\u001b[38;5;247m\u001b[48;5;236m go\u001b[m\u001b[93m\u001b[107m\u001b[38;5;240m\u001b[48;5;236m \u001b[m\u001b[93m\u001b[107m\u001b[51;195H\u001b[38;5;108m\u001b[48;5;240m  77%\u001b[m\u001b[93m\u001b[107m\u001b[38;5;252m\u001b[48;5;240m \u001b[m\u001b[93m\u001b[107m\u001b[51;202H\u001b[38;5;235m\u001b[48;5;252m \u001b[51;204H \u001b[m\u001b[93m\u001b[107m\u001b[1m\u001b[38;5;235m\u001b[48;5;252m 53\u001b[m\u001b[93m\u001b[107m\u001b[38;5;22m\u001b[48;5;252m:5  \u001b[35;9H\u001b[?12l\u001b[?25h" - ], - [ - 0.84171, - "\u001b[?25l\u001b[52;1H\u001b[m\u001b[93m\u001b[107m:\u001b[?2004h\u001b[?12l\u001b[?25h" - ], - [ - 0.167691, - "q\u001b[?25l\u001b[?12l\u001b[?25h" - ], - [ - 0.064539, - "\r" - ], - [ - 0.016979, - "\u001b[?25l\u001b[?2004l\u001b[52;1H\u001b[K\u001b[52;1H\u001b[?2004l\u001b[?1l\u001b>\u001b[?12l\u001b[?25h\u001b[?1049l" - ], - [ - 0.002329, - "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r" - ], - [ - 0.02599, - "\r\n\u001b[34m\u001b[01mcri-o\u001b[22m \u001b[90mgit/master \u001b[39m \u001b[33m853s\u001b[39m\r\n" - ], - [ - 0.001018, - "\u001b]7;file://localhost.localdomain/home/ryan/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 0.000113, - "\u001b]2;ryan@localhost: ~/Development/Go/src/github.com/kubernetes-incubator/cri-o\u0007" - ], - [ - 2.3e-05, - "\u001b]1;..cubator/cri-o\u0007" - ], - [ - 8.7e-05, - "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[35m❯\u001b[39m \u001b[K\u001b[208C\u001b[90m\u001b[39m\u001b[208D" - ], - [ - 6.7e-05, - "\u001b[?1h\u001b=" - ], - [ - 2.7e-05, - "\u001b[?2004h" - ], - [ - 0.177155, - "e" - ], - [ - 0.184267, - "\bex" - ], - [ - 0.095845, - "i" - ], - [ - 0.144511, - "t" - ], - [ - 0.087093, - "\u001b[?1l\u001b>" - ], - [ - 0.000252, - "\u001b[?2004l\r\r\n" - ], - [ - 0.009572, - "\u001b]2;exit\u0007\u001b]1;exit\u0007" - ] - ] -} \ No newline at end of file diff --git a/libkpod/container_data.go b/libkpod/container_data.go deleted file mode 100644 index 2ade63ba..00000000 --- a/libkpod/container_data.go +++ /dev/null @@ -1,210 +0,0 @@ -package libkpod - -import ( - "encoding/json" - "os" - "time" - - "k8s.io/apimachinery/pkg/fields" - pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" - - "github.com/kubernetes-incubator/cri-o/libpod/driver" - "github.com/kubernetes-incubator/cri-o/libpod/images" - "github.com/kubernetes-incubator/cri-o/oci" - "github.com/opencontainers/image-spec/specs-go/v1" - specs "github.com/opencontainers/runtime-spec/specs-go" - "github.com/pkg/errors" -) - -// ContainerData handles the data used when inspecting a container -type ContainerData struct { - ID string - Name string - LogPath string - Labels fields.Set - Annotations fields.Set - State *ContainerState - Metadata *pb.ContainerMetadata - BundlePath string - StopSignal string - FromImage string `json:"Image,omitempty"` - FromImageID string `json:"ImageID"` - MountPoint string `json:"Mountpoint,omitempty"` - MountLabel string - Mounts []specs.Mount - AppArmorProfile string - ImageAnnotations map[string]string `json:"Annotations,omitempty"` - ImageCreatedBy string `json:"CreatedBy,omitempty"` - Config v1.ImageConfig `json:"Config,omitempty"` - SizeRw uint `json:"SizeRw,omitempty"` - SizeRootFs uint `json:"SizeRootFs,omitempty"` - Args []string - ResolvConfPath string - HostnamePath string - HostsPath string - GraphDriver driverData -} - -type driverData struct { - Name string - Data map[string]string -} - -// ContainerState represents the status of a container. -type ContainerState struct { - specs.State - Created time.Time `json:"created"` - Started time.Time `json:"started,omitempty"` - Finished time.Time `json:"finished,omitempty"` - ExitCode int32 `json:"exitCode"` - OOMKilled bool `json:"oomKilled,omitempty"` - Error string `json:"error,omitempty"` -} - -// GetContainerData gets the ContainerData for a container with the given name in the given store. -// If size is set to true, it will also determine the size of the container -func (c *ContainerServer) GetContainerData(name string, size bool) (*ContainerData, error) { - ctr, err := c.inspectContainer(name) - if err != nil { - return nil, errors.Wrapf(err, "error reading build container %q", name) - } - container, err := c.store.Container(name) - if err != nil { - return nil, errors.Wrapf(err, "error reading container data") - } - - // The runtime configuration won't exist if the container has never been started by cri-o or kpod, - // so treat a not-exist error as non-fatal. - m := getBlankSpec() - config, err := c.store.FromContainerDirectory(ctr.ID(), "config.json") - if err != nil && !os.IsNotExist(errors.Cause(err)) { - return nil, err - } - if len(config) > 0 { - if err = json.Unmarshal(config, &m); err != nil { - return nil, err - } - } - - if container.ImageID == "" { - return nil, errors.Errorf("error reading container image data: container is not based on an image") - } - imageData, err := images.GetData(c.store, container.ImageID) - if err != nil { - return nil, errors.Wrapf(err, "error reading container image data") - } - - driverName, err := driver.GetDriverName(c.store) - if err != nil { - return nil, err - } - topLayer, err := c.GetContainerTopLayerID(ctr.ID()) - if err != nil { - return nil, err - } - layer, err := c.store.Layer(topLayer) - if err != nil { - return nil, err - } - driverMetadata, err := driver.GetDriverMetadata(c.store, topLayer) - if err != nil { - return nil, err - } - imageName := "" - if len(imageData.Tags) > 0 { - imageName = imageData.Tags[0] - } else if len(imageData.Digests) > 0 { - imageName = imageData.Digests[0] - } - data := &ContainerData{ - ID: ctr.ID(), - Name: ctr.Name(), - LogPath: ctr.LogPath(), - Labels: ctr.Labels(), - Annotations: ctr.Annotations(), - State: c.State(ctr), - Metadata: ctr.Metadata(), - BundlePath: ctr.BundlePath(), - StopSignal: ctr.GetStopSignal(), - Args: m.Process.Args, - FromImage: imageName, - FromImageID: container.ImageID, - MountPoint: layer.MountPoint, - ImageAnnotations: imageData.Annotations, - ImageCreatedBy: imageData.CreatedBy, - Config: imageData.Config, - GraphDriver: driverData{ - Name: driverName, - Data: driverMetadata, - }, - MountLabel: m.Linux.MountLabel, - Mounts: m.Mounts, - AppArmorProfile: m.Process.ApparmorProfile, - ResolvConfPath: "", - HostnamePath: "", - HostsPath: "", - } - - if size { - sizeRootFs, err := c.GetContainerRootFsSize(data.ID) - if err != nil { - - return nil, errors.Wrapf(err, "error reading size for container %q", name) - } - data.SizeRootFs = uint(sizeRootFs) - sizeRw, err := c.GetContainerRwSize(data.ID) - if err != nil { - return nil, errors.Wrapf(err, "error reading RWSize for container %q", name) - } - data.SizeRw = uint(sizeRw) - } - - return data, nil -} - -// Get an oci.Container and update its status -func (c *ContainerServer) inspectContainer(container string) (*oci.Container, error) { - ociCtr, err := c.LookupContainer(container) - if err != nil { - return nil, err - } - // call runtime.UpdateStatus() - err = c.Runtime().UpdateStatus(ociCtr) - if err != nil { - return nil, err - } - return ociCtr, nil -} - -func getBlankSpec() specs.Spec { - return specs.Spec{ - Process: &specs.Process{}, - Root: &specs.Root{}, - Mounts: []specs.Mount{}, - Hooks: &specs.Hooks{}, - Annotations: make(map[string]string), - Linux: &specs.Linux{}, - Solaris: &specs.Solaris{}, - Windows: &specs.Windows{}, - } -} - -// State copies the crio container state to ContainerState type for kpod -func (c *ContainerServer) State(ctr *oci.Container) *ContainerState { - crioState := ctr.State() - specState := specs.State{ - Version: crioState.Version, - ID: crioState.ID, - Status: crioState.Status, - Pid: crioState.Pid, - Bundle: crioState.Bundle, - Annotations: crioState.Annotations, - } - cState := &ContainerState{ - Started: crioState.Started, - Created: crioState.Created, - Finished: crioState.Finished, - } - cState.State = specState - return cState -} diff --git a/libpod/common/common.go b/libpod/common/common.go deleted file mode 100644 index 775d391d..00000000 --- a/libpod/common/common.go +++ /dev/null @@ -1,99 +0,0 @@ -package common - -import ( - "io" - "strings" - "syscall" - - cp "github.com/containers/image/copy" - "github.com/containers/image/signature" - "github.com/containers/image/types" - "github.com/pkg/errors" -) - -var ( - // ErrNoPassword is returned if the user did not supply a password - ErrNoPassword = errors.Wrapf(syscall.EINVAL, "password was not supplied") -) - -// GetCopyOptions constructs a new containers/image/copy.Options{} struct from the given parameters -func GetCopyOptions(reportWriter io.Writer, signaturePolicyPath string, srcDockerRegistry, destDockerRegistry *DockerRegistryOptions, signing SigningOptions, authFile string) *cp.Options { - if srcDockerRegistry == nil { - srcDockerRegistry = &DockerRegistryOptions{} - } - if destDockerRegistry == nil { - destDockerRegistry = &DockerRegistryOptions{} - } - srcContext := srcDockerRegistry.GetSystemContext(signaturePolicyPath, authFile) - destContext := destDockerRegistry.GetSystemContext(signaturePolicyPath, authFile) - return &cp.Options{ - RemoveSignatures: signing.RemoveSignatures, - SignBy: signing.SignBy, - ReportWriter: reportWriter, - SourceCtx: srcContext, - DestinationCtx: destContext, - } -} - -// GetSystemContext Constructs a new containers/image/types.SystemContext{} struct from the given signaturePolicy path -func GetSystemContext(signaturePolicyPath, authFilePath string) *types.SystemContext { - sc := &types.SystemContext{} - if signaturePolicyPath != "" { - sc.SignaturePolicyPath = signaturePolicyPath - } - sc.AuthFilePath = authFilePath - return sc -} - -// CopyStringStringMap deep copies a map[string]string and returns the result -func CopyStringStringMap(m map[string]string) map[string]string { - n := map[string]string{} - for k, v := range m { - n[k] = v - } - return n -} - -// IsTrue determines whether the given string equals "true" -func IsTrue(str string) bool { - return str == "true" -} - -// IsFalse determines whether the given string equals "false" -func IsFalse(str string) bool { - return str == "false" -} - -// IsValidBool determines whether the given string equals "true" or "false" -func IsValidBool(str string) bool { - return IsTrue(str) || IsFalse(str) -} - -// GetPolicyContext creates a signature policy context for the given signature policy path -func GetPolicyContext(path string) (*signature.PolicyContext, error) { - policy, err := signature.DefaultPolicy(&types.SystemContext{SignaturePolicyPath: path}) - if err != nil { - return nil, err - } - return signature.NewPolicyContext(policy) -} - -// ParseRegistryCreds takes a credentials string in the form USERNAME:PASSWORD -// and returns a DockerAuthConfig -func ParseRegistryCreds(creds string) (*types.DockerAuthConfig, error) { - if creds == "" { - return nil, errors.New("no credentials supplied") - } - if !strings.Contains(creds, ":") { - return &types.DockerAuthConfig{ - Username: creds, - Password: "", - }, ErrNoPassword - } - v := strings.SplitN(creds, ":", 2) - cfg := &types.DockerAuthConfig{ - Username: v[0], - Password: v[1], - } - return cfg, nil -} diff --git a/libpod/common/docker_registry_options.go b/libpod/common/docker_registry_options.go deleted file mode 100644 index 24fa5c03..00000000 --- a/libpod/common/docker_registry_options.go +++ /dev/null @@ -1,34 +0,0 @@ -package common - -import "github.com/containers/image/types" - -// DockerRegistryOptions encapsulates settings that affect how we connect or -// authenticate to a remote registry. -type DockerRegistryOptions struct { - // DockerRegistryCreds is the user name and password to supply in case - // we need to pull an image from a registry, and it requires us to - // authenticate. - DockerRegistryCreds *types.DockerAuthConfig - // DockerCertPath is the location of a directory containing CA - // certificates which will be used to verify the registry's certificate - // (all files with names ending in ".crt"), and possibly client - // certificates and private keys (pairs of files with the same name, - // except for ".cert" and ".key" suffixes). - DockerCertPath string - // DockerInsecureSkipTLSVerify turns off verification of TLS - // certificates and allows connecting to registries without encryption. - DockerInsecureSkipTLSVerify bool -} - -// GetSystemContext constructs a new system context from the given signaturePolicy path and the -// values in the DockerRegistryOptions -func (o DockerRegistryOptions) GetSystemContext(signaturePolicyPath, authFile string) *types.SystemContext { - sc := &types.SystemContext{ - SignaturePolicyPath: signaturePolicyPath, - DockerAuthConfig: o.DockerRegistryCreds, - DockerCertPath: o.DockerCertPath, - DockerInsecureSkipTLSVerify: o.DockerInsecureSkipTLSVerify, - AuthFilePath: authFile, - } - return sc -} diff --git a/libpod/common/output_interfaces.go b/libpod/common/output_interfaces.go deleted file mode 100644 index 805d0c79..00000000 --- a/libpod/common/output_interfaces.go +++ /dev/null @@ -1 +0,0 @@ -package common diff --git a/libpod/common/signing_options.go b/libpod/common/signing_options.go deleted file mode 100644 index b7e14be8..00000000 --- a/libpod/common/signing_options.go +++ /dev/null @@ -1,10 +0,0 @@ -package common - -// SigningOptions encapsulates settings that control whether or not we strip or -// add signatures to images when writing them. -type SigningOptions struct { - // RemoveSignatures directs us to remove any signatures which are already present. - RemoveSignatures bool - // SignBy is a key identifier of some kind, indicating that a signature should be generated using the specified private key and stored with the image. - SignBy string -} diff --git a/libpod/container.go b/libpod/container.go deleted file mode 100644 index 27ec24e9..00000000 --- a/libpod/container.go +++ /dev/null @@ -1,454 +0,0 @@ -package libpod - -import ( - "encoding/json" - "fmt" - "io/ioutil" - "path/filepath" - "sync" - "time" - - "github.com/containers/storage" - "github.com/docker/docker/pkg/stringid" - "github.com/docker/docker/pkg/term" - crioAnnotations "github.com/kubernetes-incubator/cri-o/pkg/annotations" - spec "github.com/opencontainers/runtime-spec/specs-go" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" - "github.com/ulule/deepcopier" - "k8s.io/client-go/tools/remotecommand" -) - -// ContainerState represents the current state of a container -type ContainerState int - -const ( - // ContainerStateUnknown indicates that the container is in an error - // state where information about it cannot be retrieved - ContainerStateUnknown ContainerState = iota - // ContainerStateConfigured indicates that the container has had its - // storage configured but it has not been created in the OCI runtime - ContainerStateConfigured ContainerState = iota - // ContainerStateCreated indicates the container has been created in - // the OCI runtime but not started - ContainerStateCreated ContainerState = iota - // ContainerStateRunning indicates the container is currently executing - ContainerStateRunning ContainerState = iota - // ContainerStateStopped indicates that the container was running but has - // exited - ContainerStateStopped ContainerState = iota - // ContainerStatePaused indicates that the container has been paused - ContainerStatePaused ContainerState = iota -) - -// Container is a single OCI container -type Container struct { - config *containerConfig - - pod *Pod - runningSpec *spec.Spec - - state *containerRuntimeInfo - - // TODO move to storage.Locker from sync.Mutex - valid bool - lock sync.Mutex - runtime *Runtime -} - -// containerState contains the current state of the container -// It is stored on disk in a tmpfs and recreated on reboot -type containerRuntimeInfo struct { - // The current state of the running container - State ContainerState `json:"state"` - // The path to the JSON OCI runtime spec for this container - ConfigPath string `json:"configPath,omitempty"` - // RunDir is a per-boot directory for container content - RunDir string `json:"runDir,omitempty"` - // Mounted indicates whether the container's storage has been mounted - // for use - Mounted bool `json:"-"` - // MountPoint contains the path to the container's mounted storage - Mountpoint string `json:"mountPoint,omitempty"` - // StartedTime is the time the container was started - StartedTime time.Time `json:"startedTime,omitempty"` - // FinishedTime is the time the container finished executing - FinishedTime time.Time `json:"finishedTime,omitempty"` - // ExitCode is the exit code returned when the container stopped - ExitCode int32 `json:"exitCode,omitempty"` - - // TODO: Save information about image used in container if one is used -} - -// containerConfig contains all information that was used to create the -// container. It may not be changed once created. -// It is stored, read-only, on disk -type containerConfig struct { - Spec *spec.Spec `json:"spec"` - ID string `json:"id"` - Name string `json:"name"` - // RootfsFromImage indicates whether the container uses a root - // filesystem from an image, or from a user-provided directory - RootfsFromImage bool - // Directory used as a root filesystem if not configured with an image - RootfsDir string `json:"rootfsDir,omitempty"` - // Information on the image used for the root filesystem - RootfsImageID string `json:"rootfsImageID,omitempty"` - RootfsImageName string `json:"rootfsImageName,omitempty"` - UseImageConfig bool `json:"useImageConfig"` - // Whether to keep container STDIN open - Stdin bool - // Static directory for container content that will persist across - // reboot - StaticDir string `json:"staticDir"` - // Pod the container belongs to - Pod string `json:"pod,omitempty"` - // Labels is a set of key-value pairs providing additional information - // about a container - Labels map[string]string `json:"labels,omitempty"` - // StopSignal is the signal that will be used to stop the container - StopSignal uint `json:"stopSignal,omitempty"` - // Shared namespaces with container - SharedNamespaceCtr *string `json:"shareNamespacesWith,omitempty"` - SharedNamespaceMap map[string]string `json:"sharedNamespaces"` - // Time container was created - CreatedTime time.Time `json:"createdTime"` - - // TODO save log location here and pass into OCI code - // TODO allow overriding of log path -} - -// ID returns the container's ID -func (c *Container) ID() string { - return c.config.ID -} - -// Name returns the container's name -func (c *Container) Name() string { - return c.config.Name -} - -// Spec returns the container's OCI runtime spec -// The spec returned is the one used to create the container. The running -// spec may differ slightly as mounts are added based on the image -func (c *Container) Spec() *spec.Spec { - spec := new(spec.Spec) - deepcopier.Copy(c.config.Spec).To(spec) - - return spec -} - -// Labels returns the container's labels -func (c *Container) Labels() map[string]string { - labels := make(map[string]string) - for key, value := range c.config.Labels { - labels[key] = value - } - - return labels -} - -// State returns the current state of the container -func (c *Container) State() (ContainerState, error) { - c.lock.Lock() - defer c.lock.Unlock() - - // TODO uncomment when working - // if err := c.runtime.ociRuntime.updateContainerStatus(c); err != nil { - // return ContainerStateUnknown, err - // } - - return c.state.State, nil -} - -// The path to the container's root filesystem - where the OCI spec will be -// placed, amongst other things -func (c *Container) bundlePath() string { - return c.state.RunDir -} - -// Retrieves the path of the container's attach socket -func (c *Container) attachSocketPath() string { - return filepath.Join(c.runtime.ociRuntime.socketsDir, c.ID(), "attach") -} - -// Make a new container -func newContainer(rspec *spec.Spec) (*Container, error) { - if rspec == nil { - return nil, errors.Wrapf(ErrInvalidArg, "must provide a valid runtime spec to create container") - } - - ctr := new(Container) - ctr.config = new(containerConfig) - ctr.state = new(containerRuntimeInfo) - - ctr.config.ID = stringid.GenerateNonCryptoID() - ctr.config.Name = ctr.config.ID // TODO generate unique human-readable names - - ctr.config.Spec = new(spec.Spec) - deepcopier.Copy(rspec).To(ctr.config.Spec) - - ctr.config.CreatedTime = time.Now() - - return ctr, nil -} - -// Create container root filesystem for use -func (c *Container) setupStorage() error { - c.lock.Lock() - defer c.lock.Unlock() - - if !c.valid { - return errors.Wrapf(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()) - } - - // If we're configured to use a directory, perform that setup - if !c.config.RootfsFromImage { - // TODO implement directory-based root filesystems - return ErrNotImplemented - } - - // Not using a directory, so call into containers/storage - return c.setupImageRootfs() -} - -// Set up an image as root filesystem using containers/storage -func (c *Container) setupImageRootfs() error { - // Need both an image ID and image name, plus a bool telling us whether to use the image configuration - if c.config.RootfsImageID == "" || c.config.RootfsImageName == "" { - return errors.Wrapf(ErrInvalidArg, "must provide image ID and image name to use an image") - } - - // TODO SELinux mount label - containerInfo, err := c.runtime.storageService.CreateContainerStorage(c.runtime.imageContext, c.config.RootfsImageName, c.config.RootfsImageID, c.config.Name, c.config.ID, "") - if err != nil { - return errors.Wrapf(err, "error creating container storage") - } - - c.config.StaticDir = containerInfo.Dir - c.state.RunDir = containerInfo.RunDir - - return nil -} - -// Tear down a container's storage prior to removal -func (c *Container) teardownStorage() error { - c.lock.Lock() - defer c.lock.Unlock() - - if !c.valid { - return errors.Wrapf(ErrCtrRemoved, "container %s is not valid", c.ID()) - } - - 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()) - } - - if !c.config.RootfsFromImage { - // TODO implement directory-based root filesystems - return ErrNotImplemented - } - - return c.teardownImageRootfs() -} - -// Completely remove image-based root filesystem for a container -func (c *Container) teardownImageRootfs() error { - if c.state.Mounted { - if err := c.runtime.storageService.StopContainer(c.ID()); err != nil { - return errors.Wrapf(err, "error unmounting container %s root filesystem", c.ID()) - } - - c.state.Mounted = false - } - - if err := c.runtime.storageService.DeleteContainer(c.ID()); err != nil { - return errors.Wrapf(err, "error removing container %s root filesystem", c.ID()) - } - - return nil -} - -// Create creates a container in the OCI runtime -func (c *Container) Create() (err error) { - c.lock.Lock() - defer c.lock.Unlock() - - if !c.valid { - return errors.Wrapf(ErrCtrRemoved, "container %s is not valid", c.ID()) - } - - if c.state.State != ContainerStateConfigured { - return errors.Wrapf(ErrCtrExists, "container %s has already been created in runtime", c.ID()) - } - - // If using containers/storage, mount the container - if !c.config.RootfsFromImage { - // TODO implement directory-based root filesystems - if !c.state.Mounted { - return ErrNotImplemented - } - } else { - mountPoint, err := c.runtime.storageService.StartContainer(c.ID()) - if err != nil { - return errors.Wrapf(err, "error mounting storage for container %s", c.ID()) - } - c.state.Mounted = true - c.state.Mountpoint = mountPoint - - logrus.Debugf("Created root filesystem for container %s at %s", c.ID(), c.state.Mountpoint) - - defer func() { - if err != nil { - if err2 := c.runtime.storageService.StopContainer(c.ID()); err2 != nil { - logrus.Errorf("Error unmounting storage for container %s: %v", c.ID(), err2) - } - - c.state.Mounted = false - c.state.Mountpoint = "" - } - }() - } - - // Make the OCI runtime spec we will use - c.runningSpec = new(spec.Spec) - deepcopier.Copy(c.config.Spec).To(c.runningSpec) - c.runningSpec.Root.Path = c.state.Mountpoint - c.runningSpec.Annotations[crioAnnotations.Created] = c.config.CreatedTime.Format(time.RFC3339Nano) - c.runningSpec.Annotations["org.opencontainers.image.stopSignal"] = fmt.Sprintf("%d", c.config.StopSignal) - - // Save the OCI spec to disk - jsonPath := filepath.Join(c.bundlePath(), "config.json") - fileJSON, err := json.Marshal(c.runningSpec) - if err != nil { - return errors.Wrapf(err, "error exporting runtime spec for container %s to JSON", c.ID()) - } - if err := ioutil.WriteFile(jsonPath, fileJSON, 0644); err != nil { - return errors.Wrapf(err, "error writing runtime spec JSON to file for container %s", c.ID()) - } - c.state.ConfigPath = jsonPath - - logrus.Debugf("Created OCI spec for container %s at %s", c.ID(), jsonPath) - - // With the spec complete, do an OCI create - // TODO set cgroup parent in a sane fashion - if err := c.runtime.ociRuntime.createContainer(c, "/libpod_parent"); err != nil { - return err - } - - logrus.Debugf("Created container %s in runc", c.ID()) - - // TODO should flush this state to disk here - c.state.State = ContainerStateCreated - - return nil -} - -// Start starts a container -func (c *Container) Start() error { - c.lock.Lock() - defer c.lock.Unlock() - - if !c.valid { - return ErrCtrRemoved - } - - // Container must be created or stopped to be started - if !(c.state.State == ContainerStateCreated || c.state.State == ContainerStateStopped) { - return errors.Wrapf(ErrCtrStateInvalid, "container %s must be in Created or Stopped state to be started", c.ID()) - } - - if err := c.runtime.ociRuntime.startContainer(c); err != nil { - return err - } - - logrus.Debugf("Started container %s", c.ID()) - - // TODO should flush state to disk here - c.state.StartedTime = time.Now() - c.state.State = ContainerStateRunning - - return nil -} - -// Stop stops a container -func (c *Container) Stop() error { - return ErrNotImplemented -} - -// Kill sends a signal to a container -func (c *Container) Kill(signal uint) error { - return ErrNotImplemented -} - -// Exec starts a new process inside the container -// Returns fully qualified URL of streaming server for executed process -func (c *Container) Exec(cmd []string, tty bool, stdin bool) (string, error) { - return "", ErrNotImplemented -} - -// Attach attaches to a container -// Returns fully qualified URL of streaming server for the container -func (c *Container) Attach(noStdin bool, keys string) error { - // Check the validity of the provided keys first - var err error - detachKeys := []byte{} - if len(keys) > 0 { - detachKeys, err = term.ToBytes(keys) - if err != nil { - return errors.Wrapf(err, "invalid detach keys") - } - } - cStatus := c.state.State - - if !(cStatus == ContainerStateRunning || cStatus == ContainerStateCreated) { - return errors.Errorf("%s is not created or running", c.Name()) - } - resize := make(chan remotecommand.TerminalSize) - defer close(resize) - err = c.attachContainerSocket(resize, noStdin, detachKeys) - if err != nil { - return err - } - // TODO - // Re-enable this when mheon is done wth it - //c.ContainerStateToDisk(c) - - return nil -} - -// Mount mounts a container's filesystem on the host -// The path where the container has been mounted is returned -func (c *Container) Mount() (string, error) { - return "", ErrNotImplemented -} - -// Pause pauses a container -func (c *Container) Pause() error { - return ErrNotImplemented -} - -// Unpause unpauses a container -func (c *Container) Unpause() error { - return ErrNotImplemented -} - -// Export exports a container's root filesystem as a tar archive -// The archive will be saved as a file at the given path -func (c *Container) Export(path string) error { - return ErrNotImplemented -} - -// Commit commits the changes between a container and its image, creating a new -// image -// If the container was not created from an image (for example, -// WithRootFSFromPath will create a container from a directory on the system), -// a new base image will be created from the contents of the container's -// filesystem -func (c *Container) Commit() (*storage.Image, error) { - return nil, ErrNotImplemented -} diff --git a/libpod/container_attach.go b/libpod/container_attach.go deleted file mode 100644 index b2a40702..00000000 --- a/libpod/container_attach.go +++ /dev/null @@ -1,142 +0,0 @@ -package libpod - -import ( - "fmt" - "io" - "net" - "os" - "path/filepath" - "strconv" - - "github.com/docker/docker/pkg/term" - "github.com/kubernetes-incubator/cri-o/utils" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" - "golang.org/x/sys/unix" - "k8s.io/client-go/tools/remotecommand" - kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" -) - -/* Sync with stdpipe_t in conmon.c */ -const ( - AttachPipeStdin = 1 - AttachPipeStdout = 2 - AttachPipeStderr = 3 -) - -// attachContainerSocket connects to the container's attach socket and deals with the IO -func (c *Container) attachContainerSocket(resize <-chan remotecommand.TerminalSize, noStdIn bool, detachKeys []byte) error { - inputStream := os.Stdin - outputStream := os.Stdout - errorStream := os.Stderr - defer inputStream.Close() - tty, err := strconv.ParseBool(c.runningSpec.Annotations["io.kubernetes.cri-o.TTY"]) - if err != nil { - return errors.Wrapf(err, "unable to parse annotations in %s", c.ID) - } - if !tty { - return errors.Errorf("no tty available for %s", c.ID()) - } - - oldTermState, err := term.SaveState(inputStream.Fd()) - if err != nil { - return errors.Wrapf(err, "unable to save terminal state") - } - - defer term.RestoreTerminal(inputStream.Fd(), oldTermState) - - // Put both input and output into raw - if !noStdIn { - term.SetRawTerminal(inputStream.Fd()) - } - - controlPath := filepath.Join(c.state.RunDir, "ctl") - controlFile, err := os.OpenFile(controlPath, unix.O_WRONLY, 0) - if err != nil { - return errors.Wrapf(err, "failed to open container ctl file: %v") - } - - kubecontainer.HandleResizing(resize, func(size remotecommand.TerminalSize) { - logrus.Debugf("Received a resize event: %+v", size) - _, err := fmt.Fprintf(controlFile, "%d %d %d\n", 1, size.Height, size.Width) - if err != nil { - logrus.Warnf("Failed to write to control file to resize terminal: %v", err) - } - }) - logrus.Debug("connecting to socket ", c.attachSocketPath()) - - conn, err := net.DialUnix("unixpacket", nil, &net.UnixAddr{Name: c.attachSocketPath(), Net: "unixpacket"}) - if err != nil { - return errors.Wrapf(err, "failed to connect to container's attach socket: %v") - } - defer conn.Close() - - receiveStdoutError := make(chan error) - if outputStream != nil || errorStream != nil { - go func() { - receiveStdoutError <- redirectResponseToOutputStreams(outputStream, errorStream, conn) - }() - } - - stdinDone := make(chan error) - go func() { - var err error - if inputStream != nil && !noStdIn { - _, err = utils.CopyDetachable(conn, inputStream, detachKeys) - conn.CloseWrite() - } - stdinDone <- err - }() - - select { - case err := <-receiveStdoutError: - return err - case err := <-stdinDone: - if _, ok := err.(utils.DetachError); ok { - return nil - } - if outputStream != nil || errorStream != nil { - return <-receiveStdoutError - } - } - return nil -} - -func redirectResponseToOutputStreams(outputStream, errorStream io.Writer, conn io.Reader) error { - var err error - buf := make([]byte, 8192+1) /* Sync with conmon STDIO_BUF_SIZE */ - for { - nr, er := conn.Read(buf) - if nr > 0 { - var dst io.Writer - switch buf[0] { - case AttachPipeStdout: - dst = outputStream - case AttachPipeStderr: - dst = errorStream - default: - logrus.Infof("Received unexpected attach type %+d", buf[0]) - } - - if dst != nil { - nw, ew := dst.Write(buf[1:nr]) - if ew != nil { - err = ew - break - } - if nr != nw+1 { - err = io.ErrShortWrite - break - } - } - } - if er == io.EOF { - break - } - if er != nil { - err = er - break - } - } - return err -} diff --git a/libpod/diff.go b/libpod/diff.go deleted file mode 100644 index 055bb7fe..00000000 --- a/libpod/diff.go +++ /dev/null @@ -1,53 +0,0 @@ -package libpod - -import ( - "github.com/containers/storage/pkg/archive" - "github.com/kubernetes-incubator/cri-o/libpod/layers" - "github.com/pkg/errors" -) - -// GetDiff returns the differences between the two images, layers, or containers -func (r *Runtime) GetDiff(from, to string) ([]archive.Change, error) { - toLayer, err := r.getLayerID(to) - if err != nil { - return nil, err - } - fromLayer := "" - if from != "" { - fromLayer, err = r.getLayerID(from) - if err != nil { - return nil, err - } - } - return r.store.Changes(fromLayer, toLayer) -} - -// GetLayerID gets a full layer id given a full or partial id -// If the id matches a container or image, the id of the top layer is returned -// If the id matches a layer, the top layer id is returned -func (r *Runtime) getLayerID(id string) (string, error) { - var toLayer string - toImage, err := r.GetImage(id) - if err != nil { - toCtr, err := r.store.Container(id) - if err != nil { - toLayer, err = layers.FullID(r.store, id) - if err != nil { - return "", errors.Errorf("layer, image, or container %s does not exist", id) - } - } else { - toLayer = toCtr.LayerID - } - } else { - toLayer = toImage.TopLayer - } - return toLayer, nil -} - -func (r *Runtime) getLayerParent(layerID string) (string, error) { - layer, err := r.store.Layer(layerID) - if err != nil { - return "", err - } - return layer.Parent, nil -} diff --git a/libpod/driver/driver.go b/libpod/driver/driver.go deleted file mode 100644 index 4db55852..00000000 --- a/libpod/driver/driver.go +++ /dev/null @@ -1,27 +0,0 @@ -package driver - -import cstorage "github.com/containers/storage" - -// Data handles the data for a storage driver -type Data struct { - Name string - Data map[string]string -} - -// GetDriverName returns the name of the driver for the given store -func GetDriverName(store cstorage.Store) (string, error) { - driver, err := store.GraphDriver() - if err != nil { - return "", err - } - return driver.String(), nil -} - -// GetDriverMetadata returns the metadata regarding the driver for the layer in the given store -func GetDriverMetadata(store cstorage.Store, layerID string) (map[string]string, error) { - driver, err := store.GraphDriver() - if err != nil { - return nil, err - } - return driver.Metadata(layerID) -} diff --git a/libpod/errors.go b/libpod/errors.go deleted file mode 100644 index 24544500..00000000 --- a/libpod/errors.go +++ /dev/null @@ -1,62 +0,0 @@ -package libpod - -import ( - "errors" -) - -var ( - // ErrNoSuchCtr indicates the requested container does not exist - ErrNoSuchCtr = errors.New("no such container") - // ErrNoSuchPod indicates the requested pod does not exist - ErrNoSuchPod = errors.New("no such pod") - // ErrNoSuchImage indicates the requested image does not exist - ErrNoSuchImage = errors.New("no such image") - - // ErrCtrExists indicates a container with the same name or ID already - // exists - ErrCtrExists = errors.New("container already exists") - // ErrPodExists indicates a pod with the same name or ID already exists - ErrPodExists = errors.New("pod already exists") - // ErrImageExists indicated an image with the same ID already exists - ErrImageExists = errors.New("image already exists") - - // ErrCtrStateInvalid indicates a container is in an improper state for - // the requested operation - ErrCtrStateInvalid = errors.New("container state improper") - - // ErrRuntimeFinalized indicates that the runtime has already been - // created and cannot be modified - ErrRuntimeFinalized = errors.New("runtime has been finalized") - // ErrCtrFinalized indicates that the container has already been created - // and cannot be modified - ErrCtrFinalized = errors.New("container has been finalized") - // ErrPodFinalized indicates that the pod has already been created and - // cannot be modified - ErrPodFinalized = errors.New("pod has been finalized") - - // ErrInvalidArg indicates that an invalid argument was passed - ErrInvalidArg = errors.New("invalid argument") - // ErrEmptyID indicates that an empty ID was passed - ErrEmptyID = errors.New("name or ID cannot be empty") - - // ErrInternal indicates an internal library error - ErrInternal = errors.New("internal libpod error") - - // ErrRuntimeStopped indicates that the runtime has already been shut - // down and no further operations can be performed on it - ErrRuntimeStopped = errors.New("runtime has already been stopped") - // ErrCtrStopped indicates that the requested container is not running - // and the requested operation cannot be performed until it is started - ErrCtrStopped = errors.New("container is stopped") - - // ErrCtrRemoved indicates that the container has already been removed - // and no further operations can be performed on it - ErrCtrRemoved = errors.New("container has already been removed") - // ErrPodRemoved indicates that the pod has already been removed and no - // further operations can be performed on it - ErrPodRemoved = errors.New("pod has already been removed") - - // ErrNotImplemented indicates that the requested functionality is not - // yet present - ErrNotImplemented = errors.New("not yet implemented") -) diff --git a/libpod/images/image_data.go b/libpod/images/image_data.go deleted file mode 100644 index 12fb1e77..00000000 --- a/libpod/images/image_data.go +++ /dev/null @@ -1,203 +0,0 @@ -package images - -import ( - "encoding/json" - "time" - - "github.com/containers/image/docker/reference" - is "github.com/containers/image/storage" - "github.com/containers/image/transports" - "github.com/containers/image/types" - "github.com/containers/storage" - "github.com/kubernetes-incubator/cri-o/libpod/driver" - digest "github.com/opencontainers/go-digest" - ociv1 "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/pkg/errors" -) - -// Data handles the data used when inspecting a container -// nolint -type Data struct { - ID string - Tags []string - Digests []string - Digest digest.Digest - Comment string - Created *time.Time - Container string - Author string - Config ociv1.ImageConfig - Architecture string - OS string - Annotations map[string]string - CreatedBy string - Size uint - VirtualSize uint - GraphDriver driver.Data - RootFS ociv1.RootFS -} - -// ParseImageNames parses the names we've stored with an image into a list of -// tagged references and a list of references which contain digests. -func ParseImageNames(names []string) (tags, digests []string, err error) { - for _, name := range names { - if named, err := reference.ParseNamed(name); err == nil { - if digested, ok := named.(reference.Digested); ok { - canonical, err := reference.WithDigest(named, digested.Digest()) - if err == nil { - digests = append(digests, canonical.String()) - } - } else { - if reference.IsNameOnly(named) { - named = reference.TagNameOnly(named) - } - if tagged, ok := named.(reference.Tagged); ok { - namedTagged, err := reference.WithTag(named, tagged.Tag()) - if err == nil { - tags = append(tags, namedTagged.String()) - } - } - } - } - } - return tags, digests, nil -} - -func annotations(manifest []byte, manifestType string) map[string]string { - annotations := make(map[string]string) - switch manifestType { - case ociv1.MediaTypeImageManifest: - var m ociv1.Manifest - if err := json.Unmarshal(manifest, &m); err == nil { - for k, v := range m.Annotations { - annotations[k] = v - } - } - } - return annotations -} - -// GetData gets the Data for a container with the given name in the given store. -func GetData(store storage.Store, name string) (*Data, error) { - img, err := FindImage(store, name) - if err != nil { - return nil, errors.Wrapf(err, "error reading image %q", name) - } - - imgRef, err := FindImageRef(store, "@"+img.ID) - if err != nil { - return nil, errors.Wrapf(err, "error reading image %q", img.ID) - } - defer imgRef.Close() - - tags, digests, err := ParseImageNames(img.Names) - if err != nil { - return nil, errors.Wrapf(err, "error parsing image names for %q", name) - } - - driverName, err := driver.GetDriverName(store) - if err != nil { - return nil, errors.Wrapf(err, "error reading name of storage driver") - } - - topLayerID := img.TopLayer - - driverMetadata, err := driver.GetDriverMetadata(store, topLayerID) - if err != nil { - return nil, errors.Wrapf(err, "error asking storage driver %q for metadata", driverName) - } - - layer, err := store.Layer(topLayerID) - if err != nil { - return nil, errors.Wrapf(err, "error reading information about layer %q", topLayerID) - } - size, err := store.DiffSize(layer.Parent, layer.ID) - if err != nil { - return nil, errors.Wrapf(err, "error determining size of layer %q", layer.ID) - } - - imgSize, err := imgRef.Size() - if err != nil { - return nil, errors.Wrapf(err, "error determining size of image %q", transports.ImageName(imgRef.Reference())) - } - - manifest, manifestType, err := imgRef.Manifest() - if err != nil { - return nil, errors.Wrapf(err, "error reading manifest for image %q", img.ID) - } - manifestDigest := digest.Digest("") - if len(manifest) > 0 { - manifestDigest = digest.Canonical.FromBytes(manifest) - } - annotations := annotations(manifest, manifestType) - - config, err := imgRef.OCIConfig() - if err != nil { - return nil, errors.Wrapf(err, "error reading image configuration for %q", img.ID) - } - historyComment := "" - historyCreatedBy := "" - if len(config.History) > 0 { - historyComment = config.History[len(config.History)-1].Comment - historyCreatedBy = config.History[len(config.History)-1].CreatedBy - } - - return &Data{ - ID: img.ID, - Tags: tags, - Digests: digests, - Digest: manifestDigest, - Comment: historyComment, - Created: config.Created, - Author: config.Author, - Config: config.Config, - Architecture: config.Architecture, - OS: config.OS, - Annotations: annotations, - CreatedBy: historyCreatedBy, - Size: uint(size), - VirtualSize: uint(size + imgSize), - GraphDriver: driver.Data{ - Name: driverName, - Data: driverMetadata, - }, - RootFS: config.RootFS, - }, nil -} - -// FindImage searches for a *storage.Image with a matching the given name or ID in the given store. -func FindImage(store storage.Store, image string) (*storage.Image, error) { - var img *storage.Image - ref, err := is.Transport.ParseStoreReference(store, image) - if err == nil { - img, err = is.Transport.GetStoreImage(store, ref) - } - if err != nil { - img2, err2 := store.Image(image) - if err2 != nil { - if ref == nil { - return nil, errors.Wrapf(err, "error parsing reference to image %q", image) - } - return nil, errors.Wrapf(err, "unable to locate image %q", image) - } - img = img2 - } - return img, nil -} - -// FindImageRef searches for and returns a new types.Image matching the given name or ID in the given store. -func FindImageRef(store storage.Store, image string) (types.Image, error) { - img, err := FindImage(store, image) - if err != nil { - return nil, errors.Wrapf(err, "unable to locate image %q", image) - } - ref, err := is.Transport.ParseStoreReference(store, "@"+img.ID) - if err != nil { - return nil, errors.Wrapf(err, "error parsing reference to image %q", img.ID) - } - imgRef, err := ref.NewImage(nil) - if err != nil { - return nil, errors.Wrapf(err, "error reading image %q", img.ID) - } - return imgRef, nil -} diff --git a/libpod/in_memory_state.go b/libpod/in_memory_state.go deleted file mode 100644 index b8747d4e..00000000 --- a/libpod/in_memory_state.go +++ /dev/null @@ -1,273 +0,0 @@ -package libpod - -import ( - "github.com/docker/docker/pkg/truncindex" - "github.com/kubernetes-incubator/cri-o/pkg/registrar" - "github.com/pkg/errors" -) - -// An InMemoryState is a purely in-memory state store -type InMemoryState struct { - pods map[string]*Pod - containers map[string]*Container - podNameIndex *registrar.Registrar - podIDIndex *truncindex.TruncIndex - ctrNameIndex *registrar.Registrar - ctrIDIndex *truncindex.TruncIndex -} - -// NewInMemoryState initializes a new, empty in-memory state -func NewInMemoryState() (State, error) { - state := new(InMemoryState) - - state.pods = make(map[string]*Pod) - state.containers = make(map[string]*Container) - - state.podNameIndex = registrar.NewRegistrar() - state.ctrNameIndex = registrar.NewRegistrar() - - state.podIDIndex = truncindex.NewTruncIndex([]string{}) - state.ctrIDIndex = truncindex.NewTruncIndex([]string{}) - - return state, nil -} - -// Container retrieves a container from its full ID -func (s *InMemoryState) Container(id string) (*Container, error) { - if id == "" { - return nil, ErrEmptyID - } - - ctr, ok := s.containers[id] - if !ok { - return nil, errors.Wrapf(ErrNoSuchCtr, "no container with ID %s found", id) - } - - return ctr, nil -} - -// LookupContainer retrieves a container by full ID, unique partial ID, or name -func (s *InMemoryState) LookupContainer(idOrName string) (*Container, error) { - if idOrName == "" { - return nil, ErrEmptyID - } - - fullID, err := s.ctrNameIndex.Get(idOrName) - if err != nil { - if err == registrar.ErrNameNotReserved { - // What was passed is not a name, assume it's an ID - fullID, err = s.ctrIDIndex.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(err, "error performing truncindex lookup for ID %s", idOrName) - } - } else { - return nil, errors.Wrapf(err, "error performing registry lookup for ID %s", idOrName) - } - } - - ctr, ok := s.containers[fullID] - if !ok { - // This should never happen - return nil, errors.Wrapf(ErrInternal, "mismatch in container ID registry and containers map for ID %s", fullID) - } - - return ctr, nil -} - -// 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 - } - - _, ok := s.containers[id] - - return ok, nil -} - -// AddContainer adds a container to the state -// If the container belongs to a pod, the pod must already be present when the -// container is added, and the container must be present in the pod -func (s *InMemoryState) AddContainer(ctr *Container) error { - if !ctr.valid { - return errors.Wrapf(ErrCtrRemoved, "container with ID %s is not valid", ctr.ID()) - } - - _, ok := s.containers[ctr.ID()] - if ok { - return errors.Wrapf(ErrCtrExists, "container with ID %s already exists in state", ctr.ID()) - } - - if ctr.pod != nil { - if _, ok := s.pods[ctr.pod.ID()]; !ok { - return errors.Wrapf(ErrNoSuchPod, "pod %s does not exist, cannot add container %s", ctr.pod.ID(), ctr.ID()) - } - - hasCtr, err := ctr.pod.HasContainer(ctr.ID()) - if err != nil { - return errors.Wrapf(err, "error checking if container %s is present in pod %s", ctr.ID(), ctr.pod.ID()) - } else if !hasCtr { - return errors.Wrapf(ErrNoSuchCtr, "container %s is not present in pod %s", ctr.ID(), ctr.pod.ID()) - } - } - - if err := s.ctrNameIndex.Reserve(ctr.Name(), ctr.ID()); err != nil { - return errors.Wrapf(err, "error registering container name %s", ctr.Name()) - } - - if err := s.ctrIDIndex.Add(ctr.ID()); err != nil { - s.ctrNameIndex.Release(ctr.Name()) - return errors.Wrapf(err, "error registering container ID %s", ctr.ID()) - } - - s.containers[ctr.ID()] = ctr - - return nil -} - -// RemoveContainer removes a container from the state -// The container will only be removed from the state, not from the pod the container belongs to -func (s *InMemoryState) RemoveContainer(ctr *Container) error { - // Almost no validity checks are performed, to ensure we can kick - // misbehaving containers out of the state - - if _, ok := s.containers[ctr.ID()]; !ok { - return errors.Wrapf(ErrNoSuchCtr, "no container exists in state with ID %s", ctr.ID()) - } - - if err := s.ctrIDIndex.Delete(ctr.ID()); err != nil { - return errors.Wrapf(err, "error removing container ID from index") - } - delete(s.containers, ctr.ID()) - s.ctrNameIndex.Release(ctr.Name()) - - return nil -} - -// AllContainers retrieves all containers from the state -func (s *InMemoryState) AllContainers() ([]*Container, error) { - ctrs := make([]*Container, 0, len(s.containers)) - for _, ctr := range s.containers { - ctrs = append(ctrs, ctr) - } - - return ctrs, nil -} - -// Pod retrieves a pod from the state from its full ID -func (s *InMemoryState) Pod(id string) (*Pod, error) { - if id == "" { - return nil, ErrEmptyID - } - - pod, ok := s.pods[id] - if !ok { - return nil, errors.Wrapf(ErrNoSuchPod, "no pod with id %s found", id) - } - - return pod, nil -} - -// LookupPod retrieves a pod from the state from a full or unique partial ID or -// a full name -func (s *InMemoryState) LookupPod(idOrName string) (*Pod, error) { - if idOrName == "" { - return nil, ErrEmptyID - } - - fullID, err := s.podNameIndex.Get(idOrName) - if err != nil { - if err == registrar.ErrNameNotReserved { - // What was passed is not a name, assume it's an ID - fullID, err = s.podIDIndex.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(err, "error performing truncindex lookup for ID %s", idOrName) - } - } else { - return nil, errors.Wrapf(err, "error performing registry lookup for ID %s", idOrName) - } - } - - pod, ok := s.pods[fullID] - if !ok { - // This should never happen - return nil, errors.Wrapf(ErrInternal, "mismatch in pod ID registry and pod map for ID %s", fullID) - } - - return pod, nil -} - -// 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 - } - - _, ok := s.pods[id] - - return ok, nil -} - -// AddPod adds a given pod to the state -// Only empty pods can be added 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()) - } - - if _, ok := s.pods[pod.ID()]; ok { - return errors.Wrapf(ErrPodExists, "pod with ID %s already exists in state", pod.ID()) - } - - if len(pod.containers) != 0 { - return errors.Wrapf(ErrInternal, "only empty pods can be added to the state") - } - - if err := s.podNameIndex.Reserve(pod.Name(), pod.ID()); err != nil { - return errors.Wrapf(err, "error registering pod name %s", pod.Name()) - } - - if err := s.podIDIndex.Add(pod.ID()); err != nil { - s.podNameIndex.Release(pod.Name()) - return errors.Wrapf(err, "error registering pod ID %s", pod.ID()) - } - - s.pods[pod.ID()] = pod - - return nil -} - -// RemovePod removes a given pod from the state -// Containers within the pod will not be removed or changed -func (s *InMemoryState) RemovePod(pod *Pod) error { - // Don't make many validity checks to ensure we can kick badly formed - // pods out of the state - - if _, ok := s.pods[pod.ID()]; !ok { - return errors.Wrapf(ErrNoSuchPod, "no pod exists in state with ID %s", pod.ID()) - } - - if err := s.podIDIndex.Delete(pod.ID()); err != nil { - return errors.Wrapf(err, "error removing pod ID %s from index", pod.ID()) - } - delete(s.pods, pod.ID()) - s.podNameIndex.Release(pod.Name()) - - return nil -} - -// AllPods retrieves all pods currently in the state -func (s *InMemoryState) AllPods() ([]*Pod, error) { - pods := make([]*Pod, 0, len(s.pods)) - for _, pod := range s.pods { - pods = append(pods, pod) - } - - return pods, nil -} diff --git a/libpod/layers/layer.go b/libpod/layers/layer.go deleted file mode 100644 index 865cbe70..00000000 --- a/libpod/layers/layer.go +++ /dev/null @@ -1,12 +0,0 @@ -package layers - -import cstorage "github.com/containers/storage" - -// FullID gets the full id of a layer given a partial id or name -func FullID(store cstorage.Store, id string) (string, error) { - layer, err := store.Layer(id) - if err != nil { - return "", err - } - return layer.ID, nil -} diff --git a/libpod/oci.go b/libpod/oci.go deleted file mode 100644 index 0ed1c1f6..00000000 --- a/libpod/oci.go +++ /dev/null @@ -1,273 +0,0 @@ -package libpod - -import ( - "bytes" - "encoding/json" - "fmt" - "os" - "os/exec" - "path/filepath" - "syscall" - "time" - - "github.com/containerd/cgroups" - spec "github.com/opencontainers/runtime-spec/specs-go" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" - "golang.org/x/sys/unix" - - // TODO import these functions into libpod and remove the import - // Trying to keep libpod from depending on CRI-O code - "github.com/kubernetes-incubator/cri-o/utils" -) - -// OCI code is undergoing heavy rewrite - -const ( - // CgroupfsCgroupsManager represents cgroupfs native cgroup manager - CgroupfsCgroupsManager = "cgroupfs" - // SystemdCgroupsManager represents systemd native cgroup manager - SystemdCgroupsManager = "systemd" - - // ContainerCreateTimeout represents the value of container creating timeout - ContainerCreateTimeout = 240 * time.Second -) - -// OCIRuntime represents an OCI-compatible runtime that libpod can call into -// to perform container operations -type OCIRuntime struct { - name string - path string - conmonPath string - conmonEnv []string - cgroupManager string - tmpDir string - exitsDir string - socketsDir string - logSizeMax int64 - noPivot bool -} - -// syncInfo is used to return data from monitor process to daemon -type syncInfo struct { - Pid int `json:"pid"` - Message string `json:"message,omitempty"` -} - -// Make a new OCI runtime with provided options -func newOCIRuntime(name string, path string, conmonPath string, conmonEnv []string, cgroupManager string, tmpDir string, logSizeMax int64, noPivotRoot bool) (*OCIRuntime, error) { - runtime := new(OCIRuntime) - runtime.name = name - runtime.path = path - runtime.conmonPath = conmonPath - runtime.conmonEnv = conmonEnv - runtime.cgroupManager = cgroupManager - runtime.tmpDir = tmpDir - runtime.logSizeMax = logSizeMax - runtime.noPivot = noPivotRoot - - runtime.exitsDir = filepath.Join(runtime.tmpDir, "exits") - runtime.socketsDir = filepath.Join(runtime.tmpDir, "socket") - - if cgroupManager != CgroupfsCgroupsManager && cgroupManager != SystemdCgroupsManager { - return nil, errors.Wrapf(ErrInvalidArg, "invalid cgroup manager specified: %s", cgroupManager) - } - - // Create the exit files and attach sockets directories - if err := os.MkdirAll(runtime.exitsDir, 0750); err != nil { - // The directory is allowed to exist - if !os.IsExist(err) { - return nil, errors.Wrapf(err, "error creating OCI runtime exit files directory %s", - runtime.exitsDir) - } - } - if err := os.MkdirAll(runtime.socketsDir, 0750); err != nil { - // The directory is allowed to exist - if !os.IsExist(err) { - return nil, errors.Wrapf(err, "error creating OCI runtime attach sockets directory %s", - runtime.socketsDir) - } - } - - return runtime, nil -} - -// newPipe creates a unix socket pair for communication -func newPipe() (parent *os.File, child *os.File, err error) { - fds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM|unix.SOCK_CLOEXEC, 0) - if err != nil { - return nil, nil, err - } - return os.NewFile(uintptr(fds[1]), "parent"), os.NewFile(uintptr(fds[0]), "child"), nil -} - -// Create systemd unit name for cgroup scopes -func createUnitName(prefix string, name string) string { - return fmt.Sprintf("%s-%s.scope", prefix, name) -} - -// CreateContainer creates a container in the OCI runtime -// TODO terminal support for container -// Presently just ignoring conmon opts related to it -func (r *OCIRuntime) createContainer(ctr *Container, cgroupParent string) error { - var stderrBuf bytes.Buffer - - parentPipe, childPipe, err := newPipe() - if err != nil { - return errors.Wrapf(err, "error creating socket pair") - } - - childStartPipe, parentStartPipe, err := newPipe() - if err != nil { - return errors.Wrapf(err, "error creating socket pair for start pipe") - } - - defer parentPipe.Close() - defer parentStartPipe.Close() - - args := []string{} - if r.cgroupManager == SystemdCgroupsManager { - args = append(args, "-s") - } - args = append(args, "-c", ctr.ID()) - args = append(args, "-u", ctr.ID()) - args = append(args, "-r", r.path) - args = append(args, "-b", ctr.bundlePath()) - args = append(args, "-p", filepath.Join(ctr.state.RunDir, "pidfile")) - // TODO container log location should be configurable - // The default also likely shouldn't be this - args = append(args, "-l", filepath.Join(ctr.config.StaticDir, "ctr.log")) - args = append(args, "--exit-dir", r.exitsDir) - args = append(args, "--socket-dir-path", r.socketsDir) - if ctr.config.Spec.Process.Terminal { - args = append(args, "-t") - } else if ctr.config.Stdin { - args = append(args, "-i") - } - if r.logSizeMax >= 0 { - args = append(args, "--log-size-max", fmt.Sprintf("%v", r.logSizeMax)) - } - if r.noPivot { - args = append(args, "--no-pivot") - } - logrus.WithFields(logrus.Fields{ - "args": args, - }).Debugf("running conmon: %s", r.conmonPath) - - cmd := exec.Command(r.conmonPath, args...) - cmd.Dir = ctr.state.RunDir - cmd.SysProcAttr = &syscall.SysProcAttr{ - Setpgid: true, - } - // TODO this is probably a really bad idea for some uses - // Make this configurable - cmd.Stdin = os.Stdin - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if ctr.config.Spec.Process.Terminal { - cmd.Stderr = &stderrBuf - } - - cmd.ExtraFiles = append(cmd.ExtraFiles, childPipe, childStartPipe) - // 0, 1 and 2 are stdin, stdout and stderr - cmd.Env = append(r.conmonEnv, fmt.Sprintf("_OCI_SYNCPIPE=%d", 3)) - cmd.Env = append(cmd.Env, fmt.Sprintf("_OCI_STARTPIPE=%d", 4)) - - err = cmd.Start() - if err != nil { - childPipe.Close() - return err - } - - // We don't need childPipe on the parent side - childPipe.Close() - childStartPipe.Close() - - // Move conmon to specified cgroup - if r.cgroupManager == SystemdCgroupsManager { - logrus.Infof("Running conmon under slice %s and unitName %s", cgroupParent, createUnitName("libpod-conmon", ctr.ID())) - if err = utils.RunUnderSystemdScope(cmd.Process.Pid, cgroupParent, createUnitName("libpod-conmon", ctr.ID())); err != nil { - logrus.Warnf("Failed to add conmon to systemd sandbox cgroup: %v", err) - } - } else { - control, err := cgroups.New(cgroups.V1, cgroups.StaticPath(filepath.Join(cgroupParent, "/libpod-conmon-"+ctr.ID())), &spec.LinuxResources{}) - if err != nil { - logrus.Warnf("Failed to add conmon to cgroupfs sandbox cgroup: %v", err) - } else { - // XXX: this defer does nothing as the cgroup can't be deleted cause - // it contains the conmon pid in tasks - // we need to remove this defer and delete the cgroup once conmon exits - // maybe need a conmon monitor? - defer control.Delete() - if err := control.Add(cgroups.Process{Pid: cmd.Process.Pid}); err != nil { - logrus.Warnf("Failed to add conmon to cgroupfs sandbox cgroup: %v", err) - } - } - } - - /* We set the cgroup, now the child can start creating children */ - someData := []byte{0} - _, err = parentStartPipe.Write(someData) - if err != nil { - return err - } - - /* Wait for initial setup and fork, and reap child */ - err = cmd.Wait() - if err != nil { - return err - } - - // TODO should do a defer r.deleteContainer(ctr) here if err != nil - // Need deleteContainer to be working first, though... - - // Wait to get container pid from conmon - type syncStruct struct { - si *syncInfo - err error - } - ch := make(chan syncStruct) - go func() { - var si *syncInfo - if err = json.NewDecoder(parentPipe).Decode(&si); err != nil { - ch <- syncStruct{err: err} - return - } - ch <- syncStruct{si: si} - }() - - select { - case ss := <-ch: - if ss.err != nil { - return errors.Wrapf(ss.err, "error reading container (probably exited) json message") - } - logrus.Debugf("Received container pid: %d", ss.si.Pid) - if ss.si.Pid == -1 { - if ss.si.Message != "" { - return errors.Wrapf(ErrInternal, "container create failed: %s", ss.si.Message) - } - return errors.Wrapf(ErrInternal, "container create failed") - } - case <-time.After(ContainerCreateTimeout): - return errors.Wrapf(ErrInternal, "container creation timeout") - } - return nil -} - -// updateContainerStatus retrieves the current status of the container from the -// runtime -func (r *OCIRuntime) updateContainerStatus(ctr *Container) error { - return ErrNotImplemented -} - -// startContainer starts the given container -func (r *OCIRuntime) startContainer(ctr *Container) error { - // TODO: streams should probably *not* be our STDIN/OUT/ERR - redirect to buffers? - if err := utils.ExecCmdWithStdStreams(os.Stdin, os.Stdout, os.Stderr, r.path, "start", ctr.ID()); err != nil { - return err - } - - // TODO record start time in container struct - - return nil -} diff --git a/libpod/options.go b/libpod/options.go deleted file mode 100644 index 982655fc..00000000 --- a/libpod/options.go +++ /dev/null @@ -1,382 +0,0 @@ -package libpod - -import ( - "fmt" - - "github.com/containers/storage" - "github.com/containers/storage/pkg/idtools" - "github.com/pkg/errors" -) - -var ( - ctrNotImplemented = func(c *Container) error { - return fmt.Errorf("NOT IMPLEMENTED") - } -) - -const ( - // IPCNamespace represents the IPC namespace - IPCNamespace = "ipc" - // MountNamespace represents the mount namespace - MountNamespace = "mount" - // NetNamespace represents the network namespace - NetNamespace = "net" - // PIDNamespace represents the PID namespace - PIDNamespace = "pid" - // UserNamespace represents the user namespace - UserNamespace = "user" - // UTSNamespace represents the UTS namespace - UTSNamespace = "uts" -) - -// Runtime Creation Options - -// WithStorageConfig uses the given configuration to set up container storage -// If this is not specified, the system default configuration will be used -// instead -func WithStorageConfig(config storage.StoreOptions) RuntimeOption { - return func(rt *Runtime) error { - if rt.valid { - return ErrRuntimeFinalized - } - - rt.config.StorageConfig.RunRoot = config.RunRoot - rt.config.StorageConfig.GraphRoot = config.GraphRoot - rt.config.StorageConfig.GraphDriverName = config.GraphDriverName - - rt.config.StorageConfig.GraphDriverOptions = make([]string, len(config.GraphDriverOptions)) - copy(rt.config.StorageConfig.GraphDriverOptions, config.GraphDriverOptions) - - rt.config.StorageConfig.UIDMap = make([]idtools.IDMap, len(config.UIDMap)) - copy(rt.config.StorageConfig.UIDMap, config.UIDMap) - - rt.config.StorageConfig.GIDMap = make([]idtools.IDMap, len(config.GIDMap)) - copy(rt.config.StorageConfig.GIDMap, config.GIDMap) - - return nil - } -} - -// WithImageConfig uses the given configuration to set up image handling -// If this is not specified, the system default configuration will be used -// instead -func WithImageConfig(defaultTransport string, insecureRegistries, registries []string) RuntimeOption { - return func(rt *Runtime) error { - if rt.valid { - return ErrRuntimeFinalized - } - - rt.config.ImageDefaultTransport = defaultTransport - - rt.config.InsecureRegistries = make([]string, len(insecureRegistries)) - copy(rt.config.InsecureRegistries, insecureRegistries) - - rt.config.Registries = make([]string, len(registries)) - copy(rt.config.Registries, registries) - - return nil - } -} - -// WithSignaturePolicy specifies the path of a file which decides how trust is -// managed for images we've pulled. -// If this is not specified, the system default configuration will be used -// instead -func WithSignaturePolicy(path string) RuntimeOption { - return func(rt *Runtime) error { - if rt.valid { - return ErrRuntimeFinalized - } - - rt.config.SignaturePolicyPath = path - - return nil - } -} - -// WithOCIRuntime specifies an OCI runtime to use for running containers -func WithOCIRuntime(runtimePath string) RuntimeOption { - return func(rt *Runtime) error { - if rt.valid { - return ErrRuntimeFinalized - } - - rt.config.RuntimePath = runtimePath - - return nil - } -} - -// WithConmonPath specifies the path to the conmon binary which manages the -// runtime -func WithConmonPath(path string) RuntimeOption { - return func(rt *Runtime) error { - if rt.valid { - return ErrRuntimeFinalized - } - - rt.config.ConmonPath = path - - return nil - } -} - -// WithConmonEnv specifies the environment variable list for the conmon process -func WithConmonEnv(environment []string) RuntimeOption { - return func(rt *Runtime) error { - if rt.valid { - return ErrRuntimeFinalized - } - - rt.config.ConmonEnvVars = make([]string, len(environment)) - copy(rt.config.ConmonEnvVars, environment) - - return nil - } -} - -// WithCgroupManager specifies the manager implementation name which is used to -// handle cgroups for containers -// Current valid values are "cgroupfs" and "systemd" -func WithCgroupManager(manager string) RuntimeOption { - return func(rt *Runtime) error { - if rt.valid { - return ErrRuntimeFinalized - } - - rt.config.CgroupManager = manager - - return nil - } -} - -// WithStaticDir sets the directory that static runtime files which persist -// across reboots will be stored -func WithStaticDir(dir string) RuntimeOption { - return func(rt *Runtime) error { - if rt.valid { - return ErrRuntimeFinalized - } - - rt.config.StaticDir = dir - - return nil - } -} - -// WithTmpDir sets the directory that temporary runtime files which are not -// expected to survive across reboots will be stored -// This should be located on a tmpfs mount (/tmp or /var/run for example) -func WithTmpDir(dir string) RuntimeOption { - return func(rt *Runtime) error { - if rt.valid { - return ErrRuntimeFinalized - } - - rt.config.TmpDir = dir - - return nil - } -} - -// WithSELinux enables SELinux on the container server -func WithSELinux() RuntimeOption { - return func(rt *Runtime) error { - if rt.valid { - return ErrRuntimeFinalized - } - - rt.config.SelinuxEnabled = true - - return nil - } -} - -// WithPidsLimit specifies the maximum number of processes each container is -// restricted to -func WithPidsLimit(limit int64) RuntimeOption { - return func(rt *Runtime) error { - if rt.valid { - return ErrRuntimeFinalized - } - - rt.config.PidsLimit = limit - - return nil - } -} - -// WithMaxLogSize sets the maximum size of container logs -// Positive sizes are limits in bytes, -1 is unlimited -func WithMaxLogSize(limit int64) RuntimeOption { - return func(rt *Runtime) error { - if rt.valid { - return ErrRuntimeFinalized - } - - rt.config.MaxLogSize = limit - - return nil - } -} - -// WithNoPivotRoot sets the runtime to use MS_MOVE instead of PIVOT_ROOT when -// starting containers -func WithNoPivotRoot(noPivot bool) RuntimeOption { - return func(rt *Runtime) error { - if rt.valid { - return ErrRuntimeFinalized - } - - rt.config.NoPivotRoot = true - - return nil - } -} - -// Container Creation Options - -// WithRootFSFromPath uses the given path as a container's root filesystem -// No further setup is performed on this path -func WithRootFSFromPath(path string) CtrCreateOption { - return func(ctr *Container) error { - if ctr.valid { - return ErrCtrFinalized - } - - if ctr.config.RootfsDir != "" || ctr.config.RootfsImageID != "" || ctr.config.RootfsImageName != "" { - return errors.Wrapf(ErrInvalidArg, "container already configured with root filesystem") - } - - ctr.config.RootfsDir = path - ctr.config.RootfsFromImage = false - - return nil - } -} - -// WithRootFSFromImage sets up a fresh root filesystem using the given image -// If useImageConfig is specified, image volumes, environment variables, and -// other configuration from the image will be added to the config -// TODO: Replace image name and ID with a libpod.Image struct when that is finished -func WithRootFSFromImage(imageID string, imageName string, useImageConfig bool) CtrCreateOption { - return func(ctr *Container) error { - if ctr.valid { - return ErrCtrFinalized - } - - if ctr.config.RootfsDir != "" || ctr.config.RootfsImageID != "" || ctr.config.RootfsImageName != "" { - return errors.Wrapf(ErrInvalidArg, "container already configured with root filesystem") - } - - ctr.config.RootfsImageID = imageID - ctr.config.RootfsImageName = imageName - ctr.config.UseImageConfig = useImageConfig - ctr.config.RootfsFromImage = true - - return nil - } -} - -// WithStdin keeps stdin on the container open to allow interaction -func WithStdin() CtrCreateOption { - return func(ctr *Container) error { - if ctr.valid { - return ErrCtrFinalized - } - - ctr.config.Stdin = true - - return nil - } -} - -// WithSharedNamespaces sets a container to share namespaces with another -// container. If the from container belongs to a pod, the new container will -// be added to the pod. -// By default no namespaces are shared. To share a namespace, add the Namespace -// string constant to the map as a key -func WithSharedNamespaces(from *Container, namespaces map[string]string) CtrCreateOption { - return ctrNotImplemented -} - -// WithPod adds the container to a pod -func (r *Runtime) WithPod(pod *Pod) CtrCreateOption { - return func(ctr *Container) error { - if ctr.valid { - return ErrCtrFinalized - } - - if pod == nil { - return ErrInvalidArg - } - - ctr.config.Pod = pod.ID() - ctr.pod = pod - - return nil - } -} - -// WithLabels adds labels to the container -func WithLabels(labels map[string]string) CtrCreateOption { - return func(ctr *Container) error { - if ctr.valid { - return ErrCtrFinalized - } - - ctr.config.Labels = make(map[string]string) - for key, value := range labels { - ctr.config.Labels[key] = value - } - - return nil - } -} - -// WithName sets the container's name -func WithName(name string) CtrCreateOption { - return func(ctr *Container) error { - if ctr.valid { - return ErrCtrFinalized - } - - ctr.config.Name = name - - return nil - } -} - -// WithStopSignal sets the signal that will be sent to stop the container -func WithStopSignal(signal uint) CtrCreateOption { - return func(ctr *Container) error { - if ctr.valid { - return ErrCtrFinalized - } - - if signal == 0 { - return errors.Wrapf(ErrInvalidArg, "stop signal cannot be 0") - } else if signal > 64 { - return errors.Wrapf(ErrInvalidArg, "stop signal cannot be greater than 64 (SIGRTMAX)") - } - - ctr.config.StopSignal = signal - - return nil - } -} - -// Pod Creation Options - -// WithPodName sets the name of the pod -func WithPodName(name string) PodCreateOption { - return func(pod *Pod) error { - if pod.valid { - return ErrPodFinalized - } - - pod.name = name - - return nil - } -} diff --git a/libpod/pod.go b/libpod/pod.go deleted file mode 100644 index 48a761d5..00000000 --- a/libpod/pod.go +++ /dev/null @@ -1,137 +0,0 @@ -package libpod - -import ( - "sync" - - "github.com/docker/docker/pkg/stringid" - "github.com/pkg/errors" -) - -// Pod represents a group of containers that may share namespaces -type Pod struct { - id string - name string - - containers map[string]*Container - - valid bool - lock sync.RWMutex -} - -// ID retrieves the pod's ID -func (p *Pod) ID() string { - return p.id -} - -// Name retrieves the pod's name -func (p *Pod) Name() string { - return p.name -} - -// Creates a new pod -func newPod() (*Pod, error) { - pod := new(Pod) - pod.id = stringid.GenerateNonCryptoID() - pod.name = pod.id // TODO generate human-readable name here - - pod.containers = make(map[string]*Container) - - return pod, nil -} - -// Adds a container to the pod -// Does not check that container's pod ID is set correctly, or attempt to set -// pod ID after adding -func (p *Pod) addContainer(ctr *Container) error { - p.lock.Lock() - defer p.lock.Unlock() - ctr.lock.Lock() - defer ctr.lock.Unlock() - - if !p.valid { - return ErrPodRemoved - } - - if !ctr.valid { - return ErrCtrRemoved - } - - if _, ok := p.containers[ctr.ID()]; ok { - return errors.Wrapf(ErrCtrExists, "container with ID %s already exists in pod %s", ctr.ID(), p.id) - } - - p.containers[ctr.ID()] = ctr - - return nil -} - -// Removes a container from the pod -// Does not perform any checks on the container -func (p *Pod) removeContainer(ctr *Container) error { - p.lock.Lock() - defer p.lock.Unlock() - - if !p.valid { - return ErrPodRemoved - } - - if _, ok := p.containers[ctr.ID()]; !ok { - return errors.Wrapf(ErrNoSuchCtr, "no container with id %s in pod %s", ctr.ID(), p.id) - } - - delete(p.containers, ctr.ID()) - - return nil -} - -// Start starts all containers within a pod that are not already running -func (p *Pod) Start() error { - return ErrNotImplemented -} - -// Stop stops all containers within a pod that are not already stopped -func (p *Pod) Stop() error { - return ErrNotImplemented -} - -// Kill sends a signal to all running containers within a pod -func (p *Pod) Kill(signal uint) error { - return ErrNotImplemented -} - -// HasContainer checks if a container is present in the pod -func (p *Pod) HasContainer(id string) (bool, error) { - p.lock.RLock() - defer p.lock.RUnlock() - - if !p.valid { - return false, ErrPodRemoved - } - - _, ok := p.containers[id] - - return ok, nil -} - -// GetContainers retrieves the containers in the pod -func (p *Pod) GetContainers() ([]*Container, error) { - p.lock.RLock() - defer p.lock.RUnlock() - - if !p.valid { - return nil, ErrPodRemoved - } - - ctrs := make([]*Container, 0, len(p.containers)) - for _, ctr := range p.containers { - ctrs = append(ctrs, ctr) - } - - return ctrs, nil -} - -// Status gets the status of all containers in the pod -// TODO This should return a summary of the states of all containers in the pod -func (p *Pod) Status() error { - return ErrNotImplemented -} diff --git a/libpod/runtime.go b/libpod/runtime.go deleted file mode 100644 index 80202c56..00000000 --- a/libpod/runtime.go +++ /dev/null @@ -1,192 +0,0 @@ -package libpod - -import ( - "os" - "sync" - - is "github.com/containers/image/storage" - "github.com/containers/image/types" - "github.com/containers/storage" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" - "github.com/ulule/deepcopier" -) - -// A RuntimeOption is a functional option which alters the Runtime created by -// NewRuntime -type RuntimeOption func(*Runtime) error - -// Runtime is the core libpod runtime -type Runtime struct { - config *RuntimeConfig - state State - store storage.Store - storageService *storageService - imageContext *types.SystemContext - ociRuntime *OCIRuntime - valid bool - lock sync.RWMutex -} - -// RuntimeConfig contains configuration options used to set up the runtime -type RuntimeConfig struct { - StorageConfig storage.StoreOptions - ImageDefaultTransport string - InsecureRegistries []string - Registries []string - SignaturePolicyPath string - RuntimePath string - ConmonPath string - ConmonEnvVars []string - CgroupManager string - StaticDir string - TmpDir string - SelinuxEnabled bool - PidsLimit int64 - MaxLogSize int64 - NoPivotRoot bool -} - -var ( - defaultRuntimeConfig = RuntimeConfig{ - // Leave this empty so containers/storage will use its defaults - StorageConfig: storage.StoreOptions{}, - ImageDefaultTransport: "docker://", - RuntimePath: "/usr/bin/runc", - ConmonPath: "/usr/local/libexec/crio/conmon", - ConmonEnvVars: []string{ - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", - }, - CgroupManager: "cgroupfs", - StaticDir: "/var/lib/libpod", - TmpDir: "/var/run/libpod", - SelinuxEnabled: false, - PidsLimit: 1024, - MaxLogSize: -1, - NoPivotRoot: false, - } -) - -// NewRuntime creates a new container runtime -// Options can be passed to override the default configuration for the runtime -func NewRuntime(options ...RuntimeOption) (runtime *Runtime, err error) { - runtime = new(Runtime) - runtime.config = new(RuntimeConfig) - - // Copy the default configuration - deepcopier.Copy(defaultRuntimeConfig).To(runtime.config) - - // Overwrite it with user-given configuration options - for _, opt := range options { - if err := opt(runtime); err != nil { - return nil, errors.Wrapf(err, "error configuring runtime") - } - } - - // Set up containers/storage - store, err := storage.GetStore(runtime.config.StorageConfig) - if err != nil { - return nil, err - } - runtime.store = store - is.Transport.SetStore(store) - defer func() { - if err != nil { - // Don't forcibly shut down - // We could be opening a store in use by another libpod - _, err2 := runtime.store.Shutdown(false) - if err2 != nil { - logrus.Errorf("Error removing store for partially-created runtime: %s", err2) - } - } - }() - - // Set up a storage service for creating container root filesystems from - // images - storageService, err := getStorageService(runtime.store) - if err != nil { - return nil, err - } - runtime.storageService = storageService - - // Set up containers/image - runtime.imageContext = &types.SystemContext{ - SignaturePolicyPath: runtime.config.SignaturePolicyPath, - } - - // Set up the state - state, err := NewInMemoryState() - if err != nil { - return nil, err - } - runtime.state = state - - // Make an OCI runtime to perform container operations - ociRuntime, err := newOCIRuntime("runc", runtime.config.RuntimePath, - runtime.config.ConmonPath, runtime.config.ConmonEnvVars, - runtime.config.CgroupManager, runtime.config.TmpDir, - runtime.config.MaxLogSize, runtime.config.NoPivotRoot) - if err != nil { - return nil, err - } - runtime.ociRuntime = ociRuntime - - // Make the static files directory if it does not exist - if err := os.MkdirAll(runtime.config.StaticDir, 0755); err != nil { - // The directory is allowed to exist - if !os.IsExist(err) { - return nil, errors.Wrapf(err, "error creating runtime static files directory %s", - runtime.config.StaticDir) - } - } - - // Make the per-boot files directory if it does not exist - if err := os.MkdirAll(runtime.config.TmpDir, 0755); err != nil { - // The directory is allowed to exist - if !os.IsExist(err) { - return nil, errors.Wrapf(err, "error creating runtime temporary files directory %s", - runtime.config.TmpDir) - } - } - - // Mark the runtime as valid - ready to be used, cannot be modified - // further - runtime.valid = true - - return runtime, nil -} - -// GetConfig returns a copy of the configuration used by the runtime -func (r *Runtime) GetConfig() *RuntimeConfig { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return nil - } - - config := new(RuntimeConfig) - - // Copy so the caller won't be able to modify the actual config - deepcopier.Copy(r.config).To(config) - - return config -} - -// Shutdown shuts down the runtime and associated containers and storage -// If force is true, containers and mounted storage will be shut down before -// cleaning up; if force is false, an error will be returned if there are -// still containers running or mounted -func (r *Runtime) Shutdown(force bool) error { - r.lock.Lock() - defer r.lock.Unlock() - - if !r.valid { - return ErrRuntimeStopped - } - - r.valid = false - - _, err := r.store.Shutdown(force) - return err -} diff --git a/libpod/runtime_ctr.go b/libpod/runtime_ctr.go deleted file mode 100644 index a1351e1d..00000000 --- a/libpod/runtime_ctr.go +++ /dev/null @@ -1,228 +0,0 @@ -package libpod - -import ( - "github.com/containers/storage" - spec "github.com/opencontainers/runtime-spec/specs-go" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" -) - -// Contains the public Runtime API for containers - -// A CtrCreateOption is a functional option which alters the Container created -// by NewContainer -type CtrCreateOption func(*Container) error - -// ContainerFilter is a function to determine whether a container is included -// in command output. Containers to be outputted are tested using the function. -// A true return will include the container, a false return will exclude it. -type ContainerFilter func(*Container) bool - -// NewContainer creates a new container from a given OCI config -func (r *Runtime) NewContainer(spec *spec.Spec, options ...CtrCreateOption) (ctr *Container, err error) { - r.lock.Lock() - defer r.lock.Unlock() - if !r.valid { - return nil, ErrRuntimeStopped - } - - ctr, err = newContainer(spec) - if err != nil { - return nil, err - } - - for _, option := range options { - if err := option(ctr); err != nil { - return nil, errors.Wrapf(err, "error running container create option") - } - } - - ctr.valid = true - ctr.state.State = ContainerStateConfigured - ctr.runtime = r - - // Set up storage for the container - if err := ctr.setupStorage(); err != nil { - return nil, errors.Wrapf(err, "error configuring storage for container") - } - defer func() { - if err != nil { - if err2 := ctr.teardownStorage(); err2 != nil { - logrus.Errorf("Error removing partially-created container root filesystem: %s", err2) - } - } - }() - - // If the container is in a pod, add it to the pod - if ctr.pod != nil { - if err := ctr.pod.addContainer(ctr); err != nil { - return nil, errors.Wrapf(err, "error adding new container to pod %s", ctr.pod.ID()) - } - } - defer func() { - if err != nil { - if err2 := ctr.pod.removeContainer(ctr); err2 != nil { - logrus.Errorf("Error removing partially-created container from pod %s: %s", ctr.pod.ID(), err2) - } - } - }() - - if err := r.state.AddContainer(ctr); err != nil { - // TODO: Might be worth making an effort to detect duplicate IDs - // We can recover from that by generating a new ID for the - // container - return nil, errors.Wrapf(err, "error adding new container to state") - } - - return ctr, nil -} - -// 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 *Runtime) RemoveContainer(c *Container, force bool) error { - r.lock.Lock() - defer r.lock.Unlock() - - c.lock.Lock() - defer c.lock.Unlock() - - if !r.valid { - return ErrRuntimeStopped - } - - if !c.valid { - return ErrCtrRemoved - } - - // TODO check container status and unmount storage - // TODO check that no other containers depend on this container's - // namespaces - status, err := c.State() - if err != nil { - return err - } - - // A container cannot be removed if it is running - if status == ContainerStateRunning { - return errors.Wrapf(ErrCtrStateInvalid, "cannot remove container %s as it is running", c.ID()) - } - - if err := r.state.RemoveContainer(c); err != nil { - return errors.Wrapf(err, "error removing container from state") - } - - // Set container as invalid so it can no longer be used - c.valid = false - - // Remove container from pod, if it joined one - if c.pod != nil { - if err := c.pod.removeContainer(c); err != nil { - return errors.Wrapf(err, "error removing container from pod %s", c.pod.ID()) - } - } - - return nil -} - -// GetContainer retrieves a container by its ID -func (r *Runtime) GetContainer(id string) (*Container, error) { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return nil, ErrRuntimeStopped - } - - return r.state.Container(id) -} - -// HasContainer checks if a container with the given ID is present -func (r *Runtime) HasContainer(id string) (bool, error) { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return false, ErrRuntimeStopped - } - - return r.state.HasContainer(id) -} - -// LookupContainer looks up a container by its name or a partial ID -// If a partial ID is not unique, an error will be returned -func (r *Runtime) LookupContainer(idOrName string) (*Container, error) { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return nil, ErrRuntimeStopped - } - - return r.state.LookupContainer(idOrName) -} - -// GetContainers retrieves all containers from the state -// Filters can be provided which will determine what containers are included in -// the output. Multiple filters are handled by ANDing their output, so only -// containers matching all filters are returned -func (r *Runtime) GetContainers(filters ...ContainerFilter) ([]*Container, error) { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return nil, ErrRuntimeStopped - } - - ctrs, err := r.state.AllContainers() - if err != nil { - return nil, err - } - - ctrsFiltered := make([]*Container, 0, len(ctrs)) - - for _, ctr := range ctrs { - include := true - for _, filter := range filters { - include = include && filter(ctr) - } - - if include { - ctrsFiltered = append(ctrsFiltered, ctr) - } - } - - return ctrsFiltered, nil -} - -// getContainersWithImage returns a list of containers referencing imageID -func (r *Runtime) getContainersWithImage(imageID string) ([]storage.Container, error) { - var matchingContainers []storage.Container - containers, err := r.store.Containers() - if err != nil { - return nil, err - } - - for _, ctr := range containers { - if ctr.ImageID == imageID { - matchingContainers = append(matchingContainers, ctr) - } - } - return matchingContainers, nil -} - -// removeMultipleContainers deletes a list of containers from the store -// TODO refactor this to remove libpod Containers -func (r *Runtime) removeMultipleContainers(containers []storage.Container) error { - for _, ctr := range containers { - if err := r.store.DeleteContainer(ctr.ID); err != nil { - return errors.Wrapf(err, "could not remove container %q", ctr) - } - } - return nil -} - -// ContainerConfigToDisk saves a container's nonvolatile configuration to disk -func (r *Runtime) containerConfigToDisk(ctr *Container) error { - return ErrNotImplemented -} diff --git a/libpod/runtime_img.go b/libpod/runtime_img.go deleted file mode 100644 index 4e0c02ac..00000000 --- a/libpod/runtime_img.go +++ /dev/null @@ -1,1082 +0,0 @@ -package libpod - -import ( - "encoding/json" - "fmt" - "io" - "net" - "os" - "strings" - "syscall" - "time" - - cp "github.com/containers/image/copy" - dockerarchive "github.com/containers/image/docker/archive" - "github.com/containers/image/docker/reference" - "github.com/containers/image/docker/tarfile" - ociarchive "github.com/containers/image/oci/archive" - "github.com/containers/image/pkg/sysregistries" - "github.com/containers/image/signature" - is "github.com/containers/image/storage" - "github.com/containers/image/transports" - "github.com/containers/image/transports/alltransports" - "github.com/containers/image/types" - "github.com/containers/storage" - "github.com/containers/storage/pkg/archive" - "github.com/kubernetes-incubator/cri-o/libpod/common" - digest "github.com/opencontainers/go-digest" - ociv1 "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/pkg/errors" -) - -// Runtime API - -const ( - // DefaultRegistry is a prefix that we apply to an image name - // to check docker hub first for the image - DefaultRegistry = "docker://" -) - -var ( - // DockerArchive is the transport we prepend to an image name - // when saving to docker-archive - DockerArchive = dockerarchive.Transport.Name() - // OCIArchive is the transport we prepend to an image name - // when saving to oci-archive - OCIArchive = ociarchive.Transport.Name() - // DirTransport is the transport for pushing and pulling - // images to and from a directory - DirTransport = "dir" - // TransportNames are the supported transports in string form - TransportNames = [...]string{DefaultRegistry, DockerArchive, OCIArchive, "ostree:", "dir:"} -) - -// CopyOptions contains the options given when pushing or pulling images -type CopyOptions struct { - // Compression specifies the type of compression which is applied to - // layer blobs. The default is to not use compression, but - // archive.Gzip is recommended. - Compression archive.Compression - // DockerRegistryOptions encapsulates settings that affect how we - // connect or authenticate to a remote registry to which we want to - // push the image. - common.DockerRegistryOptions - // SigningOptions encapsulates settings that control whether or not we - // strip or add signatures to the image when pushing (uploading) the - // image to a registry. - common.SigningOptions - - // SigningPolicyPath this points to a alternative signature policy file, used mainly for testing - SignaturePolicyPath string - // AuthFile is the path of the cached credentials file defined by the user - AuthFile string - // Writer is the reportWriter for the output - Writer io.Writer -} - -// Image API - -// ImageFilterParams contains the filter options that may be given when outputting images -type ImageFilterParams struct { - Dangling string - Label string - BeforeImage time.Time - SinceImage time.Time - ReferencePattern string - ImageName string - ImageInput string -} - -// struct for when a user passes a short or incomplete -// image name -type imageDecomposeStruct struct { - imageName string - tag string - registry string - hasRegistry bool - transport string -} - -func (k *Image) assembleFqName() string { - return fmt.Sprintf("%s/%s:%s", k.Registry, k.ImageName, k.Tag) -} - -func (k *Image) assembleFqNameTransport() string { - return fmt.Sprintf("%s%s/%s:%s", k.Transport, k.Registry, k.ImageName, k.Tag) -} - -//Image describes basic attributes of an image -type Image struct { - Name string - ID string - fqname string - hasImageLocal bool - runtime *Runtime - Registry string - ImageName string - Tag string - HasRegistry bool - Transport string - beenDecomposed bool - PullName string -} - -// NewImage creates a new image object based on its name -func (r *Runtime) NewImage(name string) Image { - return Image{ - Name: name, - runtime: r, - } -} - -// GetImageID returns the image ID of the image -func (k *Image) GetImageID() (string, error) { - if k.ID != "" { - return k.ID, nil - } - image, _ := k.GetFQName() - img, err := k.runtime.GetImage(image) - if err != nil { - return "", err - } - return img.ID, nil -} - -// GetFQName returns the fully qualified image name if it can be determined -func (k *Image) GetFQName() (string, error) { - // Check if the fqname has already been found - if k.fqname != "" { - return k.fqname, nil - } - if err := k.Decompose(); err != nil { - return "", err - } - k.fqname = k.assembleFqName() - return k.fqname, nil -} - -func (k *Image) findImageOnRegistry() error { - searchRegistries, err := GetRegistries() - - if err != nil { - return errors.Wrapf(err, " the image name '%s' is incomplete.", k.Name) - } - - for _, searchRegistry := range searchRegistries { - k.Registry = searchRegistry - err = k.GetManifest() - if err == nil { - k.fqname = k.assembleFqName() - return nil - - } - } - return errors.Errorf("unable to find image on any configured registries") - -} - -// GetManifest tries to GET an images manifest, returns nil on success and err on failure -func (k *Image) GetManifest() error { - pullRef, err := alltransports.ParseImageName(k.assembleFqNameTransport()) - if err != nil { - return errors.Errorf("unable to parse1 '%s'", k.assembleFqName()) - } - imageSource, err := pullRef.NewImageSource(nil) - if err != nil { - return errors.Wrapf(err, "unable to create new image source") - } - _, _, err = imageSource.GetManifest() - if err == nil { - return nil - } - return err -} - -//Decompose breaks up an image name into its parts -func (k *Image) Decompose() error { - if k.beenDecomposed { - return nil - } - k.beenDecomposed = true - k.Transport = "docker://" - decomposeName := k.Name - for _, transport := range TransportNames { - if strings.HasPrefix(k.Name, transport) { - k.Transport = transport - decomposeName = strings.Replace(k.Name, transport, "", -1) - break - } - } - if k.Transport == "dir:" { - return nil - } - var imageError = fmt.Sprintf("unable to parse '%s'\n", decomposeName) - imgRef, err := reference.Parse(decomposeName) - if err != nil { - return errors.Wrapf(err, imageError) - } - tagged, isTagged := imgRef.(reference.NamedTagged) - k.Tag = "latest" - if isTagged { - k.Tag = tagged.Tag() - } - k.HasRegistry = true - registry := reference.Domain(imgRef.(reference.Named)) - if registry == "" { - k.HasRegistry = false - } - k.ImageName = reference.Path(imgRef.(reference.Named)) - - // account for image names with directories in them like - // umohnani/get-started:part1 - if k.HasRegistry { - k.Registry = registry - k.fqname = k.assembleFqName() - k.PullName = k.assembleFqName() - - registries, err := getRegistries() - if err != nil { - return nil - } - if StringInSlice(k.Registry, registries) { - return nil - } - // We need to check if the registry name is legit - _, err = net.LookupAddr(k.Registry) - if err == nil { - return nil - } - // Combine the Registry and Image Name together and blank out the Registry Name - k.ImageName = fmt.Sprintf("%s/%s", k.Registry, k.ImageName) - k.Registry = "" - - } - // No Registry means we check the globals registries configuration file - // and assemble a list of candidate sources to try - //searchRegistries, err := GetRegistries() - err = k.findImageOnRegistry() - k.PullName = k.assembleFqName() - if err != nil { - return errors.Wrapf(err, " the image name '%s' is incomplete.", k.Name) - } - return nil -} - -// HasImageLocal returns a bool true if the image is already pulled -func (k *Image) HasImageLocal() bool { - _, err := k.runtime.GetImage(k.Name) - if err == nil { - return true - } - fqname, _ := k.GetFQName() - - _, err = k.runtime.GetImage(fqname) - if err == nil { - return true - } - return false -} - -// HasLatest determines if we have the latest image local -func (k *Image) HasLatest() (bool, error) { - if !k.HasImageLocal() { - return false, nil - } - fqname, err := k.GetFQName() - if err != nil { - return false, err - } - pullRef, err := alltransports.ParseImageName(fqname) - if err != nil { - return false, err - } - _, _, err = pullRef.(types.ImageSource).GetManifest() - if err != nil { - return false, err - } - return false, nil -} - -// Pull is a wrapper function to pull and image -func (k *Image) Pull() error { - // If the image hasn't been decomposed yet - if !k.beenDecomposed { - err := k.Decompose() - if err != nil { - return err - } - } - k.runtime.PullImage(k.PullName, CopyOptions{Writer: os.Stdout, SignaturePolicyPath: k.runtime.config.SignaturePolicyPath}) - return nil -} - -// GetRegistries gets the searchable registries from the global registration file. -func GetRegistries() ([]string, error) { - registryConfigPath := "" - envOverride := os.Getenv("REGISTRIES_CONFIG_PATH") - if len(envOverride) > 0 { - registryConfigPath = envOverride - } - searchRegistries, err := sysregistries.GetRegistries(&types.SystemContext{SystemRegistriesConfPath: registryConfigPath}) - if err != nil { - return nil, errors.Errorf("unable to parse the registries.conf file") - } - return searchRegistries, nil -} - -// GetInsecureRegistries obtains the list of inseure registries from the global registration file. -func GetInsecureRegistries() ([]string, error) { - registryConfigPath := "" - envOverride := os.Getenv("REGISTRIES_CONFIG_PATH") - if len(envOverride) > 0 { - registryConfigPath = envOverride - } - registries, err := sysregistries.GetInsecureRegistries(&types.SystemContext{SystemRegistriesConfPath: registryConfigPath}) - if err != nil { - return nil, errors.Errorf("unable to parse the registries.conf file") - } - return registries, nil -} - -// getRegistries returns both searchable and insecure registries from the global conf file. -func getRegistries() ([]string, error) { - var r []string - registries, err := GetRegistries() - if err != nil { - return r, err - } - insecureRegistries, err := GetInsecureRegistries() - if err != nil { - return r, err - } - r = append(registries, insecureRegistries...) - return r, nil -} - -// ImageFilter is a function to determine whether an image is included in -// command output. Images to be outputted are tested using the function. A true -// return will include the image, a false return will exclude it. -type ImageFilter func(*storage.Image, *types.ImageInspectInfo) bool - -func (ips imageDecomposeStruct) returnFQName() string { - return fmt.Sprintf("%s%s/%s:%s", ips.transport, ips.registry, ips.imageName, ips.tag) -} - -func getRegistriesToTry(image string, store storage.Store) ([]*pullStruct, error) { - var pStructs []*pullStruct - var imageError = fmt.Sprintf("unable to parse '%s'\n", image) - imgRef, err := reference.Parse(image) - if err != nil { - return nil, errors.Wrapf(err, imageError) - } - tagged, isTagged := imgRef.(reference.NamedTagged) - tag := "latest" - if isTagged { - tag = tagged.Tag() - } - hasDomain := true - registry := reference.Domain(imgRef.(reference.Named)) - if registry == "" { - hasDomain = false - } - imageName := reference.Path(imgRef.(reference.Named)) - pImage := imageDecomposeStruct{ - imageName, - tag, - registry, - hasDomain, - "docker://", - } - if pImage.hasRegistry { - // If input has a registry, we have to assume they included an image - // name but maybe not a tag - srcRef, err := alltransports.ParseImageName(pImage.returnFQName()) - if err != nil { - return nil, errors.Errorf(imageError) - } - pStruct := &pullStruct{ - image: srcRef.DockerReference().String(), - srcRef: srcRef, - } - pStructs = append(pStructs, pStruct) - } else { - // No registry means we check the globals registries configuration file - // and assemble a list of candidate sources to try - registryConfigPath := "" - envOverride := os.Getenv("REGISTRIES_CONFIG_PATH") - if len(envOverride) > 0 { - registryConfigPath = envOverride - } - searchRegistries, err := sysregistries.GetRegistries(&types.SystemContext{SystemRegistriesConfPath: registryConfigPath}) - if err != nil { - fmt.Println(err) - return nil, errors.Errorf("unable to parse the registries.conf file and"+ - " the image name '%s' is incomplete.", imageName) - } - for _, searchRegistry := range searchRegistries { - pImage.registry = searchRegistry - srcRef, err := alltransports.ParseImageName(pImage.returnFQName()) - if err != nil { - return nil, errors.Errorf("unable to parse '%s'", pImage.returnFQName()) - } - pStruct := &pullStruct{ - image: srcRef.DockerReference().String(), - srcRef: srcRef, - } - pStructs = append(pStructs, pStruct) - } - } - - for _, pStruct := range pStructs { - destRef, err := is.Transport.ParseStoreReference(store, pStruct.image) - if err != nil { - return nil, errors.Errorf("error parsing dest reference name: %v", err) - } - pStruct.dstRef = destRef - } - return pStructs, nil -} - -type pullStruct struct { - image string - srcRef types.ImageReference - dstRef types.ImageReference -} - -func (r *Runtime) getPullStruct(srcRef types.ImageReference, destName string) (*pullStruct, error) { - reference := destName - if srcRef.DockerReference() != nil { - reference = srcRef.DockerReference().String() - } - destRef, err := is.Transport.ParseStoreReference(r.store, reference) - if err != nil { - return nil, errors.Errorf("error parsing dest reference name: %v", err) - } - return &pullStruct{ - image: destName, - srcRef: srcRef, - dstRef: destRef, - }, nil -} - -// returns a list of pullStruct with the srcRef and DstRef based on the transport being used -func (r *Runtime) getPullListFromRef(srcRef types.ImageReference, imgName string, sc *types.SystemContext) ([]*pullStruct, error) { - var pullStructs []*pullStruct - splitArr := strings.Split(imgName, ":") - archFile := splitArr[len(splitArr)-1] - - // supports pulling from docker-archive, oci, and registries - if srcRef.Transport().Name() == DockerArchive { - tarSource := tarfile.NewSource(archFile) - manifest, err := tarSource.LoadTarManifest() - if err != nil { - return nil, errors.Errorf("error retrieving manifest.json: %v", err) - } - // to pull the first image stored in the tar file - if len(manifest) == 0 { - // create an image object and use the hex value of the digest as the image ID - // for parsing the store reference - newImg, err := srcRef.NewImage(sc) - if err != nil { - return nil, err - } - defer newImg.Close() - digest := newImg.ConfigInfo().Digest - if err := digest.Validate(); err == nil { - pullInfo, err := r.getPullStruct(srcRef, "@"+digest.Hex()) - if err != nil { - return nil, err - } - pullStructs = append(pullStructs, pullInfo) - } else { - return nil, errors.Wrapf(err, "error getting config info") - } - } else { - pullInfo, err := r.getPullStruct(srcRef, manifest[0].RepoTags[0]) - if err != nil { - return nil, err - } - pullStructs = append(pullStructs, pullInfo) - } - - } else if srcRef.Transport().Name() == OCIArchive { - // retrieve the manifest from index.json to access the image name - manifest, err := ociarchive.LoadManifestDescriptor(srcRef) - if err != nil { - return nil, errors.Wrapf(err, "error loading manifest for %q", srcRef) - } - - if manifest.Annotations == nil || manifest.Annotations["org.opencontainers.image.ref.name"] == "" { - return nil, errors.Errorf("error, archive doesn't have a name annotation. Cannot store image with no name") - } - pullInfo, err := r.getPullStruct(srcRef, manifest.Annotations["org.opencontainers.image.ref.name"]) - if err != nil { - return nil, err - } - pullStructs = append(pullStructs, pullInfo) - } else if srcRef.Transport().Name() == DirTransport { - // supports pull from a directory - image := splitArr[1] - // remove leading "/" - if image[:1] == "/" { - image = image[1:] - } - pullInfo, err := r.getPullStruct(srcRef, image) - if err != nil { - return nil, err - } - pullStructs = append(pullStructs, pullInfo) - } else { - pullInfo, err := r.getPullStruct(srcRef, imgName) - if err != nil { - return nil, err - } - pullStructs = append(pullStructs, pullInfo) - } - return pullStructs, nil -} - -// PullImage pulls an image from configured registries -// By default, only the latest tag (or a specific tag if requested) will be -// pulled. If allTags is true, all tags for the requested image will be pulled. -// Signature validation will be performed if the Runtime has been appropriately -// configured -func (r *Runtime) PullImage(imgName string, options CopyOptions) error { - r.lock.Lock() - defer r.lock.Unlock() - - if !r.valid { - return ErrRuntimeStopped - } - - // PullImage copies the image from the source to the destination - var pullStructs []*pullStruct - - signaturePolicyPath := r.config.SignaturePolicyPath - if options.SignaturePolicyPath != "" { - signaturePolicyPath = options.SignaturePolicyPath - } - - sc := common.GetSystemContext(signaturePolicyPath, options.AuthFile) - - srcRef, err := alltransports.ParseImageName(imgName) - if err != nil { - // could be trying to pull from registry with short name - pullStructs, err = getRegistriesToTry(imgName, r.store) - if err != nil { - return errors.Wrap(err, "error getting default registries to try") - } - } else { - pullStructs, err = r.getPullListFromRef(srcRef, imgName, sc) - if err != nil { - return errors.Wrapf(err, "error getting pullStruct info to pull image %q", imgName) - } - } - - policy, err := signature.DefaultPolicy(sc) - if err != nil { - return err - } - - policyContext, err := signature.NewPolicyContext(policy) - if err != nil { - return err - } - defer policyContext.Destroy() - - copyOptions := common.GetCopyOptions(options.Writer, signaturePolicyPath, &options.DockerRegistryOptions, nil, options.SigningOptions, options.AuthFile) - - for _, imageInfo := range pullStructs { - fmt.Printf("Trying to pull %s...\n", imageInfo.image) - if err = cp.Image(policyContext, imageInfo.dstRef, imageInfo.srcRef, copyOptions); err != nil { - fmt.Println("Failed") - } else { - return nil - } - } - return errors.Wrapf(err, "error pulling image from %q", imgName) -} - -// PushImage pushes the given image to a location described by the given path -func (r *Runtime) PushImage(source string, destination string, options CopyOptions) error { - r.lock.Lock() - defer r.lock.Unlock() - - if !r.valid { - return ErrRuntimeStopped - } - - // PushImage pushes the src image to the destination - //func PushImage(source, destination string, options CopyOptions) error { - if source == "" || destination == "" { - return errors.Wrapf(syscall.EINVAL, "source and destination image names must be specified") - } - - // Get the destination Image Reference - dest, err := alltransports.ParseImageName(destination) - if err != nil { - return errors.Wrapf(err, "error getting destination imageReference for %q", destination) - } - - signaturePolicyPath := r.config.SignaturePolicyPath - if options.SignaturePolicyPath != "" { - signaturePolicyPath = options.SignaturePolicyPath - } - - sc := common.GetSystemContext(signaturePolicyPath, options.AuthFile) - - policy, err := signature.DefaultPolicy(sc) - if err != nil { - return err - } - - policyContext, err := signature.NewPolicyContext(policy) - if err != nil { - return err - } - defer policyContext.Destroy() - - // Look up the source image, expecting it to be in local storage - src, err := is.Transport.ParseStoreReference(r.store, source) - if err != nil { - return errors.Wrapf(err, "error getting source imageReference for %q", source) - } - - copyOptions := common.GetCopyOptions(options.Writer, signaturePolicyPath, nil, &options.DockerRegistryOptions, options.SigningOptions, options.AuthFile) - - // Copy the image to the remote destination - err = cp.Image(policyContext, dest, src, copyOptions) - if err != nil { - return errors.Wrapf(err, "Error copying image to the remote destination") - } - return nil -} - -// TagImage adds a tag to the given image -func (r *Runtime) TagImage(image *storage.Image, tag string) error { - r.lock.Lock() - defer r.lock.Unlock() - - if !r.valid { - return ErrRuntimeStopped - } - - tags, err := r.store.Names(image.ID) - if err != nil { - return err - } - for _, key := range tags { - if key == tag { - return nil - } - } - tags = append(tags, tag) - return r.store.SetNames(image.ID, tags) -} - -// UntagImage removes a tag from the given image -func (r *Runtime) UntagImage(image *storage.Image, tag string) (string, error) { - r.lock.Lock() - defer r.lock.Unlock() - - if !r.valid { - return "", ErrRuntimeStopped - } - - tags, err := r.store.Names(image.ID) - if err != nil { - return "", err - } - for i, key := range tags { - if key == tag { - tags[i] = tags[len(tags)-1] - tags = tags[:len(tags)-1] - break - } - } - if err = r.store.SetNames(image.ID, tags); err != nil { - return "", err - } - return tag, nil -} - -// RemoveImage deletes an image from local storage -// Images being used by running containers can only be removed if force=true -func (r *Runtime) RemoveImage(image *storage.Image, force bool) (string, error) { - r.lock.Lock() - defer r.lock.Unlock() - - if !r.valid { - return "", ErrRuntimeStopped - } - - containersWithImage, err := r.getContainersWithImage(image.ID) - if err != nil { - return "", errors.Wrapf(err, "error getting containers for image %q", image.ID) - } - if len(containersWithImage) > 0 && len(image.Names) <= 1 { - if force { - if err := r.removeMultipleContainers(containersWithImage); err != nil { - return "", err - } - } else { - for _, ctr := range containersWithImage { - return "", fmt.Errorf("Could not remove image %q (must force) - container %q is using its reference image", image.ID, ctr.ImageID) - } - } - } - - if len(image.Names) > 1 && !force { - return "", fmt.Errorf("unable to delete %s (must force) - image is referred to in multiple tags", image.ID) - } - // If it is forced, we have to untag the image so that it can be deleted - image.Names = image.Names[:0] - - _, err = r.store.DeleteImage(image.ID, true) - if err != nil { - return "", err - } - return image.ID, nil -} - -// GetImage retrieves an image matching the given name or hash from system -// storage -// If no matching image can be found, an error is returned -func (r *Runtime) GetImage(image string) (*storage.Image, error) { - r.lock.Lock() - defer r.lock.Unlock() - - if !r.valid { - return nil, ErrRuntimeStopped - } - return r.getImage(image) -} - -func (r *Runtime) getImage(image string) (*storage.Image, error) { - var img *storage.Image - ref, err := is.Transport.ParseStoreReference(r.store, image) - if err == nil { - img, err = is.Transport.GetStoreImage(r.store, ref) - } - if err != nil { - img2, err2 := r.store.Image(image) - if err2 != nil { - if ref == nil { - return nil, errors.Wrapf(err, "error parsing reference to image %q", image) - } - return nil, errors.Wrapf(err, "unable to locate image %q", image) - } - img = img2 - } - return img, nil -} - -// GetImageRef searches for and returns a new types.Image matching the given name or ID in the given store. -func (r *Runtime) GetImageRef(image string) (types.Image, error) { - r.lock.Lock() - defer r.lock.Unlock() - - if !r.valid { - return nil, ErrRuntimeStopped - } - return r.getImageRef(image) - -} - -func (r *Runtime) getImageRef(image string) (types.Image, error) { - img, err := r.getImage(image) - if err != nil { - return nil, errors.Wrapf(err, "unable to locate image %q", image) - } - ref, err := is.Transport.ParseStoreReference(r.store, "@"+img.ID) - if err != nil { - return nil, errors.Wrapf(err, "error parsing reference to image %q", img.ID) - } - imgRef, err := ref.NewImage(nil) - if err != nil { - return nil, errors.Wrapf(err, "error reading image %q", img.ID) - } - return imgRef, nil -} - -// GetImages retrieves all images present in storage -// Filters can be provided which will determine which images are included in the -// output. Multiple filters are handled by ANDing their output, so only images -// matching all filters are included -func (r *Runtime) GetImages(params *ImageFilterParams, filters ...ImageFilter) ([]*storage.Image, error) { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return nil, ErrRuntimeStopped - } - - images, err := r.store.Images() - if err != nil { - return nil, err - } - - var imagesFiltered []*storage.Image - - for _, img := range images { - info, err := r.getImageInspectInfo(img) - if err != nil { - return nil, err - } - var names []string - if len(img.Names) > 0 { - names = img.Names - } else { - names = append(names, "") - } - for _, name := range names { - include := true - if params != nil { - params.ImageName = name - } - for _, filter := range filters { - include = include && filter(&img, info) - } - - if include { - newImage := img - newImage.Names = []string{name} - imagesFiltered = append(imagesFiltered, &newImage) - } - } - } - - return imagesFiltered, nil -} - -// GetHistory gets the history of an image and information about its layers -func (r *Runtime) GetHistory(image string) ([]ociv1.History, []types.BlobInfo, string, error) { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return nil, nil, "", ErrRuntimeStopped - } - - img, err := r.getImage(image) - if err != nil { - return nil, nil, "", errors.Wrapf(err, "no such image %q", image) - } - - src, err := r.getImageRef(image) - if err != nil { - return nil, nil, "", errors.Wrapf(err, "error instantiating image %q", image) - } - - oci, err := src.OCIConfig() - if err != nil { - return nil, nil, "", err - } - - return oci.History, src.LayerInfos(), img.ID, nil -} - -// ImportImage imports an OCI format image archive into storage as an image -func (r *Runtime) ImportImage(path string) (*storage.Image, error) { - return nil, ErrNotImplemented -} - -// GetImageInspectInfo returns the inspect information of an image -func (r *Runtime) GetImageInspectInfo(image storage.Image) (*types.ImageInspectInfo, error) { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return nil, ErrRuntimeStopped - } - return r.getImageInspectInfo(image) -} - -func (r *Runtime) getImageInspectInfo(image storage.Image) (*types.ImageInspectInfo, error) { - img, err := r.getImageRef(image.ID) - if err != nil { - return nil, err - } - return img.Inspect() -} - -// ParseImageFilter takes a set of images and a filter string as input, and returns the libpod.ImageFilterParams struct -func (r *Runtime) ParseImageFilter(imageInput, filter string) (*ImageFilterParams, error) { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return nil, ErrRuntimeStopped - } - - if filter == "" && imageInput == "" { - return nil, nil - } - - var params ImageFilterParams - params.ImageInput = imageInput - - if filter == "" && imageInput != "" { - return ¶ms, nil - } - - images, err := r.store.Images() - if err != nil { - return nil, err - } - - filterStrings := strings.Split(filter, ",") - for _, param := range filterStrings { - pair := strings.SplitN(param, "=", 2) - switch strings.TrimSpace(pair[0]) { - case "dangling": - if common.IsValidBool(pair[1]) { - params.Dangling = pair[1] - } else { - return nil, fmt.Errorf("invalid filter: '%s=[%s]'", pair[0], pair[1]) - } - case "label": - params.Label = pair[1] - case "before": - if img, err := findImageInSlice(images, pair[1]); err == nil { - info, err := r.GetImageInspectInfo(img) - if err != nil { - return nil, err - } - params.BeforeImage = info.Created - } else { - return nil, fmt.Errorf("no such id: %s", pair[0]) - } - case "since": - if img, err := findImageInSlice(images, pair[1]); err == nil { - info, err := r.GetImageInspectInfo(img) - if err != nil { - return nil, err - } - params.SinceImage = info.Created - } else { - return nil, fmt.Errorf("no such id: %s``", pair[0]) - } - case "reference": - params.ReferencePattern = pair[1] - default: - return nil, fmt.Errorf("invalid filter: '%s'", pair[0]) - } - } - return ¶ms, nil -} - -// InfoAndDigestAndSize returns the inspection info and size of the image in the given -// store and the digest of its manifest, if it has one, or "" if it doesn't. -func (r *Runtime) InfoAndDigestAndSize(img storage.Image) (*types.ImageInspectInfo, digest.Digest, int64, error) { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return nil, "", -1, ErrRuntimeStopped - } - - imgRef, err := r.getImageRef("@" + img.ID) - if err != nil { - return nil, "", -1, errors.Wrapf(err, "error reading image %q", img.ID) - } - defer imgRef.Close() - return infoAndDigestAndSize(imgRef) -} - -func infoAndDigestAndSize(imgRef types.Image) (*types.ImageInspectInfo, digest.Digest, int64, error) { - imgSize, err := imgRef.Size() - if err != nil { - return nil, "", -1, errors.Wrapf(err, "error reading size of image %q", transports.ImageName(imgRef.Reference())) - } - manifest, _, err := imgRef.Manifest() - if err != nil { - return nil, "", -1, errors.Wrapf(err, "error reading manifest for image %q", transports.ImageName(imgRef.Reference())) - } - manifestDigest := digest.Digest("") - if len(manifest) > 0 { - manifestDigest = digest.Canonical.FromBytes(manifest) - } - info, err := imgRef.Inspect() - if err != nil { - return nil, "", -1, errors.Wrapf(err, "error inspecting image %q", transports.ImageName(imgRef.Reference())) - } - return info, manifestDigest, imgSize, nil -} - -// MatchesID returns true if argID is a full or partial match for id -func MatchesID(id, argID string) bool { - return strings.HasPrefix(argID, id) -} - -// MatchesReference returns true if argName is a full or partial match for name -// Partial matches will register only if they match the most specific part of the name available -// For example, take the image docker.io/library/redis:latest -// redis, library/redis, docker.io/library/redis, redis:latest, etc. will match -// But redis:alpine, ry/redis, library, and io/library/redis will not -func MatchesReference(name, argName string) bool { - if argName == "" { - return false - } - splitName := strings.Split(name, ":") - // If the arg contains a tag, we handle it differently than if it does not - if strings.Contains(argName, ":") { - splitArg := strings.Split(argName, ":") - return strings.HasSuffix(splitName[0], splitArg[0]) && (splitName[1] == splitArg[1]) - } - return strings.HasSuffix(splitName[0], argName) -} - -// ParseImageNames parses the names we've stored with an image into a list of -// tagged references and a list of references which contain digests. -func ParseImageNames(names []string) (tags, digests []string, err error) { - for _, name := range names { - if named, err := reference.ParseNamed(name); err == nil { - if digested, ok := named.(reference.Digested); ok { - canonical, err := reference.WithDigest(named, digested.Digest()) - if err == nil { - digests = append(digests, canonical.String()) - } - } else { - if reference.IsNameOnly(named) { - named = reference.TagNameOnly(named) - } - if tagged, ok := named.(reference.Tagged); ok { - namedTagged, err := reference.WithTag(named, tagged.Tag()) - if err == nil { - tags = append(tags, namedTagged.String()) - } - } - } - } - } - return tags, digests, nil -} - -func annotations(manifest []byte, manifestType string) map[string]string { - annotations := make(map[string]string) - switch manifestType { - case ociv1.MediaTypeImageManifest: - var m ociv1.Manifest - if err := json.Unmarshal(manifest, &m); err == nil { - for k, v := range m.Annotations { - annotations[k] = v - } - } - } - return annotations -} - -func findImageInSlice(images []storage.Image, ref string) (storage.Image, error) { - for _, image := range images { - if MatchesID(image.ID, ref) { - return image, nil - } - for _, name := range image.Names { - if MatchesReference(name, ref) { - return image, nil - } - } - } - return storage.Image{}, errors.New("could not find image") -} diff --git a/libpod/runtime_pod.go b/libpod/runtime_pod.go deleted file mode 100644 index 162b353e..00000000 --- a/libpod/runtime_pod.go +++ /dev/null @@ -1,122 +0,0 @@ -package libpod - -import ( - "github.com/pkg/errors" -) - -// Contains the public Runtime API for pods - -// A PodCreateOption is a functional option which alters the Pod created by -// NewPod -type PodCreateOption func(*Pod) error - -// PodFilter is a function to determine whether a pod is included in command -// output. Pods to be outputted are tested using the function. A true return -// will include the pod, a false return will exclude it. -type PodFilter func(*Pod) bool - -// NewPod makes a new, empty pod -func (r *Runtime) NewPod(options ...PodCreateOption) (*Pod, error) { - r.lock.Lock() - defer r.lock.Unlock() - - if !r.valid { - return nil, ErrRuntimeStopped - } - - pod, err := newPod() - if err != nil { - return nil, errors.Wrapf(err, "error creating pod") - } - - for _, option := range options { - if err := option(pod); err != nil { - return nil, errors.Wrapf(err, "error running pod create option") - } - } - - pod.valid = true - - if err := r.state.AddPod(pod); err != nil { - return nil, errors.Wrapf(err, "error adding pod to state") - } - - return nil, ErrNotImplemented -} - -// RemovePod removes a pod and all containers in it -// If force is specified, all containers in the pod will be stopped first -// Otherwise, RemovePod will return an error if any container in the pod is running -// Remove acts atomically, removing all containers or no containers -func (r *Runtime) RemovePod(p *Pod, force bool) error { - return ErrNotImplemented -} - -// GetPod retrieves a pod by its ID -func (r *Runtime) GetPod(id string) (*Pod, error) { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return nil, ErrRuntimeStopped - } - - return r.state.Pod(id) -} - -// HasPod checks to see if a pod with the given ID exists -func (r *Runtime) HasPod(id string) (bool, error) { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return false, ErrRuntimeStopped - } - - return r.state.HasPod(id) -} - -// LookupPod retrieves a pod by its name or a partial ID -// If a partial ID is not unique, an error will be returned -func (r *Runtime) LookupPod(idOrName string) (*Pod, error) { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return nil, ErrRuntimeStopped - } - - return r.state.LookupPod(idOrName) -} - -// Pods retrieves all pods -// Filters can be provided which will determine which pods are included in the -// output. Multiple filters are handled by ANDing their output, so only pods -// matching all filters are returned -func (r *Runtime) Pods(filters ...PodFilter) ([]*Pod, error) { - r.lock.RLock() - defer r.lock.RUnlock() - - if !r.valid { - return nil, ErrRuntimeStopped - } - - pods, err := r.state.AllPods() - if err != nil { - return nil, err - } - - podsFiltered := make([]*Pod, 0, len(pods)) - for _, pod := range pods { - include := true - for _, filter := range filters { - include = include && filter(pod) - } - - if include { - podsFiltered = append(podsFiltered, pod) - } - } - - return podsFiltered, nil -} diff --git a/libpod/state.go b/libpod/state.go deleted file mode 100644 index 1c21911b..00000000 --- a/libpod/state.go +++ /dev/null @@ -1,38 +0,0 @@ -package libpod - -// State is a storage backend for libpod's current state -type State interface { - // Accepts full ID of container - Container(id string) (*Container, error) - // Accepts full or partial IDs (as long as they are unique) and names - LookupContainer(idOrName string) (*Container, error) - // Checks if a container with the given ID is present in the state - HasContainer(id string) (bool, error) - // Adds container to state - // If the container belongs to a pod, that pod must already be present - // in the state when the container is added, and the container must be - // present in the pod - AddContainer(ctr *Container) error - // Removes container from state - // The container will only be removed from the state, not from the pod - // which the container belongs to - RemoveContainer(ctr *Container) error - // Retrieves all containers presently in state - AllContainers() ([]*Container, error) - - // Accepts full ID of pod - Pod(id string) (*Pod, error) - // Accepts full or partial IDs (as long as they are unique) and names - LookupPod(idOrName string) (*Pod, error) - // Checks if a pod with the given ID is present in the state - HasPod(id string) (bool, error) - // Adds pod to state - // Only empty pods can be added to the state - AddPod(pod *Pod) error - // Removes pod from state - // Containers within a pod will not be removed from the state, and will - // not be changed to remove them from the now-removed pod - RemovePod(pod *Pod) error - // Retrieves all pods presently in state - AllPods() ([]*Pod, error) -} diff --git a/libpod/storage.go b/libpod/storage.go deleted file mode 100644 index 5e18aaf5..00000000 --- a/libpod/storage.go +++ /dev/null @@ -1,261 +0,0 @@ -package libpod - -import ( - "encoding/json" - "time" - - istorage "github.com/containers/image/storage" - "github.com/containers/image/types" - "github.com/containers/storage" - "github.com/opencontainers/image-spec/specs-go/v1" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" -) - -type storageService struct { - store storage.Store -} - -// getStorageService returns a storageService which can create container root -// filesystems from images -func getStorageService(store storage.Store) (*storageService, error) { - return &storageService{store: store}, nil -} - -// ContainerInfo wraps a subset of information about a container: the locations -// of its nonvolatile and volatile per-container directories, along with a copy -// of the configuration blob from the image that was used to create the -// container, if the image had a configuration. -type ContainerInfo struct { - Dir string - RunDir string - Config *v1.Image -} - -// RuntimeContainerMetadata is the structure that we encode as JSON and store -// in the metadata field of storage.Container objects. It is used for -// specifying attributes containers when they are being created, and allows a -// container's MountLabel, and possibly other values, to be modified in one -// read/write cycle via calls to storageService.ContainerMetadata, -// RuntimeContainerMetadata.SetMountLabel, and -// storageService.SetContainerMetadata. -type RuntimeContainerMetadata struct { - // The provided name and the ID of the image that was used to - // instantiate the container. - ImageName string `json:"image-name"` // Applicable to both PodSandboxes and Containers - ImageID string `json:"image-id"` // Applicable to both PodSandboxes and Containers - // The container's name, which for an infrastructure container is usually PodName + "-infra". - ContainerName string `json:"name"` // Applicable to both PodSandboxes and Containers, mandatory - CreatedAt int64 `json:"created-at"` // Applicable to both PodSandboxes and Containers - MountLabel string `json:"mountlabel,omitempty"` // Applicable to both PodSandboxes and Containers -} - -// SetMountLabel updates the mount label held by a RuntimeContainerMetadata -// object. -func (metadata *RuntimeContainerMetadata) SetMountLabel(mountLabel string) { - metadata.MountLabel = mountLabel -} - -// CreateContainerStorage creates the storage end of things. We already have the container spec created -// TO-DO We should be passing in an Image object in the future. -func (r *storageService) CreateContainerStorage(systemContext *types.SystemContext, imageName, imageID, containerName, containerID, mountLabel string) (ContainerInfo, error) { - var ref types.ImageReference - if imageName == "" && imageID == "" { - return ContainerInfo{}, ErrEmptyID - } - if containerName == "" { - return ContainerInfo{}, ErrEmptyID - } - //// Check if we have the specified image. - ref, err := istorage.Transport.ParseStoreReference(r.store, imageName) - if err != nil { - return ContainerInfo{}, err - } - img, err := istorage.Transport.GetStoreImage(r.store, ref) - if err != nil { - return ContainerInfo{}, err - } - // Pull out a copy of the image's configuration. - image, err := ref.NewImage(systemContext) - if err != nil { - return ContainerInfo{}, err - } - defer image.Close() - - imageConfig, err := image.OCIConfig() - if err != nil { - return ContainerInfo{}, err - } - - // Update the image name and ID. - if imageName == "" && len(img.Names) > 0 { - imageName = img.Names[0] - } - imageID = img.ID - - // Build metadata to store with the container. - metadata := RuntimeContainerMetadata{ - ImageName: imageName, - ImageID: imageID, - ContainerName: containerName, - CreatedAt: time.Now().Unix(), - MountLabel: mountLabel, - } - mdata, err := json.Marshal(&metadata) - if err != nil { - return ContainerInfo{}, err - } - - // Build the container. - names := []string{containerName} - - container, err := r.store.CreateContainer(containerID, names, img.ID, "", string(mdata), nil) - if err != nil { - logrus.Debugf("failed to create container %s(%s): %v", metadata.ContainerName, containerID, err) - - return ContainerInfo{}, err - } - logrus.Debugf("created container %q", container.ID) - - // If anything fails after this point, we need to delete the incomplete - // container before returning. - defer func() { - if err != nil { - if err2 := r.store.DeleteContainer(container.ID); err2 != nil { - logrus.Infof("%v deleting partially-created container %q", err2, container.ID) - - return - } - logrus.Infof("deleted partially-created container %q", container.ID) - } - }() - - // Add a name to the container's layer so that it's easier to follow - // what's going on if we're just looking at the storage-eye view of things. - layerName := metadata.ContainerName + "-layer" - names, err = r.store.Names(container.LayerID) - if err != nil { - return ContainerInfo{}, err - } - names = append(names, layerName) - err = r.store.SetNames(container.LayerID, names) - if err != nil { - return ContainerInfo{}, err - } - - // Find out where the container work directories are, so that we can return them. - containerDir, err := r.store.ContainerDirectory(container.ID) - if err != nil { - return ContainerInfo{}, err - } - logrus.Debugf("container %q has work directory %q", container.ID, containerDir) - - containerRunDir, err := r.store.ContainerRunDirectory(container.ID) - if err != nil { - return ContainerInfo{}, err - } - logrus.Debugf("container %q has run directory %q", container.ID, containerRunDir) - - return ContainerInfo{ - Dir: containerDir, - RunDir: containerRunDir, - Config: imageConfig, - }, nil -} - -func (r *storageService) DeleteContainer(idOrName string) error { - if idOrName == "" { - return ErrEmptyID - } - container, err := r.store.Container(idOrName) - if err != nil { - return err - } - err = r.store.DeleteContainer(container.ID) - if err != nil { - logrus.Debugf("failed to delete container %q: %v", container.ID, err) - return err - } - return nil -} - -func (r *storageService) SetContainerMetadata(idOrName string, metadata RuntimeContainerMetadata) error { - mdata, err := json.Marshal(&metadata) - if err != nil { - logrus.Debugf("failed to encode metadata for %q: %v", idOrName, err) - return err - } - return r.store.SetMetadata(idOrName, string(mdata)) -} - -func (r *storageService) GetContainerMetadata(idOrName string) (RuntimeContainerMetadata, error) { - metadata := RuntimeContainerMetadata{} - mdata, err := r.store.Metadata(idOrName) - if err != nil { - return metadata, err - } - if err = json.Unmarshal([]byte(mdata), &metadata); err != nil { - return metadata, err - } - return metadata, nil -} - -func (r *storageService) StartContainer(idOrName string) (string, error) { - container, err := r.store.Container(idOrName) - if err != nil { - if errors.Cause(err) == storage.ErrContainerUnknown { - return "", ErrNoSuchCtr - } - return "", err - } - metadata := RuntimeContainerMetadata{} - if err = json.Unmarshal([]byte(container.Metadata), &metadata); err != nil { - return "", err - } - mountPoint, err := r.store.Mount(container.ID, metadata.MountLabel) - if err != nil { - logrus.Debugf("failed to mount container %q: %v", container.ID, err) - return "", err - } - logrus.Debugf("mounted container %q at %q", container.ID, mountPoint) - return mountPoint, nil -} - -func (r *storageService) StopContainer(idOrName string) error { - if idOrName == "" { - return ErrEmptyID - } - container, err := r.store.Container(idOrName) - if err != nil { - return err - } - err = r.store.Unmount(container.ID) - if err != nil { - logrus.Debugf("failed to unmount container %q: %v", container.ID, err) - return err - } - logrus.Debugf("unmounted container %q", container.ID) - return nil -} - -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 "", err - } - return r.store.ContainerDirectory(container.ID) -} - -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 "", err - } - return r.store.ContainerRunDirectory(container.ID) -} diff --git a/libpod/util.go b/libpod/util.go deleted file mode 100644 index 0270af07..00000000 --- a/libpod/util.go +++ /dev/null @@ -1,34 +0,0 @@ -package libpod - -import ( - "os" - "path/filepath" -) - -// WriteFile writes a provided string to a provided path -func WriteFile(content string, path string) error { - baseDir := filepath.Dir(path) - if baseDir != "" { - if _, err := os.Stat(path); err != nil { - return err - } - } - f, err := os.Create(path) - if err != nil { - return err - } - defer f.Close() - f.WriteString(content) - f.Sync() - return nil -} - -// StringInSlice determines if a string is in a string slice, returns bool -func StringInSlice(s string, sl []string) bool { - for _, i := range sl { - if i == s { - return true - } - } - return false -} diff --git a/test/helpers.bash b/test/helpers.bash index 7034ddf2..c967d248 100644 --- a/test/helpers.bash +++ b/test/helpers.bash @@ -14,8 +14,6 @@ CRIO_BINARY=${CRIO_BINARY:-${CRIO_ROOT}/cri-o/bin/crio} # Path of the crictl binary. CRICTL_PATH=$(command -v crictl || true) CRICTL_BINARY=${CRICTL_PATH:-/usr/bin/crictl} -# Path to kpod binary. -KPOD_BINARY=${KPOD_BINARY:-${CRIO_ROOT}/cri-o/bin/kpod} # Path of the conmon binary. CONMON_BINARY=${CONMON_BINARY:-${CRIO_ROOT}/cri-o/bin/conmon} # Path of the pause binary. @@ -99,8 +97,6 @@ CRIO_CNI_PLUGIN=${CRIO_CNI_PLUGIN:-/opt/cni/bin/} POD_CIDR="10.88.0.0/16" POD_CIDR_MASK="10.88.*.*" -KPOD_OPTIONS="--root $TESTDIR/crio $STORAGE_OPTIONS --runroot $TESTDIR/crio-run --runtime ${RUNTIME_BINARY} --conmon ${CONMON_BINARY}" - cp "$CONMON_BINARY" "$TESTDIR/conmon" PATH=$PATH:$TESTDIR diff --git a/test/kpod_create.bats b/test/kpod_create.bats deleted file mode 100644 index 46a460ec..00000000 --- a/test/kpod_create.bats +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -function teardown() { - cleanup_test -} - -ALPINE="docker.io/library/alpine:latest" - -@test "create a container based on local image" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull docker.io/library/busybox:latest - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} create docker.io/library/busybox:latest ls - echo "$output" - [ "$status" -eq 0 ] -} - -@test "create a container based on a remote image" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} create ${ALPINE} ls - echo "$output" - [ "$status" -eq 0 ] -} diff --git a/test/kpod_diff.bats b/test/kpod_diff.bats deleted file mode 100644 index 53a94d01..00000000 --- a/test/kpod_diff.bats +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="alpine:latest" - -function teardown() { - cleanup_test -} - -@test "test diff of image and parent" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS diff $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] -} - -@test "test diff on non-existent layer" { - run ${KPOD_BINARY} $KPOD_OPTIONS diff "abc123" - echo "$output" - [ "$status" -ne 0 ] -} - -@test "test diff with json output" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - # run bash -c "${KPOD_BINARY} ${KPOD_OPTIONS} diff --format json $IMAGE | python -m json.tool" - run ${KPOD_BINARY} $KPOD_OPTIONS diff --format json $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] -} diff --git a/test/kpod_export.bats b/test/kpod_export.bats deleted file mode 100644 index 9454db39..00000000 --- a/test/kpod_export.bats +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="redis:alpine" - -function teardown() { - cleanup_test -} - -@test "kpod export output flag" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run ${KPOD_BINARY} ${KPOD_OPTIONS} export -o container.tar "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio - rm -f container.tar -} diff --git a/test/kpod_history.bats b/test/kpod_history.bats deleted file mode 100644 index aa89cfe6..00000000 --- a/test/kpod_history.bats +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="alpine:latest" - -function teardown() { - cleanup_test -} - -@test "kpod history default" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} history $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod history with Go template format" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} history --format "{{.ID}} {{.Created}}" $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod history human flag" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} history --human=false $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod history quiet flag" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} history -q $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod history no-trunc flag" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} history --no-trunc $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod history json flag" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run bash -c "${KPOD_BINARY} ${KPOD_OPTIONS} history --format json $IMAGE | python -m json.tool" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] -} diff --git a/test/kpod_images.bats b/test/kpod_images.bats deleted file mode 100644 index 0448d61b..00000000 --- a/test/kpod_images.bats +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="debian:6.0.10" - -function teardown() { - cleanup_test -} - -@test "kpod images" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} images - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod images test valid json" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} images --format json - echo "$output" | python -m json.tool - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod images check name json output" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} images --format json - echo "$output" - [ "$status" -eq 0 ] - name=$(echo $output | python -c 'import sys; import json; print(json.loads(sys.stdin.read())[0])["names"][0]') - [ "$name" = "docker.io/library/${IMAGE}" ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] -} diff --git a/test/kpod_inspect.bats b/test/kpod_inspect.bats deleted file mode 100644 index ca4b7c8e..00000000 --- a/test/kpod_inspect.bats +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="redis:alpine" - -function teardown() { - cleanup_test -} - -@test "kpod inspect image" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] - run bash -c "${KPOD_BINARY} $KPOD_OPTIONS inspect ${IMAGE} | python -m json.tool" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] -} - - -@test "kpod inspect non-existent container" { - run ${KPOD_BINARY} $KPOD_OPTIONS inspect 14rcole/non-existent - echo "$output" - [ "$status" -ne 0 ] -} - -@test "kpod inspect with format" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS inspect --format {{.ID}} ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] - inspectOutput="$output" - run ${KPOD_BINARY} $KPOD_OPTIONS images --no-trunc --quiet ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] - [ "$output" = "$inspectOutput" ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod inspect specified type" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] - run bash -c "${KPOD_BINARY} $KPOD_OPTIONS inspect --type image ${IMAGE} | python -m json.tool" - echo "$output" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi ${IMAGE} - echo "$output" - [ "$status" -eq 0 ] -} diff --git a/test/kpod_kill.bats b/test/kpod_kill.bats deleted file mode 100644 index 15487514..00000000 --- a/test/kpod_kill.bats +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -function teardown() { - cleanup_test -} - -function start_sleep_container () { - pod_id=$(crioctl pod run --config "$TESTDATA"/sandbox_config.json) - ctr_id=$(crioctl ctr create --config "$TESTDATA"/container_config_sleep.json --pod "$pod_id") - crioctl ctr start --id "$ctr_id" -} - -@test "kill a bogus container" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} kill foobar - echo "$output" - [ "$status" -ne 0 ] -} - -@test "kill a running container by id" { - start_crio - ${KPOD_BINARY} ${KPOD_OPTIONS} pull docker.io/library/busybox:latest - ctr_id=$( start_sleep_container ) - crioctl ctr status --id "$ctr_id" - ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a - ${KPOD_BINARY} ${KPOD_OPTIONS} logs "$ctr_id" - crioctl ctr status --id "$ctr_id" - run ${KPOD_BINARY} ${KPOD_OPTIONS} kill "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kill a running container by id with TERM" { - start_crio - ${KPOD_BINARY} ${KPOD_OPTIONS} pull docker.io/library/busybox:latest - ctr_id=$( start_sleep_container ) - crioctl ctr status --id "$ctr_id" - ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a - ${KPOD_BINARY} ${KPOD_OPTIONS} logs "$ctr_id" - crioctl ctr status --id "$ctr_id" - run ${KPOD_BINARY} ${KPOD_OPTIONS} kill -s TERM "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kill a running container by name" { - start_crio - ${KPOD_BINARY} ${KPOD_OPTIONS} pull docker.io/library/busybox:latest - ctr_id=$( start_sleep_container ) - crioctl ctr status --id "$ctr_id" - ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a - ${KPOD_BINARY} ${KPOD_OPTIONS} logs "$ctr_id" - crioctl ctr status --id "$ctr_id" - ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a - run ${KPOD_BINARY} ${KPOD_OPTIONS} kill "k8s_container999_podsandbox1_redhat.test.crio_redhat-test-crio_1" - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kill a running container by id with a bogus signal" { - start_crio - ${KPOD_BINARY} ${KPOD_OPTIONS} pull docker.io/library/busybox:latest - ctr_id=$( start_sleep_container ) - crioctl ctr status --id "$ctr_id" - ${KPOD_BINARY} ${KPOD_OPTIONS} logs "$ctr_id" - crioctl ctr status --id "$ctr_id" - run ${KPOD_BINARY} ${KPOD_OPTIONS} kill -s foobar "$ctr_id" - echo "$output" - [ "$status" -ne 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} diff --git a/test/kpod_load.bats b/test/kpod_load.bats deleted file mode 100644 index e3896b2a..00000000 --- a/test/kpod_load.bats +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="alpine:latest" - -function teardown() { - cleanup_test -} - -@test "kpod load input flag" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} save -o alpine.tar $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} load -i alpine.tar - echo "$output" - [ "$status" -eq 0 ] - rm -f alpine.tar - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod load oci-archive image" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} save -o alpine.tar --format oci-archive $IMAGE - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi $IMAGE - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} load -i alpine.tar - echo "$output" - [ "$status" -eq 0 ] - rm -f alpine.tar - run ${KPOD_BINARY} $KPOD_OPTIONS rmi $IMAGE - [ "$status" -eq 0 ] -} - -@test "kpod load oci-archive image with signature-policy" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} save -o alpine.tar --format oci-archive $IMAGE - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi $IMAGE - [ "$status" -eq 0 ] - cp /etc/containers/policy.json /tmp - run ${KPOD_BINARY} ${KPOD_OPTIONS} load --signature-policy /tmp/policy.json -i alpine.tar - echo "$output" - [ "$status" -eq 0 ] - rm -f /tmp/policy.json - rm -f alpine.tar - run ${KPOD_BINARY} $KPOD_OPTIONS rmi $IMAGE - [ "$status" -eq 0 ] -} - -@test "kpod load using quiet flag" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} save -o alpine.tar $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} load -q -i alpine.tar - echo "$output" - [ "$status" -eq 0 ] - rm -f alpine.tar - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi $IMAGE - [ "$status" -eq 0 ] -} - -@test "kpod load non-existent file" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} load -i alpine.tar - echo "$output" - [ "$status" -ne 0 ] -} diff --git a/test/kpod_logs.bats b/test/kpod_logs.bats deleted file mode 100644 index 1e301556..00000000 --- a/test/kpod_logs.bats +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="alpine:latest" - -function teardown() { - cleanup_test -} - -@test "display logs for container" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS logs "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "tail three lines of logs for container" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS logs --tail 3 $ctr_id - echo "$output" - lines=$(echo "$output" | wc -l) - [ "$status" -eq 0 ] - [[ $(wc -l < "$output" ) -le 3 ]] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "display logs for container since a given time" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS logs --since 2017-08-07T10:10:09.056611202-04:00 $ctr_id - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} diff --git a/test/kpod_mount.bats b/test/kpod_mount.bats deleted file mode 100644 index 237dd584..00000000 --- a/test/kpod_mount.bats +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="redis:alpine" - -function teardown() { - cleanup_test -} - -@test "mount" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run ${KPOD_BINARY} ${KPOD_OPTIONS} mount $ctr_id - echo "$output" - echo ${KPOD_BINARY} ${KPOD_OPTIONS} mount $ctr_id - [ "$status" -eq 0 ] - run bash -c "${KPOD_BINARY} ${KPOD_OPTIONS} mount --notruncate | grep $ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} unmount $ctr_id - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} mount $ctr_id - echo "$output" - [ "$status" -eq 0 ] - root="$output" - run bash -c "${KPOD_BINARY} ${KPOD_OPTIONS} mount --format=json | python -m json.tool | grep $ctr_id" - echo "$output" - [ "$status" -eq 0 ] - touch $root/foobar - run ${KPOD_BINARY} ${KPOD_OPTIONS} unmount $ctr_id - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} diff --git a/test/kpod_pause.bats b/test/kpod_pause.bats deleted file mode 100644 index 84321beb..00000000 --- a/test/kpod_pause.bats +++ /dev/null @@ -1,169 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="redis:alpine" - -function teardown() { - cleanup_test -} - -@test "pause a bogus container" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pause foobar - echo "$output" - [ "$status" -eq 1 ] -} - -@test "unpause a bogus container" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} unpause foobar - echo "$output" - [ "$status" -eq 1 ] -} - -@test "pause a created container by id" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run ${KPOD_BINARY} ${KPOD_OPTIONS} pause "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} unpause "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --filter id="$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_pods - stop_crio -} - -@test "pause a running container by id" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_redis.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - id="$output" - run ${KPOD_BINARY} ${KPOD_OPTIONS} pause "$id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} unpause "$id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --filter id="$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_pods - stop_crio -} - -@test "pause a running container by name" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_redis.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} pause "k8s_podsandbox1-redis_podsandbox1_redhat.test.crio_redhat-test-crio_0" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} unpause "k8s_podsandbox1-redis_podsandbox1_redhat.test.crio_redhat-test-crio_0" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --filter id="k8s_podsandbox1-redis_podsandbox1_redhat.test.crio_redhat-test-crio_0" - echo "$output" - [ "$status" -eq 0 ] - cleanup_pods - stop_crio -} - -@test "remove a paused container by id" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_redis.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - echo "$output" - id="$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} pause "$id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rm "$id" - echo "$output" - [ "$status" -eq 1 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rm --force "$id" - echo "$output" - [ "$status" -eq 1 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} unpause "$id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} stop "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rm "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_pods - stop_crio -} - -@test "stop a paused container created by id" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run ${KPOD_BINARY} ${KPOD_OPTIONS} pause "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} stop "$ctr_id" - echo "$output" - [ "$status" -eq 1 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} unpause "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --filter id="$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_pods - stop_crio -} diff --git a/test/kpod_ps.bats b/test/kpod_ps.bats deleted file mode 100644 index a4a7b6cb..00000000 --- a/test/kpod_ps.bats +++ /dev/null @@ -1,313 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="redis:alpine" - -@test "kpod ps with no containers" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod ps default" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kpod ps all flag" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps --all - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kpod ps size flag" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a -s - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --size - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kpod ps quiet flag" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a -q - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --quiet - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kpod ps latest flag" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps --latest - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -l - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kpod ps last flag" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps --last 2 - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -n 2 - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kpod ps no-trunc flag" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --no-trunc - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kpod ps namespace flag" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --ns - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps --all --namespace - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kpod ps namespace flag and format flag = json" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - run bash -c "${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --ns --format json | python -m json.tool | grep namespace" - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kpod ps without namespace flag and format flag = json" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - run bash -c "${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --format json | python -m json.tool | grep namespace" - echo "$output" - [ "$status" -eq 1 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kpod ps format flag = go template" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --format "table {{.ID}} {{.Image}} {{.Labels}}" - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kpod ps filter flag - ancestor" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --filter ancestor=${IMAGE} - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kpod ps filter flag - id" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --filter id="$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "kpod ps filter flag - status" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl image pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run ${KPOD_BINARY} ${KPOD_OPTIONS} ps -a --filter status=running - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} diff --git a/test/kpod_pull.bats b/test/kpod_pull.bats deleted file mode 100644 index c12c6241..00000000 --- a/test/kpod_pull.bats +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="alpine:latest" - -function teardown() { - cleanup_test -} - -@test "kpod pull from docker with tag" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull debian:6.0.10 - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi debian:6.0.10 - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod pull from docker without tag" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull debian - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi debian - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod pull from a non-docker registry with tag" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull registry.fedoraproject.org/fedora:rawhide - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi registry.fedoraproject.org/fedora:rawhide - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod pull from a non-docker registry without tag" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull registry.fedoraproject.org/fedora - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi registry.fedoraproject.org/fedora - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod pull using digest" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull alpine@sha256:1072e499f3f655a032e88542330cf75b02e7bdf673278f701d7ba61629ee3ebe - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi alpine:latest - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod pull from a non existent image" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull umohnani/get-started - echo "$output" - [ "$status" -ne 0 ] -} - -@test "kpod pull from docker with shortname" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull debian - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi docker.io/debian:latest - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod pull from docker with shortname and tag" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull debian:6.0.10 - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rmi docker.io/debian:6.0.10 - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod pull from docker-archive" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull alpine - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} save -o alp.tar alpine - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi alpine - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull docker-archive:alp.tar - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi alpine - echo "$output" - [ "$status" -eq 0 ] - rm -f alp.tar -} - -@test "kpod pull from oci-archive" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull alpine - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} save --format oci-archive -o oci-alp.tar alpine - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi alpine - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull oci-archive:oci-alp.tar - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi alpine - echo "$output" - [ "$status" -eq 0 ] - rm -f oci-alp.tar -} - -@test "kpod pull from local directory" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull alpine - echo "$output" - [ "$status" -eq 0 ] - run mkdir test_pull_dir - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} push alpine dir:test_pull_dir - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi alpine - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull dir:test_pull_dir - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi test_pull_dir - echo "$output" - [ "$status" -eq 0 ] - rm -rf test_pull_dir -} diff --git a/test/kpod_push.bats b/test/kpod_push.bats deleted file mode 100644 index e8fe4fdb..00000000 --- a/test/kpod_push.bats +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="alpine:latest" - -function teardown() { - cleanup_test -} - -@test "kpod push to containers/storage" { - echo # Pull down the image: it gets the name $IMAGE. - run ${KPOD_BINARY} $KPOD_OPTIONS --log-level=debug pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - echo # Push the image right back into storage: it now has two names. - run ${KPOD_BINARY} $KPOD_OPTIONS --log-level=debug push "$IMAGE" containers-storage:busybox:test - echo "$output" - [ "$status" -eq 0 ] - echo # Try to remove it using the first name. Should be refused. - run ${KPOD_BINARY} $KPOD_OPTIONS --log-level=debug rmi "$IMAGE" - echo "$output" - [ "$status" -ne 0 ] - echo # Try to remove it using the second name. Should also be refused. - run ${KPOD_BINARY} $KPOD_OPTIONS --log-level=debug rmi busybox:test - echo "$output" - [ "$status" -ne 0 ] - echo # Force removal despite having multiple names. Should succeed. - run ${KPOD_BINARY} $KPOD_OPTIONS --log-level=debug rmi -f busybox:test - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod push to directory" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run mkdir /tmp/busybox - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS push "$IMAGE" dir:/tmp/busybox - echo "$output" - [ "$status" -eq 0 ] - rm -rf /tmp/busybox - run ${KPOD_BINARY} $KPOD_OPTIONS rmi "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod push to docker archive" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS push "$IMAGE" docker-archive:/tmp/busybox-archive:1.26 - echo "$output" - [ "$status" -eq 0 ] - rm /tmp/busybox-archive - run ${KPOD_BINARY} $KPOD_OPTIONS rmi "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod push to oci-archive without compression" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS push "$IMAGE" oci-archive:/tmp/oci-busybox.tar:alpine - echo "$output" - [ "$status" -eq 0 ] - rm -f /tmp/oci-busybox.tar - run ${KPOD_BINARY} $KPOD_OPTIONS rmi "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] -} - -@test "kpod push without signatures" { - run ${KPOD_BINARY} $KPOD_OPTIONS pull "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] - run mkdir /tmp/busybox - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS push --remove-signatures "$IMAGE" dir:/tmp/busybox - echo "$output" - [ "$status" -eq 0 ] - rm -rf /tmp/busybox - run ${KPOD_BINARY} $KPOD_OPTIONS rmi "$IMAGE" - echo "$output" - [ "$status" -eq 0 ] -} diff --git a/test/kpod_rename.bats b/test/kpod_rename.bats deleted file mode 100644 index ed3fdada..00000000 --- a/test/kpod_rename.bats +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="redis:alpine" - -function teardown() { - cleanup_test -} - -@test "kpod rename successful" { - start_crio - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - pod_id="$output" - [ "$status" -eq 0 ] - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - ctr_id="$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rename "$ctr_id" "$NEW_NAME" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS inspect "$ctr_id" --format {{.Name}} - echo "$output" - [ "$status" -eq 0 ] - [ "$output" == "$NEW_NAME" ] - cleanup_ctrs - cleanup_pods - stop_crio -} diff --git a/test/kpod_rm.bats b/test/kpod_rm.bats deleted file mode 100644 index 022e3efc..00000000 --- a/test/kpod_rm.bats +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="alpine:latest" - -function teardown() { - cleanup_test -} - -@test "remove a stopped container" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run crioctl ctr stop --id "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rm "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_pods - stop_crio -} - -@test "refuse to remove a running container" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_redis.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rm "$ctr_id" - echo "$output" - [ "$status" -ne 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "remove a created container" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run ${KPOD_BINARY} $KPOD_OPTIONS rm -f "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_pods - stop_crio -} - -@test "remove a running container" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_redis.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} $KPOD_OPTIONS rm -f "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_pods - stop_crio -} diff --git a/test/kpod_run.bats b/test/kpod_run.bats deleted file mode 100644 index 4945691a..00000000 --- a/test/kpod_run.bats +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -ALPINE="docker.io/library/alpine:latest" - -@test "run a container based on local image" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull docker.io/library/busybox:latest - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} run docker.io/library/busybox:latest ls - echo "$output" - [ "$status" -eq 0 ] -} - -@test "run a container based on a remote image" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} run ${ALPINE} ls - echo "$output" - [ "$status" -eq 0 ] -} diff --git a/test/kpod_save.bats b/test/kpod_save.bats deleted file mode 100644 index d8c581a5..00000000 --- a/test/kpod_save.bats +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="alpine:latest" - -function teardown() { - cleanup_test -} - -@test "kpod save output flag" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} save -o alpine.tar $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] - rm -f alpine.tar -} - -@test "kpod save oci flag" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} save -o alpine.tar --format oci-archive $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi $IMAGE - [ "$status" -eq 0 ] - rm -f alpine.tar -} - -@test "kpod save using stdout" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} save > alpine.tar $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] - rm -f alpine.tar -} - -@test "kpod save quiet flag" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} save -q -o alpine.tar $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi $IMAGE - echo "$output" - [ "$status" -eq 0 ] - rm -f alpine.tar -} - -@test "kpod save non-existent image" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} save -o alpine.tar $IMAGE - echo "$output" - [ "$status" -ne 0 ] -} diff --git a/test/kpod_stats.bats b/test/kpod_stats.bats deleted file mode 100644 index a4b8e61e..00000000 --- a/test/kpod_stats.bats +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -function teardown() { - cleanup_test -} - -@test "stats single output" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_redis.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} stats --no-stream "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "stats does not output stopped container" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_redis.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run ${KPOD_BINARY} ${KPOD_OPTIONS} stats --no-stream - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "stats outputs stopped container with all flag" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_redis.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run ${KPOD_BINARY} ${KPOD_OPTIONS} stats --no-stream --all - echo "$output" - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "stats output only id" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_redis.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} stats --no-stream --format {{.ID}} "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - # once ps is implemented, run ps -q and see if that equals the output from above - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "stats streaming output" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_redis.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run timeout 5s bash -c "${KPOD_BINARY} ${KPOD_OPTIONS} stats --all" - echo "$output" - [ "$status" -eq 124 ] #124 is the status set by timeout when it has to kill the command at the end of the given time - cleanup_ctrs - cleanup_pods - stop_crio -} diff --git a/test/kpod_stop.bats b/test/kpod_stop.bats deleted file mode 100644 index 72e818d4..00000000 --- a/test/kpod_stop.bats +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -function teardown() { - cleanup_test -} - -@test "stop a bogus container" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} stop foobar - echo "$output" - [ "$status" -eq 1 ] -} - -@test "stop a running container by id" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - echo "$output" - id="$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} stop "$id" - echo "$output" - [ "$status" -eq 0 ] - cleanup_pods - stop_crio -} - -@test "stop a running container by name" { - start_crio - run crioctl pod run --config "$TESTDATA"/sandbox_config.json - echo "$output" - [ "$status" -eq 0 ] - pod_id="$output" - run crioctl ctr create --config "$TESTDATA"/container_config.json --pod "$pod_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_id="$output" - run crioctl ctr start --id "$ctr_id" - [ "$status" -eq 0 ] - run crioctl ctr inspect --id "$ctr_id" - echo "$output" - [ "$status" -eq 0 ] - ctr_name=$(python -c 'import json; import sys; print json.load(sys.stdin)["crio_annotations"]["io.kubernetes.cri-o.Name"]' <<< "$output") - echo container name is \""$ctr_name"\" - run ${KPOD_BINARY} ${KPOD_OPTIONS} stop "$ctr_name" - echo "$output" - [ "$status" -eq 0 ] - cleanup_pods - stop_crio -} diff --git a/test/kpod_tag.bats b/test/kpod_tag.bats deleted file mode 100644 index 93109db5..00000000 --- a/test/kpod_tag.bats +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="alpine:latest" - -function teardown() { - cleanup_test -} - -@test "kpod tag with shortname:latest" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} tag $IMAGE foobar:latest - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} inspect foobar:latest - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi --force foobar:latest - [ "$status" -eq 0 ] -} - -@test "kpod tag with shortname" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} tag $IMAGE foobar - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} inspect foobar:latest - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi --force foobar:latest - [ "$status" -eq 0 ] -} - -@test "kpod tag with shortname:tag" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull $IMAGE - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} tag $IMAGE foobar:v - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} inspect foobar:v - echo "$output" - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} rmi --force foobar:v - [ "$status" -eq 0 ] -} diff --git a/test/kpod_version.bats b/test/kpod_version.bats deleted file mode 100644 index e6c062b8..00000000 --- a/test/kpod_version.bats +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -function teardown() { - cleanup_test -} - -@test "kpod version test" { - run ${KPOD_BINARY} version - echo "$output" - [ "$status" -eq 0 ] -} diff --git a/test/kpod_wait.bats b/test/kpod_wait.bats deleted file mode 100644 index ba7556b2..00000000 --- a/test/kpod_wait.bats +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env bats - -load helpers - -IMAGE="redis:alpine" - -# Returns the POD ID -function pod_run_from_template(){ - #1=name, 2=uid, 3=namespace) { - NAME=$1 CUID=$2 NAMESPACE=$3 envsubst < ${TESTDATA}/template_sandbox_config.json > ${TESTDIR}/pod-${1}.json - crioctl pod run --config ${TESTDIR}/pod-${1}.json -} - -# Returns the container ID -function container_create_from_template() { - #1=name, 2=image, 3=command, 4=id) { - NAME=$1 IMAGE=$2 COMMAND=$3 envsubst < ${TESTDATA}/template_container_config.json > ${TESTDIR}/ctr-${1}.json - crioctl ctr create --config ${TESTDIR}/ctr-${1}.json --pod "$4" -} - -function container_start() { - #1=id - crioctl ctr start --id "$1" - -} -@test "wait on a bogus container" { - start_crio - run ${KPOD_BINARY} ${KPOD_OPTIONS} wait 12343 - echo $output - [ "$status" -eq 1 ] - stop_crio -} - -@test "wait on a stopped container" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull docker.io/library/busybox:latest - echo $output - [ "$status" -eq 0 ] - start_crio - pod_id=$( pod_run_from_template "test" "test" "test1-1" ) - echo $pod_id - ctr_id=$(container_create_from_template "test-CTR" "docker.io/library/busybox:latest" '["ls"]' "${pod_id}") - echo $ctr_id - container_start $ctr_id - run ${KPOD_BINARY} ${KPOD_OPTIONS} wait $ctr_id - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} - -@test "wait on a sleeping container" { - run ${KPOD_BINARY} ${KPOD_OPTIONS} pull docker.io/library/busybox:latest - echo $output - [ "$status" -eq 0 ] - start_crio - pod_id=$( pod_run_from_template "test" "test" "test1-1" ) - echo $pod_id - ctr_id=$(container_create_from_template "test-CTR" "docker.io/library/busybox:latest" '["sleep", "5"]' "${pod_id}") - echo $ctr_id - run container_start $ctr_id - echo $output - [ "$status" -eq 0 ] - run ${KPOD_BINARY} ${KPOD_OPTIONS} wait $ctr_id - echo $output - [ "$status" -eq 0 ] - cleanup_ctrs - cleanup_pods - stop_crio -} diff --git a/tutorial.md b/tutorial.md index 2b48c21c..ac1b69ea 100644 --- a/tutorial.md +++ b/tutorial.md @@ -129,13 +129,11 @@ sudo make install Output: ``` -install -D -m 755 kpod /usr/local/bin/kpod install -D -m 755 crio /usr/local/bin/crio install -D -m 755 crioctl /usr/local/bin/crioctl install -D -m 755 conmon/conmon /usr/local/libexec/crio/conmon install -D -m 755 pause/pause /usr/local/libexec/crio/pause install -d -m 755 /usr/local/share/man/man{1,5,8} -install -m 644 docs/kpod.1 docs/kpod-launch.1 -t /usr/local/share/man/man1 install -m 644 docs/crio.conf.5 -t /usr/local/share/man/man5 install -m 644 docs/crio.8 -t /usr/local/share/man/man8 install -D -m 644 crio.conf /etc/crio/crio.conf