mirror of
https://github.com/containers/podman.git
synced 2025-10-17 11:14:40 +08:00
pkg: switch to golang native error wrapping
We now use the golang error wrapping format specifier `%w` instead of the deprecated github.com/pkg/errors package. [NO NEW TESTS NEEDED] Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
This commit is contained in:
@ -1,6 +1,8 @@
|
||||
package specgen
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
@ -8,7 +10,6 @@ import (
|
||||
"github.com/containers/podman/v4/libpod/define"
|
||||
"github.com/containers/podman/v4/pkg/rootless"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -23,7 +24,7 @@ var (
|
||||
)
|
||||
|
||||
func exclusiveOptions(opt1, opt2 string) error {
|
||||
return errors.Errorf("%s and %s are mutually exclusive options", opt1, opt2)
|
||||
return fmt.Errorf("%s and %s are mutually exclusive options", opt1, opt2)
|
||||
}
|
||||
|
||||
// Validate verifies that the given SpecGenerator is valid and satisfies required
|
||||
@ -33,18 +34,18 @@ func (s *SpecGenerator) Validate() error {
|
||||
// associated with them because those should be on the infra container.
|
||||
if len(s.Pod) > 0 && s.NetNS.NSMode == FromPod {
|
||||
if len(s.Networks) > 0 {
|
||||
return errors.Wrap(define.ErrNetworkOnPodContainer, "networks must be defined when the pod is created")
|
||||
return fmt.Errorf("networks must be defined when the pod is created: %w", define.ErrNetworkOnPodContainer)
|
||||
}
|
||||
if len(s.PortMappings) > 0 || s.PublishExposedPorts {
|
||||
return errors.Wrap(define.ErrNetworkOnPodContainer, "published or exposed ports must be defined when the pod is created")
|
||||
return fmt.Errorf("published or exposed ports must be defined when the pod is created: %w", define.ErrNetworkOnPodContainer)
|
||||
}
|
||||
if len(s.HostAdd) > 0 {
|
||||
return errors.Wrap(define.ErrNetworkOnPodContainer, "extra host entries must be specified on the pod")
|
||||
return fmt.Errorf("extra host entries must be specified on the pod: %w", define.ErrNetworkOnPodContainer)
|
||||
}
|
||||
}
|
||||
|
||||
if s.NetNS.IsContainer() && len(s.HostAdd) > 0 {
|
||||
return errors.Wrap(ErrInvalidSpecConfig, "cannot set extra host entries when the container is joined to another containers network namespace")
|
||||
return fmt.Errorf("cannot set extra host entries when the container is joined to another containers network namespace: %w", ErrInvalidSpecConfig)
|
||||
}
|
||||
|
||||
//
|
||||
@ -52,23 +53,23 @@ func (s *SpecGenerator) Validate() error {
|
||||
//
|
||||
// Rootfs and Image cannot both populated
|
||||
if len(s.ContainerStorageConfig.Image) > 0 && len(s.ContainerStorageConfig.Rootfs) > 0 {
|
||||
return errors.Wrap(ErrInvalidSpecConfig, "both image and rootfs cannot be simultaneously")
|
||||
return fmt.Errorf("both image and rootfs cannot be simultaneously: %w", ErrInvalidSpecConfig)
|
||||
}
|
||||
// Cannot set hostname and utsns
|
||||
if len(s.ContainerBasicConfig.Hostname) > 0 && !s.ContainerBasicConfig.UtsNS.IsPrivate() {
|
||||
if s.ContainerBasicConfig.UtsNS.IsPod() {
|
||||
return errors.Wrap(ErrInvalidSpecConfig, "cannot set hostname when joining the pod UTS namespace")
|
||||
return fmt.Errorf("cannot set hostname when joining the pod UTS namespace: %w", ErrInvalidSpecConfig)
|
||||
}
|
||||
|
||||
return errors.Wrap(ErrInvalidSpecConfig, "cannot set hostname when running in the host UTS namespace")
|
||||
return fmt.Errorf("cannot set hostname when running in the host UTS namespace: %w", ErrInvalidSpecConfig)
|
||||
}
|
||||
// systemd values must be true, false, or always
|
||||
if len(s.ContainerBasicConfig.Systemd) > 0 && !util.StringInSlice(strings.ToLower(s.ContainerBasicConfig.Systemd), SystemDValues) {
|
||||
return errors.Wrapf(ErrInvalidSpecConfig, "--systemd values must be one of %q", strings.Join(SystemDValues, ", "))
|
||||
return fmt.Errorf("--systemd values must be one of %q: %w", strings.Join(SystemDValues, ", "), ErrInvalidSpecConfig)
|
||||
}
|
||||
// sdnotify values must be container, conmon, or ignore
|
||||
if len(s.ContainerBasicConfig.SdNotifyMode) > 0 && !util.StringInSlice(strings.ToLower(s.ContainerBasicConfig.SdNotifyMode), SdNotifyModeValues) {
|
||||
return errors.Wrapf(ErrInvalidSpecConfig, "--sdnotify values must be one of %q", strings.Join(SdNotifyModeValues, ", "))
|
||||
return fmt.Errorf("--sdnotify values must be one of %q: %w", strings.Join(SdNotifyModeValues, ", "), ErrInvalidSpecConfig)
|
||||
}
|
||||
|
||||
//
|
||||
@ -80,12 +81,12 @@ func (s *SpecGenerator) Validate() error {
|
||||
}
|
||||
// imagevolumemode must be one of ignore, tmpfs, or anonymous if given
|
||||
if len(s.ContainerStorageConfig.ImageVolumeMode) > 0 && !util.StringInSlice(strings.ToLower(s.ContainerStorageConfig.ImageVolumeMode), ImageVolumeModeValues) {
|
||||
return errors.Errorf("invalid ImageVolumeMode %q, value must be one of %s",
|
||||
return fmt.Errorf("invalid ImageVolumeMode %q, value must be one of %s",
|
||||
s.ContainerStorageConfig.ImageVolumeMode, strings.Join(ImageVolumeModeValues, ","))
|
||||
}
|
||||
// shmsize conflicts with IPC namespace
|
||||
if s.ContainerStorageConfig.ShmSize != nil && (s.ContainerStorageConfig.IpcNS.IsHost() || s.ContainerStorageConfig.IpcNS.IsNone()) {
|
||||
return errors.Errorf("cannot set shmsize when running in the %s IPC Namespace", s.ContainerStorageConfig.IpcNS)
|
||||
return fmt.Errorf("cannot set shmsize when running in the %s IPC Namespace", s.ContainerStorageConfig.IpcNS)
|
||||
}
|
||||
|
||||
//
|
||||
@ -93,7 +94,7 @@ func (s *SpecGenerator) Validate() error {
|
||||
//
|
||||
// userns and idmappings conflict
|
||||
if s.UserNS.IsPrivate() && s.IDMappings == nil {
|
||||
return errors.Wrap(ErrInvalidSpecConfig, "IDMappings are required when not creating a User namespace")
|
||||
return fmt.Errorf("IDMappings are required when not creating a User namespace: %w", ErrInvalidSpecConfig)
|
||||
}
|
||||
|
||||
//
|
||||
@ -143,11 +144,11 @@ func (s *SpecGenerator) Validate() error {
|
||||
for _, limit := range tmpnproc {
|
||||
limitSplit := strings.SplitN(limit, "=", 2)
|
||||
if len(limitSplit) < 2 {
|
||||
return errors.Wrapf(invalidUlimitFormatError, "missing = in %s", limit)
|
||||
return fmt.Errorf("missing = in %s: %w", limit, invalidUlimitFormatError)
|
||||
}
|
||||
valueSplit := strings.SplitN(limitSplit[1], ":", 2)
|
||||
if len(valueSplit) < 2 {
|
||||
return errors.Wrapf(invalidUlimitFormatError, "missing : in %s", limit)
|
||||
return fmt.Errorf("missing : in %s: %w", limit, invalidUlimitFormatError)
|
||||
}
|
||||
hard, err := strconv.Atoi(valueSplit[0])
|
||||
if err != nil {
|
||||
@ -197,7 +198,7 @@ func (s *SpecGenerator) Validate() error {
|
||||
}
|
||||
if s.NetNS.NSMode != Bridge && len(s.Networks) > 0 {
|
||||
// Note that we also get the ip and mac in the networks map
|
||||
return errors.New("Networks and static ip/mac address can only be used with Bridge mode networking")
|
||||
return errors.New("networks and static ip/mac address can only be used with Bridge mode networking")
|
||||
}
|
||||
|
||||
return nil
|
||||
|
Reference in New Issue
Block a user