mirror of
https://github.com/containers/podman.git
synced 2025-05-22 09:36:57 +08:00
Merge pull request #5634 from jwhonce/wip/service
V2 podman system service
This commit is contained in:
@ -1,10 +1,5 @@
|
||||
---
|
||||
run:
|
||||
build-tags:
|
||||
- apparmor
|
||||
- seccomp
|
||||
- selinux
|
||||
- ABISupport
|
||||
concurrency: 6
|
||||
deadline: 5m
|
||||
skip-dirs-use-default: true
|
||||
@ -12,6 +7,8 @@ run:
|
||||
- contrib
|
||||
- dependencies
|
||||
- test
|
||||
- pkg/varlink
|
||||
- pkg/varlinkapi
|
||||
skip-files:
|
||||
- iopodman.go
|
||||
- swagger.go
|
||||
@ -31,3 +28,7 @@ linters:
|
||||
- misspell
|
||||
- prealloc
|
||||
- unparam
|
||||
linters-settings:
|
||||
errcheck:
|
||||
check-blank: false
|
||||
ignore: encoding/json:^Unmarshal,fmt:.*
|
||||
|
2
Makefile
2
Makefile
@ -159,7 +159,7 @@ endif
|
||||
|
||||
.PHONY: golangci-lint
|
||||
golangci-lint: .gopathok varlink_generate .install.golangci-lint
|
||||
$(GOBIN)/golangci-lint run
|
||||
hack/golangci-lint.sh run
|
||||
|
||||
.PHONY: gofmt
|
||||
gofmt: ## Verify the source code gofmt
|
||||
|
@ -14,7 +14,7 @@ func getMainCommands() []*cobra.Command {
|
||||
}
|
||||
|
||||
// commands that only the remoteclient implements
|
||||
func getAppCommands() []*cobra.Command {
|
||||
func getAppCommands() []*cobra.Command { // nolint:varcheck,deadcode,unused
|
||||
return []*cobra.Command{}
|
||||
}
|
||||
|
||||
@ -29,7 +29,7 @@ func getContainerSubCommands() []*cobra.Command {
|
||||
}
|
||||
|
||||
// commands that only the remoteclient implements
|
||||
func getGenerateSubCommands() []*cobra.Command {
|
||||
func getGenerateSubCommands() []*cobra.Command { // nolint:varcheck,deadcode,unused
|
||||
return []*cobra.Command{}
|
||||
}
|
||||
|
||||
@ -126,7 +126,7 @@ func getDefaultPidsDescription() string {
|
||||
return "Tune container pids limit (set 0 for unlimited, -1 for server defaults)"
|
||||
}
|
||||
|
||||
func getDefaultShareNetwork() string {
|
||||
func getDefaultShareNetwork() string { // nolint:varcheck,deadcode,unused
|
||||
return ""
|
||||
}
|
||||
|
||||
|
@ -24,8 +24,8 @@ import (
|
||||
var (
|
||||
exitCode = define.ExecErrorCodeGeneric
|
||||
Ctx context.Context
|
||||
span opentracing.Span
|
||||
closer io.Closer
|
||||
span opentracing.Span // nolint:varcheck,deadcode,unused
|
||||
closer io.Closer // nolint:varcheck,deadcode,unused
|
||||
)
|
||||
|
||||
// Commands that the remote and local client have
|
||||
|
@ -91,7 +91,7 @@ func resolveApiURI(c *cliconfig.ServiceValues) (string, error) {
|
||||
|
||||
if len(c.InputArgs) > 0 {
|
||||
apiURI = c.InputArgs[0]
|
||||
} else if ok := systemd.SocketActivated(); ok {
|
||||
} else if ok := systemd.SocketActivated(); ok { // nolint: gocritic
|
||||
apiURI = ""
|
||||
} else if rootless.IsRootless() {
|
||||
xdg, err := util.GetRuntimeDir()
|
||||
@ -161,7 +161,7 @@ func runREST(r *libpod.Runtime, uri string, timeout time.Duration) error {
|
||||
}
|
||||
|
||||
func runVarlink(r *libpod.Runtime, uri string, timeout time.Duration, c *cliconfig.ServiceValues) error {
|
||||
var varlinkInterfaces = []*iopodman.VarlinkInterface{varlinkapi.New(&c.PodmanCommand, r)}
|
||||
var varlinkInterfaces = []*iopodman.VarlinkInterface{varlinkapi.New(c.PodmanCommand.Command, r)}
|
||||
service, err := varlink.NewService(
|
||||
"Atomic",
|
||||
"podman",
|
||||
@ -182,7 +182,7 @@ func runVarlink(r *libpod.Runtime, uri string, timeout time.Duration, c *cliconf
|
||||
if err = service.Listen(uri, timeout); err != nil {
|
||||
switch err.(type) {
|
||||
case varlink.ServiceTimeoutError:
|
||||
logrus.Infof("varlink service expired (use --timeout to increase session time beyond %d ms, 0 means never timeout)", timeout.String())
|
||||
logrus.Infof("varlink service expired (use --timeout to increase session time beyond %s ms, 0 means never timeout)", timeout.String())
|
||||
return nil
|
||||
default:
|
||||
return errors.Wrapf(err, "unable to start varlink service")
|
||||
|
@ -5,6 +5,7 @@ package main
|
||||
import "github.com/spf13/cobra"
|
||||
|
||||
var (
|
||||
// nolint:varcheck,deadcode,unused
|
||||
_serviceCommand = &cobra.Command{
|
||||
Use: "",
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ func varlinkCmd(c *cliconfig.VarlinkValues) error {
|
||||
}
|
||||
defer runtime.DeferredShutdown(false)
|
||||
|
||||
var varlinkInterfaces = []*iopodman.VarlinkInterface{varlinkapi.New(&c.PodmanCommand, runtime)}
|
||||
var varlinkInterfaces = []*iopodman.VarlinkInterface{varlinkapi.New(c.PodmanCommand.Command, runtime)}
|
||||
// Register varlink service. The metadata can be retrieved with:
|
||||
// $ varlink info [varlink address URI]
|
||||
service, err := varlink.NewService(
|
||||
|
@ -5,6 +5,7 @@ package main
|
||||
import "github.com/spf13/cobra"
|
||||
|
||||
var (
|
||||
// nolint:varcheck,deadcode,unused
|
||||
_varlinkCommand = &cobra.Command{
|
||||
Use: "",
|
||||
}
|
||||
|
@ -1,2 +1,10 @@
|
||||
all:
|
||||
CGO_ENABLED=1 GO111MODULE=off go build -tags 'ABISupport systemd seccomp'
|
||||
all: podman podman-remote
|
||||
|
||||
podman:
|
||||
CGO_ENABLED=1 GO111MODULE=off go build -tags 'ABISupport systemd varlink seccomp'
|
||||
|
||||
podman-remote:
|
||||
CGO_ENABLED=1 GO111MODULE=off go build -tags '!ABISupport systemd seccomp' -o podmanV2-remote
|
||||
|
||||
clean:
|
||||
rm podmanV2 podmanV2-remote
|
||||
|
@ -9,7 +9,11 @@ import (
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
type CobraFuncs func(cmd *cobra.Command, args []string) error
|
||||
// DefaultAPIAddress is the default address of the REST socket
|
||||
const DefaultAPIAddress = "unix:/run/podman/podman.sock"
|
||||
|
||||
// DefaultVarlinkAddress is the default address of the varlink socket
|
||||
const DefaultVarlinkAddress = "unix:/run/podman/io.podman"
|
||||
|
||||
type CliCommand struct {
|
||||
Mode []entities.EngineMode
|
||||
|
124
cmd/podmanV2/system/service.go
Normal file
124
cmd/podmanV2/system/service.go
Normal file
@ -0,0 +1,124 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/cmd/podmanV2/registry"
|
||||
"github.com/containers/libpod/pkg/domain/entities"
|
||||
"github.com/containers/libpod/pkg/rootless"
|
||||
"github.com/containers/libpod/pkg/systemd"
|
||||
"github.com/containers/libpod/pkg/util"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var (
|
||||
srvDescription = `Run an API service
|
||||
|
||||
Enable a listening service for API access to Podman commands.
|
||||
`
|
||||
|
||||
srvCmd = &cobra.Command{
|
||||
Use: "service [flags] [URI]",
|
||||
Args: cobra.MaximumNArgs(1),
|
||||
Short: "Run API service",
|
||||
Long: srvDescription,
|
||||
RunE: service,
|
||||
Example: `podman system service --time=0 unix:///tmp/podman.sock
|
||||
podman system service --varlink --time=0 unix:///tmp/podman.sock`,
|
||||
}
|
||||
|
||||
srvArgs = struct {
|
||||
Timeout int64
|
||||
Varlink bool
|
||||
}{}
|
||||
)
|
||||
|
||||
func init() {
|
||||
registry.Commands = append(registry.Commands, registry.CliCommand{
|
||||
Mode: []entities.EngineMode{entities.ABIMode},
|
||||
Command: srvCmd,
|
||||
Parent: systemCmd,
|
||||
})
|
||||
|
||||
flags := srvCmd.Flags()
|
||||
flags.Int64VarP(&srvArgs.Timeout, "time", "t", 5, "Time until the service session expires in seconds. Use 0 to disable the timeout")
|
||||
flags.Int64Var(&srvArgs.Timeout, "timeout", 5, "Time until the service session expires in seconds. Use 0 to disable the timeout")
|
||||
flags.BoolVar(&srvArgs.Varlink, "varlink", false, "Use legacy varlink service instead of REST")
|
||||
|
||||
_ = flags.MarkDeprecated("varlink", "valink API is deprecated.")
|
||||
}
|
||||
|
||||
func service(cmd *cobra.Command, args []string) error {
|
||||
apiURI, err := resolveApiURI(args)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
logrus.Infof("using API endpoint: \"%s\"", apiURI)
|
||||
|
||||
opts := entities.ServiceOptions{
|
||||
URI: apiURI,
|
||||
Timeout: time.Duration(srvArgs.Timeout) * time.Second,
|
||||
Command: cmd,
|
||||
}
|
||||
|
||||
if srvArgs.Varlink {
|
||||
return registry.ContainerEngine().VarlinkService(registry.GetContext(), opts)
|
||||
}
|
||||
|
||||
logrus.Warn("This function is EXPERIMENTAL")
|
||||
fmt.Fprintf(os.Stderr, "This function is EXPERIMENTAL.\n")
|
||||
return registry.ContainerEngine().RestService(registry.GetContext(), opts)
|
||||
}
|
||||
|
||||
func resolveApiURI(_url []string) (string, error) {
|
||||
|
||||
// When determining _*THE*_ listening endpoint --
|
||||
// 1) User input wins always
|
||||
// 2) systemd socket activation
|
||||
// 3) rootless honors XDG_RUNTIME_DIR
|
||||
// 4) if varlink -- adapter.DefaultVarlinkAddress
|
||||
// 5) lastly adapter.DefaultAPIAddress
|
||||
|
||||
if _url == nil {
|
||||
if v, found := os.LookupEnv("PODMAN_SOCKET"); found {
|
||||
_url = []string{v}
|
||||
}
|
||||
}
|
||||
|
||||
switch {
|
||||
case len(_url) > 0:
|
||||
return _url[0], nil
|
||||
case systemd.SocketActivated():
|
||||
logrus.Info("using systemd socket activation to determine API endpoint")
|
||||
return "", nil
|
||||
case rootless.IsRootless():
|
||||
xdg, err := util.GetRuntimeDir()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
socketName := "podman.sock"
|
||||
if srvArgs.Varlink {
|
||||
socketName = "io.podman"
|
||||
}
|
||||
socketDir := filepath.Join(xdg, "podman", socketName)
|
||||
if _, err := os.Stat(filepath.Dir(socketDir)); err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
if err := os.Mkdir(filepath.Dir(socketDir), 0755); err != nil {
|
||||
return "", err
|
||||
}
|
||||
} else {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
return "unix:" + socketDir, nil
|
||||
case srvArgs.Varlink:
|
||||
return registry.DefaultVarlinkAddress, nil
|
||||
default:
|
||||
return registry.DefaultAPIAddress, nil
|
||||
}
|
||||
}
|
@ -8,7 +8,7 @@ import (
|
||||
|
||||
var (
|
||||
// Command: podman _system_
|
||||
cmd = &cobra.Command{
|
||||
systemCmd = &cobra.Command{
|
||||
Use: "system",
|
||||
Short: "Manage podman",
|
||||
Long: "Manage podman",
|
||||
@ -21,10 +21,10 @@ var (
|
||||
func init() {
|
||||
registry.Commands = append(registry.Commands, registry.CliCommand{
|
||||
Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
|
||||
Command: cmd,
|
||||
Command: systemCmd,
|
||||
})
|
||||
cmd.SetHelpTemplate(registry.HelpTemplate())
|
||||
cmd.SetUsageTemplate(registry.UsageTemplate())
|
||||
systemCmd.SetHelpTemplate(registry.HelpTemplate())
|
||||
systemCmd.SetUsageTemplate(registry.UsageTemplate())
|
||||
}
|
||||
|
||||
func preRunE(cmd *cobra.Command, args []string) error {
|
||||
|
56
cmd/podmanV2/system/varlink.go
Normal file
56
cmd/podmanV2/system/varlink.go
Normal file
@ -0,0 +1,56 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/cmd/podmanV2/registry"
|
||||
"github.com/containers/libpod/pkg/domain/entities"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var (
|
||||
varlinkDescription = `Run varlink interface. Podman varlink listens on the specified unix domain socket for incoming connects.
|
||||
|
||||
Tools speaking varlink protocol can remotely manage pods, containers and images.
|
||||
`
|
||||
varlinkCmd = &cobra.Command{
|
||||
Use: "varlink [flags] [URI]",
|
||||
Args: cobra.MinimumNArgs(1),
|
||||
Short: "Run varlink interface",
|
||||
Long: varlinkDescription,
|
||||
PreRunE: preRunE,
|
||||
RunE: varlinkE,
|
||||
Example: `podman varlink unix:/run/podman/io.podman
|
||||
podman varlink --timeout 5000 unix:/run/podman/io.podman`,
|
||||
}
|
||||
varlinkArgs = struct {
|
||||
Timeout int64
|
||||
}{}
|
||||
)
|
||||
|
||||
func init() {
|
||||
registry.Commands = append(registry.Commands, registry.CliCommand{
|
||||
Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
|
||||
Command: varlinkCmd,
|
||||
})
|
||||
varlinkCmd.SetHelpTemplate(registry.HelpTemplate())
|
||||
varlinkCmd.SetUsageTemplate(registry.UsageTemplate())
|
||||
|
||||
flags := varlinkCmd.Flags()
|
||||
flags.Int64VarP(&varlinkArgs.Timeout, "time", "t", 1000, "Time until the varlink session expires in milliseconds. Use 0 to disable the timeout")
|
||||
flags.Int64Var(&varlinkArgs.Timeout, "timeout", 1000, "Time until the varlink session expires in milliseconds. Use 0 to disable the timeout")
|
||||
|
||||
}
|
||||
|
||||
func varlinkE(cmd *cobra.Command, args []string) error {
|
||||
uri := registry.DefaultVarlinkAddress
|
||||
if len(args) > 0 {
|
||||
uri = args[0]
|
||||
}
|
||||
opts := entities.ServiceOptions{
|
||||
URI: uri,
|
||||
Timeout: time.Duration(varlinkArgs.Timeout) * time.Second,
|
||||
Command: cmd,
|
||||
}
|
||||
return registry.ContainerEngine().VarlinkService(registry.GetContext(), opts)
|
||||
}
|
9
go.sum
9
go.sum
@ -217,6 +217,7 @@ github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHh
|
||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
|
||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
@ -258,6 +259,7 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY=
|
||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||
@ -270,7 +272,9 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0j
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/mistifyio/go-zfs v2.1.1+incompatible h1:gAMO1HM9xBRONLHHYnu5iFsOJUiJdNZo6oqSENd4eW8=
|
||||
github.com/mistifyio/go-zfs v2.1.1+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4=
|
||||
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
|
||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/moby/sys/mountinfo v0.1.0/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o=
|
||||
github.com/moby/vpnkit v0.3.1-0.20200304131818-6bc1679a048d/go.mod h1:KyjUrL9cb6ZSNNAUwZfqRjhwwgJ3BJN+kXh0t43WTUQ=
|
||||
@ -339,6 +343,7 @@ github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsq
|
||||
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||
github.com/ostreedev/ostree-go v0.0.0-20190702140239-759a8c1ac913 h1:TnbXhKzrTOyuvWrjI8W6pcoI9XPbLHFXCdN2dtUw7Rw=
|
||||
github.com/ostreedev/ostree-go v0.0.0-20190702140239-759a8c1ac913/go.mod h1:J6OG6YJVEWopen4avK3VNQSnALmmjvniMmni/YFYAwc=
|
||||
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
|
||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||
github.com/pkg/errors v0.0.0-20190227000051-27936f6d90f9/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
@ -393,16 +398,20 @@ github.com/sirupsen/logrus v1.5.0 h1:1N5EYkVAPEywqZRJd7cwnRtCb6xJx7NH3T3WUTF980Q
|
||||
github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s+Squfpo=
|
||||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
||||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||
github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
|
||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
||||
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
|
||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||
github.com/spf13/cobra v0.0.7 h1:FfTH+vuMXOas8jmfb5/M7dzEYx7LpcLb7a0LPe34uOU=
|
||||
github.com/spf13/cobra v0.0.7/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
||||
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
|
||||
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
|
||||
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU=
|
||||
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
|
15
hack/golangci-lint.sh
Executable file
15
hack/golangci-lint.sh
Executable file
@ -0,0 +1,15 @@
|
||||
#!/bin/bash -e
|
||||
|
||||
# Need to run linter twice to cover all the build tags code paths
|
||||
|
||||
declare -A BUILD_TAGS
|
||||
BUILD_TAGS[default]="apparmor,seccomp,selinux"
|
||||
BUILD_TAGS[abi]="${BUILD_TAGS[default]},ABISupport,varlink,!remoteclient"
|
||||
BUILD_TAGS[tunnel]="${BUILD_TAGS[default]},!ABISupport,!varlink,remoteclient"
|
||||
|
||||
[[ $1 == run ]] && shift
|
||||
|
||||
for i in tunnel abi; do
|
||||
echo Build Tags: ${BUILD_TAGS[$i]}
|
||||
golangci-lint run --build-tags=${BUILD_TAGS[$i]} "$@"
|
||||
done
|
@ -12,7 +12,7 @@ import (
|
||||
"github.com/varlink/go/varlink"
|
||||
)
|
||||
|
||||
var remoteEndpoint *Endpoint
|
||||
var remoteEndpoint *Endpoint // nolint: deadcode,unused
|
||||
|
||||
func (r RemoteRuntime) RemoteEndpoint() (remoteEndpoint *Endpoint, err error) {
|
||||
remoteConfigConnections, err := remoteclientconfig.ReadRemoteConfig(r.config)
|
||||
@ -26,8 +26,8 @@ func (r RemoteRuntime) RemoteEndpoint() (remoteEndpoint *Endpoint, err error) {
|
||||
remoteEndpoint, err = newBridgeConnection(bridge, nil, r.cmd.LogLevel)
|
||||
// if an environment variable for podman_varlink_address is defined,
|
||||
// we used that as passed
|
||||
} else if address := os.Getenv("PODMAN_VARLINK_ADDRESS"); address != "" {
|
||||
logrus.Debug("creating a varlink address based on env variable: %s", address)
|
||||
} else if address := os.Getenv("PODMAN_VARLINK_ADDRESS"); address != "" { // nolint:gocritic
|
||||
logrus.Debugf("creating a varlink address based on env variable: %s", address)
|
||||
remoteEndpoint, err = newSocketConnection(address)
|
||||
// if the user provides a remote host, we use it to configure a bridge connection
|
||||
} else if len(r.cmd.RemoteHost) > 0 {
|
||||
@ -35,7 +35,7 @@ func (r RemoteRuntime) RemoteEndpoint() (remoteEndpoint *Endpoint, err error) {
|
||||
if len(r.cmd.RemoteUserName) < 1 {
|
||||
return nil, errors.New("you must provide a username when providing a remote host name")
|
||||
}
|
||||
rc := remoteclientconfig.RemoteConnection{r.cmd.RemoteHost, r.cmd.RemoteUserName, false, r.cmd.Port, r.cmd.IdentityFile, r.cmd.IgnoreHosts}
|
||||
rc := remoteclientconfig.RemoteConnection{r.cmd.RemoteHost, r.cmd.RemoteUserName, false, r.cmd.Port, r.cmd.IdentityFile, r.cmd.IgnoreHosts} // nolint: govet
|
||||
remoteEndpoint, err = newBridgeConnection("", &rc, r.cmd.LogLevel)
|
||||
// if the user has a config file with connections in it
|
||||
} else if len(remoteConfigConnections.Connections) > 0 {
|
||||
@ -59,7 +59,7 @@ func (r RemoteRuntime) RemoteEndpoint() (remoteEndpoint *Endpoint, err error) {
|
||||
logrus.Debug("creating a varlink address based default root address")
|
||||
remoteEndpoint, err = newSocketConnection(DefaultVarlinkAddress)
|
||||
}
|
||||
return
|
||||
return // nolint: nakedret
|
||||
}
|
||||
|
||||
// Connect provides a varlink connection
|
||||
|
@ -341,7 +341,7 @@ func (r *LocalRuntime) RemoveContainers(ctx context.Context, cli *cliconfig.RmVa
|
||||
failures[ctr] = errors.Wrapf(err, "Failed to evict container: %q", id)
|
||||
continue
|
||||
}
|
||||
ok = append(ok, string(id))
|
||||
ok = append(ok, id)
|
||||
}
|
||||
return ok, failures, nil
|
||||
}
|
||||
@ -432,7 +432,7 @@ func BatchContainerOp(ctr *Container, opts shared.PsOptions) (shared.BatchContai
|
||||
// Log one or more containers over a varlink connection
|
||||
func (r *LocalRuntime) Log(c *cliconfig.LogsValues, options *logs.LogOptions) error {
|
||||
// GetContainersLogs
|
||||
reply, err := iopodman.GetContainersLogs().Send(r.Conn, uint64(varlink.More), c.InputArgs, c.Follow, c.Latest, options.Since.Format(time.RFC3339Nano), int64(c.Tail), c.Timestamps)
|
||||
reply, err := iopodman.GetContainersLogs().Send(r.Conn, uint64(varlink.More), c.InputArgs, c.Follow, c.Latest, options.Since.Format(time.RFC3339Nano), c.Tail, c.Timestamps)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "failed to get container logs")
|
||||
}
|
||||
@ -753,15 +753,15 @@ func (r *LocalRuntime) attach(ctx context.Context, stdin, stdout *os.File, cid s
|
||||
return nil, nil, err
|
||||
}
|
||||
defer cancel()
|
||||
defer restoreTerminal(oldTermState)
|
||||
defer restoreTerminal(oldTermState) // nolint: errcheck
|
||||
|
||||
logrus.SetFormatter(&RawTtyFormatter{})
|
||||
term.SetRawTerminal(os.Stdin.Fd())
|
||||
term.SetRawTerminal(os.Stdin.Fd()) // nolint: errcheck
|
||||
}
|
||||
|
||||
reply, err := iopodman.Attach().Send(r.Conn, varlink.Upgrade, cid, detachKeys, start)
|
||||
if err != nil {
|
||||
restoreTerminal(oldTermState)
|
||||
restoreTerminal(oldTermState) // nolint: errcheck
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
@ -769,7 +769,7 @@ func (r *LocalRuntime) attach(ctx context.Context, stdin, stdout *os.File, cid s
|
||||
_, err = reply()
|
||||
|
||||
if err != nil {
|
||||
restoreTerminal(oldTermState)
|
||||
restoreTerminal(oldTermState) // nolint: errcheck
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
@ -857,7 +857,7 @@ func (r *LocalRuntime) Restart(ctx context.Context, c *cliconfig.RestartValues)
|
||||
useTimeout := c.Flag("timeout").Changed || c.Flag("time").Changed
|
||||
inputTimeout := c.Timeout
|
||||
|
||||
if c.Latest {
|
||||
if c.Latest { // nolint: gocritic
|
||||
lastCtr, err := r.GetLatestContainer()
|
||||
if err != nil {
|
||||
return nil, nil, errors.Wrapf(err, "unable to get latest container")
|
||||
@ -1042,10 +1042,10 @@ func (r *LocalRuntime) ExecContainer(ctx context.Context, cli *cliconfig.ExecVal
|
||||
return ec, err
|
||||
}
|
||||
defer cancel()
|
||||
defer restoreTerminal(oldTermState)
|
||||
defer restoreTerminal(oldTermState) // nolint: errcheck
|
||||
|
||||
logrus.SetFormatter(&RawTtyFormatter{})
|
||||
term.SetRawTerminal(os.Stdin.Fd())
|
||||
term.SetRawTerminal(os.Stdin.Fd()) // nolint: errcheck
|
||||
}
|
||||
|
||||
opts := iopodman.ExecOpts{
|
||||
@ -1082,7 +1082,7 @@ func (r *LocalRuntime) ExecContainer(ctx context.Context, cli *cliconfig.ExecVal
|
||||
return ec, err
|
||||
}
|
||||
|
||||
func configureVarlinkAttachStdio(reader *bufio.Reader, writer *bufio.Writer, stdin *os.File, stdout *os.File, oldTermState *term.State, resize chan remotecommand.TerminalSize, ecChan chan int) chan error {
|
||||
func configureVarlinkAttachStdio(reader *bufio.Reader, writer *bufio.Writer, stdin *os.File, stdout *os.File, oldTermState *term.State, resize chan remotecommand.TerminalSize, ecChan chan int) chan error { // nolint: interfacer
|
||||
errChan := make(chan error, 1)
|
||||
// These are the special writers that encode input from the client.
|
||||
varlinkStdinWriter := virtwriter.NewVirtWriteCloser(writer, virtwriter.ToStdin)
|
||||
@ -1092,7 +1092,7 @@ func configureVarlinkAttachStdio(reader *bufio.Reader, writer *bufio.Writer, std
|
||||
go func() {
|
||||
// Read from the wire and direct to stdout or stderr
|
||||
err := virtwriter.Reader(reader, stdout, os.Stderr, nil, nil, ecChan)
|
||||
defer restoreTerminal(oldTermState)
|
||||
defer restoreTerminal(oldTermState) // nolint: errcheck
|
||||
sendGenericError(ecChan)
|
||||
errChan <- err
|
||||
}()
|
||||
@ -1101,13 +1101,13 @@ func configureVarlinkAttachStdio(reader *bufio.Reader, writer *bufio.Writer, std
|
||||
for termResize := range resize {
|
||||
b, err := json.Marshal(termResize)
|
||||
if err != nil {
|
||||
defer restoreTerminal(oldTermState)
|
||||
defer restoreTerminal(oldTermState) // nolint: errcheck,staticcheck
|
||||
sendGenericError(ecChan)
|
||||
errChan <- err
|
||||
}
|
||||
_, err = varlinkResizeWriter.Write(b)
|
||||
if err != nil {
|
||||
defer restoreTerminal(oldTermState)
|
||||
defer restoreTerminal(oldTermState) // nolint: errcheck,staticcheck
|
||||
sendGenericError(ecChan)
|
||||
errChan <- err
|
||||
}
|
||||
@ -1117,7 +1117,7 @@ func configureVarlinkAttachStdio(reader *bufio.Reader, writer *bufio.Writer, std
|
||||
// Takes stdinput and sends it over the wire after being encoded
|
||||
go func() {
|
||||
if _, err := io.Copy(varlinkStdinWriter, stdin); err != nil {
|
||||
defer restoreTerminal(oldTermState)
|
||||
defer restoreTerminal(oldTermState) // nolint: errcheck
|
||||
sendGenericError(ecChan)
|
||||
errChan <- err
|
||||
}
|
||||
|
@ -515,10 +515,10 @@ func (p *Pod) GetPodStats(previousContainerStats map[string]*libpod.ContainerSta
|
||||
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 {
|
||||
if err != nil && errors.Cause(err) != define.ErrCtrStateInvalid { // nolint: govet
|
||||
return nil, err
|
||||
}
|
||||
if err == nil {
|
||||
if err == nil { // nolint: govet
|
||||
newContainerStats[c.ID()] = &newStats
|
||||
}
|
||||
}
|
||||
|
@ -180,7 +180,7 @@ type Pod struct {
|
||||
type remotepod struct {
|
||||
config *libpod.PodConfig
|
||||
state *libpod.PodInspectState
|
||||
containers []libpod.PodContainerInfo
|
||||
containers []libpod.PodContainerInfo // nolint: structcheck
|
||||
Runtime *LocalRuntime
|
||||
}
|
||||
|
||||
@ -627,7 +627,7 @@ func (r *LocalRuntime) SendFileOverVarlink(source string) (string, error) {
|
||||
return "", err
|
||||
}
|
||||
logrus.Debugf("sending %s over varlink connection", source)
|
||||
reply, err := iopodman.SendFile().Send(r.Conn, varlink.Upgrade, "", int64(fileInfo.Size()))
|
||||
reply, err := iopodman.SendFile().Send(r.Conn, varlink.Upgrade, "", fileInfo.Size())
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@ -754,9 +754,7 @@ func (r *LocalRuntime) InspectVolumes(ctx context.Context, c *cliconfig.VolumeIn
|
||||
volumes = append(volumes, vol.Name())
|
||||
}
|
||||
} else {
|
||||
for _, arg := range c.InputArgs {
|
||||
volumes = append(volumes, arg)
|
||||
}
|
||||
volumes = append(volumes, c.InputArgs...)
|
||||
}
|
||||
|
||||
for _, vol := range volumes {
|
||||
@ -855,7 +853,7 @@ func (r *LocalRuntime) SaveImage(ctx context.Context, c *cliconfig.SaveValues) e
|
||||
}
|
||||
|
||||
}
|
||||
if err != nil {
|
||||
if err != nil { // nolint: govet
|
||||
return err
|
||||
}
|
||||
|
||||
@ -927,7 +925,7 @@ func IsImageNotFound(err error) bool {
|
||||
if errors.Cause(err) == image.ErrNoSuchImage {
|
||||
return true
|
||||
}
|
||||
switch err.(type) {
|
||||
switch err.(type) { // nolint: gocritic
|
||||
case *iopodman.ImageNotFound:
|
||||
return true
|
||||
}
|
||||
@ -991,7 +989,7 @@ func (r *LocalRuntime) Events(c *cliconfig.EventValues) error {
|
||||
Time: eTime,
|
||||
Type: eType,
|
||||
}
|
||||
if c.Format == formats.JSONString {
|
||||
if c.Format == formats.JSONString { // nolint: gocritic
|
||||
jsonStr, err := event.ToJSONString()
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "unable to format json")
|
||||
@ -1008,6 +1006,7 @@ func (r *LocalRuntime) Events(c *cliconfig.EventValues) error {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if _, err := w.Write([]byte("\n")); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -1040,7 +1039,7 @@ func stringToChangeType(change string) archive.ChangeType {
|
||||
return archive.ChangeAdd
|
||||
case "D":
|
||||
return archive.ChangeDelete
|
||||
default:
|
||||
default: // nolint: gocritic,stylecheck
|
||||
logrus.Errorf("'%s' is unknown archive type", change)
|
||||
fallthrough
|
||||
case "C":
|
||||
|
@ -56,7 +56,7 @@ func newServer(runtime *libpod.Runtime, duration time.Duration, listener *net.Li
|
||||
// If listener not provided try socket activation protocol
|
||||
if listener == nil {
|
||||
if _, found := os.LookupEnv("LISTEN_FDS"); !found {
|
||||
return nil, errors.Errorf("Cannot create Server, no listener provided and socket activation protocol is not active.")
|
||||
return nil, errors.Errorf("Cannot create API Server, no listener provided and socket activation protocol is not active.")
|
||||
}
|
||||
|
||||
listeners, err := activation.Listeners()
|
||||
|
@ -24,13 +24,14 @@ type ContainerEngine interface {
|
||||
ContainerRestart(ctx context.Context, namesOrIds []string, options RestartOptions) ([]*RestartReport, error)
|
||||
ContainerRestore(ctx context.Context, namesOrIds []string, options RestoreOptions) ([]*RestoreReport, error)
|
||||
ContainerRm(ctx context.Context, namesOrIds []string, options RmOptions) ([]*RmReport, error)
|
||||
ContainerStart(ctx context.Context, namesOrIds []string, options ContainerStartOptions) ([]*ContainerStartReport, error)
|
||||
ContainerRun(ctx context.Context, opts ContainerRunOptions) (*ContainerRunReport, error)
|
||||
ContainerStart(ctx context.Context, namesOrIds []string, options ContainerStartOptions) ([]*ContainerStartReport, error)
|
||||
ContainerStop(ctx context.Context, namesOrIds []string, options StopOptions) ([]*StopReport, error)
|
||||
ContainerTop(ctx context.Context, options TopOptions) (*StringSliceReport, error)
|
||||
ContainerUnpause(ctx context.Context, namesOrIds []string, options PauseUnPauseOptions) ([]*PauseUnpauseReport, error)
|
||||
ContainerWait(ctx context.Context, namesOrIds []string, options WaitOptions) ([]WaitReport, error)
|
||||
HealthCheckRun(ctx context.Context, nameOrId string, options HealthCheckOptions) (*define.HealthCheckResults, error)
|
||||
Info(ctx context.Context) (*define.Info, error)
|
||||
PodCreate(ctx context.Context, opts PodCreateOptions) (*PodCreateReport, error)
|
||||
PodExists(ctx context.Context, nameOrId string) (*BoolReport, error)
|
||||
PodInspect(ctx context.Context, options PodInspectOptions) (*PodInspectReport, error)
|
||||
@ -43,11 +44,11 @@ type ContainerEngine interface {
|
||||
PodStop(ctx context.Context, namesOrIds []string, options PodStopOptions) ([]*PodStopReport, error)
|
||||
PodTop(ctx context.Context, options PodTopOptions) (*StringSliceReport, error)
|
||||
PodUnpause(ctx context.Context, namesOrIds []string, options PodunpauseOptions) ([]*PodUnpauseReport, error)
|
||||
RestService(ctx context.Context, opts ServiceOptions) error
|
||||
VarlinkService(ctx context.Context, opts ServiceOptions) error
|
||||
VolumeCreate(ctx context.Context, opts VolumeCreateOptions) (*IdOrNameResponse, error)
|
||||
VolumeInspect(ctx context.Context, namesOrIds []string, opts VolumeInspectOptions) ([]*VolumeInspectReport, error)
|
||||
VolumeList(ctx context.Context, opts VolumeListOptions) ([]*VolumeListReport, error)
|
||||
VolumePrune(ctx context.Context, opts VolumePruneOptions) ([]*VolumePruneReport, error)
|
||||
VolumeRm(ctx context.Context, namesOrIds []string, opts VolumeRmOptions) ([]*VolumeRmReport, error)
|
||||
|
||||
Info(ctx context.Context) (*define.Info, error)
|
||||
}
|
||||
|
14
pkg/domain/entities/system.go
Normal file
14
pkg/domain/entities/system.go
Normal file
@ -0,0 +1,14 @@
|
||||
package entities
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
// ServiceOptions provides the input for starting an API Service
|
||||
type ServiceOptions struct {
|
||||
URI string // Path to unix domain socket service should listen on
|
||||
Timeout time.Duration // duration of inactivity the service should wait before shutting down
|
||||
Command *cobra.Command // CLI command provided. Used in V1 code
|
||||
}
|
@ -4,10 +4,88 @@ package abi
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
api "github.com/containers/libpod/pkg/api/server"
|
||||
"github.com/containers/libpod/pkg/domain/entities"
|
||||
iopodman "github.com/containers/libpod/pkg/varlink"
|
||||
iopodmanAPI "github.com/containers/libpod/pkg/varlinkapi"
|
||||
"github.com/containers/libpod/version"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/varlink/go/varlink"
|
||||
)
|
||||
|
||||
func (ic *ContainerEngine) Info(ctx context.Context) (*define.Info, error) {
|
||||
return ic.Libpod.Info()
|
||||
}
|
||||
|
||||
func (ic *ContainerEngine) RestService(_ context.Context, opts entities.ServiceOptions) error {
|
||||
var (
|
||||
listener net.Listener
|
||||
err error
|
||||
)
|
||||
|
||||
if opts.URI != "" {
|
||||
fields := strings.Split(opts.URI, ":")
|
||||
if len(fields) == 1 {
|
||||
return errors.Errorf("%s is an invalid socket destination", opts.URI)
|
||||
}
|
||||
address := strings.Join(fields[1:], ":")
|
||||
listener, err = net.Listen(fields[0], address)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "unable to create socket %s", opts.URI)
|
||||
}
|
||||
}
|
||||
|
||||
server, err := api.NewServerWithSettings(ic.Libpod, opts.Timeout, &listener)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err := server.Shutdown(); err != nil {
|
||||
logrus.Warnf("Error when stopping API service: %s", err)
|
||||
}
|
||||
}()
|
||||
|
||||
err = server.Serve()
|
||||
logrus.Debugf("%d/%d Active connections/Total connections\n", server.ActiveConnections, server.TotalConnections)
|
||||
_ = listener.Close()
|
||||
return err
|
||||
}
|
||||
|
||||
func (ic *ContainerEngine) VarlinkService(_ context.Context, opts entities.ServiceOptions) error {
|
||||
var varlinkInterfaces = []*iopodman.VarlinkInterface{
|
||||
iopodmanAPI.New(opts.Command, ic.Libpod),
|
||||
}
|
||||
|
||||
service, err := varlink.NewService(
|
||||
"Atomic",
|
||||
"podman",
|
||||
version.Version,
|
||||
"https://github.com/containers/libpod",
|
||||
)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "unable to create new varlink service")
|
||||
}
|
||||
|
||||
for _, i := range varlinkInterfaces {
|
||||
if err := service.RegisterInterface(i); err != nil {
|
||||
return errors.Errorf("unable to register varlink interface %v", i)
|
||||
}
|
||||
}
|
||||
|
||||
// Run the varlink server at the given address
|
||||
if err = service.Listen(opts.URI, opts.Timeout); err != nil {
|
||||
switch err.(type) {
|
||||
case varlink.ServiceTimeoutError:
|
||||
logrus.Infof("varlink service expired (use --timeout to increase session time beyond %s ms, 0 means never timeout)", opts.Timeout.String())
|
||||
return nil
|
||||
default:
|
||||
return errors.Wrapf(err, "unable to start varlink service")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -2,11 +2,21 @@ package tunnel
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"github.com/containers/libpod/libpod/define"
|
||||
"github.com/containers/libpod/pkg/bindings/system"
|
||||
"github.com/containers/libpod/pkg/domain/entities"
|
||||
)
|
||||
|
||||
func (ic *ContainerEngine) Info(ctx context.Context) (*define.Info, error) {
|
||||
return system.Info(ic.ClientCxt)
|
||||
}
|
||||
|
||||
func (ic *ContainerEngine) RestService(_ context.Context, _ entities.ServiceOptions) error {
|
||||
panic(errors.New("rest service is not supported when tunneling"))
|
||||
}
|
||||
|
||||
func (ic *ContainerEngine) VarlinkService(_ context.Context, _ entities.ServiceOptions) error {
|
||||
panic(errors.New("varlink service is not supported when tunneling"))
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ func setupStreams(call iopodman.VarlinkCall) (*bufio.Reader, *bufio.Writer, *io.
|
||||
}
|
||||
|
||||
// Attach connects to a containers console
|
||||
func (i *LibpodAPI) Attach(call iopodman.VarlinkCall, name string, detachKeys string, start bool) error {
|
||||
func (i *VarlinkAPI) Attach(call iopodman.VarlinkCall, name string, detachKeys string, start bool) error {
|
||||
var finalErr error
|
||||
resize := make(chan remotecommand.TerminalSize)
|
||||
errChan := make(chan error)
|
||||
|
@ -3,21 +3,20 @@
|
||||
package varlinkapi
|
||||
|
||||
import (
|
||||
"github.com/containers/libpod/cmd/podman/cliconfig"
|
||||
"github.com/containers/libpod/libpod"
|
||||
iopodman "github.com/containers/libpod/pkg/varlink"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
// LibpodAPI is the basic varlink struct for libpod
|
||||
type LibpodAPI struct {
|
||||
// VarlinkAPI is the basic varlink struct for libpod
|
||||
type VarlinkAPI struct {
|
||||
Cli *cobra.Command
|
||||
iopodman.VarlinkInterface
|
||||
Runtime *libpod.Runtime
|
||||
}
|
||||
|
||||
// New creates a new varlink client
|
||||
func New(cli *cliconfig.PodmanCommand, runtime *libpod.Runtime) *iopodman.VarlinkInterface {
|
||||
lp := LibpodAPI{Cli: cli.Command, Runtime: runtime}
|
||||
func New(cli *cobra.Command, runtime *libpod.Runtime) *iopodman.VarlinkInterface {
|
||||
lp := VarlinkAPI{Cli: cli, Runtime: runtime}
|
||||
return iopodman.VarlinkNew(&lp)
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ import (
|
||||
)
|
||||
|
||||
// ListContainers ...
|
||||
func (i *LibpodAPI) ListContainers(call iopodman.VarlinkCall) error {
|
||||
func (i *VarlinkAPI) ListContainers(call iopodman.VarlinkCall) error {
|
||||
var (
|
||||
listContainers []iopodman.Container
|
||||
)
|
||||
@ -54,7 +54,7 @@ func (i *LibpodAPI) ListContainers(call iopodman.VarlinkCall) error {
|
||||
return call.ReplyListContainers(listContainers)
|
||||
}
|
||||
|
||||
func (i *LibpodAPI) Ps(call iopodman.VarlinkCall, opts iopodman.PsOpts) error {
|
||||
func (i *VarlinkAPI) Ps(call iopodman.VarlinkCall, opts iopodman.PsOpts) error {
|
||||
var (
|
||||
containers []iopodman.PsContainer
|
||||
)
|
||||
@ -106,7 +106,7 @@ func (i *LibpodAPI) Ps(call iopodman.VarlinkCall, opts iopodman.PsOpts) error {
|
||||
}
|
||||
|
||||
// GetContainer ...
|
||||
func (i *LibpodAPI) GetContainer(call iopodman.VarlinkCall, id string) error {
|
||||
func (i *VarlinkAPI) GetContainer(call iopodman.VarlinkCall, id string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(id)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(id, err.Error())
|
||||
@ -123,7 +123,7 @@ func (i *LibpodAPI) GetContainer(call iopodman.VarlinkCall, id string) error {
|
||||
}
|
||||
|
||||
// GetContainersByContext returns a slice of container ids based on all, latest, or a list
|
||||
func (i *LibpodAPI) GetContainersByContext(call iopodman.VarlinkCall, all, latest bool, input []string) error {
|
||||
func (i *VarlinkAPI) GetContainersByContext(call iopodman.VarlinkCall, all, latest bool, input []string) error {
|
||||
var ids []string
|
||||
|
||||
ctrs, err := shortcuts.GetContainersByContext(all, latest, input, i.Runtime)
|
||||
@ -141,7 +141,7 @@ func (i *LibpodAPI) GetContainersByContext(call iopodman.VarlinkCall, all, lates
|
||||
}
|
||||
|
||||
// GetContainersByStatus returns a slice of containers filtered by a libpod status
|
||||
func (i *LibpodAPI) GetContainersByStatus(call iopodman.VarlinkCall, statuses []string) error {
|
||||
func (i *VarlinkAPI) GetContainersByStatus(call iopodman.VarlinkCall, statuses []string) error {
|
||||
var (
|
||||
filterFuncs []libpod.ContainerFilter
|
||||
containers []iopodman.Container
|
||||
@ -172,7 +172,7 @@ func (i *LibpodAPI) GetContainersByStatus(call iopodman.VarlinkCall, statuses []
|
||||
}
|
||||
|
||||
// InspectContainer ...
|
||||
func (i *LibpodAPI) InspectContainer(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) InspectContainer(call iopodman.VarlinkCall, name string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -189,7 +189,7 @@ func (i *LibpodAPI) InspectContainer(call iopodman.VarlinkCall, name string) err
|
||||
}
|
||||
|
||||
// ListContainerProcesses ...
|
||||
func (i *LibpodAPI) ListContainerProcesses(call iopodman.VarlinkCall, name string, opts []string) error {
|
||||
func (i *VarlinkAPI) ListContainerProcesses(call iopodman.VarlinkCall, name string, opts []string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -216,7 +216,7 @@ func (i *LibpodAPI) ListContainerProcesses(call iopodman.VarlinkCall, name strin
|
||||
}
|
||||
|
||||
// GetContainerLogs ...
|
||||
func (i *LibpodAPI) GetContainerLogs(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) GetContainerLogs(call iopodman.VarlinkCall, name string) error {
|
||||
var logs []string
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
@ -277,7 +277,7 @@ func (i *LibpodAPI) GetContainerLogs(call iopodman.VarlinkCall, name string) err
|
||||
}
|
||||
|
||||
// ListContainerChanges ...
|
||||
func (i *LibpodAPI) ListContainerChanges(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) ListContainerChanges(call iopodman.VarlinkCall, name string) error {
|
||||
changes, err := i.Runtime.GetDiff("", name)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
@ -297,7 +297,7 @@ func (i *LibpodAPI) ListContainerChanges(call iopodman.VarlinkCall, name string)
|
||||
}
|
||||
|
||||
// ExportContainer ...
|
||||
func (i *LibpodAPI) ExportContainer(call iopodman.VarlinkCall, name, outPath string) error {
|
||||
func (i *VarlinkAPI) ExportContainer(call iopodman.VarlinkCall, name, outPath string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -319,7 +319,7 @@ func (i *LibpodAPI) ExportContainer(call iopodman.VarlinkCall, name, outPath str
|
||||
}
|
||||
|
||||
// GetContainerStats ...
|
||||
func (i *LibpodAPI) GetContainerStats(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) GetContainerStats(call iopodman.VarlinkCall, name string) error {
|
||||
if rootless.IsRootless() {
|
||||
cgroupv2, err := cgroups.IsCgroup2UnifiedMode()
|
||||
if err != nil {
|
||||
@ -359,7 +359,7 @@ func (i *LibpodAPI) GetContainerStats(call iopodman.VarlinkCall, name string) er
|
||||
}
|
||||
|
||||
// StartContainer ...
|
||||
func (i *LibpodAPI) StartContainer(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) StartContainer(call iopodman.VarlinkCall, name string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -382,7 +382,7 @@ func (i *LibpodAPI) StartContainer(call iopodman.VarlinkCall, name string) error
|
||||
}
|
||||
|
||||
// InitContainer initializes the container given by Varlink.
|
||||
func (i *LibpodAPI) InitContainer(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) InitContainer(call iopodman.VarlinkCall, name string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -397,7 +397,7 @@ func (i *LibpodAPI) InitContainer(call iopodman.VarlinkCall, name string) error
|
||||
}
|
||||
|
||||
// StopContainer ...
|
||||
func (i *LibpodAPI) StopContainer(call iopodman.VarlinkCall, name string, timeout int64) error {
|
||||
func (i *VarlinkAPI) StopContainer(call iopodman.VarlinkCall, name string, timeout int64) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -415,7 +415,7 @@ func (i *LibpodAPI) StopContainer(call iopodman.VarlinkCall, name string, timeou
|
||||
}
|
||||
|
||||
// RestartContainer ...
|
||||
func (i *LibpodAPI) RestartContainer(call iopodman.VarlinkCall, name string, timeout int64) error {
|
||||
func (i *VarlinkAPI) RestartContainer(call iopodman.VarlinkCall, name string, timeout int64) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -427,7 +427,7 @@ func (i *LibpodAPI) RestartContainer(call iopodman.VarlinkCall, name string, tim
|
||||
}
|
||||
|
||||
// ContainerExists looks in local storage for the existence of a container
|
||||
func (i *LibpodAPI) ContainerExists(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) ContainerExists(call iopodman.VarlinkCall, name string) error {
|
||||
_, err := i.Runtime.LookupContainer(name)
|
||||
if errors.Cause(err) == define.ErrNoSuchCtr {
|
||||
return call.ReplyContainerExists(1)
|
||||
@ -440,7 +440,7 @@ func (i *LibpodAPI) ContainerExists(call iopodman.VarlinkCall, name string) erro
|
||||
|
||||
// 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 iopodman.VarlinkCall, name string, signal int64) error {
|
||||
func (i *VarlinkAPI) KillContainer(call iopodman.VarlinkCall, name string, signal int64) error {
|
||||
killSignal := uint(syscall.SIGTERM)
|
||||
if signal != -1 {
|
||||
killSignal = uint(signal)
|
||||
@ -456,7 +456,7 @@ func (i *LibpodAPI) KillContainer(call iopodman.VarlinkCall, name string, signal
|
||||
}
|
||||
|
||||
// PauseContainer ...
|
||||
func (i *LibpodAPI) PauseContainer(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) PauseContainer(call iopodman.VarlinkCall, name string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -468,7 +468,7 @@ func (i *LibpodAPI) PauseContainer(call iopodman.VarlinkCall, name string) error
|
||||
}
|
||||
|
||||
// UnpauseContainer ...
|
||||
func (i *LibpodAPI) UnpauseContainer(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) UnpauseContainer(call iopodman.VarlinkCall, name string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -480,7 +480,7 @@ func (i *LibpodAPI) UnpauseContainer(call iopodman.VarlinkCall, name string) err
|
||||
}
|
||||
|
||||
// WaitContainer ...
|
||||
func (i *LibpodAPI) WaitContainer(call iopodman.VarlinkCall, name string, interval int64) error {
|
||||
func (i *VarlinkAPI) WaitContainer(call iopodman.VarlinkCall, name string, interval int64) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -493,7 +493,7 @@ func (i *LibpodAPI) WaitContainer(call iopodman.VarlinkCall, name string, interv
|
||||
}
|
||||
|
||||
// RemoveContainer ...
|
||||
func (i *LibpodAPI) RemoveContainer(call iopodman.VarlinkCall, name string, force bool, removeVolumes bool) error {
|
||||
func (i *VarlinkAPI) RemoveContainer(call iopodman.VarlinkCall, name string, force bool, removeVolumes bool) error {
|
||||
ctx := getContext()
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
@ -512,7 +512,7 @@ func (i *LibpodAPI) RemoveContainer(call iopodman.VarlinkCall, name string, forc
|
||||
}
|
||||
|
||||
// EvictContainer ...
|
||||
func (i *LibpodAPI) EvictContainer(call iopodman.VarlinkCall, name string, removeVolumes bool) error {
|
||||
func (i *VarlinkAPI) EvictContainer(call iopodman.VarlinkCall, name string, removeVolumes bool) error {
|
||||
ctx := getContext()
|
||||
id, err := i.Runtime.EvictContainer(ctx, name, removeVolumes)
|
||||
if err != nil {
|
||||
@ -522,7 +522,7 @@ func (i *LibpodAPI) EvictContainer(call iopodman.VarlinkCall, name string, remov
|
||||
}
|
||||
|
||||
// DeleteStoppedContainers ...
|
||||
func (i *LibpodAPI) DeleteStoppedContainers(call iopodman.VarlinkCall) error {
|
||||
func (i *VarlinkAPI) DeleteStoppedContainers(call iopodman.VarlinkCall) error {
|
||||
ctx := getContext()
|
||||
var deletedContainers []string
|
||||
containers, err := i.Runtime.GetAllContainers()
|
||||
@ -545,7 +545,7 @@ func (i *LibpodAPI) DeleteStoppedContainers(call iopodman.VarlinkCall) error {
|
||||
}
|
||||
|
||||
// GetAttachSockets ...
|
||||
func (i *LibpodAPI) GetAttachSockets(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) GetAttachSockets(call iopodman.VarlinkCall, name string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -578,7 +578,7 @@ func (i *LibpodAPI) GetAttachSockets(call iopodman.VarlinkCall, name string) err
|
||||
}
|
||||
|
||||
// ContainerCheckpoint ...
|
||||
func (i *LibpodAPI) ContainerCheckpoint(call iopodman.VarlinkCall, name string, keep, leaveRunning, tcpEstablished bool) error {
|
||||
func (i *VarlinkAPI) ContainerCheckpoint(call iopodman.VarlinkCall, name string, keep, leaveRunning, tcpEstablished bool) error {
|
||||
ctx := getContext()
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
@ -597,7 +597,7 @@ func (i *LibpodAPI) ContainerCheckpoint(call iopodman.VarlinkCall, name string,
|
||||
}
|
||||
|
||||
// ContainerRestore ...
|
||||
func (i *LibpodAPI) ContainerRestore(call iopodman.VarlinkCall, name string, keep, tcpEstablished bool) error {
|
||||
func (i *VarlinkAPI) ContainerRestore(call iopodman.VarlinkCall, name string, keep, tcpEstablished bool) error {
|
||||
ctx := getContext()
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
@ -615,7 +615,7 @@ func (i *LibpodAPI) ContainerRestore(call iopodman.VarlinkCall, name string, kee
|
||||
}
|
||||
|
||||
// ContainerConfig returns just the container.config struct
|
||||
func (i *LibpodAPI) ContainerConfig(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) ContainerConfig(call iopodman.VarlinkCall, name string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -629,7 +629,7 @@ func (i *LibpodAPI) ContainerConfig(call iopodman.VarlinkCall, name string) erro
|
||||
}
|
||||
|
||||
// ContainerArtifacts returns an untouched container's artifact in string format
|
||||
func (i *LibpodAPI) ContainerArtifacts(call iopodman.VarlinkCall, name, artifactName string) error {
|
||||
func (i *VarlinkAPI) ContainerArtifacts(call iopodman.VarlinkCall, name, artifactName string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -646,7 +646,7 @@ func (i *LibpodAPI) ContainerArtifacts(call iopodman.VarlinkCall, name, artifact
|
||||
}
|
||||
|
||||
// ContainerInspectData returns the inspect data of a container in string format
|
||||
func (i *LibpodAPI) ContainerInspectData(call iopodman.VarlinkCall, name string, size bool) error {
|
||||
func (i *VarlinkAPI) ContainerInspectData(call iopodman.VarlinkCall, name string, size bool) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -664,7 +664,7 @@ func (i *LibpodAPI) ContainerInspectData(call iopodman.VarlinkCall, name string,
|
||||
}
|
||||
|
||||
// ContainerStateData returns a container's state data in string format
|
||||
func (i *LibpodAPI) ContainerStateData(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) ContainerStateData(call iopodman.VarlinkCall, name string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(name, err.Error())
|
||||
@ -682,7 +682,7 @@ func (i *LibpodAPI) ContainerStateData(call iopodman.VarlinkCall, name string) e
|
||||
|
||||
// GetContainerStatsWithHistory is a varlink endpoint that returns container stats based on current and
|
||||
// previous statistics
|
||||
func (i *LibpodAPI) GetContainerStatsWithHistory(call iopodman.VarlinkCall, prevStats iopodman.ContainerStats) error {
|
||||
func (i *VarlinkAPI) GetContainerStatsWithHistory(call iopodman.VarlinkCall, prevStats iopodman.ContainerStats) error {
|
||||
con, err := i.Runtime.LookupContainer(prevStats.Id)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(prevStats.Id, err.Error())
|
||||
@ -711,7 +711,7 @@ func (i *LibpodAPI) GetContainerStatsWithHistory(call iopodman.VarlinkCall, prev
|
||||
}
|
||||
|
||||
// Spec ...
|
||||
func (i *LibpodAPI) Spec(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) Spec(call iopodman.VarlinkCall, name string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
@ -727,7 +727,7 @@ func (i *LibpodAPI) Spec(call iopodman.VarlinkCall, name string) error {
|
||||
}
|
||||
|
||||
// GetContainersLogs is the varlink endpoint to obtain one or more container logs
|
||||
func (i *LibpodAPI) GetContainersLogs(call iopodman.VarlinkCall, names []string, follow, latest bool, since string, tail int64, timestamps bool) error {
|
||||
func (i *VarlinkAPI) GetContainersLogs(call iopodman.VarlinkCall, names []string, follow, latest bool, since string, tail int64, timestamps bool) error {
|
||||
var wg sync.WaitGroup
|
||||
if call.WantsMore() {
|
||||
call.Continues = true
|
||||
@ -784,7 +784,7 @@ func newPodmanLogLine(line *logs.LogLine) iopodman.LogLine {
|
||||
}
|
||||
|
||||
// Top displays information about a container's running processes
|
||||
func (i *LibpodAPI) Top(call iopodman.VarlinkCall, nameOrID string, descriptors []string) error {
|
||||
func (i *VarlinkAPI) Top(call iopodman.VarlinkCall, nameOrID string, descriptors []string) error {
|
||||
ctr, err := i.Runtime.LookupContainer(nameOrID)
|
||||
if err != nil {
|
||||
return call.ReplyContainerNotFound(ctr.ID(), err.Error())
|
||||
@ -797,7 +797,7 @@ func (i *LibpodAPI) Top(call iopodman.VarlinkCall, nameOrID string, descriptors
|
||||
}
|
||||
|
||||
// ExecContainer is the varlink endpoint to execute a command in a container
|
||||
func (i *LibpodAPI) ExecContainer(call iopodman.VarlinkCall, opts iopodman.ExecOpts) error {
|
||||
func (i *VarlinkAPI) ExecContainer(call iopodman.VarlinkCall, opts iopodman.ExecOpts) error {
|
||||
if !call.WantsUpgrade() {
|
||||
return call.ReplyErrorOccurred("client must use upgraded connection to exec")
|
||||
}
|
||||
@ -901,7 +901,7 @@ func (i *LibpodAPI) ExecContainer(call iopodman.VarlinkCall, opts iopodman.ExecO
|
||||
}
|
||||
|
||||
// HealthCheckRun executes defined container's healthcheck command and returns the container's health status.
|
||||
func (i *LibpodAPI) HealthCheckRun(call iopodman.VarlinkCall, nameOrID string) error {
|
||||
func (i *VarlinkAPI) HealthCheckRun(call iopodman.VarlinkCall, nameOrID string) error {
|
||||
hcStatus, err := i.Runtime.HealthCheck(nameOrID)
|
||||
if err != nil && hcStatus != libpod.HealthCheckFailure {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
|
@ -8,7 +8,7 @@ import (
|
||||
)
|
||||
|
||||
// CreateContainer ...
|
||||
func (i *LibpodAPI) CreateContainer(call iopodman.VarlinkCall, config iopodman.Create) error {
|
||||
func (i *VarlinkAPI) CreateContainer(call iopodman.VarlinkCall, config iopodman.Create) error {
|
||||
generic := shared.VarlinkCreateToGeneric(config)
|
||||
ctr, _, err := shared.CreateContainer(getContext(), &generic, i.Runtime)
|
||||
if err != nil {
|
||||
|
@ -3,7 +3,6 @@
|
||||
package varlinkapi
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/libpod/events"
|
||||
@ -11,7 +10,7 @@ import (
|
||||
)
|
||||
|
||||
// GetEvents is a remote endpoint to get events from the event log
|
||||
func (i *LibpodAPI) GetEvents(call iopodman.VarlinkCall, filter []string, since string, until string) error {
|
||||
func (i *VarlinkAPI) GetEvents(call iopodman.VarlinkCall, filter []string, since string, until string) error {
|
||||
var (
|
||||
fromStart bool
|
||||
eventsError error
|
||||
@ -43,9 +42,9 @@ func (i *LibpodAPI) GetEvents(call iopodman.VarlinkCall, filter []string, since
|
||||
Id: event.ID,
|
||||
Image: event.Image,
|
||||
Name: event.Name,
|
||||
Status: fmt.Sprintf("%s", event.Status),
|
||||
Status: string(event.Status),
|
||||
Time: event.Time.Format(time.RFC3339Nano),
|
||||
Type: fmt.Sprintf("%s", event.Type),
|
||||
Type: string(event.Type),
|
||||
})
|
||||
if !call.Continues {
|
||||
// For a one-shot on events, we break out here
|
||||
|
@ -10,7 +10,7 @@ import (
|
||||
)
|
||||
|
||||
// GenerateKube ...
|
||||
func (i *LibpodAPI) GenerateKube(call iopodman.VarlinkCall, name string, service bool) error {
|
||||
func (i *VarlinkAPI) GenerateKube(call iopodman.VarlinkCall, name string, service bool) error {
|
||||
pod, serv, err := shared.GenerateKube(name, service, i.Runtime)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
|
@ -35,14 +35,14 @@ import (
|
||||
)
|
||||
|
||||
// ListImagesWithFilters returns a list of images that have been filtered
|
||||
func (i *LibpodAPI) ListImagesWithFilters(call iopodman.VarlinkCall, filters []string) error {
|
||||
func (i *VarlinkAPI) ListImagesWithFilters(call iopodman.VarlinkCall, filters []string) error {
|
||||
images, err := i.Runtime.ImageRuntime().GetImagesWithFilters(filters)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(fmt.Sprintf("unable to get list of images %q", err))
|
||||
}
|
||||
imageList, err := imagesToImageList(images)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(fmt.Sprintf("unable to parse response", err))
|
||||
return call.ReplyErrorOccurred("unable to parse response " + err.Error())
|
||||
}
|
||||
return call.ReplyListImagesWithFilters(imageList)
|
||||
}
|
||||
@ -50,34 +50,34 @@ func (i *LibpodAPI) ListImagesWithFilters(call iopodman.VarlinkCall, filters []s
|
||||
// imagesToImageList converts a slice of Images to an imagelist for varlink responses
|
||||
func imagesToImageList(images []*image.Image) ([]iopodman.Image, error) {
|
||||
var imageList []iopodman.Image
|
||||
for _, image := range images {
|
||||
labels, _ := image.Labels(getContext())
|
||||
containers, _ := image.Containers()
|
||||
repoDigests, err := image.RepoDigests()
|
||||
for _, img := range images {
|
||||
labels, _ := img.Labels(getContext())
|
||||
containers, _ := img.Containers()
|
||||
repoDigests, err := img.RepoDigests()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
size, _ := image.Size(getContext())
|
||||
isParent, err := image.IsParent(context.TODO())
|
||||
size, _ := img.Size(getContext())
|
||||
isParent, err := img.IsParent(context.TODO())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
i := iopodman.Image{
|
||||
Id: image.ID(),
|
||||
Digest: string(image.Digest()),
|
||||
ParentId: image.Parent,
|
||||
RepoTags: image.Names(),
|
||||
Id: img.ID(),
|
||||
Digest: string(img.Digest()),
|
||||
ParentId: img.Parent,
|
||||
RepoTags: img.Names(),
|
||||
RepoDigests: repoDigests,
|
||||
Created: image.Created().Format(time.RFC3339),
|
||||
Created: img.Created().Format(time.RFC3339),
|
||||
Size: int64(*size),
|
||||
VirtualSize: image.VirtualSize,
|
||||
VirtualSize: img.VirtualSize,
|
||||
Containers: int64(len(containers)),
|
||||
Labels: labels,
|
||||
IsParent: isParent,
|
||||
ReadOnly: image.IsReadOnly(),
|
||||
History: image.NamesHistory(),
|
||||
ReadOnly: img.IsReadOnly(),
|
||||
History: img.NamesHistory(),
|
||||
}
|
||||
imageList = append(imageList, i)
|
||||
}
|
||||
@ -86,20 +86,20 @@ func imagesToImageList(images []*image.Image) ([]iopodman.Image, error) {
|
||||
|
||||
// ListImages lists all the images in the store
|
||||
// It requires no inputs.
|
||||
func (i *LibpodAPI) ListImages(call iopodman.VarlinkCall) error {
|
||||
func (i *VarlinkAPI) ListImages(call iopodman.VarlinkCall) error {
|
||||
images, err := i.Runtime.ImageRuntime().GetImages()
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(fmt.Sprintf("unable to get list of images %q", err))
|
||||
return call.ReplyErrorOccurred("unable to get list of images " + err.Error())
|
||||
}
|
||||
imageList, err := imagesToImageList(images)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(fmt.Sprintf("unable to parse response", err))
|
||||
return call.ReplyErrorOccurred("unable to parse response " + err.Error())
|
||||
}
|
||||
return call.ReplyListImages(imageList)
|
||||
}
|
||||
|
||||
// GetImage returns a single image in the form of a Image
|
||||
func (i *LibpodAPI) GetImage(call iopodman.VarlinkCall, id string) error {
|
||||
func (i *VarlinkAPI) GetImage(call iopodman.VarlinkCall, id string) error {
|
||||
newImage, err := i.Runtime.ImageRuntime().NewFromLocal(id)
|
||||
if err != nil {
|
||||
return call.ReplyImageNotFound(id, err.Error())
|
||||
@ -139,7 +139,7 @@ func (i *LibpodAPI) GetImage(call iopodman.VarlinkCall, id string) error {
|
||||
}
|
||||
|
||||
// BuildImage ...
|
||||
func (i *LibpodAPI) BuildImage(call iopodman.VarlinkCall, config iopodman.BuildInfo) error {
|
||||
func (i *VarlinkAPI) BuildImage(call iopodman.VarlinkCall, config iopodman.BuildInfo) error {
|
||||
var (
|
||||
namespace []buildah.NamespaceOption
|
||||
imageID string
|
||||
@ -302,7 +302,7 @@ func (i *LibpodAPI) BuildImage(call iopodman.VarlinkCall, config iopodman.BuildI
|
||||
|
||||
// InspectImage returns an image's inspect information as a string that can be serialized.
|
||||
// Requires an image ID or name
|
||||
func (i *LibpodAPI) InspectImage(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) InspectImage(call iopodman.VarlinkCall, name string) error {
|
||||
newImage, err := i.Runtime.ImageRuntime().NewFromLocal(name)
|
||||
if err != nil {
|
||||
return call.ReplyImageNotFound(name, err.Error())
|
||||
@ -320,7 +320,7 @@ func (i *LibpodAPI) InspectImage(call iopodman.VarlinkCall, name string) error {
|
||||
|
||||
// HistoryImage returns the history of the image's layers
|
||||
// Requires an image or name
|
||||
func (i *LibpodAPI) HistoryImage(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) HistoryImage(call iopodman.VarlinkCall, name string) error {
|
||||
newImage, err := i.Runtime.ImageRuntime().NewFromLocal(name)
|
||||
if err != nil {
|
||||
return call.ReplyImageNotFound(name, err.Error())
|
||||
@ -345,7 +345,7 @@ func (i *LibpodAPI) HistoryImage(call iopodman.VarlinkCall, name string) error {
|
||||
}
|
||||
|
||||
// PushImage pushes an local image to registry
|
||||
func (i *LibpodAPI) PushImage(call iopodman.VarlinkCall, name, tag string, compress bool, format string, removeSignatures bool, signBy string) error {
|
||||
func (i *VarlinkAPI) PushImage(call iopodman.VarlinkCall, name, tag string, compress bool, format string, removeSignatures bool, signBy string) error {
|
||||
var (
|
||||
manifestType string
|
||||
)
|
||||
@ -437,7 +437,7 @@ func (i *LibpodAPI) PushImage(call iopodman.VarlinkCall, name, tag string, compr
|
||||
}
|
||||
|
||||
// TagImage accepts an image name and tag as strings and tags an image in the local store.
|
||||
func (i *LibpodAPI) TagImage(call iopodman.VarlinkCall, name, tag string) error {
|
||||
func (i *VarlinkAPI) TagImage(call iopodman.VarlinkCall, name, tag string) error {
|
||||
newImage, err := i.Runtime.ImageRuntime().NewFromLocal(name)
|
||||
if err != nil {
|
||||
return call.ReplyImageNotFound(name, err.Error())
|
||||
@ -449,7 +449,7 @@ func (i *LibpodAPI) TagImage(call iopodman.VarlinkCall, name, tag string) error
|
||||
}
|
||||
|
||||
// UntagImage accepts an image name and tag as strings and removes the tag from the local store.
|
||||
func (i *LibpodAPI) UntagImage(call iopodman.VarlinkCall, name, tag string) error {
|
||||
func (i *VarlinkAPI) UntagImage(call iopodman.VarlinkCall, name, tag string) error {
|
||||
newImage, err := i.Runtime.ImageRuntime().NewFromLocal(name)
|
||||
if err != nil {
|
||||
return call.ReplyImageNotFound(name, err.Error())
|
||||
@ -462,7 +462,7 @@ func (i *LibpodAPI) UntagImage(call iopodman.VarlinkCall, name, tag string) erro
|
||||
|
||||
// RemoveImage accepts a image name or ID as a string and force bool to determine if it should
|
||||
// remove the image even if being used by stopped containers
|
||||
func (i *LibpodAPI) RemoveImage(call iopodman.VarlinkCall, name string, force bool) error {
|
||||
func (i *VarlinkAPI) RemoveImage(call iopodman.VarlinkCall, name string, force bool) error {
|
||||
ctx := getContext()
|
||||
newImage, err := i.Runtime.ImageRuntime().NewFromLocal(name)
|
||||
if err != nil {
|
||||
@ -477,7 +477,7 @@ func (i *LibpodAPI) RemoveImage(call iopodman.VarlinkCall, name string, force bo
|
||||
|
||||
// RemoveImageWithResponse accepts an image name and force bool. It returns details about what
|
||||
// was done in removeimageresponse struct.
|
||||
func (i *LibpodAPI) RemoveImageWithResponse(call iopodman.VarlinkCall, name string, force bool) error {
|
||||
func (i *VarlinkAPI) RemoveImageWithResponse(call iopodman.VarlinkCall, name string, force bool) error {
|
||||
ir := iopodman.RemoveImageResponse{}
|
||||
ctx := getContext()
|
||||
newImage, err := i.Runtime.ImageRuntime().NewFromLocal(name)
|
||||
@ -495,7 +495,7 @@ func (i *LibpodAPI) RemoveImageWithResponse(call iopodman.VarlinkCall, name stri
|
||||
|
||||
// SearchImages searches all registries configured in /etc/containers/registries.conf for an image
|
||||
// Requires an image name and a search limit as int
|
||||
func (i *LibpodAPI) SearchImages(call iopodman.VarlinkCall, query string, limit *int64, filter iopodman.ImageSearchFilter) error {
|
||||
func (i *VarlinkAPI) SearchImages(call iopodman.VarlinkCall, query string, limit *int64, filter iopodman.ImageSearchFilter) error {
|
||||
// Transform all arguments to proper types first
|
||||
argLimit := 0
|
||||
argIsOfficial := types.OptionalBoolUndefined
|
||||
@ -543,7 +543,7 @@ func (i *LibpodAPI) SearchImages(call iopodman.VarlinkCall, query string, limit
|
||||
|
||||
// DeleteUnusedImages deletes any images that do not have containers associated with it.
|
||||
// TODO Filters are not implemented
|
||||
func (i *LibpodAPI) DeleteUnusedImages(call iopodman.VarlinkCall) error {
|
||||
func (i *VarlinkAPI) DeleteUnusedImages(call iopodman.VarlinkCall) error {
|
||||
images, err := i.Runtime.ImageRuntime().GetImages()
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
@ -565,7 +565,7 @@ func (i *LibpodAPI) DeleteUnusedImages(call iopodman.VarlinkCall) error {
|
||||
}
|
||||
|
||||
// Commit ...
|
||||
func (i *LibpodAPI) Commit(call iopodman.VarlinkCall, name, imageName string, changes []string, author, message string, pause bool, manifestType string) error {
|
||||
func (i *VarlinkAPI) Commit(call iopodman.VarlinkCall, name, imageName string, changes []string, author, message string, pause bool, manifestType string) error {
|
||||
var (
|
||||
newImage *image.Image
|
||||
log []string
|
||||
@ -643,7 +643,7 @@ func (i *LibpodAPI) Commit(call iopodman.VarlinkCall, name, imageName string, ch
|
||||
}
|
||||
|
||||
// ImportImage imports an image from a tarball to the image store
|
||||
func (i *LibpodAPI) ImportImage(call iopodman.VarlinkCall, source, reference, message string, changes []string, delete bool) error {
|
||||
func (i *VarlinkAPI) ImportImage(call iopodman.VarlinkCall, source, reference, message string, changes []string, delete bool) error {
|
||||
configChanges, err := util.GetImageConfig(changes)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
@ -670,7 +670,7 @@ func (i *LibpodAPI) ImportImage(call iopodman.VarlinkCall, source, reference, me
|
||||
|
||||
// ExportImage exports an image to the provided destination
|
||||
// destination must have the transport type!!
|
||||
func (i *LibpodAPI) ExportImage(call iopodman.VarlinkCall, name, destination string, compress bool, tags []string) error {
|
||||
func (i *VarlinkAPI) ExportImage(call iopodman.VarlinkCall, name, destination string, compress bool, tags []string) error {
|
||||
newImage, err := i.Runtime.ImageRuntime().NewFromLocal(name)
|
||||
if err != nil {
|
||||
return call.ReplyImageNotFound(name, err.Error())
|
||||
@ -688,7 +688,7 @@ func (i *LibpodAPI) ExportImage(call iopodman.VarlinkCall, name, destination str
|
||||
}
|
||||
|
||||
// PullImage pulls an image from a registry to the image store.
|
||||
func (i *LibpodAPI) PullImage(call iopodman.VarlinkCall, name string, creds iopodman.AuthConfig) error {
|
||||
func (i *VarlinkAPI) PullImage(call iopodman.VarlinkCall, name string, creds iopodman.AuthConfig) error {
|
||||
var (
|
||||
imageID string
|
||||
err error
|
||||
@ -760,7 +760,7 @@ func (i *LibpodAPI) PullImage(call iopodman.VarlinkCall, name string, creds iopo
|
||||
}
|
||||
|
||||
// ImageExists returns bool as to whether the input image exists in local storage
|
||||
func (i *LibpodAPI) ImageExists(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) ImageExists(call iopodman.VarlinkCall, name string) error {
|
||||
_, err := i.Runtime.ImageRuntime().NewFromLocal(name)
|
||||
if errors.Cause(err) == image.ErrNoSuchImage {
|
||||
return call.ReplyImageExists(1)
|
||||
@ -772,7 +772,7 @@ func (i *LibpodAPI) ImageExists(call iopodman.VarlinkCall, name string) error {
|
||||
}
|
||||
|
||||
// ContainerRunlabel ...
|
||||
func (i *LibpodAPI) ContainerRunlabel(call iopodman.VarlinkCall, input iopodman.Runlabel) error {
|
||||
func (i *VarlinkAPI) ContainerRunlabel(call iopodman.VarlinkCall, input iopodman.Runlabel) error {
|
||||
ctx := getContext()
|
||||
dockerRegistryOptions := image.DockerRegistryOptions{}
|
||||
stdErr := os.Stderr
|
||||
@ -798,7 +798,7 @@ func (i *LibpodAPI) ContainerRunlabel(call iopodman.VarlinkCall, input iopodman.
|
||||
}
|
||||
|
||||
// ImagesPrune ....
|
||||
func (i *LibpodAPI) ImagesPrune(call iopodman.VarlinkCall, all bool, filter []string) error {
|
||||
func (i *VarlinkAPI) ImagesPrune(call iopodman.VarlinkCall, all bool, filter []string) error {
|
||||
prunedImages, err := i.Runtime.ImageRuntime().PruneImages(context.TODO(), all, []string{})
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
@ -807,7 +807,7 @@ func (i *LibpodAPI) ImagesPrune(call iopodman.VarlinkCall, all bool, filter []st
|
||||
}
|
||||
|
||||
// ImageSave ....
|
||||
func (i *LibpodAPI) ImageSave(call iopodman.VarlinkCall, options iopodman.ImageSaveOptions) error {
|
||||
func (i *VarlinkAPI) ImageSave(call iopodman.VarlinkCall, options iopodman.ImageSaveOptions) error {
|
||||
newImage, err := i.Runtime.ImageRuntime().NewFromLocal(options.Name)
|
||||
if err != nil {
|
||||
if errors.Cause(err) == define.ErrNoSuchImage {
|
||||
@ -905,7 +905,7 @@ func (i *LibpodAPI) ImageSave(call iopodman.VarlinkCall, options iopodman.ImageS
|
||||
}
|
||||
|
||||
// LoadImage ...
|
||||
func (i *LibpodAPI) LoadImage(call iopodman.VarlinkCall, name, inputFile string, deleteInputFile, quiet bool) error {
|
||||
func (i *VarlinkAPI) LoadImage(call iopodman.VarlinkCall, name, inputFile string, deleteInputFile, quiet bool) error {
|
||||
var (
|
||||
names string
|
||||
writer io.Writer
|
||||
@ -974,7 +974,7 @@ func (i *LibpodAPI) LoadImage(call iopodman.VarlinkCall, name, inputFile string,
|
||||
}
|
||||
|
||||
// Diff ...
|
||||
func (i *LibpodAPI) Diff(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) Diff(call iopodman.VarlinkCall, name string) error {
|
||||
var response []iopodman.DiffInfo
|
||||
changes, err := i.Runtime.GetDiff("", name)
|
||||
if err != nil {
|
||||
@ -987,7 +987,7 @@ func (i *LibpodAPI) Diff(call iopodman.VarlinkCall, name string) error {
|
||||
}
|
||||
|
||||
// GetLayersMapWithImageInfo is a development only endpoint to obtain layer information for an image.
|
||||
func (i *LibpodAPI) GetLayersMapWithImageInfo(call iopodman.VarlinkCall) error {
|
||||
func (i *VarlinkAPI) GetLayersMapWithImageInfo(call iopodman.VarlinkCall) error {
|
||||
layerInfo, err := image.GetLayersMapWithImageInfo(i.Runtime.ImageRuntime())
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
@ -1000,7 +1000,7 @@ func (i *LibpodAPI) GetLayersMapWithImageInfo(call iopodman.VarlinkCall) error {
|
||||
}
|
||||
|
||||
// BuildImageHierarchyMap ...
|
||||
func (i *LibpodAPI) BuildImageHierarchyMap(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) BuildImageHierarchyMap(call iopodman.VarlinkCall, name string) error {
|
||||
img, err := i.Runtime.ImageRuntime().NewFromLocal(name)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
@ -1024,7 +1024,7 @@ func (i *LibpodAPI) BuildImageHierarchyMap(call iopodman.VarlinkCall, name strin
|
||||
}
|
||||
|
||||
// ImageTree returns the image tree string for the provided image name or ID
|
||||
func (i *LibpodAPI) ImageTree(call iopodman.VarlinkCall, nameOrID string, whatRequires bool) error {
|
||||
func (i *VarlinkAPI) ImageTree(call iopodman.VarlinkCall, nameOrID string, whatRequires bool) error {
|
||||
img, err := i.Runtime.ImageRuntime().NewFromLocal(nameOrID)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
|
@ -5,7 +5,7 @@ package varlinkapi
|
||||
import iopodman "github.com/containers/libpod/pkg/varlink"
|
||||
|
||||
// ListContainerMounts ...
|
||||
func (i *LibpodAPI) ListContainerMounts(call iopodman.VarlinkCall) error {
|
||||
func (i *VarlinkAPI) ListContainerMounts(call iopodman.VarlinkCall) error {
|
||||
mounts := make(map[string]string)
|
||||
allContainers, err := i.Runtime.GetAllContainers()
|
||||
if err != nil {
|
||||
@ -24,7 +24,7 @@ func (i *LibpodAPI) ListContainerMounts(call iopodman.VarlinkCall) error {
|
||||
}
|
||||
|
||||
// MountContainer ...
|
||||
func (i *LibpodAPI) MountContainer(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) MountContainer(call iopodman.VarlinkCall, name string) error {
|
||||
container, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
@ -37,7 +37,7 @@ func (i *LibpodAPI) MountContainer(call iopodman.VarlinkCall, name string) error
|
||||
}
|
||||
|
||||
// UnmountContainer ...
|
||||
func (i *LibpodAPI) UnmountContainer(call iopodman.VarlinkCall, name string, force bool) error {
|
||||
func (i *VarlinkAPI) UnmountContainer(call iopodman.VarlinkCall, name string, force bool) error {
|
||||
container, err := i.Runtime.LookupContainer(name)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
|
@ -14,7 +14,7 @@ import (
|
||||
)
|
||||
|
||||
// CreatePod ...
|
||||
func (i *LibpodAPI) CreatePod(call iopodman.VarlinkCall, create iopodman.PodCreate) error {
|
||||
func (i *VarlinkAPI) CreatePod(call iopodman.VarlinkCall, create iopodman.PodCreate) error {
|
||||
var options []libpod.PodCreateOption
|
||||
if create.Infra {
|
||||
options = append(options, libpod.WithInfraContainer())
|
||||
@ -61,7 +61,7 @@ func (i *LibpodAPI) CreatePod(call iopodman.VarlinkCall, create iopodman.PodCrea
|
||||
}
|
||||
|
||||
// ListPods ...
|
||||
func (i *LibpodAPI) ListPods(call iopodman.VarlinkCall) error {
|
||||
func (i *VarlinkAPI) ListPods(call iopodman.VarlinkCall) error {
|
||||
var (
|
||||
listPods []iopodman.ListPodData
|
||||
)
|
||||
@ -82,7 +82,7 @@ func (i *LibpodAPI) ListPods(call iopodman.VarlinkCall) error {
|
||||
}
|
||||
|
||||
// GetPod ...
|
||||
func (i *LibpodAPI) GetPod(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) GetPod(call iopodman.VarlinkCall, name string) error {
|
||||
pod, err := i.Runtime.LookupPod(name)
|
||||
if err != nil {
|
||||
return call.ReplyPodNotFound(name, err.Error())
|
||||
@ -98,7 +98,7 @@ func (i *LibpodAPI) GetPod(call iopodman.VarlinkCall, name string) error {
|
||||
}
|
||||
|
||||
// GetPodsByStatus returns a slice of pods filtered by a libpod status
|
||||
func (i *LibpodAPI) GetPodsByStatus(call iopodman.VarlinkCall, statuses []string) error {
|
||||
func (i *VarlinkAPI) GetPodsByStatus(call iopodman.VarlinkCall, statuses []string) error {
|
||||
filterFuncs := func(p *libpod.Pod) bool {
|
||||
state, _ := shared.GetPodStatus(p)
|
||||
for _, status := range statuses {
|
||||
@ -120,7 +120,7 @@ func (i *LibpodAPI) GetPodsByStatus(call iopodman.VarlinkCall, statuses []string
|
||||
}
|
||||
|
||||
// InspectPod ...
|
||||
func (i *LibpodAPI) InspectPod(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) InspectPod(call iopodman.VarlinkCall, name string) error {
|
||||
pod, err := i.Runtime.LookupPod(name)
|
||||
if err != nil {
|
||||
return call.ReplyPodNotFound(name, err.Error())
|
||||
@ -137,7 +137,7 @@ func (i *LibpodAPI) InspectPod(call iopodman.VarlinkCall, name string) error {
|
||||
}
|
||||
|
||||
// StartPod ...
|
||||
func (i *LibpodAPI) StartPod(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) StartPod(call iopodman.VarlinkCall, name string) error {
|
||||
pod, err := i.Runtime.LookupPod(name)
|
||||
if err != nil {
|
||||
return call.ReplyPodNotFound(name, err.Error())
|
||||
@ -158,7 +158,7 @@ func (i *LibpodAPI) StartPod(call iopodman.VarlinkCall, name string) error {
|
||||
}
|
||||
|
||||
// StopPod ...
|
||||
func (i *LibpodAPI) StopPod(call iopodman.VarlinkCall, name string, timeout int64) error {
|
||||
func (i *VarlinkAPI) StopPod(call iopodman.VarlinkCall, name string, timeout int64) error {
|
||||
pod, err := i.Runtime.LookupPod(name)
|
||||
if err != nil {
|
||||
return call.ReplyPodNotFound(name, err.Error())
|
||||
@ -172,7 +172,7 @@ func (i *LibpodAPI) StopPod(call iopodman.VarlinkCall, name string, timeout int6
|
||||
}
|
||||
|
||||
// RestartPod ...
|
||||
func (i *LibpodAPI) RestartPod(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) RestartPod(call iopodman.VarlinkCall, name string) error {
|
||||
pod, err := i.Runtime.LookupPod(name)
|
||||
if err != nil {
|
||||
return call.ReplyPodNotFound(name, err.Error())
|
||||
@ -194,7 +194,7 @@ func (i *LibpodAPI) RestartPod(call iopodman.VarlinkCall, name string) error {
|
||||
|
||||
// KillPod kills the running containers in a pod. If you want to use the default SIGTERM signal,
|
||||
// just send a -1 for the signal arg.
|
||||
func (i *LibpodAPI) KillPod(call iopodman.VarlinkCall, name string, signal int64) error {
|
||||
func (i *VarlinkAPI) KillPod(call iopodman.VarlinkCall, name string, signal int64) error {
|
||||
killSignal := uint(syscall.SIGTERM)
|
||||
if signal != -1 {
|
||||
killSignal = uint(signal)
|
||||
@ -213,7 +213,7 @@ func (i *LibpodAPI) KillPod(call iopodman.VarlinkCall, name string, signal int64
|
||||
}
|
||||
|
||||
// PausePod ...
|
||||
func (i *LibpodAPI) PausePod(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) PausePod(call iopodman.VarlinkCall, name string) error {
|
||||
pod, err := i.Runtime.LookupPod(name)
|
||||
if err != nil {
|
||||
return call.ReplyPodNotFound(name, err.Error())
|
||||
@ -227,7 +227,7 @@ func (i *LibpodAPI) PausePod(call iopodman.VarlinkCall, name string) error {
|
||||
}
|
||||
|
||||
// UnpausePod ...
|
||||
func (i *LibpodAPI) UnpausePod(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) UnpausePod(call iopodman.VarlinkCall, name string) error {
|
||||
pod, err := i.Runtime.LookupPod(name)
|
||||
if err != nil {
|
||||
return call.ReplyPodNotFound(name, err.Error())
|
||||
@ -241,7 +241,7 @@ func (i *LibpodAPI) UnpausePod(call iopodman.VarlinkCall, name string) error {
|
||||
}
|
||||
|
||||
// RemovePod ...
|
||||
func (i *LibpodAPI) RemovePod(call iopodman.VarlinkCall, name string, force bool) error {
|
||||
func (i *VarlinkAPI) RemovePod(call iopodman.VarlinkCall, name string, force bool) error {
|
||||
ctx := getContext()
|
||||
pod, err := i.Runtime.LookupPod(name)
|
||||
if err != nil {
|
||||
@ -255,7 +255,7 @@ func (i *LibpodAPI) RemovePod(call iopodman.VarlinkCall, name string, force bool
|
||||
}
|
||||
|
||||
// GetPodStats ...
|
||||
func (i *LibpodAPI) GetPodStats(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) GetPodStats(call iopodman.VarlinkCall, name string) error {
|
||||
pod, err := i.Runtime.LookupPod(name)
|
||||
if err != nil {
|
||||
return call.ReplyPodNotFound(name, err.Error())
|
||||
@ -291,7 +291,7 @@ func (i *LibpodAPI) GetPodStats(call iopodman.VarlinkCall, name string) error {
|
||||
}
|
||||
|
||||
// GetPodsByContext returns a slice of pod ids based on all, latest, or a list
|
||||
func (i *LibpodAPI) GetPodsByContext(call iopodman.VarlinkCall, all, latest bool, input []string) error {
|
||||
func (i *VarlinkAPI) GetPodsByContext(call iopodman.VarlinkCall, all, latest bool, input []string) error {
|
||||
var podids []string
|
||||
|
||||
pods, err := shortcuts.GetPodsByContext(all, latest, input, i.Runtime)
|
||||
@ -305,7 +305,7 @@ func (i *LibpodAPI) GetPodsByContext(call iopodman.VarlinkCall, all, latest bool
|
||||
}
|
||||
|
||||
// PodStateData returns a container's state data in string format
|
||||
func (i *LibpodAPI) PodStateData(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) PodStateData(call iopodman.VarlinkCall, name string) error {
|
||||
pod, err := i.Runtime.LookupPod(name)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
@ -322,7 +322,7 @@ func (i *LibpodAPI) PodStateData(call iopodman.VarlinkCall, name string) error {
|
||||
}
|
||||
|
||||
// TopPod provides the top stats for a given or latest pod
|
||||
func (i *LibpodAPI) TopPod(call iopodman.VarlinkCall, name string, latest bool, descriptors []string) error {
|
||||
func (i *VarlinkAPI) TopPod(call iopodman.VarlinkCall, name string, latest bool, descriptors []string) error {
|
||||
var (
|
||||
pod *libpod.Pod
|
||||
err error
|
||||
|
@ -16,7 +16,7 @@ import (
|
||||
)
|
||||
|
||||
// GetVersion ...
|
||||
func (i *LibpodAPI) GetVersion(call iopodman.VarlinkCall) error {
|
||||
func (i *VarlinkAPI) GetVersion(call iopodman.VarlinkCall) error {
|
||||
versionInfo, err := define.GetVersion()
|
||||
if err != nil {
|
||||
return err
|
||||
@ -33,7 +33,7 @@ func (i *LibpodAPI) GetVersion(call iopodman.VarlinkCall) error {
|
||||
}
|
||||
|
||||
// GetInfo returns details about the podman host and its stores
|
||||
func (i *LibpodAPI) GetInfo(call iopodman.VarlinkCall) error {
|
||||
func (i *VarlinkAPI) GetInfo(call iopodman.VarlinkCall) error {
|
||||
versionInfo, err := define.GetVersion()
|
||||
if err != nil {
|
||||
return err
|
||||
@ -106,7 +106,7 @@ func (i *LibpodAPI) GetInfo(call iopodman.VarlinkCall) error {
|
||||
}
|
||||
|
||||
// GetVersion ...
|
||||
func (i *LibpodAPI) Reset(call iopodman.VarlinkCall) error {
|
||||
func (i *VarlinkAPI) Reset(call iopodman.VarlinkCall) error {
|
||||
if err := i.Runtime.Reset(context.TODO()); err != nil {
|
||||
logrus.Errorf("Reset Failed: %v", err)
|
||||
if err := call.ReplyErrorOccurred(err.Error()); err != nil {
|
||||
|
@ -4,7 +4,6 @@ package varlinkapi
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
@ -14,7 +13,7 @@ import (
|
||||
)
|
||||
|
||||
// SendFile allows a client to send a file to the varlink server
|
||||
func (i *LibpodAPI) SendFile(call iopodman.VarlinkCall, ftype string, length int64) error {
|
||||
func (i *VarlinkAPI) SendFile(call iopodman.VarlinkCall, ftype string, length int64) error {
|
||||
if !call.WantsUpgrade() {
|
||||
return call.ReplyErrorOccurred("client must use upgraded connection to send files")
|
||||
}
|
||||
@ -40,14 +39,14 @@ func (i *LibpodAPI) SendFile(call iopodman.VarlinkCall, ftype string, length int
|
||||
|
||||
logrus.Debugf("successfully received %s", outputFile.Name())
|
||||
// Send an ACK to the client
|
||||
call.Call.Writer.WriteString(fmt.Sprintf("%s:", outputFile.Name()))
|
||||
call.Call.Writer.WriteString(outputFile.Name())
|
||||
call.Call.Writer.Flush()
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
// ReceiveFile allows the varlink server to send a file to a client
|
||||
func (i *LibpodAPI) ReceiveFile(call iopodman.VarlinkCall, filepath string, delete bool) error {
|
||||
func (i *VarlinkAPI) ReceiveFile(call iopodman.VarlinkCall, filepath string, delete bool) error {
|
||||
if !call.WantsUpgrade() {
|
||||
return call.ReplyErrorOccurred("client must use upgraded connection to send files")
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ import (
|
||||
)
|
||||
|
||||
// VolumeCreate creates a libpod volume based on input from a varlink connection
|
||||
func (i *LibpodAPI) VolumeCreate(call iopodman.VarlinkCall, options iopodman.VolumeCreateOpts) error {
|
||||
func (i *VarlinkAPI) VolumeCreate(call iopodman.VarlinkCall, options iopodman.VolumeCreateOpts) error {
|
||||
var volumeOptions []libpod.VolumeCreateOption
|
||||
|
||||
if len(options.VolumeName) > 0 {
|
||||
@ -38,7 +38,7 @@ func (i *LibpodAPI) VolumeCreate(call iopodman.VarlinkCall, options iopodman.Vol
|
||||
}
|
||||
|
||||
// VolumeRemove removes volumes by options.All or options.Volumes
|
||||
func (i *LibpodAPI) VolumeRemove(call iopodman.VarlinkCall, options iopodman.VolumeRemoveOpts) error {
|
||||
func (i *VarlinkAPI) VolumeRemove(call iopodman.VarlinkCall, options iopodman.VolumeRemoveOpts) error {
|
||||
success, failed, err := shared.SharedRemoveVolumes(getContext(), i.Runtime, options.Volumes, options.All, options.Force)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
@ -52,7 +52,7 @@ func (i *LibpodAPI) VolumeRemove(call iopodman.VarlinkCall, options iopodman.Vol
|
||||
}
|
||||
|
||||
// GetVolumes returns all the volumes known to the remote system
|
||||
func (i *LibpodAPI) GetVolumes(call iopodman.VarlinkCall, args []string, all bool) error {
|
||||
func (i *VarlinkAPI) GetVolumes(call iopodman.VarlinkCall, args []string, all bool) error {
|
||||
var (
|
||||
err error
|
||||
reply []*libpod.Volume
|
||||
@ -87,7 +87,7 @@ func (i *LibpodAPI) GetVolumes(call iopodman.VarlinkCall, args []string, all boo
|
||||
}
|
||||
|
||||
// InspectVolume inspects a single volume, returning its JSON as a string.
|
||||
func (i *LibpodAPI) InspectVolume(call iopodman.VarlinkCall, name string) error {
|
||||
func (i *VarlinkAPI) InspectVolume(call iopodman.VarlinkCall, name string) error {
|
||||
vol, err := i.Runtime.LookupVolume(name)
|
||||
if err != nil {
|
||||
return call.ReplyErrorOccurred(err.Error())
|
||||
@ -104,7 +104,7 @@ func (i *LibpodAPI) InspectVolume(call iopodman.VarlinkCall, name string) error
|
||||
}
|
||||
|
||||
// VolumesPrune removes unused images via a varlink call
|
||||
func (i *LibpodAPI) VolumesPrune(call iopodman.VarlinkCall) error {
|
||||
func (i *VarlinkAPI) VolumesPrune(call iopodman.VarlinkCall) error {
|
||||
var (
|
||||
prunedErrors []string
|
||||
prunedNames []string
|
||||
|
@ -221,8 +221,8 @@ func PodmanTestCreateUtil(tempDir string, remote bool) *PodmanTestIntegration {
|
||||
ociRuntime := os.Getenv("OCI_RUNTIME")
|
||||
if ociRuntime == "" {
|
||||
var err error
|
||||
ociRuntime, err = exec.LookPath("runc")
|
||||
// If we cannot find the runc binary, setting to something static as we have no way
|
||||
ociRuntime, err = exec.LookPath("crun")
|
||||
// If we cannot find the crun binary, setting to something static as we have no way
|
||||
// to return an error. The tests will fail and point out that the runc binary could
|
||||
// not be found nicely.
|
||||
if err != nil {
|
||||
|
Reference in New Issue
Block a user