1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
// +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
}
|