aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbaude <bbaude@redhat.com>2018-04-27 14:00:32 -0500
committerAtomic Bot <atomic-devel@projectatomic.io>2018-05-03 17:31:33 +0000
commit8dfebd4607c1152bd26c4a586e6d56a196c56e54 (patch)
treee4fdfcc0b1813fccd2ee6134931afbf2725a8208
parentfae5033a01b78d3e8f23c1c9438bc5534dfe0fa3 (diff)
downloadpodman-8dfebd4607c1152bd26c4a586e6d56a196c56e54.tar.gz
podman-8dfebd4607c1152bd26c4a586e6d56a196c56e54.tar.bz2
podman-8dfebd4607c1152bd26c4a586e6d56a196c56e54.zip
varlink containers
first pass at adding in the container related endpoints/methods for the libpod backend. Couple of important notes: * endpoints that can use a console are not going to be done until we have "remote" console * several of the container methods should probably be able to stream as opposed to a one-off return Signed-off-by: baude <bbaude@redhat.com> Closes: #708 Approved by: baude
-rw-r--r--cmd/podman/batchcontainer/container.go159
-rw-r--r--cmd/podman/ps.go290
-rw-r--r--cmd/podman/restart.go26
-rw-r--r--cmd/podman/varlink/io.projectatomic.podman.varlink103
-rw-r--r--cmd/podman/varlink/ioprojectatomicpodman.go1380
-rw-r--r--libpod/container_api.go49
-rw-r--r--libpod/container_internal.go2
-rw-r--r--pkg/varlinkapi/containers.go346
-rw-r--r--pkg/varlinkapi/util.go67
9 files changed, 1616 insertions, 806 deletions
diff --git a/cmd/podman/batchcontainer/container.go b/cmd/podman/batchcontainer/container.go
new file mode 100644
index 000000000..5d3171c42
--- /dev/null
+++ b/cmd/podman/batchcontainer/container.go
@@ -0,0 +1,159 @@
+package batchcontainer
+
+import (
+ "time"
+
+ "github.com/pkg/errors"
+ "github.com/projectatomic/libpod/libpod"
+ "github.com/sirupsen/logrus"
+ "os"
+ "path/filepath"
+ "regexp"
+ "strconv"
+ "strings"
+)
+
+// PsOptions describes the struct being formed for ps
+type PsOptions struct {
+ All bool
+ Filter string
+ Format string
+ Last int
+ Latest bool
+ NoTrunc bool
+ Quiet bool
+ Size bool
+ Label string
+ Namespace bool
+}
+
+// BatchContainerStruct is the return obkect from BatchContainer and contains
+// container related information
+type BatchContainerStruct struct {
+ ConConfig *libpod.ContainerConfig
+ ConState libpod.ContainerStatus
+ ExitCode int32
+ Pid int
+ RootFsSize, RwSize int64
+ StartedTime time.Time
+}
+
+// Namespace describes output for ps namespace
+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"`
+}
+
+// BatchContainer is used in ps to reduce performance hits by "batching"
+// locks.
+func BatchContainerOp(ctr *libpod.Container, opts PsOptions) (BatchContainerStruct, error) {
+ var (
+ conConfig *libpod.ContainerConfig
+ conState libpod.ContainerStatus
+ err error
+ exitCode int32
+ pid int
+ rootFsSize, rwSize int64
+ startedTime time.Time
+ )
+
+ batchErr := ctr.Batch(func(c *libpod.Container) error {
+ conConfig = c.Config()
+ conState, err = c.State()
+ if err != nil {
+ return errors.Wrapf(err, "unable to obtain container state")
+ }
+
+ exitCode, err = c.ExitCode()
+ if err != nil {
+ return errors.Wrapf(err, "unable to obtain container exit code")
+ }
+ startedTime, err = c.StartedTime()
+ if err != nil {
+ logrus.Errorf("error getting started time for %q: %v", c.ID(), err)
+ }
+
+ if !opts.Size && !opts.Namespace {
+ return nil
+ }
+
+ if opts.Namespace {
+ pid, err = c.PID()
+ if err != nil {
+ return errors.Wrapf(err, "unable to obtain container pid")
+ }
+ }
+ if opts.Size {
+ rootFsSize, err = c.RootFsSize()
+ if err != nil {
+ logrus.Errorf("error getting root fs size for %q: %v", c.ID(), err)
+ }
+
+ rwSize, err = c.RWSize()
+ if err != nil {
+ logrus.Errorf("error getting rw size for %q: %v", c.ID(), err)
+ }
+
+ }
+ return nil
+ })
+ if batchErr != nil {
+ return BatchContainerStruct{}, batchErr
+ }
+ return BatchContainerStruct{
+ ConConfig: conConfig,
+ ConState: conState,
+ ExitCode: exitCode,
+ Pid: pid,
+ RootFsSize: rootFsSize,
+ RwSize: rwSize,
+ StartedTime: startedTime,
+ }, nil
+}
+
+// GetNamespaces returns a populated namespace struct
+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
+}
+
+// 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, ",")
+}
diff --git a/cmd/podman/ps.go b/cmd/podman/ps.go
index 0893e869a..907c437b6 100644
--- a/cmd/podman/ps.go
+++ b/cmd/podman/ps.go
@@ -3,10 +3,7 @@ package main
import (
"encoding/json"
"fmt"
- "os"
- "path/filepath"
"reflect"
- "regexp"
"strconv"
"strings"
"time"
@@ -15,6 +12,7 @@ import (
"github.com/docker/go-units"
specs "github.com/opencontainers/runtime-spec/specs-go"
"github.com/pkg/errors"
+ "github.com/projectatomic/libpod/cmd/podman/batchcontainer"
"github.com/projectatomic/libpod/cmd/podman/formats"
"github.com/projectatomic/libpod/cmd/podman/libpodruntime"
"github.com/projectatomic/libpod/libpod"
@@ -26,19 +24,6 @@ import (
const mountTruncLength = 12
-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
@@ -66,32 +51,21 @@ type psTemplateParams struct {
// psJSONParams will be populated by data from libpod.Container,
// 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 []ocicni.PortMapping `json:"ports"`
- RootFsSize int64 `json:"rootFsSize"`
- RWSize int64 `json:"rwSize"`
- 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"`
+ 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 []ocicni.PortMapping `json:"ports"`
+ RootFsSize int64 `json:"rootFsSize"`
+ RWSize int64 `json:"rwSize"`
+ Names string `json:"names"`
+ Labels fields.Set `json:"labels"`
+ Mounts []specs.Mount `json:"mounts"`
+ ContainerRunning bool `json:"ctrRunning"`
+ Namespaces *batchcontainer.Namespace `json:"namespace,omitempty"`
}
var (
@@ -168,22 +142,22 @@ func psCmd(c *cli.Context) error {
format := genPsFormat(c.String("format"), c.Bool("quiet"), c.Bool("size"), c.Bool("namespace"))
- 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"),
+ opts := batchcontainer.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"),
}
var filterFuncs []libpod.ContainerFilter
// When we are dealing with latest or last=n, we need to
// get all containers.
- if !opts.all && !opts.latest && opts.last < 1 {
+ if !opts.All && !opts.Latest && opts.Last < 1 {
// only get running containers
filterFuncs = append(filterFuncs, func(c *libpod.Container) bool {
state, _ := c.State()
@@ -191,8 +165,8 @@ func psCmd(c *cli.Context) error {
})
}
- if opts.filter != "" {
- filters := strings.Split(opts.filter, ",")
+ if opts.Filter != "" {
+ filters := strings.Split(opts.Filter, ",")
for _, f := range filters {
filterSplit := strings.Split(f, "=")
if len(filterSplit) < 2 {
@@ -208,10 +182,10 @@ func psCmd(c *cli.Context) error {
containers, err := runtime.GetContainers(filterFuncs...)
var outputContainers []*libpod.Container
- if opts.latest && len(containers) > 0 {
+ if opts.Latest && len(containers) > 0 {
outputContainers = append(outputContainers, containers[0])
- } else if opts.last > 0 && opts.last <= len(containers) {
- outputContainers = append(outputContainers, containers[:opts.last]...)
+ } else if opts.Last > 0 && opts.Last <= len(containers) {
+ outputContainers = append(outputContainers, containers[:opts.Last]...)
} else {
outputContainers = containers
}
@@ -397,15 +371,15 @@ func (p *psTemplateParams) headerMap() map[string]string {
}
// getTemplateOutput returns the modified container information
-func getTemplateOutput(containers []*libpod.Container, opts psOptions) ([]psTemplateParams, error) {
+func getTemplateOutput(containers []*libpod.Container, opts batchcontainer.PsOptions) ([]psTemplateParams, error) {
var (
psOutput []psTemplateParams
status, size string
- ns *namespace
+ ns *batchcontainer.Namespace
)
for _, ctr := range containers {
- batchInfo, err := batchContainerOp(ctr, opts)
+ batchInfo, err := batchcontainer.BatchContainerOp(ctr, opts)
if err != nil {
// If the error was ErrNoSuchCtr, it was probably
// removed sometime after we got the initial list.
@@ -421,11 +395,11 @@ func getTemplateOutput(containers []*libpod.Container, opts psOptions) ([]psTemp
runningFor := ""
// If the container has not be started, the "zero" value of time is 0001-01-01 00:00:00 +0000 UTC
// which would make the time elapsed about a few hundred of years. So checking for the "zero" value of time.Time
- if batchInfo.startedTime != (time.Time{}) {
- runningFor = units.HumanDuration(time.Since(batchInfo.startedTime))
+ if batchInfo.StartedTime != (time.Time{}) {
+ runningFor = units.HumanDuration(time.Since(batchInfo.StartedTime))
}
- createdAt := batchInfo.conConfig.CreatedTime.Format("2006-01-02 15:04:05 -0700 MST")
- imageName := batchInfo.conConfig.RootfsImageName
+ createdAt := batchInfo.ConConfig.CreatedTime.Format("2006-01-02 15:04:05 -0700 MST")
+ imageName := batchInfo.ConConfig.RootfsImageName
var createArtifact createConfig
artifact, err := ctr.GetArtifact("create-config")
@@ -436,27 +410,27 @@ func getTemplateOutput(containers []*libpod.Container, opts psOptions) ([]psTemp
} else {
logrus.Errorf("couldn't get some ps information, error getting artifact %q: %v", ctr.ID(), err)
}
- if opts.namespace {
- ns = getNamespaces(batchInfo.pid)
+ if opts.Namespace {
+ ns = batchcontainer.GetNamespaces(batchInfo.Pid)
}
- if opts.size {
+ if opts.Size {
- size = units.HumanSizeWithPrecision(float64(batchInfo.rwSize), 3) + " (virtual " + units.HumanSizeWithPrecision(float64(batchInfo.rootFsSize), 3) + ")"
+ size = units.HumanSizeWithPrecision(float64(batchInfo.RwSize), 3) + " (virtual " + units.HumanSizeWithPrecision(float64(batchInfo.RootFsSize), 3) + ")"
}
- command := strings.Join(batchInfo.conConfig.Spec.Process.Args, " ")
- if !opts.noTrunc {
+ command := strings.Join(batchInfo.ConConfig.Spec.Process.Args, " ")
+ if !opts.NoTrunc {
if len(command) > 20 {
command = command[:19] + "..."
}
}
- ports := portsToString(batchInfo.conConfig.PortMappings)
- mounts := getMounts(createArtifact.Volumes, opts.noTrunc)
+ ports := portsToString(batchInfo.ConConfig.PortMappings)
+ mounts := getMounts(createArtifact.Volumes, opts.NoTrunc)
labels := formatLabels(ctr.Labels())
- switch batchInfo.conState {
+ switch batchInfo.ConState {
case libpod.ContainerStateStopped:
- status = fmt.Sprintf("Exited (%d) %s ago", batchInfo.exitCode, runningFor)
+ status = fmt.Sprintf("Exited (%d) %s ago", batchInfo.ExitCode, runningFor)
case libpod.ContainerStateRunning:
status = "Up " + runningFor + " ago"
case libpod.ContainerStatePaused:
@@ -467,9 +441,9 @@ func getTemplateOutput(containers []*libpod.Container, opts psOptions) ([]psTemp
status = "Dead"
}
- if !opts.noTrunc {
+ if !opts.NoTrunc {
ctrID = shortID(ctr.ID())
- imageName = batchInfo.conConfig.RootfsImageName
+ imageName = batchInfo.ConConfig.RootfsImageName
}
params := psTemplateParams{
@@ -484,10 +458,10 @@ func getTemplateOutput(containers []*libpod.Container, opts psOptions) ([]psTemp
Names: ctr.Name(),
Labels: labels,
Mounts: mounts,
- PID: batchInfo.pid,
+ PID: batchInfo.Pid,
}
- if opts.namespace {
+ if opts.Namespace {
params.Cgroup = ns.Cgroup
params.IPC = ns.IPC
params.MNT = ns.MNT
@@ -501,65 +475,35 @@ func getTemplateOutput(containers []*libpod.Container, opts psOptions) ([]psTemp
return psOutput, nil
}
-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 []*libpod.Container, opts psOptions) ([]psJSONParams, error) {
+func getJSONOutput(containers []*libpod.Container, opts batchcontainer.PsOptions) ([]psJSONParams, error) {
var (
psOutput []psJSONParams
- ns *namespace
+ ns *batchcontainer.Namespace
)
for _, ctr := range containers {
- batchInfo, err := batchContainerOp(ctr, opts)
+ batchInfo, err := batchcontainer.BatchContainerOp(ctr, opts)
if err != nil {
return nil, err
}
- if opts.namespace {
- ns = getNamespaces(batchInfo.pid)
+ if opts.Namespace {
+ ns = batchcontainer.GetNamespaces(batchInfo.Pid)
}
params := psJSONParams{
ID: ctr.ID(),
- Image: batchInfo.conConfig.RootfsImageName,
- ImageID: batchInfo.conConfig.RootfsImageID,
- Command: batchInfo.conConfig.Spec.Process.Args,
- CreatedAt: batchInfo.conConfig.CreatedTime,
- RunningFor: time.Since(batchInfo.conConfig.CreatedTime),
- Status: batchInfo.conState.String(),
- Ports: batchInfo.conConfig.PortMappings,
- RootFsSize: batchInfo.rootFsSize,
- RWSize: batchInfo.rwSize,
- Names: batchInfo.conConfig.Name,
- Labels: batchInfo.conConfig.Labels,
- Mounts: batchInfo.conConfig.Spec.Mounts,
- ContainerRunning: batchInfo.conState == libpod.ContainerStateRunning,
+ Image: batchInfo.ConConfig.RootfsImageName,
+ ImageID: batchInfo.ConConfig.RootfsImageID,
+ Command: batchInfo.ConConfig.Spec.Process.Args,
+ CreatedAt: batchInfo.ConConfig.CreatedTime,
+ RunningFor: time.Since(batchInfo.ConConfig.CreatedTime),
+ Status: batchInfo.ConState.String(),
+ Ports: batchInfo.ConConfig.PortMappings,
+ RootFsSize: batchInfo.RootFsSize,
+ RWSize: batchInfo.RwSize,
+ Names: batchInfo.ConConfig.Name,
+ Labels: batchInfo.ConConfig.Labels,
+ Mounts: batchInfo.ConConfig.Spec.Mounts,
+ ContainerRunning: batchInfo.ConState == libpod.ContainerStateRunning,
Namespaces: ns,
}
psOutput = append(psOutput, params)
@@ -567,13 +511,13 @@ func getJSONOutput(containers []*libpod.Container, opts psOptions) ([]psJSONPara
return psOutput, nil
}
-func generatePsOutput(containers []*libpod.Container, opts psOptions) error {
- if len(containers) == 0 && opts.format != formats.JSONString {
+func generatePsOutput(containers []*libpod.Container, opts batchcontainer.PsOptions) error {
+ if len(containers) == 0 && opts.Format != formats.JSONString {
return nil
}
var out formats.Writer
- switch opts.format {
+ switch opts.Format {
case formats.JSONString:
psOutput, err := getJSONOutput(containers, opts)
if err != nil {
@@ -585,22 +529,12 @@ func generatePsOutput(containers []*libpod.Container, opts psOptions) error {
if err != nil {
return errors.Wrapf(err, "unable to create output")
}
- out = formats.StdoutTemplateArray{Output: psToGeneric(psOutput, []psJSONParams{}), Template: opts.format, Fields: psOutput[0].headerMap()}
+ 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, ",")
-}
-
// getLabels converts the labels to a string of the form "key=value, key2=value2"
func formatLabels(labels map[string]string) string {
var arr []string
@@ -647,77 +581,3 @@ func portsToString(ports []ocicni.PortMapping) string {
}
return strings.Join(portDisplay, ", ")
}
-
-type batchContainerStruct struct {
- conConfig *libpod.ContainerConfig
- conState libpod.ContainerStatus
- exitCode int32
- pid int
- rootFsSize, rwSize int64
- startedTime time.Time
-}
-
-func batchContainerOp(ctr *libpod.Container, opts psOptions) (batchContainerStruct, error) {
- var (
- conConfig *libpod.ContainerConfig
- conState libpod.ContainerStatus
- err error
- exitCode int32
- pid int
- rootFsSize, rwSize int64
- startedTime time.Time
- )
-
- batchErr := ctr.Batch(func(c *libpod.Container) error {
- conConfig = c.Config()
- conState, err = c.State()
- if err != nil {
- return errors.Wrapf(err, "unable to obtain container state")
- }
-
- exitCode, err = c.ExitCode()
- if err != nil {
- return errors.Wrapf(err, "unable to obtain container exit code")
- }
- startedTime, err = c.StartedTime()
- if err != nil {
- logrus.Errorf("error getting started time for %q: %v", c.ID(), err)
- }
-
- if !opts.size && !opts.namespace {
- return nil
- }
-
- if opts.namespace {
- pid, err = c.PID()
- if err != nil {
- return errors.Wrapf(err, "unable to obtain container pid")
- }
- }
- if opts.size {
- rootFsSize, err = c.RootFsSize()
- if err != nil {
- logrus.Errorf("error getting root fs size for %q: %v", c.ID(), err)
- }
-
- rwSize, err = c.RWSize()
- if err != nil {
- logrus.Errorf("error getting rw size for %q: %v", c.ID(), err)
- }
-
- }
- return nil
- })
- if batchErr != nil {
- return batchContainerStruct{}, batchErr
- }
- return batchContainerStruct{
- conConfig: conConfig,
- conState: conState,
- exitCode: exitCode,
- pid: pid,
- rootFsSize: rootFsSize,
- rwSize: rwSize,
- startedTime: startedTime,
- }, nil
-}
diff --git a/cmd/podman/restart.go b/cmd/podman/restart.go
index e01a76fd0..08e8b615b 100644
--- a/cmd/podman/restart.go
+++ b/cmd/podman/restart.go
@@ -1,6 +1,7 @@
package main
import (
+ "context"
"fmt"
"os"
@@ -64,7 +65,7 @@ func restartCmd(c *cli.Context) error {
ctrTimeout = timeout
}
- lastError = restartCtr(ctrTimeout, lastCtr)
+ lastError = lastCtr.RestartWithTimeout(context.TODO(), ctrTimeout)
}
}
@@ -83,7 +84,7 @@ func restartCmd(c *cli.Context) error {
ctrTimeout = timeout
}
- if err := restartCtr(ctrTimeout, ctr); err != nil {
+ if err := ctr.RestartWithTimeout(context.TODO(), ctrTimeout); err != nil {
if lastError != nil {
fmt.Fprintln(os.Stderr, lastError)
}
@@ -93,24 +94,3 @@ func restartCmd(c *cli.Context) error {
return lastError
}
-
-// Restart a single container
-func restartCtr(timeout uint, ctr *libpod.Container) error {
- state, err := ctr.State()
- if err != nil {
- return err
- }
- if state == libpod.ContainerStateRunning {
- if err := ctr.StopWithTimeout(timeout); err != nil {
- return err
- }
- }
-
- if err := ctr.Start(getContext()); err != nil {
- return err
- }
-
- fmt.Printf("%s\n", ctr.ID())
-
- return nil
-}
diff --git a/cmd/podman/varlink/io.projectatomic.podman.varlink b/cmd/podman/varlink/io.projectatomic.podman.varlink
index 92d540b96..5463562c2 100644
--- a/cmd/podman/varlink/io.projectatomic.podman.varlink
+++ b/cmd/podman/varlink/io.projectatomic.podman.varlink
@@ -53,32 +53,100 @@ type ImageSearch (
star_count: int
)
+# ListContainer is the returned struct for an individual container
+type ListContainerData (
+ id: string,
+ image: string,
+ imageid: string,
+ command: []string,
+ createdat: string,
+ runningfor: string,
+ status: string,
+ ports: []ContainerPortMappings,
+ rootfssize: int,
+ rwsize: int,
+ names: string,
+ labels: [string]string,
+ mounts: []ContainerMount,
+ containerrunning: bool,
+ namespaces: ContainerNameSpace
+)
+
+# ContainerStats is the return struct for the stats of a container
+type ContainerStats (
+ id: string,
+ name: string,
+ cpu: float,
+ cpu_nano: int,
+ system_nano: int,
+ mem_usage: int,
+ mem_limit: int,
+ mem_perc: float,
+ net_input: int,
+ net_output: int,
+ block_output: int,
+ block_input: int,
+ pids: int
+)
+
+# ContainerMount describes the struct for mounts in a container
+type ContainerMount (
+ destination: string,
+ type: string,
+ source: string,
+ options: []string
+)
+
+# ContainerPortMappings describes the struct for portmappings in an existing container
+type ContainerPortMappings (
+ host_port: string,
+ host_ip: string,
+ protocol: string,
+ container_port: string
+)
+
+# ContainerNamespace describes the namespace structure for an existing container
+type ContainerNameSpace (
+ user: string,
+ uts: string,
+ pidns: string,
+ pid: string,
+ cgroup: string,
+ net: string,
+ mnt: string,
+ ipc: string
+)
+
# System
method Ping() -> (ping: StringResponse)
method GetVersion() -> (version: Version)
# Containers
-method ListContainers() -> (notimplemented: NotImplemented)
+method ListContainers() -> (containers: []ListContainerData)
+method GetContainer(name: string) -> (container: ListContainerData)
method CreateContainer() -> (notimplemented: NotImplemented)
-method InspectContainer() -> (notimplemented: NotImplemented)
-method ListContainerProcesses() -> (notimplemented: NotImplemented)
-method GetContainerLogs() -> (notimplemented: NotImplemented)
-method ListContainerChanges() -> (notimplemented: NotImplemented)
-method ExportContainer() -> (notimplemented: NotImplemented)
-method GetContainerStats() -> (notimplemented: NotImplemented)
+method InspectContainer(name: string) -> (container: string)
+# TODO: Should this be made into a streaming response as opposed to a one off?
+method ListContainerProcesses(name: string, opts: []string) -> (container: []string)
+# TODO: Should this be made into a streaming response as opposed to a one off?
+method GetContainerLogs(name: string) -> (container: []string)
+method ListContainerChanges(name: string) -> (container: [string]string)
+# TODO: This should be made into a streaming response
+method ExportContainer(name: string, path: string) -> (tarfile: string)
+method GetContainerStats(name: string) -> (container: ContainerStats)
method ResizeContainerTty() -> (notimplemented: NotImplemented)
method StartContainer() -> (notimplemented: NotImplemented)
-method StopContainer() -> (notimplemented: NotImplemented)
-method RestartContainer() -> (notimplemented: NotImplemented)
-method KillContainer() -> (notimplemented: NotImplemented)
+method StopContainer(name: string, timeout: int) -> (container: string)
+method RestartContainer(name: string, timeout: int) -> (container: string)
+method KillContainer(name: string, signal: int) -> (container: string)
method UpdateContainer() -> (notimplemented: NotImplemented)
method RenameContainer() -> (notimplemented: NotImplemented)
-method PauseContainer() -> (notimplemented: NotImplemented)
-method UnpauseContainer() -> (notimplemented: NotImplemented)
+method PauseContainer(name: string) -> (container: string)
+method UnpauseContainer(name: string) -> (container: string)
method AttachToContainer() -> (notimplemented: NotImplemented)
-method WaitContainer() -> (notimplemented: NotImplemented)
-method RemoveContainer() -> (notimplemented: NotImplemented)
-method DeleteStoppedContainers() -> (notimplemented: NotImplemented)
+method WaitContainer(name: string) -> (exitcode: int)
+method RemoveContainer(name: string, force: bool) -> (container: string)
+method DeleteStoppedContainers() -> (containers: []string)
# Images
method ListImages() -> (images: []ImageInList)
@@ -99,6 +167,7 @@ method PullImage(name: string) -> (id: string)
# Something failed
error ActionFailed (reason: string)
-error ImageNotFound (imagename: string)
+error ImageNotFound (name: string)
+error ContainerNotFound (name: string)
error ErrorOccurred (reason: string)
-error RuntimeError (reason: string) \ No newline at end of file
+error RuntimeError (reason: string)
diff --git a/cmd/podman/varlink/ioprojectatomicpodman.go b/cmd/podman/varlink/ioprojectatomicpodman.go
index 68c438d5b..92e163372 100644
--- a/cmd/podman/varlink/ioprojectatomicpodman.go
+++ b/cmd/podman/varlink/ioprojectatomicpodman.go
@@ -4,10 +4,45 @@ package ioprojectatomicpodman
import "github.com/varlink/go/varlink"
// Type declarations
+type Version struct {
+ Version string `json:"version"`
+ Go_version string `json:"go_version"`
+ Git_commit string `json:"git_commit"`
+ Built int64 `json:"built"`
+ Os_arch string `json:"os_arch"`
+}
+
+type NotImplemented struct {
+ Comment string `json:"comment"`
+}
+
type StringResponse struct {
Message string `json:"message"`
}
+type ContainerStats struct {
+ Id string `json:"id"`
+ Name string `json:"name"`
+ Cpu float64 `json:"cpu"`
+ Cpu_nano int64 `json:"cpu_nano"`
+ System_nano int64 `json:"system_nano"`
+ Mem_usage int64 `json:"mem_usage"`
+ Mem_limit int64 `json:"mem_limit"`
+ Mem_perc float64 `json:"mem_perc"`
+ Net_input int64 `json:"net_input"`
+ Net_output int64 `json:"net_output"`
+ Block_output int64 `json:"block_output"`
+ Block_input int64 `json:"block_input"`
+ Pids int64 `json:"pids"`
+}
+
+type ContainerPortMappings struct {
+ Host_port string `json:"host_port"`
+ Host_ip string `json:"host_ip"`
+ Protocol string `json:"protocol"`
+ Container_port string `json:"container_port"`
+}
+
type ImageInList struct {
Id string `json:"id"`
ParentId string `json:"parentId"`
@@ -37,105 +72,127 @@ type ImageSearch struct {
Star_count int64 `json:"star_count"`
}
-type Version struct {
- Version string `json:"version"`
- Go_version string `json:"go_version"`
- Git_commit string `json:"git_commit"`
- Built int64 `json:"built"`
- Os_arch string `json:"os_arch"`
-}
-
-type NotImplemented struct {
- Comment string `json:"comment"`
+type ListContainerData struct {
+ Id string `json:"id"`
+ Image string `json:"image"`
+ Imageid string `json:"imageid"`
+ Command []string `json:"command"`
+ Createdat string `json:"createdat"`
+ Runningfor string `json:"runningfor"`
+ Status string `json:"status"`
+ Ports []ContainerPortMappings `json:"ports"`
+ Rootfssize int64 `json:"rootfssize"`
+ Rwsize int64 `json:"rwsize"`
+ Names string `json:"names"`
+ Labels map[string]string `json:"labels"`
+ Mounts []ContainerMount `json:"mounts"`
+ Containerrunning bool `json:"containerrunning"`
+ Namespaces ContainerNameSpace `json:"namespaces"`
+}
+
+type ContainerMount struct {
+ Destination string `json:"destination"`
+ Type string `json:"type"`
+ Source string `json:"source"`
+ Options []string `json:"options"`
+}
+
+type ContainerNameSpace struct {
+ User string `json:"user"`
+ Uts string `json:"uts"`
+ Pidns string `json:"pidns"`
+ Pid string `json:"pid"`
+ Cgroup string `json:"cgroup"`
+ Net string `json:"net"`
+ Mnt string `json:"mnt"`
+ Ipc string `json:"ipc"`
}
// Client method calls and reply readers
-func GetContainerStats(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.GetContainerStats", nil, more__, oneway__)
-}
-
-func ReadGetContainerStats_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
- var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
- }
- continues_, err := c__.Receive(&out)
- if err != nil {
- return false, err
- }
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+func HistoryImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
+ var in struct {
+ Name string `json:"name"`
}
- return continues_, nil
-}
-
-func PauseContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.PauseContainer", nil, more__, oneway__)
+ in.Name = name_
+ return c__.Send("io.projectatomic.podman.HistoryImage", in, more__, oneway__)
}
-func ReadPauseContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadHistoryImage_(c__ *varlink.Connection, history_ *[]ImageHistory) (bool, error) {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ History []ImageHistory `json:"history"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+ if history_ != nil {
+ *history_ = []ImageHistory(out.History)
}
return continues_, nil
}
-func WaitContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.WaitContainer", nil, more__, oneway__)
+func TagImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, tagged_ string) error {
+ var in struct {
+ Name string `json:"name"`
+ Tagged string `json:"tagged"`
+ }
+ in.Name = name_
+ in.Tagged = tagged_
+ return c__.Send("io.projectatomic.podman.TagImage", in, more__, oneway__)
}
-func ReadWaitContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
- var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
- }
- continues_, err := c__.Receive(&out)
+func ReadTagImage_(c__ *varlink.Connection) (bool, error) {
+ continues_, err := c__.Receive(nil)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
- }
return continues_, nil
}
-func DeleteUnusedImages(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.DeleteUnusedImages", nil, more__, oneway__)
+func ExportContainer(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, path_ string) error {
+ var in struct {
+ Name string `json:"name"`
+ Path string `json:"path"`
+ }
+ in.Name = name_
+ in.Path = path_
+ return c__.Send("io.projectatomic.podman.ExportContainer", in, more__, oneway__)
}
-func ReadDeleteUnusedImages_(c__ *varlink.Connection, images_ *[]string) (bool, error) {
+func ReadExportContainer_(c__ *varlink.Connection, tarfile_ *string) (bool, error) {
var out struct {
- Images []string `json:"images"`
+ Tarfile string `json:"tarfile"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if images_ != nil {
- *images_ = []string(out.Images)
+ if tarfile_ != nil {
+ *tarfile_ = out.Tarfile
}
return continues_, nil
}
-func RestartContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.RestartContainer", nil, more__, oneway__)
+func RestartContainer(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, timeout_ int64) error {
+ var in struct {
+ Name string `json:"name"`
+ Timeout int64 `json:"timeout"`
+ }
+ in.Name = name_
+ in.Timeout = timeout_
+ return c__.Send("io.projectatomic.podman.RestartContainer", in, more__, oneway__)
}
-func ReadRestartContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadRestartContainer_(c__ *varlink.Connection, container_ *string) (bool, error) {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Container string `json:"container"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+ if container_ != nil {
+ *container_ = out.Container
}
return continues_, nil
}
@@ -158,87 +215,77 @@ func ReadListImages_(c__ *varlink.Connection, images_ *[]ImageInList) (bool, err
return continues_, nil
}
-func CreateImage(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.CreateImage", nil, more__, oneway__)
+func PullImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
+ var in struct {
+ Name string `json:"name"`
+ }
+ in.Name = name_
+ return c__.Send("io.projectatomic.podman.PullImage", in, more__, oneway__)
}
-func ReadCreateImage_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadPullImage_(c__ *varlink.Connection, id_ *string) (bool, error) {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Id string `json:"id"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+ if id_ != nil {
+ *id_ = out.Id
}
return continues_, nil
}
-func InspectImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
+func PauseContainer(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
var in struct {
Name string `json:"name"`
}
in.Name = name_
- return c__.Send("io.projectatomic.podman.InspectImage", in, more__, oneway__)
+ return c__.Send("io.projectatomic.podman.PauseContainer", in, more__, oneway__)
}
-func ReadInspectImage_(c__ *varlink.Connection, image_ *string) (bool, error) {
+func ReadPauseContainer_(c__ *varlink.Connection, container_ *string) (bool, error) {
var out struct {
- Image string `json:"image"`
+ Container string `json:"container"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if image_ != nil {
- *image_ = out.Image
+ if container_ != nil {
+ *container_ = out.Container
}
return continues_, nil
}
-func InspectContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.InspectContainer", nil, more__, oneway__)
-}
-
-func ReadInspectContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
- var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
- }
- continues_, err := c__.Receive(&out)
- if err != nil {
- return false, err
- }
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+func WaitContainer(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
+ var in struct {
+ Name string `json:"name"`
}
- return continues_, nil
-}
-
-func ListContainerChanges(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.ListContainerChanges", nil, more__, oneway__)
+ in.Name = name_
+ return c__.Send("io.projectatomic.podman.WaitContainer", in, more__, oneway__)
}
-func ReadListContainerChanges_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadWaitContainer_(c__ *varlink.Connection, exitcode_ *int64) (bool, error) {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Exitcode int64 `json:"exitcode"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+ if exitcode_ != nil {
+ *exitcode_ = out.Exitcode
}
return continues_, nil
}
-func StopContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.StopContainer", nil, more__, oneway__)
+func StartContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.StartContainer", nil, more__, oneway__)
}
-func ReadStopContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadStartContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -252,11 +299,11 @@ func ReadStopContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented
return continues_, nil
}
-func KillContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.KillContainer", nil, more__, oneway__)
+func AttachToContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.AttachToContainer", nil, more__, oneway__)
}
-func ReadKillContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadAttachToContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -270,79 +317,73 @@ func ReadKillContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented
return continues_, nil
}
-func UnpauseContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.UnpauseContainer", nil, more__, oneway__)
+func ListContainerProcesses(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, opts_ []string) error {
+ var in struct {
+ Name string `json:"name"`
+ Opts []string `json:"opts"`
+ }
+ in.Name = name_
+ in.Opts = []string(opts_)
+ return c__.Send("io.projectatomic.podman.ListContainerProcesses", in, more__, oneway__)
}
-func ReadUnpauseContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadListContainerProcesses_(c__ *varlink.Connection, container_ *[]string) (bool, error) {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Container []string `json:"container"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+ if container_ != nil {
+ *container_ = []string(out.Container)
}
return continues_, nil
}
-func BuildImage(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.BuildImage", nil, more__, oneway__)
+func ListContainerChanges(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
+ var in struct {
+ Name string `json:"name"`
+ }
+ in.Name = name_
+ return c__.Send("io.projectatomic.podman.ListContainerChanges", in, more__, oneway__)
}
-func ReadBuildImage_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadListContainerChanges_(c__ *varlink.Connection, container_ *map[string]string) (bool, error) {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Container map[string]string `json:"container"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+ if container_ != nil {
+ *container_ = map[string]string(out.Container)
}
return continues_, nil
}
-func PushImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, tag_ string, tlsverify_ bool) error {
+func RemoveImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, force_ bool) error {
var in struct {
- Name string `json:"name"`
- Tag string `json:"tag"`
- Tlsverify bool `json:"tlsverify"`
+ Name string `json:"name"`
+ Force bool `json:"force"`
}
in.Name = name_
- in.Tag = tag_
- in.Tlsverify = tlsverify_
- return c__.Send("io.projectatomic.podman.PushImage", in, more__, oneway__)
-}
-
-func ReadPushImage_(c__ *varlink.Connection) (bool, error) {
- continues_, err := c__.Receive(nil)
- if err != nil {
- return false, err
- }
- return continues_, nil
+ in.Force = force_
+ return c__.Send("io.projectatomic.podman.RemoveImage", in, more__, oneway__)
}
-func ExportImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, destination_ string, compress_ bool) error {
- var in struct {
- Name string `json:"name"`
- Destination string `json:"destination"`
- Compress bool `json:"compress"`
+func ReadRemoveImage_(c__ *varlink.Connection, image_ *string) (bool, error) {
+ var out struct {
+ Image string `json:"image"`
}
- in.Name = name_
- in.Destination = destination_
- in.Compress = compress_
- return c__.Send("io.projectatomic.podman.ExportImage", in, more__, oneway__)
-}
-
-func ReadExportImage_(c__ *varlink.Connection) (bool, error) {
- continues_, err := c__.Receive(nil)
+ continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
+ if image_ != nil {
+ *image_ = out.Image
+ }
return continues_, nil
}
@@ -374,29 +415,33 @@ func ReadImportImage_(c__ *varlink.Connection, image_ *string) (bool, error) {
return continues_, nil
}
-func GetVersion(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.GetVersion", nil, more__, oneway__)
+func GetContainerLogs(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
+ var in struct {
+ Name string `json:"name"`
+ }
+ in.Name = name_
+ return c__.Send("io.projectatomic.podman.GetContainerLogs", in, more__, oneway__)
}
-func ReadGetVersion_(c__ *varlink.Connection, version_ *Version) (bool, error) {
+func ReadGetContainerLogs_(c__ *varlink.Connection, container_ *[]string) (bool, error) {
var out struct {
- Version Version `json:"version"`
+ Container []string `json:"container"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if version_ != nil {
- *version_ = out.Version
+ if container_ != nil {
+ *container_ = []string(out.Container)
}
return continues_, nil
}
-func ListContainers(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.ListContainers", nil, more__, oneway__)
+func BuildImage(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.BuildImage", nil, more__, oneway__)
}
-func ReadListContainers_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadBuildImage_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -410,11 +455,11 @@ func ReadListContainers_(c__ *varlink.Connection, notimplemented_ *NotImplemente
return continues_, nil
}
-func GetContainerLogs(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.GetContainerLogs", nil, more__, oneway__)
+func ResizeContainerTty(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.ResizeContainerTty", nil, more__, oneway__)
}
-func ReadGetContainerLogs_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadResizeContainerTty_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -428,123 +473,139 @@ func ReadGetContainerLogs_(c__ *varlink.Connection, notimplemented_ *NotImplemen
return continues_, nil
}
-func UpdateContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.UpdateContainer", nil, more__, oneway__)
+func KillContainer(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, signal_ int64) error {
+ var in struct {
+ Name string `json:"name"`
+ Signal int64 `json:"signal"`
+ }
+ in.Name = name_
+ in.Signal = signal_
+ return c__.Send("io.projectatomic.podman.KillContainer", in, more__, oneway__)
}
-func ReadUpdateContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadKillContainer_(c__ *varlink.Connection, container_ *string) (bool, error) {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Container string `json:"container"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+ if container_ != nil {
+ *container_ = out.Container
}
return continues_, nil
}
-func HistoryImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
+func SearchImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, limit_ int64) error {
var in struct {
- Name string `json:"name"`
+ Name string `json:"name"`
+ Limit int64 `json:"limit"`
}
in.Name = name_
- return c__.Send("io.projectatomic.podman.HistoryImage", in, more__, oneway__)
+ in.Limit = limit_
+ return c__.Send("io.projectatomic.podman.SearchImage", in, more__, oneway__)
}
-func ReadHistoryImage_(c__ *varlink.Connection, history_ *[]ImageHistory) (bool, error) {
+func ReadSearchImage_(c__ *varlink.Connection, images_ *[]ImageSearch) (bool, error) {
var out struct {
- History []ImageHistory `json:"history"`
+ Images []ImageSearch `json:"images"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if history_ != nil {
- *history_ = []ImageHistory(out.History)
+ if images_ != nil {
+ *images_ = []ImageSearch(out.Images)
}
return continues_, nil
}
-func CreateFromContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.CreateFromContainer", nil, more__, oneway__)
+func DeleteUnusedImages(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.DeleteUnusedImages", nil, more__, oneway__)
}
-func ReadCreateFromContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadDeleteUnusedImages_(c__ *varlink.Connection, images_ *[]string) (bool, error) {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Images []string `json:"images"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+ if images_ != nil {
+ *images_ = []string(out.Images)
}
return continues_, nil
}
-func AttachToContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.AttachToContainer", nil, more__, oneway__)
+func Ping(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.Ping", nil, more__, oneway__)
}
-func ReadAttachToContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadPing_(c__ *varlink.Connection, ping_ *StringResponse) (bool, error) {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Ping StringResponse `json:"ping"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+ if ping_ != nil {
+ *ping_ = out.Ping
}
return continues_, nil
}
-func TagImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, tagged_ string) error {
+func GetContainer(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
var in struct {
- Name string `json:"name"`
- Tagged string `json:"tagged"`
+ Name string `json:"name"`
}
in.Name = name_
- in.Tagged = tagged_
- return c__.Send("io.projectatomic.podman.TagImage", in, more__, oneway__)
+ return c__.Send("io.projectatomic.podman.GetContainer", in, more__, oneway__)
}
-func ReadTagImage_(c__ *varlink.Connection) (bool, error) {
- continues_, err := c__.Receive(nil)
+func ReadGetContainer_(c__ *varlink.Connection, container_ *ListContainerData) (bool, error) {
+ var out struct {
+ Container ListContainerData `json:"container"`
+ }
+ continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
+ if container_ != nil {
+ *container_ = out.Container
+ }
return continues_, nil
}
-func Ping(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.Ping", nil, more__, oneway__)
+func InspectImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
+ var in struct {
+ Name string `json:"name"`
+ }
+ in.Name = name_
+ return c__.Send("io.projectatomic.podman.InspectImage", in, more__, oneway__)
}
-func ReadPing_(c__ *varlink.Connection, ping_ *StringResponse) (bool, error) {
+func ReadInspectImage_(c__ *varlink.Connection, image_ *string) (bool, error) {
var out struct {
- Ping StringResponse `json:"ping"`
+ Image string `json:"image"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if ping_ != nil {
- *ping_ = out.Ping
+ if image_ != nil {
+ *image_ = out.Image
}
return continues_, nil
}
-func CreateContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.CreateContainer", nil, more__, oneway__)
+func RenameContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.RenameContainer", nil, more__, oneway__)
}
-func ReadCreateContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadRenameContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -558,11 +619,11 @@ func ReadCreateContainer_(c__ *varlink.Connection, notimplemented_ *NotImplement
return continues_, nil
}
-func ExportContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.ExportContainer", nil, more__, oneway__)
+func CreateImage(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.CreateImage", nil, more__, oneway__)
}
-func ReadExportContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadCreateImage_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -576,83 +637,115 @@ func ReadExportContainer_(c__ *varlink.Connection, notimplemented_ *NotImplement
return continues_, nil
}
-func StartContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.StartContainer", nil, more__, oneway__)
+func RemoveContainer(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, force_ bool) error {
+ var in struct {
+ Name string `json:"name"`
+ Force bool `json:"force"`
+ }
+ in.Name = name_
+ in.Force = force_
+ return c__.Send("io.projectatomic.podman.RemoveContainer", in, more__, oneway__)
}
-func ReadStartContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadRemoveContainer_(c__ *varlink.Connection, container_ *string) (bool, error) {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Container string `json:"container"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+ if container_ != nil {
+ *container_ = out.Container
}
return continues_, nil
}
-func RenameContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.RenameContainer", nil, more__, oneway__)
+func DeleteStoppedContainers(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.DeleteStoppedContainers", nil, more__, oneway__)
}
-func ReadRenameContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadDeleteStoppedContainers_(c__ *varlink.Connection, containers_ *[]string) (bool, error) {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Containers []string `json:"containers"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+ if containers_ != nil {
+ *containers_ = []string(out.Containers)
}
return continues_, nil
}
-func DeleteStoppedContainers(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.DeleteStoppedContainers", nil, more__, oneway__)
+func PushImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, tag_ string, tlsverify_ bool) error {
+ var in struct {
+ Name string `json:"name"`
+ Tag string `json:"tag"`
+ Tlsverify bool `json:"tlsverify"`
+ }
+ in.Name = name_
+ in.Tag = tag_
+ in.Tlsverify = tlsverify_
+ return c__.Send("io.projectatomic.podman.PushImage", in, more__, oneway__)
}
-func ReadDeleteStoppedContainers_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
- var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
- }
- continues_, err := c__.Receive(&out)
+func ReadPushImage_(c__ *varlink.Connection) (bool, error) {
+ continues_, err := c__.Receive(nil)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+ return continues_, nil
+}
+
+func ExportImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, destination_ string, compress_ bool) error {
+ var in struct {
+ Name string `json:"name"`
+ Destination string `json:"destination"`
+ Compress bool `json:"compress"`
+ }
+ in.Name = name_
+ in.Destination = destination_
+ in.Compress = compress_
+ return c__.Send("io.projectatomic.podman.ExportImage", in, more__, oneway__)
+}
+
+func ReadExportImage_(c__ *varlink.Connection) (bool, error) {
+ continues_, err := c__.Receive(nil)
+ if err != nil {
+ return false, err
}
return continues_, nil
}
-func ListContainerProcesses(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.ListContainerProcesses", nil, more__, oneway__)
+func GetContainerStats(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
+ var in struct {
+ Name string `json:"name"`
+ }
+ in.Name = name_
+ return c__.Send("io.projectatomic.podman.GetContainerStats", in, more__, oneway__)
}
-func ReadListContainerProcesses_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadGetContainerStats_(c__ *varlink.Connection, container_ *ContainerStats) (bool, error) {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Container ContainerStats `json:"container"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if notimplemented_ != nil {
- *notimplemented_ = out.Notimplemented
+ if container_ != nil {
+ *container_ = out.Container
}
return continues_, nil
}
-func ResizeContainerTty(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.ResizeContainerTty", nil, more__, oneway__)
+func UpdateContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.UpdateContainer", nil, more__, oneway__)
}
-func ReadResizeContainerTty_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadUpdateContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -666,11 +759,11 @@ func ReadResizeContainerTty_(c__ *varlink.Connection, notimplemented_ *NotImplem
return continues_, nil
}
-func RemoveContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
- return c__.Send("io.projectatomic.podman.RemoveContainer", nil, more__, oneway__)
+func CreateContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.CreateContainer", nil, more__, oneway__)
}
-func ReadRemoveContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+func ReadCreateContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -684,135 +777,188 @@ func ReadRemoveContainer_(c__ *varlink.Connection, notimplemented_ *NotImplement
return continues_, nil
}
-func RemoveImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, force_ bool) error {
+func InspectContainer(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
var in struct {
- Name string `json:"name"`
- Force bool `json:"force"`
+ Name string `json:"name"`
}
in.Name = name_
- in.Force = force_
- return c__.Send("io.projectatomic.podman.RemoveImage", in, more__, oneway__)
+ return c__.Send("io.projectatomic.podman.InspectContainer", in, more__, oneway__)
}
-func ReadRemoveImage_(c__ *varlink.Connection, image_ *string) (bool, error) {
+func ReadInspectContainer_(c__ *varlink.Connection, container_ *string) (bool, error) {
var out struct {
- Image string `json:"image"`
+ Container string `json:"container"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if image_ != nil {
- *image_ = out.Image
+ if container_ != nil {
+ *container_ = out.Container
}
return continues_, nil
}
-func SearchImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, limit_ int64) error {
+func StopContainer(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string, timeout_ int64) error {
var in struct {
- Name string `json:"name"`
- Limit int64 `json:"limit"`
+ Name string `json:"name"`
+ Timeout int64 `json:"timeout"`
}
in.Name = name_
- in.Limit = limit_
- return c__.Send("io.projectatomic.podman.SearchImage", in, more__, oneway__)
+ in.Timeout = timeout_
+ return c__.Send("io.projectatomic.podman.StopContainer", in, more__, oneway__)
}
-func ReadSearchImage_(c__ *varlink.Connection, images_ *[]ImageSearch) (bool, error) {
+func ReadStopContainer_(c__ *varlink.Connection, container_ *string) (bool, error) {
var out struct {
- Images []ImageSearch `json:"images"`
+ Container string `json:"container"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if images_ != nil {
- *images_ = []ImageSearch(out.Images)
+ if container_ != nil {
+ *container_ = out.Container
}
return continues_, nil
}
-func PullImage(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
+func UnpauseContainer(c__ *varlink.Connection, more__ bool, oneway__ bool, name_ string) error {
var in struct {
Name string `json:"name"`
}
in.Name = name_
- return c__.Send("io.projectatomic.podman.PullImage", in, more__, oneway__)
+ return c__.Send("io.projectatomic.podman.UnpauseContainer", in, more__, oneway__)
}
-func ReadPullImage_(c__ *varlink.Connection, id_ *string) (bool, error) {
+func ReadUnpauseContainer_(c__ *varlink.Connection, container_ *string) (bool, error) {
var out struct {
- Id string `json:"id"`
+ Container string `json:"container"`
}
continues_, err := c__.Receive(&out)
if err != nil {
return false, err
}
- if id_ != nil {
- *id_ = out.Id
+ if container_ != nil {
+ *container_ = out.Container
+ }
+ return continues_, nil
+}
+
+func CreateFromContainer(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.CreateFromContainer", nil, more__, oneway__)
+}
+
+func ReadCreateFromContainer_(c__ *varlink.Connection, notimplemented_ *NotImplemented) (bool, error) {
+ var out struct {
+ Notimplemented NotImplemented `json:"notimplemented"`
+ }
+ continues_, err := c__.Receive(&out)
+ if err != nil {
+ return false, err
+ }
+ if notimplemented_ != nil {
+ *notimplemented_ = out.Notimplemented
+ }
+ return continues_, nil
+}
+
+func GetVersion(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.GetVersion", nil, more__, oneway__)
+}
+
+func ReadGetVersion_(c__ *varlink.Connection, version_ *Version) (bool, error) {
+ var out struct {
+ Version Version `json:"version"`
+ }
+ continues_, err := c__.Receive(&out)
+ if err != nil {
+ return false, err
+ }
+ if version_ != nil {
+ *version_ = out.Version
+ }
+ return continues_, nil
+}
+
+func ListContainers(c__ *varlink.Connection, more__ bool, oneway__ bool) error {
+ return c__.Send("io.projectatomic.podman.ListContainers", nil, more__, oneway__)
+}
+
+func ReadListContainers_(c__ *varlink.Connection, containers_ *[]ListContainerData) (bool, error) {
+ var out struct {
+ Containers []ListContainerData `json:"containers"`
+ }
+ continues_, err := c__.Receive(&out)
+ if err != nil {
+ return false, err
+ }
+ if containers_ != nil {
+ *containers_ = []ListContainerData(out.Containers)
}
return continues_, nil
}
// Service interface with all methods
type ioprojectatomicpodmanInterface interface {
- AttachToContainer(c__ VarlinkCall) error
- TagImage(c__ VarlinkCall, name_ string, tagged_ string) error
- DeleteStoppedContainers(c__ VarlinkCall) error
- Ping(c__ VarlinkCall) error
- CreateContainer(c__ VarlinkCall) error
- ExportContainer(c__ VarlinkCall) error
- StartContainer(c__ VarlinkCall) error
- RenameContainer(c__ VarlinkCall) error
+ PauseContainer(c__ VarlinkCall, name_ string) error
+ WaitContainer(c__ VarlinkCall, name_ string) error
+ ListImages(c__ VarlinkCall) error
PullImage(c__ VarlinkCall, name_ string) error
- ListContainerProcesses(c__ VarlinkCall) error
- ResizeContainerTty(c__ VarlinkCall) error
- RemoveContainer(c__ VarlinkCall) error
+ ListContainerProcesses(c__ VarlinkCall, name_ string, opts_ []string) error
+ ListContainerChanges(c__ VarlinkCall, name_ string) error
+ StartContainer(c__ VarlinkCall) error
+ AttachToContainer(c__ VarlinkCall) error
+ GetContainerLogs(c__ VarlinkCall, name_ string) error
+ BuildImage(c__ VarlinkCall) error
RemoveImage(c__ VarlinkCall, name_ string, force_ bool) error
+ ImportImage(c__ VarlinkCall, source_ string, reference_ string, message_ string, changes_ []string) error
SearchImage(c__ VarlinkCall, name_ string, limit_ int64) error
- GetContainerStats(c__ VarlinkCall) error
- PauseContainer(c__ VarlinkCall) error
- WaitContainer(c__ VarlinkCall) error
DeleteUnusedImages(c__ VarlinkCall) error
- RestartContainer(c__ VarlinkCall) error
- ListImages(c__ VarlinkCall) error
- BuildImage(c__ VarlinkCall) error
+ Ping(c__ VarlinkCall) error
+ GetContainer(c__ VarlinkCall, name_ string) error
+ ResizeContainerTty(c__ VarlinkCall) error
+ KillContainer(c__ VarlinkCall, name_ string, signal_ int64) error
+ RenameContainer(c__ VarlinkCall) error
CreateImage(c__ VarlinkCall) error
InspectImage(c__ VarlinkCall, name_ string) error
- InspectContainer(c__ VarlinkCall) error
- ListContainerChanges(c__ VarlinkCall) error
- StopContainer(c__ VarlinkCall) error
- KillContainer(c__ VarlinkCall) error
- UnpauseContainer(c__ VarlinkCall) error
PushImage(c__ VarlinkCall, name_ string, tag_ string, tlsverify_ bool) error
ExportImage(c__ VarlinkCall, name_ string, destination_ string, compress_ bool) error
+ GetContainerStats(c__ VarlinkCall, name_ string) error
+ UpdateContainer(c__ VarlinkCall) error
+ RemoveContainer(c__ VarlinkCall, name_ string, force_ bool) error
+ DeleteStoppedContainers(c__ VarlinkCall) error
+ StopContainer(c__ VarlinkCall, name_ string, timeout_ int64) error
+ UnpauseContainer(c__ VarlinkCall, name_ string) error
CreateFromContainer(c__ VarlinkCall) error
- ImportImage(c__ VarlinkCall, source_ string, reference_ string, message_ string, changes_ []string) error
GetVersion(c__ VarlinkCall) error
ListContainers(c__ VarlinkCall) error
- GetContainerLogs(c__ VarlinkCall) error
- UpdateContainer(c__ VarlinkCall) error
+ CreateContainer(c__ VarlinkCall) error
+ InspectContainer(c__ VarlinkCall, name_ string) error
+ ExportContainer(c__ VarlinkCall, name_ string, path_ string) error
+ RestartContainer(c__ VarlinkCall, name_ string, timeout_ int64) error
HistoryImage(c__ VarlinkCall, name_ string) error
+ TagImage(c__ VarlinkCall, name_ string, tagged_ string) error
}
// Service object with all methods
type VarlinkCall struct{ varlink.Call }
// Reply methods for all varlink errors
-func (c__ *VarlinkCall) ReplyActionFailed(reason_ string) error {
+func (c__ *VarlinkCall) ReplyImageNotFound(name_ string) error {
var out struct {
- Reason string `json:"reason"`
+ Name string `json:"name"`
}
- out.Reason = reason_
- return c__.ReplyError("io.projectatomic.podman.ActionFailed", &out)
+ out.Name = name_
+ return c__.ReplyError("io.projectatomic.podman.ImageNotFound", &out)
}
-func (c__ *VarlinkCall) ReplyImageNotFound(imagename_ string) error {
+func (c__ *VarlinkCall) ReplyContainerNotFound(name_ string) error {
var out struct {
- Imagename string `json:"imagename"`
+ Name string `json:"name"`
}
- out.Imagename = imagename_
- return c__.ReplyError("io.projectatomic.podman.ImageNotFound", &out)
+ out.Name = name_
+ return c__.ReplyError("io.projectatomic.podman.ContainerNotFound", &out)
}
func (c__ *VarlinkCall) ReplyErrorOccurred(reason_ string) error {
@@ -831,60 +977,64 @@ func (c__ *VarlinkCall) ReplyRuntimeError(reason_ string) error {
return c__.ReplyError("io.projectatomic.podman.RuntimeError", &out)
}
-// Reply methods for all varlink methods
-func (c__ *VarlinkCall) ReplyAttachToContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyActionFailed(reason_ string) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Reason string `json:"reason"`
}
- out.Notimplemented = notimplemented_
- return c__.Reply(&out)
+ out.Reason = reason_
+ return c__.ReplyError("io.projectatomic.podman.ActionFailed", &out)
}
-func (c__ *VarlinkCall) ReplyTagImage() error {
- return c__.Reply(nil)
+// Reply methods for all varlink methods
+func (c__ *VarlinkCall) ReplyKillContainer(container_ string) error {
+ var out struct {
+ Container string `json:"container"`
+ }
+ out.Container = container_
+ return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyExportContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplySearchImage(images_ []ImageSearch) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Images []ImageSearch `json:"images"`
}
- out.Notimplemented = notimplemented_
+ out.Images = []ImageSearch(images_)
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyStartContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyDeleteUnusedImages(images_ []string) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Images []string `json:"images"`
}
- out.Notimplemented = notimplemented_
+ out.Images = []string(images_)
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyRenameContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyPing(ping_ StringResponse) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Ping StringResponse `json:"ping"`
}
- out.Notimplemented = notimplemented_
+ out.Ping = ping_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyDeleteStoppedContainers(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyGetContainer(container_ ListContainerData) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Container ListContainerData `json:"container"`
}
- out.Notimplemented = notimplemented_
+ out.Container = container_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyPing(ping_ StringResponse) error {
+func (c__ *VarlinkCall) ReplyResizeContainerTty(notimplemented_ NotImplemented) error {
var out struct {
- Ping StringResponse `json:"ping"`
+ Notimplemented NotImplemented `json:"notimplemented"`
}
- out.Ping = ping_
+ out.Notimplemented = notimplemented_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyCreateContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyRenameContainer(notimplemented_ NotImplemented) error {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -892,7 +1042,7 @@ func (c__ *VarlinkCall) ReplyCreateContainer(notimplemented_ NotImplemented) err
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyRemoveContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyCreateImage(notimplemented_ NotImplemented) error {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -900,7 +1050,7 @@ func (c__ *VarlinkCall) ReplyRemoveContainer(notimplemented_ NotImplemented) err
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyRemoveImage(image_ string) error {
+func (c__ *VarlinkCall) ReplyInspectImage(image_ string) error {
var out struct {
Image string `json:"image"`
}
@@ -908,23 +1058,31 @@ func (c__ *VarlinkCall) ReplyRemoveImage(image_ string) error {
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplySearchImage(images_ []ImageSearch) error {
+func (c__ *VarlinkCall) ReplyDeleteStoppedContainers(containers_ []string) error {
var out struct {
- Images []ImageSearch `json:"images"`
+ Containers []string `json:"containers"`
}
- out.Images = []ImageSearch(images_)
+ out.Containers = []string(containers_)
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyPullImage(id_ string) error {
+func (c__ *VarlinkCall) ReplyPushImage() error {
+ return c__.Reply(nil)
+}
+
+func (c__ *VarlinkCall) ReplyExportImage() error {
+ return c__.Reply(nil)
+}
+
+func (c__ *VarlinkCall) ReplyGetContainerStats(container_ ContainerStats) error {
var out struct {
- Id string `json:"id"`
+ Container ContainerStats `json:"container"`
}
- out.Id = id_
+ out.Container = container_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyListContainerProcesses(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyUpdateContainer(notimplemented_ NotImplemented) error {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -932,39 +1090,39 @@ func (c__ *VarlinkCall) ReplyListContainerProcesses(notimplemented_ NotImplement
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyResizeContainerTty(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyRemoveContainer(container_ string) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Container string `json:"container"`
}
- out.Notimplemented = notimplemented_
+ out.Container = container_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyWaitContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyInspectContainer(container_ string) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Container string `json:"container"`
}
- out.Notimplemented = notimplemented_
+ out.Container = container_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyDeleteUnusedImages(images_ []string) error {
+func (c__ *VarlinkCall) ReplyStopContainer(container_ string) error {
var out struct {
- Images []string `json:"images"`
+ Container string `json:"container"`
}
- out.Images = []string(images_)
+ out.Container = container_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyGetContainerStats(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyUnpauseContainer(container_ string) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Container string `json:"container"`
}
- out.Notimplemented = notimplemented_
+ out.Container = container_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyPauseContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyCreateFromContainer(notimplemented_ NotImplemented) error {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -972,23 +1130,23 @@ func (c__ *VarlinkCall) ReplyPauseContainer(notimplemented_ NotImplemented) erro
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyRestartContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyGetVersion(version_ Version) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Version Version `json:"version"`
}
- out.Notimplemented = notimplemented_
+ out.Version = version_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyListImages(images_ []ImageInList) error {
+func (c__ *VarlinkCall) ReplyListContainers(containers_ []ListContainerData) error {
var out struct {
- Images []ImageInList `json:"images"`
+ Containers []ListContainerData `json:"containers"`
}
- out.Images = []ImageInList(images_)
+ out.Containers = []ListContainerData(containers_)
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyStopContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyCreateContainer(notimplemented_ NotImplemented) error {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -996,71 +1154,67 @@ func (c__ *VarlinkCall) ReplyStopContainer(notimplemented_ NotImplemented) error
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyKillContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyTagImage() error {
+ return c__.Reply(nil)
+}
+
+func (c__ *VarlinkCall) ReplyExportContainer(tarfile_ string) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Tarfile string `json:"tarfile"`
}
- out.Notimplemented = notimplemented_
+ out.Tarfile = tarfile_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyUnpauseContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyRestartContainer(container_ string) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Container string `json:"container"`
}
- out.Notimplemented = notimplemented_
+ out.Container = container_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyBuildImage(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyHistoryImage(history_ []ImageHistory) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ History []ImageHistory `json:"history"`
}
- out.Notimplemented = notimplemented_
+ out.History = []ImageHistory(history_)
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyCreateImage(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyPullImage(id_ string) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Id string `json:"id"`
}
- out.Notimplemented = notimplemented_
+ out.Id = id_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyInspectImage(image_ string) error {
+func (c__ *VarlinkCall) ReplyPauseContainer(container_ string) error {
var out struct {
- Image string `json:"image"`
+ Container string `json:"container"`
}
- out.Image = image_
+ out.Container = container_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyInspectContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyWaitContainer(exitcode_ int64) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Exitcode int64 `json:"exitcode"`
}
- out.Notimplemented = notimplemented_
+ out.Exitcode = exitcode_
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyListContainerChanges(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyListImages(images_ []ImageInList) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Images []ImageInList `json:"images"`
}
- out.Notimplemented = notimplemented_
+ out.Images = []ImageInList(images_)
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyPushImage() error {
- return c__.Reply(nil)
-}
-
-func (c__ *VarlinkCall) ReplyExportImage() error {
- return c__.Reply(nil)
-}
-
-func (c__ *VarlinkCall) ReplyGetContainerLogs(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyAttachToContainer(notimplemented_ NotImplemented) error {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -1068,23 +1222,23 @@ func (c__ *VarlinkCall) ReplyGetContainerLogs(notimplemented_ NotImplemented) er
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyUpdateContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyListContainerProcesses(container_ []string) error {
var out struct {
- Notimplemented NotImplemented `json:"notimplemented"`
+ Container []string `json:"container"`
}
- out.Notimplemented = notimplemented_
+ out.Container = []string(container_)
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyHistoryImage(history_ []ImageHistory) error {
+func (c__ *VarlinkCall) ReplyListContainerChanges(container_ map[string]string) error {
var out struct {
- History []ImageHistory `json:"history"`
+ Container map[string]string `json:"container"`
}
- out.History = []ImageHistory(history_)
+ out.Container = map[string]string(container_)
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyCreateFromContainer(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyStartContainer(notimplemented_ NotImplemented) error {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -1100,15 +1254,15 @@ func (c__ *VarlinkCall) ReplyImportImage(image_ string) error {
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyGetVersion(version_ Version) error {
+func (c__ *VarlinkCall) ReplyGetContainerLogs(container_ []string) error {
var out struct {
- Version Version `json:"version"`
+ Container []string `json:"container"`
}
- out.Version = version_
+ out.Container = []string(container_)
return c__.Reply(&out)
}
-func (c__ *VarlinkCall) ReplyListContainers(notimplemented_ NotImplemented) error {
+func (c__ *VarlinkCall) ReplyBuildImage(notimplemented_ NotImplemented) error {
var out struct {
Notimplemented NotImplemented `json:"notimplemented"`
}
@@ -1116,85 +1270,89 @@ func (c__ *VarlinkCall) ReplyListContainers(notimplemented_ NotImplemented) erro
return c__.Reply(&out)
}
-// Dummy methods for all varlink methods
-func (s__ *VarlinkInterface) RenameContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("RenameContainer")
+func (c__ *VarlinkCall) ReplyRemoveImage(image_ string) error {
+ var out struct {
+ Image string `json:"image"`
+ }
+ out.Image = image_
+ return c__.Reply(&out)
}
-func (s__ *VarlinkInterface) DeleteStoppedContainers(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("DeleteStoppedContainers")
+// Dummy methods for all varlink methods
+func (s__ *VarlinkInterface) PauseContainer(c__ VarlinkCall, name_ string) error {
+ return c__.ReplyMethodNotImplemented("PauseContainer")
}
-func (s__ *VarlinkInterface) Ping(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("Ping")
+func (s__ *VarlinkInterface) WaitContainer(c__ VarlinkCall, name_ string) error {
+ return c__.ReplyMethodNotImplemented("WaitContainer")
}
-func (s__ *VarlinkInterface) CreateContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("CreateContainer")
+func (s__ *VarlinkInterface) ListImages(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("ListImages")
}
-func (s__ *VarlinkInterface) ExportContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("ExportContainer")
+func (s__ *VarlinkInterface) PullImage(c__ VarlinkCall, name_ string) error {
+ return c__.ReplyMethodNotImplemented("PullImage")
}
-func (s__ *VarlinkInterface) StartContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("StartContainer")
+func (s__ *VarlinkInterface) ListContainerProcesses(c__ VarlinkCall, name_ string, opts_ []string) error {
+ return c__.ReplyMethodNotImplemented("ListContainerProcesses")
}
-func (s__ *VarlinkInterface) SearchImage(c__ VarlinkCall, name_ string, limit_ int64) error {
- return c__.ReplyMethodNotImplemented("SearchImage")
+func (s__ *VarlinkInterface) ListContainerChanges(c__ VarlinkCall, name_ string) error {
+ return c__.ReplyMethodNotImplemented("ListContainerChanges")
}
-func (s__ *VarlinkInterface) PullImage(c__ VarlinkCall, name_ string) error {
- return c__.ReplyMethodNotImplemented("PullImage")
+func (s__ *VarlinkInterface) StartContainer(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("StartContainer")
}
-func (s__ *VarlinkInterface) ListContainerProcesses(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("ListContainerProcesses")
+func (s__ *VarlinkInterface) AttachToContainer(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("AttachToContainer")
}
-func (s__ *VarlinkInterface) ResizeContainerTty(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("ResizeContainerTty")
+func (s__ *VarlinkInterface) GetContainerLogs(c__ VarlinkCall, name_ string) error {
+ return c__.ReplyMethodNotImplemented("GetContainerLogs")
}
-func (s__ *VarlinkInterface) RemoveContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("RemoveContainer")
+func (s__ *VarlinkInterface) BuildImage(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("BuildImage")
}
func (s__ *VarlinkInterface) RemoveImage(c__ VarlinkCall, name_ string, force_ bool) error {
return c__.ReplyMethodNotImplemented("RemoveImage")
}
-func (s__ *VarlinkInterface) GetContainerStats(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("GetContainerStats")
+func (s__ *VarlinkInterface) ImportImage(c__ VarlinkCall, source_ string, reference_ string, message_ string, changes_ []string) error {
+ return c__.ReplyMethodNotImplemented("ImportImage")
}
-func (s__ *VarlinkInterface) PauseContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("PauseContainer")
+func (s__ *VarlinkInterface) Ping(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("Ping")
}
-func (s__ *VarlinkInterface) WaitContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("WaitContainer")
+func (s__ *VarlinkInterface) GetContainer(c__ VarlinkCall, name_ string) error {
+ return c__.ReplyMethodNotImplemented("GetContainer")
}
-func (s__ *VarlinkInterface) DeleteUnusedImages(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("DeleteUnusedImages")
+func (s__ *VarlinkInterface) ResizeContainerTty(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("ResizeContainerTty")
}
-func (s__ *VarlinkInterface) RestartContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("RestartContainer")
+func (s__ *VarlinkInterface) KillContainer(c__ VarlinkCall, name_ string, signal_ int64) error {
+ return c__.ReplyMethodNotImplemented("KillContainer")
}
-func (s__ *VarlinkInterface) ListImages(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("ListImages")
+func (s__ *VarlinkInterface) SearchImage(c__ VarlinkCall, name_ string, limit_ int64) error {
+ return c__.ReplyMethodNotImplemented("SearchImage")
}
-func (s__ *VarlinkInterface) UnpauseContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("UnpauseContainer")
+func (s__ *VarlinkInterface) DeleteUnusedImages(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("DeleteUnusedImages")
}
-func (s__ *VarlinkInterface) BuildImage(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("BuildImage")
+func (s__ *VarlinkInterface) RenameContainer(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("RenameContainer")
}
func (s__ *VarlinkInterface) CreateImage(c__ VarlinkCall) error {
@@ -1205,20 +1363,20 @@ func (s__ *VarlinkInterface) InspectImage(c__ VarlinkCall, name_ string) error {
return c__.ReplyMethodNotImplemented("InspectImage")
}
-func (s__ *VarlinkInterface) InspectContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("InspectContainer")
+func (s__ *VarlinkInterface) GetContainerStats(c__ VarlinkCall, name_ string) error {
+ return c__.ReplyMethodNotImplemented("GetContainerStats")
}
-func (s__ *VarlinkInterface) ListContainerChanges(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("ListContainerChanges")
+func (s__ *VarlinkInterface) UpdateContainer(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("UpdateContainer")
}
-func (s__ *VarlinkInterface) StopContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("StopContainer")
+func (s__ *VarlinkInterface) RemoveContainer(c__ VarlinkCall, name_ string, force_ bool) error {
+ return c__.ReplyMethodNotImplemented("RemoveContainer")
}
-func (s__ *VarlinkInterface) KillContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("KillContainer")
+func (s__ *VarlinkInterface) DeleteStoppedContainers(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("DeleteStoppedContainers")
}
func (s__ *VarlinkInterface) PushImage(c__ VarlinkCall, name_ string, tag_ string, tlsverify_ bool) error {
@@ -1229,36 +1387,44 @@ func (s__ *VarlinkInterface) ExportImage(c__ VarlinkCall, name_ string, destinat
return c__.ReplyMethodNotImplemented("ExportImage")
}
-func (s__ *VarlinkInterface) HistoryImage(c__ VarlinkCall, name_ string) error {
- return c__.ReplyMethodNotImplemented("HistoryImage")
+func (s__ *VarlinkInterface) GetVersion(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("GetVersion")
}
-func (s__ *VarlinkInterface) CreateFromContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("CreateFromContainer")
+func (s__ *VarlinkInterface) ListContainers(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("ListContainers")
}
-func (s__ *VarlinkInterface) ImportImage(c__ VarlinkCall, source_ string, reference_ string, message_ string, changes_ []string) error {
- return c__.ReplyMethodNotImplemented("ImportImage")
+func (s__ *VarlinkInterface) CreateContainer(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("CreateContainer")
}
-func (s__ *VarlinkInterface) GetVersion(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("GetVersion")
+func (s__ *VarlinkInterface) InspectContainer(c__ VarlinkCall, name_ string) error {
+ return c__.ReplyMethodNotImplemented("InspectContainer")
}
-func (s__ *VarlinkInterface) ListContainers(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("ListContainers")
+func (s__ *VarlinkInterface) StopContainer(c__ VarlinkCall, name_ string, timeout_ int64) error {
+ return c__.ReplyMethodNotImplemented("StopContainer")
}
-func (s__ *VarlinkInterface) GetContainerLogs(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("GetContainerLogs")
+func (s__ *VarlinkInterface) UnpauseContainer(c__ VarlinkCall, name_ string) error {
+ return c__.ReplyMethodNotImplemented("UnpauseContainer")
}
-func (s__ *VarlinkInterface) UpdateContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("UpdateContainer")
+func (s__ *VarlinkInterface) CreateFromContainer(c__ VarlinkCall) error {
+ return c__.ReplyMethodNotImplemented("CreateFromContainer")
}
-func (s__ *VarlinkInterface) AttachToContainer(c__ VarlinkCall) error {
- return c__.ReplyMethodNotImplemented("AttachToContainer")
+func (s__ *VarlinkInterface) ExportContainer(c__ VarlinkCall, name_ string, path_ string) error {
+ return c__.ReplyMethodNotImplemented("ExportContainer")
+}
+
+func (s__ *VarlinkInterface) RestartContainer(c__ VarlinkCall, name_ string, timeout_ int64) error {
+ return c__.ReplyMethodNotImplemented("RestartContainer")
+}
+
+func (s__ *VarlinkInterface) HistoryImage(c__ VarlinkCall, name_ string) error {
+ return c__.ReplyMethodNotImplemented("HistoryImage")
}
func (s__ *VarlinkInterface) TagImage(c__ VarlinkCall, name_ string, tagged_ string) error {
@@ -1268,7 +1434,7 @@ func (s__ *VarlinkInterface) TagImage(c__ VarlinkCall, name_ string, tagged_ str
// Method call dispatcher
func (s__ *VarlinkInterface) VarlinkDispatch(call varlink.Call, methodname string) error {
switch methodname {
- case "PullImage":
+ case "GetContainerLogs":
var in struct {
Name string `json:"name"`
}
@@ -1276,16 +1442,10 @@ func (s__ *VarlinkInterface) VarlinkDispatch(call varlink.Call, methodname strin
if err != nil {
return call.ReplyInvalidParameter("parameters")
}
- return s__.ioprojectatomicpodmanInterface.PullImage(VarlinkCall{call}, in.Name)
-
- case "ListContainerProcesses":
- return s__.ioprojectatomicpodmanInterface.ListContainerProcesses(VarlinkCall{call})
-
- case "ResizeContainerTty":
- return s__.ioprojectatomicpodmanInterface.ResizeContainerTty(VarlinkCall{call})
+ return s__.ioprojectatomicpodmanInterface.GetContainerLogs(VarlinkCall{call}, in.Name)
- case "RemoveContainer":
- return s__.ioprojectatomicpodmanInterface.RemoveContainer(VarlinkCall{call})
+ case "BuildImage":
+ return s__.ioprojectatomicpodmanInterface.BuildImage(VarlinkCall{call})
case "RemoveImage":
var in struct {
@@ -1298,6 +1458,46 @@ func (s__ *VarlinkInterface) VarlinkDispatch(call varlink.Call, methodname strin
}
return s__.ioprojectatomicpodmanInterface.RemoveImage(VarlinkCall{call}, in.Name, in.Force)
+ case "ImportImage":
+ var in struct {
+ Source string `json:"source"`
+ Reference string `json:"reference"`
+ Message string `json:"message"`
+ Changes []string `json:"changes"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.ImportImage(VarlinkCall{call}, in.Source, in.Reference, in.Message, []string(in.Changes))
+
+ case "Ping":
+ return s__.ioprojectatomicpodmanInterface.Ping(VarlinkCall{call})
+
+ case "GetContainer":
+ var in struct {
+ Name string `json:"name"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.GetContainer(VarlinkCall{call}, in.Name)
+
+ case "ResizeContainerTty":
+ return s__.ioprojectatomicpodmanInterface.ResizeContainerTty(VarlinkCall{call})
+
+ case "KillContainer":
+ var in struct {
+ Name string `json:"name"`
+ Signal int64 `json:"signal"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.KillContainer(VarlinkCall{call}, in.Name, in.Signal)
+
case "SearchImage":
var in struct {
Name string `json:"name"`
@@ -1309,26 +1509,11 @@ func (s__ *VarlinkInterface) VarlinkDispatch(call varlink.Call, methodname strin
}
return s__.ioprojectatomicpodmanInterface.SearchImage(VarlinkCall{call}, in.Name, in.Limit)
- case "GetContainerStats":
- return s__.ioprojectatomicpodmanInterface.GetContainerStats(VarlinkCall{call})
-
- case "PauseContainer":
- return s__.ioprojectatomicpodmanInterface.PauseContainer(VarlinkCall{call})
-
- case "WaitContainer":
- return s__.ioprojectatomicpodmanInterface.WaitContainer(VarlinkCall{call})
-
case "DeleteUnusedImages":
return s__.ioprojectatomicpodmanInterface.DeleteUnusedImages(VarlinkCall{call})
- case "RestartContainer":
- return s__.ioprojectatomicpodmanInterface.RestartContainer(VarlinkCall{call})
-
- case "ListImages":
- return s__.ioprojectatomicpodmanInterface.ListImages(VarlinkCall{call})
-
- case "BuildImage":
- return s__.ioprojectatomicpodmanInterface.BuildImage(VarlinkCall{call})
+ case "RenameContainer":
+ return s__.ioprojectatomicpodmanInterface.RenameContainer(VarlinkCall{call})
case "CreateImage":
return s__.ioprojectatomicpodmanInterface.CreateImage(VarlinkCall{call})
@@ -1343,20 +1528,32 @@ func (s__ *VarlinkInterface) VarlinkDispatch(call varlink.Call, methodname strin
}
return s__.ioprojectatomicpodmanInterface.InspectImage(VarlinkCall{call}, in.Name)
- case "InspectContainer":
- return s__.ioprojectatomicpodmanInterface.InspectContainer(VarlinkCall{call})
-
- case "ListContainerChanges":
- return s__.ioprojectatomicpodmanInterface.ListContainerChanges(VarlinkCall{call})
+ case "GetContainerStats":
+ var in struct {
+ Name string `json:"name"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.GetContainerStats(VarlinkCall{call}, in.Name)
- case "StopContainer":
- return s__.ioprojectatomicpodmanInterface.StopContainer(VarlinkCall{call})
+ case "UpdateContainer":
+ return s__.ioprojectatomicpodmanInterface.UpdateContainer(VarlinkCall{call})
- case "KillContainer":
- return s__.ioprojectatomicpodmanInterface.KillContainer(VarlinkCall{call})
+ case "RemoveContainer":
+ var in struct {
+ Name string `json:"name"`
+ Force bool `json:"force"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.RemoveContainer(VarlinkCall{call}, in.Name, in.Force)
- case "UnpauseContainer":
- return s__.ioprojectatomicpodmanInterface.UnpauseContainer(VarlinkCall{call})
+ case "DeleteStoppedContainers":
+ return s__.ioprojectatomicpodmanInterface.DeleteStoppedContainers(VarlinkCall{call})
case "PushImage":
var in struct {
@@ -1385,30 +1582,67 @@ func (s__ *VarlinkInterface) VarlinkDispatch(call varlink.Call, methodname strin
case "CreateFromContainer":
return s__.ioprojectatomicpodmanInterface.CreateFromContainer(VarlinkCall{call})
- case "ImportImage":
+ case "GetVersion":
+ return s__.ioprojectatomicpodmanInterface.GetVersion(VarlinkCall{call})
+
+ case "ListContainers":
+ return s__.ioprojectatomicpodmanInterface.ListContainers(VarlinkCall{call})
+
+ case "CreateContainer":
+ return s__.ioprojectatomicpodmanInterface.CreateContainer(VarlinkCall{call})
+
+ case "InspectContainer":
var in struct {
- Source string `json:"source"`
- Reference string `json:"reference"`
- Message string `json:"message"`
- Changes []string `json:"changes"`
+ Name string `json:"name"`
}
err := call.GetParameters(&in)
if err != nil {
return call.ReplyInvalidParameter("parameters")
}
- return s__.ioprojectatomicpodmanInterface.ImportImage(VarlinkCall{call}, in.Source, in.Reference, in.Message, []string(in.Changes))
+ return s__.ioprojectatomicpodmanInterface.InspectContainer(VarlinkCall{call}, in.Name)
- case "GetVersion":
- return s__.ioprojectatomicpodmanInterface.GetVersion(VarlinkCall{call})
+ case "StopContainer":
+ var in struct {
+ Name string `json:"name"`
+ Timeout int64 `json:"timeout"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.StopContainer(VarlinkCall{call}, in.Name, in.Timeout)
- case "ListContainers":
- return s__.ioprojectatomicpodmanInterface.ListContainers(VarlinkCall{call})
+ case "UnpauseContainer":
+ var in struct {
+ Name string `json:"name"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.UnpauseContainer(VarlinkCall{call}, in.Name)
- case "GetContainerLogs":
- return s__.ioprojectatomicpodmanInterface.GetContainerLogs(VarlinkCall{call})
+ case "ExportContainer":
+ var in struct {
+ Name string `json:"name"`
+ Path string `json:"path"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.ExportContainer(VarlinkCall{call}, in.Name, in.Path)
- case "UpdateContainer":
- return s__.ioprojectatomicpodmanInterface.UpdateContainer(VarlinkCall{call})
+ case "RestartContainer":
+ var in struct {
+ Name string `json:"name"`
+ Timeout int64 `json:"timeout"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.RestartContainer(VarlinkCall{call}, in.Name, in.Timeout)
case "HistoryImage":
var in struct {
@@ -1420,9 +1654,6 @@ func (s__ *VarlinkInterface) VarlinkDispatch(call varlink.Call, methodname strin
}
return s__.ioprojectatomicpodmanInterface.HistoryImage(VarlinkCall{call}, in.Name)
- case "AttachToContainer":
- return s__.ioprojectatomicpodmanInterface.AttachToContainer(VarlinkCall{call})
-
case "TagImage":
var in struct {
Name string `json:"name"`
@@ -1434,23 +1665,65 @@ func (s__ *VarlinkInterface) VarlinkDispatch(call varlink.Call, methodname strin
}
return s__.ioprojectatomicpodmanInterface.TagImage(VarlinkCall{call}, in.Name, in.Tagged)
- case "DeleteStoppedContainers":
- return s__.ioprojectatomicpodmanInterface.DeleteStoppedContainers(VarlinkCall{call})
+ case "PauseContainer":
+ var in struct {
+ Name string `json:"name"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.PauseContainer(VarlinkCall{call}, in.Name)
- case "Ping":
- return s__.ioprojectatomicpodmanInterface.Ping(VarlinkCall{call})
+ case "WaitContainer":
+ var in struct {
+ Name string `json:"name"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.WaitContainer(VarlinkCall{call}, in.Name)
- case "CreateContainer":
- return s__.ioprojectatomicpodmanInterface.CreateContainer(VarlinkCall{call})
+ case "ListImages":
+ return s__.ioprojectatomicpodmanInterface.ListImages(VarlinkCall{call})
- case "ExportContainer":
- return s__.ioprojectatomicpodmanInterface.ExportContainer(VarlinkCall{call})
+ case "PullImage":
+ var in struct {
+ Name string `json:"name"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.PullImage(VarlinkCall{call}, in.Name)
+
+ case "ListContainerProcesses":
+ var in struct {
+ Name string `json:"name"`
+ Opts []string `json:"opts"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.ListContainerProcesses(VarlinkCall{call}, in.Name, []string(in.Opts))
+
+ case "ListContainerChanges":
+ var in struct {
+ Name string `json:"name"`
+ }
+ err := call.GetParameters(&in)
+ if err != nil {
+ return call.ReplyInvalidParameter("parameters")
+ }
+ return s__.ioprojectatomicpodmanInterface.ListContainerChanges(VarlinkCall{call}, in.Name)
case "StartContainer":
return s__.ioprojectatomicpodmanInterface.StartContainer(VarlinkCall{call})
- case "RenameContainer":
- return s__.ioprojectatomicpodmanInterface.RenameContainer(VarlinkCall{call})
+ case "AttachToContainer":
+ return s__.ioprojectatomicpodmanInterface.AttachToContainer(VarlinkCall{call})
default:
return call.ReplyMethodNotFound(methodname)
@@ -1519,32 +1792,100 @@ type ImageSearch (
star_count: int
)
+# ListContainer is the returned struct for an individual container
+type ListContainerData (
+ id: string,
+ image: string,
+ imageid: string,
+ command: []string,
+ createdat: string,
+ runningfor: string,
+ status: string,
+ ports: []ContainerPortMappings,
+ rootfssize: int,
+ rwsize: int,
+ names: string,
+ labels: [string]string,
+ mounts: []ContainerMount,
+ containerrunning: bool,
+ namespaces: ContainerNameSpace
+)
+
+# ContainerStats is the return struct for the stats of a container
+type ContainerStats (
+ id: string,
+ name: string,
+ cpu: float,
+ cpu_nano: int,
+ system_nano: int,
+ mem_usage: int,
+ mem_limit: int,
+ mem_perc: float,
+ net_input: int,
+ net_output: int,
+ block_output: int,
+ block_input: int,
+ pids: int
+)
+
+# ContainerMount describes the struct for mounts in a container
+type ContainerMount (
+ destination: string,
+ type: string,
+ source: string,
+ options: []string
+)
+
+# ContainerPortMappings describes the struct for portmappings in an existing container
+type ContainerPortMappings (
+ host_port: string,
+ host_ip: string,
+ protocol: string,
+ container_port: string
+)
+
+# ContainerNamespace describes the namespace structure for an existing container
+type ContainerNameSpace (
+ user: string,
+ uts: string,
+ pidns: string,
+ pid: string,
+ cgroup: string,
+ net: string,
+ mnt: string,
+ ipc: string
+)
+
# System
method Ping() -> (ping: StringResponse)
method GetVersion() -> (version: Version)
# Containers
-method ListContainers() -> (notimplemented: NotImplemented)
+method ListContainers() -> (containers: []ListContainerData)
+method GetContainer(name: string) -> (container: ListContainerData)
method CreateContainer() -> (notimplemented: NotImplemented)
-method InspectContainer() -> (notimplemented: NotImplemented)
-method ListContainerProcesses() -> (notimplemented: NotImplemented)
-method GetContainerLogs() -> (notimplemented: NotImplemented)
-method ListContainerChanges() -> (notimplemented: NotImplemented)
-method ExportContainer() -> (notimplemented: NotImplemented)
-method GetContainerStats() -> (notimplemented: NotImplemented)
+method InspectContainer(name: string) -> (container: string)
+# TODO: Should this be made into a streaming response as opposed to a one off?
+method ListContainerProcesses(name: string, opts: []string) -> (container: []string)
+# TODO: Should this be made into a streaming response as opposed to a one off?
+method GetContainerLogs(name: string) -> (container: []string)
+method ListContainerChanges(name: string) -> (container: [string]string)
+# TODO: This should be made into a streaming response
+method ExportContainer(name: string, path: string) -> (tarfile: string)
+method GetContainerStats(name: string) -> (container: ContainerStats)
method ResizeContainerTty() -> (notimplemented: NotImplemented)
method StartContainer() -> (notimplemented: NotImplemented)
-method StopContainer() -> (notimplemented: NotImplemented)
-method RestartContainer() -> (notimplemented: NotImplemented)
-method KillContainer() -> (notimplemented: NotImplemented)
+method StopContainer(name: string, timeout: int) -> (container: string)
+method RestartContainer(name: string, timeout: int) -> (container: string)
+method KillContainer(name: string, signal: int) -> (container: string)
method UpdateContainer() -> (notimplemented: NotImplemented)
method RenameContainer() -> (notimplemented: NotImplemented)
-method PauseContainer() -> (notimplemented: NotImplemented)
-method UnpauseContainer() -> (notimplemented: NotImplemented)
+method PauseContainer(name: string) -> (container: string)
+method UnpauseContainer(name: string) -> (container: string)
method AttachToContainer() -> (notimplemented: NotImplemented)
-method WaitContainer() -> (notimplemented: NotImplemented)
-method RemoveContainer() -> (notimplemented: NotImplemented)
-method DeleteStoppedContainers() -> (notimplemented: NotImplemented)
+method WaitContainer(name: string) -> (exitcode: int)
+method RemoveContainer(name: string, force: bool) -> (container: string)
+method DeleteStoppedContainers() -> (containers: []string)
# Images
method ListImages() -> (images: []ImageInList)
@@ -1565,7 +1906,8 @@ method PullImage(name: string) -> (id: string)
# Something failed
error ActionFailed (reason: string)
-error ImageNotFound (imagename: string)
+error ImageNotFound (name: string)
+error ContainerNotFound (name: string)
error ErrorOccurred (reason: string)
error RuntimeError (reason: string)
`
diff --git a/libpod/container_api.go b/libpod/container_api.go
index aa1e7966f..f0742d9f1 100644
--- a/libpod/container_api.go
+++ b/libpod/container_api.go
@@ -705,3 +705,52 @@ func (c *Container) Sync() error {
return nil
}
+
+// RestartWithTimeout restarts a running container and takes a given timeout in uint
+func (c *Container) RestartWithTimeout(ctx context.Context, timeout uint) error {
+ if !c.batched {
+ c.lock.Lock()
+ defer c.lock.Unlock()
+
+ if err := c.syncContainer(); err != nil {
+ return err
+ }
+ }
+
+ notRunning, err := c.checkDependenciesRunning()
+ if err != nil {
+ return errors.Wrapf(err, "error checking dependencies for container %s")
+ }
+ if len(notRunning) > 0 {
+ depString := strings.Join(notRunning, ",")
+ return errors.Wrapf(ErrCtrStateInvalid, "some dependencies of container %s are not started: %s", c.ID(), depString)
+ }
+ if c.state.State == ContainerStateUnknown || c.state.State == ContainerStatePaused {
+ return errors.Errorf("unable to restart a container in a paused or unknown state")
+ }
+
+ if c.state.State == ContainerStateRunning {
+ if err := c.stop(timeout); err != nil {
+ return err
+ }
+ }
+ if err := c.prepare(); err != nil {
+ return err
+ }
+
+ defer func() {
+ if err != nil {
+ if err2 := c.cleanup(); err2 != nil {
+ logrus.Errorf("error cleaning up container %s: %v", c.ID(), err2)
+ }
+ }
+ }()
+
+ if c.state.State == ContainerStateStopped {
+ // Reinitialize the container if we need to
+ if err := c.reinit(ctx); err != nil {
+ return err
+ }
+ }
+ return c.start()
+}
diff --git a/libpod/container_internal.go b/libpod/container_internal.go
index 8897b3cbf..614c6aca0 100644
--- a/libpod/container_internal.go
+++ b/libpod/container_internal.go
@@ -459,7 +459,6 @@ func (c *Container) reinit(ctx context.Context) error {
if err := c.runtime.ociRuntime.deleteContainer(c); err != nil {
return errors.Wrapf(err, "error removing container %s from runtime", c.ID())
}
-
// Our state is now Configured, as we've removed ourself from
// the runtime
// Set and save now to make sure that, if the init() below fails
@@ -545,7 +544,6 @@ func (c *Container) start() error {
if err := c.runtime.ociRuntime.startContainer(c); err != nil {
return err
}
-
logrus.Debugf("Started container %s", c.ID())
c.state.State = ContainerStateRunning
diff --git a/pkg/varlinkapi/containers.go b/pkg/varlinkapi/containers.go
index bd406dda2..ece33556b 100644
--- a/pkg/varlinkapi/containers.go
+++ b/pkg/varlinkapi/containers.go
@@ -1,12 +1,67 @@
package varlinkapi
import (
- ioprojectatomicpodman "github.com/projectatomic/libpod/cmd/podman/varlink"
+ "bufio"
+ "encoding/json"
+ "fmt"
+ "os"
+ "syscall"
+
+ "github.com/pkg/errors"
+ "github.com/projectatomic/libpod/cmd/podman/batchcontainer"
+ "github.com/projectatomic/libpod/cmd/podman/libpodruntime"
+ "github.com/projectatomic/libpod/cmd/podman/varlink"
+ "github.com/projectatomic/libpod/libpod"
)
// ListContainers ...
func (i *LibpodAPI) ListContainers(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("ListContainers")
+ var (
+ listContainers []ioprojectatomicpodman.ListContainerData
+ )
+
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ containers, err := runtime.GetAllContainers()
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ opts := batchcontainer.PsOptions{
+ Namespace: true,
+ Size: true,
+ }
+ for _, ctr := range containers {
+ batchInfo, err := batchcontainer.BatchContainerOp(ctr, opts)
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+
+ listContainers = append(listContainers, makeListContainer(ctr.ID(), batchInfo))
+ }
+ return call.ReplyListContainers(listContainers)
+}
+
+// GetContainer ...
+func (i *LibpodAPI) GetContainer(call ioprojectatomicpodman.VarlinkCall, name string) error {
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyContainerNotFound(name)
+ }
+ opts := batchcontainer.PsOptions{
+ Namespace: true,
+ Size: true,
+ }
+ batchInfo, err := batchcontainer.BatchContainerOp(ctr, opts)
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ return call.ReplyGetContainer(makeListContainer(ctr.ID(), batchInfo))
}
// CreateContainer ...
@@ -15,33 +70,158 @@ func (i *LibpodAPI) CreateContainer(call ioprojectatomicpodman.VarlinkCall) erro
}
// InspectContainer ...
-func (i *LibpodAPI) InspectContainer(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("InspectContainer")
+func (i *LibpodAPI) InspectContainer(call ioprojectatomicpodman.VarlinkCall, name string) error {
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyContainerNotFound(name)
+ }
+ inspectInfo, err := ctr.Inspect(true)
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ b, err := json.Marshal(inspectInfo)
+ if err != nil {
+ return call.ReplyErrorOccurred(fmt.Sprintf("unable to serialize"))
+ }
+ return call.ReplyInspectContainer(string(b))
}
// ListContainerProcesses ...
-func (i *LibpodAPI) ListContainerProcesses(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("ListContainerProcesses")
+func (i *LibpodAPI) ListContainerProcesses(call ioprojectatomicpodman.VarlinkCall, name string, opts []string) error {
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyContainerNotFound(name)
+ }
+ containerState, err := ctr.State()
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ if containerState != libpod.ContainerStateRunning {
+ return call.ReplyErrorOccurred(fmt.Sprintf("container %s is not running", name))
+ }
+ var psArgs []string
+ psOpts := []string{"-o", "uid,pid,ppid,c,stime,tname,time,cmd"}
+ if len(opts) > 1 {
+ psOpts = opts
+ }
+ psArgs = append(psArgs, psOpts...)
+ psOutput, err := ctr.GetContainerPidInformation(psArgs)
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ return call.ReplyListContainerProcesses(psOutput)
}
// GetContainerLogs ...
-func (i *LibpodAPI) GetContainerLogs(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("GetContainerLogs")
+func (i *LibpodAPI) GetContainerLogs(call ioprojectatomicpodman.VarlinkCall, name string) error {
+ var logs []string
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyContainerNotFound(name)
+ }
+ logPath := ctr.LogPath()
+
+ containerState, err := ctr.State()
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ if _, err := os.Stat(logPath); err != nil {
+ if containerState == libpod.ContainerStateConfigured {
+ return call.ReplyGetContainerLogs(logs)
+ }
+ }
+ file, err := os.Open(logPath)
+ if err != nil {
+ return errors.Wrapf(err, "unable to read container log file")
+ }
+ defer file.Close()
+ reader := bufio.NewReader(file)
+ for {
+ line, err := reader.ReadString('\n')
+ if err != nil {
+ break
+ }
+ logs = append(logs, line)
+ }
+ return call.ReplyGetContainerLogs(logs)
}
// ListContainerChanges ...
-func (i *LibpodAPI) ListContainerChanges(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("ListContianerChanges")
+func (i *LibpodAPI) ListContainerChanges(call ioprojectatomicpodman.VarlinkCall, name string) error {
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ changes, err := runtime.GetDiff("", name)
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+
+ m := make(map[string]string)
+ for _, change := range changes {
+ m[change.Path] = change.Kind.String()
+ }
+ return call.ReplyListContainerChanges(m)
}
// ExportContainer ...
-func (i *LibpodAPI) ExportContainer(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("ExportContainer")
+func (i *LibpodAPI) ExportContainer(call ioprojectatomicpodman.VarlinkCall, name, path string) error {
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyContainerNotFound(name)
+ }
+ if err := ctr.Export(path); err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ return call.ReplyExportContainer(path)
}
// GetContainerStats ...
-func (i *LibpodAPI) GetContainerStats(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("GetContainerStates")
+func (i *LibpodAPI) GetContainerStats(call ioprojectatomicpodman.VarlinkCall, name string) error {
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyContainerNotFound(name)
+ }
+ containerStats, err := ctr.GetContainerStats(&libpod.ContainerStats{})
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ cs := ioprojectatomicpodman.ContainerStats{
+ Id: ctr.ID(),
+ Name: ctr.Name(),
+ Cpu: containerStats.CPU,
+ Cpu_nano: int64(containerStats.CPUNano),
+ System_nano: int64(containerStats.SystemNano),
+ Mem_usage: int64(containerStats.MemUsage),
+ Mem_limit: int64(containerStats.MemLimit),
+ Mem_perc: containerStats.MemPerc,
+ Net_input: int64(containerStats.NetInput),
+ Net_output: int64(containerStats.NetOutput),
+ Block_input: int64(containerStats.BlockInput),
+ Block_output: int64(containerStats.BlockOutput),
+ Pids: int64(containerStats.PIDs),
+ }
+ return call.ReplyGetContainerStats(cs)
}
// ResizeContainerTty ...
@@ -55,18 +235,56 @@ func (i *LibpodAPI) StartContainer(call ioprojectatomicpodman.VarlinkCall) error
}
// StopContainer ...
-func (i *LibpodAPI) StopContainer(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("StopContainer")
+func (i *LibpodAPI) StopContainer(call ioprojectatomicpodman.VarlinkCall, name string, timeout int64) error {
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyContainerNotFound(name)
+ }
+ if err := ctr.StopWithTimeout(uint(timeout)); err != nil && err != libpod.ErrCtrStopped {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ return call.ReplyStopContainer(ctr.ID())
}
// RestartContainer ...
-func (i *LibpodAPI) RestartContainer(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("RestartContainer")
+func (i *LibpodAPI) RestartContainer(call ioprojectatomicpodman.VarlinkCall, name string, timeout int64) error {
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyContainerNotFound(name)
+ }
+ if err := ctr.RestartWithTimeout(getContext(), uint(timeout)); err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ return call.ReplyRestartContainer(ctr.ID())
}
-// KillContainer ...
-func (i *LibpodAPI) KillContainer(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("KillContainer")
+// KillContainer kills a running container. If you want to use the default SIGTERM signal, just send a -1
+// for the signal arg.
+func (i *LibpodAPI) KillContainer(call ioprojectatomicpodman.VarlinkCall, name string, signal int64) error {
+ var killSignal uint = uint(syscall.SIGTERM)
+ if signal != -1 {
+ killSignal = uint(signal)
+ }
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyContainerNotFound(name)
+ }
+ if err := ctr.Kill(killSignal); err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ return call.ReplyKillContainer(ctr.ID())
}
// UpdateContainer ...
@@ -80,13 +298,35 @@ func (i *LibpodAPI) RenameContainer(call ioprojectatomicpodman.VarlinkCall) erro
}
// PauseContainer ...
-func (i *LibpodAPI) PauseContainer(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("PauseContainer")
+func (i *LibpodAPI) PauseContainer(call ioprojectatomicpodman.VarlinkCall, name string) error {
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyContainerNotFound(name)
+ }
+ if err := ctr.Pause(); err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ return call.ReplyPauseContainer(ctr.ID())
}
// UnpauseContainer ...
-func (i *LibpodAPI) UnpauseContainer(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("UnpauseContainer")
+func (i *LibpodAPI) UnpauseContainer(call ioprojectatomicpodman.VarlinkCall, name string) error {
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyContainerNotFound(name)
+ }
+ if err := ctr.Unpause(); err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ return call.ReplyUnpauseContainer(ctr.ID())
}
// AttachToContainer ...
@@ -96,16 +336,62 @@ func (i *LibpodAPI) AttachToContainer(call ioprojectatomicpodman.VarlinkCall) er
}
// WaitContainer ...
-func (i *LibpodAPI) WaitContainer(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("WaitContainer")
+func (i *LibpodAPI) WaitContainer(call ioprojectatomicpodman.VarlinkCall, name string) error {
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyContainerNotFound(name)
+ }
+ exitCode, err := ctr.Wait()
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ return call.ReplyWaitContainer(int64(exitCode))
+
}
// RemoveContainer ...
-func (i *LibpodAPI) RemoveContainer(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("RemoveContainer")
+func (i *LibpodAPI) RemoveContainer(call ioprojectatomicpodman.VarlinkCall, name string, force bool) error {
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ ctr, err := runtime.LookupContainer(name)
+ if err != nil {
+ return call.ReplyContainerNotFound(name)
+ }
+ if err := runtime.RemoveContainer(ctr, force); err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ return call.ReplyRemoveContainer(ctr.ID())
+
}
// DeleteStoppedContainers ...
func (i *LibpodAPI) DeleteStoppedContainers(call ioprojectatomicpodman.VarlinkCall) error {
- return call.ReplyMethodNotImplemented("DeleteContainer")
+ var deletedContainers []string
+ runtime, err := libpodruntime.GetRuntime(i.Cli)
+ if err != nil {
+ return call.ReplyRuntimeError(err.Error())
+ }
+ containers, err := runtime.GetAllContainers()
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ for _, ctr := range containers {
+ state, err := ctr.State()
+ if err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ if state != libpod.ContainerStateRunning {
+ if err := runtime.RemoveContainer(ctr, false); err != nil {
+ return call.ReplyErrorOccurred(err.Error())
+ }
+ deletedContainers = append(deletedContainers, ctr.ID())
+ }
+ }
+ return call.ReplyDeleteStoppedContainers(deletedContainers)
}
diff --git a/pkg/varlinkapi/util.go b/pkg/varlinkapi/util.go
index ff0fb6ecb..25ab59801 100644
--- a/pkg/varlinkapi/util.go
+++ b/pkg/varlinkapi/util.go
@@ -2,9 +2,76 @@ package varlinkapi
import (
"context"
+ "strconv"
+ "time"
+
+ "github.com/projectatomic/libpod/cmd/podman/batchcontainer"
+ "github.com/projectatomic/libpod/cmd/podman/varlink"
+ "github.com/projectatomic/libpod/libpod"
)
// getContext returns a non-nil, empty context
func getContext() context.Context {
return context.TODO()
}
+
+func makeListContainer(containerID string, batchInfo batchcontainer.BatchContainerStruct) ioprojectatomicpodman.ListContainerData {
+ var (
+ mounts []ioprojectatomicpodman.ContainerMount
+ ports []ioprojectatomicpodman.ContainerPortMappings
+ )
+ ns := batchcontainer.GetNamespaces(batchInfo.Pid)
+
+ for _, mount := range batchInfo.ConConfig.Spec.Mounts {
+ m := ioprojectatomicpodman.ContainerMount{
+ Destination: mount.Destination,
+ Type: mount.Type,
+ Source: mount.Source,
+ Options: mount.Options,
+ }
+ mounts = append(mounts, m)
+ }
+
+ for _, pm := range batchInfo.ConConfig.PortMappings {
+ p := ioprojectatomicpodman.ContainerPortMappings{
+ Host_port: strconv.Itoa(int(pm.HostPort)),
+ Host_ip: pm.HostIP,
+ Protocol: pm.Protocol,
+ Container_port: strconv.Itoa(int(pm.ContainerPort)),
+ }
+ ports = append(ports, p)
+
+ }
+
+ // If we find this needs to be done for other container endpoints, we should
+ // convert this to a separate function or a generic map from struct function.
+ namespace := ioprojectatomicpodman.ContainerNameSpace{
+ User: ns.User,
+ Uts: ns.UTS,
+ Pidns: ns.PIDNS,
+ Pid: ns.PID,
+ Cgroup: ns.Cgroup,
+ Net: ns.NET,
+ Mnt: ns.MNT,
+ Ipc: ns.IPC,
+ }
+
+ lc := ioprojectatomicpodman.ListContainerData{
+ Id: containerID,
+ Image: batchInfo.ConConfig.RootfsImageName,
+ Imageid: batchInfo.ConConfig.RootfsImageID,
+ Command: batchInfo.ConConfig.Spec.Process.Args,
+ Createdat: batchInfo.ConConfig.CreatedTime.String(),
+ Runningfor: time.Since(batchInfo.ConConfig.CreatedTime).String(),
+ Status: batchInfo.ConState.String(),
+ Ports: ports,
+ Rootfssize: batchInfo.RootFsSize,
+ Rwsize: batchInfo.RwSize,
+ Names: batchInfo.ConConfig.Name,
+ Labels: batchInfo.ConConfig.Labels,
+ Mounts: mounts,
+ Containerrunning: batchInfo.ConState == libpod.ContainerStateRunning,
+ Namespaces: namespace,
+ }
+ return lc
+}