From 2ede6ee1fe7208b8d6f3499dab24e52a0c9cfc04 Mon Sep 17 00:00:00 2001 From: Matej Vasek Date: Wed, 11 May 2022 19:23:54 +0200 Subject: [PATCH] Fix S2I build with podman. Workaround a bug in podman: https://github.com/containers/podman/issues/13770 Signed-off-by: Matej Vasek --- .codecov.yaml | 1 + .gitattributes | 1 + s2i/builder.go | 4 + s2i/docker_client_wrapper.go | 62 +++ s2i/zz_docker_client_wrapper_generated.go | 484 ++++++++++++++++++++++ 5 files changed, 552 insertions(+) create mode 100644 s2i/docker_client_wrapper.go create mode 100644 s2i/zz_docker_client_wrapper_generated.go diff --git a/.codecov.yaml b/.codecov.yaml index f6fd0b2e74..82fba34baa 100644 --- a/.codecov.yaml +++ b/.codecov.yaml @@ -3,3 +3,4 @@ ignore: - vendor - testdata - docker/docker_client_generated.go + - s2i/zz_docker_client_wrapper_generated.go diff --git a/.gitattributes b/.gitattributes index 788d0c2fd6..78ad9cf376 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,3 +2,4 @@ testdata/repository-a.git/objects/*/* ignore-lint=true testdata/repository.git/objects/*/* ignore-lint=true version.txt linguist-generated=true zz_filesystem_generated.go linguist-generated=true +s2i/zz_docker_client_wrapper_generated.go linguist-generated=true diff --git a/s2i/builder.go b/s2i/builder.go index b5f9fc673b..0b2c533390 100644 --- a/s2i/builder.go +++ b/s2i/builder.go @@ -61,6 +61,10 @@ func (b *Builder) Build(ctx context.Context, f fn.Function) (err error) { } defer client.Close() + if isPodman(ctx, client) { + client = podmanDockerClient{client} + } + // Build Config cfg := &api.Config{} cfg.Quiet = !b.verbose diff --git a/s2i/docker_client_wrapper.go b/s2i/docker_client_wrapper.go new file mode 100644 index 0000000000..90cbb5c81b --- /dev/null +++ b/s2i/docker_client_wrapper.go @@ -0,0 +1,62 @@ +package s2i + +import ( + "context" + "encoding/json" + "fmt" + "strings" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/client" +) + +// Wrapper to workaround https://github.com/containers/podman/issues/13770 +type podmanDockerClient struct { + pimpl client.CommonAPIClient +} + +func (p podmanDockerClient) ContainerCommit(ctx context.Context, nameOrID string, opts types.ContainerCommitOptions) (types.IDResponse, error) { + if len(opts.Config.Cmd) > 0 { + bs, err := json.Marshal(opts.Config.Cmd) + if err != nil { + return types.IDResponse{}, err + } + opts.Changes = append(opts.Changes, "CMD "+string(bs)) + } + + if len(opts.Config.Entrypoint) > 0 { + bs, err := json.Marshal(opts.Config.Entrypoint) + if err != nil { + return types.IDResponse{}, err + } + opts.Changes = append(opts.Changes, "ENTRYPOINT "+string(bs)) + } + + if opts.Config.User != "" { + opts.Changes = append(opts.Changes, "USER "+opts.Config.User) + } + + for _, e := range opts.Config.Env { + parts := strings.SplitN(e, "=", 2) + opts.Changes = append(opts.Changes, fmt.Sprintf("ENV %s=%q", parts[0], parts[1])) + } + + for k, v := range opts.Config.Labels { + opts.Changes = append(opts.Changes, fmt.Sprintf("LABEL %q=%q", k, v)) + } + + return p.pimpl.ContainerCommit(ctx, nameOrID, opts) +} + +func isPodman(ctx context.Context, cli client.CommonAPIClient) bool { + v, err := cli.ServerVersion(ctx) + if err != nil { + return false + } + for _, comp := range v.Components { + if comp.Name == "Podman Engine" { + return true + } + } + return false +} diff --git a/s2i/zz_docker_client_wrapper_generated.go b/s2i/zz_docker_client_wrapper_generated.go new file mode 100644 index 0000000000..df128b55c8 --- /dev/null +++ b/s2i/zz_docker_client_wrapper_generated.go @@ -0,0 +1,484 @@ +package s2i + +import ( + "context" + "io" + "net" + "net/http" + "time" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/events" + "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/image" + "github.com/docker/docker/api/types/network" + "github.com/docker/docker/api/types/registry" + "github.com/docker/docker/api/types/swarm" + "github.com/docker/docker/api/types/volume" + v1 "github.com/opencontainers/image-spec/specs-go/v1" +) + +func (p podmanDockerClient) BuildCachePrune(arg0 context.Context, arg1 types.BuildCachePruneOptions) (*types.BuildCachePruneReport, error) { + return p.pimpl.BuildCachePrune(arg0, arg1) +} + +func (p podmanDockerClient) BuildCancel(arg0 context.Context, arg1 string) error { + return p.pimpl.BuildCancel(arg0, arg1) +} + +func (p podmanDockerClient) ClientVersion() string { + return p.pimpl.ClientVersion() +} + +func (p podmanDockerClient) Close() error { + return p.pimpl.Close() +} + +func (p podmanDockerClient) ConfigCreate(arg0 context.Context, arg1 swarm.ConfigSpec) (types.ConfigCreateResponse, error) { + return p.pimpl.ConfigCreate(arg0, arg1) +} + +func (p podmanDockerClient) ConfigInspectWithRaw(arg0 context.Context, arg1 string) (swarm.Config, []uint8, error) { + return p.pimpl.ConfigInspectWithRaw(arg0, arg1) +} + +func (p podmanDockerClient) ConfigList(arg0 context.Context, arg1 types.ConfigListOptions) ([]swarm.Config, error) { + return p.pimpl.ConfigList(arg0, arg1) +} + +func (p podmanDockerClient) ConfigRemove(arg0 context.Context, arg1 string) error { + return p.pimpl.ConfigRemove(arg0, arg1) +} + +func (p podmanDockerClient) ConfigUpdate(arg0 context.Context, arg1 string, arg2 swarm.Version, arg3 swarm.ConfigSpec) error { + return p.pimpl.ConfigUpdate(arg0, arg1, arg2, arg3) +} + +func (p podmanDockerClient) ContainerAttach(arg0 context.Context, arg1 string, arg2 types.ContainerAttachOptions) (types.HijackedResponse, error) { + return p.pimpl.ContainerAttach(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerCreate(arg0 context.Context, arg1 *container.Config, arg2 *container.HostConfig, arg3 *network.NetworkingConfig, arg4 *v1.Platform, arg5 string) (container.ContainerCreateCreatedBody, error) { + return p.pimpl.ContainerCreate(arg0, arg1, arg2, arg3, arg4, arg5) +} + +func (p podmanDockerClient) ContainerDiff(arg0 context.Context, arg1 string) ([]container.ContainerChangeResponseItem, error) { + return p.pimpl.ContainerDiff(arg0, arg1) +} + +func (p podmanDockerClient) ContainerExecAttach(arg0 context.Context, arg1 string, arg2 types.ExecStartCheck) (types.HijackedResponse, error) { + return p.pimpl.ContainerExecAttach(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerExecCreate(arg0 context.Context, arg1 string, arg2 types.ExecConfig) (types.IDResponse, error) { + return p.pimpl.ContainerExecCreate(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerExecInspect(arg0 context.Context, arg1 string) (types.ContainerExecInspect, error) { + return p.pimpl.ContainerExecInspect(arg0, arg1) +} + +func (p podmanDockerClient) ContainerExecResize(arg0 context.Context, arg1 string, arg2 types.ResizeOptions) error { + return p.pimpl.ContainerExecResize(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerExecStart(arg0 context.Context, arg1 string, arg2 types.ExecStartCheck) error { + return p.pimpl.ContainerExecStart(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerExport(arg0 context.Context, arg1 string) (io.ReadCloser, error) { + return p.pimpl.ContainerExport(arg0, arg1) +} + +func (p podmanDockerClient) ContainerInspect(arg0 context.Context, arg1 string) (types.ContainerJSON, error) { + return p.pimpl.ContainerInspect(arg0, arg1) +} + +func (p podmanDockerClient) ContainerInspectWithRaw(arg0 context.Context, arg1 string, arg2 bool) (types.ContainerJSON, []uint8, error) { + return p.pimpl.ContainerInspectWithRaw(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerKill(arg0 context.Context, arg1 string, arg2 string) error { + return p.pimpl.ContainerKill(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerList(arg0 context.Context, arg1 types.ContainerListOptions) ([]types.Container, error) { + return p.pimpl.ContainerList(arg0, arg1) +} + +func (p podmanDockerClient) ContainerLogs(arg0 context.Context, arg1 string, arg2 types.ContainerLogsOptions) (io.ReadCloser, error) { + return p.pimpl.ContainerLogs(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerPause(arg0 context.Context, arg1 string) error { + return p.pimpl.ContainerPause(arg0, arg1) +} + +func (p podmanDockerClient) ContainerRemove(arg0 context.Context, arg1 string, arg2 types.ContainerRemoveOptions) error { + return p.pimpl.ContainerRemove(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerRename(arg0 context.Context, arg1 string, arg2 string) error { + return p.pimpl.ContainerRename(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerResize(arg0 context.Context, arg1 string, arg2 types.ResizeOptions) error { + return p.pimpl.ContainerResize(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerRestart(arg0 context.Context, arg1 string, arg2 *time.Duration) error { + return p.pimpl.ContainerRestart(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerStart(arg0 context.Context, arg1 string, arg2 types.ContainerStartOptions) error { + return p.pimpl.ContainerStart(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerStatPath(arg0 context.Context, arg1 string, arg2 string) (types.ContainerPathStat, error) { + return p.pimpl.ContainerStatPath(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerStats(arg0 context.Context, arg1 string, arg2 bool) (types.ContainerStats, error) { + return p.pimpl.ContainerStats(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerStatsOneShot(arg0 context.Context, arg1 string) (types.ContainerStats, error) { + return p.pimpl.ContainerStatsOneShot(arg0, arg1) +} + +func (p podmanDockerClient) ContainerStop(arg0 context.Context, arg1 string, arg2 *time.Duration) error { + return p.pimpl.ContainerStop(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerTop(arg0 context.Context, arg1 string, arg2 []string) (container.ContainerTopOKBody, error) { + return p.pimpl.ContainerTop(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerUnpause(arg0 context.Context, arg1 string) error { + return p.pimpl.ContainerUnpause(arg0, arg1) +} + +func (p podmanDockerClient) ContainerUpdate(arg0 context.Context, arg1 string, arg2 container.UpdateConfig) (container.ContainerUpdateOKBody, error) { + return p.pimpl.ContainerUpdate(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainerWait(arg0 context.Context, arg1 string, arg2 container.WaitCondition) (<-chan container.ContainerWaitOKBody, <-chan error) { + return p.pimpl.ContainerWait(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ContainersPrune(arg0 context.Context, arg1 filters.Args) (types.ContainersPruneReport, error) { + return p.pimpl.ContainersPrune(arg0, arg1) +} + +func (p podmanDockerClient) CopyFromContainer(arg0 context.Context, arg1 string, arg2 string) (io.ReadCloser, types.ContainerPathStat, error) { + return p.pimpl.CopyFromContainer(arg0, arg1, arg2) +} + +func (p podmanDockerClient) CopyToContainer(arg0 context.Context, arg1 string, arg2 string, arg3 io.Reader, arg4 types.CopyToContainerOptions) error { + return p.pimpl.CopyToContainer(arg0, arg1, arg2, arg3, arg4) +} + +func (p podmanDockerClient) DaemonHost() string { + return p.pimpl.DaemonHost() +} + +func (p podmanDockerClient) DialHijack(arg0 context.Context, arg1 string, arg2 string, arg3 map[string][]string) (net.Conn, error) { + return p.pimpl.DialHijack(arg0, arg1, arg2, arg3) +} + +func (p podmanDockerClient) Dialer() func(context.Context) (net.Conn, error) { + return p.pimpl.Dialer() +} + +func (p podmanDockerClient) DiskUsage(arg0 context.Context) (types.DiskUsage, error) { + return p.pimpl.DiskUsage(arg0) +} + +func (p podmanDockerClient) DistributionInspect(arg0 context.Context, arg1 string, arg2 string) (registry.DistributionInspect, error) { + return p.pimpl.DistributionInspect(arg0, arg1, arg2) +} + +func (p podmanDockerClient) Events(arg0 context.Context, arg1 types.EventsOptions) (<-chan events.Message, <-chan error) { + return p.pimpl.Events(arg0, arg1) +} + +func (p podmanDockerClient) HTTPClient() *http.Client { + return p.pimpl.HTTPClient() +} + +func (p podmanDockerClient) ImageBuild(arg0 context.Context, arg1 io.Reader, arg2 types.ImageBuildOptions) (types.ImageBuildResponse, error) { + return p.pimpl.ImageBuild(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ImageCreate(arg0 context.Context, arg1 string, arg2 types.ImageCreateOptions) (io.ReadCloser, error) { + return p.pimpl.ImageCreate(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ImageHistory(arg0 context.Context, arg1 string) ([]image.HistoryResponseItem, error) { + return p.pimpl.ImageHistory(arg0, arg1) +} + +func (p podmanDockerClient) ImageImport(arg0 context.Context, arg1 types.ImageImportSource, arg2 string, arg3 types.ImageImportOptions) (io.ReadCloser, error) { + return p.pimpl.ImageImport(arg0, arg1, arg2, arg3) +} + +func (p podmanDockerClient) ImageInspectWithRaw(arg0 context.Context, arg1 string) (types.ImageInspect, []uint8, error) { + return p.pimpl.ImageInspectWithRaw(arg0, arg1) +} + +func (p podmanDockerClient) ImageList(arg0 context.Context, arg1 types.ImageListOptions) ([]types.ImageSummary, error) { + return p.pimpl.ImageList(arg0, arg1) +} + +func (p podmanDockerClient) ImageLoad(arg0 context.Context, arg1 io.Reader, arg2 bool) (types.ImageLoadResponse, error) { + return p.pimpl.ImageLoad(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ImagePull(arg0 context.Context, arg1 string, arg2 types.ImagePullOptions) (io.ReadCloser, error) { + return p.pimpl.ImagePull(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ImagePush(arg0 context.Context, arg1 string, arg2 types.ImagePushOptions) (io.ReadCloser, error) { + return p.pimpl.ImagePush(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ImageRemove(arg0 context.Context, arg1 string, arg2 types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error) { + return p.pimpl.ImageRemove(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ImageSave(arg0 context.Context, arg1 []string) (io.ReadCloser, error) { + return p.pimpl.ImageSave(arg0, arg1) +} + +func (p podmanDockerClient) ImageSearch(arg0 context.Context, arg1 string, arg2 types.ImageSearchOptions) ([]registry.SearchResult, error) { + return p.pimpl.ImageSearch(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ImageTag(arg0 context.Context, arg1 string, arg2 string) error { + return p.pimpl.ImageTag(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ImagesPrune(arg0 context.Context, arg1 filters.Args) (types.ImagesPruneReport, error) { + return p.pimpl.ImagesPrune(arg0, arg1) +} + +func (p podmanDockerClient) Info(arg0 context.Context) (types.Info, error) { + return p.pimpl.Info(arg0) +} + +func (p podmanDockerClient) NegotiateAPIVersion(arg0 context.Context) { + p.pimpl.NegotiateAPIVersion(arg0) +} + +func (p podmanDockerClient) NegotiateAPIVersionPing(arg0 types.Ping) { + p.pimpl.NegotiateAPIVersionPing(arg0) +} + +func (p podmanDockerClient) NetworkConnect(arg0 context.Context, arg1 string, arg2 string, arg3 *network.EndpointSettings) error { + return p.pimpl.NetworkConnect(arg0, arg1, arg2, arg3) +} + +func (p podmanDockerClient) NetworkCreate(arg0 context.Context, arg1 string, arg2 types.NetworkCreate) (types.NetworkCreateResponse, error) { + return p.pimpl.NetworkCreate(arg0, arg1, arg2) +} + +func (p podmanDockerClient) NetworkDisconnect(arg0 context.Context, arg1 string, arg2 string, arg3 bool) error { + return p.pimpl.NetworkDisconnect(arg0, arg1, arg2, arg3) +} + +func (p podmanDockerClient) NetworkInspect(arg0 context.Context, arg1 string, arg2 types.NetworkInspectOptions) (types.NetworkResource, error) { + return p.pimpl.NetworkInspect(arg0, arg1, arg2) +} + +func (p podmanDockerClient) NetworkInspectWithRaw(arg0 context.Context, arg1 string, arg2 types.NetworkInspectOptions) (types.NetworkResource, []uint8, error) { + return p.pimpl.NetworkInspectWithRaw(arg0, arg1, arg2) +} + +func (p podmanDockerClient) NetworkList(arg0 context.Context, arg1 types.NetworkListOptions) ([]types.NetworkResource, error) { + return p.pimpl.NetworkList(arg0, arg1) +} + +func (p podmanDockerClient) NetworkRemove(arg0 context.Context, arg1 string) error { + return p.pimpl.NetworkRemove(arg0, arg1) +} + +func (p podmanDockerClient) NetworksPrune(arg0 context.Context, arg1 filters.Args) (types.NetworksPruneReport, error) { + return p.pimpl.NetworksPrune(arg0, arg1) +} + +func (p podmanDockerClient) NodeInspectWithRaw(arg0 context.Context, arg1 string) (swarm.Node, []uint8, error) { + return p.pimpl.NodeInspectWithRaw(arg0, arg1) +} + +func (p podmanDockerClient) NodeList(arg0 context.Context, arg1 types.NodeListOptions) ([]swarm.Node, error) { + return p.pimpl.NodeList(arg0, arg1) +} + +func (p podmanDockerClient) NodeRemove(arg0 context.Context, arg1 string, arg2 types.NodeRemoveOptions) error { + return p.pimpl.NodeRemove(arg0, arg1, arg2) +} + +func (p podmanDockerClient) NodeUpdate(arg0 context.Context, arg1 string, arg2 swarm.Version, arg3 swarm.NodeSpec) error { + return p.pimpl.NodeUpdate(arg0, arg1, arg2, arg3) +} + +func (p podmanDockerClient) Ping(arg0 context.Context) (types.Ping, error) { + return p.pimpl.Ping(arg0) +} + +func (p podmanDockerClient) PluginCreate(arg0 context.Context, arg1 io.Reader, arg2 types.PluginCreateOptions) error { + return p.pimpl.PluginCreate(arg0, arg1, arg2) +} + +func (p podmanDockerClient) PluginDisable(arg0 context.Context, arg1 string, arg2 types.PluginDisableOptions) error { + return p.pimpl.PluginDisable(arg0, arg1, arg2) +} + +func (p podmanDockerClient) PluginEnable(arg0 context.Context, arg1 string, arg2 types.PluginEnableOptions) error { + return p.pimpl.PluginEnable(arg0, arg1, arg2) +} + +func (p podmanDockerClient) PluginInspectWithRaw(arg0 context.Context, arg1 string) (*types.Plugin, []uint8, error) { + return p.pimpl.PluginInspectWithRaw(arg0, arg1) +} + +func (p podmanDockerClient) PluginInstall(arg0 context.Context, arg1 string, arg2 types.PluginInstallOptions) (io.ReadCloser, error) { + return p.pimpl.PluginInstall(arg0, arg1, arg2) +} + +func (p podmanDockerClient) PluginList(arg0 context.Context, arg1 filters.Args) (types.PluginsListResponse, error) { + return p.pimpl.PluginList(arg0, arg1) +} + +func (p podmanDockerClient) PluginPush(arg0 context.Context, arg1 string, arg2 string) (io.ReadCloser, error) { + return p.pimpl.PluginPush(arg0, arg1, arg2) +} + +func (p podmanDockerClient) PluginRemove(arg0 context.Context, arg1 string, arg2 types.PluginRemoveOptions) error { + return p.pimpl.PluginRemove(arg0, arg1, arg2) +} + +func (p podmanDockerClient) PluginSet(arg0 context.Context, arg1 string, arg2 []string) error { + return p.pimpl.PluginSet(arg0, arg1, arg2) +} + +func (p podmanDockerClient) PluginUpgrade(arg0 context.Context, arg1 string, arg2 types.PluginInstallOptions) (io.ReadCloser, error) { + return p.pimpl.PluginUpgrade(arg0, arg1, arg2) +} + +func (p podmanDockerClient) RegistryLogin(arg0 context.Context, arg1 types.AuthConfig) (registry.AuthenticateOKBody, error) { + return p.pimpl.RegistryLogin(arg0, arg1) +} + +func (p podmanDockerClient) SecretCreate(arg0 context.Context, arg1 swarm.SecretSpec) (types.SecretCreateResponse, error) { + return p.pimpl.SecretCreate(arg0, arg1) +} + +func (p podmanDockerClient) SecretInspectWithRaw(arg0 context.Context, arg1 string) (swarm.Secret, []uint8, error) { + return p.pimpl.SecretInspectWithRaw(arg0, arg1) +} + +func (p podmanDockerClient) SecretList(arg0 context.Context, arg1 types.SecretListOptions) ([]swarm.Secret, error) { + return p.pimpl.SecretList(arg0, arg1) +} + +func (p podmanDockerClient) SecretRemove(arg0 context.Context, arg1 string) error { + return p.pimpl.SecretRemove(arg0, arg1) +} + +func (p podmanDockerClient) SecretUpdate(arg0 context.Context, arg1 string, arg2 swarm.Version, arg3 swarm.SecretSpec) error { + return p.pimpl.SecretUpdate(arg0, arg1, arg2, arg3) +} + +func (p podmanDockerClient) ServerVersion(arg0 context.Context) (types.Version, error) { + return p.pimpl.ServerVersion(arg0) +} + +func (p podmanDockerClient) ServiceCreate(arg0 context.Context, arg1 swarm.ServiceSpec, arg2 types.ServiceCreateOptions) (types.ServiceCreateResponse, error) { + return p.pimpl.ServiceCreate(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ServiceInspectWithRaw(arg0 context.Context, arg1 string, arg2 types.ServiceInspectOptions) (swarm.Service, []uint8, error) { + return p.pimpl.ServiceInspectWithRaw(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ServiceList(arg0 context.Context, arg1 types.ServiceListOptions) ([]swarm.Service, error) { + return p.pimpl.ServiceList(arg0, arg1) +} + +func (p podmanDockerClient) ServiceLogs(arg0 context.Context, arg1 string, arg2 types.ContainerLogsOptions) (io.ReadCloser, error) { + return p.pimpl.ServiceLogs(arg0, arg1, arg2) +} + +func (p podmanDockerClient) ServiceRemove(arg0 context.Context, arg1 string) error { + return p.pimpl.ServiceRemove(arg0, arg1) +} + +func (p podmanDockerClient) ServiceUpdate(arg0 context.Context, arg1 string, arg2 swarm.Version, arg3 swarm.ServiceSpec, arg4 types.ServiceUpdateOptions) (types.ServiceUpdateResponse, error) { + return p.pimpl.ServiceUpdate(arg0, arg1, arg2, arg3, arg4) +} + +func (p podmanDockerClient) SwarmGetUnlockKey(arg0 context.Context) (types.SwarmUnlockKeyResponse, error) { + return p.pimpl.SwarmGetUnlockKey(arg0) +} + +func (p podmanDockerClient) SwarmInit(arg0 context.Context, arg1 swarm.InitRequest) (string, error) { + return p.pimpl.SwarmInit(arg0, arg1) +} + +func (p podmanDockerClient) SwarmInspect(arg0 context.Context) (swarm.Swarm, error) { + return p.pimpl.SwarmInspect(arg0) +} + +func (p podmanDockerClient) SwarmJoin(arg0 context.Context, arg1 swarm.JoinRequest) error { + return p.pimpl.SwarmJoin(arg0, arg1) +} + +func (p podmanDockerClient) SwarmLeave(arg0 context.Context, arg1 bool) error { + return p.pimpl.SwarmLeave(arg0, arg1) +} + +func (p podmanDockerClient) SwarmUnlock(arg0 context.Context, arg1 swarm.UnlockRequest) error { + return p.pimpl.SwarmUnlock(arg0, arg1) +} + +func (p podmanDockerClient) SwarmUpdate(arg0 context.Context, arg1 swarm.Version, arg2 swarm.Spec, arg3 swarm.UpdateFlags) error { + return p.pimpl.SwarmUpdate(arg0, arg1, arg2, arg3) +} + +func (p podmanDockerClient) TaskInspectWithRaw(arg0 context.Context, arg1 string) (swarm.Task, []uint8, error) { + return p.pimpl.TaskInspectWithRaw(arg0, arg1) +} + +func (p podmanDockerClient) TaskList(arg0 context.Context, arg1 types.TaskListOptions) ([]swarm.Task, error) { + return p.pimpl.TaskList(arg0, arg1) +} + +func (p podmanDockerClient) TaskLogs(arg0 context.Context, arg1 string, arg2 types.ContainerLogsOptions) (io.ReadCloser, error) { + return p.pimpl.TaskLogs(arg0, arg1, arg2) +} + +func (p podmanDockerClient) VolumeCreate(arg0 context.Context, arg1 volume.VolumeCreateBody) (types.Volume, error) { + return p.pimpl.VolumeCreate(arg0, arg1) +} + +func (p podmanDockerClient) VolumeInspect(arg0 context.Context, arg1 string) (types.Volume, error) { + return p.pimpl.VolumeInspect(arg0, arg1) +} + +func (p podmanDockerClient) VolumeInspectWithRaw(arg0 context.Context, arg1 string) (types.Volume, []uint8, error) { + return p.pimpl.VolumeInspectWithRaw(arg0, arg1) +} + +func (p podmanDockerClient) VolumeList(arg0 context.Context, arg1 filters.Args) (volume.VolumeListOKBody, error) { + return p.pimpl.VolumeList(arg0, arg1) +} + +func (p podmanDockerClient) VolumeRemove(arg0 context.Context, arg1 string, arg2 bool) error { + return p.pimpl.VolumeRemove(arg0, arg1, arg2) +} + +func (p podmanDockerClient) VolumesPrune(arg0 context.Context, arg1 filters.Args) (types.VolumesPruneReport, error) { + return p.pimpl.VolumesPrune(arg0, arg1) +}