summaryrefslogtreecommitdiff
path: root/pkg/adapter/pods_remote.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/adapter/pods_remote.go')
-rw-r--r--pkg/adapter/pods_remote.go576
1 files changed, 0 insertions, 576 deletions
diff --git a/pkg/adapter/pods_remote.go b/pkg/adapter/pods_remote.go
deleted file mode 100644
index ebd10a92a..000000000
--- a/pkg/adapter/pods_remote.go
+++ /dev/null
@@ -1,576 +0,0 @@
-// +build remoteclient
-
-package adapter
-
-import (
- "context"
- "encoding/json"
- "strings"
- "time"
-
- "github.com/containers/libpod/cmd/podman/cliconfig"
- "github.com/containers/libpod/cmd/podman/shared"
- "github.com/containers/libpod/libpod"
- "github.com/containers/libpod/libpod/define"
- iopodman "github.com/containers/libpod/pkg/varlink"
- "github.com/containers/libpod/pkg/varlinkapi"
- "github.com/pkg/errors"
- "github.com/sirupsen/logrus"
-)
-
-// PodContainerStats is struct containing an adapter Pod and a libpod
-// ContainerStats and is used primarily for outputting pod stats.
-type PodContainerStats struct {
- Pod *Pod
- ContainerStats map[string]*libpod.ContainerStats
-}
-
-// RemovePods removes one or more based on the cli context.
-func (r *LocalRuntime) RemovePods(ctx context.Context, cli *cliconfig.PodRmValues) ([]string, []error) {
- var (
- rmErrs []error
- rmPods []string
- )
- podIDs, err := iopodman.GetPodsByContext().Call(r.Conn, cli.All, cli.Latest, cli.InputArgs)
- if err != nil {
- rmErrs = append(rmErrs, err)
- return nil, rmErrs
- }
-
- for _, p := range podIDs {
- reply, err := iopodman.RemovePod().Call(r.Conn, p, cli.Force)
- if err != nil {
- rmErrs = append(rmErrs, err)
- } else {
- rmPods = append(rmPods, reply)
- }
- }
- return rmPods, rmErrs
-}
-
-// Inspect looks up a pod by name or id and embeds its data into a remote pod
-// object.
-func (r *LocalRuntime) Inspect(nameOrID string) (*Pod, error) {
- reply, err := iopodman.PodStateData().Call(r.Conn, nameOrID)
- if err != nil {
- return nil, err
- }
- data := libpod.PodInspect{}
- if err := json.Unmarshal([]byte(reply), &data); err != nil {
- return nil, err
- }
- pod := Pod{}
- pod.Runtime = r
- pod.config = data.Config
- pod.state = data.State
- pod.containers = data.Containers
- return &pod, nil
-}
-
-// GetLatestPod gets the latest pod and wraps it in an adapter pod
-func (r *LocalRuntime) GetLatestPod() (*Pod, error) {
- reply, err := iopodman.GetPodsByContext().Call(r.Conn, false, true, nil)
- if err != nil {
- return nil, err
- }
- if len(reply) > 0 {
- return r.Inspect(reply[0])
- }
- return nil, errors.New("no pods exist")
-}
-
-// LookupPod gets a pod by name or ID and wraps it in an adapter pod
-func (r *LocalRuntime) LookupPod(nameOrID string) (*Pod, error) {
- return r.Inspect(nameOrID)
-}
-
-// Inspect, like libpod pod inspect, returns a libpod.PodInspect object from
-// the data of a remotepod data struct
-func (p *Pod) Inspect() (*libpod.PodInspect, error) {
- config := new(libpod.PodConfig)
- if err := libpod.JSONDeepCopy(p.remotepod.config, config); err != nil {
- return nil, err
- }
- inspectData := libpod.PodInspect{
- Config: config,
- State: p.remotepod.state,
- Containers: p.containers,
- }
- return &inspectData, nil
-}
-
-// StopPods stops pods based on the cli context from the remote client.
-func (r *LocalRuntime) StopPods(ctx context.Context, cli *cliconfig.PodStopValues) ([]string, []error) {
- var (
- stopErrs []error
- stopPods []string
- )
- var timeout int64 = -1
- if cli.Flags().Changed("timeout") {
- timeout = int64(cli.Timeout)
- }
- podIDs, err := iopodman.GetPodsByContext().Call(r.Conn, cli.All, cli.Latest, cli.InputArgs)
- if err != nil {
- return nil, []error{err}
- }
-
- for _, p := range podIDs {
- podID, err := iopodman.StopPod().Call(r.Conn, p, timeout)
- if err != nil {
- stopErrs = append(stopErrs, err)
- } else {
- stopPods = append(stopPods, podID)
- }
- }
- return stopPods, stopErrs
-}
-
-// KillPods kills pods over varlink for the remoteclient
-func (r *LocalRuntime) KillPods(ctx context.Context, cli *cliconfig.PodKillValues, signal uint) ([]string, []error) {
- var (
- killErrs []error
- killPods []string
- )
-
- podIDs, err := iopodman.GetPodsByContext().Call(r.Conn, cli.All, cli.Latest, cli.InputArgs)
- if err != nil {
- return nil, []error{err}
- }
-
- for _, p := range podIDs {
- podID, err := iopodman.KillPod().Call(r.Conn, p, int64(signal))
- if err != nil {
- killErrs = append(killErrs, err)
- } else {
- killPods = append(killPods, podID)
- }
- }
- return killPods, killErrs
-}
-
-// StartPods starts pods for the remote client over varlink
-func (r *LocalRuntime) StartPods(ctx context.Context, cli *cliconfig.PodStartValues) ([]string, []error) {
- var (
- startErrs []error
- startPods []string
- )
-
- podIDs, err := iopodman.GetPodsByContext().Call(r.Conn, cli.All, cli.Latest, cli.InputArgs)
- if err != nil {
- return nil, []error{err}
- }
-
- for _, p := range podIDs {
- podID, err := iopodman.StartPod().Call(r.Conn, p)
- if err != nil {
- startErrs = append(startErrs, err)
- } else {
- startPods = append(startPods, podID)
- }
- }
- return startPods, startErrs
-}
-
-// CreatePod creates a pod for the remote client over a varlink connection
-func (r *LocalRuntime) CreatePod(ctx context.Context, cli *cliconfig.PodCreateValues, labels map[string]string) (string, error) {
- var share []string
- if cli.Share != "" {
- share = strings.Split(cli.Share, ",")
- }
- pc := iopodman.PodCreate{
- Name: cli.Name,
- CgroupParent: cli.CgroupParent,
- Labels: labels,
- Share: share,
- Infra: cli.Infra,
- InfraCommand: cli.InfraCommand,
- InfraImage: cli.InfraCommand,
- Publish: cli.StringSlice("publish"),
- }
-
- return iopodman.CreatePod().Call(r.Conn, pc)
-}
-
-// GetAllPods is a helper function that gets all pods for the remote client
-func (r *LocalRuntime) GetAllPods() ([]*Pod, error) {
- var pods []*Pod
- podIDs, err := iopodman.GetPodsByContext().Call(r.Conn, true, false, []string{})
- if err != nil {
- return nil, err
- }
- for _, p := range podIDs {
- pod, err := r.LookupPod(p)
- if err != nil {
- return nil, err
- }
- pods = append(pods, pod)
- }
- return pods, nil
-}
-
-// This is a empty implementation stating remoteclient not yet implemented
-func (r *LocalRuntime) GetPodsWithFilters(filters string) ([]*Pod, error) {
- return nil, define.ErrNotImplemented
-}
-
-// GetPodsByStatus returns a slice of pods filtered by a libpod status
-func (r *LocalRuntime) GetPodsByStatus(statuses []string) ([]*Pod, error) {
- podIDs, err := iopodman.GetPodsByStatus().Call(r.Conn, statuses)
- if err != nil {
- return nil, err
- }
- pods := make([]*Pod, 0, len(podIDs))
- for _, p := range podIDs {
- pod, err := r.LookupPod(p)
- if err != nil {
- return nil, err
- }
- pods = append(pods, pod)
- }
- return pods, nil
-}
-
-// ID returns the id of a remote pod
-func (p *Pod) ID() string {
- return p.config.ID
-}
-
-// Name returns the name of the remote pod
-func (p *Pod) Name() string {
- return p.config.Name
-}
-
-// AllContainersByID returns a slice of a pod's container IDs
-func (p *Pod) AllContainersByID() ([]string, error) {
- var containerIDs []string
- for _, ctr := range p.containers {
- containerIDs = append(containerIDs, ctr.ID)
- }
- return containerIDs, nil
-}
-
-// AllContainers returns a pods containers
-func (p *Pod) AllContainers() ([]*Container, error) {
- var containers []*Container
- for _, ctr := range p.containers {
- container, err := p.Runtime.LookupContainer(ctr.ID)
- if err != nil {
- return nil, err
- }
- containers = append(containers, container)
- }
- return containers, nil
-}
-
-// Status ...
-func (p *Pod) Status() (map[string]define.ContainerStatus, error) {
- ctrs := make(map[string]define.ContainerStatus)
- for _, i := range p.containers {
- var status define.ContainerStatus
- switch i.State {
- case "exited":
- status = define.ContainerStateExited
- case "stopped":
- status = define.ContainerStateStopped
- case "running":
- status = define.ContainerStateRunning
- case "paused":
- status = define.ContainerStatePaused
- case "created":
- status = define.ContainerStateCreated
- case "define.red":
- status = define.ContainerStateConfigured
- default:
- status = define.ContainerStateUnknown
- }
- ctrs[i.ID] = status
- }
- return ctrs, nil
-}
-
-// GetPodStatus is a wrapper to get the string version of the status
-func (p *Pod) GetPodStatus() (string, error) {
- ctrStatuses, err := p.Status()
- if err != nil {
- return "", err
- }
- return shared.CreatePodStatusResults(ctrStatuses)
-}
-
-// InfraContainerID returns the ID of the infra container in a pod
-func (p *Pod) InfraContainerID() (string, error) {
- return p.state.InfraContainerID, nil
-}
-
-// CreatedTime returns the time the container was created as a time.Time
-func (p *Pod) CreatedTime() time.Time {
- return p.config.CreatedTime
-}
-
-// SharesPID ....
-func (p *Pod) SharesPID() bool {
- return p.config.UsePodPID
-}
-
-// SharesIPC returns whether containers in pod
-// default to use IPC namespace of first container in pod
-func (p *Pod) SharesIPC() bool {
- return p.config.UsePodIPC
-}
-
-// SharesNet returns whether containers in pod
-// default to use network namespace of first container in pod
-func (p *Pod) SharesNet() bool {
- return p.config.UsePodNet
-}
-
-// SharesMount returns whether containers in pod
-// default to use PID namespace of first container in pod
-func (p *Pod) SharesMount() bool {
- return p.config.UsePodMount
-}
-
-// SharesUser returns whether containers in pod
-// default to use user namespace of first container in pod
-func (p *Pod) SharesUser() bool {
- return p.config.UsePodUser
-}
-
-// SharesUTS returns whether containers in pod
-// default to use UTS namespace of first container in pod
-func (p *Pod) SharesUTS() bool {
- return p.config.UsePodUTS
-}
-
-// SharesCgroup returns whether containers in the pod will default to this pod's
-// cgroup instead of the default libpod parent
-func (p *Pod) SharesCgroup() bool {
- return p.config.UsePodCgroup
-}
-
-// CgroupParent returns the pod's CGroup parent
-func (p *Pod) CgroupParent() string {
- return p.config.CgroupParent
-}
-
-// PausePods pauses a pod using varlink and the remote client
-func (r *LocalRuntime) PausePods(c *cliconfig.PodPauseValues) ([]string, map[string]error, []error) {
- var (
- pauseIDs []string
- pauseErrors []error
- )
- containerErrors := make(map[string]error)
-
- pods, err := iopodman.GetPodsByContext().Call(r.Conn, c.All, c.Latest, c.InputArgs)
- if err != nil {
- pauseErrors = append(pauseErrors, err)
- return nil, containerErrors, pauseErrors
- }
- for _, pod := range pods {
- reply, err := iopodman.PausePod().Call(r.Conn, pod)
- if err != nil {
- pauseErrors = append(pauseErrors, err)
- continue
- }
- pauseIDs = append(pauseIDs, reply)
- }
- return pauseIDs, nil, pauseErrors
-}
-
-// UnpausePods unpauses a pod using varlink and the remote client
-func (r *LocalRuntime) UnpausePods(c *cliconfig.PodUnpauseValues) ([]string, map[string]error, []error) {
- var (
- unpauseIDs []string
- unpauseErrors []error
- )
- containerErrors := make(map[string]error)
-
- pods, err := iopodman.GetPodsByContext().Call(r.Conn, c.All, c.Latest, c.InputArgs)
- if err != nil {
- unpauseErrors = append(unpauseErrors, err)
- return nil, containerErrors, unpauseErrors
- }
- for _, pod := range pods {
- reply, err := iopodman.UnpausePod().Call(r.Conn, pod)
- if err != nil {
- unpauseErrors = append(unpauseErrors, err)
- continue
- }
- unpauseIDs = append(unpauseIDs, reply)
- }
- return unpauseIDs, nil, unpauseErrors
-}
-
-// RestartPods restarts pods using varlink and the remote client
-func (r *LocalRuntime) RestartPods(ctx context.Context, c *cliconfig.PodRestartValues) ([]string, map[string]error, []error) {
- var (
- restartIDs []string
- restartErrors []error
- )
- containerErrors := make(map[string]error)
-
- pods, err := iopodman.GetPodsByContext().Call(r.Conn, c.All, c.Latest, c.InputArgs)
- if err != nil {
- restartErrors = append(restartErrors, err)
- return nil, containerErrors, restartErrors
- }
- for _, pod := range pods {
- reply, err := iopodman.RestartPod().Call(r.Conn, pod)
- if err != nil {
- restartErrors = append(restartErrors, err)
- continue
- }
- restartIDs = append(restartIDs, reply)
- }
- return restartIDs, nil, restartErrors
-}
-
-// PodTop gets top statistics for a pod
-func (r *LocalRuntime) PodTop(c *cliconfig.PodTopValues, descriptors []string) ([]string, error) {
- var (
- latest bool
- podName string
- )
- if c.Latest {
- latest = true
- } else {
- podName = c.InputArgs[0]
- }
- return iopodman.TopPod().Call(r.Conn, podName, latest, descriptors)
-}
-
-// GetStatPods returns pods for use in pod stats
-func (r *LocalRuntime) GetStatPods(c *cliconfig.PodStatsValues) ([]*Pod, error) {
- var (
- pods []*Pod
- err error
- podIDs []string
- running bool
- )
-
- if len(c.InputArgs) > 0 || c.Latest || c.All {
- podIDs, err = iopodman.GetPodsByContext().Call(r.Conn, c.All, c.Latest, c.InputArgs)
- } else {
- podIDs, err = iopodman.GetPodsByContext().Call(r.Conn, true, false, []string{})
- running = true
- }
- if err != nil {
- return nil, err
- }
- for _, p := range podIDs {
- pod, err := r.Inspect(p)
- if err != nil {
- return nil, err
- }
- if running {
- status, err := pod.GetPodStatus()
- if err != nil {
- // if we cannot get the status of the pod, skip and move on
- continue
- }
- if strings.ToUpper(status) != "RUNNING" {
- // if the pod is not running, skip and move on as well
- continue
- }
- }
- pods = append(pods, pod)
- }
- return pods, nil
-}
-
-// GetPodStats returns the stats for each of its containers
-func (p *Pod) GetPodStats(previousContainerStats map[string]*libpod.ContainerStats) (map[string]*libpod.ContainerStats, error) {
- var (
- ok bool
- prevStat *libpod.ContainerStats
- )
- newContainerStats := make(map[string]*libpod.ContainerStats)
- containers, err := p.AllContainers()
- if err != nil {
- return nil, err
- }
- for _, c := range containers {
- if prevStat, ok = previousContainerStats[c.ID()]; !ok {
- prevStat = &libpod.ContainerStats{ContainerID: c.ID()}
- }
- cStats := iopodman.ContainerStats{
- Id: prevStat.ContainerID,
- Name: prevStat.Name,
- Cpu: prevStat.CPU,
- Cpu_nano: int64(prevStat.CPUNano),
- System_nano: int64(prevStat.SystemNano),
- Mem_usage: int64(prevStat.MemUsage),
- Mem_limit: int64(prevStat.MemLimit),
- Mem_perc: prevStat.MemPerc,
- Net_input: int64(prevStat.NetInput),
- Net_output: int64(prevStat.NetOutput),
- Block_input: int64(prevStat.BlockInput),
- Block_output: int64(prevStat.BlockOutput),
- Pids: int64(prevStat.PIDs),
- }
- stats, err := iopodman.GetContainerStatsWithHistory().Call(p.Runtime.Conn, cStats)
- if err != nil {
- return nil, err
- }
- newStats := varlinkapi.ContainerStatsToLibpodContainerStats(stats)
- // If the container wasn't running, don't include it
- // but also suppress the error
- if err != nil && errors.Cause(err) != define.ErrCtrStateInvalid {
- return nil, err
- }
- if err == nil {
- newContainerStats[c.ID()] = &newStats
- }
- }
- return newContainerStats, nil
-}
-
-// RemovePod removes a pod
-// If removeCtrs is specified, containers will be removed
-// Otherwise, a pod that is not empty will return an error and not be removed
-// If force is specified with removeCtrs, all containers will be stopped before
-// being removed
-// Otherwise, the pod will not be removed if any containers are running
-func (r *LocalRuntime) RemovePod(ctx context.Context, p *Pod, removeCtrs, force bool) error {
- _, err := iopodman.RemovePod().Call(r.Conn, p.ID(), force)
- if err != nil {
- return err
- }
- return nil
-}
-
-// PrunePods...
-func (r *LocalRuntime) PrunePods(ctx context.Context, cli *cliconfig.PodPruneValues) ([]string, map[string]error, error) {
- var (
- ok = []string{}
- failures = map[string]error{}
- )
- states := []string{define.PodStateStopped, define.PodStateExited}
- if cli.Force {
- states = append(states, define.PodStateRunning)
- }
-
- ids, err := iopodman.GetPodsByStatus().Call(r.Conn, states)
- if err != nil {
- return ok, failures, err
- }
- if len(ids) < 1 {
- return ok, failures, nil
- }
-
- for _, id := range ids {
- _, err := iopodman.RemovePod().Call(r.Conn, id, cli.Force)
- if err != nil {
- logrus.Debugf("Failed to remove pod %s: %s", id, err.Error())
- failures[id] = err
- } else {
- ok = append(ok, id)
- }
- }
- return ok, failures, nil
-}
-
-// PlayKubeYAML creates pods and containers from a kube YAML file
-func (r *LocalRuntime) PlayKubeYAML(ctx context.Context, c *cliconfig.KubePlayValues, yamlFile string) (*Pod, error) {
- return nil, define.ErrNotImplemented
-}