mirror of
https://github.com/containers/podman.git
synced 2025-07-02 08:47:43 +08:00
pkg/specgen: use fileutils.(Le|E)xists
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
@ -14,6 +14,7 @@ import (
|
||||
"github.com/containers/podman/v5/libpod/define"
|
||||
"github.com/containers/podman/v5/pkg/rootless"
|
||||
"github.com/containers/podman/v5/pkg/util"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/runtime-tools/generate"
|
||||
@ -133,7 +134,7 @@ func addDevice(g *generate.Generator, device string) error {
|
||||
return fmt.Errorf("%s is not a valid device: %w", src, err)
|
||||
}
|
||||
if rootless.IsRootless() {
|
||||
if _, err := os.Stat(src); err != nil {
|
||||
if err := fileutils.Exists(src); err != nil {
|
||||
return err
|
||||
}
|
||||
perm := "ro"
|
||||
|
@ -5,12 +5,14 @@ package kube
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"os"
|
||||
|
||||
"github.com/containers/common/pkg/parse"
|
||||
"github.com/containers/common/pkg/secrets"
|
||||
"github.com/containers/podman/v5/libpod"
|
||||
v1 "github.com/containers/podman/v5/pkg/k8s.io/api/core/v1"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
"sigs.k8s.io/yaml"
|
||||
@ -69,7 +71,7 @@ func VolumeFromHostPath(hostPath *v1.HostPathVolumeSource, mountLabel string) (*
|
||||
return nil, fmt.Errorf("giving %s a label: %w", hostPath.Path, err)
|
||||
}
|
||||
case v1.HostPathFileOrCreate:
|
||||
if _, err := os.Stat(hostPath.Path); os.IsNotExist(err) {
|
||||
if err := fileutils.Exists(hostPath.Path); errors.Is(err, fs.ErrNotExist) {
|
||||
f, err := os.OpenFile(hostPath.Path, os.O_RDONLY|os.O_CREATE, kubeFilePermission)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("creating HostPath: %w", err)
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
"github.com/containers/podman/v5/libpod"
|
||||
"github.com/containers/podman/v5/libpod/define"
|
||||
"github.com/containers/podman/v5/pkg/specgen"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/runtime-tools/generate"
|
||||
"github.com/sirupsen/logrus"
|
||||
@ -18,7 +19,7 @@ func specConfigureNamespaces(s *specgen.SpecGenerator, g *generate.Generator, rt
|
||||
// PID
|
||||
switch s.PidNS.NSMode {
|
||||
case specgen.Path:
|
||||
if _, err := os.Stat(s.PidNS.Value); err != nil {
|
||||
if err := fileutils.Exists(s.PidNS.Value); err != nil {
|
||||
return fmt.Errorf("cannot find specified PID namespace path: %w", err)
|
||||
}
|
||||
if err := g.AddOrReplaceLinuxNamespace(string(spec.PIDNamespace), s.PidNS.Value); err != nil {
|
||||
@ -37,7 +38,7 @@ func specConfigureNamespaces(s *specgen.SpecGenerator, g *generate.Generator, rt
|
||||
// IPC
|
||||
switch s.IpcNS.NSMode {
|
||||
case specgen.Path:
|
||||
if _, err := os.Stat(s.IpcNS.Value); err != nil {
|
||||
if err := fileutils.Exists(s.IpcNS.Value); err != nil {
|
||||
return fmt.Errorf("cannot find specified IPC namespace path: %w", err)
|
||||
}
|
||||
if err := g.AddOrReplaceLinuxNamespace(string(spec.IPCNamespace), s.IpcNS.Value); err != nil {
|
||||
@ -56,7 +57,7 @@ func specConfigureNamespaces(s *specgen.SpecGenerator, g *generate.Generator, rt
|
||||
// UTS
|
||||
switch s.UtsNS.NSMode {
|
||||
case specgen.Path:
|
||||
if _, err := os.Stat(s.UtsNS.Value); err != nil {
|
||||
if err := fileutils.Exists(s.UtsNS.Value); err != nil {
|
||||
return fmt.Errorf("cannot find specified UTS namespace path: %w", err)
|
||||
}
|
||||
if err := g.AddOrReplaceLinuxNamespace(string(spec.UTSNamespace), s.UtsNS.Value); err != nil {
|
||||
@ -114,7 +115,7 @@ func specConfigureNamespaces(s *specgen.SpecGenerator, g *generate.Generator, rt
|
||||
// Cgroup
|
||||
switch s.CgroupNS.NSMode {
|
||||
case specgen.Path:
|
||||
if _, err := os.Stat(s.CgroupNS.Value); err != nil {
|
||||
if err := fileutils.Exists(s.CgroupNS.Value); err != nil {
|
||||
return fmt.Errorf("cannot find specified cgroup namespace path: %w", err)
|
||||
}
|
||||
if err := g.AddOrReplaceLinuxNamespace(string(spec.CgroupNamespace), s.CgroupNS.Value); err != nil {
|
||||
@ -133,7 +134,7 @@ func specConfigureNamespaces(s *specgen.SpecGenerator, g *generate.Generator, rt
|
||||
// Net
|
||||
switch s.NetNS.NSMode {
|
||||
case specgen.Path:
|
||||
if _, err := os.Stat(s.NetNS.Value); err != nil {
|
||||
if err := fileutils.Exists(s.NetNS.Value); err != nil {
|
||||
return fmt.Errorf("cannot find specified network namespace path: %w", err)
|
||||
}
|
||||
if err := g.AddOrReplaceLinuxNamespace(string(spec.NetworkNamespace), s.NetNS.Value); err != nil {
|
||||
|
@ -6,7 +6,7 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"io/fs"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
@ -18,6 +18,7 @@ import (
|
||||
"github.com/containers/podman/v5/libpod/define"
|
||||
"github.com/containers/podman/v5/pkg/specgen"
|
||||
"github.com/containers/podman/v5/pkg/util"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
@ -391,7 +392,7 @@ func addContainerInitBinary(s *specgen.SpecGenerator, path string) (spec.Mount,
|
||||
if s.Systemd == "always" {
|
||||
return mount, errors.New("cannot use container-init binary with systemd=always")
|
||||
}
|
||||
if _, err := os.Stat(path); os.IsNotExist(err) {
|
||||
if err := fileutils.Exists(path); errors.Is(err, fs.ErrNotExist) {
|
||||
return mount, fmt.Errorf("container-init binary not found on the host: %w", err)
|
||||
}
|
||||
return mount, nil
|
||||
|
@ -13,6 +13,7 @@ import (
|
||||
"github.com/containers/common/pkg/sysinfo"
|
||||
"github.com/containers/podman/v5/pkg/rootless"
|
||||
"github.com/containers/podman/v5/pkg/specgen"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
)
|
||||
|
||||
@ -191,8 +192,8 @@ func verifyContainerResourcesCgroupV2(s *specgen.SpecGenerator) ([]string, error
|
||||
|
||||
memoryMax := filepath.Join("/sys/fs/cgroup", own, "memory.max")
|
||||
memorySwapMax := filepath.Join("/sys/fs/cgroup", own, "memory.swap.max")
|
||||
_, errMemoryMax := os.Stat(memoryMax)
|
||||
_, errMemorySwapMax := os.Stat(memorySwapMax)
|
||||
errMemoryMax := fileutils.Exists(memoryMax)
|
||||
errMemorySwapMax := fileutils.Exists(memorySwapMax)
|
||||
// Differently than cgroup v1, the memory.*max files are not present in the
|
||||
// root directory, so we cannot query directly that, so as best effort use
|
||||
// the current cgroup.
|
||||
|
@ -4,7 +4,6 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/containers/common/libnetwork/types"
|
||||
@ -13,6 +12,7 @@ import (
|
||||
"github.com/containers/podman/v5/pkg/namespaces"
|
||||
"github.com/containers/podman/v5/pkg/rootless"
|
||||
"github.com/containers/podman/v5/pkg/util"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
storageTypes "github.com/containers/storage/types"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/runtime-tools/generate"
|
||||
@ -483,7 +483,7 @@ func SetupUserNS(idmappings *storageTypes.IDMappingOptions, userns Namespace, g
|
||||
var user string
|
||||
switch userns.NSMode {
|
||||
case Path:
|
||||
if _, err := os.Stat(userns.Value); err != nil {
|
||||
if err := fileutils.Exists(userns.Value); err != nil {
|
||||
return user, fmt.Errorf("cannot find specified user namespace path: %w", err)
|
||||
}
|
||||
if err := g.AddOrReplaceLinuxNamespace(string(spec.UserNamespace), userns.Value); err != nil {
|
||||
|
@ -1,9 +1,8 @@
|
||||
package specgen
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/containers/common/pkg/machine"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
)
|
||||
|
||||
func shouldResolveWinPaths() bool {
|
||||
@ -11,8 +10,7 @@ func shouldResolveWinPaths() bool {
|
||||
}
|
||||
|
||||
func shouldResolveUnixWinVariant(path string) bool {
|
||||
_, err := os.Stat(path)
|
||||
return err != nil
|
||||
return fileutils.Exists(path) != nil
|
||||
}
|
||||
|
||||
func resolveRelativeOnWindows(path string) string {
|
||||
|
@ -1,9 +1,9 @@
|
||||
package specgen
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
@ -26,6 +26,5 @@ func resolveRelativeOnWindows(path string) string {
|
||||
}
|
||||
|
||||
func winPathExists(path string) bool {
|
||||
_, err := os.Stat(path)
|
||||
return err == nil
|
||||
return fileutils.Exists(path) == nil
|
||||
}
|
||||
|
@ -981,7 +981,7 @@ EXPOSE 2004-2005/tcp`, ALPINE)
|
||||
session := podmanTest.Podman([]string{"run", "-dt", "--net", "ns:/run/netns/xxy", ALPINE, "wget", "www.redhat.com"})
|
||||
session.Wait(90)
|
||||
Expect(session).To(ExitWithError())
|
||||
Expect(session.ErrorToString()).To(ContainSubstring("stat /run/netns/xxy: no such file or directory"))
|
||||
Expect(session.ErrorToString()).To(ContainSubstring("faccessat /run/netns/xxy: no such file or directory"))
|
||||
})
|
||||
|
||||
It("podman run in custom CNI network with --static-ip", func() {
|
||||
|
@ -419,7 +419,7 @@ EOF
|
||||
|
||||
myvolume=myvol$(random_string)
|
||||
run_podman 125 volume create -o type=bind -o device=/bogus $myvolume
|
||||
is "$output" "Error: invalid volume option device for driver 'local': stat /bogus: no such file or directory" "should fail with bogus directory not existing"
|
||||
is "$output" "Error: invalid volume option device for driver 'local': faccessat /bogus: no such file or directory" "should fail with bogus directory not existing"
|
||||
|
||||
run_podman volume create -o type=bind -o device=/$myvoldir $myvolume
|
||||
is "$output" "$myvolume" "should successfully create myvolume"
|
||||
|
Reference in New Issue
Block a user