Commit 84191eb9 authored by Andrew Kim's avatar Andrew Kim

replace pkg/util/file with k8s.io/utils/path

parent d340dc53
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
"AllowedPrefixes": [ "AllowedPrefixes": [
"k8s.io/utils/exec", "k8s.io/utils/exec",
"k8s.io/utils/integer", "k8s.io/utils/integer",
"k8s.io/utils/path",
"k8s.io/utils/pointer" "k8s.io/utils/pointer"
] ]
}, },
...@@ -77,7 +78,6 @@ ...@@ -77,7 +78,6 @@
"k8s.io/kubernetes/pkg/scheduler/util", "k8s.io/kubernetes/pkg/scheduler/util",
"k8s.io/kubernetes/pkg/security/apparmor", "k8s.io/kubernetes/pkg/security/apparmor",
"k8s.io/kubernetes/pkg/serviceaccount", "k8s.io/kubernetes/pkg/serviceaccount",
"k8s.io/kubernetes/pkg/util/file",
"k8s.io/kubernetes/pkg/util/hash", "k8s.io/kubernetes/pkg/util/hash",
"k8s.io/kubernetes/pkg/util/initsystem", "k8s.io/kubernetes/pkg/util/initsystem",
"k8s.io/kubernetes/pkg/util/ipvs", "k8s.io/kubernetes/pkg/util/ipvs",
......
...@@ -355,7 +355,6 @@ pkg/util/bandwidth ...@@ -355,7 +355,6 @@ pkg/util/bandwidth
pkg/util/config pkg/util/config
pkg/util/ebtables pkg/util/ebtables
pkg/util/env pkg/util/env
pkg/util/file
pkg/util/goroutinemap/exponentialbackoff pkg/util/goroutinemap/exponentialbackoff
pkg/util/initsystem pkg/util/initsystem
pkg/util/iptables pkg/util/iptables
......
...@@ -307,7 +307,6 @@ ...@@ -307,7 +307,6 @@
"k8s.io/kubernetes/pkg/scheduler/api", "k8s.io/kubernetes/pkg/scheduler/api",
"k8s.io/kubernetes/pkg/scheduler/util", "k8s.io/kubernetes/pkg/scheduler/util",
"k8s.io/kubernetes/pkg/security/apparmor", "k8s.io/kubernetes/pkg/security/apparmor",
"k8s.io/kubernetes/pkg/util/file",
"k8s.io/kubernetes/pkg/util/net/sets", "k8s.io/kubernetes/pkg/util/net/sets",
"k8s.io/kubernetes/pkg/util/parsers", "k8s.io/kubernetes/pkg/util/parsers",
"k8s.io/kubernetes/pkg/fieldpath", "k8s.io/kubernetes/pkg/fieldpath",
...@@ -340,6 +339,7 @@ ...@@ -340,6 +339,7 @@
"k8s.io/utils/nsenter", "k8s.io/utils/nsenter",
"k8s.io/utils/integer", "k8s.io/utils/integer",
"k8s.io/utils/io", "k8s.io/utils/io",
"k8s.io/utils/path",
"k8s.io/utils/pointer", "k8s.io/utils/pointer",
"k8s.io/utils/exec" "k8s.io/utils/exec"
] ]
......
...@@ -126,7 +126,6 @@ ...@@ -126,7 +126,6 @@
"k8s.io/kubernetes/pkg/scheduler/volumebinder", "k8s.io/kubernetes/pkg/scheduler/volumebinder",
"k8s.io/kubernetes/pkg/security/apparmor", "k8s.io/kubernetes/pkg/security/apparmor",
"k8s.io/kubernetes/pkg/serviceaccount", "k8s.io/kubernetes/pkg/serviceaccount",
"k8s.io/kubernetes/pkg/util/file",
"k8s.io/kubernetes/pkg/util/goroutinemap", "k8s.io/kubernetes/pkg/util/goroutinemap",
"k8s.io/kubernetes/pkg/util/hash", "k8s.io/kubernetes/pkg/util/hash",
"k8s.io/kubernetes/pkg/util/interrupt", "k8s.io/kubernetes/pkg/util/interrupt",
...@@ -144,6 +143,7 @@ ...@@ -144,6 +143,7 @@
"k8s.io/kubernetes/pkg/volume/util", "k8s.io/kubernetes/pkg/volume/util",
"k8s.io/utils/nsenter", "k8s.io/utils/nsenter",
"k8s.io/utils/io", "k8s.io/utils/io",
"k8s.io/utils/path",
"k8s.io/utils/pointer" "k8s.io/utils/pointer"
], ],
"ForbiddenPrefixes": [] "ForbiddenPrefixes": []
......
...@@ -103,7 +103,6 @@ go_library( ...@@ -103,7 +103,6 @@ go_library(
"//pkg/security/podsecuritypolicy/sysctl:go_default_library", "//pkg/security/podsecuritypolicy/sysctl:go_default_library",
"//pkg/securitycontext:go_default_library", "//pkg/securitycontext:go_default_library",
"//pkg/util/dbus:go_default_library", "//pkg/util/dbus:go_default_library",
"//pkg/util/file:go_default_library",
"//pkg/util/iptables:go_default_library", "//pkg/util/iptables:go_default_library",
"//pkg/util/mount:go_default_library", "//pkg/util/mount:go_default_library",
"//pkg/util/node:go_default_library", "//pkg/util/node:go_default_library",
...@@ -150,6 +149,7 @@ go_library( ...@@ -150,6 +149,7 @@ go_library(
"//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/klog:go_default_library",
"//vendor/k8s.io/utils/exec:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library",
"//vendor/k8s.io/utils/integer:go_default_library", "//vendor/k8s.io/utils/integer:go_default_library",
"//vendor/k8s.io/utils/path:go_default_library",
], ],
) )
......
...@@ -74,7 +74,6 @@ go_library( ...@@ -74,7 +74,6 @@ go_library(
"//pkg/kubelet/metrics:go_default_library", "//pkg/kubelet/metrics:go_default_library",
"//pkg/kubelet/qos:go_default_library", "//pkg/kubelet/qos:go_default_library",
"//pkg/kubelet/types:go_default_library", "//pkg/kubelet/types:go_default_library",
"//pkg/util/file:go_default_library",
"//pkg/util/mount:go_default_library", "//pkg/util/mount:go_default_library",
"//pkg/util/oom:go_default_library", "//pkg/util/oom:go_default_library",
"//pkg/util/procfs:go_default_library", "//pkg/util/procfs:go_default_library",
...@@ -88,6 +87,7 @@ go_library( ...@@ -88,6 +87,7 @@ go_library(
"//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library", "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library",
"//vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd:go_default_library", "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/systemd:go_default_library",
"//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library", "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library",
"//vendor/k8s.io/utils/path:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:nacl": [ "@io_bazel_rules_go//go/platform:nacl": [
"//pkg/kubelet/cadvisor:go_default_library", "//pkg/kubelet/cadvisor:go_default_library",
......
...@@ -56,11 +56,11 @@ import ( ...@@ -56,11 +56,11 @@ import (
"k8s.io/kubernetes/pkg/kubelet/status" "k8s.io/kubernetes/pkg/kubelet/status"
"k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher" "k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher"
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
utilfile "k8s.io/kubernetes/pkg/util/file"
"k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/util/mount"
"k8s.io/kubernetes/pkg/util/oom" "k8s.io/kubernetes/pkg/util/oom"
"k8s.io/kubernetes/pkg/util/procfs" "k8s.io/kubernetes/pkg/util/procfs"
utilsysctl "k8s.io/kubernetes/pkg/util/sysctl" utilsysctl "k8s.io/kubernetes/pkg/util/sysctl"
utilpath "k8s.io/utils/path"
) )
const ( const (
...@@ -179,11 +179,11 @@ func validateSystemRequirements(mountUtil mount.Interface) (features, error) { ...@@ -179,11 +179,11 @@ func validateSystemRequirements(mountUtil mount.Interface) (features, error) {
// Check if cpu quota is available. // Check if cpu quota is available.
// CPU cgroup is required and so it expected to be mounted at this point. // CPU cgroup is required and so it expected to be mounted at this point.
periodExists, err := utilfile.FileExists(path.Join(cpuMountPoint, "cpu.cfs_period_us")) periodExists, err := utilpath.Exists(utilpath.CheckFollowSymlink, path.Join(cpuMountPoint, "cpu.cfs_period_us"))
if err != nil { if err != nil {
klog.Errorf("failed to detect if CPU cgroup cpu.cfs_period_us is available - %v", err) klog.Errorf("failed to detect if CPU cgroup cpu.cfs_period_us is available - %v", err)
} }
quotaExists, err := utilfile.FileExists(path.Join(cpuMountPoint, "cpu.cfs_quota_us")) quotaExists, err := utilpath.Exists(utilpath.CheckFollowSymlink, path.Join(cpuMountPoint, "cpu.cfs_quota_us"))
if err != nil { if err != nil {
klog.Errorf("failed to detect if CPU cgroup cpu.cfs_quota_us is available - %v", err) klog.Errorf("failed to detect if CPU cgroup cpu.cfs_quota_us is available - %v", err)
} }
......
...@@ -30,9 +30,9 @@ import ( ...@@ -30,9 +30,9 @@ import (
"k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/cm"
"k8s.io/kubernetes/pkg/kubelet/config" "k8s.io/kubernetes/pkg/kubelet/config"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
utilfile "k8s.io/kubernetes/pkg/util/file"
"k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/util/mount"
utilnode "k8s.io/kubernetes/pkg/util/node" utilnode "k8s.io/kubernetes/pkg/util/node"
utilpath "k8s.io/utils/path"
) )
// getRootDir returns the full path to the directory under which kubelet can // getRootDir returns the full path to the directory under which kubelet can
...@@ -293,7 +293,7 @@ func (kl *Kubelet) getPodVolumePathListFromDisk(podUID types.UID) ([]string, err ...@@ -293,7 +293,7 @@ func (kl *Kubelet) getPodVolumePathListFromDisk(podUID types.UID) ([]string, err
for _, volumePluginDir := range volumePluginDirs { for _, volumePluginDir := range volumePluginDirs {
volumePluginName := volumePluginDir.Name() volumePluginName := volumePluginDir.Name()
volumePluginPath := filepath.Join(podVolDir, volumePluginName) volumePluginPath := filepath.Join(podVolDir, volumePluginName)
volumeDirs, err := utilfile.ReadDirNoStat(volumePluginPath) volumeDirs, err := utilpath.ReadDirNoStat(volumePluginPath)
if err != nil { if err != nil {
return volumes, fmt.Errorf("Could not read directory %s: %v", volumePluginPath, err) return volumes, fmt.Errorf("Could not read directory %s: %v", volumePluginPath, err)
} }
......
...@@ -14,7 +14,6 @@ go_library( ...@@ -14,7 +14,6 @@ go_library(
"//pkg/features:go_default_library", "//pkg/features:go_default_library",
"//pkg/kubelet/config:go_default_library", "//pkg/kubelet/config:go_default_library",
"//pkg/kubelet/volumemanager/cache:go_default_library", "//pkg/kubelet/volumemanager/cache:go_default_library",
"//pkg/util/file:go_default_library",
"//pkg/util/goroutinemap/exponentialbackoff:go_default_library", "//pkg/util/goroutinemap/exponentialbackoff:go_default_library",
"//pkg/util/mount:go_default_library", "//pkg/util/mount:go_default_library",
"//pkg/util/strings:go_default_library", "//pkg/util/strings:go_default_library",
...@@ -30,6 +29,7 @@ go_library( ...@@ -30,6 +29,7 @@ go_library(
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/klog:go_default_library",
"//vendor/k8s.io/utils/path:go_default_library",
], ],
) )
......
...@@ -36,7 +36,6 @@ import ( ...@@ -36,7 +36,6 @@ import (
"k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/kubelet/config" "k8s.io/kubernetes/pkg/kubelet/config"
"k8s.io/kubernetes/pkg/kubelet/volumemanager/cache" "k8s.io/kubernetes/pkg/kubelet/volumemanager/cache"
utilfile "k8s.io/kubernetes/pkg/util/file"
"k8s.io/kubernetes/pkg/util/goroutinemap/exponentialbackoff" "k8s.io/kubernetes/pkg/util/goroutinemap/exponentialbackoff"
"k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/util/mount"
utilstrings "k8s.io/kubernetes/pkg/util/strings" utilstrings "k8s.io/kubernetes/pkg/util/strings"
...@@ -45,6 +44,7 @@ import ( ...@@ -45,6 +44,7 @@ import (
"k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations" "k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations"
"k8s.io/kubernetes/pkg/volume/util/operationexecutor" "k8s.io/kubernetes/pkg/volume/util/operationexecutor"
volumetypes "k8s.io/kubernetes/pkg/volume/util/types" volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
utilpath "k8s.io/utils/path"
) )
// Reconciler runs a periodic loop to reconcile the desired state of the world // Reconciler runs a periodic loop to reconcile the desired state of the world
...@@ -673,7 +673,7 @@ func getVolumesFromPodDir(podDir string) ([]podVolume, error) { ...@@ -673,7 +673,7 @@ func getVolumesFromPodDir(podDir string) ([]podVolume, error) {
for _, volumeDir := range volumesDirInfo { for _, volumeDir := range volumesDirInfo {
pluginName := volumeDir.Name() pluginName := volumeDir.Name()
volumePluginPath := path.Join(volumesDir, pluginName) volumePluginPath := path.Join(volumesDir, pluginName)
volumePluginDirs, err := utilfile.ReadDirNoStat(volumePluginPath) volumePluginDirs, err := utilpath.ReadDirNoStat(volumePluginPath)
if err != nil { if err != nil {
klog.Errorf("Could not read volume plugin directory %q: %v", volumePluginPath, err) klog.Errorf("Could not read volume plugin directory %q: %v", volumePluginPath, err)
continue continue
......
...@@ -22,10 +22,10 @@ go_library( ...@@ -22,10 +22,10 @@ go_library(
importpath = "k8s.io/kubernetes/pkg/master/tunneler", importpath = "k8s.io/kubernetes/pkg/master/tunneler",
deps = [ deps = [
"//pkg/ssh:go_default_library", "//pkg/ssh:go_default_library",
"//pkg/util/file:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/klog:go_default_library",
"//vendor/k8s.io/utils/path:go_default_library",
], ],
) )
......
...@@ -31,7 +31,7 @@ import ( ...@@ -31,7 +31,7 @@ import (
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
"k8s.io/klog" "k8s.io/klog"
"k8s.io/kubernetes/pkg/ssh" "k8s.io/kubernetes/pkg/ssh"
utilfile "k8s.io/kubernetes/pkg/util/file" utilpath "k8s.io/utils/path"
) )
type InstallSSHKey func(ctx context.Context, user string, data []byte) error type InstallSSHKey func(ctx context.Context, user string, data []byte) error
...@@ -119,7 +119,7 @@ func (c *SSHTunneler) Run(getAddresses AddressFunc) { ...@@ -119,7 +119,7 @@ func (c *SSHTunneler) Run(getAddresses AddressFunc) {
// public keyfile is written last, so check for that. // public keyfile is written last, so check for that.
publicKeyFile := c.SSHKeyfile + ".pub" publicKeyFile := c.SSHKeyfile + ".pub"
exists, err := utilfile.FileExists(publicKeyFile) exists, err := utilpath.Exists(utilpath.CheckFollowSymlink, publicKeyFile)
if err != nil { if err != nil {
klog.Errorf("Error detecting if key exists: %v", err) klog.Errorf("Error detecting if key exists: %v", err)
} else if !exists { } else if !exists {
...@@ -208,7 +208,7 @@ func generateSSHKey(privateKeyfile, publicKeyfile string) error { ...@@ -208,7 +208,7 @@ func generateSSHKey(privateKeyfile, publicKeyfile string) error {
} }
// If private keyfile already exists, we must have only made it halfway // If private keyfile already exists, we must have only made it halfway
// through last time, so delete it. // through last time, so delete it.
exists, err := utilfile.FileExists(privateKeyfile) exists, err := utilpath.Exists(utilpath.CheckFollowSymlink, privateKeyfile)
if err != nil { if err != nil {
klog.Errorf("Error detecting if private key exists: %v", err) klog.Errorf("Error detecting if private key exists: %v", err)
} else if exists { } else if exists {
......
...@@ -17,9 +17,9 @@ go_library( ...@@ -17,9 +17,9 @@ go_library(
deps = [ deps = [
"//pkg/features:go_default_library", "//pkg/features:go_default_library",
"//pkg/kubelet/types:go_default_library", "//pkg/kubelet/types:go_default_library",
"//pkg/util/file:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//vendor/k8s.io/utils/path:go_default_library",
], ],
) )
......
...@@ -29,7 +29,7 @@ import ( ...@@ -29,7 +29,7 @@ import (
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/features"
kubetypes "k8s.io/kubernetes/pkg/kubelet/types" kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
utilfile "k8s.io/kubernetes/pkg/util/file" utilpath "k8s.io/utils/path"
) )
// Whether AppArmor should be disabled by default. // Whether AppArmor should be disabled by default.
...@@ -195,7 +195,7 @@ func getAppArmorFS() (string, error) { ...@@ -195,7 +195,7 @@ func getAppArmorFS() (string, error) {
} }
if fields[2] == "securityfs" { if fields[2] == "securityfs" {
appArmorFS := path.Join(fields[1], "apparmor") appArmorFS := path.Join(fields[1], "apparmor")
if ok, err := utilfile.FileExists(appArmorFS); !ok { if ok, err := utilpath.Exists(utilpath.CheckFollowSymlink, appArmorFS); !ok {
msg := fmt.Sprintf("path %s does not exist", appArmorFS) msg := fmt.Sprintf("path %s does not exist", appArmorFS)
if err != nil { if err != nil {
return "", fmt.Errorf("%s: %v", msg, err) return "", fmt.Errorf("%s: %v", msg, err)
......
...@@ -20,7 +20,6 @@ filegroup( ...@@ -20,7 +20,6 @@ filegroup(
"//pkg/util/dbus:all-srcs", "//pkg/util/dbus:all-srcs",
"//pkg/util/ebtables:all-srcs", "//pkg/util/ebtables:all-srcs",
"//pkg/util/env:all-srcs", "//pkg/util/env:all-srcs",
"//pkg/util/file:all-srcs",
"//pkg/util/filesystem:all-srcs", "//pkg/util/filesystem:all-srcs",
"//pkg/util/flag:all-srcs", "//pkg/util/flag:all-srcs",
"//pkg/util/flock:all-srcs", "//pkg/util/flock:all-srcs",
......
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library(
name = "go_default_library",
srcs = ["file.go"],
importpath = "k8s.io/kubernetes/pkg/util/file",
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
)
go_test(
name = "go_default_test",
srcs = ["file_test.go"],
embed = [":go_default_library"],
deps = [
"//vendor/github.com/spf13/afero:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library",
],
)
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package file
import (
"os"
)
// FileExists checks if specified file exists.
func FileExists(filename string) (bool, error) {
if _, err := os.Stat(filename); os.IsNotExist(err) {
return false, nil
} else if err != nil {
return false, err
}
return true, nil
}
// FileOrSymlinkExists checks if specified file or symlink exists.
func FileOrSymlinkExists(filename string) (bool, error) {
if _, err := os.Lstat(filename); os.IsNotExist(err) {
return false, nil
} else if err != nil {
return false, err
}
return true, nil
}
// ReadDirNoStat returns a string of files/directories contained
// in dirname without calling lstat on them.
func ReadDirNoStat(dirname string) ([]string, error) {
if dirname == "" {
dirname = "."
}
f, err := os.Open(dirname)
if err != nil {
return nil, err
}
defer f.Close()
return f.Readdirnames(-1)
}
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package file
import (
"os"
"path/filepath"
"sort"
"testing"
"github.com/spf13/afero"
"github.com/stretchr/testify/assert"
)
func RecoverEnv(wd, tmpDir string) {
os.Chdir(wd)
os.RemoveAll(tmpDir)
}
func TestFileUtils(t *testing.T) {
fs := &afero.Afero{Fs: afero.NewOsFs()}
// Create tmp dir
tmpDir, err := fs.TempDir(os.TempDir(), "util_file_test_")
if err != nil {
t.Fatal("Failed to test: failed to create temp dir.")
}
// create tmp file
tmpFile, err := fs.TempFile(tmpDir, "test_file_exists_")
if err != nil {
t.Fatal("Failed to test: failed to create temp file.")
}
// create tmp sym link
tmpSymlinkName := filepath.Join(tmpDir, "test_file_exists_sym_link")
err = os.Symlink(tmpFile.Name(), tmpSymlinkName)
if err != nil {
t.Fatal("Failed to test: failed to create sym link.")
}
// create tmp sub dir
tmpSubDir, err := fs.TempDir(tmpDir, "sub_")
if err != nil {
t.Fatal("Failed to test: failed to create temp sub dir.")
}
// record the current dir
currentDir, err := os.Getwd()
if err != nil {
t.Fatal("Failed to test: failed to get current dir.")
}
// change the work dir to temp dir
err = os.Chdir(tmpDir)
if err != nil {
t.Fatal("Failed to test: failed to change work dir.")
}
// recover test environment
defer RecoverEnv(currentDir, tmpDir)
t.Run("TestFileExists", func(t *testing.T) {
tests := []struct {
name string
fileName string
expectedError bool
expectedValue bool
}{
{"file_not_exists", filepath.Join(tmpDir, "file_not_exist_case"), false, false},
{"file_exists", tmpFile.Name(), false, true},
}
for _, test := range tests {
realValued, realError := FileExists(test.fileName)
if test.expectedError {
assert.Errorf(t, realError, "Failed to test with '%s': %s", test.fileName, test.name)
} else {
assert.EqualValuesf(t, test.expectedValue, realValued, "Failed to test with '%s': %s", test.fileName, test.name)
}
}
})
t.Run("TestFileOrSymlinkExists", func(t *testing.T) {
tests := []struct {
name string
fileName string
expectedError bool
expectedValue bool
}{
{"file_not_exists", filepath.Join(tmpDir, "file_not_exist_case"), false, false},
{"file_exists", tmpFile.Name(), false, true},
{"symlink_exists", tmpSymlinkName, false, true},
}
for _, test := range tests {
realValued, realError := FileOrSymlinkExists(test.fileName)
if test.expectedError {
assert.Errorf(t, realError, "Failed to test with '%s': %s", test.fileName, test.name)
} else {
assert.EqualValuesf(t, test.expectedValue, realValued, "Failed to test with '%s': %s", test.fileName, test.name)
}
}
})
t.Run("TestReadDirNoStat", func(t *testing.T) {
_, tmpFileSimpleName := filepath.Split(tmpFile.Name())
_, tmpSymlinkSimpleName := filepath.Split(tmpSymlinkName)
_, tmpSubDirSimpleName := filepath.Split(tmpSubDir)
tests := []struct {
name string
dirName string
expectedError bool
expectedValue []string
}{
{"dir_not_exists", filepath.Join(tmpDir, "file_not_exist_case"), true, []string{}},
{"dir_is_empty", "", false, []string{tmpFileSimpleName, tmpSymlinkSimpleName, tmpSubDirSimpleName}},
{"dir_exists", tmpDir, false, []string{tmpFileSimpleName, tmpSymlinkSimpleName, tmpSubDirSimpleName}},
}
for _, test := range tests {
realValued, realError := ReadDirNoStat(test.dirName)
// execute sort action before compare
sort.Strings(realValued)
sort.Strings(test.expectedValue)
if test.expectedError {
assert.Errorf(t, realError, "Failed to test with '%s': %s", test.dirName, test.name)
} else {
assert.EqualValuesf(t, test.expectedValue, realValued, "Failed to test with '%s': %s", test.dirName, test.name)
}
}
})
}
...@@ -35,11 +35,11 @@ go_library( ...@@ -35,11 +35,11 @@ go_library(
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:linux": [ "@io_bazel_rules_go//go/platform:linux": [
"//pkg/util/file:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//vendor/golang.org/x/sys/unix:go_default_library", "//vendor/golang.org/x/sys/unix:go_default_library",
"//vendor/k8s.io/utils/io:go_default_library", "//vendor/k8s.io/utils/io:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
"//vendor/k8s.io/utils/path:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:nacl": [ "@io_bazel_rules_go//go/platform:nacl": [
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
...@@ -57,8 +57,8 @@ go_library( ...@@ -57,8 +57,8 @@ go_library(
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
], ],
"@io_bazel_rules_go//go/platform:windows": [ "@io_bazel_rules_go//go/platform:windows": [
"//pkg/util/file:go_default_library",
"//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library",
"//vendor/k8s.io/utils/path:go_default_library",
], ],
"//conditions:default": [], "//conditions:default": [],
}), }),
......
...@@ -33,9 +33,9 @@ import ( ...@@ -33,9 +33,9 @@ import (
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
"k8s.io/klog" "k8s.io/klog"
utilfile "k8s.io/kubernetes/pkg/util/file"
utilexec "k8s.io/utils/exec" utilexec "k8s.io/utils/exec"
utilio "k8s.io/utils/io" utilio "k8s.io/utils/io"
utilpath "k8s.io/utils/path"
) )
const ( const (
...@@ -417,7 +417,7 @@ func (mounter *Mounter) MakeFile(pathname string) error { ...@@ -417,7 +417,7 @@ func (mounter *Mounter) MakeFile(pathname string) error {
} }
func (mounter *Mounter) ExistsPath(pathname string) (bool, error) { func (mounter *Mounter) ExistsPath(pathname string) (bool, error) {
return utilfile.FileExists(pathname) return utilpath.Exists(utilpath.CheckFollowSymlink, pathname)
} }
func (mounter *Mounter) EvalHostSymlinks(pathname string) (string, error) { func (mounter *Mounter) EvalHostSymlinks(pathname string) (string, error) {
......
...@@ -30,7 +30,7 @@ import ( ...@@ -30,7 +30,7 @@ import (
"k8s.io/klog" "k8s.io/klog"
utilfile "k8s.io/kubernetes/pkg/util/file" utilpath "k8s.io/utils/path"
) )
// Mounter provides the default implementation of mount.Interface // Mounter provides the default implementation of mount.Interface
...@@ -235,7 +235,7 @@ func (mounter *Mounter) MakeFile(pathname string) error { ...@@ -235,7 +235,7 @@ func (mounter *Mounter) MakeFile(pathname string) error {
// ExistsPath checks whether the path exists // ExistsPath checks whether the path exists
func (mounter *Mounter) ExistsPath(pathname string) (bool, error) { func (mounter *Mounter) ExistsPath(pathname string) (bool, error) {
return utilfile.FileExists(pathname) return utilpath.Exists(utilpath.CheckFollowSymlink, pathname)
} }
// EvalHostSymlinks returns the path name after evaluating symlinks // EvalHostSymlinks returns the path name after evaluating symlinks
......
...@@ -27,8 +27,8 @@ import ( ...@@ -27,8 +27,8 @@ import (
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
"k8s.io/klog" "k8s.io/klog"
utilfile "k8s.io/kubernetes/pkg/util/file"
"k8s.io/utils/nsenter" "k8s.io/utils/nsenter"
utilpath "k8s.io/utils/path"
) )
const ( const (
...@@ -291,7 +291,7 @@ func (mounter *NsenterMounter) ExistsPath(pathname string) (bool, error) { ...@@ -291,7 +291,7 @@ func (mounter *NsenterMounter) ExistsPath(pathname string) (bool, error) {
return false, err return false, err
} }
kubeletpath := mounter.ne.KubeletPath(hostPath) kubeletpath := mounter.ne.KubeletPath(hostPath)
return utilfile.FileExists(kubeletpath) return utilpath.Exists(utilpath.CheckFollowSymlink, kubeletpath)
} }
func (mounter *NsenterMounter) EvalHostSymlinks(pathname string) (string, error) { func (mounter *NsenterMounter) EvalHostSymlinks(pathname string) (string, error) {
......
...@@ -20,7 +20,6 @@ go_library( ...@@ -20,7 +20,6 @@ go_library(
"//pkg/cloudprovider/providers/gce:go_default_library", "//pkg/cloudprovider/providers/gce:go_default_library",
"//pkg/features:go_default_library", "//pkg/features:go_default_library",
"//pkg/kubelet/apis:go_default_library", "//pkg/kubelet/apis:go_default_library",
"//pkg/util/file:go_default_library",
"//pkg/util/mount:go_default_library", "//pkg/util/mount:go_default_library",
"//pkg/util/strings:go_default_library", "//pkg/util/strings:go_default_library",
"//pkg/volume:go_default_library", "//pkg/volume:go_default_library",
...@@ -35,6 +34,7 @@ go_library( ...@@ -35,6 +34,7 @@ go_library(
"//staging/src/k8s.io/cloud-provider:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library",
"//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/klog:go_default_library",
"//vendor/k8s.io/utils/exec:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library",
"//vendor/k8s.io/utils/path:go_default_library",
], ],
) )
......
...@@ -32,11 +32,11 @@ import ( ...@@ -32,11 +32,11 @@ import (
gcecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce" gcecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
"k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/features"
kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
utilfile "k8s.io/kubernetes/pkg/util/file"
"k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/util/mount"
"k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume"
volumeutil "k8s.io/kubernetes/pkg/volume/util" volumeutil "k8s.io/kubernetes/pkg/volume/util"
"k8s.io/utils/exec" "k8s.io/utils/exec"
utilpath "k8s.io/utils/path"
) )
const ( const (
...@@ -236,7 +236,7 @@ func verifyDevicePath(devicePaths []string, sdBeforeSet sets.String, diskName st ...@@ -236,7 +236,7 @@ func verifyDevicePath(devicePaths []string, sdBeforeSet sets.String, diskName st
// Calls scsi_id on the given devicePath to get the serial number reported by that device. // Calls scsi_id on the given devicePath to get the serial number reported by that device.
func getScsiSerial(devicePath, diskName string) (string, error) { func getScsiSerial(devicePath, diskName string) (string, error) {
exists, err := utilfile.FileExists("/lib/udev/scsi_id") exists, err := utilpath.Exists(utilpath.CheckFollowSymlink, "/lib/udev/scsi_id")
if err != nil { if err != nil {
return "", fmt.Errorf("failed to check scsi_id existence: %v", err) return "", fmt.Errorf("failed to check scsi_id existence: %v", err)
} }
......
...@@ -31,7 +31,6 @@ go_test( ...@@ -31,7 +31,6 @@ go_test(
srcs = ["host_path_test.go"], srcs = ["host_path_test.go"],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//pkg/util/file:go_default_library",
"//pkg/util/mount:go_default_library", "//pkg/util/mount:go_default_library",
"//pkg/volume:go_default_library", "//pkg/volume:go_default_library",
"//pkg/volume/testing:go_default_library", "//pkg/volume/testing:go_default_library",
...@@ -41,6 +40,7 @@ go_test( ...@@ -41,6 +40,7 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//vendor/k8s.io/utils/path:go_default_library",
], ],
) )
......
...@@ -27,10 +27,10 @@ import ( ...@@ -27,10 +27,10 @@ import (
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/uuid" "k8s.io/apimachinery/pkg/util/uuid"
"k8s.io/client-go/kubernetes/fake" "k8s.io/client-go/kubernetes/fake"
utilfile "k8s.io/kubernetes/pkg/util/file"
utilmount "k8s.io/kubernetes/pkg/util/mount" utilmount "k8s.io/kubernetes/pkg/util/mount"
"k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume"
volumetest "k8s.io/kubernetes/pkg/volume/testing" volumetest "k8s.io/kubernetes/pkg/volume/testing"
utilpath "k8s.io/utils/path"
) )
func newHostPathType(pathType string) *v1.HostPathType { func newHostPathType(pathType string) *v1.HostPathType {
...@@ -122,7 +122,7 @@ func TestDeleter(t *testing.T) { ...@@ -122,7 +122,7 @@ func TestDeleter(t *testing.T) {
if err := deleter.Delete(); err != nil { if err := deleter.Delete(); err != nil {
t.Errorf("Mock Recycler expected to return nil but got %s", err) t.Errorf("Mock Recycler expected to return nil but got %s", err)
} }
if exists, _ := utilfile.FileExists(tempPath); exists { if exists, _ := utilpath.Exists(utilpath.CheckFollowSymlink, tempPath); exists {
t.Errorf("Temp path expected to be deleted, but was found at %s", tempPath) t.Errorf("Temp path expected to be deleted, but was found at %s", tempPath)
} }
} }
......
...@@ -18,7 +18,6 @@ go_library( ...@@ -18,7 +18,6 @@ go_library(
importpath = "k8s.io/kubernetes/pkg/volume/rbd", importpath = "k8s.io/kubernetes/pkg/volume/rbd",
deps = [ deps = [
"//pkg/features:go_default_library", "//pkg/features:go_default_library",
"//pkg/util/file:go_default_library",
"//pkg/util/mount:go_default_library", "//pkg/util/mount:go_default_library",
"//pkg/util/node:go_default_library", "//pkg/util/node:go_default_library",
"//pkg/util/strings:go_default_library", "//pkg/util/strings:go_default_library",
...@@ -36,6 +35,7 @@ go_library( ...@@ -36,6 +35,7 @@ go_library(
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/klog:go_default_library",
"//vendor/k8s.io/utils/path:go_default_library",
], ],
) )
......
...@@ -37,11 +37,11 @@ import ( ...@@ -37,11 +37,11 @@ import (
"k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/errors"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
"k8s.io/klog" "k8s.io/klog"
fileutil "k8s.io/kubernetes/pkg/util/file"
"k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/util/mount"
"k8s.io/kubernetes/pkg/util/node" "k8s.io/kubernetes/pkg/util/node"
"k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume"
volutil "k8s.io/kubernetes/pkg/volume/util" volutil "k8s.io/kubernetes/pkg/volume/util"
utilpath "k8s.io/utils/path"
) )
const ( const (
...@@ -486,7 +486,7 @@ func (util *RBDUtil) DetachDisk(plugin *rbdPlugin, deviceMountPath string, devic ...@@ -486,7 +486,7 @@ func (util *RBDUtil) DetachDisk(plugin *rbdPlugin, deviceMountPath string, devic
// Currently, we don't persist rbd info on the disk, but for backward // Currently, we don't persist rbd info on the disk, but for backward
// compatbility, we need to clean it if found. // compatbility, we need to clean it if found.
rbdFile := path.Join(deviceMountPath, "rbd.json") rbdFile := path.Join(deviceMountPath, "rbd.json")
exists, err := fileutil.FileExists(rbdFile) exists, err := utilpath.Exists(utilpath.CheckFollowSymlink, rbdFile)
if err != nil { if err != nil {
return err return err
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment