mirror of https://github.com/containers/podman.git
				
				
				
			
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
| // +build remoteclient
 | |
| 
 | |
| package adapter
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"encoding/json"
 | |
| 
 | |
| 	"github.com/containers/libpod/cmd/podman/cliconfig"
 | |
| 	"github.com/containers/libpod/cmd/podman/varlink"
 | |
| 	"github.com/containers/libpod/libpod"
 | |
| 	"github.com/pkg/errors"
 | |
| 	"github.com/ulule/deepcopier"
 | |
| )
 | |
| 
 | |
| // Pod ...
 | |
| type Pod struct {
 | |
| 	remotepod
 | |
| }
 | |
| 
 | |
| type remotepod struct {
 | |
| 	config     *libpod.PodConfig
 | |
| 	state      *libpod.PodInspectState
 | |
| 	containers []libpod.PodContainerInfo
 | |
| 	Runtime    *LocalRuntime
 | |
| }
 | |
| 
 | |
| // 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)
 | |
| 	deepcopier.Copy(p.remotepod.config).To(config)
 | |
| 	inspectData := libpod.PodInspect{
 | |
| 		Config:     config,
 | |
| 		State:      p.remotepod.state,
 | |
| 		Containers: p.containers,
 | |
| 	}
 | |
| 	return &inspectData, nil
 | |
| }
 |