summaryrefslogtreecommitdiff
path: root/pkg/domain
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/domain')
-rw-r--r--pkg/domain/entities/container_ps.go2
-rw-r--r--pkg/domain/entities/containers.go2
-rw-r--r--pkg/domain/entities/engine_container.go2
-rw-r--r--pkg/domain/entities/events.go2
-rw-r--r--pkg/domain/entities/network.go2
-rw-r--r--pkg/domain/entities/pods.go12
-rw-r--r--pkg/domain/entities/types.go2
-rw-r--r--pkg/domain/infra/abi/containers.go34
-rw-r--r--pkg/domain/infra/abi/network.go4
-rw-r--r--pkg/domain/infra/abi/play.go2
-rw-r--r--pkg/domain/infra/tunnel/containers.go48
-rw-r--r--pkg/domain/infra/tunnel/network.go2
12 files changed, 87 insertions, 27 deletions
diff --git a/pkg/domain/entities/container_ps.go b/pkg/domain/entities/container_ps.go
index d018d373f..d32a2eead 100644
--- a/pkg/domain/entities/container_ps.go
+++ b/pkg/domain/entities/container_ps.go
@@ -5,7 +5,7 @@ import (
"strings"
"time"
- "github.com/containers/podman/v3/libpod/network/types"
+ "github.com/containers/common/libnetwork/types"
"github.com/containers/podman/v3/pkg/ps/define"
"github.com/pkg/errors"
)
diff --git a/pkg/domain/entities/containers.go b/pkg/domain/entities/containers.go
index e3f8f1b7c..110265e59 100644
--- a/pkg/domain/entities/containers.go
+++ b/pkg/domain/entities/containers.go
@@ -6,9 +6,9 @@ import (
"os"
"time"
+ nettypes "github.com/containers/common/libnetwork/types"
"github.com/containers/image/v5/types"
"github.com/containers/podman/v3/libpod/define"
- nettypes "github.com/containers/podman/v3/libpod/network/types"
"github.com/containers/podman/v3/pkg/specgen"
"github.com/containers/storage/pkg/archive"
)
diff --git a/pkg/domain/entities/engine_container.go b/pkg/domain/entities/engine_container.go
index 7ce4dd0f6..962782fd8 100644
--- a/pkg/domain/entities/engine_container.go
+++ b/pkg/domain/entities/engine_container.go
@@ -4,9 +4,9 @@ import (
"context"
"io"
+ "github.com/containers/common/libnetwork/types"
"github.com/containers/common/pkg/config"
"github.com/containers/podman/v3/libpod/define"
- "github.com/containers/podman/v3/libpod/network/types"
"github.com/containers/podman/v3/pkg/domain/entities/reports"
"github.com/containers/podman/v3/pkg/specgen"
)
diff --git a/pkg/domain/entities/events.go b/pkg/domain/entities/events.go
index 73a375b94..fa815d7b9 100644
--- a/pkg/domain/entities/events.go
+++ b/pkg/domain/entities/events.go
@@ -42,7 +42,7 @@ func ConvertToLibpodEvent(e Event) *libpodEvents.Event {
Image: image,
Name: name,
Status: status,
- Time: time.Unix(e.Time, e.TimeNano),
+ Time: time.Unix(0, e.TimeNano),
Type: t,
Details: libpodEvents.Details{
Attributes: details,
diff --git a/pkg/domain/entities/network.go b/pkg/domain/entities/network.go
index 34b89ae7d..79edc3227 100644
--- a/pkg/domain/entities/network.go
+++ b/pkg/domain/entities/network.go
@@ -3,7 +3,7 @@ package entities
import (
"net"
- "github.com/containers/podman/v3/libpod/network/types"
+ "github.com/containers/common/libnetwork/types"
)
// NetworkListOptions describes options for listing networks in cli
diff --git a/pkg/domain/entities/pods.go b/pkg/domain/entities/pods.go
index 1b5a1be51..cc9476d79 100644
--- a/pkg/domain/entities/pods.go
+++ b/pkg/domain/entities/pods.go
@@ -139,6 +139,7 @@ type PodCreateOptions struct {
Volume []string `json:"volume,omitempty"`
VolumesFrom []string `json:"volumes_from,omitempty"`
SecurityOpt []string `json:"security_opt,omitempty"`
+ Sysctl []string `json:"sysctl,omitempty"`
}
// PodLogsOptions describes the options to extract pod logs.
@@ -240,7 +241,7 @@ type ContainerCreateOptions struct {
StorageOpts []string
SubUIDName string
SubGIDName string
- Sysctl []string
+ Sysctl []string `json:"sysctl,omitempty"`
Systemd string
Timeout uint
TLSVerify commonFlag.OptionalBool
@@ -360,6 +361,15 @@ func ToPodSpecGen(s specgen.PodSpecGenerator, p *PodCreateOptions) (*specgen.Pod
}
}
s.Userns = p.Userns
+ sysctl := map[string]string{}
+ if ctl := p.Sysctl; len(ctl) > 0 {
+ sysctl, err = util.ValidateSysctls(ctl)
+ if err != nil {
+ return nil, err
+ }
+ }
+ s.Sysctl = sysctl
+
return &s, nil
}
diff --git a/pkg/domain/entities/types.go b/pkg/domain/entities/types.go
index 0348c0af5..ec30b6f9a 100644
--- a/pkg/domain/entities/types.go
+++ b/pkg/domain/entities/types.go
@@ -4,9 +4,9 @@ import (
"net"
buildahDefine "github.com/containers/buildah/define"
+ "github.com/containers/common/libnetwork/types"
"github.com/containers/podman/v3/libpod/define"
"github.com/containers/podman/v3/libpod/events"
- "github.com/containers/podman/v3/libpod/network/types"
"github.com/containers/podman/v3/pkg/specgen"
"github.com/containers/storage/pkg/archive"
)
diff --git a/pkg/domain/infra/abi/containers.go b/pkg/domain/infra/abi/containers.go
index a4522698e..afd25d313 100644
--- a/pkg/domain/infra/abi/containers.go
+++ b/pkg/domain/infra/abi/containers.go
@@ -357,24 +357,56 @@ func (ic *ContainerEngine) ContainerRm(ctx context.Context, namesOrIds []string,
return rmReports, nil
}
+ alreadyRemoved := make(map[string]bool)
+ addReports := func(newReports []*reports.RmReport) {
+ for i := range newReports {
+ alreadyRemoved[newReports[i].Id] = true
+ rmReports = append(rmReports, newReports[i])
+ }
+ }
if !options.All && options.Depend {
// Add additional containers based on dependencies to container map
for _, ctr := range ctrs {
+ if alreadyRemoved[ctr.ID()] {
+ continue
+ }
reports, err := ic.Libpod.RemoveDepend(ctx, ctr, options.Force, options.Volumes, options.Timeout)
if err != nil {
return rmReports, err
}
- rmReports = append(rmReports, reports...)
+ addReports(reports)
}
return rmReports, nil
}
+
+ // If --all is set, make sure to remove the infra containers'
+ // dependencies before doing the parallel removal below.
+ if options.All {
+ for _, ctr := range ctrs {
+ if alreadyRemoved[ctr.ID()] || !ctr.IsInfra() {
+ continue
+ }
+ reports, err := ic.Libpod.RemoveDepend(ctx, ctr, options.Force, options.Volumes, options.Timeout)
+ if err != nil {
+ return rmReports, err
+ }
+ addReports(reports)
+ }
+ }
+
errMap, err := parallelctr.ContainerOp(ctx, ctrs, func(c *libpod.Container) error {
+ if alreadyRemoved[c.ID()] {
+ return nil
+ }
return ic.removeContainer(ctx, c, options)
})
if err != nil {
return nil, err
}
for ctr, err := range errMap {
+ if alreadyRemoved[ctr.ID()] {
+ continue
+ }
report := new(reports.RmReport)
report.Id = ctr.ID()
report.Err = err
diff --git a/pkg/domain/infra/abi/network.go b/pkg/domain/infra/abi/network.go
index c7b12663c..196fd3656 100644
--- a/pkg/domain/infra/abi/network.go
+++ b/pkg/domain/infra/abi/network.go
@@ -3,9 +3,9 @@ package abi
import (
"context"
+ "github.com/containers/common/libnetwork/types"
+ netutil "github.com/containers/common/libnetwork/util"
"github.com/containers/podman/v3/libpod/define"
- "github.com/containers/podman/v3/libpod/network/types"
- netutil "github.com/containers/podman/v3/libpod/network/util"
"github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/util"
"github.com/pkg/errors"
diff --git a/pkg/domain/infra/abi/play.go b/pkg/domain/infra/abi/play.go
index 40c31b163..25aae7019 100644
--- a/pkg/domain/infra/abi/play.go
+++ b/pkg/domain/infra/abi/play.go
@@ -13,11 +13,11 @@ import (
buildahDefine "github.com/containers/buildah/define"
"github.com/containers/common/libimage"
+ nettypes "github.com/containers/common/libnetwork/types"
"github.com/containers/common/pkg/config"
"github.com/containers/image/v5/types"
"github.com/containers/podman/v3/libpod"
"github.com/containers/podman/v3/libpod/define"
- nettypes "github.com/containers/podman/v3/libpod/network/types"
"github.com/containers/podman/v3/pkg/autoupdate"
"github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/specgen"
diff --git a/pkg/domain/infra/tunnel/containers.go b/pkg/domain/infra/tunnel/containers.go
index 4f72eab96..ae689f1f7 100644
--- a/pkg/domain/infra/tunnel/containers.go
+++ b/pkg/domain/infra/tunnel/containers.go
@@ -188,35 +188,53 @@ func (ic *ContainerEngine) ContainerRm(ctx context.Context, namesOrIds []string,
if opts.Timeout != nil {
options = options.WithTimeout(*opts.Timeout)
}
+
+ toRemove := []string{}
+ alreadyRemoved := make(map[string]bool) // Avoids trying to remove already removed containers
if opts.All {
- ctrs, err := getContainersByContext(ic.ClientCtx, opts.All, opts.Ignore, namesOrIds)
+ ctrs, err := getContainersByContext(ic.ClientCtx, opts.All, opts.Ignore, nil)
if err != nil {
return nil, err
}
- rmReports := make([]*reports.RmReport, 0, len(ctrs))
for _, c := range ctrs {
- report, err := containers.Remove(ic.ClientCtx, c.ID, options)
+ toRemove = append(toRemove, c.ID)
+ }
+ } else {
+ for _, ctr := range namesOrIds {
+ // NOTE that we set ignore=true here to support
+ // removing external containers (e.g., Buildah
+ // containers). If we don't find the container,
+ // we'll use the raw input provided by the user
+ // instead of the ID. Since this can only happen
+ // with external containers, it poses no threat
+ // to the `alreadyRemoved` checks below.
+ ctrs, err := getContainersByContext(ic.ClientCtx, false, true, []string{ctr})
if err != nil {
- return rmReports, err
+ return nil, err
}
- rmReports = append(rmReports, report...)
+ id := ctr
+ if len(ctrs) == 1 {
+ id = ctrs[0].ID
+ }
+ toRemove = append(toRemove, id)
}
- return rmReports, nil
}
- rmReports := make([]*reports.RmReport, 0, len(namesOrIds))
- for _, name := range namesOrIds {
- report, err := containers.Remove(ic.ClientCtx, name, options)
+ rmReports := make([]*reports.RmReport, 0, len(toRemove))
+ for _, nameOrID := range toRemove {
+ if alreadyRemoved[nameOrID] {
+ continue
+ }
+ newReports, err := containers.Remove(ic.ClientCtx, nameOrID, options)
if err != nil {
- rmReports = append(rmReports, &reports.RmReport{
- Id: name,
- Err: err,
- })
+ rmReports = append(rmReports, &reports.RmReport{Id: nameOrID, Err: err})
continue
}
- rmReports = append(rmReports, report...)
+ for i := range newReports {
+ alreadyRemoved[newReports[i].Id] = true
+ rmReports = append(rmReports, newReports[i])
+ }
}
-
return rmReports, nil
}
diff --git a/pkg/domain/infra/tunnel/network.go b/pkg/domain/infra/tunnel/network.go
index b5050345a..0f1430b1a 100644
--- a/pkg/domain/infra/tunnel/network.go
+++ b/pkg/domain/infra/tunnel/network.go
@@ -3,8 +3,8 @@ package tunnel
import (
"context"
+ "github.com/containers/common/libnetwork/types"
"github.com/containers/podman/v3/libpod/define"
- "github.com/containers/podman/v3/libpod/network/types"
"github.com/containers/podman/v3/pkg/bindings/network"
"github.com/containers/podman/v3/pkg/domain/entities"
"github.com/containers/podman/v3/pkg/errorhandling"